From c130905efa4f8e926956907cf090030ef6e650aa Mon Sep 17 00:00:00 2001 From: Evgeny Poberezkin <2769109+epoberezkin@users.noreply.github.com> Date: Wed, 17 Jan 2024 19:31:46 +0000 Subject: [PATCH 01/23] docs: downloads version --- docs/DOWNLOADS.md | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/docs/DOWNLOADS.md b/docs/DOWNLOADS.md index bd88f7a17..a646645d7 100644 --- a/docs/DOWNLOADS.md +++ b/docs/DOWNLOADS.md @@ -7,7 +7,7 @@ revision: 25.11.2023 | Updated 25.11.2023 | Languages: EN | # Download SimpleX apps -The latest stable version is v5.4.2. +The latest stable version is v5.4.3. You can get the latest beta releases from [GitHub](https://github.com/simplex-chat/simplex-chat/releases). @@ -21,24 +21,24 @@ You can get the latest beta releases from [GitHub](https://github.com/simplex-ch Using the same profile as on mobile device is not yet supported – you need to create a separate profile to use desktop apps. -**Linux**: [AppImage](https://github.com/simplex-chat/simplex-chat/releases/download/v5.4.2/simplex-desktop-x86_64.AppImage) (most Linux distros), [Ubuntu 20.04](https://github.com/simplex-chat/simplex-chat/releases/download/v5.4.2/simplex-desktop-ubuntu-20_04-x86_64.deb) (and Debian-based distros), [Ubuntu 22.04](https://github.com/simplex-chat/simplex-chat/releases/download/v5.4.2/simplex-desktop-ubuntu-22_04-x86_64.deb). +**Linux**: [AppImage](https://github.com/simplex-chat/simplex-chat/releases/download/v5.4.3/simplex-desktop-x86_64.AppImage) (most Linux distros), [Ubuntu 20.04](https://github.com/simplex-chat/simplex-chat/releases/download/v5.4.3/simplex-desktop-ubuntu-20_04-x86_64.deb) (and Debian-based distros), [Ubuntu 22.04](https://github.com/simplex-chat/simplex-chat/releases/download/v5.4.3/simplex-desktop-ubuntu-22_04-x86_64.deb). -**Mac**: [x86_64](https://github.com/simplex-chat/simplex-chat/releases/download/v5.4.2/simplex-desktop-macos-x86_64.dmg) (Intel), [aarch64](https://github.com/simplex-chat/simplex-chat/releases/download/v5.4.2/simplex-desktop-macos-aarch64.dmg) (Apple Silicon). +**Mac**: [x86_64](https://github.com/simplex-chat/simplex-chat/releases/download/v5.4.3/simplex-desktop-macos-x86_64.dmg) (Intel), [aarch64](https://github.com/simplex-chat/simplex-chat/releases/download/v5.4.3/simplex-desktop-macos-aarch64.dmg) (Apple Silicon). -**Windows**: [x86_64](https://github.com/simplex-chat/simplex-chat/releases/download/v5.4.2/simplex-desktop-windows-x86_64.msi). +**Windows**: [x86_64](https://github.com/simplex-chat/simplex-chat/releases/download/v5.4.3/simplex-desktop-windows-x86_64.msi). ## Mobile apps **iOS**: [App store](https://apps.apple.com/us/app/simplex-chat/id1605771084), [TestFlight](https://testflight.apple.com/join/DWuT2LQu). -**Android**: [Play store](https://play.google.com/store/apps/details?id=chat.simplex.app), [F-Droid](https://simplex.chat/fdroid/), [APK aarch64](https://github.com/simplex-chat/simplex-chat/releases/download/v5.4.2/simplex.apk), [APK armv7](https://github.com/simplex-chat/simplex-chat/releases/download/v5.4.2/simplex-armv7a.apk). +**Android**: [Play store](https://play.google.com/store/apps/details?id=chat.simplex.app), [F-Droid](https://simplex.chat/fdroid/), [APK aarch64](https://github.com/simplex-chat/simplex-chat/releases/download/v5.4.3/simplex.apk), [APK armv7](https://github.com/simplex-chat/simplex-chat/releases/download/v5.4.3/simplex-armv7a.apk). ## Terminal (console) app See [Using terminal app](/docs/CLI.md). -**Linux**: [Ubuntu 20.04](https://github.com/simplex-chat/simplex-chat/releases/download/v5.4.2/simplex-chat-ubuntu-20_04-x86-64), [Ubuntu 22.04](https://github.com/simplex-chat/simplex-chat/releases/download/v5.4.2/simplex-chat-ubuntu-22_04-x86-64). +**Linux**: [Ubuntu 20.04](https://github.com/simplex-chat/simplex-chat/releases/download/v5.4.3/simplex-chat-ubuntu-20_04-x86-64), [Ubuntu 22.04](https://github.com/simplex-chat/simplex-chat/releases/download/v5.4.3/simplex-chat-ubuntu-22_04-x86-64). -**Mac** [x86_64](https://github.com/simplex-chat/simplex-chat/releases/download/v5.4.2/simplex-chat-macos-x86-64), aarch64 - [compile from source](./CLI.md#). +**Mac** [x86_64](https://github.com/simplex-chat/simplex-chat/releases/download/v5.4.3/simplex-chat-macos-x86-64), aarch64 - [compile from source](./CLI.md#). -**Windows**: [x86_64](https://github.com/simplex-chat/simplex-chat/releases/download/v5.4.2/simplex-chat-windows-x86-64). +**Windows**: [x86_64](https://github.com/simplex-chat/simplex-chat/releases/download/v5.4.3/simplex-chat-windows-x86-64). From 2884ad9fde558193f2ac7370538894e2b18f9575 Mon Sep 17 00:00:00 2001 From: Evgeny Poberezkin Date: Wed, 17 Jan 2024 22:47:41 +0000 Subject: [PATCH 02/23] readme: update link to users group --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index ddfa0bb2a..91b015f7f 100644 --- a/README.md +++ b/README.md @@ -72,7 +72,7 @@ You must: Messages not following these rules will be deleted, the right to send messages may be revoked, and the access to the new members to the group may be temporarily restricted, to prevent re-joining under a different name - our imperfect group moderation does not have a better solution at the moment. -You can join an English-speaking users group if you want to ask any questions: [#SimpleX-Group-4](https://simplex.chat/contact#/?v=1-2&smp=smp%3A%2F%2Fu2dS9sG8nMNURyZwqASV4yROM28Er0luVTx5X1CsMrU%3D%40smp4.simplex.im%2Fw2GlucRXtRVgYnbt_9ZP-kmt76DekxxS%23%2F%3Fv%3D1-2%26dh%3DMCowBQYDK2VuAyEA0tJhTyMGUxznwmjb7aT24P1I1Wry_iURTuhOFlMb1Eo%253D%26srv%3Do5vmywmrnaxalvz6wi3zicyftgio6psuvyniis6gco6bp6ekl4cqj4id.onion&data=%7B%22type%22%3A%22group%22%2C%22groupLinkId%22%3A%22WoPxjFqGEDlVazECOSi2dg%3D%3D%22%7D) +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: From 3c7e37ee9d0e7087375d48ff2f71777a9eb97dda Mon Sep 17 00:00:00 2001 From: spaced4ndy <8711996+spaced4ndy@users.noreply.github.com> Date: Thu, 18 Jan 2024 15:43:26 +0400 Subject: [PATCH 03/23] android: profile updated chat items (#3700) --- .../chat/simplex/common/model/ChatModel.kt | 63 ++++++++++++++++++- .../commonMain/resources/MR/base/strings.xml | 9 +++ 2 files changed, 69 insertions(+), 3 deletions(-) diff --git a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/model/ChatModel.kt b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/model/ChatModel.kt index 5ec9d1f1e..abd6e4fa3 100644 --- a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/model/ChatModel.kt +++ b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/model/ChatModel.kt @@ -1645,8 +1645,26 @@ data class ChatItem ( val encryptedFile: Boolean? = if (file?.fileSource == null) null else file.fileSource.cryptoArgs != null val memberDisplayName: String? get() = - if (chatDir is CIDirection.GroupRcv) chatDir.groupMember.chatViewName - else null + when (chatDir) { + is CIDirection.GroupRcv -> when (content) { + is CIContent.RcvGroupEventContent -> when (val event = content.rcvGroupEvent) { + is RcvGroupEvent.MemberProfileUpdated -> { + val to = event.toProfile + val from = event.fromProfile + when { + to.displayName != from.displayName || to.fullName != from.fullName -> null + else -> chatDir.groupMember.chatViewName + } + } + + else -> chatDir.groupMember.chatViewName + } + + else -> chatDir.groupMember.chatViewName + } + + else -> null + } val isDeletedContent: Boolean get() = when (content) { @@ -1719,7 +1737,10 @@ data class ChatItem ( is CIContent.RcvDecryptionError -> showNtfDir is CIContent.RcvGroupInvitation -> showNtfDir is CIContent.SndGroupInvitation -> showNtfDir - is CIContent.RcvDirectEventContent -> false + is CIContent.RcvDirectEventContent -> when (content.rcvDirectEvent) { + is RcvDirectEvent.ContactDeleted -> false + is RcvDirectEvent.ProfileUpdated -> true + } is CIContent.RcvGroupEventContent -> when (content.rcvGroupEvent) { is RcvGroupEvent.MemberAdded -> false is RcvGroupEvent.MemberConnected -> false @@ -1732,6 +1753,7 @@ data class ChatItem ( is RcvGroupEvent.GroupUpdated -> false is RcvGroupEvent.InvitedViaGroupLink -> false is RcvGroupEvent.MemberCreatedContact -> false + is RcvGroupEvent.MemberProfileUpdated -> false } is CIContent.SndGroupEventContent -> showNtfDir is CIContent.RcvConnEventContent -> false @@ -2835,10 +2857,30 @@ sealed class MsgErrorType() { @Serializable sealed class RcvDirectEvent() { @Serializable @SerialName("contactDeleted") class ContactDeleted(): RcvDirectEvent() + @Serializable @SerialName("profileUpdated") class ProfileUpdated(val fromProfile: Profile, val toProfile: Profile): RcvDirectEvent() val text: String get() = when (this) { is ContactDeleted -> generalGetString(MR.strings.rcv_direct_event_contact_deleted) + is ProfileUpdated -> profileUpdatedText(fromProfile, toProfile) } + + private fun profileUpdatedText(from: Profile, to: Profile): String = + when { + to.displayName != from.displayName || to.fullName != from.fullName -> + generalGetString(MR.strings.profile_update_event_contact_name_changed).format(from.profileViewName, to.profileViewName) + + to.image != from.image -> when (to.image) { + null -> generalGetString(MR.strings.profile_update_event_removed_picture) + else -> generalGetString(MR.strings.profile_update_event_set_new_picture) + } + + to.contactLink != from.contactLink -> when (to.contactLink) { + null -> generalGetString(MR.strings.profile_update_event_removed_address) + else -> generalGetString(MR.strings.profile_update_event_set_new_address) + } + // shouldn't happen if backend correctly creates item; UI should be synchronized with backend + else -> generalGetString(MR.strings.profile_update_event_updated_profile) + } } @Serializable @@ -2854,6 +2896,7 @@ sealed class RcvGroupEvent() { @Serializable @SerialName("groupUpdated") class GroupUpdated(val groupProfile: GroupProfile): RcvGroupEvent() @Serializable @SerialName("invitedViaGroupLink") class InvitedViaGroupLink(): RcvGroupEvent() @Serializable @SerialName("memberCreatedContact") class MemberCreatedContact(): RcvGroupEvent() + @Serializable @SerialName("memberProfileUpdated") class MemberProfileUpdated(val fromProfile: Profile, val toProfile: Profile): RcvGroupEvent() val text: String get() = when (this) { is MemberAdded -> String.format(generalGetString(MR.strings.rcv_group_event_member_added), profile.profileViewName) @@ -2867,7 +2910,21 @@ sealed class RcvGroupEvent() { is GroupUpdated -> generalGetString(MR.strings.rcv_group_event_updated_group_profile) is InvitedViaGroupLink -> generalGetString(MR.strings.rcv_group_event_invited_via_your_group_link) is MemberCreatedContact -> generalGetString(MR.strings.rcv_group_event_member_created_contact) + is MemberProfileUpdated -> profileUpdatedText(fromProfile, toProfile) } + + private fun profileUpdatedText(from: Profile, to: Profile): String = + when { + to.displayName != from.displayName || to.fullName != from.fullName -> + generalGetString(MR.strings.profile_update_event_member_name_changed).format(from.profileViewName, to.profileViewName) + + to.image != from.image -> when (to.image) { + null -> generalGetString(MR.strings.profile_update_event_removed_picture) + else -> generalGetString(MR.strings.profile_update_event_set_new_picture) + } + // shouldn't happen if backend correctly creates item; UI should be synchronized with backend + else -> generalGetString(MR.strings.profile_update_event_updated_profile) + } } @Serializable diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/base/strings.xml b/apps/multiplatform/common/src/commonMain/resources/MR/base/strings.xml index 9a885f34e..cda7df43f 100644 --- a/apps/multiplatform/common/src/commonMain/resources/MR/base/strings.xml +++ b/apps/multiplatform/common/src/commonMain/resources/MR/base/strings.xml @@ -1193,6 +1193,15 @@ Open + + contact %1$s changed to %2$s + removed profile picture + set new profile picture + removed contact address + set new contact address + updated profile + member %1$s changed to %2$s + changed address for you changing address… From b5fe1f836453ef0c38dfaf91555f028069155105 Mon Sep 17 00:00:00 2001 From: Stanislav Dmitrenko <7953703+avently@users.noreply.github.com> Date: Thu, 18 Jan 2024 22:57:14 +0700 Subject: [PATCH 04/23] ios: notes to self (#3690) * ios: notes to self * change * icon * changes * no live message * search * alert * better checks * api change * changes for review * changes * ios: align notes chat color with sent chat items frame color (#3704) * changes --------- Co-authored-by: Avently Co-authored-by: Evgeny Poberezkin <2769109+epoberezkin@users.noreply.github.com> Co-authored-by: spaced4ndy <8711996+spaced4ndy@users.noreply.github.com> --- apps/ios/Shared/Model/ChatModel.swift | 2 + apps/ios/Shared/Model/SimpleXAPI.swift | 15 ++++ .../Views/Chat/ChatItem/CIFileView.swift | 10 ++- .../Views/Chat/ChatItem/CIImageView.swift | 2 + .../Views/Chat/ChatItem/CIVideoView.swift | 7 +- .../Views/Chat/ChatItem/FramedItemView.swift | 2 + .../Shared/Views/Chat/ChatItemInfoView.swift | 17 ++++- apps/ios/Shared/Views/Chat/ChatView.swift | 12 ++-- .../Chat/ComposeMessage/ComposeView.swift | 22 +++--- .../Views/ChatList/ChatListNavLink.swift | 40 +++++++++++ .../Shared/Views/ChatList/ChatListView.swift | 2 + .../Views/ChatList/ChatPreviewView.swift | 4 +- .../Shared/Views/Helpers/ChatInfoImage.swift | 6 +- .../ios/SimpleX NSE/NotificationService.swift | 2 + apps/ios/SimpleXChat/APITypes.swift | 5 ++ apps/ios/SimpleXChat/ChatTypes.swift | 69 +++++++++++++++++++ apps/ios/SimpleXChat/FileUtils.swift | 3 + 17 files changed, 197 insertions(+), 23 deletions(-) diff --git a/apps/ios/Shared/Model/ChatModel.swift b/apps/ios/Shared/Model/ChatModel.swift index 21ef80cf6..6a15a3965 100644 --- a/apps/ios/Shared/Model/ChatModel.swift +++ b/apps/ios/Shared/Model/ChatModel.swift @@ -756,6 +756,8 @@ final class Chat: ObservableObject, Identifiable { case let .group(groupInfo): let m = groupInfo.membership return m.memberActive && m.memberRole >= .member + case .local: + return true default: return false } } diff --git a/apps/ios/Shared/Model/SimpleXAPI.swift b/apps/ios/Shared/Model/SimpleXAPI.swift index 9f3e96888..c1d0a264b 100644 --- a/apps/ios/Shared/Model/SimpleXAPI.swift +++ b/apps/ios/Shared/Model/SimpleXAPI.swift @@ -365,6 +365,13 @@ func apiSendMessage(type: ChatType, id: Int64, file: CryptoFile?, quotedItemId: } } +func apiCreateChatItem(noteFolderId: Int64, file: CryptoFile?, msg: MsgContent) async -> ChatItem? { + let r = await chatSendCmd(.apiCreateChatItem(noteFolderId: noteFolderId, file: file, msg: msg)) + if case let .newChatItem(_, aChatItem) = r { return aChatItem.chatItem } + createChatItemErrorAlert(r) + return nil +} + private func sendMessageErrorAlert(_ r: ChatResponse) { logger.error("apiSendMessage error: \(String(describing: r))") AlertManager.shared.showAlertMsg( @@ -373,6 +380,14 @@ private func sendMessageErrorAlert(_ r: ChatResponse) { ) } +private func createChatItemErrorAlert(_ r: ChatResponse) { + logger.error("apiCreateChatItem error: \(String(describing: r))") + AlertManager.shared.showAlertMsg( + title: "Error creating message", + message: "Error: \(String(describing: r))" + ) +} + func apiUpdateChatItem(type: ChatType, id: Int64, itemId: Int64, msg: MsgContent, live: Bool = false) async throws -> ChatItem { let r = await chatSendCmd(.apiUpdateChatItem(type: type, id: id, itemId: itemId, msg: msg, live: live), bgDelay: msgDelay) if case let .chatItemUpdated(_, aChatItem) = r { return aChatItem.chatItem } diff --git a/apps/ios/Shared/Views/Chat/ChatItem/CIFileView.swift b/apps/ios/Shared/Views/Chat/ChatItem/CIFileView.swift index b6a070278..c94ba3f83 100644 --- a/apps/ios/Shared/Views/Chat/ChatItem/CIFileView.swift +++ b/apps/ios/Shared/Views/Chat/ChatItem/CIFileView.swift @@ -52,7 +52,7 @@ struct CIFileView: View { private var itemInteractive: Bool { if let file = file { switch (file.fileStatus) { - case .sndStored: return false + case .sndStored: return file.fileProtocol == .local case .sndTransfer: return false case .sndComplete: return false case .sndCancelled: return false @@ -107,12 +107,18 @@ struct CIFileView: View { title: "Waiting for file", message: "File will be received when your contact is online, please wait or check later!" ) + case .local: () } case .rcvComplete: logger.debug("CIFileView fileAction - in .rcvComplete") if let fileSource = getLoadedFileSource(file) { saveCryptoFile(fileSource) } + case .sndStored: + logger.debug("CIFileView fileAction - in .sndStored") + if file.fileProtocol == .local, let fileSource = getLoadedFileSource(file) { + saveCryptoFile(fileSource) + } default: break } } @@ -125,11 +131,13 @@ struct CIFileView: View { switch file.fileProtocol { case .xftp: progressView() case .smp: fileIcon("doc.fill") + case .local: fileIcon("doc.fill") } case let .sndTransfer(sndProgress, sndTotal): switch file.fileProtocol { case .xftp: progressCircle(sndProgress, sndTotal) case .smp: progressView() + case .local: EmptyView() } case .sndComplete: fileIcon("doc.fill", innerIcon: "checkmark", innerIconSize: 10) case .sndCancelled: fileIcon("doc.fill", innerIcon: "xmark", innerIconSize: 10) diff --git a/apps/ios/Shared/Views/Chat/ChatItem/CIImageView.swift b/apps/ios/Shared/Views/Chat/ChatItem/CIImageView.swift index 2e20e56b7..c7e89fc5e 100644 --- a/apps/ios/Shared/Views/Chat/ChatItem/CIImageView.swift +++ b/apps/ios/Shared/Views/Chat/ChatItem/CIImageView.swift @@ -53,6 +53,7 @@ struct CIImageView: View { title: "Waiting for image", message: "Image will be received when your contact is online, please wait or check later!" ) + case .local: () } case .rcvTransfer: () // ? case .rcvComplete: () // ? @@ -90,6 +91,7 @@ struct CIImageView: View { switch file.fileProtocol { case .xftp: progressView() case .smp: EmptyView() + case .local: EmptyView() } case .sndTransfer: progressView() case .sndComplete: fileIcon("checkmark", 10, 13) diff --git a/apps/ios/Shared/Views/Chat/ChatItem/CIVideoView.swift b/apps/ios/Shared/Views/Chat/ChatItem/CIVideoView.swift index e0d2bed47..a824ddc49 100644 --- a/apps/ios/Shared/Views/Chat/ChatItem/CIVideoView.swift +++ b/apps/ios/Shared/Views/Chat/ChatItem/CIVideoView.swift @@ -83,6 +83,7 @@ struct CIVideoView: View { title: "Waiting for video", message: "Video will be received when your contact is online, please wait or check later!" ) + case .local: () } case .rcvTransfer: () // ? case .rcvComplete: () // ? @@ -107,7 +108,7 @@ struct CIVideoView: View { private func videoViewEncrypted(_ file: CIFile, _ defaultPreview: UIImage, _ duration: Int) -> some View { return ZStack(alignment: .topTrailing) { ZStack(alignment: .center) { - let canBePlayed = !chatItem.chatDir.sent || file.fileStatus == CIFileStatus.sndComplete + let canBePlayed = !chatItem.chatDir.sent || file.fileStatus == CIFileStatus.sndComplete || (file.fileStatus == .sndStored && file.fileProtocol == .local) imageView(defaultPreview) .fullScreenCover(isPresented: $showFullScreenPlayer) { if let decrypted = urlDecrypted { @@ -143,7 +144,7 @@ struct CIVideoView: View { DispatchQueue.main.async { videoWidth = w } return ZStack(alignment: .topTrailing) { ZStack(alignment: .center) { - let canBePlayed = !chatItem.chatDir.sent || file.fileStatus == CIFileStatus.sndComplete + let canBePlayed = !chatItem.chatDir.sent || file.fileStatus == CIFileStatus.sndComplete || (file.fileStatus == .sndStored && file.fileProtocol == .local) VideoPlayerView(player: player, url: url, showControls: false) .frame(width: w, height: w * preview.size.height / preview.size.width) .onChange(of: m.stopPreviousRecPlay) { playingUrl in @@ -254,11 +255,13 @@ struct CIVideoView: View { switch file.fileProtocol { case .xftp: progressView() case .smp: EmptyView() + case .local: EmptyView() } case let .sndTransfer(sndProgress, sndTotal): switch file.fileProtocol { case .xftp: progressCircle(sndProgress, sndTotal) case .smp: progressView() + case .local: EmptyView() } case .sndComplete: fileIcon("checkmark", 10, 13) case .sndCancelled: fileIcon("xmark", 10, 13) diff --git a/apps/ios/Shared/Views/Chat/ChatItem/FramedItemView.swift b/apps/ios/Shared/Views/Chat/ChatItem/FramedItemView.swift index 7b5dd40e9..1f0ab9ca4 100644 --- a/apps/ios/Shared/Views/Chat/ChatItem/FramedItemView.swift +++ b/apps/ios/Shared/Views/Chat/ChatItem/FramedItemView.swift @@ -9,6 +9,8 @@ import SwiftUI import SimpleXChat +let notesChatColorLight = Color(.sRGB, red: 0.27, green: 0.72, blue: 1, opacity: 0.21) +let notesChatColorDark = Color(.sRGB, red: 0.27, green: 0.72, blue: 1, opacity: 0.19) let sentColorLight = Color(.sRGB, red: 0.27, green: 0.72, blue: 1, opacity: 0.12) let sentColorDark = Color(.sRGB, red: 0.27, green: 0.72, blue: 1, opacity: 0.17) private let sentQuoteColorLight = Color(.sRGB, red: 0.27, green: 0.72, blue: 1, opacity: 0.11) diff --git a/apps/ios/Shared/Views/Chat/ChatItemInfoView.swift b/apps/ios/Shared/Views/Chat/ChatItemInfoView.swift index 69cfcd2ca..8dd43cc01 100644 --- a/apps/ios/Shared/Views/Chat/ChatItemInfoView.swift +++ b/apps/ios/Shared/Views/Chat/ChatItemInfoView.swift @@ -53,7 +53,9 @@ struct ChatItemInfoView: View { } private var title: String { - ci.chatDir.sent + ci.localNote + ? NSLocalizedString("Saved message", comment: "message info title") + : ci.chatDir.sent ? NSLocalizedString("Sent message", comment: "message info title") : NSLocalizedString("Received message", comment: "message info title") } @@ -110,7 +112,11 @@ struct ChatItemInfoView: View { .bold() .padding(.bottom) - infoRow("Sent at", localTimestamp(meta.itemTs)) + if ci.localNote { + infoRow("Created at", localTimestamp(meta.itemTs)) + } else { + infoRow("Sent at", localTimestamp(meta.itemTs)) + } if !ci.chatDir.sent { infoRow("Received at", localTimestamp(meta.createdAt)) } @@ -350,7 +356,12 @@ struct ChatItemInfoView: View { private func itemInfoShareText() -> String { let meta = ci.meta var shareText: [String] = [String.localizedStringWithFormat(NSLocalizedString("# %@", comment: "copied message info title, # "), title), ""] - shareText += [String.localizedStringWithFormat(NSLocalizedString("Sent at: %@", comment: "copied message info"), localTimestamp(meta.itemTs))] + shareText += [String.localizedStringWithFormat( + ci.localNote + ? NSLocalizedString("Created at: %@", comment: "copied message info") + : NSLocalizedString("Sent at: %@", comment: "copied message info"), + localTimestamp(meta.itemTs)) + ] if !ci.chatDir.sent { shareText += [String.localizedStringWithFormat(NSLocalizedString("Received at: %@", comment: "copied message info"), localTimestamp(meta.createdAt))] } diff --git a/apps/ios/Shared/Views/Chat/ChatView.swift b/apps/ios/Shared/Views/Chat/ChatView.swift index a09c5643b..af53e7e47 100644 --- a/apps/ios/Shared/Views/Chat/ChatView.swift +++ b/apps/ios/Shared/Views/Chat/ChatView.swift @@ -151,6 +151,8 @@ struct ChatView: View { ) ) } + } else if case .local = cInfo { + ChatInfoToolbar(chat: chat) } } ToolbarItem(placement: .navigationBarTrailing) { @@ -205,6 +207,8 @@ struct ChatView: View { Image(systemName: "ellipsis") } } + case .local: + searchButton() default: EmptyView() } @@ -636,7 +640,7 @@ struct ChatView: View { Button("Delete for me", role: .destructive) { deleteMessage(.cidmInternal) } - if let di = deletingItem, di.meta.editable { + if let di = deletingItem, di.meta.editable && !di.localNote { Button(broadcastDeleteButtonText, role: .destructive) { deleteMessage(.cidmBroadcast) } @@ -720,7 +724,7 @@ struct ChatView: View { } menu.append(rm) } - if ci.meta.itemDeleted == nil && !ci.isLiveDummy && !live { + if ci.meta.itemDeleted == nil && !ci.isLiveDummy && !live && !ci.localNote { menu.append(replyUIAction(ci)) } let fileSource = getLoadedFileSource(ci.file) @@ -748,9 +752,9 @@ struct ChatView: View { if revealed { menu.append(hideUIAction()) } - if ci.meta.itemDeleted == nil, + if ci.meta.itemDeleted == nil && !ci.localNote, let file = ci.file, - let cancelAction = file.cancelAction { + let cancelAction = file.cancelAction { menu.append(cancelFileUIAction(file.fileId, cancelAction)) } if !live || !ci.meta.isLive { diff --git a/apps/ios/Shared/Views/Chat/ComposeMessage/ComposeView.swift b/apps/ios/Shared/Views/Chat/ComposeMessage/ComposeView.swift index 1fd006d49..b59792609 100644 --- a/apps/ios/Shared/Views/Chat/ComposeMessage/ComposeView.swift +++ b/apps/ios/Shared/Views/Chat/ComposeMessage/ComposeView.swift @@ -295,7 +295,7 @@ struct ComposeView: View { sendMessage(ttl: ttl) resetLinkPreview() }, - sendLiveMessage: sendLiveMessage, + sendLiveMessage: chat.chatInfo.chatType != .local ? sendLiveMessage : nil, updateLiveMessage: updateLiveMessage, cancelLiveMessage: { composeState.liveMessage = nil @@ -792,15 +792,17 @@ struct ComposeView: View { } func send(_ mc: MsgContent, quoted: Int64?, file: CryptoFile? = nil, live: Bool = false, ttl: Int?) async -> ChatItem? { - if let chatItem = await apiSendMessage( - type: chat.chatInfo.chatType, - id: chat.chatInfo.apiId, - file: file, - quotedItemId: quoted, - msg: mc, - live: live, - ttl: ttl - ) { + if let chatItem = chat.chatInfo.chatType == .local + ? await apiCreateChatItem(noteFolderId: chat.chatInfo.apiId, file: file, msg: mc) + : await apiSendMessage( + type: chat.chatInfo.chatType, + id: chat.chatInfo.apiId, + file: file, + quotedItemId: quoted, + msg: mc, + live: live, + ttl: ttl + ) { await MainActor.run { chatModel.removeLiveDummy(animated: false) chatModel.addChatItem(chat.chatInfo, chatItem) diff --git a/apps/ios/Shared/Views/ChatList/ChatListNavLink.swift b/apps/ios/Shared/Views/ChatList/ChatListNavLink.swift index 18464b3bb..7fbc1e4ac 100644 --- a/apps/ios/Shared/Views/ChatList/ChatListNavLink.swift +++ b/apps/ios/Shared/Views/ChatList/ChatListNavLink.swift @@ -44,6 +44,8 @@ struct ChatListNavLink: View { contactNavLink(contact) case let .group(groupInfo): groupNavLink(groupInfo) + case let .local(noteFolder): + noteFolderNavLink(noteFolder) case let .contactRequest(cReq): contactRequestNavLink(cReq) case let .contactConnection(cConn): @@ -195,6 +197,24 @@ struct ChatListNavLink: View { } } + @ViewBuilder private func noteFolderNavLink(_ noteFolder: NoteFolder) -> some View { + NavLinkPlain( + tag: chat.chatInfo.id, + selection: $chatModel.chatId, + label: { ChatPreviewView(chat: chat, progressByTimeout: Binding.constant(false)) }, + disabled: !noteFolder.ready + ) + .frame(height: rowHeights[dynamicTypeSize]) + .swipeActions(edge: .leading, allowsFullSwipe: true) { + markReadButton() + } + .swipeActions(edge: .trailing, allowsFullSwipe: true) { + if !chat.chatItems.isEmpty { + clearNoteFolderButton() + } + } + } + private func joinGroupButton() -> some View { Button { inProgress = true @@ -253,6 +273,15 @@ struct ChatListNavLink: View { .tint(Color.orange) } + private func clearNoteFolderButton() -> some View { + Button { + AlertManager.shared.showAlert(clearNoteFolderAlert()) + } label: { + Label("Clear", systemImage: "gobackward") + } + .tint(Color.orange) + } + private func leaveGroupChatButton(_ groupInfo: GroupInfo) -> some View { Button { AlertManager.shared.showAlert(leaveGroupAlert(groupInfo)) @@ -357,6 +386,17 @@ struct ChatListNavLink: View { ) } + private func clearNoteFolderAlert() -> Alert { + Alert( + title: Text("Clear private notes?"), + message: Text("All messages will be deleted - this cannot be undone!"), + primaryButton: .destructive(Text("Clear")) { + Task { await clearChat(chat) } + }, + secondaryButton: .cancel() + ) + } + private func leaveGroupAlert(_ groupInfo: GroupInfo) -> Alert { Alert( title: Text("Leave group?"), diff --git a/apps/ios/Shared/Views/ChatList/ChatListView.swift b/apps/ios/Shared/Views/ChatList/ChatListView.swift index 1b4531b08..22807f618 100644 --- a/apps/ios/Shared/Views/ChatList/ChatListView.swift +++ b/apps/ios/Shared/Views/ChatList/ChatListView.swift @@ -247,6 +247,8 @@ struct ChatListView: View { return s == "" ? (filtered(chat) || gInfo.membership.memberStatus == .memInvited) : viewNameContains(cInfo, s) + case .local: + return s == "" || viewNameContains(cInfo, s) case .contactRequest: return s == "" || viewNameContains(cInfo, s) case let .contactConnection(conn): diff --git a/apps/ios/Shared/Views/ChatList/ChatPreviewView.swift b/apps/ios/Shared/Views/ChatList/ChatPreviewView.swift index 0a53e0511..4f57158af 100644 --- a/apps/ios/Shared/Views/ChatList/ChatPreviewView.swift +++ b/apps/ios/Shared/Views/ChatList/ChatPreviewView.swift @@ -134,9 +134,9 @@ struct ChatPreviewView: View { .foregroundColor(.white) .padding(.horizontal, 4) .frame(minWidth: 18, minHeight: 18) - .background(chat.chatInfo.ntfsEnabled ? Color.accentColor : Color.secondary) + .background(chat.chatInfo.ntfsEnabled || chat.chatInfo.chatType == .local ? Color.accentColor : Color.secondary) .cornerRadius(10) - } else if !chat.chatInfo.ntfsEnabled { + } else if !chat.chatInfo.ntfsEnabled && chat.chatInfo.chatType != .local { Image(systemName: "speaker.slash.fill") .foregroundColor(.secondary) } else if chat.chatInfo.chatSettings?.favorite ?? false { diff --git a/apps/ios/Shared/Views/Helpers/ChatInfoImage.swift b/apps/ios/Shared/Views/Helpers/ChatInfoImage.swift index 1b344148c..e253cdd72 100644 --- a/apps/ios/Shared/Views/Helpers/ChatInfoImage.swift +++ b/apps/ios/Shared/Views/Helpers/ChatInfoImage.swift @@ -10,6 +10,7 @@ import SwiftUI import SimpleXChat struct ChatInfoImage: View { + @Environment(\.colorScheme) var colorScheme @ObservedObject var chat: Chat var color = Color(uiColor: .tertiarySystemGroupedBackground) @@ -18,13 +19,16 @@ struct ChatInfoImage: View { switch chat.chatInfo { case .direct: iconName = "person.crop.circle.fill" case .group: iconName = "person.2.circle.fill" + case .local: iconName = "folder.circle.fill" case .contactRequest: iconName = "person.crop.circle.fill" default: iconName = "circle.fill" } + let notesColor = colorScheme == .light ? notesChatColorLight : notesChatColorDark + let iconColor = if case .local = chat.chatInfo { notesColor } else { color } return ProfileImage( imageStr: chat.chatInfo.image, iconName: iconName, - color: color + color: iconColor ) } } diff --git a/apps/ios/SimpleX NSE/NotificationService.swift b/apps/ios/SimpleX NSE/NotificationService.swift index c6b149bf7..61c439fb3 100644 --- a/apps/ios/SimpleX NSE/NotificationService.swift +++ b/apps/ios/SimpleX NSE/NotificationService.swift @@ -783,6 +783,8 @@ func autoReceiveFile(_ file: CIFile) -> ChatItem? { case .xftp: apiSetFileToReceive(fileId: file.fileId, encrypted: encrypted) return nil + case .local: + return nil } } diff --git a/apps/ios/SimpleXChat/APITypes.swift b/apps/ios/SimpleXChat/APITypes.swift index 1a8f935f2..aff0d0dc3 100644 --- a/apps/ios/SimpleXChat/APITypes.swift +++ b/apps/ios/SimpleXChat/APITypes.swift @@ -41,6 +41,7 @@ public enum ChatCommand { case apiGetChat(type: ChatType, id: Int64, pagination: ChatPagination, search: String) case apiGetChatItemInfo(type: ChatType, id: Int64, itemId: Int64) case apiSendMessage(type: ChatType, id: Int64, file: CryptoFile?, quotedItemId: Int64?, msg: MsgContent, live: Bool, ttl: Int?) + case apiCreateChatItem(noteFolderId: Int64, file: CryptoFile?, msg: MsgContent) case apiUpdateChatItem(type: ChatType, id: Int64, itemId: Int64, msg: MsgContent, live: Bool) case apiDeleteChatItem(type: ChatType, id: Int64, itemId: Int64, mode: CIDeleteMode) case apiDeleteMemberChatItem(groupId: Int64, groupMemberId: Int64, itemId: Int64) @@ -178,6 +179,9 @@ public enum ChatCommand { let msg = encodeJSON(ComposedMessage(fileSource: file, quotedItemId: quotedItemId, msgContent: mc)) let ttlStr = ttl != nil ? "\(ttl!)" : "default" return "/_send \(ref(type, id)) live=\(onOff(live)) ttl=\(ttlStr) json \(msg)" + case let .apiCreateChatItem(noteFolderId, file, mc): + let msg = encodeJSON(ComposedMessage(fileSource: file, msgContent: mc)) + return "/_create *\(noteFolderId) json \(msg)" case let .apiUpdateChatItem(type, id, itemId, mc, live): return "/_update item \(ref(type, id)) \(itemId) live=\(onOff(live)) \(mc.cmdString)" 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)" @@ -315,6 +319,7 @@ public enum ChatCommand { case .apiGetChat: return "apiGetChat" case .apiGetChatItemInfo: return "apiGetChatItemInfo" case .apiSendMessage: return "apiSendMessage" + case .apiCreateChatItem: return "apiCreateChatItem" case .apiUpdateChatItem: return "apiUpdateChatItem" case .apiDeleteChatItem: return "apiDeleteChatItem" case .apiConnectContactViaAddress: return "apiConnectContactViaAddress" diff --git a/apps/ios/SimpleXChat/ChatTypes.swift b/apps/ios/SimpleXChat/ChatTypes.swift index 137642fce..5426596a4 100644 --- a/apps/ios/SimpleXChat/ChatTypes.swift +++ b/apps/ios/SimpleXChat/ChatTypes.swift @@ -180,6 +180,7 @@ public struct UserProfileUpdateSummary: Decodable { public enum ChatType: String { case direct = "@" case group = "#" + case local = "*" case contactRequest = "<@" case contactConnection = ":" } @@ -1095,17 +1096,21 @@ public enum GroupFeatureEnabled: String, Codable, Identifiable { public enum ChatInfo: Identifiable, Decodable, NamedChat { case direct(contact: Contact) case group(groupInfo: GroupInfo) + case local(noteFolder: NoteFolder) case contactRequest(contactRequest: UserContactRequest) case contactConnection(contactConnection: PendingContactConnection) case invalidJSON(json: String) private static let invalidChatName = NSLocalizedString("invalid chat", comment: "invalid chat data") + static let privateNotesChatName = NSLocalizedString("Private notes", comment: "name of notes to self") + public var localDisplayName: String { get { switch self { case let .direct(contact): return contact.localDisplayName case let .group(groupInfo): return groupInfo.localDisplayName + case .local: return "" case let .contactRequest(contactRequest): return contactRequest.localDisplayName case let .contactConnection(contactConnection): return contactConnection.localDisplayName case .invalidJSON: return ChatInfo.invalidChatName @@ -1118,6 +1123,7 @@ public enum ChatInfo: Identifiable, Decodable, NamedChat { switch self { case let .direct(contact): return contact.displayName case let .group(groupInfo): return groupInfo.displayName + case .local: return ChatInfo.privateNotesChatName case let .contactRequest(contactRequest): return contactRequest.displayName case let .contactConnection(contactConnection): return contactConnection.displayName case .invalidJSON: return ChatInfo.invalidChatName @@ -1130,6 +1136,7 @@ public enum ChatInfo: Identifiable, Decodable, NamedChat { switch self { case let .direct(contact): return contact.fullName case let .group(groupInfo): return groupInfo.fullName + case .local: return "" case let .contactRequest(contactRequest): return contactRequest.fullName case let .contactConnection(contactConnection): return contactConnection.fullName case .invalidJSON: return ChatInfo.invalidChatName @@ -1142,6 +1149,7 @@ public enum ChatInfo: Identifiable, Decodable, NamedChat { switch self { case let .direct(contact): return contact.image case let .group(groupInfo): return groupInfo.image + case .local: return nil case let .contactRequest(contactRequest): return contactRequest.image case let .contactConnection(contactConnection): return contactConnection.image case .invalidJSON: return nil @@ -1154,6 +1162,7 @@ public enum ChatInfo: Identifiable, Decodable, NamedChat { switch self { case let .direct(contact): return contact.localAlias case let .group(groupInfo): return groupInfo.localAlias + case .local: return "" case let .contactRequest(contactRequest): return contactRequest.localAlias case let .contactConnection(contactConnection): return contactConnection.localAlias case .invalidJSON: return "" @@ -1166,6 +1175,7 @@ public enum ChatInfo: Identifiable, Decodable, NamedChat { switch self { case let .direct(contact): return contact.id case let .group(groupInfo): return groupInfo.id + case let .local(noteFolder): return noteFolder.id case let .contactRequest(contactRequest): return contactRequest.id case let .contactConnection(contactConnection): return contactConnection.id case .invalidJSON: return "" @@ -1178,6 +1188,7 @@ public enum ChatInfo: Identifiable, Decodable, NamedChat { switch self { case .direct: return .direct case .group: return .group + case .local: return .local case .contactRequest: return .contactRequest case .contactConnection: return .contactConnection case .invalidJSON: return .direct @@ -1190,6 +1201,7 @@ public enum ChatInfo: Identifiable, Decodable, NamedChat { switch self { case let .direct(contact): return contact.apiId case let .group(groupInfo): return groupInfo.apiId + case let .local(noteFolder): return noteFolder.apiId case let .contactRequest(contactRequest): return contactRequest.apiId case let .contactConnection(contactConnection): return contactConnection.apiId case .invalidJSON: return 0 @@ -1202,6 +1214,7 @@ public enum ChatInfo: Identifiable, Decodable, NamedChat { switch self { case let .direct(contact): return contact.ready case let .group(groupInfo): return groupInfo.ready + case let .local(noteFolder): return noteFolder.ready case let .contactRequest(contactRequest): return contactRequest.ready case let .contactConnection(contactConnection): return contactConnection.ready case .invalidJSON: return false @@ -1214,6 +1227,7 @@ public enum ChatInfo: Identifiable, Decodable, NamedChat { switch self { case let .direct(contact): return contact.sendMsgEnabled case let .group(groupInfo): return groupInfo.sendMsgEnabled + case let .local(noteFolder): return noteFolder.sendMsgEnabled case let .contactRequest(contactRequest): return contactRequest.sendMsgEnabled case let .contactConnection(contactConnection): return contactConnection.sendMsgEnabled case .invalidJSON: return false @@ -1226,6 +1240,7 @@ public enum ChatInfo: Identifiable, Decodable, NamedChat { switch self { case let .direct(contact): return contact.contactConnIncognito case let .group(groupInfo): return groupInfo.membership.memberIncognito + case .local: return false case .contactRequest: return false case let .contactConnection(contactConnection): return contactConnection.incognito case .invalidJSON: return false @@ -1268,6 +1283,11 @@ public enum ChatInfo: Identifiable, Decodable, NamedChat { case .voice: return prefs.voice.on case .calls: return false } + case .local: + switch feature { + case .voice: return true + default: return false + } default: return false } } @@ -1329,6 +1349,7 @@ public enum ChatInfo: Identifiable, Decodable, NamedChat { switch self { case let .direct(contact): return contact.createdAt case let .group(groupInfo): return groupInfo.createdAt + case let .local(noteFolder): return noteFolder.createdAt case let .contactRequest(contactRequest): return contactRequest.createdAt case let .contactConnection(contactConnection): return contactConnection.createdAt case .invalidJSON: return .now @@ -1339,6 +1360,7 @@ public enum ChatInfo: Identifiable, Decodable, NamedChat { switch self { case let .direct(contact): return contact.updatedAt case let .group(groupInfo): return groupInfo.updatedAt + case let .local(noteFolder): return noteFolder.updatedAt case let .contactRequest(contactRequest): return contactRequest.updatedAt case let .contactConnection(contactConnection): return contactConnection.updatedAt case .invalidJSON: return .now @@ -1348,6 +1370,7 @@ public enum ChatInfo: Identifiable, Decodable, NamedChat { public struct SampleData { public var direct: ChatInfo public var group: ChatInfo + public var local: ChatInfo public var contactRequest: ChatInfo public var contactConnection: ChatInfo } @@ -1355,6 +1378,7 @@ public enum ChatInfo: Identifiable, Decodable, NamedChat { public static var sampleData: ChatInfo.SampleData = SampleData( direct: ChatInfo.direct(contact: Contact.sampleData), group: ChatInfo.group(groupInfo: GroupInfo.sampleData), + local: ChatInfo.local(noteFolder: NoteFolder.sampleData), contactRequest: ChatInfo.contactRequest(contactRequest: UserContactRequest.sampleData), contactConnection: ChatInfo.contactConnection(contactConnection: PendingContactConnection.getSampleData()) ) @@ -2010,6 +2034,37 @@ public enum GroupMemberStatus: String, Decodable { } } +public struct NoteFolder: Identifiable, Decodable, NamedChat { + public var noteFolderId: Int64 + public var favorite: Bool + public var unread: Bool + var createdAt: Date + public var updatedAt: Date + + public var id: ChatId { get { "*\(noteFolderId)" } } + public var apiId: Int64 { get { noteFolderId } } + public var ready: Bool { get { true } } + public var sendMsgEnabled: Bool { get { true } } + public var displayName: String { get { ChatInfo.privateNotesChatName } } + public var fullName: String { get { "" } } + public var image: String? { get { nil } } + public var localAlias: String { get { "" } } + + public var canEdit: Bool { true } + + public var canDelete: Bool { true } + + public var canAddMembers: Bool { false } + + public static let sampleData = NoteFolder( + noteFolderId: 1, + favorite: false, + unread: false, + createdAt: .now, + updatedAt: .now + ) +} + public enum InvitedBy: Decodable { case contact(byContactId: Int64) case user @@ -2262,6 +2317,13 @@ public struct ChatItem: Identifiable, Decodable { } } + public var localNote: Bool { + switch chatDir { + case .localSnd, .localRcv: return true + default: return false + } + } + public func memberToModerate(_ chatInfo: ChatInfo) -> (GroupInfo, GroupMember)? { switch (chatInfo, chatDir) { case let (.group(groupInfo), .groupRcv(groupMember)): @@ -2423,6 +2485,8 @@ public enum CIDirection: Decodable { case directRcv case groupSnd case groupRcv(groupMember: GroupMember) + case localSnd + case localRcv public var sent: Bool { get { @@ -2431,6 +2495,8 @@ public enum CIDirection: Decodable { case .directRcv: return false case .groupSnd: return true case .groupRcv: return false + case .localSnd: return true + case .localRcv: return false } } } @@ -2756,6 +2822,8 @@ public struct CIQuote: Decodable, ItemContent { case .directRcv: return nil case .groupSnd: return membership?.displayName ?? "you" case let .groupRcv(member): return member.displayName + case .localSnd: return "you" + case .localRcv: return nil case nil: return nil } } @@ -2996,6 +3064,7 @@ private var rcvCancelAction = CancelAction( public enum FileProtocol: String, Decodable { case smp = "smp" case xftp = "xftp" + case local = "local" } public enum CIFileStatus: Decodable, Equatable { diff --git a/apps/ios/SimpleXChat/FileUtils.swift b/apps/ios/SimpleXChat/FileUtils.swift index 748a7841d..7496bf721 100644 --- a/apps/ios/SimpleXChat/FileUtils.swift +++ b/apps/ios/SimpleXChat/FileUtils.swift @@ -22,6 +22,8 @@ public let MAX_VIDEO_SIZE_AUTO_RCV: Int64 = 1_047_552 // 1023KB public let MAX_FILE_SIZE_XFTP: Int64 = 1_073_741_824 // 1GB +public let MAX_FILE_SIZE_LOCAL: Int64 = Int64.max + public let MAX_FILE_SIZE_SMP: Int64 = 8000000 public let MAX_VOICE_MESSAGE_LENGTH = TimeInterval(300) @@ -240,6 +242,7 @@ public func getMaxFileSize(_ fileProtocol: FileProtocol) -> Int64 { switch fileProtocol { case .xftp: return MAX_FILE_SIZE_XFTP case .smp: return MAX_FILE_SIZE_SMP + case .local: return MAX_FILE_SIZE_LOCAL } } From ddcd7d495e67f3ff241d07e8c87aa2dcd42624ca Mon Sep 17 00:00:00 2001 From: spaced4ndy <8711996+spaced4ndy@users.noreply.github.com> Date: Thu, 18 Jan 2024 20:07:43 +0400 Subject: [PATCH 05/23] core: reset address and preferences when updating profile of member without associated contact (#3701) --- src/Simplex/Chat/Store/Direct.hs | 21 ++++++++++++++++++++- src/Simplex/Chat/Store/Groups.hs | 4 ++-- 2 files changed, 22 insertions(+), 3 deletions(-) diff --git a/src/Simplex/Chat/Store/Direct.hs b/src/Simplex/Chat/Store/Direct.hs index e271c6b28..43d58d3ff 100644 --- a/src/Simplex/Chat/Store/Direct.hs +++ b/src/Simplex/Chat/Store/Direct.hs @@ -12,6 +12,8 @@ module Simplex.Chat.Store.Direct ( updateContactLDN_, updateContactProfile_, updateContactProfile_', + updateMemberContactProfileReset_', + updateMemberContactProfileReset_, updateMemberContactProfile_, updateMemberContactProfile_', deleteContactProfile_, @@ -455,7 +457,24 @@ updateContactProfile_' db userId profileId Profile {displayName, fullName, image |] (displayName, fullName, image, contactLink, preferences, updatedAt, userId, profileId) --- update only member profile fields +-- update only member profile fields (when member doesn't have associated contact - we can reset contactLink and prefs) +updateMemberContactProfileReset_ :: DB.Connection -> UserId -> ProfileId -> Profile -> IO () +updateMemberContactProfileReset_ db userId profileId profile = do + currentTs <- getCurrentTime + updateMemberContactProfileReset_' db userId profileId profile currentTs + +updateMemberContactProfileReset_' :: DB.Connection -> UserId -> ProfileId -> Profile -> UTCTime -> IO () +updateMemberContactProfileReset_' db userId profileId Profile {displayName, fullName, image} updatedAt = do + DB.execute + db + [sql| + UPDATE contact_profiles + SET display_name = ?, full_name = ?, image = ?, contact_link = NULL, preferences = NULL, updated_at = ? + WHERE user_id = ? AND contact_profile_id = ? + |] + (displayName, fullName, image, updatedAt, userId, profileId) + +-- update only member profile fields (when member has associated contact - we keep contactLink and prefs) updateMemberContactProfile_ :: DB.Connection -> UserId -> ProfileId -> Profile -> IO () updateMemberContactProfile_ db userId profileId profile = do currentTs <- getCurrentTime diff --git a/src/Simplex/Chat/Store/Groups.hs b/src/Simplex/Chat/Store/Groups.hs index c4fddf20c..d16812af2 100644 --- a/src/Simplex/Chat/Store/Groups.hs +++ b/src/Simplex/Chat/Store/Groups.hs @@ -1990,12 +1990,12 @@ createMemberContactConn_ updateMemberProfile :: DB.Connection -> User -> GroupMember -> Profile -> ExceptT StoreError IO GroupMember updateMemberProfile db User {userId} m p' | displayName == newName = do - liftIO $ updateMemberContactProfile_ db userId profileId p' + liftIO $ updateMemberContactProfileReset_ db userId profileId p' pure m {memberProfile = profile} | otherwise = ExceptT . withLocalDisplayName db userId newName $ \ldn -> do currentTs <- getCurrentTime - updateMemberContactProfile_' db userId profileId p' currentTs + updateMemberContactProfileReset_' db userId profileId p' currentTs DB.execute db "UPDATE group_members SET local_display_name = ?, updated_at = ? WHERE user_id = ? AND group_member_id = ?" From c4d75366b57ca13e8b0a9f1968a059c4298fe6df Mon Sep 17 00:00:00 2001 From: Stanislav Dmitrenko <7953703+avently@users.noreply.github.com> Date: Fri, 19 Jan 2024 00:16:44 +0700 Subject: [PATCH 06/23] android, desktop: ability to delete the last profile (#3645) * android, desktop: ability to delete the last profile * hide modals to see onboarding after removing the last visible user * removed unused checks * make multiple profile creation usable * deleting the last user by removing the whole database * adapted to new logic * changes * not deleting the whole database * refactor * hide search when no profile * changes --- .../chat/simplex/common/model/ChatModel.kt | 2 +- .../chat/simplex/common/model/SimpleXAPI.kt | 7 +- .../chat/simplex/common/views/WelcomeView.kt | 5 +- .../common/views/chatlist/ChatListView.kt | 4 +- .../common/views/chatlist/UserPicker.kt | 31 ++--- .../common/views/database/DatabaseView.kt | 11 +- .../common/views/localauth/LocalAuthView.kt | 28 ++--- .../views/onboarding/CreateSimpleXAddress.kt | 13 +- .../common/views/usersettings/SettingsView.kt | 4 +- .../views/usersettings/UserProfilesView.kt | 112 +++++++++--------- .../commonMain/resources/MR/ar/strings.xml | 3 - .../commonMain/resources/MR/base/strings.xml | 3 - .../commonMain/resources/MR/bg/strings.xml | 3 - .../commonMain/resources/MR/cs/strings.xml | 3 - .../commonMain/resources/MR/de/strings.xml | 3 - .../commonMain/resources/MR/es/strings.xml | 3 - .../commonMain/resources/MR/fi/strings.xml | 3 - .../commonMain/resources/MR/fr/strings.xml | 3 - .../commonMain/resources/MR/hu/strings.xml | 3 - .../commonMain/resources/MR/it/strings.xml | 3 - .../commonMain/resources/MR/iw/strings.xml | 3 - .../commonMain/resources/MR/ja/strings.xml | 3 - .../commonMain/resources/MR/ko/strings.xml | 3 - .../commonMain/resources/MR/lt/strings.xml | 3 - .../commonMain/resources/MR/nl/strings.xml | 3 - .../commonMain/resources/MR/pl/strings.xml | 3 - .../resources/MR/pt-rBR/strings.xml | 3 - .../commonMain/resources/MR/pt/strings.xml | 1 - .../commonMain/resources/MR/ru/strings.xml | 3 - .../commonMain/resources/MR/th/strings.xml | 3 - .../commonMain/resources/MR/tr/strings.xml | 3 - .../commonMain/resources/MR/uk/strings.xml | 3 - .../resources/MR/zh-rCN/strings.xml | 3 - .../resources/MR/zh-rTW/strings.xml | 3 - 34 files changed, 110 insertions(+), 177 deletions(-) diff --git a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/model/ChatModel.kt b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/model/ChatModel.kt index abd6e4fa3..e53459015 100644 --- a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/model/ChatModel.kt +++ b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/model/ChatModel.kt @@ -152,7 +152,7 @@ object ChatModel { fun removeUser(user: User) { val i = getUserIndex(user) - if (i != -1 && users[i].user.userId != currentUser.value?.userId) { + if (i != -1) { users.removeAt(i) } } diff --git a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/model/SimpleXAPI.kt b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/model/SimpleXAPI.kt index 97853e2fd..a70b1190d 100644 --- a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/model/SimpleXAPI.kt +++ b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/model/SimpleXAPI.kt @@ -351,7 +351,6 @@ object ChatController { suspend fun startChat(user: User) { Log.d(TAG, "user: $user") try { - if (chatModel.chatRunning.value == true) return apiSetNetworkConfig(getNetCfg()) val justStarted = apiStartChat() appPrefs.chatStopped.set(false) @@ -410,9 +409,9 @@ object ChatController { } } - suspend fun changeActiveUser_(rhId: Long?, toUserId: Long, viewPwd: String?) { + suspend fun changeActiveUser_(rhId: Long?, toUserId: Long?, viewPwd: String?) { val currentUser = changingActiveUserMutex.withLock { - apiSetActiveUser(rhId, toUserId, viewPwd).also { + (if (toUserId != null) apiSetActiveUser(rhId, toUserId, viewPwd) else apiGetActiveUser(rhId)).also { chatModel.currentUser.value = it } } @@ -421,7 +420,7 @@ object ChatController { chatModel.users.addAll(users) getUserChatData(rhId) val invitation = chatModel.callInvitations.values.firstOrNull { inv -> inv.user.userId == toUserId } - if (invitation != null) { + if (invitation != null && currentUser != null) { chatModel.callManager.reportNewIncomingCall(invitation.copy(user = currentUser)) } } diff --git a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/WelcomeView.kt b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/WelcomeView.kt index b9a8b4d9e..c4cbe0683 100644 --- a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/WelcomeView.kt +++ b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/WelcomeView.kt @@ -177,8 +177,10 @@ fun CreateFirstProfile(chatModel: ChatModel, close: () -> Unit) { fun createProfileInNoProfileSetup(displayName: String, close: () -> Unit) { withBGApi { val user = controller.apiCreateActiveUser(null, Profile(displayName.trim(), "", null)) ?: return@withBGApi + if (!chatModel.connectedToRemote()) { + chatModel.localUserCreated.value = true + } controller.appPrefs.onboardingStage.set(OnboardingStage.Step3_CreateSimpleXAddress) - chatModel.chatRunning.value = false controller.startChat(user) controller.switchUIRemoteHost(null) close() @@ -210,6 +212,7 @@ fun createProfileOnboarding(chatModel: ChatModel, displayName: String, close: () chatModel.currentUser.value = chatModel.controller.apiCreateActiveUser( null, Profile(displayName.trim(), "", null) ) ?: return@withBGApi + chatModel.localUserCreated.value = true val onboardingStage = chatModel.controller.appPrefs.onboardingStage if (chatModel.users.isEmpty()) { onboardingStage.set(if (appPlatform.isDesktop && chatModel.controller.appPrefs.initialRandomDBPassphrase.get() && !chatModel.desktopOnboardingRandomPassword.value) { diff --git a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chatlist/ChatListView.kt b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chatlist/ChatListView.kt index 6570db469..28d276b26 100644 --- a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chatlist/ChatListView.kt +++ b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chatlist/ChatListView.kt @@ -107,7 +107,9 @@ fun ChatListView(chatModel: ChatModel, settingsState: SettingsViewState, setPerf modifier = Modifier .fillMaxSize() ) { - ChatList(chatModel, searchText = searchText) + if (!chatModel.desktopNoUserNoRemote) { + ChatList(chatModel, searchText = searchText) + } if (chatModel.chats.isEmpty() && !chatModel.switchingUsersAndHosts.value && !chatModel.desktopNoUserNoRemote) { Text(stringResource( if (chatModel.chatRunning.value == null) MR.strings.loading_chats else MR.strings.you_have_no_chats), Modifier.align(Alignment.Center), color = MaterialTheme.colors.secondary) diff --git a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chatlist/UserPicker.kt b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chatlist/UserPicker.kt index 1c455da00..23272fcc0 100644 --- a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chatlist/UserPicker.kt +++ b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chatlist/UserPicker.kt @@ -213,26 +213,29 @@ fun UserPicker( userPickerState.value = AnimatedViewState.GONE } Divider(Modifier.requiredHeight(1.dp)) - } else if (remoteHosts.isEmpty()) { - LinkAMobilePickerItem { - ModalManager.start.showModal { - ConnectMobileView() + } else { + if (remoteHosts.isEmpty()) { + LinkAMobilePickerItem { + ModalManager.start.showModal { + ConnectMobileView() + } + userPickerState.value = AnimatedViewState.GONE } - userPickerState.value = AnimatedViewState.GONE + Divider(Modifier.requiredHeight(1.dp)) } - Divider(Modifier.requiredHeight(1.dp)) - } else if (chatModel.desktopNoUserNoRemote) { - CreateInitialProfile { - doWithAuth(generalGetString(MR.strings.auth_open_chat_profiles), generalGetString(MR.strings.auth_log_in_using_credential)) { - ModalManager.center.showModalCloseable { close -> - LaunchedEffect(Unit) { - userPickerState.value = AnimatedViewState.HIDING + if (chatModel.desktopNoUserNoRemote) { + CreateInitialProfile { + doWithAuth(generalGetString(MR.strings.auth_open_chat_profiles), generalGetString(MR.strings.auth_log_in_using_credential)) { + ModalManager.center.showModalCloseable { close -> + LaunchedEffect(Unit) { + userPickerState.value = AnimatedViewState.HIDING + } + CreateProfile(chat.simplex.common.platform.chatModel, close) } - CreateProfile(chat.simplex.common.platform.chatModel, close) } } + Divider(Modifier.requiredHeight(1.dp)) } - Divider(Modifier.requiredHeight(1.dp)) } if (showSettings) { SettingsPickerItem(settingsClicked) diff --git a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/database/DatabaseView.kt b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/database/DatabaseView.kt index d4d66a19e..58d3bfd63 100644 --- a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/database/DatabaseView.kt +++ b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/database/DatabaseView.kt @@ -470,10 +470,10 @@ suspend fun deleteChatAsync(m: ChatModel) { m.controller.apiDeleteStorage() DatabaseUtils.ksDatabasePassword.remove() m.controller.appPrefs.storeDBPassphrase.set(true) - deleteAppDatabaseAndFiles() + deleteChatDatabaseFilesAndState() } -fun deleteAppDatabaseAndFiles() { +fun deleteChatDatabaseFilesAndState() { val chat = File(dataDir, chatDatabaseFileName) val chatBak = File(dataDir, "$chatDatabaseFileName.bak") val agent = File(dataDir, agentDatabaseFileName) @@ -489,6 +489,13 @@ fun deleteAppDatabaseAndFiles() { tmpDir.mkdir() DatabaseUtils.ksDatabasePassword.remove() controller.appPrefs.storeDBPassphrase.set(true) + controller.ctrl = null + + // Clear sensitive data on screen just in case ModalManager will fail to prevent hiding its modals while database encrypts itself + chatModel.chatId.value = null + chatModel.chatItems.clear() + chatModel.chats.clear() + chatModel.users.clear() } private fun exportArchive( diff --git a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/localauth/LocalAuthView.kt b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/localauth/LocalAuthView.kt index 16d8a34b1..cf10d33cb 100644 --- a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/localauth/LocalAuthView.kt +++ b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/localauth/LocalAuthView.kt @@ -67,12 +67,7 @@ private fun deleteStorageAndRestart(m: ChatModel, password: String, completed: ( * */ chatCloseStore(ctrl) } - deleteAppDatabaseAndFiles() - // Clear sensitive data on screen just in case ModalManager fails to hide its modals while new database is created - m.chatId.value = null - m.chatItems.clear() - m.chats.clear() - m.users.clear() + deleteChatDatabaseFilesAndState() ksAppPassword.set(password) ksSelfDestructPassword.remove() ntfManager.cancelAllNotifications() @@ -81,14 +76,7 @@ private fun deleteStorageAndRestart(m: ChatModel, password: String, completed: ( val displayName = displayNamePref.get() selfDestructPref.set(false) displayNamePref.set(null) - m.chatDbChanged.value = true - m.chatDbStatus.value = null - try { - initChatController() - } catch (e: Exception) { - Log.d(TAG, "initializeChat ${e.stackTraceToString()}") - } - m.chatDbChanged.value = false + reinitChatController() if (m.currentUser.value != null) { return@withBGApi } @@ -100,7 +88,6 @@ private fun deleteStorageAndRestart(m: ChatModel, password: String, completed: ( m.currentUser.value = createdUser m.controller.appPrefs.onboardingStage.set(OnboardingStage.OnboardingComplete) if (createdUser != null) { - controller.chatModel.chatRunning.value = false m.controller.startChat(createdUser) } ModalManager.closeAllModalsEverywhere() @@ -113,3 +100,14 @@ private fun deleteStorageAndRestart(m: ChatModel, password: String, completed: ( } } } + +suspend fun reinitChatController() { + chatModel.chatDbChanged.value = true + chatModel.chatDbStatus.value = null + try { + initChatController() + } catch (e: Exception) { + Log.d(TAG, "initializeChat ${e.stackTraceToString()}") + } + chatModel.chatDbChanged.value = false +} diff --git a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/onboarding/CreateSimpleXAddress.kt b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/onboarding/CreateSimpleXAddress.kt index ec0ded450..190b962ea 100644 --- a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/onboarding/CreateSimpleXAddress.kt +++ b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/onboarding/CreateSimpleXAddress.kt @@ -173,17 +173,6 @@ private fun prepareChatBeforeAddressCreation(rhId: Long?) { withBGApi { val user = chatModel.controller.apiGetActiveUser(rhId) ?: return@withBGApi chatModel.currentUser.value = user - if (chatModel.users.isEmpty()) { - if (appPlatform.isDesktop) { - // Make possible to use chat after going to remote device linking and returning back to local profile creation - chatModel.chatRunning.value = false - } - chatModel.controller.startChat(user) - } else { - val users = chatModel.controller.listUsers(rhId) - chatModel.users.clear() - chatModel.users.addAll(users) - chatModel.controller.getUserChatData(rhId) - } + chatModel.controller.startChat(user) } } diff --git a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/usersettings/SettingsView.kt b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/usersettings/SettingsView.kt index ccc893085..d92f2f0f1 100644 --- a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/usersettings/SettingsView.kt +++ b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/usersettings/SettingsView.kt @@ -33,7 +33,7 @@ import chat.simplex.common.views.onboarding.WhatsNewView import chat.simplex.common.views.remote.ConnectDesktopView import chat.simplex.common.views.remote.ConnectMobileView import chat.simplex.res.MR -import kotlinx.coroutines.launch +import kotlinx.coroutines.* @Composable fun SettingsView(chatModel: ChatModel, setPerformLA: (Boolean) -> Unit, drawerState: DrawerState) { @@ -119,7 +119,7 @@ fun SettingsLayout( SectionItemView(showCustomModal { chatModel, close -> UserProfileView(chatModel, close) }, 80.dp, padding = PaddingValues(start = 16.dp, end = DEFAULT_PADDING), disabled = stopped) { ProfilePreview(profile, stopped = stopped) } - SettingsActionItem(painterResource(MR.images.ic_manage_accounts), stringResource(MR.strings.your_chat_profiles), { withAuth(generalGetString(MR.strings.auth_open_chat_profiles), generalGetString(MR.strings.auth_log_in_using_credential)) { showSettingsModalWithSearch { it, search -> UserProfilesView(it, search, profileHidden) } } }, disabled = stopped, extraPadding = true) + SettingsActionItem(painterResource(MR.images.ic_manage_accounts), stringResource(MR.strings.your_chat_profiles), { withAuth(generalGetString(MR.strings.auth_open_chat_profiles), generalGetString(MR.strings.auth_log_in_using_credential)) { showSettingsModalWithSearch { it, search -> UserProfilesView(it, search, profileHidden, drawerState) } } }, disabled = stopped, extraPadding = true) SettingsActionItem(painterResource(MR.images.ic_qr_code), stringResource(MR.strings.your_simplex_contact_address), showCustomModal { it, close -> UserAddressView(it, shareViaProfile = it.currentUser.value!!.addressShared, close = close) }, disabled = stopped, extraPadding = true) ChatPreferencesItem(showCustomModal, stopped = stopped) } else if (chatModel.localUserCreated.value == false) { diff --git a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/usersettings/UserProfilesView.kt b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/usersettings/UserProfilesView.kt index 390f1cac9..1beccd516 100644 --- a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/usersettings/UserProfilesView.kt +++ b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/usersettings/UserProfilesView.kt @@ -27,18 +27,20 @@ import chat.simplex.common.ui.theme.* import chat.simplex.common.views.chat.item.ItemAction import chat.simplex.common.views.chatlist.UserProfilePickerItem import chat.simplex.common.views.chatlist.UserProfileRow -import chat.simplex.common.views.database.PassphraseField import chat.simplex.common.views.helpers.* import chat.simplex.common.views.CreateProfile +import chat.simplex.common.views.database.* +import chat.simplex.common.views.onboarding.OnboardingStage import chat.simplex.res.MR import dev.icerock.moko.resources.StringResource -import kotlinx.coroutines.delay +import kotlinx.coroutines.* @Composable -fun UserProfilesView(m: ChatModel, search: MutableState<String>, profileHidden: MutableState<Boolean>) { +fun UserProfilesView(m: ChatModel, search: MutableState<String>, profileHidden: MutableState<Boolean>, drawerState: DrawerState) { val searchTextOrPassword = rememberSaveable { search } val users by remember { derivedStateOf { m.users.map { it.user } } } val filteredUsers by remember { derivedStateOf { filteredUsers(m, searchTextOrPassword.value) } } + val scope = rememberCoroutineScope() UserProfilesLayout( users = users, filteredUsers = filteredUsers, @@ -49,6 +51,12 @@ fun UserProfilesView(m: ChatModel, search: MutableState<String>, profileHidden: addUser = { ModalManager.center.showModalCloseable { close -> CreateProfile(m, close) + if (appPlatform.isDesktop) { + // Hide settings to allow clicks to pass through to CreateProfile view + DisposableEffectOnGone(always = { scope.launch { drawerState.close() } }) { + // Show settings again to allow intercept clicks to close modals after profile creation finishes + scope.launch(NonCancellable) { drawerState.open() } } + } } }, activateUser = { user -> @@ -63,45 +71,34 @@ fun UserProfilesView(m: ChatModel, search: MutableState<String>, profileHidden: } }, removeUser = { user -> - if (m.users.size > 1 && (user.hidden || visibleUsersCount(m) > 1)) { - val text = buildAnnotatedString { - append(generalGetString(MR.strings.users_delete_all_chats_deleted) + "\n\n" + generalGetString(MR.strings.users_delete_profile_for) + " ") - withStyle(SpanStyle(fontWeight = FontWeight.Bold)) { - append(user.displayName) - } - append(":") + val text = buildAnnotatedString { + append(generalGetString(MR.strings.users_delete_all_chats_deleted) + "\n\n" + generalGetString(MR.strings.users_delete_profile_for) + " ") + withStyle(SpanStyle(fontWeight = FontWeight.Bold)) { + append(user.displayName) } - AlertManager.shared.showAlertDialogButtonsColumn( - title = generalGetString(MR.strings.users_delete_question), - text = text, - buttons = { - Column { - SectionItemView({ - AlertManager.shared.hideAlert() - removeUser(m, user, users, true, searchTextOrPassword.value.trim()) - }) { - Text(stringResource(MR.strings.users_delete_with_connections), Modifier.fillMaxWidth(), textAlign = TextAlign.Center, color = Color.Red) - } - SectionItemView({ - AlertManager.shared.hideAlert() - removeUser(m, user, users, false, searchTextOrPassword.value.trim()) - } - ) { - Text(stringResource(MR.strings.users_delete_data_only), Modifier.fillMaxWidth(), textAlign = TextAlign.Center, color = Color.Red) - } + append(":") + } + AlertManager.shared.showAlertDialogButtonsColumn( + title = generalGetString(MR.strings.users_delete_question), + text = text, + buttons = { + Column { + SectionItemView({ + AlertManager.shared.hideAlert() + removeUser(m, user, users, true, searchTextOrPassword.value.trim()) + }) { + Text(stringResource(MR.strings.users_delete_with_connections), Modifier.fillMaxWidth(), textAlign = TextAlign.Center, color = Color.Red) + } + SectionItemView({ + AlertManager.shared.hideAlert() + removeUser(m, user, users, false, searchTextOrPassword.value.trim()) + } + ) { + Text(stringResource(MR.strings.users_delete_data_only), Modifier.fillMaxWidth(), textAlign = TextAlign.Center, color = Color.Red) } } - ) - } else { - AlertManager.shared.showAlertMsg( - title = generalGetString(MR.strings.cant_delete_user_profile), - text = if (m.users.size > 1) { - generalGetString(MR.strings.should_be_at_least_one_visible_profile) - } else { - generalGetString(MR.strings.should_be_at_least_one_profile) - } - ) - } + } + ) }, unhideUser = { user -> if (passwordEntryRequired(user, searchTextOrPassword.value)) { @@ -178,7 +175,7 @@ private fun UserProfilesLayout( SectionView { for (user in filteredUsers) { - UserView(user, users, visibleUsersCount, activateUser, removeUser, unhideUser, muteUser, unmuteUser, showHiddenProfile) + UserView(user, visibleUsersCount, activateUser, removeUser, unhideUser, muteUser, unmuteUser, showHiddenProfile) SectionDivider() } if (searchTextOrPassword.value.trim().isEmpty()) { @@ -210,7 +207,6 @@ private fun UserProfilesLayout( @Composable private fun UserView( user: User, - users: List<User>, visibleUsersCount: Int, activateUser: (User) -> Unit, removeUser: (User) -> Unit, @@ -220,7 +216,7 @@ private fun UserView( showHiddenProfile: (User) -> Unit, ) { val showMenu = remember { mutableStateOf(false) } - UserProfilePickerItem(user, onLongClick = { if (users.size > 1) showMenu.value = true }) { + UserProfilePickerItem(user, onLongClick = { showMenu.value = true }) { activateUser(user) } Box(Modifier.padding(horizontal = DEFAULT_PADDING)) { @@ -350,22 +346,28 @@ private fun removeUser(m: ChatModel, user: User, users: List<User>, delSMPQueues } private suspend fun doRemoveUser(m: ChatModel, user: User, users: List<User>, delSMPQueues: Boolean, viewPwd: String?) { - if (users.size < 2) return - - suspend fun deleteUser(user: User) { - m.controller.apiDeleteUser(user, delSMPQueues, viewPwd) - m.removeUser(user) - } try { - if (user.activeUser) { - val newActive = users.firstOrNull { u -> !u.activeUser && !u.hidden } - if (newActive != null) { - m.controller.changeActiveUser_(newActive.remoteHostId, newActive.userId, null) - deleteUser(user.copy(activeUser = false)) + when { + user.activeUser -> { + val newActive = users.firstOrNull { u -> !u.activeUser && !u.hidden } + if (newActive != null) { + m.controller.changeActiveUser_(user.remoteHostId, newActive.userId, null) + m.controller.apiDeleteUser(user, delSMPQueues, viewPwd) + } else { + // Deleting the last visible user while having hidden one(s) + m.controller.apiDeleteUser(user, delSMPQueues, viewPwd) + m.controller.changeActiveUser_(user.remoteHostId, null, null) + if (appPlatform.isAndroid) { + controller.appPrefs.onboardingStage.set(OnboardingStage.Step1_SimpleXInfo) + ModalManager.closeAllModalsEverywhere() + } + } + } + else -> { + m.controller.apiDeleteUser(user, delSMPQueues, viewPwd) } - } else { - deleteUser(user) } + m.removeUser(user) } catch (e: Exception) { AlertManager.shared.showAlertMsg(generalGetString(MR.strings.error_deleting_user), e.stackTraceToString()) } diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/ar/strings.xml b/apps/multiplatform/common/src/commonMain/resources/MR/ar/strings.xml index b53f230a5..616cd9c75 100644 --- a/apps/multiplatform/common/src/commonMain/resources/MR/ar/strings.xml +++ b/apps/multiplatform/common/src/commonMain/resources/MR/ar/strings.xml @@ -145,7 +145,6 @@ <string name="settings_section_title_calls">المكالمات</string> <string name="alert_title_cant_invite_contacts">لا يمكن دعوة جهات الاتصال!</string> <string name="rcv_conn_event_switch_queue_phase_completed">تم تغيير العنوان من أجلك</string> - <string name="cant_delete_user_profile">لا يمكن حذف ملف تعريف المستخدم!</string> <string name="icon_descr_video_asked_to_receive">طلب لاستلام الفيديو</string> <string name="callstatus_in_progress">مكالمتك تحت الإجراء</string> <string name="change_database_passphrase_question">تغيير عبارة مرور قاعدة البيانات؟</string> @@ -1127,7 +1126,6 @@ <string name="database_initialization_error_desc">قاعدة البيانات لا تعمل بشكل صحيح. انقر لمعرفة المزيد</string> <string name="theme_colors_section_title">ألوان السمة</string> <string name="tap_to_activate_profile">انقر لتنشيط الملف الشخصي.</string> - <string name="should_be_at_least_one_profile">يجب أن يكون هناك ملف تعريف مستخدم واحد على الأقل.</string> <string name="v4_5_transport_isolation">عزل النقل</string> <string name="this_string_is_not_a_connection_link">هذه السلسلة ليست رابط اتصال!</string> <string name="receipts_section_description">هذه الإعدادات لملف التعريف الحالي الخاص بك</string> @@ -1138,7 +1136,6 @@ <string name="whats_new_thanks_to_users_contribute_weblate">بفضل المستخدمين - المساهمة عبر Weblate!</string> <string name="database_backup_can_be_restored">لم تكتمل محاولة تغيير عبارة مرور قاعدة البيانات.</string> <string name="enter_passphrase_notification_desc">لتلقي الإشعارات، يرجى إدخال عبارة مرور قاعدة البيانات</string> - <string name="should_be_at_least_one_visible_profile">يجب أن يكون هناك ملف تعريف مستخدم مرئي واحد على الأقل.</string> <string name="la_lock_mode_system">مصادقة النظام</string> <string name="sync_connection_force_desc">يعمل التشفير واتفاقية التشفير الجديدة غير مطلوبة. قد ينتج عن ذلك أخطاء في الاتصال!</string> <string name="image_decoding_exception_desc">لا يمكن فك ترميز الصورة. من فضلك، جرب صورة مختلفة أو تواصل مع المطورين.</string> diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/base/strings.xml b/apps/multiplatform/common/src/commonMain/resources/MR/base/strings.xml index cda7df43f..e3711afaf 100644 --- a/apps/multiplatform/common/src/commonMain/resources/MR/base/strings.xml +++ b/apps/multiplatform/common/src/commonMain/resources/MR/base/strings.xml @@ -1413,9 +1413,6 @@ <string name="user_unmute">Unmute</string> <string name="enter_password_to_show">Enter password in search</string> <string name="tap_to_activate_profile">Tap to activate profile.</string> - <string name="cant_delete_user_profile">Can\'t delete user profile!</string> - <string name="should_be_at_least_one_visible_profile">There should be at least one visible user profile.</string> - <string name="should_be_at_least_one_profile">There should be at least one user profile.</string> <string name="make_profile_private">Make profile private!</string> <string name="you_can_hide_or_mute_user_profile">You can hide or mute a user profile - hold it for the menu.</string> <string name="dont_show_again">Don\'t show again</string> diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/bg/strings.xml b/apps/multiplatform/common/src/commonMain/resources/MR/bg/strings.xml index 0379bf650..a73c72670 100644 --- a/apps/multiplatform/common/src/commonMain/resources/MR/bg/strings.xml +++ b/apps/multiplatform/common/src/commonMain/resources/MR/bg/strings.xml @@ -185,7 +185,6 @@ <string name="change_verb">Промени</string> <string name="change_member_role_question">Промяна на груповата роля\?</string> <string name="you_will_still_receive_calls_and_ntfs">Все още ще получавате обаждания и известия от заглушени профили, когато са активни.</string> - <string name="cant_delete_user_profile">Потребителският профил не може да се изтрие!</string> <string name="allow_disappearing_messages_only_if">Позволи изчезващи съобщения само ако вашият контакт ги разрешава.</string> <string name="allow_your_contacts_irreversibly_delete">Позволи на вашите контакти да изтриват необратимо изпратените съобщения. (24 часа)</string> <string name="allow_your_contacts_to_send_disappearing_messages">Позволи на вашите контакти да изпращат изчезващи съобщения.</string> @@ -1165,8 +1164,6 @@ <string name="profile_is_only_shared_with_your_contacts">Профилът се споделя само с вашите контакти.</string> <string name="delete_files_and_media_desc">Това действие не може да бъде отменено - всички получени и изпратени файлове и медия ще бъдат изтрити. Снимките с ниска разделителна способност ще бъдат запазени.</string> <string name="tap_to_activate_profile">Докосни за активиране на профил.</string> - <string name="should_be_at_least_one_profile">Трябва да има поне един потребителски профил.</string> - <string name="should_be_at_least_one_visible_profile">Трябва да има поне един видим потребителски профил.</string> <string name="language_system">Системен</string> <string name="color_title">Заглавие</string> <string name="to_share_with_your_contact">(за споделяне с вашия контакт)</string> diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/cs/strings.xml b/apps/multiplatform/common/src/commonMain/resources/MR/cs/strings.xml index 54ff0129b..113412984 100644 --- a/apps/multiplatform/common/src/commonMain/resources/MR/cs/strings.xml +++ b/apps/multiplatform/common/src/commonMain/resources/MR/cs/strings.xml @@ -960,7 +960,6 @@ <string name="language_system">Systém</string> <string name="smp_save_servers_question">Uložit servery\?</string> <string name="dont_show_again">Znovu neukazuj</string> - <string name="cant_delete_user_profile">Nemohu smazat uživatelský profil!</string> <string name="button_add_welcome_message">Přidat uvítací zprávu</string> <string name="v4_6_chinese_spanish_interface">Čínské a Španělské rozhranní</string> <string name="v4_6_audio_video_calls">Hlasové a video hovory</string> @@ -991,12 +990,10 @@ <string name="v4_6_audio_video_calls_descr">Podpora bluetooth a další vylepšení.</string> <string name="tap_to_activate_profile">Klepnutím aktivujete profil.</string> <string name="v4_6_chinese_spanish_interface_descr">Díky uživatelům - překládejte prostřednictvím Weblate!</string> - <string name="should_be_at_least_one_profile">Měl by tam být alespoň jeden uživatelský profil.</string> <string name="button_welcome_message">Uvítací zpráva</string> <string name="group_welcome_title">Uvítací zpráva</string> <string name="user_unmute">Zrušit ztlumení</string> <string name="to_reveal_profile_enter_password">Chcete-li odhalit svůj skrytý profil, zadejte celé heslo do vyhledávacího pole na stránce Chat profily.</string> - <string name="should_be_at_least_one_visible_profile">Měl by tam být alespoň jeden viditelný uživatelský profil.</string> <string name="you_will_still_receive_calls_and_ntfs">Stále budete přijímat volání a upozornění od umlčených profilů pokud budou aktivní.</string> <string name="you_can_hide_or_mute_user_profile">Můžete skrýt nebo ztlumit uživatelský profil - Podržte pro menu.</string> <string name="user_unhide">Odkrýt</string> diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/de/strings.xml b/apps/multiplatform/common/src/commonMain/resources/MR/de/strings.xml index 67af829b5..a46bfdf41 100644 --- a/apps/multiplatform/common/src/commonMain/resources/MR/de/strings.xml +++ b/apps/multiplatform/common/src/commonMain/resources/MR/de/strings.xml @@ -1041,7 +1041,6 @@ <string name="moderate_message_will_be_deleted_warning">Diese Nachricht wird für alle Gruppenmitglieder gelöscht.</string> <string name="language_system">System</string> <string name="confirm_password">Passwort bestätigen</string> - <string name="cant_delete_user_profile">Das Benutzerprofil kann nicht gelöscht werden!</string> <string name="dont_show_again">Nicht nochmals anzeigen</string> <string name="v4_6_chinese_spanish_interface">Chinesische und spanische Bedienoberfläche</string> <string name="v4_6_audio_video_calls">Audio- und Videoanrufe</string> @@ -1060,8 +1059,6 @@ <string name="make_profile_private">Privates Profil erzeugen!</string> <string name="user_mute">Stummschalten</string> <string name="tap_to_activate_profile">Zum Aktivieren des Profils tippen.</string> - <string name="should_be_at_least_one_profile">Es muss mindestens ein Benutzer-Profil vorhanden sein.</string> - <string name="should_be_at_least_one_visible_profile">Es muss mindestens ein sichtbares Benutzer-Profil vorhanden sein.</string> <string name="user_unmute">Stummschaltung aufheben</string> <string name="muted_when_inactive">Bei Inaktivität stummgeschaltet!</string> <string name="v4_6_hidden_chat_profiles_descr">Schützen Sie Ihre Chat-Profile mit einem Passwort!</string> diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/es/strings.xml b/apps/multiplatform/common/src/commonMain/resources/MR/es/strings.xml index 9bf522cf0..e1ded8295 100644 --- a/apps/multiplatform/common/src/commonMain/resources/MR/es/strings.xml +++ b/apps/multiplatform/common/src/commonMain/resources/MR/es/strings.xml @@ -967,17 +967,14 @@ <string name="error_saving_user_password">Error al guardar contraseña de usuario</string> <string name="relay_server_if_necessary">El retransmisor sólo se usa en caso de necesidad. Un tercero podría ver tu IP.</string> <string name="relay_server_protects_ip">El servidor de retransmisión protege tu IP pero puede ver la duración de la llamada.</string> - <string name="cant_delete_user_profile">¡No se puede eliminar el perfil!</string> <string name="enter_password_to_show">Introduce la contraseña</string> <string name="user_hide">Ocultar</string> <string name="user_mute">Silenciar</string> <string name="save_and_update_group_profile">Guardar y actualizar perfil del grupo</string> <string name="tap_to_activate_profile">Pulsa sobre un perfil para activarlo.</string> - <string name="should_be_at_least_one_visible_profile">Debe haber al menos un perfil de usuario visible.</string> <string name="user_unhide">Mostrar</string> <string name="button_welcome_message">Mensaje de bienvenida</string> <string name="group_welcome_title">Mensaje de bienvenida</string> - <string name="should_be_at_least_one_profile">Debe haber al menos un perfil de usuario.</string> <string name="make_profile_private">¡Hacer perfil privado!</string> <string name="dont_show_again">No mostrar de nuevo</string> <string name="muted_when_inactive">¡Silenciado cuando está inactivo!</string> diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/fi/strings.xml b/apps/multiplatform/common/src/commonMain/resources/MR/fi/strings.xml index 78edeaecd..143496326 100644 --- a/apps/multiplatform/common/src/commonMain/resources/MR/fi/strings.xml +++ b/apps/multiplatform/common/src/commonMain/resources/MR/fi/strings.xml @@ -335,7 +335,6 @@ <string name="share_text_disappears_at">Katoaa klo: %s</string> <string name="create_secret_group_title">Luo salainen ryhmä</string> <string name="chat_preferences_always">aina</string> - <string name="cant_delete_user_profile">Käyttäjäprofiilia ei voi poistaa!</string> <string name="allow_your_contacts_to_call">Salli kontaktiesi soittaa sinulle.</string> <string name="allow_your_contacts_irreversibly_delete">Salli kontaktiesi poistaa lähetetyt viestit peruuttamattomasti.</string> <string name="allow_your_contacts_to_send_voice_messages">Salli kontaktiesi lähettää ääniviestejä.</string> @@ -1238,8 +1237,6 @@ <string name="snd_conn_event_switch_queue_phase_completed_for_member">muutit osoitteeksi %s</string> <string name="invite_prohibited_description">Yrität kutsua kontaktia, jonka kanssa olet jakanut inkognito-profiilin, ryhmään, jossa käytät pääprofiiliasi</string> <string name="group_welcome_title">Tervetuloviesti</string> - <string name="should_be_at_least_one_profile">Käyttäjäprofiileja tulee olla vähintään yksi.</string> - <string name="should_be_at_least_one_visible_profile">Näkyviä käyttäjäprofiileja tulee olla vähintään yksi.</string> <string name="incognito_info_share">Kun jaat inkognitoprofiilin jonkun kanssa, tätä profiilia käytetään ryhmissä, joihin tämä sinut kutsuu.</string> <string name="group_main_profile_sent">Keskusteluprofiilisi lähetetään ryhmän jäsenille</string> <string name="incognito_random_profile">Satunnainen profiilisi</string> diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/fr/strings.xml b/apps/multiplatform/common/src/commonMain/resources/MR/fr/strings.xml index ad5ab8bb6..88f276cea 100644 --- a/apps/multiplatform/common/src/commonMain/resources/MR/fr/strings.xml +++ b/apps/multiplatform/common/src/commonMain/resources/MR/fr/strings.xml @@ -962,7 +962,6 @@ <string name="smp_save_servers_question">Enregistrer les serveurs ?</string> <string name="dont_show_again">Ne plus afficher</string> <string name="button_add_welcome_message">Ajouter un message d\'accueil</string> - <string name="cant_delete_user_profile">Impossible de supprimer le profil d\'utilisateur !</string> <string name="v4_6_group_moderation">Modération de groupe</string> <string name="user_hide">Cacher</string> <string name="muted_when_inactive">Mute en cas d\'inactivité !</string> @@ -993,8 +992,6 @@ <string name="to_reveal_profile_enter_password">Pour révéler votre profil caché, entrez le mot de passe dans le champ de recherche de la page Profils de chat.</string> <string name="v4_6_audio_video_calls_descr">Prise en charge du Bluetooth et autres améliorations.</string> <string name="v4_6_chinese_spanish_interface_descr">Merci aux utilisateurs - contribuez via Weblate !</string> - <string name="should_be_at_least_one_profile">Il doit y avoir au moins un profil d\'utilisateur.</string> - <string name="should_be_at_least_one_visible_profile">Il doit y avoir au moins un profil d\'utilisateur visible.</string> <string name="user_unhide">Dévoiler</string> <string name="user_unmute">Démute</string> <string name="button_welcome_message">Message d\'accueil</string> diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/hu/strings.xml b/apps/multiplatform/common/src/commonMain/resources/MR/hu/strings.xml index d294dc980..1cc668e79 100644 --- a/apps/multiplatform/common/src/commonMain/resources/MR/hu/strings.xml +++ b/apps/multiplatform/common/src/commonMain/resources/MR/hu/strings.xml @@ -45,7 +45,6 @@ <string name="both_you_and_your_contact_can_send_disappearing">Mindketten, te is és az ismerősöd is 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> <string name="alert_title_msg_bad_hash">Téves üzenet hash</string> - <string name="cant_delete_user_profile">Felhasználói profil törlése nem lehetséges!</string> <string name="color_background">Háttér</string> <string name="socks_proxy_setting_limitations"><![CDATA[<b>Tudnivaló</b>: az üzenet- és fájl relay szerverek SOCKS proxy által vannak kapcsolatban. A hívások és URL link előnézetek közvetlen kapcsolatot használnak.]]></string> <string name="full_backup">App adatmentés</string> @@ -1493,7 +1492,6 @@ <string name="the_messaging_and_app_platform_protecting_your_privacy_and_security">A Te adatvédelmedet és biztonságodat védő üzenetküldő és alkalmazásplatform.</string> <string name="tap_to_activate_profile">Érintsd meg a profil aktiválásához.</string> <string name="receipts_contacts_override_disabled">A kézbesítési jelentés le van tiltva %d ismerősödnél</string> - <string name="should_be_at_least_one_profile">Legalább egy felhasználói profilnak kell lennie.</string> <string name="session_code">Munkamenet kód</string> <string name="v4_4_french_interface_descr">Köszönet a felhasználóknak - hozzájárulás a Weblaten!</string> <string name="receipts_section_groups">Kis csoportok (max. 20 tag)</string> @@ -1510,7 +1508,6 @@ <string name="receiving_via">Fogadás a</string> <string name="store_passphrase_securely_without_recover">Kérjük, hogy a jelmondatot biztonságosan tárold, ha elveszíted, NEM fogsz tudni hozzáférni a chathez.</string> <string name="member_role_will_be_changed_with_invitation">A szerepkör \"%s\"-re fog változni. A tag új meghívót kap.</string> - <string name="should_be_at_least_one_visible_profile">Legalább egy látható felhasználói profilnak kell lennie.</string> <string name="icon_descr_profile_image_placeholder">profilkép helyőrző</string> <string name="sync_connection_force_desc">A titkosítás működik, és új titkosítási egyezményre nincs szükség. Ez kapcsolati hibákat eredményezhet!</string> <string name="delete_chat_profile_action_cannot_be_undone_warning">Ez a művelet nem vonható vissza - profilod, ismerőseid, üzeneteid és fájljaid visszafordíthatatlanul törlésre kerülnek.</string> diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/it/strings.xml b/apps/multiplatform/common/src/commonMain/resources/MR/it/strings.xml index 058552e7a..61755d1db 100644 --- a/apps/multiplatform/common/src/commonMain/resources/MR/it/strings.xml +++ b/apps/multiplatform/common/src/commonMain/resources/MR/it/strings.xml @@ -969,8 +969,6 @@ <string name="tap_to_activate_profile">Tocca per attivare il profilo.</string> <string name="user_unhide">Svela</string> <string name="make_profile_private">Rendi privato il profilo!</string> - <string name="should_be_at_least_one_profile">Deve esserci almeno un profilo utente.</string> - <string name="should_be_at_least_one_visible_profile">Deve esserci almeno un profilo utente visibile.</string> <string name="you_can_hide_or_mute_user_profile">Puoi nascondere o silenziare un profilo utente - tienilo premuto per il menu.</string> <string name="dont_show_again">Non mostrare più</string> <string name="muted_when_inactive">Silenzioso quando inattivo!</string> @@ -990,7 +988,6 @@ <string name="v4_6_group_moderation_descr">Ora gli amministratori possono: \n- eliminare i messaggi dei membri. \n- disattivare i membri (ruolo \"osservatore\")</string> - <string name="cant_delete_user_profile">Impossibile eliminare il profilo utente!</string> <string name="hide_profile">Nascondi il profilo</string> <string name="confirm_password">Conferma password</string> <string name="error_updating_user_privacy">Errore nell\'aggiornamento della privacy dell\'utente</string> diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/iw/strings.xml b/apps/multiplatform/common/src/commonMain/resources/MR/iw/strings.xml index e1657ed6d..1d5a7b690 100644 --- a/apps/multiplatform/common/src/commonMain/resources/MR/iw/strings.xml +++ b/apps/multiplatform/common/src/commonMain/resources/MR/iw/strings.xml @@ -112,7 +112,6 @@ <string name="icon_descr_call_progress">שיחה מתמשכת</string> <string name="settings_section_title_calls">שיחות</string> <string name="cannot_access_keychain">לא ניתן לגשת ל־Keystore כדי לאחסן את סיסמת מסד הנתונים</string> - <string name="cant_delete_user_profile">לא ניתן למחוק פרופיל משתמש!</string> <string name="feature_cancelled_item">בוטל %s</string> <string name="v4_5_transport_isolation_descr">לפי פרופיל צ׳אט (ברירת מחדל) או לפי חיבור (בביטא).</string> <string name="callstatus_calling">מתקשר…</string> @@ -1055,8 +1054,6 @@ <string name="messages_section_description">הגדרה זו חלה על הודעות בפרופיל הצ׳אט הנוכחי שלך</string> <string name="database_backup_can_be_restored">הניסיון לשנות את סיסמת מסד הנתונים לא הושלם.</string> <string name="color_title">כותרת</string> - <string name="should_be_at_least_one_profile">נדרש לפחות פרופיל משתמש אחד.</string> - <string name="should_be_at_least_one_visible_profile">נדרש לפחות פרופיל משתמש אחד גלוי.</string> <string name="group_is_decentralized">הקבוצה מבוזרת לחלוטין - היא גלויה רק לחברי הקבוצה.</string> <string name="to_protect_privacy_simplex_has_ids_for_queues">כדי לשמור על הפרטיות, במקום מזהי משתמש הקיימים בכל הפלטפורמות האחרות, ל־SimpleX יש מזהים לתורי הודעות, נפרדים עבור כל אחד מאנשי הקשר שלך.</string> <string name="using_simplex_chat_servers">משתמש בשרתי SimpleX Chatז</string> diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/ja/strings.xml b/apps/multiplatform/common/src/commonMain/resources/MR/ja/strings.xml index 938a4b369..d8659e009 100644 --- a/apps/multiplatform/common/src/commonMain/resources/MR/ja/strings.xml +++ b/apps/multiplatform/common/src/commonMain/resources/MR/ja/strings.xml @@ -944,7 +944,6 @@ <string name="la_lock_mode_passcode">パスコード入力</string> <string name="la_auth_failed">認証失敗</string> <string name="la_enter_app_passcode">パスコードを入力</string> - <string name="cant_delete_user_profile">ユーザープロフィールが削除できません。</string> <string name="la_mode_system">システム</string> <string name="change_lock_mode">ロックモードを変更</string> <string name="v4_6_chinese_spanish_interface">中国語とスペイン語UI</string> @@ -1113,8 +1112,6 @@ <string name="v5_0_large_files_support_descr">送信者がオンラインになるまでの待ち時間がなく、速い!</string> <string name="v5_0_app_passcode">アプリのパスコード</string> <string name="v5_0_app_passcode_descr">システム認証の代わりに設定します。</string> - <string name="should_be_at_least_one_visible_profile">少なくとも1つのユーザープロフィールが表示されている必要があります。</string> - <string name="should_be_at_least_one_profile">少なくとも1つのユーザープロファイルが必要です。</string> <string name="make_profile_private">プロフィールを非表示にできます!</string> <string name="relay_server_protects_ip">リレー サーバーは IP アドレスを保護しますが、通話時間は監視されます。</string> <string name="share_address_with_contacts_question">アドレスを連絡先と共有しますか\?</string> diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/ko/strings.xml b/apps/multiplatform/common/src/commonMain/resources/MR/ko/strings.xml index b059cc5cc..af3972035 100644 --- a/apps/multiplatform/common/src/commonMain/resources/MR/ko/strings.xml +++ b/apps/multiplatform/common/src/commonMain/resources/MR/ko/strings.xml @@ -111,7 +111,6 @@ <string name="change_member_role_question">그룹 역할을 바꾸시겠습니까\?</string> <string name="info_row_connection">연결</string> <string name="users_add">프로필 추가</string> - <string name="cant_delete_user_profile">사용자 프로필을 삭제할 수 없습니다!</string> <string name="chat_preferences_always">항상</string> <string name="chat_preferences_contact_allows">대화 상대가 허용함</string> <string name="contact_preferences">연락처 개별 설정</string> @@ -826,12 +825,10 @@ <string name="stop_chat_confirmation">멈추기</string> <string name="snd_group_event_changed_member_role">%s의 역할을 %s로 변경했어요.</string> <string name="section_title_for_console">콘솔용</string> - <string name="should_be_at_least_one_visible_profile">적어도 하나의 숨겨지지 않은 사용자 프로필이 있어야 해요.</string> <string name="set_group_preferences">그룹 설정 지정하기</string> <string name="snd_conn_event_switch_queue_phase_completed_for_member">%s의 주소를 바꿨어요</string> <string name="snd_conn_event_switch_queue_phase_completed">주소를 바꿨어요</string> <string name="snd_group_event_group_profile_updated">그룹 프로필 업데이트됨</string> - <string name="should_be_at_least_one_profile">적어도 하나의 사용자 프로필이 있어야 해요.</string> <string name="smp_servers_test_server">서버 테스트하기</string> <string name="smp_servers_use_server">서버 사용하기</string> <string name="smp_servers_use_server_for_new_conn">새로운 대화에 사용</string> diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/lt/strings.xml b/apps/multiplatform/common/src/commonMain/resources/MR/lt/strings.xml index 5d74cac33..951050fe6 100644 --- a/apps/multiplatform/common/src/commonMain/resources/MR/lt/strings.xml +++ b/apps/multiplatform/common/src/commonMain/resources/MR/lt/strings.xml @@ -447,8 +447,6 @@ <string name="group_members_can_send_dms">Grupės nariai gali siųsti tiesiogines žinutes.</string> <string name="group_members_can_send_disappearing">Grupės nariai gali siųsti išnykstančias žinutes.</string> <string name="v4_3_improved_privacy_and_security_desc">Slėpti programėlės ekraną paskiausių programėlių sąraše.</string> - <string name="should_be_at_least_one_profile">Turėtų būti bent vienas naudotojo profilis.</string> - <string name="should_be_at_least_one_visible_profile">Turėtų būti matomas bent vienas naudotojo profilis.</string> <string name="chat_preferences_contact_allows">Adresatas leidžia</string> <string name="voice_prohibited_in_this_chat">Balso žinutės šiame pokalbyje yra uždraustos.</string> <string name="v4_4_disappearing_messages_desc">Išsiųstos žinutės bus ištrintos po nustatyto laiko.</string> @@ -469,7 +467,6 @@ <string name="join_group_button">Prisijungti</string> <string name="change_verb">Keisti</string> <string name="conn_stats_section_title_servers">SERVERIAI</string> - <string name="cant_delete_user_profile">Nepavyksta ištrinti naudotojo profilio!</string> <string name="clear_chat_menu_action">Išvalyti</string> <string name="unhide_profile">Nebeslėpti profilio</string> <string name="videos_limit_title">Per daug vaizdo įrašų!</string> diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/nl/strings.xml b/apps/multiplatform/common/src/commonMain/resources/MR/nl/strings.xml index c5bb1c04f..b3ebcd916 100644 --- a/apps/multiplatform/common/src/commonMain/resources/MR/nl/strings.xml +++ b/apps/multiplatform/common/src/commonMain/resources/MR/nl/strings.xml @@ -958,7 +958,6 @@ <string name="you_are_observer">jij bent waarnemer</string> <string name="language_system">Systeem</string> <string name="v4_6_audio_video_calls">Audio en video oproepen</string> - <string name="cant_delete_user_profile">Kan gebruikers profiel niet verwijderen!</string> <string name="confirm_password">Bevestig wachtwoord</string> <string name="v4_6_chinese_spanish_interface">Chinese en Spaanse interface</string> <string name="enter_password_to_show">Voer wachtwoord in bij zoeken</string> @@ -990,12 +989,10 @@ <string name="v4_6_audio_video_calls_descr">Ondersteuning voor bluetooth en andere verbeteringen.</string> <string name="tap_to_activate_profile">Tik om profiel te activeren.</string> <string name="v4_6_chinese_spanish_interface_descr">Dank aan de gebruikers – draag bij via Weblate!</string> - <string name="should_be_at_least_one_profile">Er moet ten minste één gebruikers profiel zijn.</string> <string name="you_can_hide_or_mute_user_profile">U kunt een gebruikers profiel verbergen of dempen - houd het vast voor het menu.</string> <string name="user_unhide">zichtbaar maken</string> <string name="user_unmute">Dempen opheffen</string> <string name="group_welcome_title">Welkomst bericht</string> - <string name="should_be_at_least_one_visible_profile">"Er moet ten minste één zichtbaar gebruikers profiel zijn."</string> <string name="to_reveal_profile_enter_password">Om uw verborgen profiel te onthullen, voert u een volledig wachtwoord in een zoekveld in op de pagina Uw chat profielen.</string> <string name="button_welcome_message">Welkomst bericht</string> <string name="you_will_still_receive_calls_and_ntfs">U ontvangt nog steeds oproepen en meldingen van gedempte profielen wanneer deze actief zijn.</string> diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/pl/strings.xml b/apps/multiplatform/common/src/commonMain/resources/MR/pl/strings.xml index 2ad18bdb0..d421f2f10 100644 --- a/apps/multiplatform/common/src/commonMain/resources/MR/pl/strings.xml +++ b/apps/multiplatform/common/src/commonMain/resources/MR/pl/strings.xml @@ -743,7 +743,6 @@ <string name="group_is_decentralized">W pełni zdecentralizowana – widoczna tylko dla członków.</string> <string name="member_role_will_be_changed_with_invitation">Rola zostanie zmieniona na \"%s\". Członek otrzyma nowe zaproszenie.</string> <string name="group_welcome_title">Wiadomość powitalna</string> - <string name="cant_delete_user_profile">Nie można usunąć profilu użytkownika!</string> <string name="users_delete_question">Usunąć profil czatu\?</string> <string name="users_delete_profile_for">Usuń profil czatu dla</string> <string name="dont_show_again">Nie pokazuj ponownie</string> @@ -997,9 +996,7 @@ <string name="simplex_link_contact">Adres kontaktowy SimpleX</string> <string name="stop_chat_to_export_import_or_delete_chat_database">Zatrzymaj czat, aby wyeksportować, zaimportować lub usunąć bazę danych czatu. Podczas zatrzymania chatu nie będzie można odbierać ani wysyłać wiadomości.</string> <string name="smp_servers_test_some_failed">Niektóre serwery nie przeszły testu:</string> - <string name="should_be_at_least_one_profile">Powinien istnieć co najmniej jeden profil użytkownika.</string> <string name="thank_you_for_installing_simplex">Dziękujemy za zainstalowanie SimpleX Chat!</string> - <string name="should_be_at_least_one_visible_profile">Powinien istnieć co najmniej jeden widoczny profil użytkownika.</string> <string name="moderate_message_will_be_marked_warning">Wiadomość zostanie oznaczona jako moderowana dla wszystkich członków.</string> <string name="member_role_will_be_changed_with_notification">Rola zostanie zmieniona na \"%s\". Wszyscy w grupie zostaną powiadomieni.</string> <string name="delete_files_and_media_desc">Tego działania nie można cofnąć - wszystkie odebrane i wysłane pliki oraz media zostaną usunięte. Obrazy o niskiej rozdzielczości pozostaną.</string> diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/pt-rBR/strings.xml b/apps/multiplatform/common/src/commonMain/resources/MR/pt-rBR/strings.xml index 769375604..bf7d29c9c 100644 --- a/apps/multiplatform/common/src/commonMain/resources/MR/pt-rBR/strings.xml +++ b/apps/multiplatform/common/src/commonMain/resources/MR/pt-rBR/strings.xml @@ -706,7 +706,6 @@ <string name="no_contacts_to_add">Sem contatos para adicionar</string> <string name="member_role_will_be_changed_with_notification">A função será alterada para \"%s\". Todos no grupo serão notificados.</string> <string name="user_mute">Mutar</string> - <string name="should_be_at_least_one_visible_profile">Deve haver pelo menos um perfil de usuário visível.</string> <string name="only_you_can_send_voice">Somente você pode enviar mensagens de voz.</string> <string name="only_your_contact_can_send_voice">Somente seu contato pode enviar mensagens de voz.</string> <string name="prohibit_message_deletion">Proibir a exclusão irreversível de mensagens.</string> @@ -739,9 +738,7 @@ <string name="incompatible_database_version">Versão do banco de dados incompatível</string> <string name="button_remove_member">Remover membro</string> <string name="group_main_profile_sent">Seu perfil de chat será enviado aos membros do grupo</string> - <string name="cant_delete_user_profile">Não é possível excluir o perfil do usuário!</string> <string name="make_profile_private">Torne o perfil privado!</string> - <string name="should_be_at_least_one_profile">Deve haver pelo menos um perfil de usuário.</string> <string name="v4_2_security_assessment">Avaliação de segurança</string> <string name="v4_5_multiple_chat_profiles_descr">Nomes diferentes, avatares e isolamento de transporte.</string> <string name="v4_2_auto_accept_contact_requests_desc">Com mensagem de boas-vindas opcional.</string> diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/pt/strings.xml b/apps/multiplatform/common/src/commonMain/resources/MR/pt/strings.xml index e755d9aab..438d6832c 100644 --- a/apps/multiplatform/common/src/commonMain/resources/MR/pt/strings.xml +++ b/apps/multiplatform/common/src/commonMain/resources/MR/pt/strings.xml @@ -239,7 +239,6 @@ <string name="call_on_lock_screen">Chamadas no ecrã de bloqueio:</string> <string name="alert_title_cant_invite_contacts">Não é possível convidar contatos!</string> <string name="change_verb">Alterar</string> - <string name="cant_delete_user_profile">Não é possível eliminar o perfil do utilizador!</string> <string name="feature_cancelled_item">cancelado %s</string> <string name="cannot_receive_file">Não é possível receber o ficheiro</string> <string name="icon_descr_cancel_image_preview">Cancelar pré-visualização da imagem</string> diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/ru/strings.xml b/apps/multiplatform/common/src/commonMain/resources/MR/ru/strings.xml index c32d81f73..df0938dbe 100644 --- a/apps/multiplatform/common/src/commonMain/resources/MR/ru/strings.xml +++ b/apps/multiplatform/common/src/commonMain/resources/MR/ru/strings.xml @@ -1044,8 +1044,6 @@ <string name="v4_6_audio_video_calls">Аудио и видео звонки</string> <string name="error_saving_user_password">Ошибка при сохранении пароля пользователя</string> <string name="smp_save_servers_question">Сохранить серверы\?</string> - <string name="should_be_at_least_one_profile">Должен быть хотя бы один профиль пользователя.</string> - <string name="should_be_at_least_one_visible_profile">Должен быть хотя бы один открытый профиль пользователя.</string> <string name="to_reveal_profile_enter_password">Чтобы показать Ваш скрытый профиль, введите пароль в поле поиска на странице Ваши профили.</string> <string name="user_unmute">Уведомлять</string> <string name="group_welcome_title">Приветственное сообщение</string> @@ -1054,7 +1052,6 @@ <string name="button_welcome_message">Приветственное сообщение</string> <string name="save_and_update_group_profile">Сохранить сообщение и обновить группу</string> <string name="muted_when_inactive">Без звука, когда не активный!</string> - <string name="cant_delete_user_profile">Нельзя удалить профиль пользователя!</string> <string name="enter_password_to_show">Введите пароль в поиске!</string> <string name="save_profile_password">Сохранить пароль профиля</string> <string name="v4_6_chinese_spanish_interface">Китайский и Испанский интерфейс</string> diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/th/strings.xml b/apps/multiplatform/common/src/commonMain/resources/MR/th/strings.xml index 3eec7777f..5701c0ca7 100644 --- a/apps/multiplatform/common/src/commonMain/resources/MR/th/strings.xml +++ b/apps/multiplatform/common/src/commonMain/resources/MR/th/strings.xml @@ -142,7 +142,6 @@ <string name="change_member_role_question">เปลี่ยนบทบาทกลุ่ม\?</string> <string name="icon_descr_cancel_live_message">ยกเลิกข้อความสด</string> <string name="feature_cancelled_item">ยกเลิกเรียบร้อยแล้ว %s</string> - <string name="cant_delete_user_profile">ไม่สามารถลบโปรไฟล์ผู้ใช้ได้!</string> <string name="alert_title_cant_invite_contacts">ไม่สามารถเชิญผู้ติดต่อได้!</string> <string name="change_verb">เปลี่ยน</string> <string name="change_database_passphrase_question">เปลี่ยนรหัสผ่านฐานข้อมูล\?</string> @@ -1213,8 +1212,6 @@ <string name="updating_settings_will_reconnect_client_to_all_servers">การอัปเดตการตั้งค่าจะเชื่อมต่อไคลเอนต์กับเซิร์ฟเวอร์ทั้งหมดอีกครั้ง</string> <string name="user_unhide">ยกเลิกการซ่อน</string> <string name="user_unmute">เปิดเสียง</string> - <string name="should_be_at_least_one_profile">ควรมีโปรไฟล์ผู้ใช้อย่างน้อยหนึ่งโปรไฟล์</string> - <string name="should_be_at_least_one_visible_profile">ควรมีอย่างน้อยหนึ่งโปรไฟล์ผู้ใช้ที่มองเห็นได้</string> <string name="you_can_hide_or_mute_user_profile">คุณสามารถซ่อนหรือปิดเสียงโปรไฟล์ผู้ใช้ - กดค้างไว้เพื่อที่จะแสดงเมนู</string> <string name="unhide_profile">เลิกซ่อนโปรไฟล์</string> <string name="chat_preferences_you_allow">คุณอนุญาต</string> diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/tr/strings.xml b/apps/multiplatform/common/src/commonMain/resources/MR/tr/strings.xml index f07430b8e..aa66835ee 100644 --- a/apps/multiplatform/common/src/commonMain/resources/MR/tr/strings.xml +++ b/apps/multiplatform/common/src/commonMain/resources/MR/tr/strings.xml @@ -114,8 +114,6 @@ <string name="save_group_profile">Grup profilini kaydet</string> <string name="network_option_seconds_label">sn</string> <string name="network_options_save">Kaydet</string> - <string name="should_be_at_least_one_visible_profile">There should be at least one visible user profile.</string> - <string name="should_be_at_least_one_profile">En az bir kullanıcı profili olmalıdır.</string> <string name="incognito_info_protects">Gizli mod her farklı kişi için yeni rasgele profil kullanarak gizliliğini korur.</string> <string name="theme_system">Sistem</string> <string name="language_system">Sistem</string> @@ -753,7 +751,6 @@ <string name="invite_to_group_button">Gruba davet edin</string> <string name="invite_prohibited">Kişi davet edilemiyor!</string> <string name="button_add_members">Üyeleri davet edin</string> - <string name="cant_delete_user_profile">Kullanıcı profili silinemiyor!</string> <string name="color_background">Arka plan</string> <string name="message_deletion_prohibited">Bu sohbette geri alınamaz mesaj silme yasaktır.</string> <string name="delete_contact_question">Kişiyi sil\?</string> diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/uk/strings.xml b/apps/multiplatform/common/src/commonMain/resources/MR/uk/strings.xml index f84360a8e..34ac98e40 100644 --- a/apps/multiplatform/common/src/commonMain/resources/MR/uk/strings.xml +++ b/apps/multiplatform/common/src/commonMain/resources/MR/uk/strings.xml @@ -517,7 +517,6 @@ <string name="role_in_group">Роль</string> <string name="conn_level_desc_indirect">непряме (%1$s)</string> <string name="user_unmute">Відглушити</string> - <string name="should_be_at_least_one_profile">Повинен бути принаймні один профіль користувача.</string> <string name="make_profile_private">Зробіть профіль приватним!</string> <string name="feature_offered_item">запропоновано %s</string> <string name="v4_5_message_draft">Чернетка повідомлення</string> @@ -900,7 +899,6 @@ <string name="delete_files_and_media_all">Видалити всі файли</string> <string name="delete_messages_after">Видаляйте повідомлення після</string> <string name="enable_automatic_deletion_question">Увімкнути автоматичне видалення повідомлень\?</string> - <string name="should_be_at_least_one_visible_profile">Повинен бути принаймні один видимий профіль користувача.</string> <string name="v4_6_hidden_chat_profiles">Приховані профілі чату</string> <string name="v4_6_group_welcome_message">Повідомлення вітання групи</string> <string name="v4_6_chinese_spanish_interface_descr">Дякуємо користувачам – приєднуйтеся через Weblate!</string> @@ -933,7 +931,6 @@ <string name="icon_descr_group_inactive">Група неактивна</string> <string name="snd_group_event_member_deleted">ви видалили %1$s</string> <string name="tap_to_activate_profile">Торкніться для активації профілю.</string> - <string name="cant_delete_user_profile">Не вдається видалити профіль користувача!</string> <string name="prohibit_sending_voice">Забороняйте надсилання голосових повідомлень.</string> <string name="group_members_can_send_disappearing">Учасники групи можуть надсилати самознищувальні повідомлення.</string> <string name="ttl_min">%d хв</string> diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/zh-rCN/strings.xml b/apps/multiplatform/common/src/commonMain/resources/MR/zh-rCN/strings.xml index cc0c84c2c..19887d732 100644 --- a/apps/multiplatform/common/src/commonMain/resources/MR/zh-rCN/strings.xml +++ b/apps/multiplatform/common/src/commonMain/resources/MR/zh-rCN/strings.xml @@ -978,7 +978,6 @@ <string name="v4_6_hidden_chat_profiles_descr">使用密码保护您的聊天资料!</string> <string name="confirm_password">确认密码</string> <string name="error_updating_user_privacy">更新用户隐私错误</string> - <string name="cant_delete_user_profile">无法删除用户资料!</string> <string name="error_saving_user_password">保存用户密码错误</string> <string name="enter_password_to_show">在搜索中输入密码</string> <string name="v4_6_group_welcome_message">群组欢迎消息</string> @@ -990,12 +989,10 @@ <string name="to_reveal_profile_enter_password">要显示您的隐藏的个人资料,请在您的聊天个人资料页面的搜索字段中输入完整密码。</string> <string name="save_welcome_message_question">保存欢迎信息?</string> <string name="tap_to_activate_profile">点击以激活个人资料。</string> - <string name="should_be_at_least_one_profile">应该至少有一个用户资料。</string> <string name="user_unhide">取消隐藏</string> <string name="v4_6_group_welcome_message_descr">设置向新成员显示的消息!</string> <string name="v4_6_audio_video_calls_descr">支持蓝牙和其他改进。</string> <string name="v4_6_chinese_spanish_interface_descr">感谢用户——通过 Weblate 做出贡献!</string> - <string name="should_be_at_least_one_visible_profile">应该至少有一个可见的用户资料。</string> <string name="user_unmute">解除静音</string> <string name="button_welcome_message">欢迎消息</string> <string name="you_will_still_receive_calls_and_ntfs">当静音配置文件处于活动状态时,您仍会收到来自静音配置文件的电话和通知。</string> diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/zh-rTW/strings.xml b/apps/multiplatform/common/src/commonMain/resources/MR/zh-rTW/strings.xml index f5b6e6987..c9d4298bc 100644 --- a/apps/multiplatform/common/src/commonMain/resources/MR/zh-rTW/strings.xml +++ b/apps/multiplatform/common/src/commonMain/resources/MR/zh-rTW/strings.xml @@ -965,7 +965,6 @@ <string name="button_welcome_message">歡迎訊息</string> <string name="save_and_update_group_profile">儲存和更新群組配置檔案</string> <string name="save_welcome_message_question">儲存歡迎訊息?</string> - <string name="cant_delete_user_profile">無法刪除個人檔案!</string> <string name="user_hide">隱藏</string> <string name="make_profile_private">將個人資料設為私密!</string> <string name="v4_6_audio_video_calls">語音和視訊通話</string> @@ -991,10 +990,8 @@ <string name="v4_6_group_welcome_message_descr">設定向新成員顯示的訊息!</string> <string name="tap_to_activate_profile">點擊以激活配置檔案。</string> <string name="v4_6_audio_video_calls_descr">支援藍牙和其他改進。</string> - <string name="should_be_at_least_one_visible_profile">至少要有一個可見的個人檔案。</string> <string name="group_welcome_title">歡迎訊息</string> <string name="v4_6_chinese_spanish_interface_descr">感謝用戶-透過 Weblate 做出貢獻!</string> - <string name="should_be_at_least_one_profile">應該至少有一個個人檔案。</string> <string name="user_unmute">解除靜音</string> <string name="you_will_still_receive_calls_and_ntfs">當靜音配置檔案處於活動狀態時,你仍會接收來自靜音配置檔案的通話和通知。</string> <string name="user_unhide">取消隱藏</string> From ec57529f1217cb8f2bef068fc41a1f1b68ebddb8 Mon Sep 17 00:00:00 2001 From: Stanislav Dmitrenko <7953703+avently@users.noreply.github.com> Date: Fri, 19 Jan 2024 00:56:42 +0700 Subject: [PATCH 07/23] android, desktop: notes to self (#3695) * android, desktop: notes to self * change api * icon * icon * icon * eol * icon * changes * color * refactor * color * chats size * size --------- Co-authored-by: Evgeny Poberezkin <2769109+epoberezkin@users.noreply.github.com> Co-authored-by: spaced4ndy <8711996+spaced4ndy@users.noreply.github.com> --- apps/ios/Shared/ContentView.swift | 2 +- .../kotlin/chat/simplex/common/App.kt | 2 +- .../chat/simplex/common/model/ChatModel.kt | 71 ++++++++++++++++++- .../chat/simplex/common/model/SimpleXAPI.kt | 28 ++++++++ .../chat/simplex/common/ui/theme/Color.kt | 18 ++++- .../chat/simplex/common/ui/theme/Theme.kt | 6 +- .../simplex/common/views/chat/ChatInfoView.kt | 28 ++++---- .../common/views/chat/ChatItemInfoView.kt | 8 +-- .../simplex/common/views/chat/ChatView.kt | 40 ++++++++--- .../simplex/common/views/chat/ComposeView.kt | 7 +- .../views/chat/group/GroupChatInfoView.kt | 2 +- .../common/views/chat/item/CIFileView.kt | 11 +-- .../common/views/chat/item/CIImageView.kt | 2 + .../common/views/chat/item/CIVIdeoView.kt | 4 +- .../common/views/chat/item/ChatItemView.kt | 6 +- .../views/chatlist/ChatListNavLinkView.kt | 54 ++++++++++++-- .../common/views/chatlist/ChatListView.kt | 1 + .../views/chatlist/ShareListNavLinkView.kt | 15 +++- .../common/views/helpers/ChatInfoImage.kt | 10 ++- .../simplex/common/views/helpers/Utils.kt | 3 + .../commonMain/resources/MR/base/strings.xml | 10 +++ .../resources/MR/images/ic_folder_filled.svg | 18 +++++ 22 files changed, 290 insertions(+), 56 deletions(-) create mode 100644 apps/multiplatform/common/src/commonMain/resources/MR/images/ic_folder_filled.svg diff --git a/apps/ios/Shared/ContentView.swift b/apps/ios/Shared/ContentView.swift index c3a8ec280..45e0332da 100644 --- a/apps/ios/Shared/ContentView.swift +++ b/apps/ios/Shared/ContentView.swift @@ -186,7 +186,7 @@ struct ContentView: View { .onAppear { requestNtfAuthorization() // Local Authentication notice is to be shown on next start after onboarding is complete - if (!prefLANoticeShown && prefShowLANotice && !chatModel.chats.isEmpty) { + if (!prefLANoticeShown && prefShowLANotice && chatModel.chats.count > 2) { prefLANoticeShown = true alertManager.showAlert(laNoticeAlert()) } else if !chatModel.showCallView && CallController.shared.activeCallInvitation == nil { diff --git a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/App.kt b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/App.kt index a233ba6d5..bfff3bf9f 100644 --- a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/App.kt +++ b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/App.kt @@ -66,7 +66,7 @@ fun MainScreen() { !chatModel.controller.appPrefs.laNoticeShown.get() && showAdvertiseLAAlert && chatModel.controller.appPrefs.onboardingStage.get() == OnboardingStage.OnboardingComplete - && chatModel.chats.count() > 1 + && chatModel.chats.size > 2 && chatModel.activeCallInvitation.value == null ) { AppLock.showLANotice(ChatModel.controller.appPrefs.laNoticeShown) } diff --git a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/model/ChatModel.kt b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/model/ChatModel.kt index e53459015..be0e6ce72 100644 --- a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/model/ChatModel.kt +++ b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/model/ChatModel.kt @@ -663,6 +663,7 @@ data class ShowingInvitation( enum class ChatType(val type: String) { Direct("@"), Group("#"), + Local("*"), ContactRequest("<@"), ContactConnection(":"); } @@ -782,6 +783,7 @@ data class Chat( get() = when (chatInfo) { is ChatInfo.Direct -> true is ChatInfo.Group -> chatInfo.groupInfo.membership.memberRole >= GroupMemberRole.Member + is ChatInfo.Local -> true else -> false } @@ -864,6 +866,30 @@ sealed class ChatInfo: SomeChat, NamedChat { } } + @Serializable @SerialName("local") + data class Local(val noteFolder: NoteFolder): ChatInfo() { + override val chatType get() = ChatType.Local + override val localDisplayName get() = noteFolder.localDisplayName + override val id get() = noteFolder.id + override val apiId get() = noteFolder.apiId + override val ready get() = noteFolder.ready + override val sendMsgEnabled get() = noteFolder.sendMsgEnabled + override val ntfsEnabled get() = noteFolder.ntfsEnabled + override val incognito get() = noteFolder.incognito + override fun featureEnabled(feature: ChatFeature) = noteFolder.featureEnabled(feature) + override val timedMessagesTTL: Int? get() = noteFolder.timedMessagesTTL + override val createdAt get() = noteFolder.createdAt + override val updatedAt get() = noteFolder.updatedAt + override val displayName get() = noteFolder.displayName + override val fullName get() = noteFolder.fullName + override val image get() = noteFolder.image + override val localAlias get() = noteFolder.localAlias + + companion object { + val sampleData = Local(NoteFolder.sampleData) + } + } + @Serializable @SerialName("contactRequest") class ContactRequest(val contactRequest: UserContactRequest): ChatInfo() { override val chatType get() = ChatType.ContactRequest @@ -1466,6 +1492,40 @@ class MemberSubError ( val memberError: ChatError ) +@Serializable +class NoteFolder( + val noteFolderId: Long, + val favorite: Boolean, + val unread: Boolean, + override val createdAt: Instant, + override val updatedAt: Instant +): SomeChat, NamedChat { + override val chatType get() = ChatType.Local + override val id get() = "*$noteFolderId" + override val apiId get() = noteFolderId + override val ready get() = true + override val sendMsgEnabled get() = true + override val ntfsEnabled get() = false + override val incognito get() = false + override fun featureEnabled(feature: ChatFeature) = feature == ChatFeature.Voice + override val timedMessagesTTL: Int? get() = null + override val displayName get() = generalGetString(MR.strings.note_folder_local_display_name) + override val fullName get() = "" + override val image get() = null + override val localAlias get() = "" + override val localDisplayName: String get() = "" + + companion object { + val sampleData = NoteFolder( + noteFolderId = 1, + favorite = false, + unread = false, + createdAt = Clock.System.now(), + updatedAt = Clock.System.now() + ) + } +} + @Serializable class UserContactRequest ( val contactRequestId: Long, @@ -1666,6 +1726,8 @@ data class ChatItem ( else -> null } + val localNote: Boolean = chatDir is CIDirection.LocalSnd || chatDir is CIDirection.LocalRcv + val isDeletedContent: Boolean get() = when (content) { is CIContent.SndDeleted -> true @@ -1933,12 +1995,16 @@ sealed class CIDirection { @Serializable @SerialName("directRcv") class DirectRcv: CIDirection() @Serializable @SerialName("groupSnd") class GroupSnd: CIDirection() @Serializable @SerialName("groupRcv") class GroupRcv(val groupMember: GroupMember): CIDirection() + @Serializable @SerialName("localSnd") class LocalSnd: CIDirection() + @Serializable @SerialName("localRcv") class LocalRcv: CIDirection() val sent: Boolean get() = when(this) { is DirectSnd -> true is DirectRcv -> false is GroupSnd -> true is GroupRcv -> false + is LocalSnd -> true + is LocalRcv -> false } } @@ -2254,6 +2320,8 @@ class CIQuote ( is CIDirection.DirectRcv -> null is CIDirection.GroupSnd -> membership?.displayName ?: generalGetString(MR.strings.sender_you_pronoun) is CIDirection.GroupRcv -> chatDir.groupMember.displayName + is CIDirection.LocalSnd -> generalGetString(MR.strings.sender_you_pronoun) + is CIDirection.LocalRcv -> null null -> null } @@ -2525,7 +2593,8 @@ private val rcvCancelAction: CancelAction = CancelAction( @Serializable enum class FileProtocol { @SerialName("smp") SMP, - @SerialName("xftp") XFTP; + @SerialName("xftp") XFTP, + @SerialName("local") LOCAL; } @Serializable diff --git a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/model/SimpleXAPI.kt b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/model/SimpleXAPI.kt index a70b1190d..ab172e61f 100644 --- a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/model/SimpleXAPI.kt +++ b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/model/SimpleXAPI.kt @@ -680,6 +680,17 @@ object ChatController { } } } + suspend fun apiCreateChatItem(rh: Long?, noteFolderId: Long, file: CryptoFile? = null, mc: MsgContent): AChatItem? { + val cmd = CC.ApiCreateChatItem(noteFolderId, file, mc) + val r = sendCmd(rh, cmd) + return when (r) { + is CR.NewChatItem -> r.chatItem + else -> { + apiErrorAlert("apiCreateChatItem", generalGetString(MR.strings.error_creating_message), r) + null + } + } + } suspend fun apiGetChatItemInfo(rh: Long?, type: ChatType, id: Long, itemId: Long): ChatItemInfo? { return when (val r = sendCmd(rh, CC.ApiGetChatItemInfo(type, id, itemId))) { @@ -990,6 +1001,7 @@ object ChatController { val titleId = when (type) { ChatType.Direct -> MR.strings.error_deleting_contact ChatType.Group -> MR.strings.error_deleting_group + ChatType.Local -> MR.strings.error_deleting_note_folder ChatType.ContactRequest -> MR.strings.error_deleting_contact_request ChatType.ContactConnection -> MR.strings.error_deleting_pending_contact_connection } @@ -1001,6 +1013,17 @@ object ChatController { return success } + fun clearChat(chat: Chat, close: (() -> Unit)? = null) { + withBGApi { + val updatedChatInfo = apiClearChat(chat.remoteHostId, chat.chatInfo.chatType, chat.chatInfo.apiId) + if (updatedChatInfo != null) { + chatModel.clearChat(chat.remoteHostId, updatedChatInfo) + ntfManager.cancelNotificationsForChat(chat.chatInfo.id) + close?.invoke() + } + } + } + suspend fun apiClearChat(rh: Long?, type: ChatType, id: Long): ChatInfo? { val r = sendCmd(rh, CC.ApiClearChat(type, id)) if (r is CR.ChatCleared) return r.chatInfo @@ -2243,6 +2266,7 @@ sealed class CC { class ApiGetChat(val type: ChatType, val id: Long, val pagination: ChatPagination, val search: String = ""): CC() class ApiGetChatItemInfo(val type: ChatType, val id: Long, val itemId: Long): CC() class ApiSendMessage(val type: ChatType, val id: Long, val file: CryptoFile?, val quotedItemId: Long?, val mc: MsgContent, val live: Boolean, val ttl: Int?): CC() + class ApiCreateChatItem(val noteFolderId: Long, val file: CryptoFile?, val mc: MsgContent): CC() class ApiUpdateChatItem(val type: ChatType, val id: Long, val itemId: Long, val mc: MsgContent, val live: Boolean): 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() @@ -2374,6 +2398,9 @@ sealed class CC { val ttlStr = if (ttl != null) "$ttl" else "default" "/_send ${chatRef(type, id)} live=${onOff(live)} ttl=${ttlStr} json ${json.encodeToString(ComposedMessage(file, quotedItemId, mc))}" } + is ApiCreateChatItem -> { + "/_create *$noteFolderId json ${json.encodeToString(ComposedMessage(file, null, mc))}" + } is ApiUpdateChatItem -> "/_update item ${chatRef(type, id)} $itemId live=${onOff(live)} ${mc.cmdString}" is ApiDeleteChatItem -> "/_delete item ${chatRef(type, id)} $itemId ${mode.deleteMode}" is ApiDeleteMemberChatItem -> "/_delete member item #$groupId $groupMemberId $itemId" @@ -2502,6 +2529,7 @@ sealed class CC { is ApiGetChat -> "apiGetChat" is ApiGetChatItemInfo -> "apiGetChatItemInfo" is ApiSendMessage -> "apiSendMessage" + is ApiCreateChatItem -> "apiCreateChatItem" is ApiUpdateChatItem -> "apiUpdateChatItem" is ApiDeleteChatItem -> "apiDeleteChatItem" is ApiDeleteMemberChatItem -> "apiDeleteMemberChatItem" diff --git a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/ui/theme/Color.kt b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/ui/theme/Color.kt index dc9ea2def..5eeedbb2a 100644 --- a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/ui/theme/Color.kt +++ b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/ui/theme/Color.kt @@ -1,8 +1,12 @@ package chat.simplex.common.ui.theme import androidx.compose.material.LocalContentColor +import androidx.compose.material.MaterialTheme import androidx.compose.runtime.Composable -import androidx.compose.ui.graphics.Color +import androidx.compose.runtime.collectAsState +import androidx.compose.ui.graphics.* +import chat.simplex.common.views.helpers.mixWith +import kotlin.math.min val Purple200 = Color(0xFFBB86FC) val Purple500 = Color(0xFF6200EE) @@ -27,5 +31,17 @@ val WarningOrange = Color(255, 127, 0, 255) val WarningYellow = Color(255, 192, 0, 255) val FileLight = Color(183, 190, 199, 255) val FileDark = Color(101, 101, 106, 255) +val SentMessageColor = Color(0x1E45B8FF) val MenuTextColor: Color @Composable get () = if (isInDarkTheme()) LocalContentColor.current.copy(alpha = 0.8f) else Color.Black +val NoteFolderIconColor: Color @Composable get() = with(CurrentColors.collectAsState().value.appColors.sentMessage) { + // Default color looks too light and better to have it here a little bit brighter + if (alpha == SentMessageColor.alpha) { + copy(min(SentMessageColor.alpha + 0.1f, 1f)) + } else { + // Color is non-standard and theme maker can choose color without alpha at all since the theme bound to dark/light variant, + // and it shouldn't be universal + this + } +} + diff --git a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/ui/theme/Theme.kt b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/ui/theme/Theme.kt index bef0d7e34..5cf05f64c 100644 --- a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/ui/theme/Theme.kt +++ b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/ui/theme/Theme.kt @@ -212,7 +212,7 @@ val DarkColorPalette = darkColors( ) val DarkColorPaletteApp = AppColors( title = SimplexBlue, - sentMessage = Color(0x1E45B8FF), + sentMessage = SentMessageColor, receivedMessage = Color(0x20B1B0B5) ) @@ -231,7 +231,7 @@ val LightColorPalette = lightColors( ) val LightColorPaletteApp = AppColors( title = SimplexBlue, - sentMessage = Color(0x1E45B8FF), + sentMessage = SentMessageColor, receivedMessage = Color(0x20B1B0B5) ) @@ -251,7 +251,7 @@ val SimplexColorPalette = darkColors( ) val SimplexColorPaletteApp = AppColors( title = Color(0xFF267BE5), - sentMessage = Color(0x1E45B8FF), + sentMessage = SentMessageColor, receivedMessage = Color(0x20B1B0B5) ) diff --git a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/ChatInfoView.kt b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/ChatInfoView.kt index 32f6d6a6d..f195c723f 100644 --- a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/ChatInfoView.kt +++ b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/ChatInfoView.kt @@ -29,6 +29,7 @@ import androidx.compose.ui.text.style.TextOverflow import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.sp import chat.simplex.common.model.* +import chat.simplex.common.model.ChatModel.controller import chat.simplex.common.ui.theme.* import chat.simplex.common.views.helpers.* import chat.simplex.common.views.usersettings.* @@ -91,7 +92,7 @@ fun ChatInfoView( } }, deleteContact = { deleteContactDialog(chat, chatModel, close) }, - clearChat = { clearChatDialog(chat, chatModel, close) }, + clearChat = { clearChatDialog(chat, close) }, switchContactAddress = { showSwitchAddressAlert(switchAddress = { withBGApi { @@ -254,23 +255,22 @@ fun deleteContact(chat: Chat, chatModel: ChatModel, close: (() -> Unit)?, notify } } -fun clearChatDialog(chat: Chat, chatModel: ChatModel, close: (() -> Unit)? = null) { - val chatInfo = chat.chatInfo +fun clearChatDialog(chat: Chat, close: (() -> Unit)? = null) { AlertManager.shared.showAlertDialog( title = generalGetString(MR.strings.clear_chat_question), text = generalGetString(MR.strings.clear_chat_warning), confirmText = generalGetString(MR.strings.clear_verb), - onConfirm = { - withBGApi { - val chatRh = chat.remoteHostId - val updatedChatInfo = chatModel.controller.apiClearChat(chatRh, chatInfo.chatType, chatInfo.apiId) - if (updatedChatInfo != null) { - chatModel.clearChat(chatRh, updatedChatInfo) - ntfManager.cancelNotificationsForChat(chatInfo.id) - close?.invoke() - } - } - }, + onConfirm = { controller.clearChat(chat, close) }, + destructive = true, + ) +} + +fun clearNoteFolderDialog(chat: Chat, close: (() -> Unit)? = null) { + AlertManager.shared.showAlertDialog( + title = generalGetString(MR.strings.clear_note_folder_question), + text = generalGetString(MR.strings.clear_note_folder_warning), + confirmText = generalGetString(MR.strings.clear_verb), + onConfirm = { controller.clearChat(chat, close) }, destructive = true, ) } diff --git a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/ChatItemInfoView.kt b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/ChatItemInfoView.kt index 3754315d0..a46821452 100644 --- a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/ChatItemInfoView.kt +++ b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/ChatItemInfoView.kt @@ -154,9 +154,9 @@ fun ChatItemInfoView(chatModel: ChatModel, ci: ChatItem, ciInfo: ChatItemInfo, d @Composable fun Details() { - AppBarTitle(stringResource(if (sent) MR.strings.sent_message else MR.strings.received_message)) + AppBarTitle(stringResource(if (ci.localNote) MR.strings.saved_message_title else if (sent) MR.strings.sent_message else MR.strings.received_message)) SectionView { - InfoRow(stringResource(MR.strings.info_row_sent_at), localTimestamp(ci.meta.itemTs)) + InfoRow(stringResource(if (!ci.localNote) MR.strings.info_row_sent_at else MR.strings.info_row_created_at), localTimestamp(ci.meta.itemTs)) if (!sent) { InfoRow(stringResource(MR.strings.info_row_received_at), localTimestamp(ci.meta.createdAt)) } @@ -393,9 +393,9 @@ private fun membersStatuses(chatModel: ChatModel, memberDeliveryStatuses: List<M fun itemInfoShareText(chatModel: ChatModel, ci: ChatItem, chatItemInfo: ChatItemInfo, devTools: Boolean): String { val meta = ci.meta val sent = ci.chatDir.sent - val shareText = mutableListOf<String>("# " + generalGetString(if (sent) MR.strings.sent_message else MR.strings.received_message), "") + val shareText = mutableListOf<String>("# " + generalGetString(if (ci.localNote) MR.strings.saved_message_title else if (sent) MR.strings.sent_message else MR.strings.received_message), "") - shareText.add(String.format(generalGetString(MR.strings.share_text_sent_at), localTimestamp(meta.itemTs))) + shareText.add(String.format(generalGetString(if (ci.localNote) MR.strings.share_text_created_at else MR.strings.share_text_sent_at), localTimestamp(meta.itemTs))) if (!ci.chatDir.sent) { shareText.add(String.format(generalGetString(MR.strings.share_text_received_at), localTimestamp(meta.createdAt))) } diff --git a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/ChatView.kt b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/ChatView.kt index 8a6c74bb3..2e99d791b 100644 --- a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/ChatView.kt +++ b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/ChatView.kt @@ -117,7 +117,7 @@ fun ChatView(chatId: String, chatModel: ChatModel, onComposed: suspend (chatId: } val clipboard = LocalClipboardManager.current when (chat.chatInfo) { - is ChatInfo.Direct, is ChatInfo.Group -> { + is ChatInfo.Direct, is ChatInfo.Group, is ChatInfo.Local -> { ChatLayout( chat, unreadCount, @@ -624,11 +624,27 @@ fun ChatInfoToolbar( val barButtons = arrayListOf<@Composable RowScope.() -> Unit>() val menuItems = arrayListOf<@Composable () -> Unit>() val activeCall by remember { chatModel.activeCall } - menuItems.add { - ItemAction(stringResource(MR.strings.search_verb), painterResource(MR.images.ic_search), onClick = { - showMenu.value = false - showSearch = true - }) + if (chat.chatInfo is ChatInfo.Local) { + barButtons.add { + IconButton({ + showMenu.value = false + showSearch = true + }, enabled = chat.chatInfo.noteFolder.ready + ) { + Icon( + painterResource(MR.images.ic_search), + stringResource(MR.strings.search_verb).capitalize(Locale.current), + tint = if (chat.chatInfo.noteFolder.ready) MaterialTheme.colors.primary else MaterialTheme.colors.secondary + ) + } + } + } else { + menuItems.add { + ItemAction(stringResource(MR.strings.search_verb), painterResource(MR.images.ic_search), onClick = { + showMenu.value = false + showSearch = true + }) + } } if (chat.chatInfo is ChatInfo.Direct && chat.chatInfo.contact.allowsFeature(ChatFeature.Calls)) { @@ -743,16 +759,18 @@ fun ChatInfoToolbar( } } - barButtons.add { - IconButton({ showMenu.value = true }) { - Icon(MoreVertFilled, stringResource(MR.strings.icon_descr_more_button), tint = MaterialTheme.colors.primary) + if (menuItems.isNotEmpty()) { + barButtons.add { + IconButton({ showMenu.value = true }) { + Icon(MoreVertFilled, stringResource(MR.strings.icon_descr_more_button), tint = MaterialTheme.colors.primary) + } } } DefaultTopAppBar( navigationButton = { if (appPlatform.isAndroid || showSearch) { NavigationButtonBack(onBackClicked) } }, title = { ChatInfoToolbarTitle(chat.chatInfo) }, - onTitleClick = info, + onTitleClick = if (chat.chatInfo is ChatInfo.Local) null else info, showSearch = showSearch, onSearchValueChanged = onSearchValueChanged, buttons = barButtons @@ -910,7 +928,7 @@ fun BoxWithConstraintsScope.ChatItemsList( if (dismissState.isAnimationRunning && (swipedToStart || swipedToEnd)) { LaunchedEffect(Unit) { scope.launch { - if (cItem.content is CIContent.SndMsgContent || cItem.content is CIContent.RcvMsgContent) { + if ((cItem.content is CIContent.SndMsgContent || cItem.content is CIContent.RcvMsgContent) && chat.chatInfo !is ChatInfo.Local) { if (composeState.value.editing) { composeState.value = ComposeState(contextItem = ComposeContextItem.QuotedItem(cItem), useLinkPreviews = useLinkPreviews) } else if (cItem.id != ChatItem.TEMP_LIVE_CHAT_ITEM_ID) { diff --git a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/ComposeView.kt b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/ComposeView.kt index e46e7a305..cd0c424e0 100644 --- a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/ComposeView.kt +++ b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/ComposeView.kt @@ -353,7 +353,10 @@ fun ComposeView( suspend fun send(chat: Chat, mc: MsgContent, quoted: Long?, file: CryptoFile? = null, live: Boolean = false, ttl: Int?): ChatItem? { val cInfo = chat.chatInfo - val aChatItem = chatModel.controller.apiSendMessage( + val aChatItem = if (chat.chatInfo.chatType == ChatType.Local) + chatModel.controller.apiCreateChatItem(rh = chat.remoteHostId, noteFolderId = chat.chatInfo.apiId, file = file, mc = mc) + else + chatModel.controller.apiSendMessage( rh = chat.remoteHostId, type = cInfo.chatType, id = cInfo.apiId, @@ -877,7 +880,7 @@ fun ComposeView( sendMessage(ttl) resetLinkPreview() }, - sendLiveMessage = ::sendLiveMessage, + sendLiveMessage = if (chat.chatInfo.chatType != ChatType.Local) ::sendLiveMessage else null, updateLiveMessage = ::updateLiveMessage, cancelLiveMessage = { composeState.value = composeState.value.copy(liveMessage = null) diff --git a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/group/GroupChatInfoView.kt b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/group/GroupChatInfoView.kt index e412dd025..4d76afcbb 100644 --- a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/group/GroupChatInfoView.kt +++ b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/group/GroupChatInfoView.kt @@ -110,7 +110,7 @@ fun GroupChatInfoView(chatModel: ChatModel, rhId: Long?, chatId: String, groupLi } }, deleteGroup = { deleteGroupDialog(chat, groupInfo, chatModel, close) }, - clearChat = { clearChatDialog(chat, chatModel, close) }, + clearChat = { clearChatDialog(chat, close) }, leaveGroup = { leaveGroupDialog(rhId, groupInfo, chatModel, close) }, manageGroupLink = { ModalManager.end.showModal { GroupLinkView(chatModel, rhId, groupInfo, groupLink, groupLinkMemberRole, onGroupLinkUpdated) } diff --git a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/item/CIFileView.kt b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/item/CIFileView.kt index 79af76da8..24e9fd691 100644 --- a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/item/CIFileView.kt +++ b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/item/CIFileView.kt @@ -68,8 +68,8 @@ fun CIFileView( fun fileAction() { if (file != null) { - when (file.fileStatus) { - is CIFileStatus.RcvInvitation -> { + when { + file.fileStatus is CIFileStatus.RcvInvitation -> { if (fileSizeValid()) { receiveFile(file.fileId) } else { @@ -79,7 +79,7 @@ fun CIFileView( ) } } - is CIFileStatus.RcvAccepted -> + file.fileStatus is CIFileStatus.RcvAccepted -> when (file.fileProtocol) { FileProtocol.XFTP -> AlertManager.shared.showAlertMsg( @@ -91,8 +91,9 @@ fun CIFileView( generalGetString(MR.strings.waiting_for_file), generalGetString(MR.strings.file_will_be_received_when_contact_is_online) ) + FileProtocol.LOCAL -> {} } - is CIFileStatus.RcvComplete -> { + file.fileStatus is CIFileStatus.RcvComplete || (file.fileStatus is CIFileStatus.SndStored && file.fileProtocol == FileProtocol.LOCAL) -> { withBGApi { var filePath = getLoadedFilePath(file) if (chatModel.connectedToRemote() && filePath == null) { @@ -152,11 +153,13 @@ fun CIFileView( when (file.fileProtocol) { FileProtocol.XFTP -> progressIndicator() FileProtocol.SMP -> fileIcon() + FileProtocol.LOCAL -> fileIcon() } is CIFileStatus.SndTransfer -> when (file.fileProtocol) { FileProtocol.XFTP -> progressCircle(file.fileStatus.sndProgress, file.fileStatus.sndTotal) FileProtocol.SMP -> progressIndicator() + FileProtocol.LOCAL -> {} } is CIFileStatus.SndComplete -> fileIcon(innerIcon = painterResource(MR.images.ic_check_filled)) is CIFileStatus.SndCancelled -> fileIcon(innerIcon = painterResource(MR.images.ic_close)) diff --git a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/item/CIImageView.kt b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/item/CIImageView.kt index cbec5c289..5aed7742b 100644 --- a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/item/CIImageView.kt +++ b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/item/CIImageView.kt @@ -70,6 +70,7 @@ fun CIImageView( when (file.fileProtocol) { FileProtocol.XFTP -> progressIndicator() FileProtocol.SMP -> {} + FileProtocol.LOCAL -> {} } is CIFileStatus.SndTransfer -> progressIndicator() is CIFileStatus.SndComplete -> fileIcon(painterResource(MR.images.ic_check_filled), MR.strings.icon_descr_image_snd_complete) @@ -199,6 +200,7 @@ fun CIImageView( generalGetString(MR.strings.waiting_for_image), generalGetString(MR.strings.image_will_be_received_when_contact_is_online) ) + FileProtocol.LOCAL -> {} } CIFileStatus.RcvTransfer(rcvProgress = 7, rcvTotal = 10) -> {} // ? CIFileStatus.RcvComplete -> {} // ? diff --git a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/item/CIVIdeoView.kt b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/item/CIVIdeoView.kt index 609a895e4..413d95b67 100644 --- a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/item/CIVIdeoView.kt +++ b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/item/CIVIdeoView.kt @@ -82,12 +82,12 @@ fun CIVideoView( generalGetString(MR.strings.waiting_for_video), generalGetString(MR.strings.video_will_be_received_when_contact_completes_uploading) ) - FileProtocol.SMP -> AlertManager.shared.showAlertMsg( generalGetString(MR.strings.waiting_for_video), generalGetString(MR.strings.video_will_be_received_when_contact_is_online) ) + FileProtocol.LOCAL -> {} } CIFileStatus.RcvTransfer(rcvProgress = 7, rcvTotal = 10) -> {} // ? CIFileStatus.RcvComplete -> {} // ? @@ -377,11 +377,13 @@ private fun loadingIndicator(file: CIFile?) { when (file.fileProtocol) { FileProtocol.XFTP -> progressIndicator() FileProtocol.SMP -> {} + FileProtocol.LOCAL -> {} } is CIFileStatus.SndTransfer -> when (file.fileProtocol) { FileProtocol.XFTP -> progressCircle(file.fileStatus.sndProgress, file.fileStatus.sndTotal) FileProtocol.SMP -> progressIndicator() + FileProtocol.LOCAL -> {} } is CIFileStatus.SndComplete -> fileIcon(painterResource(MR.images.ic_check_filled), MR.strings.icon_descr_video_snd_complete) is CIFileStatus.SndCancelled -> fileIcon(painterResource(MR.images.ic_close), MR.strings.icon_descr_file) diff --git a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/item/ChatItemView.kt b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/item/ChatItemView.kt index 6a1aeb21c..073d10887 100644 --- a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/item/ChatItemView.kt +++ b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/item/ChatItemView.kt @@ -183,7 +183,7 @@ fun ChatItemView( if (cInfo.featureEnabled(ChatFeature.Reactions) && cItem.allowAddReaction) { MsgReactionsMenu() } - if (cItem.meta.itemDeleted == null && !live) { + if (cItem.meta.itemDeleted == null && !live && !cItem.localNote) { ItemAction(stringResource(MR.strings.reply_verb), painterResource(MR.images.ic_reply), onClick = { if (composeState.value.editing) { composeState.value = ComposeState(contextItem = ComposeContextItem.QuotedItem(cItem), useLinkPreviews = useLinkPreviews) @@ -240,7 +240,7 @@ fun ChatItemView( if (revealed.value) { HideItemAction(revealed, showMenu) } - if (cItem.meta.itemDeleted == null && cItem.file != null && cItem.file.cancelAction != null) { + if (cItem.meta.itemDeleted == null && cItem.file != null && cItem.file.cancelAction != null && !cItem.localNote) { CancelFileItemAction(cItem.file.fileId, showMenu, cancelFile = cancelFile, cancelAction = cItem.file.cancelAction) } if (!(live && cItem.meta.isLive)) { @@ -677,7 +677,7 @@ fun deleteMessageAlertDialog(chatItem: ChatItem, questionText: String, deleteMes deleteMessage(chatItem.id, CIDeleteMode.cidmInternal) AlertManager.shared.hideAlert() }) { Text(stringResource(MR.strings.for_me_only), color = MaterialTheme.colors.error) } - if (chatItem.meta.editable) { + if (chatItem.meta.editable && !chatItem.localNote) { Spacer(Modifier.padding(horizontal = 4.dp)) TextButton(onClick = { deleteMessage(chatItem.id, CIDeleteMode.cidmBroadcast) diff --git a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chatlist/ChatListNavLinkView.kt b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chatlist/ChatListNavLinkView.kt index a80c70398..15b1db6c4 100644 --- a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chatlist/ChatListNavLinkView.kt +++ b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chatlist/ChatListNavLinkView.kt @@ -95,6 +95,25 @@ fun ChatListNavLinkView(chat: Chat, nextChatSelected: State<Boolean>) { selectedChat, nextChatSelected, ) + is ChatInfo.Local -> { + ChatListNavLinkLayout( + chatLinkPreview = { + tryOrShowError("${chat.id}ChatListNavLink", error = { ErrorChatListItem() }) { + ChatPreviewView(chat, showChatPreviews, chatModel.draft.value, chatModel.draftChatId.value, chatModel.currentUser.value?.profile?.displayName, null, disabled, linkMode, inProgress = false, progressByTimeout = false) + } + }, + click = { noteFolderChatAction(chat.remoteHostId, chat.chatInfo.noteFolder) }, + dropdownMenuItems = { + tryOrShowError("${chat.id}ChatListNavLinkDropdown", error = {}) { + NoteFolderMenuItems(chat, showMenu, showMarkRead) + } + }, + showMenu, + disabled, + selectedChat, + nextChatSelected, + ) + } is ChatInfo.ContactRequest -> ChatListNavLinkLayout( chatLinkPreview = { @@ -174,6 +193,10 @@ fun groupChatAction(rhId: Long?, groupInfo: GroupInfo, chatModel: ChatModel, inP } } +fun noteFolderChatAction(rhId: Long?, noteFolder: NoteFolder) { + withBGApi { openChat(rhId, ChatInfo.Local(noteFolder), chatModel) } +} + suspend fun openDirectChat(rhId: Long?, contactId: Long, chatModel: ChatModel) { val chat = chatModel.controller.apiGetChat(rhId, ChatType.Direct, contactId) if (chat != null) { @@ -247,7 +270,7 @@ fun ContactMenuItems(chat: Chat, contact: Contact, chatModel: ChatModel, showMen } ToggleFavoritesChatAction(chat, chatModel, chat.chatInfo.chatSettings?.favorite == true, showMenu) ToggleNotificationsChatAction(chat, chatModel, chat.chatInfo.ntfsEnabled, showMenu) - ClearChatAction(chat, chatModel, showMenu) + ClearChatAction(chat, showMenu) } DeleteContactAction(chat, chatModel, showMenu) } @@ -286,7 +309,7 @@ fun GroupMenuItems( } ToggleFavoritesChatAction(chat, chatModel, chat.chatInfo.chatSettings?.favorite == true, showMenu) ToggleNotificationsChatAction(chat, chatModel, chat.chatInfo.ntfsEnabled, showMenu) - ClearChatAction(chat, chatModel, showMenu) + ClearChatAction(chat, showMenu) if (groupInfo.membership.memberCurrent) { LeaveGroupAction(chat.remoteHostId, groupInfo, chatModel, showMenu) } @@ -297,6 +320,16 @@ fun GroupMenuItems( } } +@Composable +fun NoteFolderMenuItems(chat: Chat, showMenu: MutableState<Boolean>, showMarkRead: Boolean) { + if (showMarkRead) { + MarkReadChatAction(chat, chatModel, showMenu) + } else { + MarkUnreadChatAction(chat, chatModel, showMenu) + } + ClearNoteFolderAction(chat, showMenu) +} + @Composable fun MarkReadChatAction(chat: Chat, chatModel: ChatModel, showMenu: MutableState<Boolean>) { ItemAction( @@ -347,12 +380,25 @@ fun ToggleNotificationsChatAction(chat: Chat, chatModel: ChatModel, ntfsEnabled: } @Composable -fun ClearChatAction(chat: Chat, chatModel: ChatModel, showMenu: MutableState<Boolean>) { +fun ClearChatAction(chat: Chat, showMenu: MutableState<Boolean>) { ItemAction( stringResource(MR.strings.clear_chat_menu_action), painterResource(MR.images.ic_settings_backup_restore), onClick = { - clearChatDialog(chat, chatModel) + clearChatDialog(chat) + showMenu.value = false + }, + color = WarningOrange + ) +} + +@Composable +fun ClearNoteFolderAction(chat: Chat, showMenu: MutableState<Boolean>) { + ItemAction( + stringResource(MR.strings.clear_chat_menu_action), + painterResource(MR.images.ic_settings_backup_restore), + onClick = { + clearNoteFolderDialog(chat) showMenu.value = false }, color = WarningOrange diff --git a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chatlist/ChatListView.kt b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chatlist/ChatListView.kt index 28d276b26..3a47d062a 100644 --- a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chatlist/ChatListView.kt +++ b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chatlist/ChatListView.kt @@ -518,6 +518,7 @@ private fun filteredChats( } else { viewNameContains(cInfo, s) } + is ChatInfo.Local -> s.isEmpty() || viewNameContains(cInfo, s) is ChatInfo.ContactRequest -> s.isEmpty() || viewNameContains(cInfo, s) is ChatInfo.ContactConnection -> (s.isNotEmpty() && cInfo.contactConnection.localAlias.lowercase().contains(s)) || (s.isEmpty() && chat.id == chatModel.chatId.value) is ChatInfo.InvalidJSON -> chat.id == chatModel.chatId.value diff --git a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chatlist/ShareListNavLinkView.kt b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chatlist/ShareListNavLinkView.kt index ad8f93990..1de1e40af 100644 --- a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chatlist/ShareListNavLinkView.kt +++ b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chatlist/ShareListNavLinkView.kt @@ -9,9 +9,10 @@ import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.Color import androidx.compose.ui.text.style.TextOverflow import androidx.compose.ui.unit.dp -import chat.simplex.common.ui.theme.Indigo import chat.simplex.common.views.helpers.ProfileImage import chat.simplex.common.model.* +import chat.simplex.common.ui.theme.* +import chat.simplex.res.MR @Composable fun ShareListNavLinkView(chat: Chat, chatModel: ChatModel) { @@ -29,6 +30,12 @@ fun ShareListNavLinkView(chat: Chat, chatModel: ChatModel) { click = { groupChatAction(chat.remoteHostId, chat.chatInfo.groupInfo, chatModel) }, stopped ) + is ChatInfo.Local -> + ShareListNavLinkLayout( + chatLinkPreview = { SharePreviewView(chat) }, + click = { noteFolderChatAction(chat.remoteHostId, chat.chatInfo.noteFolder) }, + stopped + ) is ChatInfo.ContactRequest, is ChatInfo.ContactConnection, is ChatInfo.InvalidJSON -> {} } } @@ -56,7 +63,11 @@ private fun SharePreviewView(chat: Chat) { verticalAlignment = Alignment.CenterVertically, horizontalArrangement = Arrangement.spacedBy(4.dp) ) { - ProfileImage(size = 46.dp, chat.chatInfo.image) + if (chat.chatInfo is ChatInfo.Local) { + ProfileImage(size = 46.dp, null, icon = MR.images.ic_folder_filled, color = NoteFolderIconColor) + } else { + ProfileImage(size = 46.dp, chat.chatInfo.image) + } Text( chat.chatInfo.chatViewName, maxLines = 1, overflow = TextOverflow.Ellipsis, color = if (chat.chatInfo.incognito) Indigo else Color.Unspecified diff --git a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/helpers/ChatInfoImage.kt b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/helpers/ChatInfoImage.kt index abc894942..c667ed9ac 100644 --- a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/helpers/ChatInfoImage.kt +++ b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/helpers/ChatInfoImage.kt @@ -17,6 +17,7 @@ import androidx.compose.ui.unit.Dp import androidx.compose.ui.unit.dp import chat.simplex.common.model.ChatInfo import chat.simplex.common.platform.base64ToBitmap +import chat.simplex.common.ui.theme.NoteFolderIconColor import chat.simplex.common.ui.theme.SimpleXTheme import chat.simplex.res.MR import dev.icerock.moko.resources.ImageResource @@ -24,9 +25,12 @@ import dev.icerock.moko.resources.ImageResource @Composable fun ChatInfoImage(chatInfo: ChatInfo, size: Dp, iconColor: Color = MaterialTheme.colors.secondaryVariant) { val icon = - if (chatInfo is ChatInfo.Group) MR.images.ic_supervised_user_circle_filled - else MR.images.ic_account_circle_filled - ProfileImage(size, chatInfo.image, icon, iconColor) + when (chatInfo) { + is ChatInfo.Group -> MR.images.ic_supervised_user_circle_filled + is ChatInfo.Direct -> MR.images.ic_account_circle_filled + else -> MR.images.ic_folder_filled + } + ProfileImage(size, chatInfo.image, icon, if (chatInfo is ChatInfo.Local) NoteFolderIconColor else iconColor) } @Composable diff --git a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/helpers/Utils.kt b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/helpers/Utils.kt index a067cb2dd..75c730b72 100644 --- a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/helpers/Utils.kt +++ b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/helpers/Utils.kt @@ -132,6 +132,8 @@ const val MAX_FILE_SIZE_SMP: Long = 8000000 const val MAX_FILE_SIZE_XFTP: Long = 1_073_741_824 // 1GB +const val MAX_FILE_SIZE_LOCAL: Long = Long.MAX_VALUE + expect fun getAppFileUri(fileName: String): URI // https://developer.android.com/training/data-storage/shared/documents-files#bitmap @@ -357,6 +359,7 @@ fun getMaxFileSize(fileProtocol: FileProtocol): Long { return when (fileProtocol) { FileProtocol.XFTP -> MAX_FILE_SIZE_XFTP FileProtocol.SMP -> MAX_FILE_SIZE_SMP + FileProtocol.LOCAL -> MAX_FILE_SIZE_LOCAL } } diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/base/strings.xml b/apps/multiplatform/common/src/commonMain/resources/MR/base/strings.xml index e3711afaf..47cf4bf3a 100644 --- a/apps/multiplatform/common/src/commonMain/resources/MR/base/strings.xml +++ b/apps/multiplatform/common/src/commonMain/resources/MR/base/strings.xml @@ -51,6 +51,9 @@ <string name="decryption_error">Decryption error</string> <string name="encryption_renegotiation_error">Encryption re-negotiation error</string> + <!-- NoteFolder - ChatModel.kt --> + <string name="note_folder_local_display_name">Private notes</string> + <!-- PendingContactConnection - ChatModel.kt --> <string name="connection_local_display_name">connection %1$d</string> <string name="display_name_connection_established">connection established</string> @@ -99,6 +102,7 @@ <string name="connection_error">Connection error</string> <string name="network_error_desc">Please check your network connection with %1$s and try again.</string> <string name="error_sending_message">Error sending message</string> + <string name="error_creating_message">Error creating message</string> <string name="error_loading_details">Error loading details</string> <string name="error_adding_members">Error adding member(s)</string> <string name="error_joining_group">Error joining group</string> @@ -116,6 +120,7 @@ <string name="sender_may_have_deleted_the_connection_request">Sender may have deleted the connection request.</string> <string name="error_deleting_contact">Error deleting contact</string> <string name="error_deleting_group">Error deleting group</string> + <string name="error_deleting_note_folder">Error deleting private notes</string> <string name="error_deleting_contact_request">Error deleting contact request</string> <string name="error_deleting_pending_contact_connection">Error deleting pending contact connection</string> <string name="error_changing_address">Error changing address</string> @@ -471,7 +476,9 @@ <!-- Clear Chat - ChatListNavLinkView.kt --> <string name="clear_chat_question">Clear chat?</string> + <string name="clear_note_folder_question">Clear private notes?</string> <string name="clear_chat_warning">All messages will be deleted - this cannot be undone! The messages will be deleted ONLY for you.</string> + <string name="clear_note_folder_warning">All messages will be deleted - this cannot be undone!</string> <string name="clear_verb">Clear</string> <string name="clear_chat_button">Clear chat</string> <string name="clear_chat_menu_action">Clear</string> @@ -1301,6 +1308,7 @@ <string name="info_row_database_id">Database ID</string> <string name="info_row_updated_at">Record updated at</string> <string name="info_row_sent_at">Sent at</string> + <string name="info_row_created_at">Created at</string> <string name="info_row_received_at">Received at</string> <string name="info_row_deleted_at">Deleted at</string> <string name="info_row_moderated_at">Moderated at</string> @@ -1308,6 +1316,7 @@ <string name="share_text_database_id">Database ID: %d</string> <string name="share_text_updated_at">Record updated at: %s</string> <string name="share_text_sent_at">Sent at: %s</string> + <string name="share_text_created_at">Created at: %s</string> <string name="share_text_received_at">Received at: %s</string> <string name="share_text_deleted_at">Deleted at: %s</string> <string name="share_text_moderated_at">Moderated at: %s</string> @@ -1317,6 +1326,7 @@ <string name="current_version_timestamp">%s (current)</string> <string name="item_info_no_text">no text</string> <string name="recipient_colon_delivery_status">%s: %s</string> + <string name="saved_message_title">Saved message</string> <!-- GroupMemberInfoView.kt --> <string name="button_remove_member_question">Remove member?</string> diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_folder_filled.svg b/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_folder_filled.svg new file mode 100644 index 000000000..f4c284a5f --- /dev/null +++ b/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_folder_filled.svg @@ -0,0 +1,18 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<svg + height="24" + viewBox="0 -960 960 960" + width="24" + xmlns="http://www.w3.org/2000/svg"> + <path + id="path151" + style="display:inline;fill:#ffffff;stroke-width:58" + d="M 480,-880 A 400,400 0 0 0 80,-480 400,400 0 0 0 480,-80 400,400 0 0 0 880,-480 400,400 0 0 0 480,-880 Z m -194.65461,218.29769 h 162.0477 l 33.18257,33.18257 h 194.07895 c 8.44741,0 16.07203,3.40719 22.90296,10.23849 6.83129,6.83091 10.2796,14.49667 10.2796,22.94408 v 263.85691 c 0,8.44742 -3.44831,16.07205 -10.2796,22.90295 -6.83093,6.83132 -14.45555,10.27962 -22.90296,10.27962 H 285.34539 c -8.83193,0 -16.59324,-3.4483 -23.23191,-10.27962 -6.63903,-6.8309 -9.95065,-14.45553 -9.95065,-22.90295 v -297.03948 c 0,-8.44742 3.31162,-16.07205 9.95065,-22.90295 6.63867,-6.83132 14.39998,-10.27962 23.23191,-10.27962 z" /> + <rect + style="font-variation-settings:normal;opacity:1;vector-effect:none;fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:19.9532;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;stop-color:#000000;stop-opacity:1" + id="rect151" + width="500" + height="30" + x="220" + y="-540" /> +</svg> From 2dae9180ec41186e49aa1500e0cd7cc237663f70 Mon Sep 17 00:00:00 2001 From: Stanislav Dmitrenko <7953703+avently@users.noreply.github.com> Date: Fri, 19 Jan 2024 02:14:18 +0700 Subject: [PATCH 08/23] ios: text color of group invitation in chat list (#3703) * ios: text color of group invitation in chat list * refactor --------- Co-authored-by: Avently <avently@local> Co-authored-by: Evgeny Poberezkin <evgeny@poberezkin.com> --- apps/ios/Shared/Views/ChatList/ChatPreviewView.swift | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/apps/ios/Shared/Views/ChatList/ChatPreviewView.swift b/apps/ios/Shared/Views/ChatList/ChatPreviewView.swift index 4f57158af..186a709ce 100644 --- a/apps/ios/Shared/Views/ChatList/ChatPreviewView.swift +++ b/apps/ios/Shared/Views/ChatList/ChatPreviewView.swift @@ -93,11 +93,11 @@ struct ChatPreviewView: View { case let .direct(contact): previewTitle(contact.verified == true ? verifiedIcon + t : t).foregroundColor(deleting ? Color.secondary : nil) case let .group(groupInfo): - let v = previewTitle(t).foregroundColor(deleting ? Color.secondary : nil) + let v = previewTitle(t) switch (groupInfo.membership.memberStatus) { case .memInvited: v.foregroundColor(deleting ? .secondary : chat.chatInfo.incognito ? .indigo : .accentColor) case .memAccepted: v.foregroundColor(.secondary) - default: v.foregroundColor(deleting ? Color.secondary : nil) + default: if deleting { v.foregroundColor(.secondary) } else { v } } default: previewTitle(t) } From b69b72a93c86cdf8f257d52e9081ebe7364a8b26 Mon Sep 17 00:00:00 2001 From: Evgeny Poberezkin <evgeny@poberezkin.com> Date: Thu, 18 Jan 2024 20:44:57 +0000 Subject: [PATCH 09/23] ui: What's new in v5.5 (#3705) * ios: whatsnew v5.5 * update * android whats new, update ios * export ios localizations --- .../Views/Onboarding/WhatsNewView.swift | 36 + .../bg.xcloc/Localized Contents/bg.xliff | 105 + .../cs.xcloc/Localized Contents/cs.xliff | 105 + .../de.xcloc/Localized Contents/de.xliff | 105 + .../en.xcloc/Localized Contents/en.xliff | 132 + .../es.xcloc/Localized Contents/es.xliff | 105 + .../fi.xcloc/Localized Contents/fi.xliff | 105 + .../fr.xcloc/Localized Contents/fr.xliff | 105 + .../it.xcloc/Localized Contents/it.xliff | 105 + .../ja.xcloc/Localized Contents/ja.xliff | 105 + .../nl.xcloc/Localized Contents/nl.xliff | 105 + .../pl.xcloc/Localized Contents/pl.xliff | 105 + .../ru.xcloc/Localized Contents/ru.xliff | 105 + .../th.xcloc/Localized Contents/th.xliff | 105 + .../tr.xcloc/Localized Contents/tr.xliff | 10044 ++++++++-------- .../uk.xcloc/Localized Contents/uk.xliff | 105 + .../Localized Contents/zh-Hans.xliff | 105 + .../common/views/onboarding/WhatsNewView.kt | 38 + .../commonMain/resources/MR/base/strings.xml | 11 + .../resources/MR/images/ic_folder_pen.svg | 1 + .../resources/MR/images/ic_forum.svg | 1 + 21 files changed, 6678 insertions(+), 5055 deletions(-) create mode 100644 apps/multiplatform/common/src/commonMain/resources/MR/images/ic_folder_pen.svg create mode 100644 apps/multiplatform/common/src/commonMain/resources/MR/images/ic_forum.svg diff --git a/apps/ios/Shared/Views/Onboarding/WhatsNewView.swift b/apps/ios/Shared/Views/Onboarding/WhatsNewView.swift index 59c2b25b6..d8830e8eb 100644 --- a/apps/ios/Shared/Views/Onboarding/WhatsNewView.swift +++ b/apps/ios/Shared/Views/Onboarding/WhatsNewView.swift @@ -314,6 +314,42 @@ private let versionDescriptions: [VersionDescription] = [ ), ] ), + VersionDescription( + version: "v5.5", + post: URL(string: "https://simplex.chat/blog/20240124-simplex-chat-infrastructure-costs-v5-5-simplex-ux-private-notes-group-history.html"), + features: [ + FeatureDescription( + icon: "folder", + title: "Private notes", + description: "With encrypted files and media." + ), + FeatureDescription( + icon: "link", + title: "Paste link to connect!", + description: "Search bar accepts invitation links." + ), + FeatureDescription( + icon: "bubble.left.and.bubble.right", + title: "Join group conversations", + description: "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)." + ), + FeatureDescription( + icon: "person.2", + title: "Safer groups", + description: "- block a member to stop spam for all.\n- contact address is not shared." + ), + FeatureDescription( + icon: "battery.50", + title: "Improved message delivery", + description: "With reduced battery usage." + ), + FeatureDescription( + icon: "character", + title: "Turkish interface", + description: "Thanks to the users – [contribute via Weblate](https://github.com/simplex-chat/simplex-chat/tree/stable#help-translating-simplex-chat)!" + ), + ] + ) ] private let lastVersion = versionDescriptions.last!.version diff --git a/apps/ios/SimpleX Localizations/bg.xcloc/Localized Contents/bg.xliff b/apps/ios/SimpleX Localizations/bg.xcloc/Localized Contents/bg.xliff index 5758ddc30..dfe4558bc 100644 --- a/apps/ios/SimpleX Localizations/bg.xcloc/Localized Contents/bg.xliff +++ b/apps/ios/SimpleX Localizations/bg.xcloc/Localized Contents/bg.xliff @@ -372,6 +372,11 @@ <target>, </target> <note>No comment provided by engineer.</note> </trans-unit> + <trans-unit id="- block a member to stop spam for all. - contact address is not shared." xml:space="preserve"> + <source>- block a member to stop spam for all. +- contact address is not shared.</source> + <note>No comment provided by engineer.</note> + </trans-unit> <trans-unit id="- connect to [directory service](simplex:/contact#/?v=1-4&smp=smp%3A%2F%2Fu2dS9sG8nMNURyZwqASV4yROM28Er0luVTx5X1CsMrU%3D%40smp4.simplex.im%2FeXSPwqTkKyDO3px4fLf1wx3MvPdjdLW3%23%2F%3Fv%3D1-2%26dh%3DMCowBQYDK2VuAyEAaiv6MkMH44L2TcYrt_CsX3ZvM11WgbMEUn0hkIKTOho%253D%26srv%3Do5vmywmrnaxalvz6wi3zicyftgio6psuvyniis6gco6bp6ekl4cqj4id.onion) (BETA)! - delivery receipts (up to 20 members). - faster and more stable." xml:space="preserve"> <source>- connect to [directory service](simplex:/contact#/?v=1-4&smp=smp%3A%2F%2Fu2dS9sG8nMNURyZwqASV4yROM28Er0luVTx5X1CsMrU%3D%40smp4.simplex.im%2FeXSPwqTkKyDO3px4fLf1wx3MvPdjdLW3%23%2F%3Fv%3D1-2%26dh%3DMCowBQYDK2VuAyEAaiv6MkMH44L2TcYrt_CsX3ZvM11WgbMEUn0hkIKTOho%253D%26srv%3Do5vmywmrnaxalvz6wi3zicyftgio6psuvyniis6gco6bp6ekl4cqj4id.onion) (BETA)! - delivery receipts (up to 20 members). @@ -638,6 +643,10 @@ <target>Всички членове на групата ще останат свързани.</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"> + <source>All messages will be deleted - this cannot be undone!</source> + <note>No comment provided by engineer.</note> + </trans-unit> <trans-unit id="All messages will be deleted - this cannot be undone! The messages will be deleted ONLY for you." xml:space="preserve"> <source>All messages will be deleted - this cannot be undone! The messages will be deleted ONLY for you.</source> <target>Всички съобщения ще бъдат изтрити - това не може да бъде отменено! Съобщенията ще бъдат изтрити САМО за вас.</target> @@ -1144,6 +1153,10 @@ <target>Изчисти разговора?</target> <note>No comment provided by engineer.</note> </trans-unit> + <trans-unit id="Clear private notes?" xml:space="preserve"> + <source>Clear private notes?</source> + <note>No comment provided by engineer.</note> + </trans-unit> <trans-unit id="Clear verification" xml:space="preserve"> <source>Clear verification</source> <target>Изчисти проверката</target> @@ -1438,6 +1451,14 @@ This is your own one-time link!</source> <target>Създай своя профил</target> <note>No comment provided by engineer.</note> </trans-unit> + <trans-unit id="Created at" xml:space="preserve"> + <source>Created at</source> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="Created at: %@" xml:space="preserve"> + <source>Created at: %@</source> + <note>copied message info</note> + </trans-unit> <trans-unit id="Created on %@" xml:space="preserve"> <source>Created on %@</source> <target>Създаден на %@</target> @@ -2222,6 +2243,10 @@ This cannot be undone!</source> <target>Грешка при създаване на контакт с член</target> <note>No comment provided by engineer.</note> </trans-unit> + <trans-unit id="Error creating message" xml:space="preserve"> + <source>Error creating message</source> + <note>No comment provided by engineer.</note> + </trans-unit> <trans-unit id="Error creating profile!" xml:space="preserve"> <source>Error creating profile!</source> <target>Грешка при създаване на профил!</target> @@ -2891,6 +2916,10 @@ This cannot be undone!</source> <target>Импортиране на база данни</target> <note>No comment provided by engineer.</note> </trans-unit> + <trans-unit id="Improved message delivery" xml:space="preserve"> + <source>Improved message delivery</source> + <note>No comment provided by engineer.</note> + </trans-unit> <trans-unit id="Improved privacy and security" xml:space="preserve"> <source>Improved privacy and security</source> <target>Подобрена поверителност и сигурност</target> @@ -3113,6 +3142,10 @@ This cannot be undone!</source> <target>Влез в групата</target> <note>No comment provided by engineer.</note> </trans-unit> + <trans-unit id="Join group conversations" xml:space="preserve"> + <source>Join group conversations</source> + <note>No comment provided by engineer.</note> + </trans-unit> <trans-unit id="Join group?" xml:space="preserve"> <source>Join group?</source> <target>Влез в групата?</target> @@ -3819,6 +3852,10 @@ This is your link for group %@!</source> <target>Парола за показване</target> <note>No comment provided by engineer.</note> </trans-unit> + <trans-unit id="Past member %@" xml:space="preserve"> + <source>Past member %@</source> + <note>past/unknown group member</note> + </trans-unit> <trans-unit id="Paste desktop address" xml:space="preserve"> <source>Paste desktop address</source> <target>Постави адрес на настолно устройство</target> @@ -3829,6 +3866,10 @@ This is your link for group %@!</source> <target>Постави изображение</target> <note>No comment provided by engineer.</note> </trans-unit> + <trans-unit id="Paste link to connect!" xml:space="preserve"> + <source>Paste link to connect!</source> + <note>No comment provided by engineer.</note> + </trans-unit> <trans-unit id="Paste the link you received" xml:space="preserve"> <source>Paste the link you received</source> <target>Постави получения линк</target> @@ -3961,6 +4002,10 @@ Error: %@</source> <target>Поверителни имена на файлове</target> <note>No comment provided by engineer.</note> </trans-unit> + <trans-unit id="Private notes" xml:space="preserve"> + <source>Private notes</source> + <note>name of notes to self</note> + </trans-unit> <trans-unit id="Profile and server connections" xml:space="preserve"> <source>Profile and server connections</source> <target>Профилни и сървърни връзки</target> @@ -4141,6 +4186,10 @@ Error: %@</source> <target>Получаване чрез</target> <note>No comment provided by engineer.</note> </trans-unit> + <trans-unit id="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)." xml:space="preserve"> + <source>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).</source> + <note>No comment provided by engineer.</note> + </trans-unit> <trans-unit id="Recipients see updates as you type them." xml:space="preserve"> <source>Recipients see updates as you type them.</source> <target>Получателите виждат актуализации, докато ги въвеждате.</target> @@ -4341,6 +4390,10 @@ Error: %@</source> <target>SMP сървъри</target> <note>No comment provided by engineer.</note> </trans-unit> + <trans-unit id="Safer groups" xml:space="preserve"> + <source>Safer groups</source> + <note>No comment provided by engineer.</note> + </trans-unit> <trans-unit id="Save" xml:space="preserve"> <source>Save</source> <target>Запази</target> @@ -4426,6 +4479,10 @@ Error: %@</source> <target>Запазените WebRTC ICE сървъри ще бъдат премахнати</target> <note>No comment provided by engineer.</note> </trans-unit> + <trans-unit id="Saved message" xml:space="preserve"> + <source>Saved message</source> + <note>message info title</note> + </trans-unit> <trans-unit id="Scan QR code" xml:space="preserve"> <source>Scan QR code</source> <target>Сканирай QR код</target> @@ -4456,6 +4513,10 @@ Error: %@</source> <target>Търсене</target> <note>No comment provided by engineer.</note> </trans-unit> + <trans-unit id="Search bar accepts invitation links." xml:space="preserve"> + <source>Search bar accepts invitation links.</source> + <note>No comment provided by engineer.</note> + </trans-unit> <trans-unit id="Search or paste SimpleX link" xml:space="preserve"> <source>Search or paste SimpleX link</source> <target>Търсене или поставяне на SimpleX линк</target> @@ -5298,6 +5359,10 @@ You will be prompted to complete authentication before this feature is enabled.< <target>Опит за свързване със сървъра, използван за получаване на съобщения от този контакт.</target> <note>No comment provided by engineer.</note> </trans-unit> + <trans-unit id="Turkish interface" xml:space="preserve"> + <source>Turkish interface</source> + <note>No comment provided by engineer.</note> + </trans-unit> <trans-unit id="Turn off" xml:space="preserve"> <source>Turn off</source> <target>Изключи</target> @@ -5683,11 +5748,19 @@ To connect, please ask your contact to create another connection link and check <target>Когато споделяте инкогнито профил с някого, този профил ще се използва за групите, в които той ви кани.</target> <note>No comment provided by engineer.</note> </trans-unit> + <trans-unit id="With encrypted files and media." xml:space="preserve"> + <source>With encrypted files and media.</source> + <note>No comment provided by engineer.</note> + </trans-unit> <trans-unit id="With optional welcome message." xml:space="preserve"> <source>With optional welcome message.</source> <target>С незадължително съобщение при посрещане.</target> <note>No comment provided by engineer.</note> </trans-unit> + <trans-unit id="With reduced battery usage." xml:space="preserve"> + <source>With reduced battery usage.</source> + <note>No comment provided by engineer.</note> + </trans-unit> <trans-unit id="Wrong database passphrase" xml:space="preserve"> <source>Wrong database passphrase</source> <target>Грешна парола за базата данни</target> @@ -6311,6 +6384,10 @@ SimpleX сървърите не могат да видят вашия профи <target>връзка:%@</target> <note>connection information</note> </trans-unit> + <trans-unit id="contact %@ changed to %@" xml:space="preserve"> + <source>contact %1$@ changed to %2$@</source> + <note>profile update event chat item</note> + </trans-unit> <trans-unit id="contact has e2e encryption" xml:space="preserve"> <source>contact has e2e encryption</source> <target>контактът има e2e криптиране</target> @@ -6581,6 +6658,10 @@ SimpleX сървърите не могат да видят вашия профи <target>член</target> <note>member role</note> </trans-unit> + <trans-unit id="member %@ changed to %@" xml:space="preserve"> + <source>member %1$@ changed to %2$@</source> + <note>profile update event chat item</note> + </trans-unit> <trans-unit id="member connected" xml:space="preserve"> <source>connected</source> <target>свързан</target> @@ -6703,6 +6784,14 @@ SimpleX сървърите не могат да видят вашия профи <target>отстранен %@</target> <note>rcv group event chat item</note> </trans-unit> + <trans-unit id="removed contact address" xml:space="preserve"> + <source>removed contact address</source> + <note>profile update event chat item</note> + </trans-unit> + <trans-unit id="removed profile picture" xml:space="preserve"> + <source>removed profile picture</source> + <note>profile update event chat item</note> + </trans-unit> <trans-unit id="removed you" xml:space="preserve"> <source>removed you</source> <target>ви острани</target> @@ -6733,6 +6822,14 @@ SimpleX сървърите не могат да видят вашия профи <target>изпрати лично съобщение</target> <note>No comment provided by engineer.</note> </trans-unit> + <trans-unit id="set new contact address" xml:space="preserve"> + <source>set new contact address</source> + <note>profile update event chat item</note> + </trans-unit> + <trans-unit id="set new profile picture" xml:space="preserve"> + <source>set new profile picture</source> + <note>profile update event chat item</note> + </trans-unit> <trans-unit id="starting…" xml:space="preserve"> <source>starting…</source> <target>стартиране…</target> @@ -6753,11 +6850,19 @@ SimpleX сървърите не могат да видят вашия профи <target>неизвестен</target> <note>connection info</note> </trans-unit> + <trans-unit id="unknown status" xml:space="preserve"> + <source>unknown status</source> + <note>No comment provided by engineer.</note> + </trans-unit> <trans-unit id="updated group profile" xml:space="preserve"> <source>updated group profile</source> <target>актуализиран профил на групата</target> <note>rcv group event chat item</note> </trans-unit> + <trans-unit id="updated profile" xml:space="preserve"> + <source>updated profile</source> + <note>profile update event chat item</note> + </trans-unit> <trans-unit id="v%@" xml:space="preserve"> <source>v%@</source> <target>v%@</target> diff --git a/apps/ios/SimpleX Localizations/cs.xcloc/Localized Contents/cs.xliff b/apps/ios/SimpleX Localizations/cs.xcloc/Localized Contents/cs.xliff index cd2b59fb0..a47cdb72d 100644 --- a/apps/ios/SimpleX Localizations/cs.xcloc/Localized Contents/cs.xliff +++ b/apps/ios/SimpleX Localizations/cs.xcloc/Localized Contents/cs.xliff @@ -363,6 +363,11 @@ <target>, </target> <note>No comment provided by engineer.</note> </trans-unit> + <trans-unit id="- block a member to stop spam for all. - contact address is not shared." xml:space="preserve"> + <source>- block a member to stop spam for all. +- contact address is not shared.</source> + <note>No comment provided by engineer.</note> + </trans-unit> <trans-unit id="- connect to [directory service](simplex:/contact#/?v=1-4&smp=smp%3A%2F%2Fu2dS9sG8nMNURyZwqASV4yROM28Er0luVTx5X1CsMrU%3D%40smp4.simplex.im%2FeXSPwqTkKyDO3px4fLf1wx3MvPdjdLW3%23%2F%3Fv%3D1-2%26dh%3DMCowBQYDK2VuAyEAaiv6MkMH44L2TcYrt_CsX3ZvM11WgbMEUn0hkIKTOho%253D%26srv%3Do5vmywmrnaxalvz6wi3zicyftgio6psuvyniis6gco6bp6ekl4cqj4id.onion) (BETA)! - delivery receipts (up to 20 members). - faster and more stable." xml:space="preserve"> <source>- connect to [directory service](simplex:/contact#/?v=1-4&smp=smp%3A%2F%2Fu2dS9sG8nMNURyZwqASV4yROM28Er0luVTx5X1CsMrU%3D%40smp4.simplex.im%2FeXSPwqTkKyDO3px4fLf1wx3MvPdjdLW3%23%2F%3Fv%3D1-2%26dh%3DMCowBQYDK2VuAyEAaiv6MkMH44L2TcYrt_CsX3ZvM11WgbMEUn0hkIKTOho%253D%26srv%3Do5vmywmrnaxalvz6wi3zicyftgio6psuvyniis6gco6bp6ekl4cqj4id.onion) (BETA)! - delivery receipts (up to 20 members). @@ -624,6 +629,10 @@ <target>Všichni členové skupiny zůstanou připojeni.</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"> + <source>All messages will be deleted - this cannot be undone!</source> + <note>No comment provided by engineer.</note> + </trans-unit> <trans-unit id="All messages will be deleted - this cannot be undone! The messages will be deleted ONLY for you." xml:space="preserve"> <source>All messages will be deleted - this cannot be undone! The messages will be deleted ONLY for you.</source> <target>Všechny zprávy budou smazány – tuto akci nelze vrátit zpět! Zprávy budou smazány POUZE pro vás.</target> @@ -1119,6 +1128,10 @@ <target>Vyčistit konverzaci?</target> <note>No comment provided by engineer.</note> </trans-unit> + <trans-unit id="Clear private notes?" xml:space="preserve"> + <source>Clear private notes?</source> + <note>No comment provided by engineer.</note> + </trans-unit> <trans-unit id="Clear verification" xml:space="preserve"> <source>Clear verification</source> <target>Zrušte ověření</target> @@ -1396,6 +1409,14 @@ This is your own one-time link!</source> <target>Vytvořte si profil</target> <note>No comment provided by engineer.</note> </trans-unit> + <trans-unit id="Created at" xml:space="preserve"> + <source>Created at</source> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="Created at: %@" xml:space="preserve"> + <source>Created at: %@</source> + <note>copied message info</note> + </trans-unit> <trans-unit id="Created on %@" xml:space="preserve"> <source>Created on %@</source> <target>Vytvořeno na %@</target> @@ -2163,6 +2184,10 @@ This cannot be undone!</source> <target>Chyba vytvoření kontaktu člena</target> <note>No comment provided by engineer.</note> </trans-unit> + <trans-unit id="Error creating message" xml:space="preserve"> + <source>Error creating message</source> + <note>No comment provided by engineer.</note> + </trans-unit> <trans-unit id="Error creating profile!" xml:space="preserve"> <source>Error creating profile!</source> <target>Chyba při vytváření profilu!</target> @@ -2824,6 +2849,10 @@ This cannot be undone!</source> <target>Import databáze</target> <note>No comment provided by engineer.</note> </trans-unit> + <trans-unit id="Improved message delivery" xml:space="preserve"> + <source>Improved message delivery</source> + <note>No comment provided by engineer.</note> + </trans-unit> <trans-unit id="Improved privacy and security" xml:space="preserve"> <source>Improved privacy and security</source> <target>Vylepšená ochrana soukromí a zabezpečení</target> @@ -3040,6 +3069,10 @@ This cannot be undone!</source> <target>Připojit ke skupině</target> <note>No comment provided by engineer.</note> </trans-unit> + <trans-unit id="Join group conversations" xml:space="preserve"> + <source>Join group conversations</source> + <note>No comment provided by engineer.</note> + </trans-unit> <trans-unit id="Join group?" xml:space="preserve"> <source>Join group?</source> <note>No comment provided by engineer.</note> @@ -3728,6 +3761,10 @@ This is your link for group %@!</source> <target>Heslo k zobrazení</target> <note>No comment provided by engineer.</note> </trans-unit> + <trans-unit id="Past member %@" xml:space="preserve"> + <source>Past member %@</source> + <note>past/unknown group member</note> + </trans-unit> <trans-unit id="Paste desktop address" xml:space="preserve"> <source>Paste desktop address</source> <note>No comment provided by engineer.</note> @@ -3737,6 +3774,10 @@ This is your link for group %@!</source> <target>Vložit obrázek</target> <note>No comment provided by engineer.</note> </trans-unit> + <trans-unit id="Paste link to connect!" xml:space="preserve"> + <source>Paste link to connect!</source> + <note>No comment provided by engineer.</note> + </trans-unit> <trans-unit id="Paste the link you received" xml:space="preserve"> <source>Paste the link you received</source> <note>No comment provided by engineer.</note> @@ -3866,6 +3907,10 @@ Error: %@</source> <target>Soukromé názvy souborů</target> <note>No comment provided by engineer.</note> </trans-unit> + <trans-unit id="Private notes" xml:space="preserve"> + <source>Private notes</source> + <note>name of notes to self</note> + </trans-unit> <trans-unit id="Profile and server connections" xml:space="preserve"> <source>Profile and server connections</source> <target>Profil a připojení k serveru</target> @@ -4043,6 +4088,10 @@ Error: %@</source> <target>Příjem přes</target> <note>No comment provided by engineer.</note> </trans-unit> + <trans-unit id="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)." xml:space="preserve"> + <source>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).</source> + <note>No comment provided by engineer.</note> + </trans-unit> <trans-unit id="Recipients see updates as you type them." xml:space="preserve"> <source>Recipients see updates as you type them.</source> <target>Příjemci uvidí aktualizace během jejich psaní.</target> @@ -4240,6 +4289,10 @@ Error: %@</source> <target>SMP servery</target> <note>No comment provided by engineer.</note> </trans-unit> + <trans-unit id="Safer groups" xml:space="preserve"> + <source>Safer groups</source> + <note>No comment provided by engineer.</note> + </trans-unit> <trans-unit id="Save" xml:space="preserve"> <source>Save</source> <target>Uložit</target> @@ -4325,6 +4378,10 @@ Error: %@</source> <target>Uložené servery WebRTC ICE budou odstraněny</target> <note>No comment provided by engineer.</note> </trans-unit> + <trans-unit id="Saved message" xml:space="preserve"> + <source>Saved message</source> + <note>message info title</note> + </trans-unit> <trans-unit id="Scan QR code" xml:space="preserve"> <source>Scan QR code</source> <target>Skenovat QR kód</target> @@ -4354,6 +4411,10 @@ Error: %@</source> <target>Hledat</target> <note>No comment provided by engineer.</note> </trans-unit> + <trans-unit id="Search bar accepts invitation links." xml:space="preserve"> + <source>Search bar accepts invitation links.</source> + <note>No comment provided by engineer.</note> + </trans-unit> <trans-unit id="Search or paste SimpleX link" xml:space="preserve"> <source>Search or paste SimpleX link</source> <note>No comment provided by engineer.</note> @@ -5183,6 +5244,10 @@ Před zapnutím této funkce budete vyzváni k dokončení ověření.</target> <target>Pokus o připojení k serveru používanému pro příjem zpráv od tohoto kontaktu.</target> <note>No comment provided by engineer.</note> </trans-unit> + <trans-unit id="Turkish interface" xml:space="preserve"> + <source>Turkish interface</source> + <note>No comment provided by engineer.</note> + </trans-unit> <trans-unit id="Turn off" xml:space="preserve"> <source>Turn off</source> <target>Vypnout</target> @@ -5556,11 +5621,19 @@ Chcete-li se připojit, požádejte svůj kontakt o vytvoření dalšího odkazu <target>Pokud s někým sdílíte inkognito profil, bude tento profil použit pro skupiny, do kterých vás pozve.</target> <note>No comment provided by engineer.</note> </trans-unit> + <trans-unit id="With encrypted files and media." xml:space="preserve"> + <source>With encrypted files and media.</source> + <note>No comment provided by engineer.</note> + </trans-unit> <trans-unit id="With optional welcome message." xml:space="preserve"> <source>With optional welcome message.</source> <target>S volitelnou uvítací zprávou.</target> <note>No comment provided by engineer.</note> </trans-unit> + <trans-unit id="With reduced battery usage." xml:space="preserve"> + <source>With reduced battery usage.</source> + <note>No comment provided by engineer.</note> + </trans-unit> <trans-unit id="Wrong database passphrase" xml:space="preserve"> <source>Wrong database passphrase</source> <target>Špatná přístupová fráze k databázi</target> @@ -6165,6 +6238,10 @@ Servery SimpleX nevidí váš profil.</target> <target>připojení:%@</target> <note>connection information</note> </trans-unit> + <trans-unit id="contact %@ changed to %@" xml:space="preserve"> + <source>contact %1$@ changed to %2$@</source> + <note>profile update event chat item</note> + </trans-unit> <trans-unit id="contact has e2e encryption" xml:space="preserve"> <source>contact has e2e encryption</source> <target>kontakt má šifrování e2e</target> @@ -6433,6 +6510,10 @@ Servery SimpleX nevidí váš profil.</target> <target>člen</target> <note>member role</note> </trans-unit> + <trans-unit id="member %@ changed to %@" xml:space="preserve"> + <source>member %1$@ changed to %2$@</source> + <note>profile update event chat item</note> + </trans-unit> <trans-unit id="member connected" xml:space="preserve"> <source>connected</source> <target>připojeno</target> @@ -6555,6 +6636,14 @@ Servery SimpleX nevidí váš profil.</target> <target>odstraněno %@</target> <note>rcv group event chat item</note> </trans-unit> + <trans-unit id="removed contact address" xml:space="preserve"> + <source>removed contact address</source> + <note>profile update event chat item</note> + </trans-unit> + <trans-unit id="removed profile picture" xml:space="preserve"> + <source>removed profile picture</source> + <note>profile update event chat item</note> + </trans-unit> <trans-unit id="removed you" xml:space="preserve"> <source>removed you</source> <target>odstranil vás</target> @@ -6585,6 +6674,14 @@ Servery SimpleX nevidí váš profil.</target> <target>odeslat přímou zprávu</target> <note>No comment provided by engineer.</note> </trans-unit> + <trans-unit id="set new contact address" xml:space="preserve"> + <source>set new contact address</source> + <note>profile update event chat item</note> + </trans-unit> + <trans-unit id="set new profile picture" xml:space="preserve"> + <source>set new profile picture</source> + <note>profile update event chat item</note> + </trans-unit> <trans-unit id="starting…" xml:space="preserve"> <source>starting…</source> <target>začíná…</target> @@ -6605,11 +6702,19 @@ Servery SimpleX nevidí váš profil.</target> <target>neznámý</target> <note>connection info</note> </trans-unit> + <trans-unit id="unknown status" xml:space="preserve"> + <source>unknown status</source> + <note>No comment provided by engineer.</note> + </trans-unit> <trans-unit id="updated group profile" xml:space="preserve"> <source>updated group profile</source> <target>aktualizoval profil skupiny</target> <note>rcv group event chat item</note> </trans-unit> + <trans-unit id="updated profile" xml:space="preserve"> + <source>updated profile</source> + <note>profile update event chat item</note> + </trans-unit> <trans-unit id="v%@" xml:space="preserve"> <source>v%@</source> <note>No comment provided by engineer.</note> diff --git a/apps/ios/SimpleX Localizations/de.xcloc/Localized Contents/de.xliff b/apps/ios/SimpleX Localizations/de.xcloc/Localized Contents/de.xliff index 591bf02e4..8ebf184cf 100644 --- a/apps/ios/SimpleX Localizations/de.xcloc/Localized Contents/de.xliff +++ b/apps/ios/SimpleX Localizations/de.xcloc/Localized Contents/de.xliff @@ -372,6 +372,11 @@ <target>, </target> <note>No comment provided by engineer.</note> </trans-unit> + <trans-unit id="- block a member to stop spam for all. - contact address is not shared." xml:space="preserve"> + <source>- block a member to stop spam for all. +- contact address is not shared.</source> + <note>No comment provided by engineer.</note> + </trans-unit> <trans-unit id="- connect to [directory service](simplex:/contact#/?v=1-4&smp=smp%3A%2F%2Fu2dS9sG8nMNURyZwqASV4yROM28Er0luVTx5X1CsMrU%3D%40smp4.simplex.im%2FeXSPwqTkKyDO3px4fLf1wx3MvPdjdLW3%23%2F%3Fv%3D1-2%26dh%3DMCowBQYDK2VuAyEAaiv6MkMH44L2TcYrt_CsX3ZvM11WgbMEUn0hkIKTOho%253D%26srv%3Do5vmywmrnaxalvz6wi3zicyftgio6psuvyniis6gco6bp6ekl4cqj4id.onion) (BETA)! - delivery receipts (up to 20 members). - faster and more stable." xml:space="preserve"> <source>- connect to [directory service](simplex:/contact#/?v=1-4&smp=smp%3A%2F%2Fu2dS9sG8nMNURyZwqASV4yROM28Er0luVTx5X1CsMrU%3D%40smp4.simplex.im%2FeXSPwqTkKyDO3px4fLf1wx3MvPdjdLW3%23%2F%3Fv%3D1-2%26dh%3DMCowBQYDK2VuAyEAaiv6MkMH44L2TcYrt_CsX3ZvM11WgbMEUn0hkIKTOho%253D%26srv%3Do5vmywmrnaxalvz6wi3zicyftgio6psuvyniis6gco6bp6ekl4cqj4id.onion) (BETA)! - delivery receipts (up to 20 members). @@ -638,6 +643,10 @@ <target>Alle Gruppenmitglieder bleiben verbunden.</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"> + <source>All messages will be deleted - this cannot be undone!</source> + <note>No comment provided by engineer.</note> + </trans-unit> <trans-unit id="All messages will be deleted - this cannot be undone! The messages will be deleted ONLY for you." xml:space="preserve"> <source>All messages will be deleted - this cannot be undone! The messages will be deleted ONLY for you.</source> <target>Alle Nachrichten werden gelöscht - dies kann nicht rückgängig gemacht werden! Die Nachrichten werden NUR bei Ihnen gelöscht.</target> @@ -1144,6 +1153,10 @@ <target>Unterhaltung löschen?</target> <note>No comment provided by engineer.</note> </trans-unit> + <trans-unit id="Clear private notes?" xml:space="preserve"> + <source>Clear private notes?</source> + <note>No comment provided by engineer.</note> + </trans-unit> <trans-unit id="Clear verification" xml:space="preserve"> <source>Clear verification</source> <target>Überprüfung zurücknehmen</target> @@ -1438,6 +1451,14 @@ Das ist Ihr eigener Einmal-Link!</target> <target>Erstellen Sie Ihr Profil</target> <note>No comment provided by engineer.</note> </trans-unit> + <trans-unit id="Created at" xml:space="preserve"> + <source>Created at</source> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="Created at: %@" xml:space="preserve"> + <source>Created at: %@</source> + <note>copied message info</note> + </trans-unit> <trans-unit id="Created on %@" xml:space="preserve"> <source>Created on %@</source> <target>Erstellt am %@</target> @@ -2222,6 +2243,10 @@ Das kann nicht rückgängig gemacht werden!</target> <target>Fehler beim Anlegen eines Mitglied-Kontaktes</target> <note>No comment provided by engineer.</note> </trans-unit> + <trans-unit id="Error creating message" xml:space="preserve"> + <source>Error creating message</source> + <note>No comment provided by engineer.</note> + </trans-unit> <trans-unit id="Error creating profile!" xml:space="preserve"> <source>Error creating profile!</source> <target>Fehler beim Erstellen des Profils!</target> @@ -2891,6 +2916,10 @@ Das kann nicht rückgängig gemacht werden!</target> <target>Datenbank importieren</target> <note>No comment provided by engineer.</note> </trans-unit> + <trans-unit id="Improved message delivery" xml:space="preserve"> + <source>Improved message delivery</source> + <note>No comment provided by engineer.</note> + </trans-unit> <trans-unit id="Improved privacy and security" xml:space="preserve"> <source>Improved privacy and security</source> <target>Verbesserte Privatsphäre und Sicherheit</target> @@ -3113,6 +3142,10 @@ Das kann nicht rückgängig gemacht werden!</target> <target>Treten Sie der Gruppe bei</target> <note>No comment provided by engineer.</note> </trans-unit> + <trans-unit id="Join group conversations" xml:space="preserve"> + <source>Join group conversations</source> + <note>No comment provided by engineer.</note> + </trans-unit> <trans-unit id="Join group?" xml:space="preserve"> <source>Join group?</source> <target>Der Gruppe beitreten?</target> @@ -3819,6 +3852,10 @@ Das ist Ihr Link für die Gruppe %@!</target> <target>Passwort anzeigen</target> <note>No comment provided by engineer.</note> </trans-unit> + <trans-unit id="Past member %@" xml:space="preserve"> + <source>Past member %@</source> + <note>past/unknown group member</note> + </trans-unit> <trans-unit id="Paste desktop address" xml:space="preserve"> <source>Paste desktop address</source> <target>Desktop-Adresse einfügen</target> @@ -3829,6 +3866,10 @@ Das ist Ihr Link für die Gruppe %@!</target> <target>Bild einfügen</target> <note>No comment provided by engineer.</note> </trans-unit> + <trans-unit id="Paste link to connect!" xml:space="preserve"> + <source>Paste link to connect!</source> + <note>No comment provided by engineer.</note> + </trans-unit> <trans-unit id="Paste the link you received" xml:space="preserve"> <source>Paste the link you received</source> <target>Fügen Sie den erhaltenen Link ein</target> @@ -3961,6 +4002,10 @@ Fehler: %@</target> <target>Neutrale Dateinamen</target> <note>No comment provided by engineer.</note> </trans-unit> + <trans-unit id="Private notes" xml:space="preserve"> + <source>Private notes</source> + <note>name of notes to self</note> + </trans-unit> <trans-unit id="Profile and server connections" xml:space="preserve"> <source>Profile and server connections</source> <target>Profil und Serververbindungen</target> @@ -4141,6 +4186,10 @@ Fehler: %@</target> <target>Empfangen über</target> <note>No comment provided by engineer.</note> </trans-unit> + <trans-unit id="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)." xml:space="preserve"> + <source>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).</source> + <note>No comment provided by engineer.</note> + </trans-unit> <trans-unit id="Recipients see updates as you type them." xml:space="preserve"> <source>Recipients see updates as you type them.</source> <target>Die Empfänger sehen Nachrichtenaktualisierungen, während Sie sie eingeben.</target> @@ -4341,6 +4390,10 @@ Fehler: %@</target> <target>SMP-Server</target> <note>No comment provided by engineer.</note> </trans-unit> + <trans-unit id="Safer groups" xml:space="preserve"> + <source>Safer groups</source> + <note>No comment provided by engineer.</note> + </trans-unit> <trans-unit id="Save" xml:space="preserve"> <source>Save</source> <target>Speichern</target> @@ -4426,6 +4479,10 @@ Fehler: %@</target> <target>Gespeicherte WebRTC ICE-Server werden entfernt</target> <note>No comment provided by engineer.</note> </trans-unit> + <trans-unit id="Saved message" xml:space="preserve"> + <source>Saved message</source> + <note>message info title</note> + </trans-unit> <trans-unit id="Scan QR code" xml:space="preserve"> <source>Scan QR code</source> <target>QR-Code scannen</target> @@ -4456,6 +4513,10 @@ Fehler: %@</target> <target>Suche</target> <note>No comment provided by engineer.</note> </trans-unit> + <trans-unit id="Search bar accepts invitation links." xml:space="preserve"> + <source>Search bar accepts invitation links.</source> + <note>No comment provided by engineer.</note> + </trans-unit> <trans-unit id="Search or paste SimpleX link" xml:space="preserve"> <source>Search or paste SimpleX link</source> <target>Suchen oder fügen Sie den SimpleX-Link ein</target> @@ -5298,6 +5359,10 @@ Sie werden aufgefordert, die Authentifizierung abzuschließen, bevor diese Funkt <target>Versuche die Verbindung mit dem Server aufzunehmen, der für den Empfang von Nachrichten mit diesem Kontakt genutzt wird.</target> <note>No comment provided by engineer.</note> </trans-unit> + <trans-unit id="Turkish interface" xml:space="preserve"> + <source>Turkish interface</source> + <note>No comment provided by engineer.</note> + </trans-unit> <trans-unit id="Turn off" xml:space="preserve"> <source>Turn off</source> <target>Abschalten</target> @@ -5683,11 +5748,19 @@ Bitten Sie Ihren Kontakt darum einen weiteren Verbindungs-Link zu erzeugen, um s <target>Wenn Sie ein Inkognito-Profil mit Jemandem teilen, wird dieses Profil auch für die Gruppen verwendet, für die Sie von diesem Kontakt eingeladen werden.</target> <note>No comment provided by engineer.</note> </trans-unit> + <trans-unit id="With encrypted files and media." xml:space="preserve"> + <source>With encrypted files and media.</source> + <note>No comment provided by engineer.</note> + </trans-unit> <trans-unit id="With optional welcome message." xml:space="preserve"> <source>With optional welcome message.</source> <target>Mit optionaler Begrüßungsmeldung.</target> <note>No comment provided by engineer.</note> </trans-unit> + <trans-unit id="With reduced battery usage." xml:space="preserve"> + <source>With reduced battery usage.</source> + <note>No comment provided by engineer.</note> + </trans-unit> <trans-unit id="Wrong database passphrase" xml:space="preserve"> <source>Wrong database passphrase</source> <target>Falsches Datenbank-Passwort</target> @@ -6311,6 +6384,10 @@ SimpleX-Server können Ihr Profil nicht einsehen.</target> <target>Verbindung:%@</target> <note>connection information</note> </trans-unit> + <trans-unit id="contact %@ changed to %@" xml:space="preserve"> + <source>contact %1$@ changed to %2$@</source> + <note>profile update event chat item</note> + </trans-unit> <trans-unit id="contact has e2e encryption" xml:space="preserve"> <source>contact has e2e encryption</source> <target>Kontakt nutzt E2E-Verschlüsselung</target> @@ -6581,6 +6658,10 @@ SimpleX-Server können Ihr Profil nicht einsehen.</target> <target>Mitglied</target> <note>member role</note> </trans-unit> + <trans-unit id="member %@ changed to %@" xml:space="preserve"> + <source>member %1$@ changed to %2$@</source> + <note>profile update event chat item</note> + </trans-unit> <trans-unit id="member connected" xml:space="preserve"> <source>connected</source> <target>ist der Gruppe beigetreten</target> @@ -6703,6 +6784,14 @@ SimpleX-Server können Ihr Profil nicht einsehen.</target> <target>hat %@ aus der Gruppe entfernt</target> <note>rcv group event chat item</note> </trans-unit> + <trans-unit id="removed contact address" xml:space="preserve"> + <source>removed contact address</source> + <note>profile update event chat item</note> + </trans-unit> + <trans-unit id="removed profile picture" xml:space="preserve"> + <source>removed profile picture</source> + <note>profile update event chat item</note> + </trans-unit> <trans-unit id="removed you" xml:space="preserve"> <source>removed you</source> <target>hat Sie aus der Gruppe entfernt</target> @@ -6733,6 +6822,14 @@ SimpleX-Server können Ihr Profil nicht einsehen.</target> <target>Direktnachricht senden</target> <note>No comment provided by engineer.</note> </trans-unit> + <trans-unit id="set new contact address" xml:space="preserve"> + <source>set new contact address</source> + <note>profile update event chat item</note> + </trans-unit> + <trans-unit id="set new profile picture" xml:space="preserve"> + <source>set new profile picture</source> + <note>profile update event chat item</note> + </trans-unit> <trans-unit id="starting…" xml:space="preserve"> <source>starting…</source> <target>Verbindung wird gestartet…</target> @@ -6753,11 +6850,19 @@ SimpleX-Server können Ihr Profil nicht einsehen.</target> <target>Unbekannt</target> <note>connection info</note> </trans-unit> + <trans-unit id="unknown status" xml:space="preserve"> + <source>unknown status</source> + <note>No comment provided by engineer.</note> + </trans-unit> <trans-unit id="updated group profile" xml:space="preserve"> <source>updated group profile</source> <target>Aktualisiertes Gruppenprofil</target> <note>rcv group event chat item</note> </trans-unit> + <trans-unit id="updated profile" xml:space="preserve"> + <source>updated profile</source> + <note>profile update event chat item</note> + </trans-unit> <trans-unit id="v%@" xml:space="preserve"> <source>v%@</source> <target>v%@</target> diff --git a/apps/ios/SimpleX Localizations/en.xcloc/Localized Contents/en.xliff b/apps/ios/SimpleX Localizations/en.xcloc/Localized Contents/en.xliff index 7cbf91ac9..64d76112e 100644 --- a/apps/ios/SimpleX Localizations/en.xcloc/Localized Contents/en.xliff +++ b/apps/ios/SimpleX Localizations/en.xcloc/Localized Contents/en.xliff @@ -372,6 +372,13 @@ <target>, </target> <note>No comment provided by engineer.</note> </trans-unit> + <trans-unit id="- block a member to stop spam for all. - contact address is not shared." xml:space="preserve"> + <source>- block a member to stop spam for all. +- contact address is not shared.</source> + <target>- block a member to stop spam for all. +- contact address is not shared.</target> + <note>No comment provided by engineer.</note> + </trans-unit> <trans-unit id="- connect to [directory service](simplex:/contact#/?v=1-4&smp=smp%3A%2F%2Fu2dS9sG8nMNURyZwqASV4yROM28Er0luVTx5X1CsMrU%3D%40smp4.simplex.im%2FeXSPwqTkKyDO3px4fLf1wx3MvPdjdLW3%23%2F%3Fv%3D1-2%26dh%3DMCowBQYDK2VuAyEAaiv6MkMH44L2TcYrt_CsX3ZvM11WgbMEUn0hkIKTOho%253D%26srv%3Do5vmywmrnaxalvz6wi3zicyftgio6psuvyniis6gco6bp6ekl4cqj4id.onion) (BETA)! - delivery receipts (up to 20 members). - faster and more stable." xml:space="preserve"> <source>- connect to [directory service](simplex:/contact#/?v=1-4&smp=smp%3A%2F%2Fu2dS9sG8nMNURyZwqASV4yROM28Er0luVTx5X1CsMrU%3D%40smp4.simplex.im%2FeXSPwqTkKyDO3px4fLf1wx3MvPdjdLW3%23%2F%3Fv%3D1-2%26dh%3DMCowBQYDK2VuAyEAaiv6MkMH44L2TcYrt_CsX3ZvM11WgbMEUn0hkIKTOho%253D%26srv%3Do5vmywmrnaxalvz6wi3zicyftgio6psuvyniis6gco6bp6ekl4cqj4id.onion) (BETA)! - delivery receipts (up to 20 members). @@ -638,6 +645,11 @@ <target>All group members will remain connected.</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"> + <source>All messages will be deleted - this cannot be undone!</source> + <target>All messages will be deleted - this cannot be undone!</target> + <note>No comment provided by engineer.</note> + </trans-unit> <trans-unit id="All messages will be deleted - this cannot be undone! The messages will be deleted ONLY for you." xml:space="preserve"> <source>All messages will be deleted - this cannot be undone! The messages will be deleted ONLY for you.</source> <target>All messages will be deleted - this cannot be undone! The messages will be deleted ONLY for you.</target> @@ -1144,6 +1156,11 @@ <target>Clear conversation?</target> <note>No comment provided by engineer.</note> </trans-unit> + <trans-unit id="Clear private notes?" xml:space="preserve"> + <source>Clear private notes?</source> + <target>Clear private notes?</target> + <note>No comment provided by engineer.</note> + </trans-unit> <trans-unit id="Clear verification" xml:space="preserve"> <source>Clear verification</source> <target>Clear verification</target> @@ -1438,6 +1455,16 @@ This is your own one-time link!</target> <target>Create your profile</target> <note>No comment provided by engineer.</note> </trans-unit> + <trans-unit id="Created at" xml:space="preserve"> + <source>Created at</source> + <target>Created at</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="Created at: %@" xml:space="preserve"> + <source>Created at: %@</source> + <target>Created at: %@</target> + <note>copied message info</note> + </trans-unit> <trans-unit id="Created on %@" xml:space="preserve"> <source>Created on %@</source> <target>Created on %@</target> @@ -2223,6 +2250,11 @@ This cannot be undone!</target> <target>Error creating member contact</target> <note>No comment provided by engineer.</note> </trans-unit> + <trans-unit id="Error creating message" xml:space="preserve"> + <source>Error creating message</source> + <target>Error creating message</target> + <note>No comment provided by engineer.</note> + </trans-unit> <trans-unit id="Error creating profile!" xml:space="preserve"> <source>Error creating profile!</source> <target>Error creating profile!</target> @@ -2893,6 +2925,11 @@ This cannot be undone!</target> <target>Import database</target> <note>No comment provided by engineer.</note> </trans-unit> + <trans-unit id="Improved message delivery" xml:space="preserve"> + <source>Improved message delivery</source> + <target>Improved message delivery</target> + <note>No comment provided by engineer.</note> + </trans-unit> <trans-unit id="Improved privacy and security" xml:space="preserve"> <source>Improved privacy and security</source> <target>Improved privacy and security</target> @@ -3116,6 +3153,11 @@ This cannot be undone!</target> <target>Join group</target> <note>No comment provided by engineer.</note> </trans-unit> + <trans-unit id="Join group conversations" xml:space="preserve"> + <source>Join group conversations</source> + <target>Join group conversations</target> + <note>No comment provided by engineer.</note> + </trans-unit> <trans-unit id="Join group?" xml:space="preserve"> <source>Join group?</source> <target>Join group?</target> @@ -3822,6 +3864,11 @@ This is your link for group %@!</target> <target>Password to show</target> <note>No comment provided by engineer.</note> </trans-unit> + <trans-unit id="Past member %@" xml:space="preserve"> + <source>Past member %@</source> + <target>Past member %@</target> + <note>past/unknown group member</note> + </trans-unit> <trans-unit id="Paste desktop address" xml:space="preserve"> <source>Paste desktop address</source> <target>Paste desktop address</target> @@ -3832,6 +3879,11 @@ This is your link for group %@!</target> <target>Paste image</target> <note>No comment provided by engineer.</note> </trans-unit> + <trans-unit id="Paste link to connect!" xml:space="preserve"> + <source>Paste link to connect!</source> + <target>Paste link to connect!</target> + <note>No comment provided by engineer.</note> + </trans-unit> <trans-unit id="Paste the link you received" xml:space="preserve"> <source>Paste the link you received</source> <target>Paste the link you received</target> @@ -3964,6 +4016,11 @@ Error: %@</target> <target>Private filenames</target> <note>No comment provided by engineer.</note> </trans-unit> + <trans-unit id="Private notes" xml:space="preserve"> + <source>Private notes</source> + <target>Private notes</target> + <note>name of notes to self</note> + </trans-unit> <trans-unit id="Profile and server connections" xml:space="preserve"> <source>Profile and server connections</source> <target>Profile and server connections</target> @@ -4144,6 +4201,11 @@ Error: %@</target> <target>Receiving via</target> <note>No comment provided by engineer.</note> </trans-unit> + <trans-unit id="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)." xml:space="preserve"> + <source>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).</source> + <target>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).</target> + <note>No comment provided by engineer.</note> + </trans-unit> <trans-unit id="Recipients see updates as you type them." xml:space="preserve"> <source>Recipients see updates as you type them.</source> <target>Recipients see updates as you type them.</target> @@ -4344,6 +4406,11 @@ Error: %@</target> <target>SMP servers</target> <note>No comment provided by engineer.</note> </trans-unit> + <trans-unit id="Safer groups" xml:space="preserve"> + <source>Safer groups</source> + <target>Safer groups</target> + <note>No comment provided by engineer.</note> + </trans-unit> <trans-unit id="Save" xml:space="preserve"> <source>Save</source> <target>Save</target> @@ -4429,6 +4496,11 @@ Error: %@</target> <target>Saved WebRTC ICE servers will be removed</target> <note>No comment provided by engineer.</note> </trans-unit> + <trans-unit id="Saved message" xml:space="preserve"> + <source>Saved message</source> + <target>Saved message</target> + <note>message info title</note> + </trans-unit> <trans-unit id="Scan QR code" xml:space="preserve"> <source>Scan QR code</source> <target>Scan QR code</target> @@ -4459,6 +4531,11 @@ Error: %@</target> <target>Search</target> <note>No comment provided by engineer.</note> </trans-unit> + <trans-unit id="Search bar accepts invitation links." xml:space="preserve"> + <source>Search bar accepts invitation links.</source> + <target>Search bar accepts invitation links.</target> + <note>No comment provided by engineer.</note> + </trans-unit> <trans-unit id="Search or paste SimpleX link" xml:space="preserve"> <source>Search or paste SimpleX link</source> <target>Search or paste SimpleX link</target> @@ -5303,6 +5380,11 @@ You will be prompted to complete authentication before this feature is enabled.< <target>Trying to connect to the server used to receive messages from this contact.</target> <note>No comment provided by engineer.</note> </trans-unit> + <trans-unit id="Turkish interface" xml:space="preserve"> + <source>Turkish interface</source> + <target>Turkish interface</target> + <note>No comment provided by engineer.</note> + </trans-unit> <trans-unit id="Turn off" xml:space="preserve"> <source>Turn off</source> <target>Turn off</target> @@ -5690,11 +5772,21 @@ To connect, please ask your contact to create another connection link and check <target>When you share an incognito profile with somebody, this profile will be used for the groups they invite you to.</target> <note>No comment provided by engineer.</note> </trans-unit> + <trans-unit id="With encrypted files and media." xml:space="preserve"> + <source>With encrypted files and media.</source> + <target>With encrypted files and media.</target> + <note>No comment provided by engineer.</note> + </trans-unit> <trans-unit id="With optional welcome message." xml:space="preserve"> <source>With optional welcome message.</source> <target>With optional welcome message.</target> <note>No comment provided by engineer.</note> </trans-unit> + <trans-unit id="With reduced battery usage." xml:space="preserve"> + <source>With reduced battery usage.</source> + <target>With reduced battery usage.</target> + <note>No comment provided by engineer.</note> + </trans-unit> <trans-unit id="Wrong database passphrase" xml:space="preserve"> <source>Wrong database passphrase</source> <target>Wrong database passphrase</target> @@ -6318,6 +6410,11 @@ SimpleX servers cannot see your profile.</target> <target>connection:%@</target> <note>connection information</note> </trans-unit> + <trans-unit id="contact %@ changed to %@" xml:space="preserve"> + <source>contact %1$@ changed to %2$@</source> + <target>contact %1$@ changed to %2$@</target> + <note>profile update event chat item</note> + </trans-unit> <trans-unit id="contact has e2e encryption" xml:space="preserve"> <source>contact has e2e encryption</source> <target>contact has e2e encryption</target> @@ -6588,6 +6685,11 @@ SimpleX servers cannot see your profile.</target> <target>member</target> <note>member role</note> </trans-unit> + <trans-unit id="member %@ changed to %@" xml:space="preserve"> + <source>member %1$@ changed to %2$@</source> + <target>member %1$@ changed to %2$@</target> + <note>profile update event chat item</note> + </trans-unit> <trans-unit id="member connected" xml:space="preserve"> <source>connected</source> <target>connected</target> @@ -6710,6 +6812,16 @@ SimpleX servers cannot see your profile.</target> <target>removed %@</target> <note>rcv group event chat item</note> </trans-unit> + <trans-unit id="removed contact address" xml:space="preserve"> + <source>removed contact address</source> + <target>removed contact address</target> + <note>profile update event chat item</note> + </trans-unit> + <trans-unit id="removed profile picture" xml:space="preserve"> + <source>removed profile picture</source> + <target>removed profile picture</target> + <note>profile update event chat item</note> + </trans-unit> <trans-unit id="removed you" xml:space="preserve"> <source>removed you</source> <target>removed you</target> @@ -6740,6 +6852,16 @@ SimpleX servers cannot see your profile.</target> <target>send direct message</target> <note>No comment provided by engineer.</note> </trans-unit> + <trans-unit id="set new contact address" xml:space="preserve"> + <source>set new contact address</source> + <target>set new contact address</target> + <note>profile update event chat item</note> + </trans-unit> + <trans-unit id="set new profile picture" xml:space="preserve"> + <source>set new profile picture</source> + <target>set new profile picture</target> + <note>profile update event chat item</note> + </trans-unit> <trans-unit id="starting…" xml:space="preserve"> <source>starting…</source> <target>starting…</target> @@ -6760,11 +6882,21 @@ SimpleX servers cannot see your profile.</target> <target>unknown</target> <note>connection info</note> </trans-unit> + <trans-unit id="unknown status" xml:space="preserve"> + <source>unknown status</source> + <target>unknown status</target> + <note>No comment provided by engineer.</note> + </trans-unit> <trans-unit id="updated group profile" xml:space="preserve"> <source>updated group profile</source> <target>updated group profile</target> <note>rcv group event chat item</note> </trans-unit> + <trans-unit id="updated profile" xml:space="preserve"> + <source>updated profile</source> + <target>updated profile</target> + <note>profile update event chat item</note> + </trans-unit> <trans-unit id="v%@" xml:space="preserve"> <source>v%@</source> <target>v%@</target> diff --git a/apps/ios/SimpleX Localizations/es.xcloc/Localized Contents/es.xliff b/apps/ios/SimpleX Localizations/es.xcloc/Localized Contents/es.xliff index 95a99befb..d12da2e63 100644 --- a/apps/ios/SimpleX Localizations/es.xcloc/Localized Contents/es.xliff +++ b/apps/ios/SimpleX Localizations/es.xcloc/Localized Contents/es.xliff @@ -372,6 +372,11 @@ <target>, </target> <note>No comment provided by engineer.</note> </trans-unit> + <trans-unit id="- block a member to stop spam for all. - contact address is not shared." xml:space="preserve"> + <source>- block a member to stop spam for all. +- contact address is not shared.</source> + <note>No comment provided by engineer.</note> + </trans-unit> <trans-unit id="- connect to [directory service](simplex:/contact#/?v=1-4&smp=smp%3A%2F%2Fu2dS9sG8nMNURyZwqASV4yROM28Er0luVTx5X1CsMrU%3D%40smp4.simplex.im%2FeXSPwqTkKyDO3px4fLf1wx3MvPdjdLW3%23%2F%3Fv%3D1-2%26dh%3DMCowBQYDK2VuAyEAaiv6MkMH44L2TcYrt_CsX3ZvM11WgbMEUn0hkIKTOho%253D%26srv%3Do5vmywmrnaxalvz6wi3zicyftgio6psuvyniis6gco6bp6ekl4cqj4id.onion) (BETA)! - delivery receipts (up to 20 members). - faster and more stable." xml:space="preserve"> <source>- connect to [directory service](simplex:/contact#/?v=1-4&smp=smp%3A%2F%2Fu2dS9sG8nMNURyZwqASV4yROM28Er0luVTx5X1CsMrU%3D%40smp4.simplex.im%2FeXSPwqTkKyDO3px4fLf1wx3MvPdjdLW3%23%2F%3Fv%3D1-2%26dh%3DMCowBQYDK2VuAyEAaiv6MkMH44L2TcYrt_CsX3ZvM11WgbMEUn0hkIKTOho%253D%26srv%3Do5vmywmrnaxalvz6wi3zicyftgio6psuvyniis6gco6bp6ekl4cqj4id.onion) (BETA)! - delivery receipts (up to 20 members). @@ -638,6 +643,10 @@ <target>Todos los miembros del grupo permanecerán conectados.</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"> + <source>All messages will be deleted - this cannot be undone!</source> + <note>No comment provided by engineer.</note> + </trans-unit> <trans-unit id="All messages will be deleted - this cannot be undone! The messages will be deleted ONLY for you." xml:space="preserve"> <source>All messages will be deleted - this cannot be undone! The messages will be deleted ONLY for you.</source> <target>Se eliminarán todos los mensajes SOLO para tí. ¡No podrá deshacerse!</target> @@ -1144,6 +1153,10 @@ <target>¿Vaciar conversación?</target> <note>No comment provided by engineer.</note> </trans-unit> + <trans-unit id="Clear private notes?" xml:space="preserve"> + <source>Clear private notes?</source> + <note>No comment provided by engineer.</note> + </trans-unit> <trans-unit id="Clear verification" xml:space="preserve"> <source>Clear verification</source> <target>Eliminar verificación</target> @@ -1438,6 +1451,14 @@ This is your own one-time link!</source> <target>Crea tu perfil</target> <note>No comment provided by engineer.</note> </trans-unit> + <trans-unit id="Created at" xml:space="preserve"> + <source>Created at</source> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="Created at: %@" xml:space="preserve"> + <source>Created at: %@</source> + <note>copied message info</note> + </trans-unit> <trans-unit id="Created on %@" xml:space="preserve"> <source>Created on %@</source> <target>Creado en %@</target> @@ -2222,6 +2243,10 @@ This cannot be undone!</source> <target>Error al establecer contacto con el miembro</target> <note>No comment provided by engineer.</note> </trans-unit> + <trans-unit id="Error creating message" xml:space="preserve"> + <source>Error creating message</source> + <note>No comment provided by engineer.</note> + </trans-unit> <trans-unit id="Error creating profile!" xml:space="preserve"> <source>Error creating profile!</source> <target>¡Error al crear perfil!</target> @@ -2891,6 +2916,10 @@ This cannot be undone!</source> <target>Importar base de datos</target> <note>No comment provided by engineer.</note> </trans-unit> + <trans-unit id="Improved message delivery" xml:space="preserve"> + <source>Improved message delivery</source> + <note>No comment provided by engineer.</note> + </trans-unit> <trans-unit id="Improved privacy and security" xml:space="preserve"> <source>Improved privacy and security</source> <target>Seguridad y privacidad mejoradas</target> @@ -3113,6 +3142,10 @@ This cannot be undone!</source> <target>Unirte al grupo</target> <note>No comment provided by engineer.</note> </trans-unit> + <trans-unit id="Join group conversations" xml:space="preserve"> + <source>Join group conversations</source> + <note>No comment provided by engineer.</note> + </trans-unit> <trans-unit id="Join group?" xml:space="preserve"> <source>Join group?</source> <target>¿Unirte al grupo?</target> @@ -3819,6 +3852,10 @@ This is your link for group %@!</source> <target>Contraseña para hacerlo visible</target> <note>No comment provided by engineer.</note> </trans-unit> + <trans-unit id="Past member %@" xml:space="preserve"> + <source>Past member %@</source> + <note>past/unknown group member</note> + </trans-unit> <trans-unit id="Paste desktop address" xml:space="preserve"> <source>Paste desktop address</source> <target>Pegar dirección de ordenador</target> @@ -3829,6 +3866,10 @@ This is your link for group %@!</source> <target>Pegar imagen</target> <note>No comment provided by engineer.</note> </trans-unit> + <trans-unit id="Paste link to connect!" xml:space="preserve"> + <source>Paste link to connect!</source> + <note>No comment provided by engineer.</note> + </trans-unit> <trans-unit id="Paste the link you received" xml:space="preserve"> <source>Paste the link you received</source> <target>Pegar el enlace recibido</target> @@ -3961,6 +4002,10 @@ Error: %@</target> <target>Nombres de archivos privados</target> <note>No comment provided by engineer.</note> </trans-unit> + <trans-unit id="Private notes" xml:space="preserve"> + <source>Private notes</source> + <note>name of notes to self</note> + </trans-unit> <trans-unit id="Profile and server connections" xml:space="preserve"> <source>Profile and server connections</source> <target>Perfil y conexiones de servidor</target> @@ -4141,6 +4186,10 @@ Error: %@</target> <target>Recibiendo vía</target> <note>No comment provided by engineer.</note> </trans-unit> + <trans-unit id="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)." xml:space="preserve"> + <source>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).</source> + <note>No comment provided by engineer.</note> + </trans-unit> <trans-unit id="Recipients see updates as you type them." xml:space="preserve"> <source>Recipients see updates as you type them.</source> <target>Los destinatarios ven actualizarse mientras escribes.</target> @@ -4341,6 +4390,10 @@ Error: %@</target> <target>Servidores SMP</target> <note>No comment provided by engineer.</note> </trans-unit> + <trans-unit id="Safer groups" xml:space="preserve"> + <source>Safer groups</source> + <note>No comment provided by engineer.</note> + </trans-unit> <trans-unit id="Save" xml:space="preserve"> <source>Save</source> <target>Guardar</target> @@ -4426,6 +4479,10 @@ Error: %@</target> <target>Los servidores WebRTC ICE guardados serán eliminados</target> <note>No comment provided by engineer.</note> </trans-unit> + <trans-unit id="Saved message" xml:space="preserve"> + <source>Saved message</source> + <note>message info title</note> + </trans-unit> <trans-unit id="Scan QR code" xml:space="preserve"> <source>Scan QR code</source> <target>Escanear código QR</target> @@ -4456,6 +4513,10 @@ Error: %@</target> <target>Buscar</target> <note>No comment provided by engineer.</note> </trans-unit> + <trans-unit id="Search bar accepts invitation links." xml:space="preserve"> + <source>Search bar accepts invitation links.</source> + <note>No comment provided by engineer.</note> + </trans-unit> <trans-unit id="Search or paste SimpleX link" xml:space="preserve"> <source>Search or paste SimpleX link</source> <target>Buscar o pegar enlace SimpleX</target> @@ -5298,6 +5359,10 @@ Se te pedirá que completes la autenticación antes de activar esta función.</t <target>Intentando conectar con el servidor usado para recibir mensajes de este contacto.</target> <note>No comment provided by engineer.</note> </trans-unit> + <trans-unit id="Turkish interface" xml:space="preserve"> + <source>Turkish interface</source> + <note>No comment provided by engineer.</note> + </trans-unit> <trans-unit id="Turn off" xml:space="preserve"> <source>Turn off</source> <target>Desactivar</target> @@ -5684,11 +5749,19 @@ Para conectarte, pide a tu contacto que cree otro enlace de conexión y comprueb <target>Cuando compartes un perfil incógnito con alguien, este perfil también se usará para los grupos a los que te inviten.</target> <note>No comment provided by engineer.</note> </trans-unit> + <trans-unit id="With encrypted files and media." xml:space="preserve"> + <source>With encrypted files and media.</source> + <note>No comment provided by engineer.</note> + </trans-unit> <trans-unit id="With optional welcome message." xml:space="preserve"> <source>With optional welcome message.</source> <target>Con mensaje de bienvenida opcional.</target> <note>No comment provided by engineer.</note> </trans-unit> + <trans-unit id="With reduced battery usage." xml:space="preserve"> + <source>With reduced battery usage.</source> + <note>No comment provided by engineer.</note> + </trans-unit> <trans-unit id="Wrong database passphrase" xml:space="preserve"> <source>Wrong database passphrase</source> <target>Contraseña de base de datos incorrecta</target> @@ -6312,6 +6385,10 @@ Los servidores de SimpleX no pueden ver tu perfil.</target> <target>conexión: % @</target> <note>connection information</note> </trans-unit> + <trans-unit id="contact %@ changed to %@" xml:space="preserve"> + <source>contact %1$@ changed to %2$@</source> + <note>profile update event chat item</note> + </trans-unit> <trans-unit id="contact has e2e encryption" xml:space="preserve"> <source>contact has e2e encryption</source> <target>el contacto dispone de cifrado de extremo a extremo</target> @@ -6582,6 +6659,10 @@ Los servidores de SimpleX no pueden ver tu perfil.</target> <target>miembro</target> <note>member role</note> </trans-unit> + <trans-unit id="member %@ changed to %@" xml:space="preserve"> + <source>member %1$@ changed to %2$@</source> + <note>profile update event chat item</note> + </trans-unit> <trans-unit id="member connected" xml:space="preserve"> <source>connected</source> <target>conectado</target> @@ -6704,6 +6785,14 @@ Los servidores de SimpleX no pueden ver tu perfil.</target> <target>ha expulsado a %@</target> <note>rcv group event chat item</note> </trans-unit> + <trans-unit id="removed contact address" xml:space="preserve"> + <source>removed contact address</source> + <note>profile update event chat item</note> + </trans-unit> + <trans-unit id="removed profile picture" xml:space="preserve"> + <source>removed profile picture</source> + <note>profile update event chat item</note> + </trans-unit> <trans-unit id="removed you" xml:space="preserve"> <source>removed you</source> <target>te ha expulsado</target> @@ -6734,6 +6823,14 @@ Los servidores de SimpleX no pueden ver tu perfil.</target> <target>Enviar mensaje directo</target> <note>No comment provided by engineer.</note> </trans-unit> + <trans-unit id="set new contact address" xml:space="preserve"> + <source>set new contact address</source> + <note>profile update event chat item</note> + </trans-unit> + <trans-unit id="set new profile picture" xml:space="preserve"> + <source>set new profile picture</source> + <note>profile update event chat item</note> + </trans-unit> <trans-unit id="starting…" xml:space="preserve"> <source>starting…</source> <target>inicializando…</target> @@ -6754,11 +6851,19 @@ Los servidores de SimpleX no pueden ver tu perfil.</target> <target>desconocido</target> <note>connection info</note> </trans-unit> + <trans-unit id="unknown status" xml:space="preserve"> + <source>unknown status</source> + <note>No comment provided by engineer.</note> + </trans-unit> <trans-unit id="updated group profile" xml:space="preserve"> <source>updated group profile</source> <target>ha actualizado el perfil del grupo</target> <note>rcv group event chat item</note> </trans-unit> + <trans-unit id="updated profile" xml:space="preserve"> + <source>updated profile</source> + <note>profile update event chat item</note> + </trans-unit> <trans-unit id="v%@" xml:space="preserve"> <source>v%@</source> <target>v%@</target> diff --git a/apps/ios/SimpleX Localizations/fi.xcloc/Localized Contents/fi.xliff b/apps/ios/SimpleX Localizations/fi.xcloc/Localized Contents/fi.xliff index 1d497ace5..ec729f4e2 100644 --- a/apps/ios/SimpleX Localizations/fi.xcloc/Localized Contents/fi.xliff +++ b/apps/ios/SimpleX Localizations/fi.xcloc/Localized Contents/fi.xliff @@ -361,6 +361,11 @@ <target>, </target> <note>No comment provided by engineer.</note> </trans-unit> + <trans-unit id="- block a member to stop spam for all. - contact address is not shared." xml:space="preserve"> + <source>- block a member to stop spam for all. +- contact address is not shared.</source> + <note>No comment provided by engineer.</note> + </trans-unit> <trans-unit id="- connect to [directory service](simplex:/contact#/?v=1-4&smp=smp%3A%2F%2Fu2dS9sG8nMNURyZwqASV4yROM28Er0luVTx5X1CsMrU%3D%40smp4.simplex.im%2FeXSPwqTkKyDO3px4fLf1wx3MvPdjdLW3%23%2F%3Fv%3D1-2%26dh%3DMCowBQYDK2VuAyEAaiv6MkMH44L2TcYrt_CsX3ZvM11WgbMEUn0hkIKTOho%253D%26srv%3Do5vmywmrnaxalvz6wi3zicyftgio6psuvyniis6gco6bp6ekl4cqj4id.onion) (BETA)! - delivery receipts (up to 20 members). - faster and more stable." xml:space="preserve"> <source>- connect to [directory service](simplex:/contact#/?v=1-4&smp=smp%3A%2F%2Fu2dS9sG8nMNURyZwqASV4yROM28Er0luVTx5X1CsMrU%3D%40smp4.simplex.im%2FeXSPwqTkKyDO3px4fLf1wx3MvPdjdLW3%23%2F%3Fv%3D1-2%26dh%3DMCowBQYDK2VuAyEAaiv6MkMH44L2TcYrt_CsX3ZvM11WgbMEUn0hkIKTOho%253D%26srv%3Do5vmywmrnaxalvz6wi3zicyftgio6psuvyniis6gco6bp6ekl4cqj4id.onion) (BETA)! - delivery receipts (up to 20 members). @@ -619,6 +624,10 @@ <target>Kaikki ryhmän jäsenet pysyvät yhteydessä.</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"> + <source>All messages will be deleted - this cannot be undone!</source> + <note>No comment provided by engineer.</note> + </trans-unit> <trans-unit id="All messages will be deleted - this cannot be undone! The messages will be deleted ONLY for you." xml:space="preserve"> <source>All messages will be deleted - this cannot be undone! The messages will be deleted ONLY for you.</source> <target>Kaikki viestit poistetaan - tätä ei voi kumota! Viestit poistuvat VAIN sinulta.</target> @@ -1112,6 +1121,10 @@ <target>Tyhjennä keskustelu?</target> <note>No comment provided by engineer.</note> </trans-unit> + <trans-unit id="Clear private notes?" xml:space="preserve"> + <source>Clear private notes?</source> + <note>No comment provided by engineer.</note> + </trans-unit> <trans-unit id="Clear verification" xml:space="preserve"> <source>Clear verification</source> <target>Tyhjennä vahvistus</target> @@ -1389,6 +1402,14 @@ This is your own one-time link!</source> <target>Luo profiilisi</target> <note>No comment provided by engineer.</note> </trans-unit> + <trans-unit id="Created at" xml:space="preserve"> + <source>Created at</source> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="Created at: %@" xml:space="preserve"> + <source>Created at: %@</source> + <note>copied message info</note> + </trans-unit> <trans-unit id="Created on %@" xml:space="preserve"> <source>Created on %@</source> <target>Luotu %@</target> @@ -2154,6 +2175,10 @@ This cannot be undone!</source> <source>Error creating member contact</source> <note>No comment provided by engineer.</note> </trans-unit> + <trans-unit id="Error creating message" xml:space="preserve"> + <source>Error creating message</source> + <note>No comment provided by engineer.</note> + </trans-unit> <trans-unit id="Error creating profile!" xml:space="preserve"> <source>Error creating profile!</source> <target>Virhe profiilin luomisessa!</target> @@ -2814,6 +2839,10 @@ This cannot be undone!</source> <target>Tuo tietokanta</target> <note>No comment provided by engineer.</note> </trans-unit> + <trans-unit id="Improved message delivery" xml:space="preserve"> + <source>Improved message delivery</source> + <note>No comment provided by engineer.</note> + </trans-unit> <trans-unit id="Improved privacy and security" xml:space="preserve"> <source>Improved privacy and security</source> <target>Parannettu yksityisyys ja turvallisuus</target> @@ -3030,6 +3059,10 @@ This cannot be undone!</source> <target>Liity ryhmään</target> <note>No comment provided by engineer.</note> </trans-unit> + <trans-unit id="Join group conversations" xml:space="preserve"> + <source>Join group conversations</source> + <note>No comment provided by engineer.</note> + </trans-unit> <trans-unit id="Join group?" xml:space="preserve"> <source>Join group?</source> <note>No comment provided by engineer.</note> @@ -3716,6 +3749,10 @@ This is your link for group %@!</source> <target>Salasana näytettäväksi</target> <note>No comment provided by engineer.</note> </trans-unit> + <trans-unit id="Past member %@" xml:space="preserve"> + <source>Past member %@</source> + <note>past/unknown group member</note> + </trans-unit> <trans-unit id="Paste desktop address" xml:space="preserve"> <source>Paste desktop address</source> <note>No comment provided by engineer.</note> @@ -3725,6 +3762,10 @@ This is your link for group %@!</source> <target>Liitä kuva</target> <note>No comment provided by engineer.</note> </trans-unit> + <trans-unit id="Paste link to connect!" xml:space="preserve"> + <source>Paste link to connect!</source> + <note>No comment provided by engineer.</note> + </trans-unit> <trans-unit id="Paste the link you received" xml:space="preserve"> <source>Paste the link you received</source> <note>No comment provided by engineer.</note> @@ -3854,6 +3895,10 @@ Error: %@</source> <target>Yksityiset tiedostonimet</target> <note>No comment provided by engineer.</note> </trans-unit> + <trans-unit id="Private notes" xml:space="preserve"> + <source>Private notes</source> + <note>name of notes to self</note> + </trans-unit> <trans-unit id="Profile and server connections" xml:space="preserve"> <source>Profile and server connections</source> <target>Profiili- ja palvelinyhteydet</target> @@ -4031,6 +4076,10 @@ Error: %@</source> <target>Vastaanotto kautta</target> <note>No comment provided by engineer.</note> </trans-unit> + <trans-unit id="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)." xml:space="preserve"> + <source>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).</source> + <note>No comment provided by engineer.</note> + </trans-unit> <trans-unit id="Recipients see updates as you type them." xml:space="preserve"> <source>Recipients see updates as you type them.</source> <target>Vastaanottajat näkevät päivitykset, kun kirjoitat niitä.</target> @@ -4228,6 +4277,10 @@ Error: %@</source> <target>SMP-palvelimet</target> <note>No comment provided by engineer.</note> </trans-unit> + <trans-unit id="Safer groups" xml:space="preserve"> + <source>Safer groups</source> + <note>No comment provided by engineer.</note> + </trans-unit> <trans-unit id="Save" xml:space="preserve"> <source>Save</source> <target>Tallenna</target> @@ -4313,6 +4366,10 @@ Error: %@</source> <target>Tallennetut WebRTC ICE -palvelimet poistetaan</target> <note>No comment provided by engineer.</note> </trans-unit> + <trans-unit id="Saved message" xml:space="preserve"> + <source>Saved message</source> + <note>message info title</note> + </trans-unit> <trans-unit id="Scan QR code" xml:space="preserve"> <source>Scan QR code</source> <target>Skannaa QR-koodi</target> @@ -4342,6 +4399,10 @@ Error: %@</source> <target>Haku</target> <note>No comment provided by engineer.</note> </trans-unit> + <trans-unit id="Search bar accepts invitation links." xml:space="preserve"> + <source>Search bar accepts invitation links.</source> + <note>No comment provided by engineer.</note> + </trans-unit> <trans-unit id="Search or paste SimpleX link" xml:space="preserve"> <source>Search or paste SimpleX link</source> <note>No comment provided by engineer.</note> @@ -5168,6 +5229,10 @@ Sinua kehotetaan suorittamaan todennus loppuun, ennen kuin tämä ominaisuus ote <target>Yritetään muodostaa yhteys palvelimeen, jota käytetään viestien vastaanottamiseen tältä kontaktilta.</target> <note>No comment provided by engineer.</note> </trans-unit> + <trans-unit id="Turkish interface" xml:space="preserve"> + <source>Turkish interface</source> + <note>No comment provided by engineer.</note> + </trans-unit> <trans-unit id="Turn off" xml:space="preserve"> <source>Turn off</source> <target>Sammuta</target> @@ -5541,11 +5606,19 @@ Jos haluat muodostaa yhteyden, pyydä kontaktiasi luomaan toinen yhteyslinkki ja <target>Kun jaat inkognitoprofiilin jonkun kanssa, tätä profiilia käytetään ryhmissä, joihin tämä sinut kutsuu.</target> <note>No comment provided by engineer.</note> </trans-unit> + <trans-unit id="With encrypted files and media." xml:space="preserve"> + <source>With encrypted files and media.</source> + <note>No comment provided by engineer.</note> + </trans-unit> <trans-unit id="With optional welcome message." xml:space="preserve"> <source>With optional welcome message.</source> <target>Valinnaisella tervetuloviestillä.</target> <note>No comment provided by engineer.</note> </trans-unit> + <trans-unit id="With reduced battery usage." xml:space="preserve"> + <source>With reduced battery usage.</source> + <note>No comment provided by engineer.</note> + </trans-unit> <trans-unit id="Wrong database passphrase" xml:space="preserve"> <source>Wrong database passphrase</source> <target>Väärä tietokannan tunnuslause</target> @@ -6149,6 +6222,10 @@ SimpleX-palvelimet eivät näe profiiliasi.</target> <target>yhteys:%@</target> <note>connection information</note> </trans-unit> + <trans-unit id="contact %@ changed to %@" xml:space="preserve"> + <source>contact %1$@ changed to %2$@</source> + <note>profile update event chat item</note> + </trans-unit> <trans-unit id="contact has e2e encryption" xml:space="preserve"> <source>contact has e2e encryption</source> <target>kontaktilla on e2e-salaus</target> @@ -6418,6 +6495,10 @@ SimpleX-palvelimet eivät näe profiiliasi.</target> <target>jäsen</target> <note>member role</note> </trans-unit> + <trans-unit id="member %@ changed to %@" xml:space="preserve"> + <source>member %1$@ changed to %2$@</source> + <note>profile update event chat item</note> + </trans-unit> <trans-unit id="member connected" xml:space="preserve"> <source>connected</source> <target>yhdistetty</target> @@ -6540,6 +6621,14 @@ SimpleX-palvelimet eivät näe profiiliasi.</target> <target>%@ poistettu</target> <note>rcv group event chat item</note> </trans-unit> + <trans-unit id="removed contact address" xml:space="preserve"> + <source>removed contact address</source> + <note>profile update event chat item</note> + </trans-unit> + <trans-unit id="removed profile picture" xml:space="preserve"> + <source>removed profile picture</source> + <note>profile update event chat item</note> + </trans-unit> <trans-unit id="removed you" xml:space="preserve"> <source>removed you</source> <target>poisti sinut</target> @@ -6569,6 +6658,14 @@ SimpleX-palvelimet eivät näe profiiliasi.</target> <source>send direct message</source> <note>No comment provided by engineer.</note> </trans-unit> + <trans-unit id="set new contact address" xml:space="preserve"> + <source>set new contact address</source> + <note>profile update event chat item</note> + </trans-unit> + <trans-unit id="set new profile picture" xml:space="preserve"> + <source>set new profile picture</source> + <note>profile update event chat item</note> + </trans-unit> <trans-unit id="starting…" xml:space="preserve"> <source>starting…</source> <target>alkaa…</target> @@ -6589,11 +6686,19 @@ SimpleX-palvelimet eivät näe profiiliasi.</target> <target>tuntematon</target> <note>connection info</note> </trans-unit> + <trans-unit id="unknown status" xml:space="preserve"> + <source>unknown status</source> + <note>No comment provided by engineer.</note> + </trans-unit> <trans-unit id="updated group profile" xml:space="preserve"> <source>updated group profile</source> <target>päivitetty ryhmäprofiili</target> <note>rcv group event chat item</note> </trans-unit> + <trans-unit id="updated profile" xml:space="preserve"> + <source>updated profile</source> + <note>profile update event chat item</note> + </trans-unit> <trans-unit id="v%@" xml:space="preserve"> <source>v%@</source> <note>No comment provided by engineer.</note> diff --git a/apps/ios/SimpleX Localizations/fr.xcloc/Localized Contents/fr.xliff b/apps/ios/SimpleX Localizations/fr.xcloc/Localized Contents/fr.xliff index 7c7a78980..79c092ff4 100644 --- a/apps/ios/SimpleX Localizations/fr.xcloc/Localized Contents/fr.xliff +++ b/apps/ios/SimpleX Localizations/fr.xcloc/Localized Contents/fr.xliff @@ -372,6 +372,11 @@ <target>, </target> <note>No comment provided by engineer.</note> </trans-unit> + <trans-unit id="- block a member to stop spam for all. - contact address is not shared." xml:space="preserve"> + <source>- block a member to stop spam for all. +- contact address is not shared.</source> + <note>No comment provided by engineer.</note> + </trans-unit> <trans-unit id="- connect to [directory service](simplex:/contact#/?v=1-4&smp=smp%3A%2F%2Fu2dS9sG8nMNURyZwqASV4yROM28Er0luVTx5X1CsMrU%3D%40smp4.simplex.im%2FeXSPwqTkKyDO3px4fLf1wx3MvPdjdLW3%23%2F%3Fv%3D1-2%26dh%3DMCowBQYDK2VuAyEAaiv6MkMH44L2TcYrt_CsX3ZvM11WgbMEUn0hkIKTOho%253D%26srv%3Do5vmywmrnaxalvz6wi3zicyftgio6psuvyniis6gco6bp6ekl4cqj4id.onion) (BETA)! - delivery receipts (up to 20 members). - faster and more stable." xml:space="preserve"> <source>- connect to [directory service](simplex:/contact#/?v=1-4&smp=smp%3A%2F%2Fu2dS9sG8nMNURyZwqASV4yROM28Er0luVTx5X1CsMrU%3D%40smp4.simplex.im%2FeXSPwqTkKyDO3px4fLf1wx3MvPdjdLW3%23%2F%3Fv%3D1-2%26dh%3DMCowBQYDK2VuAyEAaiv6MkMH44L2TcYrt_CsX3ZvM11WgbMEUn0hkIKTOho%253D%26srv%3Do5vmywmrnaxalvz6wi3zicyftgio6psuvyniis6gco6bp6ekl4cqj4id.onion) (BETA)! - delivery receipts (up to 20 members). @@ -638,6 +643,10 @@ <target>Tous les membres du groupe resteront connectés.</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"> + <source>All messages will be deleted - this cannot be undone!</source> + <note>No comment provided by engineer.</note> + </trans-unit> <trans-unit id="All messages will be deleted - this cannot be undone! The messages will be deleted ONLY for you." xml:space="preserve"> <source>All messages will be deleted - this cannot be undone! The messages will be deleted ONLY for you.</source> <target>Tous les messages seront supprimés - impossible de revenir en arrière ! Les messages seront supprimés UNIQUEMENT pour vous.</target> @@ -1144,6 +1153,10 @@ <target>Effacer la conversation ?</target> <note>No comment provided by engineer.</note> </trans-unit> + <trans-unit id="Clear private notes?" xml:space="preserve"> + <source>Clear private notes?</source> + <note>No comment provided by engineer.</note> + </trans-unit> <trans-unit id="Clear verification" xml:space="preserve"> <source>Clear verification</source> <target>Retirer la vérification</target> @@ -1438,6 +1451,14 @@ Il s'agit de votre propre lien unique !</target> <target>Créez votre profil</target> <note>No comment provided by engineer.</note> </trans-unit> + <trans-unit id="Created at" xml:space="preserve"> + <source>Created at</source> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="Created at: %@" xml:space="preserve"> + <source>Created at: %@</source> + <note>copied message info</note> + </trans-unit> <trans-unit id="Created on %@" xml:space="preserve"> <source>Created on %@</source> <target>Créé le %@</target> @@ -2222,6 +2243,10 @@ Cette opération ne peut être annulée !</target> <target>Erreur lors de la création du contact du membre</target> <note>No comment provided by engineer.</note> </trans-unit> + <trans-unit id="Error creating message" xml:space="preserve"> + <source>Error creating message</source> + <note>No comment provided by engineer.</note> + </trans-unit> <trans-unit id="Error creating profile!" xml:space="preserve"> <source>Error creating profile!</source> <target>Erreur lors de la création du profil !</target> @@ -2891,6 +2916,10 @@ Cette opération ne peut être annulée !</target> <target>Importer la base de données</target> <note>No comment provided by engineer.</note> </trans-unit> + <trans-unit id="Improved message delivery" xml:space="preserve"> + <source>Improved message delivery</source> + <note>No comment provided by engineer.</note> + </trans-unit> <trans-unit id="Improved privacy and security" xml:space="preserve"> <source>Improved privacy and security</source> <target>Une meilleure sécurité et protection de la vie privée</target> @@ -3113,6 +3142,10 @@ Cette opération ne peut être annulée !</target> <target>Rejoindre le groupe</target> <note>No comment provided by engineer.</note> </trans-unit> + <trans-unit id="Join group conversations" xml:space="preserve"> + <source>Join group conversations</source> + <note>No comment provided by engineer.</note> + </trans-unit> <trans-unit id="Join group?" xml:space="preserve"> <source>Join group?</source> <target>Rejoindre le groupe ?</target> @@ -3819,6 +3852,10 @@ Voici votre lien pour le groupe %@ !</target> <target>Mot de passe à entrer</target> <note>No comment provided by engineer.</note> </trans-unit> + <trans-unit id="Past member %@" xml:space="preserve"> + <source>Past member %@</source> + <note>past/unknown group member</note> + </trans-unit> <trans-unit id="Paste desktop address" xml:space="preserve"> <source>Paste desktop address</source> <target>Coller l'adresse du bureau</target> @@ -3829,6 +3866,10 @@ Voici votre lien pour le groupe %@ !</target> <target>Coller l'image</target> <note>No comment provided by engineer.</note> </trans-unit> + <trans-unit id="Paste link to connect!" xml:space="preserve"> + <source>Paste link to connect!</source> + <note>No comment provided by engineer.</note> + </trans-unit> <trans-unit id="Paste the link you received" xml:space="preserve"> <source>Paste the link you received</source> <target>Collez le lien que vous avez reçu</target> @@ -3961,6 +4002,10 @@ Erreur : %@</target> <target>Noms de fichiers privés</target> <note>No comment provided by engineer.</note> </trans-unit> + <trans-unit id="Private notes" xml:space="preserve"> + <source>Private notes</source> + <note>name of notes to self</note> + </trans-unit> <trans-unit id="Profile and server connections" xml:space="preserve"> <source>Profile and server connections</source> <target>Profil et connexions au serveur</target> @@ -4141,6 +4186,10 @@ Erreur : %@</target> <target>Réception via</target> <note>No comment provided by engineer.</note> </trans-unit> + <trans-unit id="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)." xml:space="preserve"> + <source>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).</source> + <note>No comment provided by engineer.</note> + </trans-unit> <trans-unit id="Recipients see updates as you type them." xml:space="preserve"> <source>Recipients see updates as you type them.</source> <target>Les destinataires voient les mises à jour au fur et à mesure que vous leur écrivez.</target> @@ -4341,6 +4390,10 @@ Erreur : %@</target> <target>Serveurs SMP</target> <note>No comment provided by engineer.</note> </trans-unit> + <trans-unit id="Safer groups" xml:space="preserve"> + <source>Safer groups</source> + <note>No comment provided by engineer.</note> + </trans-unit> <trans-unit id="Save" xml:space="preserve"> <source>Save</source> <target>Enregistrer</target> @@ -4426,6 +4479,10 @@ Erreur : %@</target> <target>Les serveurs WebRTC ICE sauvegardés seront supprimés</target> <note>No comment provided by engineer.</note> </trans-unit> + <trans-unit id="Saved message" xml:space="preserve"> + <source>Saved message</source> + <note>message info title</note> + </trans-unit> <trans-unit id="Scan QR code" xml:space="preserve"> <source>Scan QR code</source> <target>Scanner un code QR</target> @@ -4456,6 +4513,10 @@ Erreur : %@</target> <target>Rechercher</target> <note>No comment provided by engineer.</note> </trans-unit> + <trans-unit id="Search bar accepts invitation links." xml:space="preserve"> + <source>Search bar accepts invitation links.</source> + <note>No comment provided by engineer.</note> + </trans-unit> <trans-unit id="Search or paste SimpleX link" xml:space="preserve"> <source>Search or paste SimpleX link</source> <target>Rechercher ou coller un lien SimpleX</target> @@ -5298,6 +5359,10 @@ Vous serez invité à confirmer l'authentification avant que cette fonction ne s <target>Tentative de connexion au serveur utilisé pour recevoir les messages de ce contact.</target> <note>No comment provided by engineer.</note> </trans-unit> + <trans-unit id="Turkish interface" xml:space="preserve"> + <source>Turkish interface</source> + <note>No comment provided by engineer.</note> + </trans-unit> <trans-unit id="Turn off" xml:space="preserve"> <source>Turn off</source> <target>Désactiver</target> @@ -5683,11 +5748,19 @@ Pour vous connecter, veuillez demander à votre contact de créer un autre lien <target>Lorsque vous partagez un profil incognito avec quelqu'un, ce profil sera utilisé pour les groupes auxquels il vous invite.</target> <note>No comment provided by engineer.</note> </trans-unit> + <trans-unit id="With encrypted files and media." xml:space="preserve"> + <source>With encrypted files and media.</source> + <note>No comment provided by engineer.</note> + </trans-unit> <trans-unit id="With optional welcome message." xml:space="preserve"> <source>With optional welcome message.</source> <target>Avec message de bienvenue facultatif.</target> <note>No comment provided by engineer.</note> </trans-unit> + <trans-unit id="With reduced battery usage." xml:space="preserve"> + <source>With reduced battery usage.</source> + <note>No comment provided by engineer.</note> + </trans-unit> <trans-unit id="Wrong database passphrase" xml:space="preserve"> <source>Wrong database passphrase</source> <target>Mauvaise phrase secrète pour la base de données</target> @@ -6311,6 +6384,10 @@ Les serveurs SimpleX ne peuvent pas voir votre profil.</target> <target>connexion : %@</target> <note>connection information</note> </trans-unit> + <trans-unit id="contact %@ changed to %@" xml:space="preserve"> + <source>contact %1$@ changed to %2$@</source> + <note>profile update event chat item</note> + </trans-unit> <trans-unit id="contact has e2e encryption" xml:space="preserve"> <source>contact has e2e encryption</source> <target>Ce contact a le chiffrement de bout en bout</target> @@ -6581,6 +6658,10 @@ Les serveurs SimpleX ne peuvent pas voir votre profil.</target> <target>membre</target> <note>member role</note> </trans-unit> + <trans-unit id="member %@ changed to %@" xml:space="preserve"> + <source>member %1$@ changed to %2$@</source> + <note>profile update event chat item</note> + </trans-unit> <trans-unit id="member connected" xml:space="preserve"> <source>connected</source> <target>est connecté·e</target> @@ -6703,6 +6784,14 @@ Les serveurs SimpleX ne peuvent pas voir votre profil.</target> <target>a retiré %@</target> <note>rcv group event chat item</note> </trans-unit> + <trans-unit id="removed contact address" xml:space="preserve"> + <source>removed contact address</source> + <note>profile update event chat item</note> + </trans-unit> + <trans-unit id="removed profile picture" xml:space="preserve"> + <source>removed profile picture</source> + <note>profile update event chat item</note> + </trans-unit> <trans-unit id="removed you" xml:space="preserve"> <source>removed you</source> <target>vous a retiré</target> @@ -6733,6 +6822,14 @@ Les serveurs SimpleX ne peuvent pas voir votre profil.</target> <target>envoyer un message direct</target> <note>No comment provided by engineer.</note> </trans-unit> + <trans-unit id="set new contact address" xml:space="preserve"> + <source>set new contact address</source> + <note>profile update event chat item</note> + </trans-unit> + <trans-unit id="set new profile picture" xml:space="preserve"> + <source>set new profile picture</source> + <note>profile update event chat item</note> + </trans-unit> <trans-unit id="starting…" xml:space="preserve"> <source>starting…</source> <target>lancement…</target> @@ -6753,11 +6850,19 @@ Les serveurs SimpleX ne peuvent pas voir votre profil.</target> <target>inconnu</target> <note>connection info</note> </trans-unit> + <trans-unit id="unknown status" xml:space="preserve"> + <source>unknown status</source> + <note>No comment provided by engineer.</note> + </trans-unit> <trans-unit id="updated group profile" xml:space="preserve"> <source>updated group profile</source> <target>mise à jour du profil de groupe</target> <note>rcv group event chat item</note> </trans-unit> + <trans-unit id="updated profile" xml:space="preserve"> + <source>updated profile</source> + <note>profile update event chat item</note> + </trans-unit> <trans-unit id="v%@" xml:space="preserve"> <source>v%@</source> <target>v%@</target> diff --git a/apps/ios/SimpleX Localizations/it.xcloc/Localized Contents/it.xliff b/apps/ios/SimpleX Localizations/it.xcloc/Localized Contents/it.xliff index f5a7e1bb9..f0563f106 100644 --- a/apps/ios/SimpleX Localizations/it.xcloc/Localized Contents/it.xliff +++ b/apps/ios/SimpleX Localizations/it.xcloc/Localized Contents/it.xliff @@ -372,6 +372,11 @@ <target>, </target> <note>No comment provided by engineer.</note> </trans-unit> + <trans-unit id="- block a member to stop spam for all. - contact address is not shared." xml:space="preserve"> + <source>- block a member to stop spam for all. +- contact address is not shared.</source> + <note>No comment provided by engineer.</note> + </trans-unit> <trans-unit id="- connect to [directory service](simplex:/contact#/?v=1-4&smp=smp%3A%2F%2Fu2dS9sG8nMNURyZwqASV4yROM28Er0luVTx5X1CsMrU%3D%40smp4.simplex.im%2FeXSPwqTkKyDO3px4fLf1wx3MvPdjdLW3%23%2F%3Fv%3D1-2%26dh%3DMCowBQYDK2VuAyEAaiv6MkMH44L2TcYrt_CsX3ZvM11WgbMEUn0hkIKTOho%253D%26srv%3Do5vmywmrnaxalvz6wi3zicyftgio6psuvyniis6gco6bp6ekl4cqj4id.onion) (BETA)! - delivery receipts (up to 20 members). - faster and more stable." xml:space="preserve"> <source>- connect to [directory service](simplex:/contact#/?v=1-4&smp=smp%3A%2F%2Fu2dS9sG8nMNURyZwqASV4yROM28Er0luVTx5X1CsMrU%3D%40smp4.simplex.im%2FeXSPwqTkKyDO3px4fLf1wx3MvPdjdLW3%23%2F%3Fv%3D1-2%26dh%3DMCowBQYDK2VuAyEAaiv6MkMH44L2TcYrt_CsX3ZvM11WgbMEUn0hkIKTOho%253D%26srv%3Do5vmywmrnaxalvz6wi3zicyftgio6psuvyniis6gco6bp6ekl4cqj4id.onion) (BETA)! - delivery receipts (up to 20 members). @@ -638,6 +643,10 @@ <target>Tutti i membri del gruppo resteranno connessi.</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"> + <source>All messages will be deleted - this cannot be undone!</source> + <note>No comment provided by engineer.</note> + </trans-unit> <trans-unit id="All messages will be deleted - this cannot be undone! The messages will be deleted ONLY for you." xml:space="preserve"> <source>All messages will be deleted - this cannot be undone! The messages will be deleted ONLY for you.</source> <target>Tutti i messaggi verranno eliminati, non è reversibile! I messaggi verranno eliminati SOLO per te.</target> @@ -1144,6 +1153,10 @@ <target>Svuotare la conversazione?</target> <note>No comment provided by engineer.</note> </trans-unit> + <trans-unit id="Clear private notes?" xml:space="preserve"> + <source>Clear private notes?</source> + <note>No comment provided by engineer.</note> + </trans-unit> <trans-unit id="Clear verification" xml:space="preserve"> <source>Clear verification</source> <target>Annulla la verifica</target> @@ -1438,6 +1451,14 @@ Questo è il tuo link una tantum!</target> <target>Crea il tuo profilo</target> <note>No comment provided by engineer.</note> </trans-unit> + <trans-unit id="Created at" xml:space="preserve"> + <source>Created at</source> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="Created at: %@" xml:space="preserve"> + <source>Created at: %@</source> + <note>copied message info</note> + </trans-unit> <trans-unit id="Created on %@" xml:space="preserve"> <source>Created on %@</source> <target>Creato il %@</target> @@ -2222,6 +2243,10 @@ Non è reversibile!</target> <target>Errore di creazione del contatto</target> <note>No comment provided by engineer.</note> </trans-unit> + <trans-unit id="Error creating message" xml:space="preserve"> + <source>Error creating message</source> + <note>No comment provided by engineer.</note> + </trans-unit> <trans-unit id="Error creating profile!" xml:space="preserve"> <source>Error creating profile!</source> <target>Errore nella creazione del profilo!</target> @@ -2891,6 +2916,10 @@ Non è reversibile!</target> <target>Importa database</target> <note>No comment provided by engineer.</note> </trans-unit> + <trans-unit id="Improved message delivery" xml:space="preserve"> + <source>Improved message delivery</source> + <note>No comment provided by engineer.</note> + </trans-unit> <trans-unit id="Improved privacy and security" xml:space="preserve"> <source>Improved privacy and security</source> <target>Privacy e sicurezza migliorate</target> @@ -3113,6 +3142,10 @@ Non è reversibile!</target> <target>Entra nel gruppo</target> <note>No comment provided by engineer.</note> </trans-unit> + <trans-unit id="Join group conversations" xml:space="preserve"> + <source>Join group conversations</source> + <note>No comment provided by engineer.</note> + </trans-unit> <trans-unit id="Join group?" xml:space="preserve"> <source>Join group?</source> <target>Entrare nel gruppo?</target> @@ -3819,6 +3852,10 @@ Questo è il tuo link per il gruppo %@!</target> <target>Password per mostrare</target> <note>No comment provided by engineer.</note> </trans-unit> + <trans-unit id="Past member %@" xml:space="preserve"> + <source>Past member %@</source> + <note>past/unknown group member</note> + </trans-unit> <trans-unit id="Paste desktop address" xml:space="preserve"> <source>Paste desktop address</source> <target>Incolla l'indirizzo desktop</target> @@ -3829,6 +3866,10 @@ Questo è il tuo link per il gruppo %@!</target> <target>Incolla immagine</target> <note>No comment provided by engineer.</note> </trans-unit> + <trans-unit id="Paste link to connect!" xml:space="preserve"> + <source>Paste link to connect!</source> + <note>No comment provided by engineer.</note> + </trans-unit> <trans-unit id="Paste the link you received" xml:space="preserve"> <source>Paste the link you received</source> <target>Incolla il link che hai ricevuto</target> @@ -3961,6 +4002,10 @@ Errore: %@</target> <target>Nomi di file privati</target> <note>No comment provided by engineer.</note> </trans-unit> + <trans-unit id="Private notes" xml:space="preserve"> + <source>Private notes</source> + <note>name of notes to self</note> + </trans-unit> <trans-unit id="Profile and server connections" xml:space="preserve"> <source>Profile and server connections</source> <target>Profilo e connessioni al server</target> @@ -4141,6 +4186,10 @@ Errore: %@</target> <target>Ricezione via</target> <note>No comment provided by engineer.</note> </trans-unit> + <trans-unit id="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)." xml:space="preserve"> + <source>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).</source> + <note>No comment provided by engineer.</note> + </trans-unit> <trans-unit id="Recipients see updates as you type them." xml:space="preserve"> <source>Recipients see updates as you type them.</source> <target>I destinatari vedono gli aggiornamenti mentre li digiti.</target> @@ -4341,6 +4390,10 @@ Errore: %@</target> <target>Server SMP</target> <note>No comment provided by engineer.</note> </trans-unit> + <trans-unit id="Safer groups" xml:space="preserve"> + <source>Safer groups</source> + <note>No comment provided by engineer.</note> + </trans-unit> <trans-unit id="Save" xml:space="preserve"> <source>Save</source> <target>Salva</target> @@ -4426,6 +4479,10 @@ Errore: %@</target> <target>I server WebRTC ICE salvati verranno rimossi</target> <note>No comment provided by engineer.</note> </trans-unit> + <trans-unit id="Saved message" xml:space="preserve"> + <source>Saved message</source> + <note>message info title</note> + </trans-unit> <trans-unit id="Scan QR code" xml:space="preserve"> <source>Scan QR code</source> <target>Scansiona codice QR</target> @@ -4456,6 +4513,10 @@ Errore: %@</target> <target>Cerca</target> <note>No comment provided by engineer.</note> </trans-unit> + <trans-unit id="Search bar accepts invitation links." xml:space="preserve"> + <source>Search bar accepts invitation links.</source> + <note>No comment provided by engineer.</note> + </trans-unit> <trans-unit id="Search or paste SimpleX link" xml:space="preserve"> <source>Search or paste SimpleX link</source> <target>Cerca o incolla un link SimpleX</target> @@ -5298,6 +5359,10 @@ Ti verrà chiesto di completare l'autenticazione prima di attivare questa funzio <target>Tentativo di connessione al server usato per ricevere messaggi da questo contatto.</target> <note>No comment provided by engineer.</note> </trans-unit> + <trans-unit id="Turkish interface" xml:space="preserve"> + <source>Turkish interface</source> + <note>No comment provided by engineer.</note> + </trans-unit> <trans-unit id="Turn off" xml:space="preserve"> <source>Turn off</source> <target>Spegni</target> @@ -5683,11 +5748,19 @@ Per connetterti, chiedi al tuo contatto di creare un altro link di connessione e <target>Quando condividi un profilo in incognito con qualcuno, questo profilo verrà utilizzato per i gruppi a cui ti invitano.</target> <note>No comment provided by engineer.</note> </trans-unit> + <trans-unit id="With encrypted files and media." xml:space="preserve"> + <source>With encrypted files and media.</source> + <note>No comment provided by engineer.</note> + </trans-unit> <trans-unit id="With optional welcome message." xml:space="preserve"> <source>With optional welcome message.</source> <target>Con messaggio di benvenuto facoltativo.</target> <note>No comment provided by engineer.</note> </trans-unit> + <trans-unit id="With reduced battery usage." xml:space="preserve"> + <source>With reduced battery usage.</source> + <note>No comment provided by engineer.</note> + </trans-unit> <trans-unit id="Wrong database passphrase" xml:space="preserve"> <source>Wrong database passphrase</source> <target>Password del database sbagliata</target> @@ -6311,6 +6384,10 @@ I server di SimpleX non possono vedere il tuo profilo.</target> <target>connessione:% @</target> <note>connection information</note> </trans-unit> + <trans-unit id="contact %@ changed to %@" xml:space="preserve"> + <source>contact %1$@ changed to %2$@</source> + <note>profile update event chat item</note> + </trans-unit> <trans-unit id="contact has e2e encryption" xml:space="preserve"> <source>contact has e2e encryption</source> <target>il contatto ha la crittografia e2e</target> @@ -6581,6 +6658,10 @@ I server di SimpleX non possono vedere il tuo profilo.</target> <target>membro</target> <note>member role</note> </trans-unit> + <trans-unit id="member %@ changed to %@" xml:space="preserve"> + <source>member %1$@ changed to %2$@</source> + <note>profile update event chat item</note> + </trans-unit> <trans-unit id="member connected" xml:space="preserve"> <source>connected</source> <target>si è connesso/a</target> @@ -6703,6 +6784,14 @@ I server di SimpleX non possono vedere il tuo profilo.</target> <target>ha rimosso %@</target> <note>rcv group event chat item</note> </trans-unit> + <trans-unit id="removed contact address" xml:space="preserve"> + <source>removed contact address</source> + <note>profile update event chat item</note> + </trans-unit> + <trans-unit id="removed profile picture" xml:space="preserve"> + <source>removed profile picture</source> + <note>profile update event chat item</note> + </trans-unit> <trans-unit id="removed you" xml:space="preserve"> <source>removed you</source> <target>ti ha rimosso/a</target> @@ -6733,6 +6822,14 @@ I server di SimpleX non possono vedere il tuo profilo.</target> <target>invia messaggio diretto</target> <note>No comment provided by engineer.</note> </trans-unit> + <trans-unit id="set new contact address" xml:space="preserve"> + <source>set new contact address</source> + <note>profile update event chat item</note> + </trans-unit> + <trans-unit id="set new profile picture" xml:space="preserve"> + <source>set new profile picture</source> + <note>profile update event chat item</note> + </trans-unit> <trans-unit id="starting…" xml:space="preserve"> <source>starting…</source> <target>avvio…</target> @@ -6753,11 +6850,19 @@ I server di SimpleX non possono vedere il tuo profilo.</target> <target>sconosciuto</target> <note>connection info</note> </trans-unit> + <trans-unit id="unknown status" xml:space="preserve"> + <source>unknown status</source> + <note>No comment provided by engineer.</note> + </trans-unit> <trans-unit id="updated group profile" xml:space="preserve"> <source>updated group profile</source> <target>ha aggiornato il profilo del gruppo</target> <note>rcv group event chat item</note> </trans-unit> + <trans-unit id="updated profile" xml:space="preserve"> + <source>updated profile</source> + <note>profile update event chat item</note> + </trans-unit> <trans-unit id="v%@" xml:space="preserve"> <source>v%@</source> <target>v%@</target> diff --git a/apps/ios/SimpleX Localizations/ja.xcloc/Localized Contents/ja.xliff b/apps/ios/SimpleX Localizations/ja.xcloc/Localized Contents/ja.xliff index ad34f7618..75e630a9e 100644 --- a/apps/ios/SimpleX Localizations/ja.xcloc/Localized Contents/ja.xliff +++ b/apps/ios/SimpleX Localizations/ja.xcloc/Localized Contents/ja.xliff @@ -364,6 +364,11 @@ <target>, </target> <note>No comment provided by engineer.</note> </trans-unit> + <trans-unit id="- block a member to stop spam for all. - contact address is not shared." xml:space="preserve"> + <source>- block a member to stop spam for all. +- contact address is not shared.</source> + <note>No comment provided by engineer.</note> + </trans-unit> <trans-unit id="- connect to [directory service](simplex:/contact#/?v=1-4&smp=smp%3A%2F%2Fu2dS9sG8nMNURyZwqASV4yROM28Er0luVTx5X1CsMrU%3D%40smp4.simplex.im%2FeXSPwqTkKyDO3px4fLf1wx3MvPdjdLW3%23%2F%3Fv%3D1-2%26dh%3DMCowBQYDK2VuAyEAaiv6MkMH44L2TcYrt_CsX3ZvM11WgbMEUn0hkIKTOho%253D%26srv%3Do5vmywmrnaxalvz6wi3zicyftgio6psuvyniis6gco6bp6ekl4cqj4id.onion) (BETA)! - delivery receipts (up to 20 members). - faster and more stable." xml:space="preserve"> <source>- connect to [directory service](simplex:/contact#/?v=1-4&smp=smp%3A%2F%2Fu2dS9sG8nMNURyZwqASV4yROM28Er0luVTx5X1CsMrU%3D%40smp4.simplex.im%2FeXSPwqTkKyDO3px4fLf1wx3MvPdjdLW3%23%2F%3Fv%3D1-2%26dh%3DMCowBQYDK2VuAyEAaiv6MkMH44L2TcYrt_CsX3ZvM11WgbMEUn0hkIKTOho%253D%26srv%3Do5vmywmrnaxalvz6wi3zicyftgio6psuvyniis6gco6bp6ekl4cqj4id.onion) (BETA)! - delivery receipts (up to 20 members). @@ -622,6 +627,10 @@ <target>グループ全員の接続が継続します。</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"> + <source>All messages will be deleted - this cannot be undone!</source> + <note>No comment provided by engineer.</note> + </trans-unit> <trans-unit id="All messages will be deleted - this cannot be undone! The messages will be deleted ONLY for you." xml:space="preserve"> <source>All messages will be deleted - this cannot be undone! The messages will be deleted ONLY for you.</source> <target>全てのメッセージが削除されます(※注意:元に戻せません!※)。削除されるのは片方あなたのメッセージのみ。</target> @@ -1117,6 +1126,10 @@ <target>ダイアログのクリアしますか?</target> <note>No comment provided by engineer.</note> </trans-unit> + <trans-unit id="Clear private notes?" xml:space="preserve"> + <source>Clear private notes?</source> + <note>No comment provided by engineer.</note> + </trans-unit> <trans-unit id="Clear verification" xml:space="preserve"> <source>Clear verification</source> <target>検証を消す</target> @@ -1394,6 +1407,14 @@ This is your own one-time link!</source> <target>プロフィールを作成する</target> <note>No comment provided by engineer.</note> </trans-unit> + <trans-unit id="Created at" xml:space="preserve"> + <source>Created at</source> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="Created at: %@" xml:space="preserve"> + <source>Created at: %@</source> + <note>copied message info</note> + </trans-unit> <trans-unit id="Created on %@" xml:space="preserve"> <source>Created on %@</source> <target>%@ によって作成されました</target> @@ -2161,6 +2182,10 @@ This cannot be undone!</source> <target>メンバー連絡先の作成中にエラーが発生</target> <note>No comment provided by engineer.</note> </trans-unit> + <trans-unit id="Error creating message" xml:space="preserve"> + <source>Error creating message</source> + <note>No comment provided by engineer.</note> + </trans-unit> <trans-unit id="Error creating profile!" xml:space="preserve"> <source>Error creating profile!</source> <target>プロフィール作成にエラー発生!</target> @@ -2820,6 +2845,10 @@ This cannot be undone!</source> <target>データベースを読み込む</target> <note>No comment provided by engineer.</note> </trans-unit> + <trans-unit id="Improved message delivery" xml:space="preserve"> + <source>Improved message delivery</source> + <note>No comment provided by engineer.</note> + </trans-unit> <trans-unit id="Improved privacy and security" xml:space="preserve"> <source>Improved privacy and security</source> <target>プライバシーとセキュリティ強化</target> @@ -3036,6 +3065,10 @@ This cannot be undone!</source> <target>グループに参加</target> <note>No comment provided by engineer.</note> </trans-unit> + <trans-unit id="Join group conversations" xml:space="preserve"> + <source>Join group conversations</source> + <note>No comment provided by engineer.</note> + </trans-unit> <trans-unit id="Join group?" xml:space="preserve"> <source>Join group?</source> <note>No comment provided by engineer.</note> @@ -3723,6 +3756,10 @@ This is your link for group %@!</source> <target>パスワードを表示する</target> <note>No comment provided by engineer.</note> </trans-unit> + <trans-unit id="Past member %@" xml:space="preserve"> + <source>Past member %@</source> + <note>past/unknown group member</note> + </trans-unit> <trans-unit id="Paste desktop address" xml:space="preserve"> <source>Paste desktop address</source> <note>No comment provided by engineer.</note> @@ -3732,6 +3769,10 @@ This is your link for group %@!</source> <target>画像の貼り付け</target> <note>No comment provided by engineer.</note> </trans-unit> + <trans-unit id="Paste link to connect!" xml:space="preserve"> + <source>Paste link to connect!</source> + <note>No comment provided by engineer.</note> + </trans-unit> <trans-unit id="Paste the link you received" xml:space="preserve"> <source>Paste the link you received</source> <note>No comment provided by engineer.</note> @@ -3861,6 +3902,10 @@ Error: %@</source> <target>プライベートなファイル名</target> <note>No comment provided by engineer.</note> </trans-unit> + <trans-unit id="Private notes" xml:space="preserve"> + <source>Private notes</source> + <note>name of notes to self</note> + </trans-unit> <trans-unit id="Profile and server connections" xml:space="preserve"> <source>Profile and server connections</source> <target>プロフィールとサーバ接続</target> @@ -4037,6 +4082,10 @@ Error: %@</source> <target>経由で受信</target> <note>No comment provided by engineer.</note> </trans-unit> + <trans-unit id="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)." xml:space="preserve"> + <source>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).</source> + <note>No comment provided by engineer.</note> + </trans-unit> <trans-unit id="Recipients see updates as you type them." xml:space="preserve"> <source>Recipients see updates as you type them.</source> <target>受信者には、入力時に更新内容が表示されます。</target> @@ -4234,6 +4283,10 @@ Error: %@</source> <target>SMPサーバ</target> <note>No comment provided by engineer.</note> </trans-unit> + <trans-unit id="Safer groups" xml:space="preserve"> + <source>Safer groups</source> + <note>No comment provided by engineer.</note> + </trans-unit> <trans-unit id="Save" xml:space="preserve"> <source>Save</source> <target>保存</target> @@ -4319,6 +4372,10 @@ Error: %@</source> <target>保存されたWebRTC ICEサーバは削除されます</target> <note>No comment provided by engineer.</note> </trans-unit> + <trans-unit id="Saved message" xml:space="preserve"> + <source>Saved message</source> + <note>message info title</note> + </trans-unit> <trans-unit id="Scan QR code" xml:space="preserve"> <source>Scan QR code</source> <target>QRコードを読み込む</target> @@ -4348,6 +4405,10 @@ Error: %@</source> <target>検索</target> <note>No comment provided by engineer.</note> </trans-unit> + <trans-unit id="Search bar accepts invitation links." xml:space="preserve"> + <source>Search bar accepts invitation links.</source> + <note>No comment provided by engineer.</note> + </trans-unit> <trans-unit id="Search or paste SimpleX link" xml:space="preserve"> <source>Search or paste SimpleX link</source> <note>No comment provided by engineer.</note> @@ -5167,6 +5228,10 @@ You will be prompted to complete authentication before this feature is enabled.< <target>このコンタクトから受信するメッセージのサーバに接続しようとしてます。</target> <note>No comment provided by engineer.</note> </trans-unit> + <trans-unit id="Turkish interface" xml:space="preserve"> + <source>Turkish interface</source> + <note>No comment provided by engineer.</note> + </trans-unit> <trans-unit id="Turn off" xml:space="preserve"> <source>Turn off</source> <target>オフにする</target> @@ -5540,11 +5605,19 @@ To connect, please ask your contact to create another connection link and check <target>連絡相手にシークレットモードのプロフィールを共有すると、その連絡相手に招待されたグループでも同じプロフィールが使われます。</target> <note>No comment provided by engineer.</note> </trans-unit> + <trans-unit id="With encrypted files and media." xml:space="preserve"> + <source>With encrypted files and media.</source> + <note>No comment provided by engineer.</note> + </trans-unit> <trans-unit id="With optional welcome message." xml:space="preserve"> <source>With optional welcome message.</source> <target>任意のウェルカムメッセージ付き。</target> <note>No comment provided by engineer.</note> </trans-unit> + <trans-unit id="With reduced battery usage." xml:space="preserve"> + <source>With reduced battery usage.</source> + <note>No comment provided by engineer.</note> + </trans-unit> <trans-unit id="Wrong database passphrase" xml:space="preserve"> <source>Wrong database passphrase</source> <target>データベースのパスフレーズが違います</target> @@ -6148,6 +6221,10 @@ SimpleX サーバーはあなたのプロファイルを参照できません。 <target>接続:%@</target> <note>connection information</note> </trans-unit> + <trans-unit id="contact %@ changed to %@" xml:space="preserve"> + <source>contact %1$@ changed to %2$@</source> + <note>profile update event chat item</note> + </trans-unit> <trans-unit id="contact has e2e encryption" xml:space="preserve"> <source>contact has e2e encryption</source> <target>連絡先はエンドツーエンド暗号化があります</target> @@ -6417,6 +6494,10 @@ SimpleX サーバーはあなたのプロファイルを参照できません。 <target>メンバー</target> <note>member role</note> </trans-unit> + <trans-unit id="member %@ changed to %@" xml:space="preserve"> + <source>member %1$@ changed to %2$@</source> + <note>profile update event chat item</note> + </trans-unit> <trans-unit id="member connected" xml:space="preserve"> <source>connected</source> <target>接続中</target> @@ -6539,6 +6620,14 @@ SimpleX サーバーはあなたのプロファイルを参照できません。 <target>%@ を除名されました</target> <note>rcv group event chat item</note> </trans-unit> + <trans-unit id="removed contact address" xml:space="preserve"> + <source>removed contact address</source> + <note>profile update event chat item</note> + </trans-unit> + <trans-unit id="removed profile picture" xml:space="preserve"> + <source>removed profile picture</source> + <note>profile update event chat item</note> + </trans-unit> <trans-unit id="removed you" xml:space="preserve"> <source>removed you</source> <target>あなたを除名しました</target> @@ -6568,6 +6657,14 @@ SimpleX サーバーはあなたのプロファイルを参照できません。 <source>send direct message</source> <note>No comment provided by engineer.</note> </trans-unit> + <trans-unit id="set new contact address" xml:space="preserve"> + <source>set new contact address</source> + <note>profile update event chat item</note> + </trans-unit> + <trans-unit id="set new profile picture" xml:space="preserve"> + <source>set new profile picture</source> + <note>profile update event chat item</note> + </trans-unit> <trans-unit id="starting…" xml:space="preserve"> <source>starting…</source> <target>接続中…</target> @@ -6588,11 +6685,19 @@ SimpleX サーバーはあなたのプロファイルを参照できません。 <target>不明</target> <note>connection info</note> </trans-unit> + <trans-unit id="unknown status" xml:space="preserve"> + <source>unknown status</source> + <note>No comment provided by engineer.</note> + </trans-unit> <trans-unit id="updated group profile" xml:space="preserve"> <source>updated group profile</source> <target>グループプロフィールを更新しました</target> <note>rcv group event chat item</note> </trans-unit> + <trans-unit id="updated profile" xml:space="preserve"> + <source>updated profile</source> + <note>profile update event chat item</note> + </trans-unit> <trans-unit id="v%@" xml:space="preserve"> <source>v%@</source> <note>No comment provided by engineer.</note> diff --git a/apps/ios/SimpleX Localizations/nl.xcloc/Localized Contents/nl.xliff b/apps/ios/SimpleX Localizations/nl.xcloc/Localized Contents/nl.xliff index 38fd6b91f..deb4aeac6 100644 --- a/apps/ios/SimpleX Localizations/nl.xcloc/Localized Contents/nl.xliff +++ b/apps/ios/SimpleX Localizations/nl.xcloc/Localized Contents/nl.xliff @@ -372,6 +372,11 @@ <target>, </target> <note>No comment provided by engineer.</note> </trans-unit> + <trans-unit id="- block a member to stop spam for all. - contact address is not shared." xml:space="preserve"> + <source>- block a member to stop spam for all. +- contact address is not shared.</source> + <note>No comment provided by engineer.</note> + </trans-unit> <trans-unit id="- connect to [directory service](simplex:/contact#/?v=1-4&smp=smp%3A%2F%2Fu2dS9sG8nMNURyZwqASV4yROM28Er0luVTx5X1CsMrU%3D%40smp4.simplex.im%2FeXSPwqTkKyDO3px4fLf1wx3MvPdjdLW3%23%2F%3Fv%3D1-2%26dh%3DMCowBQYDK2VuAyEAaiv6MkMH44L2TcYrt_CsX3ZvM11WgbMEUn0hkIKTOho%253D%26srv%3Do5vmywmrnaxalvz6wi3zicyftgio6psuvyniis6gco6bp6ekl4cqj4id.onion) (BETA)! - delivery receipts (up to 20 members). - faster and more stable." xml:space="preserve"> <source>- connect to [directory service](simplex:/contact#/?v=1-4&smp=smp%3A%2F%2Fu2dS9sG8nMNURyZwqASV4yROM28Er0luVTx5X1CsMrU%3D%40smp4.simplex.im%2FeXSPwqTkKyDO3px4fLf1wx3MvPdjdLW3%23%2F%3Fv%3D1-2%26dh%3DMCowBQYDK2VuAyEAaiv6MkMH44L2TcYrt_CsX3ZvM11WgbMEUn0hkIKTOho%253D%26srv%3Do5vmywmrnaxalvz6wi3zicyftgio6psuvyniis6gco6bp6ekl4cqj4id.onion) (BETA)! - delivery receipts (up to 20 members). @@ -638,6 +643,10 @@ <target>Alle groepsleden blijven verbonden.</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"> + <source>All messages will be deleted - this cannot be undone!</source> + <note>No comment provided by engineer.</note> + </trans-unit> <trans-unit id="All messages will be deleted - this cannot be undone! The messages will be deleted ONLY for you." xml:space="preserve"> <source>All messages will be deleted - this cannot be undone! The messages will be deleted ONLY for you.</source> <target>Alle berichten worden verwijderd, dit kan niet ongedaan worden gemaakt! De berichten worden ALLEEN voor jou verwijderd.</target> @@ -1144,6 +1153,10 @@ <target>Gesprek wissen?</target> <note>No comment provided by engineer.</note> </trans-unit> + <trans-unit id="Clear private notes?" xml:space="preserve"> + <source>Clear private notes?</source> + <note>No comment provided by engineer.</note> + </trans-unit> <trans-unit id="Clear verification" xml:space="preserve"> <source>Clear verification</source> <target>Verwijderd verificatie</target> @@ -1438,6 +1451,14 @@ Dit is uw eigen eenmalige link!</target> <target>Maak je profiel aan</target> <note>No comment provided by engineer.</note> </trans-unit> + <trans-unit id="Created at" xml:space="preserve"> + <source>Created at</source> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="Created at: %@" xml:space="preserve"> + <source>Created at: %@</source> + <note>copied message info</note> + </trans-unit> <trans-unit id="Created on %@" xml:space="preserve"> <source>Created on %@</source> <target>Gemaakt op %@</target> @@ -2222,6 +2243,10 @@ Dit kan niet ongedaan gemaakt worden!</target> <target>Fout bij aanmaken contact</target> <note>No comment provided by engineer.</note> </trans-unit> + <trans-unit id="Error creating message" xml:space="preserve"> + <source>Error creating message</source> + <note>No comment provided by engineer.</note> + </trans-unit> <trans-unit id="Error creating profile!" xml:space="preserve"> <source>Error creating profile!</source> <target>Fout bij aanmaken van profiel!</target> @@ -2891,6 +2916,10 @@ Dit kan niet ongedaan gemaakt worden!</target> <target>Database importeren</target> <note>No comment provided by engineer.</note> </trans-unit> + <trans-unit id="Improved message delivery" xml:space="preserve"> + <source>Improved message delivery</source> + <note>No comment provided by engineer.</note> + </trans-unit> <trans-unit id="Improved privacy and security" xml:space="preserve"> <source>Improved privacy and security</source> <target>Verbeterde privacy en veiligheid</target> @@ -3113,6 +3142,10 @@ Dit kan niet ongedaan gemaakt worden!</target> <target>Word lid van groep</target> <note>No comment provided by engineer.</note> </trans-unit> + <trans-unit id="Join group conversations" xml:space="preserve"> + <source>Join group conversations</source> + <note>No comment provided by engineer.</note> + </trans-unit> <trans-unit id="Join group?" xml:space="preserve"> <source>Join group?</source> <target>Deelnemen aan groep?</target> @@ -3819,6 +3852,10 @@ Dit is jouw link voor groep %@!</target> <target>Wachtwoord om weer te geven</target> <note>No comment provided by engineer.</note> </trans-unit> + <trans-unit id="Past member %@" xml:space="preserve"> + <source>Past member %@</source> + <note>past/unknown group member</note> + </trans-unit> <trans-unit id="Paste desktop address" xml:space="preserve"> <source>Paste desktop address</source> <target>Desktopadres plakken</target> @@ -3829,6 +3866,10 @@ Dit is jouw link voor groep %@!</target> <target>Afbeelding plakken</target> <note>No comment provided by engineer.</note> </trans-unit> + <trans-unit id="Paste link to connect!" xml:space="preserve"> + <source>Paste link to connect!</source> + <note>No comment provided by engineer.</note> + </trans-unit> <trans-unit id="Paste the link you received" xml:space="preserve"> <source>Paste the link you received</source> <target>Plak de link die je hebt ontvangen</target> @@ -3961,6 +4002,10 @@ Fout: %@</target> <target>Privé bestandsnamen</target> <note>No comment provided by engineer.</note> </trans-unit> + <trans-unit id="Private notes" xml:space="preserve"> + <source>Private notes</source> + <note>name of notes to self</note> + </trans-unit> <trans-unit id="Profile and server connections" xml:space="preserve"> <source>Profile and server connections</source> <target>Profiel- en serververbindingen</target> @@ -4141,6 +4186,10 @@ Fout: %@</target> <target>Ontvang via</target> <note>No comment provided by engineer.</note> </trans-unit> + <trans-unit id="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)." xml:space="preserve"> + <source>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).</source> + <note>No comment provided by engineer.</note> + </trans-unit> <trans-unit id="Recipients see updates as you type them." xml:space="preserve"> <source>Recipients see updates as you type them.</source> <target>Ontvangers zien updates terwijl u ze typt.</target> @@ -4341,6 +4390,10 @@ Fout: %@</target> <target>SMP servers</target> <note>No comment provided by engineer.</note> </trans-unit> + <trans-unit id="Safer groups" xml:space="preserve"> + <source>Safer groups</source> + <note>No comment provided by engineer.</note> + </trans-unit> <trans-unit id="Save" xml:space="preserve"> <source>Save</source> <target>Opslaan</target> @@ -4426,6 +4479,10 @@ Fout: %@</target> <target>Opgeslagen WebRTC ICE servers worden verwijderd</target> <note>No comment provided by engineer.</note> </trans-unit> + <trans-unit id="Saved message" xml:space="preserve"> + <source>Saved message</source> + <note>message info title</note> + </trans-unit> <trans-unit id="Scan QR code" xml:space="preserve"> <source>Scan QR code</source> <target>Scan QR-code</target> @@ -4456,6 +4513,10 @@ Fout: %@</target> <target>Zoeken</target> <note>No comment provided by engineer.</note> </trans-unit> + <trans-unit id="Search bar accepts invitation links." xml:space="preserve"> + <source>Search bar accepts invitation links.</source> + <note>No comment provided by engineer.</note> + </trans-unit> <trans-unit id="Search or paste SimpleX link" xml:space="preserve"> <source>Search or paste SimpleX link</source> <target>Zoek of plak de SimpleX link</target> @@ -5298,6 +5359,10 @@ U wordt gevraagd de authenticatie te voltooien voordat deze functie wordt ingesc <target>Proberen verbinding te maken met de server die wordt gebruikt om berichten van dit contact te ontvangen.</target> <note>No comment provided by engineer.</note> </trans-unit> + <trans-unit id="Turkish interface" xml:space="preserve"> + <source>Turkish interface</source> + <note>No comment provided by engineer.</note> + </trans-unit> <trans-unit id="Turn off" xml:space="preserve"> <source>Turn off</source> <target>Uitschakelen</target> @@ -5683,11 +5748,19 @@ Om verbinding te maken, vraagt u uw contact om een andere verbinding link te mak <target>Wanneer je een incognito profiel met iemand deelt, wordt dit profiel gebruikt voor de groepen waarvoor ze je uitnodigen.</target> <note>No comment provided by engineer.</note> </trans-unit> + <trans-unit id="With encrypted files and media." xml:space="preserve"> + <source>With encrypted files and media.</source> + <note>No comment provided by engineer.</note> + </trans-unit> <trans-unit id="With optional welcome message." xml:space="preserve"> <source>With optional welcome message.</source> <target>Met optioneel welkomst bericht.</target> <note>No comment provided by engineer.</note> </trans-unit> + <trans-unit id="With reduced battery usage." xml:space="preserve"> + <source>With reduced battery usage.</source> + <note>No comment provided by engineer.</note> + </trans-unit> <trans-unit id="Wrong database passphrase" xml:space="preserve"> <source>Wrong database passphrase</source> <target>Verkeerd wachtwoord voor de database</target> @@ -6311,6 +6384,10 @@ SimpleX servers kunnen uw profiel niet zien.</target> <target>verbinding:%@</target> <note>connection information</note> </trans-unit> + <trans-unit id="contact %@ changed to %@" xml:space="preserve"> + <source>contact %1$@ changed to %2$@</source> + <note>profile update event chat item</note> + </trans-unit> <trans-unit id="contact has e2e encryption" xml:space="preserve"> <source>contact has e2e encryption</source> <target>contact heeft e2e-codering</target> @@ -6581,6 +6658,10 @@ SimpleX servers kunnen uw profiel niet zien.</target> <target>lid</target> <note>member role</note> </trans-unit> + <trans-unit id="member %@ changed to %@" xml:space="preserve"> + <source>member %1$@ changed to %2$@</source> + <note>profile update event chat item</note> + </trans-unit> <trans-unit id="member connected" xml:space="preserve"> <source>connected</source> <target>is toegetreden</target> @@ -6703,6 +6784,14 @@ SimpleX servers kunnen uw profiel niet zien.</target> <target>verwijderd %@</target> <note>rcv group event chat item</note> </trans-unit> + <trans-unit id="removed contact address" xml:space="preserve"> + <source>removed contact address</source> + <note>profile update event chat item</note> + </trans-unit> + <trans-unit id="removed profile picture" xml:space="preserve"> + <source>removed profile picture</source> + <note>profile update event chat item</note> + </trans-unit> <trans-unit id="removed you" xml:space="preserve"> <source>removed you</source> <target>heeft je verwijderd</target> @@ -6733,6 +6822,14 @@ SimpleX servers kunnen uw profiel niet zien.</target> <target>stuur een direct bericht</target> <note>No comment provided by engineer.</note> </trans-unit> + <trans-unit id="set new contact address" xml:space="preserve"> + <source>set new contact address</source> + <note>profile update event chat item</note> + </trans-unit> + <trans-unit id="set new profile picture" xml:space="preserve"> + <source>set new profile picture</source> + <note>profile update event chat item</note> + </trans-unit> <trans-unit id="starting…" xml:space="preserve"> <source>starting…</source> <target>beginnen…</target> @@ -6753,11 +6850,19 @@ SimpleX servers kunnen uw profiel niet zien.</target> <target>onbekend</target> <note>connection info</note> </trans-unit> + <trans-unit id="unknown status" xml:space="preserve"> + <source>unknown status</source> + <note>No comment provided by engineer.</note> + </trans-unit> <trans-unit id="updated group profile" xml:space="preserve"> <source>updated group profile</source> <target>bijgewerkt groep profiel</target> <note>rcv group event chat item</note> </trans-unit> + <trans-unit id="updated profile" xml:space="preserve"> + <source>updated profile</source> + <note>profile update event chat item</note> + </trans-unit> <trans-unit id="v%@" xml:space="preserve"> <source>v%@</source> <target>v%@</target> diff --git a/apps/ios/SimpleX Localizations/pl.xcloc/Localized Contents/pl.xliff b/apps/ios/SimpleX Localizations/pl.xcloc/Localized Contents/pl.xliff index 14e3a0067..1be09f1ae 100644 --- a/apps/ios/SimpleX Localizations/pl.xcloc/Localized Contents/pl.xliff +++ b/apps/ios/SimpleX Localizations/pl.xcloc/Localized Contents/pl.xliff @@ -372,6 +372,11 @@ <target>, </target> <note>No comment provided by engineer.</note> </trans-unit> + <trans-unit id="- block a member to stop spam for all. - contact address is not shared." xml:space="preserve"> + <source>- block a member to stop spam for all. +- contact address is not shared.</source> + <note>No comment provided by engineer.</note> + </trans-unit> <trans-unit id="- connect to [directory service](simplex:/contact#/?v=1-4&smp=smp%3A%2F%2Fu2dS9sG8nMNURyZwqASV4yROM28Er0luVTx5X1CsMrU%3D%40smp4.simplex.im%2FeXSPwqTkKyDO3px4fLf1wx3MvPdjdLW3%23%2F%3Fv%3D1-2%26dh%3DMCowBQYDK2VuAyEAaiv6MkMH44L2TcYrt_CsX3ZvM11WgbMEUn0hkIKTOho%253D%26srv%3Do5vmywmrnaxalvz6wi3zicyftgio6psuvyniis6gco6bp6ekl4cqj4id.onion) (BETA)! - delivery receipts (up to 20 members). - faster and more stable." xml:space="preserve"> <source>- connect to [directory service](simplex:/contact#/?v=1-4&smp=smp%3A%2F%2Fu2dS9sG8nMNURyZwqASV4yROM28Er0luVTx5X1CsMrU%3D%40smp4.simplex.im%2FeXSPwqTkKyDO3px4fLf1wx3MvPdjdLW3%23%2F%3Fv%3D1-2%26dh%3DMCowBQYDK2VuAyEAaiv6MkMH44L2TcYrt_CsX3ZvM11WgbMEUn0hkIKTOho%253D%26srv%3Do5vmywmrnaxalvz6wi3zicyftgio6psuvyniis6gco6bp6ekl4cqj4id.onion) (BETA)! - delivery receipts (up to 20 members). @@ -638,6 +643,10 @@ <target>Wszyscy członkowie grupy pozostaną połączeni.</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"> + <source>All messages will be deleted - this cannot be undone!</source> + <note>No comment provided by engineer.</note> + </trans-unit> <trans-unit id="All messages will be deleted - this cannot be undone! The messages will be deleted ONLY for you." xml:space="preserve"> <source>All messages will be deleted - this cannot be undone! The messages will be deleted ONLY for you.</source> <target>Wszystkie wiadomości zostaną usunięte - nie można tego cofnąć! Wiadomości zostaną usunięte TYLKO dla Ciebie.</target> @@ -1144,6 +1153,10 @@ <target>Wyczyścić rozmowę?</target> <note>No comment provided by engineer.</note> </trans-unit> + <trans-unit id="Clear private notes?" xml:space="preserve"> + <source>Clear private notes?</source> + <note>No comment provided by engineer.</note> + </trans-unit> <trans-unit id="Clear verification" xml:space="preserve"> <source>Clear verification</source> <target>Wyczyść weryfikację</target> @@ -1438,6 +1451,14 @@ To jest twój jednorazowy link!</target> <target>Utwórz swój profil</target> <note>No comment provided by engineer.</note> </trans-unit> + <trans-unit id="Created at" xml:space="preserve"> + <source>Created at</source> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="Created at: %@" xml:space="preserve"> + <source>Created at: %@</source> + <note>copied message info</note> + </trans-unit> <trans-unit id="Created on %@" xml:space="preserve"> <source>Created on %@</source> <target>Utworzony w dniu %@</target> @@ -2222,6 +2243,10 @@ To nie może być cofnięte!</target> <target>Błąd tworzenia kontaktu członka</target> <note>No comment provided by engineer.</note> </trans-unit> + <trans-unit id="Error creating message" xml:space="preserve"> + <source>Error creating message</source> + <note>No comment provided by engineer.</note> + </trans-unit> <trans-unit id="Error creating profile!" xml:space="preserve"> <source>Error creating profile!</source> <target>Błąd tworzenia profilu!</target> @@ -2891,6 +2916,10 @@ To nie może być cofnięte!</target> <target>Importuj bazę danych</target> <note>No comment provided by engineer.</note> </trans-unit> + <trans-unit id="Improved message delivery" xml:space="preserve"> + <source>Improved message delivery</source> + <note>No comment provided by engineer.</note> + </trans-unit> <trans-unit id="Improved privacy and security" xml:space="preserve"> <source>Improved privacy and security</source> <target>Zwiększona prywatność i bezpieczeństwo</target> @@ -3113,6 +3142,10 @@ To nie może być cofnięte!</target> <target>Dołącz do grupy</target> <note>No comment provided by engineer.</note> </trans-unit> + <trans-unit id="Join group conversations" xml:space="preserve"> + <source>Join group conversations</source> + <note>No comment provided by engineer.</note> + </trans-unit> <trans-unit id="Join group?" xml:space="preserve"> <source>Join group?</source> <target>Dołączyć do grupy?</target> @@ -3819,6 +3852,10 @@ To jest twój link do grupy %@!</target> <target>Hasło do wyświetlenia</target> <note>No comment provided by engineer.</note> </trans-unit> + <trans-unit id="Past member %@" xml:space="preserve"> + <source>Past member %@</source> + <note>past/unknown group member</note> + </trans-unit> <trans-unit id="Paste desktop address" xml:space="preserve"> <source>Paste desktop address</source> <target>Wklej adres komputera</target> @@ -3829,6 +3866,10 @@ To jest twój link do grupy %@!</target> <target>Wklej obraz</target> <note>No comment provided by engineer.</note> </trans-unit> + <trans-unit id="Paste link to connect!" xml:space="preserve"> + <source>Paste link to connect!</source> + <note>No comment provided by engineer.</note> + </trans-unit> <trans-unit id="Paste the link you received" xml:space="preserve"> <source>Paste the link you received</source> <target>Wklej link, który otrzymałeś</target> @@ -3961,6 +4002,10 @@ Błąd: %@</target> <target>Prywatne nazwy plików</target> <note>No comment provided by engineer.</note> </trans-unit> + <trans-unit id="Private notes" xml:space="preserve"> + <source>Private notes</source> + <note>name of notes to self</note> + </trans-unit> <trans-unit id="Profile and server connections" xml:space="preserve"> <source>Profile and server connections</source> <target>Profil i połączenia z serwerem</target> @@ -4141,6 +4186,10 @@ Błąd: %@</target> <target>Odbieranie przez</target> <note>No comment provided by engineer.</note> </trans-unit> + <trans-unit id="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)." xml:space="preserve"> + <source>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).</source> + <note>No comment provided by engineer.</note> + </trans-unit> <trans-unit id="Recipients see updates as you type them." xml:space="preserve"> <source>Recipients see updates as you type them.</source> <target>Odbiorcy widzą aktualizacje podczas ich wpisywania.</target> @@ -4341,6 +4390,10 @@ Błąd: %@</target> <target>Serwery SMP</target> <note>No comment provided by engineer.</note> </trans-unit> + <trans-unit id="Safer groups" xml:space="preserve"> + <source>Safer groups</source> + <note>No comment provided by engineer.</note> + </trans-unit> <trans-unit id="Save" xml:space="preserve"> <source>Save</source> <target>Zapisz</target> @@ -4426,6 +4479,10 @@ Błąd: %@</target> <target>Zapisane serwery WebRTC ICE zostaną usunięte</target> <note>No comment provided by engineer.</note> </trans-unit> + <trans-unit id="Saved message" xml:space="preserve"> + <source>Saved message</source> + <note>message info title</note> + </trans-unit> <trans-unit id="Scan QR code" xml:space="preserve"> <source>Scan QR code</source> <target>Zeskanuj kod QR</target> @@ -4456,6 +4513,10 @@ Błąd: %@</target> <target>Szukaj</target> <note>No comment provided by engineer.</note> </trans-unit> + <trans-unit id="Search bar accepts invitation links." xml:space="preserve"> + <source>Search bar accepts invitation links.</source> + <note>No comment provided by engineer.</note> + </trans-unit> <trans-unit id="Search or paste SimpleX link" xml:space="preserve"> <source>Search or paste SimpleX link</source> <target>Wyszukaj lub wklej link SimpleX</target> @@ -5298,6 +5359,10 @@ Przed włączeniem tej funkcji zostanie wyświetlony monit uwierzytelniania.</ta <target>Próbowanie połączenia z serwerem używanym do odbierania wiadomości od tego kontaktu.</target> <note>No comment provided by engineer.</note> </trans-unit> + <trans-unit id="Turkish interface" xml:space="preserve"> + <source>Turkish interface</source> + <note>No comment provided by engineer.</note> + </trans-unit> <trans-unit id="Turn off" xml:space="preserve"> <source>Turn off</source> <target>Wyłącz</target> @@ -5683,11 +5748,19 @@ Aby się połączyć, poproś Twój kontakt o utworzenie kolejnego linku połąc <target>Gdy udostępnisz komuś profil incognito, będzie on używany w grupach, do których Cię zaprosi.</target> <note>No comment provided by engineer.</note> </trans-unit> + <trans-unit id="With encrypted files and media." xml:space="preserve"> + <source>With encrypted files and media.</source> + <note>No comment provided by engineer.</note> + </trans-unit> <trans-unit id="With optional welcome message." xml:space="preserve"> <source>With optional welcome message.</source> <target>Z opcjonalną wiadomością powitalną.</target> <note>No comment provided by engineer.</note> </trans-unit> + <trans-unit id="With reduced battery usage." xml:space="preserve"> + <source>With reduced battery usage.</source> + <note>No comment provided by engineer.</note> + </trans-unit> <trans-unit id="Wrong database passphrase" xml:space="preserve"> <source>Wrong database passphrase</source> <target>Nieprawidłowe hasło bazy danych</target> @@ -6311,6 +6384,10 @@ Serwery SimpleX nie mogą zobaczyć Twojego profilu.</target> <target>połączenie: %@</target> <note>connection information</note> </trans-unit> + <trans-unit id="contact %@ changed to %@" xml:space="preserve"> + <source>contact %1$@ changed to %2$@</source> + <note>profile update event chat item</note> + </trans-unit> <trans-unit id="contact has e2e encryption" xml:space="preserve"> <source>contact has e2e encryption</source> <target>kontakt posiada szyfrowanie e2e</target> @@ -6581,6 +6658,10 @@ Serwery SimpleX nie mogą zobaczyć Twojego profilu.</target> <target>członek</target> <note>member role</note> </trans-unit> + <trans-unit id="member %@ changed to %@" xml:space="preserve"> + <source>member %1$@ changed to %2$@</source> + <note>profile update event chat item</note> + </trans-unit> <trans-unit id="member connected" xml:space="preserve"> <source>connected</source> <target>połączony</target> @@ -6703,6 +6784,14 @@ Serwery SimpleX nie mogą zobaczyć Twojego profilu.</target> <target>usunięto %@</target> <note>rcv group event chat item</note> </trans-unit> + <trans-unit id="removed contact address" xml:space="preserve"> + <source>removed contact address</source> + <note>profile update event chat item</note> + </trans-unit> + <trans-unit id="removed profile picture" xml:space="preserve"> + <source>removed profile picture</source> + <note>profile update event chat item</note> + </trans-unit> <trans-unit id="removed you" xml:space="preserve"> <source>removed you</source> <target>usunął cię</target> @@ -6733,6 +6822,14 @@ Serwery SimpleX nie mogą zobaczyć Twojego profilu.</target> <target>wyślij wiadomość bezpośrednią</target> <note>No comment provided by engineer.</note> </trans-unit> + <trans-unit id="set new contact address" xml:space="preserve"> + <source>set new contact address</source> + <note>profile update event chat item</note> + </trans-unit> + <trans-unit id="set new profile picture" xml:space="preserve"> + <source>set new profile picture</source> + <note>profile update event chat item</note> + </trans-unit> <trans-unit id="starting…" xml:space="preserve"> <source>starting…</source> <target>uruchamianie…</target> @@ -6753,11 +6850,19 @@ Serwery SimpleX nie mogą zobaczyć Twojego profilu.</target> <target>nieznany</target> <note>connection info</note> </trans-unit> + <trans-unit id="unknown status" xml:space="preserve"> + <source>unknown status</source> + <note>No comment provided by engineer.</note> + </trans-unit> <trans-unit id="updated group profile" xml:space="preserve"> <source>updated group profile</source> <target>zaktualizowano profil grupy</target> <note>rcv group event chat item</note> </trans-unit> + <trans-unit id="updated profile" xml:space="preserve"> + <source>updated profile</source> + <note>profile update event chat item</note> + </trans-unit> <trans-unit id="v%@" xml:space="preserve"> <source>v%@</source> <target>v%@</target> diff --git a/apps/ios/SimpleX Localizations/ru.xcloc/Localized Contents/ru.xliff b/apps/ios/SimpleX Localizations/ru.xcloc/Localized Contents/ru.xliff index b882a3657..6cc98cc3b 100644 --- a/apps/ios/SimpleX Localizations/ru.xcloc/Localized Contents/ru.xliff +++ b/apps/ios/SimpleX Localizations/ru.xcloc/Localized Contents/ru.xliff @@ -370,6 +370,11 @@ <target>, </target> <note>No comment provided by engineer.</note> </trans-unit> + <trans-unit id="- block a member to stop spam for all. - contact address is not shared." xml:space="preserve"> + <source>- block a member to stop spam for all. +- contact address is not shared.</source> + <note>No comment provided by engineer.</note> + </trans-unit> <trans-unit id="- connect to [directory service](simplex:/contact#/?v=1-4&smp=smp%3A%2F%2Fu2dS9sG8nMNURyZwqASV4yROM28Er0luVTx5X1CsMrU%3D%40smp4.simplex.im%2FeXSPwqTkKyDO3px4fLf1wx3MvPdjdLW3%23%2F%3Fv%3D1-2%26dh%3DMCowBQYDK2VuAyEAaiv6MkMH44L2TcYrt_CsX3ZvM11WgbMEUn0hkIKTOho%253D%26srv%3Do5vmywmrnaxalvz6wi3zicyftgio6psuvyniis6gco6bp6ekl4cqj4id.onion) (BETA)! - delivery receipts (up to 20 members). - faster and more stable." xml:space="preserve"> <source>- connect to [directory service](simplex:/contact#/?v=1-4&smp=smp%3A%2F%2Fu2dS9sG8nMNURyZwqASV4yROM28Er0luVTx5X1CsMrU%3D%40smp4.simplex.im%2FeXSPwqTkKyDO3px4fLf1wx3MvPdjdLW3%23%2F%3Fv%3D1-2%26dh%3DMCowBQYDK2VuAyEAaiv6MkMH44L2TcYrt_CsX3ZvM11WgbMEUn0hkIKTOho%253D%26srv%3Do5vmywmrnaxalvz6wi3zicyftgio6psuvyniis6gco6bp6ekl4cqj4id.onion) (BETA)! - delivery receipts (up to 20 members). @@ -635,6 +640,10 @@ <target>Все члены группы, которые соединились через эту ссылку, останутся в группе.</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"> + <source>All messages will be deleted - this cannot be undone!</source> + <note>No comment provided by engineer.</note> + </trans-unit> <trans-unit id="All messages will be deleted - this cannot be undone! The messages will be deleted ONLY for you." xml:space="preserve"> <source>All messages will be deleted - this cannot be undone! The messages will be deleted ONLY for you.</source> <target>Все сообщения будут удалены - это действие нельзя отменить! Сообщения будут удалены только для Вас.</target> @@ -1139,6 +1148,10 @@ <target>Очистить разговор?</target> <note>No comment provided by engineer.</note> </trans-unit> + <trans-unit id="Clear private notes?" xml:space="preserve"> + <source>Clear private notes?</source> + <note>No comment provided by engineer.</note> + </trans-unit> <trans-unit id="Clear verification" xml:space="preserve"> <source>Clear verification</source> <target>Сбросить подтверждение</target> @@ -1433,6 +1446,14 @@ This is your own one-time link!</source> <target>Создать профиль</target> <note>No comment provided by engineer.</note> </trans-unit> + <trans-unit id="Created at" xml:space="preserve"> + <source>Created at</source> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="Created at: %@" xml:space="preserve"> + <source>Created at: %@</source> + <note>copied message info</note> + </trans-unit> <trans-unit id="Created on %@" xml:space="preserve"> <source>Created on %@</source> <target>Дата создания %@</target> @@ -2214,6 +2235,10 @@ This cannot be undone!</source> <target>Ошибка создания контакта с членом группы</target> <note>No comment provided by engineer.</note> </trans-unit> + <trans-unit id="Error creating message" xml:space="preserve"> + <source>Error creating message</source> + <note>No comment provided by engineer.</note> + </trans-unit> <trans-unit id="Error creating profile!" xml:space="preserve"> <source>Error creating profile!</source> <target>Ошибка создания профиля!</target> @@ -2881,6 +2906,10 @@ This cannot be undone!</source> <target>Импорт архива чата</target> <note>No comment provided by engineer.</note> </trans-unit> + <trans-unit id="Improved message delivery" xml:space="preserve"> + <source>Improved message delivery</source> + <note>No comment provided by engineer.</note> + </trans-unit> <trans-unit id="Improved privacy and security" xml:space="preserve"> <source>Improved privacy and security</source> <target>Улучшенная безопасность</target> @@ -3100,6 +3129,10 @@ This cannot be undone!</source> <target>Вступить в группу</target> <note>No comment provided by engineer.</note> </trans-unit> + <trans-unit id="Join group conversations" xml:space="preserve"> + <source>Join group conversations</source> + <note>No comment provided by engineer.</note> + </trans-unit> <trans-unit id="Join group?" xml:space="preserve"> <source>Join group?</source> <target>Вступить в группу?</target> @@ -3799,6 +3832,10 @@ This is your link for group %@!</source> <target>Пароль чтобы раскрыть</target> <note>No comment provided by engineer.</note> </trans-unit> + <trans-unit id="Past member %@" xml:space="preserve"> + <source>Past member %@</source> + <note>past/unknown group member</note> + </trans-unit> <trans-unit id="Paste desktop address" xml:space="preserve"> <source>Paste desktop address</source> <target>Вставить адрес компьютера</target> @@ -3809,6 +3846,10 @@ This is your link for group %@!</source> <target>Вставить изображение</target> <note>No comment provided by engineer.</note> </trans-unit> + <trans-unit id="Paste link to connect!" xml:space="preserve"> + <source>Paste link to connect!</source> + <note>No comment provided by engineer.</note> + </trans-unit> <trans-unit id="Paste the link you received" xml:space="preserve"> <source>Paste the link you received</source> <note>No comment provided by engineer.</note> @@ -3938,6 +3979,10 @@ Error: %@</source> <target>Защищенные имена файлов</target> <note>No comment provided by engineer.</note> </trans-unit> + <trans-unit id="Private notes" xml:space="preserve"> + <source>Private notes</source> + <note>name of notes to self</note> + </trans-unit> <trans-unit id="Profile and server connections" xml:space="preserve"> <source>Profile and server connections</source> <target>Профиль и соединения на сервере</target> @@ -4117,6 +4162,10 @@ Error: %@</source> <target>Получение через</target> <note>No comment provided by engineer.</note> </trans-unit> + <trans-unit id="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)." xml:space="preserve"> + <source>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).</source> + <note>No comment provided by engineer.</note> + </trans-unit> <trans-unit id="Recipients see updates as you type them." xml:space="preserve"> <source>Recipients see updates as you type them.</source> <target>Получатели видят их в то время как Вы их набираете.</target> @@ -4316,6 +4365,10 @@ Error: %@</source> <target>SMP серверы</target> <note>No comment provided by engineer.</note> </trans-unit> + <trans-unit id="Safer groups" xml:space="preserve"> + <source>Safer groups</source> + <note>No comment provided by engineer.</note> + </trans-unit> <trans-unit id="Save" xml:space="preserve"> <source>Save</source> <target>Сохранить</target> @@ -4401,6 +4454,10 @@ Error: %@</source> <target>Сохраненные WebRTC ICE серверы будут удалены</target> <note>No comment provided by engineer.</note> </trans-unit> + <trans-unit id="Saved message" xml:space="preserve"> + <source>Saved message</source> + <note>message info title</note> + </trans-unit> <trans-unit id="Scan QR code" xml:space="preserve"> <source>Scan QR code</source> <target>Сканировать QR код</target> @@ -4431,6 +4488,10 @@ Error: %@</source> <target>Поиск</target> <note>No comment provided by engineer.</note> </trans-unit> + <trans-unit id="Search bar accepts invitation links." xml:space="preserve"> + <source>Search bar accepts invitation links.</source> + <note>No comment provided by engineer.</note> + </trans-unit> <trans-unit id="Search or paste SimpleX link" xml:space="preserve"> <source>Search or paste SimpleX link</source> <note>No comment provided by engineer.</note> @@ -5266,6 +5327,10 @@ You will be prompted to complete authentication before this feature is enabled.< <target>Устанавливается соединение с сервером, через который Вы получаете сообщения от этого контакта.</target> <note>No comment provided by engineer.</note> </trans-unit> + <trans-unit id="Turkish interface" xml:space="preserve"> + <source>Turkish interface</source> + <note>No comment provided by engineer.</note> + </trans-unit> <trans-unit id="Turn off" xml:space="preserve"> <source>Turn off</source> <target>Выключить</target> @@ -5650,11 +5715,19 @@ To connect, please ask your contact to create another connection link and check <target>Когда Вы соединены с контактом инкогнито, тот же самый инкогнито профиль будет использоваться для групп с этим контактом.</target> <note>No comment provided by engineer.</note> </trans-unit> + <trans-unit id="With encrypted files and media." xml:space="preserve"> + <source>With encrypted files and media.</source> + <note>No comment provided by engineer.</note> + </trans-unit> <trans-unit id="With optional welcome message." xml:space="preserve"> <source>With optional welcome message.</source> <target>С опциональным авто-ответом.</target> <note>No comment provided by engineer.</note> </trans-unit> + <trans-unit id="With reduced battery usage." xml:space="preserve"> + <source>With reduced battery usage.</source> + <note>No comment provided by engineer.</note> + </trans-unit> <trans-unit id="Wrong database passphrase" xml:space="preserve"> <source>Wrong database passphrase</source> <target>Неправильный пароль базы данных</target> @@ -6276,6 +6349,10 @@ SimpleX серверы не могут получить доступ к Ваше <target>connection:%@</target> <note>connection information</note> </trans-unit> + <trans-unit id="contact %@ changed to %@" xml:space="preserve"> + <source>contact %1$@ changed to %2$@</source> + <note>profile update event chat item</note> + </trans-unit> <trans-unit id="contact has e2e encryption" xml:space="preserve"> <source>contact has e2e encryption</source> <target>у контакта есть e2e шифрование</target> @@ -6546,6 +6623,10 @@ SimpleX серверы не могут получить доступ к Ваше <target>член группы</target> <note>member role</note> </trans-unit> + <trans-unit id="member %@ changed to %@" xml:space="preserve"> + <source>member %1$@ changed to %2$@</source> + <note>profile update event chat item</note> + </trans-unit> <trans-unit id="member connected" xml:space="preserve"> <source>connected</source> <target>соединен(а)</target> @@ -6668,6 +6749,14 @@ SimpleX серверы не могут получить доступ к Ваше <target>удалил(а) %@</target> <note>rcv group event chat item</note> </trans-unit> + <trans-unit id="removed contact address" xml:space="preserve"> + <source>removed contact address</source> + <note>profile update event chat item</note> + </trans-unit> + <trans-unit id="removed profile picture" xml:space="preserve"> + <source>removed profile picture</source> + <note>profile update event chat item</note> + </trans-unit> <trans-unit id="removed you" xml:space="preserve"> <source>removed you</source> <target>удалил(а) Вас из группы</target> @@ -6698,6 +6787,14 @@ SimpleX серверы не могут получить доступ к Ваше <target>отправьте сообщение</target> <note>No comment provided by engineer.</note> </trans-unit> + <trans-unit id="set new contact address" xml:space="preserve"> + <source>set new contact address</source> + <note>profile update event chat item</note> + </trans-unit> + <trans-unit id="set new profile picture" xml:space="preserve"> + <source>set new profile picture</source> + <note>profile update event chat item</note> + </trans-unit> <trans-unit id="starting…" xml:space="preserve"> <source>starting…</source> <target>инициализация…</target> @@ -6718,11 +6815,19 @@ SimpleX серверы не могут получить доступ к Ваше <target>неизвестно</target> <note>connection info</note> </trans-unit> + <trans-unit id="unknown status" xml:space="preserve"> + <source>unknown status</source> + <note>No comment provided by engineer.</note> + </trans-unit> <trans-unit id="updated group profile" xml:space="preserve"> <source>updated group profile</source> <target>обновил(а) профиль группы</target> <note>rcv group event chat item</note> </trans-unit> + <trans-unit id="updated profile" xml:space="preserve"> + <source>updated profile</source> + <note>profile update event chat item</note> + </trans-unit> <trans-unit id="v%@" xml:space="preserve"> <source>v%@</source> <target>v%@</target> diff --git a/apps/ios/SimpleX Localizations/th.xcloc/Localized Contents/th.xliff b/apps/ios/SimpleX Localizations/th.xcloc/Localized Contents/th.xliff index 1ca44c5be..c40de4ec1 100644 --- a/apps/ios/SimpleX Localizations/th.xcloc/Localized Contents/th.xliff +++ b/apps/ios/SimpleX Localizations/th.xcloc/Localized Contents/th.xliff @@ -355,6 +355,11 @@ <target>, </target> <note>No comment provided by engineer.</note> </trans-unit> + <trans-unit id="- block a member to stop spam for all. - contact address is not shared." xml:space="preserve"> + <source>- block a member to stop spam for all. +- contact address is not shared.</source> + <note>No comment provided by engineer.</note> + </trans-unit> <trans-unit id="- connect to [directory service](simplex:/contact#/?v=1-4&smp=smp%3A%2F%2Fu2dS9sG8nMNURyZwqASV4yROM28Er0luVTx5X1CsMrU%3D%40smp4.simplex.im%2FeXSPwqTkKyDO3px4fLf1wx3MvPdjdLW3%23%2F%3Fv%3D1-2%26dh%3DMCowBQYDK2VuAyEAaiv6MkMH44L2TcYrt_CsX3ZvM11WgbMEUn0hkIKTOho%253D%26srv%3Do5vmywmrnaxalvz6wi3zicyftgio6psuvyniis6gco6bp6ekl4cqj4id.onion) (BETA)! - delivery receipts (up to 20 members). - faster and more stable." xml:space="preserve"> <source>- connect to [directory service](simplex:/contact#/?v=1-4&smp=smp%3A%2F%2Fu2dS9sG8nMNURyZwqASV4yROM28Er0luVTx5X1CsMrU%3D%40smp4.simplex.im%2FeXSPwqTkKyDO3px4fLf1wx3MvPdjdLW3%23%2F%3Fv%3D1-2%26dh%3DMCowBQYDK2VuAyEAaiv6MkMH44L2TcYrt_CsX3ZvM11WgbMEUn0hkIKTOho%253D%26srv%3Do5vmywmrnaxalvz6wi3zicyftgio6psuvyniis6gco6bp6ekl4cqj4id.onion) (BETA)! - delivery receipts (up to 20 members). @@ -611,6 +616,10 @@ <target>สมาชิกในกลุ่มทุกคนจะยังคงเชื่อมต่ออยู่.</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"> + <source>All messages will be deleted - this cannot be undone!</source> + <note>No comment provided by engineer.</note> + </trans-unit> <trans-unit id="All messages will be deleted - this cannot be undone! The messages will be deleted ONLY for you." xml:space="preserve"> <source>All messages will be deleted - this cannot be undone! The messages will be deleted ONLY for you.</source> <target>ข้อความทั้งหมดจะถูกลบ - ไม่สามารถยกเลิกได้! ข้อความจะถูกลบสำหรับคุณเท่านั้น.</target> @@ -1104,6 +1113,10 @@ <target>ลบการสนทนา?</target> <note>No comment provided by engineer.</note> </trans-unit> + <trans-unit id="Clear private notes?" xml:space="preserve"> + <source>Clear private notes?</source> + <note>No comment provided by engineer.</note> + </trans-unit> <trans-unit id="Clear verification" xml:space="preserve"> <source>Clear verification</source> <target>ล้างการยืนยัน</target> @@ -1378,6 +1391,14 @@ This is your own one-time link!</source> <target>สร้างโปรไฟล์ของคุณ</target> <note>No comment provided by engineer.</note> </trans-unit> + <trans-unit id="Created at" xml:space="preserve"> + <source>Created at</source> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="Created at: %@" xml:space="preserve"> + <source>Created at: %@</source> + <note>copied message info</note> + </trans-unit> <trans-unit id="Created on %@" xml:space="preserve"> <source>Created on %@</source> <target>สร้างเมื่อ %@</target> @@ -2140,6 +2161,10 @@ This cannot be undone!</source> <source>Error creating member contact</source> <note>No comment provided by engineer.</note> </trans-unit> + <trans-unit id="Error creating message" xml:space="preserve"> + <source>Error creating message</source> + <note>No comment provided by engineer.</note> + </trans-unit> <trans-unit id="Error creating profile!" xml:space="preserve"> <source>Error creating profile!</source> <target>เกิดข้อผิดพลาดในการสร้างโปรไฟล์!</target> @@ -2799,6 +2824,10 @@ This cannot be undone!</source> <target>นำเข้าฐานข้อมูล</target> <note>No comment provided by engineer.</note> </trans-unit> + <trans-unit id="Improved message delivery" xml:space="preserve"> + <source>Improved message delivery</source> + <note>No comment provided by engineer.</note> + </trans-unit> <trans-unit id="Improved privacy and security" xml:space="preserve"> <source>Improved privacy and security</source> <target>ปรับปรุงความเป็นส่วนตัวและความปลอดภัยแล้ว</target> @@ -3013,6 +3042,10 @@ This cannot be undone!</source> <target>เข้าร่วมกลุ่ม</target> <note>No comment provided by engineer.</note> </trans-unit> + <trans-unit id="Join group conversations" xml:space="preserve"> + <source>Join group conversations</source> + <note>No comment provided by engineer.</note> + </trans-unit> <trans-unit id="Join group?" xml:space="preserve"> <source>Join group?</source> <note>No comment provided by engineer.</note> @@ -3697,6 +3730,10 @@ This is your link for group %@!</source> <target>รหัสผ่านที่จะแสดง</target> <note>No comment provided by engineer.</note> </trans-unit> + <trans-unit id="Past member %@" xml:space="preserve"> + <source>Past member %@</source> + <note>past/unknown group member</note> + </trans-unit> <trans-unit id="Paste desktop address" xml:space="preserve"> <source>Paste desktop address</source> <note>No comment provided by engineer.</note> @@ -3706,6 +3743,10 @@ This is your link for group %@!</source> <target>แปะภาพ</target> <note>No comment provided by engineer.</note> </trans-unit> + <trans-unit id="Paste link to connect!" xml:space="preserve"> + <source>Paste link to connect!</source> + <note>No comment provided by engineer.</note> + </trans-unit> <trans-unit id="Paste the link you received" xml:space="preserve"> <source>Paste the link you received</source> <note>No comment provided by engineer.</note> @@ -3835,6 +3876,10 @@ Error: %@</source> <target>ชื่อไฟล์ส่วนตัว</target> <note>No comment provided by engineer.</note> </trans-unit> + <trans-unit id="Private notes" xml:space="preserve"> + <source>Private notes</source> + <note>name of notes to self</note> + </trans-unit> <trans-unit id="Profile and server connections" xml:space="preserve"> <source>Profile and server connections</source> <target>การเชื่อมต่อโปรไฟล์และเซิร์ฟเวอร์</target> @@ -4011,6 +4056,10 @@ Error: %@</source> <target>กำลังรับผ่าน</target> <note>No comment provided by engineer.</note> </trans-unit> + <trans-unit id="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)." xml:space="preserve"> + <source>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).</source> + <note>No comment provided by engineer.</note> + </trans-unit> <trans-unit id="Recipients see updates as you type them." xml:space="preserve"> <source>Recipients see updates as you type them.</source> <target>ผู้รับจะเห็นการอัปเดตเมื่อคุณพิมพ์</target> @@ -4207,6 +4256,10 @@ Error: %@</source> <target>เซิร์ฟเวอร์ SMP</target> <note>No comment provided by engineer.</note> </trans-unit> + <trans-unit id="Safer groups" xml:space="preserve"> + <source>Safer groups</source> + <note>No comment provided by engineer.</note> + </trans-unit> <trans-unit id="Save" xml:space="preserve"> <source>Save</source> <target>บันทึก</target> @@ -4292,6 +4345,10 @@ Error: %@</source> <target>เซิร์ฟเวอร์ WebRTC ICE ที่บันทึกไว้จะถูกลบออก</target> <note>No comment provided by engineer.</note> </trans-unit> + <trans-unit id="Saved message" xml:space="preserve"> + <source>Saved message</source> + <note>message info title</note> + </trans-unit> <trans-unit id="Scan QR code" xml:space="preserve"> <source>Scan QR code</source> <target>สแกนคิวอาร์โค้ด</target> @@ -4321,6 +4378,10 @@ Error: %@</source> <target>ค้นหา</target> <note>No comment provided by engineer.</note> </trans-unit> + <trans-unit id="Search bar accepts invitation links." xml:space="preserve"> + <source>Search bar accepts invitation links.</source> + <note>No comment provided by engineer.</note> + </trans-unit> <trans-unit id="Search or paste SimpleX link" xml:space="preserve"> <source>Search or paste SimpleX link</source> <note>No comment provided by engineer.</note> @@ -5142,6 +5203,10 @@ You will be prompted to complete authentication before this feature is enabled.< <target>พยายามเชื่อมต่อกับเซิร์ฟเวอร์ที่ใช้รับข้อความจากผู้ติดต่อนี้</target> <note>No comment provided by engineer.</note> </trans-unit> + <trans-unit id="Turkish interface" xml:space="preserve"> + <source>Turkish interface</source> + <note>No comment provided by engineer.</note> + </trans-unit> <trans-unit id="Turn off" xml:space="preserve"> <source>Turn off</source> <target>ปิด</target> @@ -5513,11 +5578,19 @@ To connect, please ask your contact to create another connection link and check <target>เมื่อคุณแชร์โปรไฟล์ที่ไม่ระบุตัวตนกับใครสักคน โปรไฟล์นี้จะใช้สำหรับกลุ่มที่พวกเขาเชิญคุณ</target> <note>No comment provided by engineer.</note> </trans-unit> + <trans-unit id="With encrypted files and media." xml:space="preserve"> + <source>With encrypted files and media.</source> + <note>No comment provided by engineer.</note> + </trans-unit> <trans-unit id="With optional welcome message." xml:space="preserve"> <source>With optional welcome message.</source> <target>พร้อมข้อความต้อนรับที่ไม่บังคับ</target> <note>No comment provided by engineer.</note> </trans-unit> + <trans-unit id="With reduced battery usage." xml:space="preserve"> + <source>With reduced battery usage.</source> + <note>No comment provided by engineer.</note> + </trans-unit> <trans-unit id="Wrong database passphrase" xml:space="preserve"> <source>Wrong database passphrase</source> <target>รหัสผ่านฐานข้อมูลไม่ถูกต้อง</target> @@ -6119,6 +6192,10 @@ SimpleX servers cannot see your profile.</source> <target>การเชื่อมต่อ:%@</target> <note>connection information</note> </trans-unit> + <trans-unit id="contact %@ changed to %@" xml:space="preserve"> + <source>contact %1$@ changed to %2$@</source> + <note>profile update event chat item</note> + </trans-unit> <trans-unit id="contact has e2e encryption" xml:space="preserve"> <source>contact has e2e encryption</source> <target>ผู้ติดต่อมีการ encrypt จากต้นจนจบ</target> @@ -6386,6 +6463,10 @@ SimpleX servers cannot see your profile.</source> <target>สมาชิก</target> <note>member role</note> </trans-unit> + <trans-unit id="member %@ changed to %@" xml:space="preserve"> + <source>member %1$@ changed to %2$@</source> + <note>profile update event chat item</note> + </trans-unit> <trans-unit id="member connected" xml:space="preserve"> <source>connected</source> <target>เชื่อมต่อสำเร็จ</target> @@ -6508,6 +6589,14 @@ SimpleX servers cannot see your profile.</source> <target>ถูกลบแล้ว %@</target> <note>rcv group event chat item</note> </trans-unit> + <trans-unit id="removed contact address" xml:space="preserve"> + <source>removed contact address</source> + <note>profile update event chat item</note> + </trans-unit> + <trans-unit id="removed profile picture" xml:space="preserve"> + <source>removed profile picture</source> + <note>profile update event chat item</note> + </trans-unit> <trans-unit id="removed you" xml:space="preserve"> <source>removed you</source> <target>ลบคุณออกแล้ว</target> @@ -6537,6 +6626,14 @@ SimpleX servers cannot see your profile.</source> <source>send direct message</source> <note>No comment provided by engineer.</note> </trans-unit> + <trans-unit id="set new contact address" xml:space="preserve"> + <source>set new contact address</source> + <note>profile update event chat item</note> + </trans-unit> + <trans-unit id="set new profile picture" xml:space="preserve"> + <source>set new profile picture</source> + <note>profile update event chat item</note> + </trans-unit> <trans-unit id="starting…" xml:space="preserve"> <source>starting…</source> <target>กำลังเริ่มต้น…</target> @@ -6557,11 +6654,19 @@ SimpleX servers cannot see your profile.</source> <target>ไม่ทราบ</target> <note>connection info</note> </trans-unit> + <trans-unit id="unknown status" xml:space="preserve"> + <source>unknown status</source> + <note>No comment provided by engineer.</note> + </trans-unit> <trans-unit id="updated group profile" xml:space="preserve"> <source>updated group profile</source> <target>อัปเดตโปรไฟล์กลุ่มแล้ว</target> <note>rcv group event chat item</note> </trans-unit> + <trans-unit id="updated profile" xml:space="preserve"> + <source>updated profile</source> + <note>profile update event chat item</note> + </trans-unit> <trans-unit id="v%@" xml:space="preserve"> <source>v%@</source> <note>No comment provided by engineer.</note> diff --git a/apps/ios/SimpleX Localizations/tr.xcloc/Localized Contents/tr.xliff b/apps/ios/SimpleX Localizations/tr.xcloc/Localized Contents/tr.xliff index 6563a0ada..7613e8cae 100644 --- a/apps/ios/SimpleX Localizations/tr.xcloc/Localized Contents/tr.xliff +++ b/apps/ios/SimpleX Localizations/tr.xcloc/Localized Contents/tr.xliff @@ -2,7103 +2,7037 @@ <xliff xmlns="urn:oasis:names:tc:xliff:document:1.2" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="1.2" xsi:schemaLocation="urn:oasis:names:tc:xliff:document:1.2 http://docs.oasis-open.org/xliff/v1.2/os/xliff-core-1.2-strict.xsd"> <file original="en.lproj/Localizable.strings" source-language="en" target-language="tr" datatype="plaintext"> <header> - <tool tool-id="com.apple.dt.xcode" tool-name="Xcode" tool-version="14.3.1" build-num="14E300c"/> + <tool tool-id="com.apple.dt.xcode" tool-name="Xcode" tool-version="15.0" build-num="15A240d"/> </header> <body> - <trans-unit id=" " xml:space="preserve" approved="no"> + <trans-unit id=" " xml:space="preserve"> <source> </source> - <target state="translated"> + <target> </target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id=" " xml:space="preserve" approved="no"> + <trans-unit id=" " xml:space="preserve"> <source> </source> - <target state="translated"> . </target> + <target> . </target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id=" " xml:space="preserve" approved="no"> + <trans-unit id=" " xml:space="preserve"> <source> </source> - <target state="translated"> </target> + <target> </target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id=" " xml:space="preserve" approved="no"> + <trans-unit id=" " xml:space="preserve"> <source> </source> - <target state="translated"> . </target> + <target> . </target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id=" (" xml:space="preserve" approved="no"> + <trans-unit id=" (" xml:space="preserve"> <source> (</source> - <target state="translated"> (</target> + <target> (</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id=" (can be copied)" xml:space="preserve" approved="no"> + <trans-unit id=" (can be copied)" xml:space="preserve"> <source> (can be copied)</source> - <target state="translated"> (kopyalanabilir)</target> + <target> (kopyalanabilir)</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="!1 colored!" xml:space="preserve" approved="no"> + <trans-unit id="!1 colored!" xml:space="preserve"> <source>!1 colored!</source> - <target state="translated">!1 renklendirilmiş!</target> + <target>!1 renklendirilmiş!</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="#secret#" xml:space="preserve" approved="no"> - <source>#secret#</source> - <target state="translated">#gizli#</target> - <note>No comment provided by engineer.</note> + <trans-unit id="# %@" xml:space="preserve"> + <source># %@</source> + <target># %@</target> + <note>copied message info title, # <title></note> </trans-unit> - <trans-unit id="%@" xml:space="preserve" approved="no"> - <source>%@</source> - <target state="translated">%@</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="%@ %@" xml:space="preserve" approved="no"> - <source>%@ %@</source> - <target state="translated">%@ %@</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="%@ (current)" xml:space="preserve" approved="no"> - <source>%@ (current)</source> - <target state="translated">%@ (güncel)</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="%@ (current):" xml:space="preserve" approved="no"> - <source>%@ (current):</source> - <target state="translated">%@ (güncel):</target> + <trans-unit id="## History" xml:space="preserve"> + <source>## History</source> + <target>## Geçmiş</target> <note>copied message info</note> </trans-unit> - <trans-unit id="%@ / %@" xml:space="preserve" approved="no"> - <source>%@ / %@</source> - <target state="translated">%@ / %@</target> + <trans-unit id="## In reply to" xml:space="preserve"> + <source>## In reply to</source> + <target>## cevap olarak</target> + <note>copied message info</note> + </trans-unit> + <trans-unit id="#secret#" xml:space="preserve"> + <source>#secret#</source> + <target>#gizli#</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="%@ at %@:" xml:space="preserve" approved="no"> + <trans-unit id="%@" xml:space="preserve"> + <source>%@</source> + <target>%@</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="%@ %@" xml:space="preserve"> + <source>%@ %@</source> + <target>%@ %@</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="%@ (current)" xml:space="preserve"> + <source>%@ (current)</source> + <target>%@ (güncel)</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="%@ (current):" xml:space="preserve"> + <source>%@ (current):</source> + <target>%@ (güncel):</target> + <note>copied message info</note> + </trans-unit> + <trans-unit id="%@ / %@" xml:space="preserve"> + <source>%@ / %@</source> + <target>%@ / %@</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="%@ and %@" xml:space="preserve"> + <source>%@ and %@</source> + <target>%@ ve %@</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="%@ and %@ connected" xml:space="preserve"> + <source>%@ and %@ connected</source> + <target>%@ ve %@ bağlandı</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="%@ at %@:" xml:space="preserve"> <source>%1$@ at %2$@:</source> - <target state="translated">%1$@, %2$@ de</target> + <target>%1$@, %2$@ de</target> <note>copied message info, <sender> at <time></note> </trans-unit> - <trans-unit id="%@ is connected!" xml:space="preserve" approved="no"> + <trans-unit id="%@ connected" xml:space="preserve"> + <source>%@ connected</source> + <target>%@ bağlandı</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="%@ is connected!" xml:space="preserve"> <source>%@ is connected!</source> - <target state="translated">%@ bağlandı!</target> + <target>%@ bağlandı!</target> <note>notification title</note> </trans-unit> - <trans-unit id="%@ is not verified" xml:space="preserve" approved="no"> + <trans-unit id="%@ is not verified" xml:space="preserve"> <source>%@ is not verified</source> - <target state="translated">%@ onaylanmadı</target> + <target>%@ onaylanmadı</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="%@ is verified" xml:space="preserve" approved="no"> + <trans-unit id="%@ is verified" xml:space="preserve"> <source>%@ is verified</source> - <target state="translated">%@ onaylandı</target> + <target>%@ onaylandı</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="%@ servers" xml:space="preserve" approved="no"> + <trans-unit id="%@ servers" xml:space="preserve"> <source>%@ servers</source> - <target state="translated">%@ sunucuları</target> + <target>%@ sunucuları</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="%@ wants to connect!" xml:space="preserve" approved="no"> + <trans-unit id="%@ wants to connect!" xml:space="preserve"> <source>%@ wants to connect!</source> - <target state="translated">%@ bağlanmak istiyor!</target> + <target>%@ bağlanmak istiyor!</target> <note>notification title</note> </trans-unit> - <trans-unit id="%@:" xml:space="preserve" approved="no"> + <trans-unit id="%@, %@ and %lld members" xml:space="preserve"> + <source>%@, %@ and %lld members</source> + <target>%@, %@ ve %lld üyeleri</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="%@, %@ and %lld other members connected" xml:space="preserve"> + <source>%@, %@ and %lld other members connected</source> + <target>%@, %@ ve %lld diğer üyeler bağlandı</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="%@:" xml:space="preserve"> <source>%@:</source> - <target state="translated">%@:</target> + <target>%@:</target> <note>copied message info</note> </trans-unit> - <trans-unit id="%d days" xml:space="preserve" approved="no"> + <trans-unit id="%d days" xml:space="preserve"> <source>%d days</source> - <target state="translated">%d gün</target> + <target>%d gün</target> <note>time interval</note> </trans-unit> - <trans-unit id="%d hours" xml:space="preserve" approved="no"> + <trans-unit id="%d hours" xml:space="preserve"> <source>%d hours</source> - <target state="translated">%d saat</target> + <target>%d saat</target> <note>time interval</note> </trans-unit> - <trans-unit id="%d min" xml:space="preserve" approved="no"> + <trans-unit id="%d min" xml:space="preserve"> <source>%d min</source> - <target state="translated">%d dakika</target> + <target>%d dakika</target> <note>time interval</note> </trans-unit> - <trans-unit id="%d months" xml:space="preserve" approved="no"> + <trans-unit id="%d months" xml:space="preserve"> <source>%d months</source> - <target state="translated">%d ay</target> + <target>%d ay</target> <note>time interval</note> </trans-unit> - <trans-unit id="%d sec" xml:space="preserve" approved="no"> + <trans-unit id="%d sec" xml:space="preserve"> <source>%d sec</source> - <target state="translated">%d saniye</target> + <target>%d saniye</target> <note>time interval</note> </trans-unit> - <trans-unit id="%d skipped message(s)" xml:space="preserve" approved="no"> + <trans-unit id="%d skipped message(s)" xml:space="preserve"> <source>%d skipped message(s)</source> - <target state="translated">%d okunmamış mesaj(lar)</target> + <target>%d okunmamış mesaj(lar)</target> <note>integrity error chat item</note> </trans-unit> - <trans-unit id="%d weeks" xml:space="preserve" approved="no"> + <trans-unit id="%d weeks" xml:space="preserve"> <source>%d weeks</source> - <target state="translated">%d hafta</target> + <target>%d hafta</target> <note>time interval</note> </trans-unit> - <trans-unit id="%lld" xml:space="preserve" approved="no"> + <trans-unit id="%lld" xml:space="preserve"> <source>%lld</source> - <target state="translated">%lld</target> + <target>%lld</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="%lld %@" xml:space="preserve" approved="no"> + <trans-unit id="%lld %@" xml:space="preserve"> <source>%lld %@</source> - <target state="translated">%lld %@</target> + <target>%lld %@</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="%lld contact(s) selected" xml:space="preserve" approved="no"> + <trans-unit id="%lld contact(s) selected" xml:space="preserve"> <source>%lld contact(s) selected</source> - <target state="translated">%lld kişi seçildi</target> + <target>%lld kişi seçildi</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="%lld file(s) with total size of %@" xml:space="preserve" approved="no"> + <trans-unit id="%lld file(s) with total size of %@" xml:space="preserve"> <source>%lld file(s) with total size of %@</source> - <target state="translated">%lld dosya , toplam büyüklüğü %@</target> + <target>%lld dosya , toplam büyüklüğü %@</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="%lld members" xml:space="preserve" approved="no"> + <trans-unit id="%lld group events" xml:space="preserve"> + <source>%lld group events</source> + <target>%lld grup etkinlikleri</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="%lld members" xml:space="preserve"> <source>%lld members</source> - <target state="translated">%lld üyeler</target> + <target>%lld üyeler</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="%lld minutes" xml:space="preserve" approved="no"> + <trans-unit id="%lld messages blocked" xml:space="preserve"> + <source>%lld messages blocked</source> + <target>%lld mesajlar engellendi</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="%lld messages marked deleted" xml:space="preserve"> + <source>%lld messages marked deleted</source> + <target>%lld mesajlar silinmiş olarak işaretlendi</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="%lld messages moderated by %@" xml:space="preserve"> + <source>%lld messages moderated by %@</source> + <target>%lld mesajları %@ tarafından yönetildi</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="%lld minutes" xml:space="preserve"> <source>%lld minutes</source> - <target state="translated">%lld dakika</target> + <target>%lld dakika</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="%lld second(s)" xml:space="preserve" approved="no"> + <trans-unit id="%lld new interface languages" xml:space="preserve"> + <source>%lld new interface languages</source> + <target>%lld yeni arayüz dilleri</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="%lld second(s)" xml:space="preserve"> <source>%lld second(s)</source> - <target state="translated">%lld saniye</target> + <target>%lld saniye</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="%lld seconds" xml:space="preserve" approved="no"> + <trans-unit id="%lld seconds" xml:space="preserve"> <source>%lld seconds</source> - <target state="translated">%lld saniye</target> + <target>%lld saniye</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="%lldd" xml:space="preserve" approved="no"> + <trans-unit id="%lldd" xml:space="preserve"> <source>%lldd</source> - <target state="translated">%lldd</target> + <target>%lldd</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="%lldh" xml:space="preserve" approved="no"> + <trans-unit id="%lldh" xml:space="preserve"> <source>%lldh</source> - <target state="translated">%lldh</target> + <target>%lldh</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="%lldk" xml:space="preserve" approved="no"> + <trans-unit id="%lldk" xml:space="preserve"> <source>%lldk</source> - <target state="translated">%lldk</target> + <target>%lldk</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="%lldm" xml:space="preserve" approved="no"> + <trans-unit id="%lldm" xml:space="preserve"> <source>%lldm</source> - <target state="translated">%lldm</target> + <target>%lldm</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="%lldmth" xml:space="preserve" approved="no"> + <trans-unit id="%lldmth" xml:space="preserve"> <source>%lldmth</source> - <target state="translated">%lldmth</target> + <target>%lldmth</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="%llds" xml:space="preserve" approved="no"> + <trans-unit id="%llds" xml:space="preserve"> <source>%llds</source> - <target state="translated">%llds</target> + <target>%llds</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="%lldw" xml:space="preserve" approved="no"> + <trans-unit id="%lldw" xml:space="preserve"> <source>%lldw</source> - <target state="translated">%lldw</target> + <target>%lldw</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="%u messages failed to decrypt." xml:space="preserve" approved="no"> + <trans-unit id="%u messages failed to decrypt." xml:space="preserve"> <source>%u messages failed to decrypt.</source> - <target state="translated">%u mesajın şifreleme çözümü başarısız oldu.</target> + <target>%u mesajın şifreleme çözümü başarısız oldu.</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="%u messages skipped." xml:space="preserve" approved="no"> + <trans-unit id="%u messages skipped." xml:space="preserve"> <source>%u messages skipped.</source> - <target state="translated">%u mesaj atlandı</target> + <target>%u mesaj atlandı</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="(" xml:space="preserve" approved="no"> + <trans-unit id="(" xml:space="preserve"> <source>(</source> - <target state="translated">(</target> + <target>(</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id=")" xml:space="preserve" approved="no"> + <trans-unit id="(new)" xml:space="preserve"> + <source>(new)</source> + <target>(yeni)</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="(this device v%@)" xml:space="preserve"> + <source>(this device v%@)</source> + <target>(bu cihaz v%@)</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id=")" xml:space="preserve"> <source>)</source> - <target state="translated">)</target> + <target>)</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="**Add new contact**: to create your one-time QR Code for your contact." xml:space="preserve" approved="no"> + <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>**Kişi ekle**: yeni bir davet bağlantısı oluşturmak için, ya da aldığın bağlantıyla bağlan.</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"> <source>**Add new contact**: to create your one-time QR Code or link for your contact.</source> - <target state="translated">**Yeni kişi ekleyin**: tek seferlik QR Kodunuzu oluşturmak veya kişisel ulaşım bilgileri bağlantısı için.</target> + <target>**Yeni kişi ekleyin**: tek seferlik QR Kodunuzu oluşturmak veya kişisel ulaşım bilgileri bağlantısı için.</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="**Create link / QR code** for your contact to use." xml:space="preserve" approved="no"> - <source>**Create link / QR code** for your contact to use.</source> - <target state="translated">Kişisel kullanım için **Bağlantı / QR Kodu**.</target> + <trans-unit id="**Create group**: to create a new group." xml:space="preserve"> + <source>**Create group**: to create a new group.</source> + <target>**Grup oluştur**: yeni bir grup oluşturmak için.</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="**More private**: check new messages every 20 minutes. Device token is shared with SimpleX Chat server, but not how many contacts or messages you have." xml:space="preserve" approved="no"> + <trans-unit id="**More private**: check new messages every 20 minutes. Device token is shared with SimpleX Chat server, but not how many contacts or messages you have." xml:space="preserve"> <source>**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.</source> - <target state="translated">**Daha gizli**: her 20 dakikada yeni mesajlar için kontrol et. Cihaz jetonu SimpleX Chat sunucusuyla paylaşılacak, ama ne kadar kişi veya mesaja sahip olduğun paylaşılmayacak.</target> + <target>**Daha gizli**: her 20 dakikada yeni mesajlar için kontrol et. Cihaz jetonu SimpleX Chat sunucusuyla paylaşılacak, ama ne kadar kişi veya mesaja sahip olduğun paylaşılmayacak.</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="**Most private**: do not use SimpleX Chat notifications server, check messages periodically in the background (depends on how often you use the app)." xml:space="preserve" approved="no"> + <trans-unit id="**Most private**: do not use SimpleX Chat notifications server, check messages periodically in the background (depends on how often you use the app)." xml:space="preserve"> <source>**Most private**: do not use SimpleX Chat notifications server, check messages periodically in the background (depends on how often you use the app).</source> - <target state="translated">**En gizli**: SimpleX Chat bildirim sunucusunu kullanma, arkaplanda mesajları periyodik olarak kontrol edin (uygulamayı ne sıklıkta kullandığınıza bağlıdır).</target> + <target>**En gizli**: SimpleX Chat bildirim sunucusunu kullanma, arkaplanda mesajları periyodik olarak kontrol edin (uygulamayı ne sıklıkta kullandığınıza bağlıdır).</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="**Paste received link** or open it in the browser and tap **Open in mobile app**." xml:space="preserve"> - <source>**Paste received link** or open it in the browser and tap **Open in mobile app**.</source> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="**Please note**: you will NOT be able to recover or change passphrase if you lose it." xml:space="preserve" approved="no"> + <trans-unit id="**Please note**: you will NOT be able to recover or change passphrase if you lose it." xml:space="preserve"> <source>**Please note**: you will NOT be able to recover or change passphrase if you lose it.</source> - <target state="translated">**Lütfen aklınızda bulunsun**: eğer parolanızı kaybederseniz parolanızı değiştirme veya geri kurtarma ihtimaliniz YOKTUR.</target> + <target>**Lütfen aklınızda bulunsun**: eğer parolanızı kaybederseniz parolanızı değiştirme veya geri kurtarma ihtimaliniz YOKTUR.</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="**Recommended**: device token and notifications are sent to SimpleX Chat notification server, but not the message content, size or who it is from." xml:space="preserve" approved="no"> + <trans-unit id="**Recommended**: device token and notifications are sent to SimpleX Chat notification server, but not the message content, size or who it is from." xml:space="preserve"> <source>**Recommended**: device token and notifications are sent to SimpleX Chat notification server, but not the message content, size or who it is from.</source> - <target state="translated">**Önerilen**: cihaz tokeni ve bildirimler SimpleX Chat bildirim sunucularına gönderilir, ama mesajın içeriği, boyutu veya kimden geldiği gönderilmez.</target> + <target>**Önerilen**: cihaz tokeni ve bildirimler SimpleX Chat bildirim sunucularına gönderilir, ama mesajın içeriği, boyutu veya kimden geldiği gönderilmez.</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="**Scan QR code**: to connect to your contact in person or via video call." xml:space="preserve"> - <source>**Scan QR code**: to connect to your contact in person or via video call.</source> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="**Warning**: Instant push notifications require passphrase saved in Keychain." xml:space="preserve" approved="no"> + <trans-unit id="**Warning**: Instant push notifications require passphrase saved in Keychain." xml:space="preserve"> <source>**Warning**: Instant push notifications require passphrase saved in Keychain.</source> - <target state="translated">**Dikkat**: Anında iletilen bildirimlere Anahtar Zinciri'nde kaydedilmiş parola gereklidir.</target> + <target>**Dikkat**: Anında iletilen bildirimlere Anahtar Zinciri'nde kaydedilmiş parola gereklidir.</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="**e2e encrypted** audio call" xml:space="preserve" approved="no"> + <trans-unit id="**e2e encrypted** audio call" xml:space="preserve"> <source>**e2e encrypted** audio call</source> - <target state="translated">**uçtan uca şifrelenmiş** sesli arama</target> + <target>**uçtan uca şifrelenmiş** sesli arama</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="**e2e encrypted** video call" xml:space="preserve" approved="no"> + <trans-unit id="**e2e encrypted** video call" xml:space="preserve"> <source>**e2e encrypted** video call</source> - <target state="translated">**uçtan uca şifrelenmiş** görüntülü arama</target> + <target>**uçtan uca şifrelenmiş** görüntülü arama</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="*bold*" xml:space="preserve" approved="no"> + <trans-unit id="*bold*" xml:space="preserve"> <source>\*bold*</source> - <target state="translated">\*kalın*</target> + <target>\*kalın*</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id=", " xml:space="preserve" approved="no"> + <trans-unit id=", " xml:space="preserve"> <source>, </source> - <target state="translated">, </target> + <target>, </target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="- voice messages up to 5 minutes. - custom time to disappear. - editing history." xml:space="preserve" approved="no"> + <trans-unit id="- block a member to stop spam for all. - contact address is not shared." xml:space="preserve"> + <source>- block a member to stop spam for all. +- contact address is not shared.</source> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="- connect to [directory service](simplex:/contact#/?v=1-4&smp=smp%3A%2F%2Fu2dS9sG8nMNURyZwqASV4yROM28Er0luVTx5X1CsMrU%3D%40smp4.simplex.im%2FeXSPwqTkKyDO3px4fLf1wx3MvPdjdLW3%23%2F%3Fv%3D1-2%26dh%3DMCowBQYDK2VuAyEAaiv6MkMH44L2TcYrt_CsX3ZvM11WgbMEUn0hkIKTOho%253D%26srv%3Do5vmywmrnaxalvz6wi3zicyftgio6psuvyniis6gco6bp6ekl4cqj4id.onion) (BETA)! - delivery receipts (up to 20 members). - faster and more stable." xml:space="preserve"> + <source>- connect to [directory service](simplex:/contact#/?v=1-4&smp=smp%3A%2F%2Fu2dS9sG8nMNURyZwqASV4yROM28Er0luVTx5X1CsMrU%3D%40smp4.simplex.im%2FeXSPwqTkKyDO3px4fLf1wx3MvPdjdLW3%23%2F%3Fv%3D1-2%26dh%3DMCowBQYDK2VuAyEAaiv6MkMH44L2TcYrt_CsX3ZvM11WgbMEUn0hkIKTOho%253D%26srv%3Do5vmywmrnaxalvz6wi3zicyftgio6psuvyniis6gco6bp6ekl4cqj4id.onion) (BETA)! +- delivery receipts (up to 20 members). +- faster and more stable.</source> + <target>- [dizin hizmeti] 'ne bağlan(simplex:/contact#/?v=1-4&smp=smp%3A%2F%2Fu2dS9sG8nMNURyZwqASV4yROM28Er0luVTx5X1CsMrU%3D%40smp4.simplex.im%2FeXSPwqTkKyDO3px4fLf1wx3MvPdjdLW3%23%2F%3Fv%3D1-2%26dh%3DMCowBQYDK2VuAyEAaiv6MkMH44L2TcYrt_CsX3ZvM11WgbMEUn0hkIKTOho%253D%26srv%3Do5vmywmrnaxalvz6wi3zicyftgio6psuvyniis6gco6bp6ekl4cqj4id.onion) (BETA)! +- çoklu mesaj gönderimi (20 kişiye kadar). +- daha hızlı ve daha stabil.</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="- more stable message delivery. - a bit better groups. - and more!" xml:space="preserve"> + <source>- more stable message delivery. +- a bit better groups. +- and more!</source> + <target>- daha stabil mesaj gönderimi. +- birazcık daha iyi gruplar. +- ve fazlası!</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="- optionally notify deleted contacts. - profile names with spaces. - and more!" xml:space="preserve"> + <source>- optionally notify deleted contacts. +- profile names with spaces. +- and more!</source> + <target>- isteğe bağlı olarak silinen kişilere bildirme. +- boşluklu profil adları +- ve fazlası!</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="- voice messages up to 5 minutes. - custom time to disappear. - editing history." xml:space="preserve"> <source>- voice messages up to 5 minutes. - custom time to disappear. - editing history.</source> - <target state="translated">- 5 dakikaya kadar süren sesli mesajlar. + <target>- 5 dakikaya kadar süren sesli mesajlar. - mesaj kaybolması için özel zaman. - düzenleme geçmişi.</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="." xml:space="preserve" approved="no"> + <trans-unit id="." xml:space="preserve"> <source>.</source> - <target state="translated">.</target> + <target>.</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="0s" xml:space="preserve" approved="no"> + <trans-unit id="0 sec" xml:space="preserve"> + <source>0 sec</source> + <target>0 saniye</target> + <note>time to disappear</note> + </trans-unit> + <trans-unit id="0s" xml:space="preserve"> <source>0s</source> - <target state="translated">0 saniye</target> + <target>0 saniye</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="1 day" xml:space="preserve" approved="no"> + <trans-unit id="1 day" xml:space="preserve"> <source>1 day</source> - <target state="translated">1 gün</target> + <target>1 gün</target> <note>time interval</note> </trans-unit> - <trans-unit id="1 hour" xml:space="preserve" approved="no"> + <trans-unit id="1 hour" xml:space="preserve"> <source>1 hour</source> - <target state="translated">1 saat</target> + <target>1 saat</target> <note>time interval</note> </trans-unit> - <trans-unit id="1 minute" xml:space="preserve" approved="no"> + <trans-unit id="1 minute" xml:space="preserve"> <source>1 minute</source> - <target state="translated">1 dakika</target> + <target>1 dakika</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="1 month" xml:space="preserve" approved="no"> + <trans-unit id="1 month" xml:space="preserve"> <source>1 month</source> - <target state="translated">1 ay</target> + <target>1 ay</target> <note>time interval</note> </trans-unit> - <trans-unit id="1 week" xml:space="preserve" approved="no"> + <trans-unit id="1 week" xml:space="preserve"> <source>1 week</source> - <target state="translated">1 hafta</target> + <target>1 hafta</target> <note>time interval</note> </trans-unit> - <trans-unit id="1-time link" xml:space="preserve" approved="no"> - <source>1-time link</source> - <target state="translated">tek kullanımlık bağlantı</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="5 minutes" xml:space="preserve" approved="no"> + <trans-unit id="5 minutes" xml:space="preserve"> <source>5 minutes</source> - <target state="translated">5 dakika</target> + <target>5 dakika</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="6" xml:space="preserve" approved="no"> + <trans-unit id="6" xml:space="preserve"> <source>6</source> - <target state="translated">6</target> + <target>6</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="30 seconds" xml:space="preserve" approved="no"> + <trans-unit id="30 seconds" xml:space="preserve"> <source>30 seconds</source> - <target state="translated">30 saniye</target> + <target>30 saniye</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id=": " xml:space="preserve" approved="no"> + <trans-unit id=": " xml:space="preserve"> <source>: </source> - <target state="translated">: </target> + <target>: </target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="<p>Hi!</p> <p><a href="%@">Connect to me via SimpleX Chat</a></p>" xml:space="preserve" approved="no"> + <trans-unit id="<p>Hi!</p> <p><a href="%@">Connect to me via SimpleX Chat</a></p>" xml:space="preserve"> <source><p>Hi!</p> <p><a href="%@">Connect to me via SimpleX Chat</a></p></source> - <target state="translated"><p>Merhaba!</p> + <target><p>Merhaba!</p> <p><a href="%@">SimpleX Chat ile bana bağlanın</a></p></target> <note>email text</note> </trans-unit> - <trans-unit id="A new contact" xml:space="preserve" approved="no"> + <trans-unit id="A few more things" xml:space="preserve"> + <source>A few more things</source> + <target>Birkaç şey daha</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="A new contact" xml:space="preserve"> <source>A new contact</source> - <target state="translated">Yeni kişi</target> + <target>Yeni kişi</target> <note>notification title</note> </trans-unit> - <trans-unit id="A random profile will be sent to the contact that you received this link from" xml:space="preserve" approved="no"> - <source>A random profile will be sent to the contact that you received this link from</source> - <target state="translated">Bu bağlantıyı aldığınız kişiye rastgele bir profil gönderilecek</target> + <trans-unit id="A new random profile will be shared." xml:space="preserve"> + <source>A new random profile will be shared.</source> + <target>Yeni bir rastgele profil paylaşılacak.</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="A random profile will be sent to your contact" xml:space="preserve" approved="no"> - <source>A random profile will be sent to your contact</source> - <target state="translated">Kişinize rastgele bir profil gönderilecek</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="A separate TCP connection will be used **for each chat profile you have in the app**." xml:space="preserve" approved="no"> + <trans-unit id="A separate TCP connection will be used **for each chat profile you have in the app**." xml:space="preserve"> <source>A separate TCP connection will be used **for each chat profile you have in the app**.</source> - <target state="translated">**uygulamandaki olan her sohbet profili için** ayrı bir TCP bağlantısı kullanılacaktır.</target> + <target>**uygulamandaki olan her sohbet profili için** ayrı bir TCP bağlantısı kullanılacaktır.</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="A separate TCP connection will be used **for each contact and group member**. **Please note**: if you have many connections, your battery and traffic consumption can be substantially higher and some connections may fail." xml:space="preserve" approved="no"> + <trans-unit id="A separate TCP connection will be used **for each contact and group member**. **Please note**: if you have many connections, your battery and traffic consumption can be substantially higher and some connections may fail." xml:space="preserve"> <source>A separate TCP connection will be used **for each contact and group member**. **Please note**: if you have many connections, your battery and traffic consumption can be substantially higher and some connections may fail.</source> - <target state="translated">**uygulamandaki olan her sohbet profili için** ayrı bir TCP bağlantısı kullanılacaktır. + <target>**uygulamandaki olan her sohbet profili için** ayrı bir TCP bağlantısı kullanılacaktır. **Lütfen aklınızda bulunsun**: eğer çok fazla bağlantılarınız var ise pil kullanımı ve internet kullanımınız oldukça artabilir ve bazı bağlantılar hatayla karşılaşabilir.</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Abort" xml:space="preserve" approved="no"> + <trans-unit id="Abort" xml:space="preserve"> <source>Abort</source> - <target state="translated">İptal Et</target> + <target>İptal Et</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Abort changing address" xml:space="preserve" approved="no"> + <trans-unit id="Abort changing address" xml:space="preserve"> <source>Abort changing address</source> - <target state="translated">Adres değişimini iptal et</target> + <target>Adres değişimini iptal et</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Abort changing address?" xml:space="preserve" approved="no"> + <trans-unit id="Abort changing address?" xml:space="preserve"> <source>Abort changing address?</source> - <target state="translated">Adres değişimi iptal edilsin mi?</target> + <target>Adres değişimi iptal edilsin mi?</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="About SimpleX" xml:space="preserve" approved="no"> + <trans-unit id="About SimpleX" xml:space="preserve"> <source>About SimpleX</source> - <target state="translated">SimpleX Hakkında</target> + <target>SimpleX Hakkında</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="About SimpleX Chat" xml:space="preserve" approved="no"> + <trans-unit id="About SimpleX Chat" xml:space="preserve"> <source>About SimpleX Chat</source> - <target state="translated">SimpleX Chat hakkında</target> + <target>SimpleX Chat hakkında</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="About SimpleX address" xml:space="preserve" approved="no"> + <trans-unit id="About SimpleX address" xml:space="preserve"> <source>About SimpleX address</source> - <target state="translated">SimpleX Chat adresi hakkında</target> + <target>SimpleX Chat adresi hakkında</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Accent color" xml:space="preserve" approved="no"> + <trans-unit id="Accent color" xml:space="preserve"> <source>Accent color</source> - <target state="translated">Vurgu rengi</target> + <target>Vurgu rengi</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Accept" xml:space="preserve" approved="no"> + <trans-unit id="Accept" xml:space="preserve"> <source>Accept</source> - <target state="translated">Kabul et</target> + <target>Kabul et</target> <note>accept contact request via notification accept incoming call via notification</note> </trans-unit> - <trans-unit id="Accept contact" xml:space="preserve"> - <source>Accept contact</source> + <trans-unit id="Accept connection request?" xml:space="preserve"> + <source>Accept connection request?</source> + <target>Bağlantı isteği kabul edilsin mi?</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Accept contact request from %@?" xml:space="preserve" approved="no"> + <trans-unit id="Accept contact request from %@?" xml:space="preserve"> <source>Accept contact request from %@?</source> - <target state="translated">%@ 'den gelen iletişim isteği kabul edilsin mi?</target> + <target>%@ 'den gelen iletişim isteği kabul edilsin mi?</target> <note>notification body</note> </trans-unit> - <trans-unit id="Accept incognito" xml:space="preserve" approved="no"> + <trans-unit id="Accept incognito" xml:space="preserve"> <source>Accept incognito</source> - <target state="translated">Takma adla kabul et</target> - <note>No comment provided by engineer.</note> + <target>Takma adla kabul et</target> + <note>accept contact request via notification</note> </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" approved="no"> + <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 state="translated">Kişilerinizin başkalarıyla paylaşabilmesi için profilinize adres ekleyin. Profil güncellemesi kişilerinize gönderilecek.</target> + <target>Kişilerinizin başkalarıyla paylaşabilmesi için profilinize adres ekleyin. Profil güncellemesi kişilerinize gönderilecek.</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Add preset servers" xml:space="preserve" approved="no"> + <trans-unit id="Add contact" xml:space="preserve"> + <source>Add contact</source> + <target>Kişi ekle</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="Add preset servers" xml:space="preserve"> <source>Add preset servers</source> - <target state="translated">Önceden ayarlanmış sunucu ekle</target> + <target>Önceden ayarlanmış sunucu ekle</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Add profile" xml:space="preserve" approved="no"> + <trans-unit id="Add profile" xml:space="preserve"> <source>Add profile</source> - <target state="translated">Profil ekle</target> + <target>Profil ekle</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Add servers by scanning QR codes." xml:space="preserve" approved="no"> + <trans-unit id="Add servers by scanning QR codes." xml:space="preserve"> <source>Add servers by scanning QR codes.</source> - <target state="translated">Karekod taratarak sunucuları ekleyin.</target> + <target>Karekod taratarak sunucuları ekleyin.</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Add server…" xml:space="preserve" approved="no"> + <trans-unit id="Add server…" xml:space="preserve"> <source>Add server…</source> - <target state="translated">Sunucu ekle…</target> + <target>Sunucu ekle…</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Add to another device" xml:space="preserve" approved="no"> + <trans-unit id="Add to another device" xml:space="preserve"> <source>Add to another device</source> - <target state="translated">Başka bir cihaza ekle</target> + <target>Başka bir cihaza ekle</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Add welcome message" xml:space="preserve" approved="no"> + <trans-unit id="Add welcome message" xml:space="preserve"> <source>Add welcome message</source> - <target state="translated">Karşılama mesajı ekleyin</target> + <target>Karşılama mesajı ekleyin</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Address" xml:space="preserve" approved="no"> + <trans-unit id="Address" xml:space="preserve"> <source>Address</source> - <target state="translated">Adres</target> + <target>Adres</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Address change will be aborted. Old receiving address will be used." xml:space="preserve" approved="no"> + <trans-unit id="Address change will be aborted. Old receiving address will be used." xml:space="preserve"> <source>Address change will be aborted. Old receiving address will be used.</source> - <target state="translated">Adres değişikliği iptal edilecek. Eski alıcı adresi kullanılacaktır.</target> + <target>Adres değişikliği iptal edilecek. Eski alıcı adresi kullanılacaktır.</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Admins can create the links to join groups." xml:space="preserve" approved="no"> + <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 state="translated">Yöneticiler gruplara katılmak için bağlantılar oluşturabilir.</target> + <target>Yöneticiler gruplara katılmak için bağlantılar oluşturabilir.</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Advanced network settings" xml:space="preserve" approved="no"> + <trans-unit id="Advanced network settings" xml:space="preserve"> <source>Advanced network settings</source> - <target state="translated">GGelişmiş ağ ayarları</target> + <target>GGelişmiş ağ ayarları</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="All app data is deleted." xml:space="preserve" approved="no"> + <trans-unit id="All app data is deleted." xml:space="preserve"> <source>All app data is deleted.</source> - <target state="translated">Tüm uygulama verileri silinir.</target> + <target>Tüm uygulama verileri silinir.</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="All chats and messages will be deleted - this cannot be undone!" xml:space="preserve" approved="no"> + <trans-unit id="All chats and messages will be deleted - this cannot be undone!" xml:space="preserve"> <source>All chats and messages will be deleted - this cannot be undone!</source> - <target state="translated">Tüm konuşmalar ve mesajlar silinecektir. Bu, geri alınamaz!</target> + <target>Tüm konuşmalar ve mesajlar silinecektir. Bu, geri alınamaz!</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="All data is erased when it is entered." xml:space="preserve" approved="no"> + <trans-unit id="All data is erased when it is entered." xml:space="preserve"> <source>All data is erased when it is entered.</source> - <target state="translated">Kullanıldığında bütün veriler silinir.</target> + <target>Kullanıldığında bütün veriler silinir.</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="All group members will remain connected." xml:space="preserve" approved="no"> + <trans-unit id="All group members will remain connected." xml:space="preserve"> <source>All group members will remain connected.</source> - <target state="translated">Tüm grup üyeleri bağlı kalacaktır.</target> + <target>Tüm grup üyeleri bağlı kalacaktır.</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="All messages will be deleted - this cannot be undone! The messages will be deleted ONLY for you." xml:space="preserve" approved="no"> + <trans-unit id="All messages will be deleted - this cannot be undone!" xml:space="preserve"> + <source>All messages will be deleted - this cannot be undone!</source> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="All messages will be deleted - this cannot be undone! The messages will be deleted ONLY for you." xml:space="preserve"> <source>All messages will be deleted - this cannot be undone! The messages will be deleted ONLY for you.</source> - <target state="translated">Tüm mesajlar silinecektir. Bu, geri alınamaz! Mesajlar, YALNIZCA senin için silinecektir.</target> + <target>Tüm mesajlar silinecektir. Bu, geri alınamaz! Mesajlar, YALNIZCA senin için silinecektir.</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="All your contacts will remain connected." xml:space="preserve" approved="no"> + <trans-unit id="All new messages from %@ will be hidden!" xml:space="preserve"> + <source>All new messages from %@ will be hidden!</source> + <target>%@ 'den gelen bütün yeni mesajlar saklı olacak!</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="All your contacts will remain connected." xml:space="preserve"> <source>All your contacts will remain connected.</source> - <target state="translated">Konuştuğun kişilerin tümü bağlı kalacaktır.</target> + <target>Konuştuğun kişilerin tümü bağlı kalacaktır.</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" approved="no"> + <trans-unit id="All your contacts will remain connected. Profile update will be sent to your contacts." xml:space="preserve"> <source>All your contacts will remain connected. Profile update will be sent to your contacts.</source> - <target state="translated">Tüm kişileriniz bağlı kalacaktır. Profil güncellemesi kişilerinize gönderilecektir.</target> + <target>Tüm kişileriniz bağlı kalacaktır. Profil güncellemesi kişilerinize gönderilecektir.</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Allow" xml:space="preserve" approved="no"> + <trans-unit id="Allow" xml:space="preserve"> <source>Allow</source> - <target state="translated">İzin ver</target> + <target>İzin ver</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Allow calls only if your contact allows them." xml:space="preserve" approved="no"> + <trans-unit id="Allow calls only if your contact allows them." xml:space="preserve"> <source>Allow calls only if your contact allows them.</source> - <target state="translated">Yalnızca irtibat kişiniz izin veriyorsa aramalara izin verin.</target> + <target>Yalnızca irtibat kişiniz izin veriyorsa aramalara izin verin.</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Allow disappearing messages only if your contact allows it to you." xml:space="preserve" approved="no"> + <trans-unit id="Allow disappearing messages only if your contact allows it to you." xml:space="preserve"> <source>Allow disappearing messages only if your contact allows it to you.</source> - <target state="translated">Eğer kişide izin verirse kaybolan mesajlara izin ver.</target> + <target>Eğer kişide izin verirse kaybolan mesajlara izin ver.</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Allow irreversible message deletion only if your contact allows it to you." xml:space="preserve" approved="no"> - <source>Allow irreversible message deletion only if your contact allows it to you.</source> - <target state="translated">Eğer kişide izin verirse geri dönüşü olmayan mesaj silimine izin ver.</target> + <trans-unit id="Allow irreversible message deletion only if your contact allows it to you. (24 hours)" xml:space="preserve"> + <source>Allow irreversible message deletion only if your contact allows it to you. (24 hours)</source> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Allow message reactions only if your contact allows them." xml:space="preserve" approved="no"> + <trans-unit id="Allow message reactions only if your contact allows them." xml:space="preserve"> <source>Allow message reactions only if your contact allows them.</source> - <target state="translated">Yalnızca kişin mesaj tepkilerine izin veriyorsa sen de ver.</target> + <target>Yalnızca kişin mesaj tepkilerine izin veriyorsa sen de ver.</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Allow message reactions." xml:space="preserve" approved="no"> + <trans-unit id="Allow message reactions." xml:space="preserve"> <source>Allow message reactions.</source> - <target state="translated">Mesaj tepkilerine izin ver.</target> + <target>Mesaj tepkilerine izin ver.</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Allow sending direct messages to members." xml:space="preserve" approved="no"> + <trans-unit id="Allow sending direct messages to members." xml:space="preserve"> <source>Allow sending direct messages to members.</source> - <target state="translated">Üyelere direkt mesaj göndermeye izin ver.</target> + <target>Üyelere direkt mesaj göndermeye izin ver.</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Allow sending disappearing messages." xml:space="preserve" approved="no"> + <trans-unit id="Allow sending disappearing messages." xml:space="preserve"> <source>Allow sending disappearing messages.</source> - <target state="translated">Kendiliğinden yok olan mesajlar göndermeye izin ver.</target> + <target>Kendiliğinden yok olan mesajlar göndermeye izin ver.</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Allow to irreversibly delete sent messages." xml:space="preserve" approved="no"> - <source>Allow to irreversibly delete sent messages.</source> - <target state="translated">Gönderilen mesajların kalıcı olarak silinmesine izin ver.</target> + <trans-unit id="Allow to irreversibly delete sent messages. (24 hours)" xml:space="preserve"> + <source>Allow to irreversibly delete sent messages. (24 hours)</source> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Allow to send files and media." xml:space="preserve" approved="no"> + <trans-unit id="Allow to send files and media." xml:space="preserve"> <source>Allow to send files and media.</source> - <target state="translated">Dosya ve medya göndermeye izin ver.</target> + <target>Dosya ve medya göndermeye izin ver.</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Allow to send voice messages." xml:space="preserve" approved="no"> + <trans-unit id="Allow to send voice messages." xml:space="preserve"> <source>Allow to send voice messages.</source> - <target state="translated">Sesli mesaj göndermeye izin ver.</target> + <target>Sesli mesaj göndermeye izin ver.</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Allow voice messages only if your contact allows them." xml:space="preserve" approved="no"> + <trans-unit id="Allow voice messages only if your contact allows them." xml:space="preserve"> <source>Allow voice messages only if your contact allows them.</source> - <target state="translated">Yalnızca kişiniz sesli mesaj göndermeye izin veriyorsa sen de ver.</target> + <target>Yalnızca kişiniz sesli mesaj göndermeye izin veriyorsa sen de ver.</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Allow voice messages?" xml:space="preserve" approved="no"> + <trans-unit id="Allow voice messages?" xml:space="preserve"> <source>Allow voice messages?</source> - <target state="translated">Sesli mesajlara izin ver?</target> + <target>Sesli mesajlara izin ver?</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Allow your contacts adding message reactions." xml:space="preserve" approved="no"> + <trans-unit id="Allow your contacts adding message reactions." xml:space="preserve"> <source>Allow your contacts adding message reactions.</source> - <target state="translated">Konuştuğun kişilerin mesajlarına tepki eklemesine izin ver.</target> + <target>Konuştuğun kişilerin mesajlarına tepki eklemesine izin ver.</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Allow your contacts to call you." xml:space="preserve" approved="no"> + <trans-unit id="Allow your contacts to call you." xml:space="preserve"> <source>Allow your contacts to call you.</source> - <target state="translated">Kişilerinin seni aramasına izin ver.</target> + <target>Kişilerinin seni aramasına izin ver.</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Allow your contacts to irreversibly delete sent messages." xml:space="preserve" approved="no"> - <source>Allow your contacts to irreversibly delete sent messages.</source> - <target state="translated">Kişilerinizin gönderilen mesajları geri alınamayacak şekilde silmesine izin verin.</target> + <trans-unit id="Allow your contacts to irreversibly delete sent messages. (24 hours)" xml:space="preserve"> + <source>Allow your contacts to irreversibly delete sent messages. (24 hours)</source> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Allow your contacts to send disappearing messages." xml:space="preserve" approved="no"> + <trans-unit id="Allow your contacts to send disappearing messages." xml:space="preserve"> <source>Allow your contacts to send disappearing messages.</source> - <target state="translated">Kişilerinizin kaybolan mesajlar göndermesine izin verin.</target> + <target>Kişilerinizin kaybolan mesajlar göndermesine izin verin.</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Allow your contacts to send voice messages." xml:space="preserve" approved="no"> + <trans-unit id="Allow your contacts to send voice messages." xml:space="preserve"> <source>Allow your contacts to send voice messages.</source> - <target state="translated">Kişilerinizin sesli mesajlar göndermesine izin verin.</target> + <target>Kişilerinizin sesli mesajlar göndermesine izin verin.</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Already connected?" xml:space="preserve" approved="no"> + <trans-unit id="Already connected?" xml:space="preserve"> <source>Already connected?</source> - <target state="translated">Zaten bağlandı?</target> + <target>Zaten bağlandı?</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Always use relay" xml:space="preserve" approved="no"> + <trans-unit id="Already connecting!" xml:space="preserve"> + <source>Already connecting!</source> + <target>Zaten bağlanılıyor!</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>Zaten gruba bağlanılıyor!</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="Always use relay" xml:space="preserve"> <source>Always use relay</source> - <target state="translated">Her zaman yönlendirici kulan</target> + <target>Her zaman yönlendirici kulan</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="An empty chat profile with the provided name is created, and the app opens as usual." xml:space="preserve" approved="no"> + <trans-unit id="An empty chat profile with the provided name is created, and the app opens as usual." xml:space="preserve"> <source>An empty chat profile with the provided name is created, and the app opens as usual.</source> - <target state="translated">Verilen adla boş bir sohbet profili oluşturulur ve uygulama her zamanki gibi açılır.</target> + <target>Verilen adla boş bir sohbet profili oluşturulur ve uygulama her zamanki gibi açılır.</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Answer call" xml:space="preserve" approved="no"> + <trans-unit id="Answer call" xml:space="preserve"> <source>Answer call</source> - <target state="translated">Aramayı cevapla</target> + <target>Aramayı cevapla</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="App build: %@" xml:space="preserve" approved="no"> + <trans-unit id="App build: %@" xml:space="preserve"> <source>App build: %@</source> - <target state="translated">Uygulama sürümü: %@</target> + <target>Uygulama sürümü: %@</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="App icon" xml:space="preserve" approved="no"> + <trans-unit id="App encrypts new local files (except videos)." xml:space="preserve"> + <source>App encrypts new local files (except videos).</source> + <target>Uygulama yerel dosyaları şifreler (videolar dışında).</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="App icon" xml:space="preserve"> <source>App icon</source> - <target state="translated">Uygulama simgesi</target> + <target>Uygulama simgesi</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="App passcode" xml:space="preserve" approved="no"> + <trans-unit id="App passcode" xml:space="preserve"> <source>App passcode</source> - <target state="translated">Uygulama erişim kodu</target> + <target>Uygulama erişim kodu</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="App passcode is replaced with self-destruct passcode." xml:space="preserve" approved="no"> + <trans-unit id="App passcode is replaced with self-destruct passcode." xml:space="preserve"> <source>App passcode is replaced with self-destruct passcode.</source> - <target state="translated">Uygulama parolası kendi kendini imha eden parolayla değiştirildi.</target> + <target>Uygulama parolası kendi kendini imha eden parolayla değiştirildi.</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="App version" xml:space="preserve" approved="no"> + <trans-unit id="App version" xml:space="preserve"> <source>App version</source> - <target state="translated">Uygulama sürümü</target> + <target>Uygulama sürümü</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="App version: v%@" xml:space="preserve" approved="no"> + <trans-unit id="App version: v%@" xml:space="preserve"> <source>App version: v%@</source> - <target state="translated">Uygulama sürümü: v%@</target> + <target>Uygulama sürümü: v%@</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Appearance" xml:space="preserve" approved="no"> + <trans-unit id="Appearance" xml:space="preserve"> <source>Appearance</source> - <target state="translated">Görünüş</target> + <target>Görünüş</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Attach" xml:space="preserve" approved="no"> + <trans-unit id="Attach" xml:space="preserve"> <source>Attach</source> - <target state="translated">Ekle</target> + <target>Ekle</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Audio & video calls" xml:space="preserve" approved="no"> + <trans-unit id="Audio & video calls" xml:space="preserve"> <source>Audio & video calls</source> - <target state="translated">Sesli & görüntülü aramalar</target> + <target>Sesli & görüntülü aramalar</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Audio and video calls" xml:space="preserve" approved="no"> + <trans-unit id="Audio and video calls" xml:space="preserve"> <source>Audio and video calls</source> - <target state="translated">Sesli ve görüntülü aramalar</target> + <target>Sesli ve görüntülü aramalar</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Audio/video calls" xml:space="preserve" approved="no"> + <trans-unit id="Audio/video calls" xml:space="preserve"> <source>Audio/video calls</source> - <target state="translated">Sesli/görüntülü aramalar</target> + <target>Sesli/görüntülü aramalar</target> <note>chat feature</note> </trans-unit> - <trans-unit id="Audio/video calls are prohibited." xml:space="preserve" approved="no"> + <trans-unit id="Audio/video calls are prohibited." xml:space="preserve"> <source>Audio/video calls are prohibited.</source> - <target state="translated">Sesli/görüntülü aramalar yasaklandı.</target> + <target>Sesli/görüntülü aramalar yasaklandı.</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Authentication cancelled" xml:space="preserve" approved="no"> + <trans-unit id="Authentication cancelled" xml:space="preserve"> <source>Authentication cancelled</source> - <target state="translated">Kimlik doğrulama iptal edildi</target> + <target>Kimlik doğrulama iptal edildi</target> <note>PIN entry</note> </trans-unit> - <trans-unit id="Authentication failed" xml:space="preserve" approved="no"> + <trans-unit id="Authentication failed" xml:space="preserve"> <source>Authentication failed</source> - <target state="translated">Kimlik doğrulama başarısız oldu</target> + <target>Kimlik doğrulama başarısız oldu</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Authentication is required before the call is connected, but you may miss calls." xml:space="preserve" approved="no"> + <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 state="translated">Kimlik doğrulama aramalara bağlanmadan önce gereklidir, ama aramaları kaçırabilirsin.</target> + <target>Kimlik doğrulama aramalara bağlanmadan önce gereklidir, ama aramaları kaçırabilirsin.</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Authentication unavailable" xml:space="preserve" approved="no"> + <trans-unit id="Authentication unavailable" xml:space="preserve"> <source>Authentication unavailable</source> - <target state="translated">Kimlik doğrulama kullanım dışı</target> + <target>Kimlik doğrulama kullanım dışı</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Auto-accept" xml:space="preserve" approved="no"> + <trans-unit id="Auto-accept" xml:space="preserve"> <source>Auto-accept</source> - <target state="translated">Otomatik-kabul et</target> + <target>Otomatik-kabul et</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Auto-accept contact requests" xml:space="preserve" approved="no"> + <trans-unit id="Auto-accept contact requests" xml:space="preserve"> <source>Auto-accept contact requests</source> - <target state="translated">İletişim isteklerini otomatik kabul et</target> + <target>İletişim isteklerini otomatik kabul et</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Auto-accept images" xml:space="preserve" approved="no"> + <trans-unit id="Auto-accept images" xml:space="preserve"> <source>Auto-accept images</source> - <target state="translated">Fotoğrafları otomatik kabul et</target> + <target>Fotoğrafları otomatik kabul et</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Back" xml:space="preserve" approved="no"> + <trans-unit id="Back" xml:space="preserve"> <source>Back</source> - <target state="translated">Geri</target> + <target>Geri</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Bad message ID" xml:space="preserve" approved="no"> + <trans-unit id="Bad desktop address" xml:space="preserve"> + <source>Bad desktop address</source> + <target>Kötü bilgisayar adresi</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="Bad message ID" xml:space="preserve"> <source>Bad message ID</source> - <target state="translated">Kötü mesaj kimliği</target> + <target>Kötü mesaj kimliği</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Bad message hash" xml:space="preserve" approved="no"> + <trans-unit id="Bad message hash" xml:space="preserve"> <source>Bad message hash</source> - <target state="translated">Kötü mesaj karması</target> + <target>Kötü mesaj karması</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Better messages" xml:space="preserve" approved="no"> + <trans-unit id="Better groups" xml:space="preserve"> + <source>Better groups</source> + <target>Daha iyi gruplar</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="Better messages" xml:space="preserve"> <source>Better messages</source> - <target state="translated">Daha iyi mesajlar</target> + <target>Daha iyi mesajlar</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Both you and your contact can add message reactions." xml:space="preserve" approved="no"> + <trans-unit id="Block" xml:space="preserve"> + <source>Block</source> + <target>Engelle</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="Block group members" xml:space="preserve"> + <source>Block group members</source> + <target>Grup üyelerini engelle</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="Block member" xml:space="preserve"> + <source>Block member</source> + <target>Üyeyi engelle</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="Block member?" xml:space="preserve"> + <source>Block member?</source> + <target>Üyeyi engelle?</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="Both you and your contact can add message reactions." xml:space="preserve"> <source>Both you and your contact can add message reactions.</source> - <target state="translated">Sen ve konuştuğun kişi mesaj tepkileri ekleyebilir.</target> + <target>Sen ve konuştuğun kişi mesaj tepkileri ekleyebilir.</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Both you and your contact can irreversibly delete sent messages." xml:space="preserve" approved="no"> - <source>Both you and your contact can irreversibly delete sent messages.</source> - <target state="translated">Sen ve konuştuğun kişi gönderilmiş mesajları geri dönüşsüz silebilirsiniz.</target> + <trans-unit id="Both you and your contact can irreversibly delete sent messages. (24 hours)" xml:space="preserve"> + <source>Both you and your contact can irreversibly delete sent messages. (24 hours)</source> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Both you and your contact can make calls." xml:space="preserve" approved="no"> + <trans-unit id="Both you and your contact can make calls." xml:space="preserve"> <source>Both you and your contact can make calls.</source> - <target state="translated">Sen ve konuştuğun kişi aramalar yapabilir.</target> + <target>Sen ve konuştuğun kişi aramalar yapabilir.</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Both you and your contact can send disappearing messages." xml:space="preserve" approved="no"> + <trans-unit id="Both you and your contact can send disappearing messages." xml:space="preserve"> <source>Both you and your contact can send disappearing messages.</source> - <target state="translated">Sen ve konuştuğun kişi kaybolan mesajlar gönderebilir.</target> + <target>Sen ve konuştuğun kişi kaybolan mesajlar gönderebilir.</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Both you and your contact can send voice messages." xml:space="preserve" approved="no"> + <trans-unit id="Both you and your contact can send voice messages." xml:space="preserve"> <source>Both you and your contact can send voice messages.</source> - <target state="translated">Sen ve konuştuğun kişi sesli mesaj gönderebilir.</target> + <target>Sen ve konuştuğun kişi sesli mesaj gönderebilir.</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="By chat profile (default) or [by connection](https://simplex.chat/blog/20230204-simplex-chat-v4-5-user-chat-profiles.html#transport-isolation) (BETA)." xml:space="preserve" approved="no"> + <trans-unit id="Bulgarian, Finnish, Thai and Ukrainian - thanks to the users and [Weblate](https://github.com/simplex-chat/simplex-chat/tree/stable#help-translating-simplex-chat)!" xml:space="preserve"> + <source>Bulgarian, Finnish, Thai and Ukrainian - thanks to the users and [Weblate](https://github.com/simplex-chat/simplex-chat/tree/stable#help-translating-simplex-chat)!</source> + <target>Bulgarca, Fince, Tayca ve Ukraynaca - kullanıcılara ve [Weblate] e teşekkürler! (https://github.com/simplex-chat/simplex-chat/tree/stable#help-translating-simplex-chat)!</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="By chat profile (default) or [by connection](https://simplex.chat/blog/20230204-simplex-chat-v4-5-user-chat-profiles.html#transport-isolation) (BETA)." xml:space="preserve"> <source>By chat profile (default) or [by connection](https://simplex.chat/blog/20230204-simplex-chat-v4-5-user-chat-profiles.html#transport-isolation) (BETA).</source> - <target state="translated">Sohbet profiline göre (varsayılan) veya [bağlantıya göre](https://simplex.chat/blog/20230204-simplex-chat-v4-5-user-chat-profiles.html#transport-isolation) (BETA).</target> + <target>Sohbet profiline göre (varsayılan) veya [bağlantıya göre](https://simplex.chat/blog/20230204-simplex-chat-v4-5-user-chat-profiles.html#transport-isolation) (BETA).</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Call already ended!" xml:space="preserve" approved="no"> + <trans-unit id="Call already ended!" xml:space="preserve"> <source>Call already ended!</source> - <target state="translated">Arama çoktan bitti!</target> + <target>Arama çoktan bitti!</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Calls" xml:space="preserve" approved="no"> + <trans-unit id="Calls" xml:space="preserve"> <source>Calls</source> - <target state="translated">Aramalar</target> + <target>Aramalar</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Can't delete user profile!" xml:space="preserve" approved="no"> + <trans-unit id="Camera not available" xml:space="preserve"> + <source>Camera not available</source> + <target>Kamera mevcut değil</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="Can't delete user profile!" xml:space="preserve"> <source>Can't delete user profile!</source> - <target state="translated">Kullanıcı profili silinemiyor!</target> + <target>Kullanıcı profili silinemiyor!</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Can't invite contact!" xml:space="preserve" approved="no"> + <trans-unit id="Can't invite contact!" xml:space="preserve"> <source>Can't invite contact!</source> - <target state="translated">Kişi davet edilemiyor!</target> + <target>Kişi davet edilemiyor!</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Can't invite contacts!" xml:space="preserve" approved="no"> + <trans-unit id="Can't invite contacts!" xml:space="preserve"> <source>Can't invite contacts!</source> - <target state="translated">Kişiler davet edilemiyor!</target> + <target>Kişiler davet edilemiyor!</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Cancel" xml:space="preserve" approved="no"> + <trans-unit id="Cancel" xml:space="preserve"> <source>Cancel</source> - <target state="translated">İptal et</target> + <target>İptal et</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Cannot access keychain to save database password" xml:space="preserve" approved="no"> + <trans-unit id="Cannot access keychain to save database password" xml:space="preserve"> <source>Cannot access keychain to save database password</source> - <target state="translated">Veritabanı şifresini kaydetmek için Anahtar Zinciri'ne erişilemiyor</target> + <target>Veritabanı şifresini kaydetmek için Anahtar Zinciri'ne erişilemiyor</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Cannot receive file" xml:space="preserve" approved="no"> + <trans-unit id="Cannot receive file" xml:space="preserve"> <source>Cannot receive file</source> - <target state="translated">Dosya alınamıyor</target> + <target>Dosya alınamıyor</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Change" xml:space="preserve" approved="no"> + <trans-unit id="Change" xml:space="preserve"> <source>Change</source> - <target state="translated">Değiştir</target> + <target>Değiştir</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Change database passphrase?" xml:space="preserve" approved="no"> + <trans-unit id="Change database passphrase?" xml:space="preserve"> <source>Change database passphrase?</source> - <target state="translated">Veritabanı parolasını değiştir?</target> + <target>Veritabanı parolasını değiştir?</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Change lock mode" xml:space="preserve" approved="no"> + <trans-unit id="Change lock mode" xml:space="preserve"> <source>Change lock mode</source> - <target state="translated">Kilit modunu değiştir</target> + <target>Kilit modunu değiştir</target> <note>authentication reason</note> </trans-unit> - <trans-unit id="Change member role?" xml:space="preserve" approved="no"> + <trans-unit id="Change member role?" xml:space="preserve"> <source>Change member role?</source> - <target state="translated">Üye rolünü değiştir?</target> + <target>Üye rolünü değiştir?</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Change passcode" xml:space="preserve" approved="no"> + <trans-unit id="Change passcode" xml:space="preserve"> <source>Change passcode</source> - <target state="translated">Şifreyi değiştir</target> + <target>Şifreyi değiştir</target> <note>authentication reason</note> </trans-unit> - <trans-unit id="Change receiving address" xml:space="preserve" approved="no"> + <trans-unit id="Change receiving address" xml:space="preserve"> <source>Change receiving address</source> - <target state="translated">Alıcı adresini değiştir</target> + <target>Alıcı adresini değiştir</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Change receiving address?" xml:space="preserve" approved="no"> + <trans-unit id="Change receiving address?" xml:space="preserve"> <source>Change receiving address?</source> - <target state="translated">Alıcı adresi değiştirilsin mi?</target> + <target>Alıcı adresi değiştirilsin mi?</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Change role" xml:space="preserve" approved="no"> + <trans-unit id="Change role" xml:space="preserve"> <source>Change role</source> - <target state="translated">Rolü değiştir</target> + <target>Rolü değiştir</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Change self-destruct mode" xml:space="preserve" approved="no"> + <trans-unit id="Change self-destruct mode" xml:space="preserve"> <source>Change self-destruct mode</source> - <target state="translated">Kendini yok etme modunu değiştir</target> + <target>Kendini yok etme modunu değiştir</target> <note>authentication reason</note> </trans-unit> - <trans-unit id="Change self-destruct passcode" xml:space="preserve" approved="no"> + <trans-unit id="Change self-destruct passcode" xml:space="preserve"> <source>Change self-destruct passcode</source> - <target state="translated">Kendini yok eden parolayı değiştir</target> + <target>Kendini yok eden parolayı değiştir</target> <note>authentication reason set passcode view</note> </trans-unit> - <trans-unit id="Chat archive" xml:space="preserve" approved="no"> + <trans-unit id="Chat archive" xml:space="preserve"> <source>Chat archive</source> - <target state="translated">Sohbet arşivi</target> + <target>Sohbet arşivi</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Chat console" xml:space="preserve" approved="no"> + <trans-unit id="Chat console" xml:space="preserve"> <source>Chat console</source> - <target state="translated">Sohbet konsolu</target> + <target>Sohbet konsolu</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Chat database" xml:space="preserve" approved="no"> + <trans-unit id="Chat database" xml:space="preserve"> <source>Chat database</source> - <target state="translated">Sohbet veritabanı</target> + <target>Sohbet veritabanı</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Chat database deleted" xml:space="preserve" approved="no"> + <trans-unit id="Chat database deleted" xml:space="preserve"> <source>Chat database deleted</source> - <target state="translated">Sohbet veritabanı silindi</target> + <target>Sohbet veritabanı silindi</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Chat database imported" xml:space="preserve" approved="no"> + <trans-unit id="Chat database imported" xml:space="preserve"> <source>Chat database imported</source> - <target state="translated">Sohbet veritabanı içe aktarıldı</target> + <target>Sohbet veritabanı içe aktarıldı</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Chat is running" xml:space="preserve" approved="no"> + <trans-unit id="Chat is running" xml:space="preserve"> <source>Chat is running</source> - <target state="translated">Sohbet çalışıyor</target> + <target>Sohbet çalışıyor</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Chat is stopped" xml:space="preserve" approved="no"> + <trans-unit id="Chat is stopped" xml:space="preserve"> <source>Chat is stopped</source> - <target state="translated">Sohbet durdu</target> + <target>Sohbet durdu</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Chat preferences" xml:space="preserve" approved="no"> + <trans-unit id="Chat is stopped. If you already used this database on another device, you should transfer it back before starting chat." xml:space="preserve"> + <source>Chat is stopped. If you already used this database on another device, you should transfer it back before starting chat.</source> + <target>Sohbet durduruldu. Bu veritabanını zaten başka bir cihazda kullandıysanız, sohbete başlamadan önce onu geri aktarmalısınız.</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="Chat preferences" xml:space="preserve"> <source>Chat preferences</source> - <target state="translated">Sohbet tercihleri</target> + <target>Sohbet tercihleri</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Chats" xml:space="preserve" approved="no"> + <trans-unit id="Chats" xml:space="preserve"> <source>Chats</source> - <target state="translated">Sohbetler</target> + <target>Sohbetler</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Check server address and try again." xml:space="preserve" approved="no"> + <trans-unit id="Check server address and try again." xml:space="preserve"> <source>Check server address and try again.</source> - <target state="translated">Sunucu adresini kontrol edip tekrar deneyin.</target> + <target>Sunucu adresini kontrol edip tekrar deneyin.</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Chinese and Spanish interface" xml:space="preserve" approved="no"> + <trans-unit id="Chinese and Spanish interface" xml:space="preserve"> <source>Chinese and Spanish interface</source> - <target state="translated">Çince ve İspanyolca arayüz</target> + <target>Çince ve İspanyolca arayüz</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Choose file" xml:space="preserve" approved="no"> + <trans-unit id="Choose file" xml:space="preserve"> <source>Choose file</source> - <target state="translated">Dosya seç</target> + <target>Dosya seç</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Choose from library" xml:space="preserve" approved="no"> + <trans-unit id="Choose from library" xml:space="preserve"> <source>Choose from library</source> - <target state="translated">Kütüphaneden seç</target> + <target>Kütüphaneden seç</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Clear" xml:space="preserve" approved="no"> + <trans-unit id="Clear" xml:space="preserve"> <source>Clear</source> - <target state="translated">Temizle</target> + <target>Temizle</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Clear conversation" xml:space="preserve" approved="no"> + <trans-unit id="Clear conversation" xml:space="preserve"> <source>Clear conversation</source> - <target state="translated">Sohbeti temizle</target> + <target>Sohbeti temizle</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Clear conversation?" xml:space="preserve" approved="no"> + <trans-unit id="Clear conversation?" xml:space="preserve"> <source>Clear conversation?</source> - <target state="translated">Sohbet temizlensin mi?</target> + <target>Sohbet temizlensin mi?</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Clear verification" xml:space="preserve" approved="no"> + <trans-unit id="Clear private notes?" xml:space="preserve"> + <source>Clear private notes?</source> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="Clear verification" xml:space="preserve"> <source>Clear verification</source> - <target state="translated">Doğrulamayı temizle</target> + <target>Doğrulamayı temizle</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Colors" xml:space="preserve" approved="no"> + <trans-unit id="Colors" xml:space="preserve"> <source>Colors</source> - <target state="translated">Renkler</target> + <target>Renkler</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Compare file" xml:space="preserve" approved="no"> + <trans-unit id="Compare file" xml:space="preserve"> <source>Compare file</source> - <target state="translated">Dosya karşılaştır</target> + <target>Dosya karşılaştır</target> <note>server test step</note> </trans-unit> - <trans-unit id="Compare security codes with your contacts." xml:space="preserve" approved="no"> + <trans-unit id="Compare security codes with your contacts." xml:space="preserve"> <source>Compare security codes with your contacts.</source> - <target state="translated">Güvenlik kodlarını kişilerinle karşılaştır.</target> + <target>Güvenlik kodlarını kişilerinle karşılaştır.</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Configure ICE servers" xml:space="preserve" approved="no"> + <trans-unit id="Configure ICE servers" xml:space="preserve"> <source>Configure ICE servers</source> - <target state="translated">ICE sunucularını ayarla</target> + <target>ICE sunucularını ayarla</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Confirm" xml:space="preserve" approved="no"> + <trans-unit id="Confirm" xml:space="preserve"> <source>Confirm</source> - <target state="translated">Onayla</target> + <target>Onayla</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Confirm Passcode" xml:space="preserve" approved="no"> + <trans-unit id="Confirm Passcode" xml:space="preserve"> <source>Confirm Passcode</source> - <target state="translated">Parolayı onayla</target> + <target>Parolayı onayla</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Confirm database upgrades" xml:space="preserve" approved="no"> + <trans-unit id="Confirm database upgrades" xml:space="preserve"> <source>Confirm database upgrades</source> - <target state="translated">Veritabanı geliştirmelerini onayla</target> + <target>Veritabanı geliştirmelerini onayla</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Confirm new passphrase…" xml:space="preserve" approved="no"> + <trans-unit id="Confirm new passphrase…" xml:space="preserve"> <source>Confirm new passphrase…</source> - <target state="translated">Yeni parolayı onayla…</target> + <target>Yeni parolayı onayla…</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Confirm password" xml:space="preserve" approved="no"> + <trans-unit id="Confirm password" xml:space="preserve"> <source>Confirm password</source> - <target state="translated">Şifreyi onayla</target> + <target>Şifreyi onayla</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Connect" xml:space="preserve" approved="no"> + <trans-unit id="Connect" xml:space="preserve"> <source>Connect</source> - <target state="translated">Bağlan</target> + <target>Bağlan</target> <note>server test step</note> </trans-unit> - <trans-unit id="Connect via contact link?" xml:space="preserve"> - <source>Connect via contact link?</source> + <trans-unit id="Connect automatically" xml:space="preserve"> + <source>Connect automatically</source> + <target>Otomatik olarak bağlan</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Connect via group link?" xml:space="preserve"> - <source>Connect via group link?</source> + <trans-unit id="Connect incognito" xml:space="preserve"> + <source>Connect incognito</source> + <target>Gizli bağlan</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Connect via link" xml:space="preserve" approved="no"> + <trans-unit id="Connect to desktop" xml:space="preserve"> + <source>Connect to desktop</source> + <target>Bilgisayara bağlan</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="Connect to yourself?" xml:space="preserve"> + <source>Connect to yourself?</source> + <target>Kendine mi bağlanacaksın?</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="Connect to yourself? This is your own SimpleX address!" xml:space="preserve"> + <source>Connect to yourself? +This is your own SimpleX address!</source> + <target>Kendine mi bağlanacaksın? +Bu senin kendi SimpleX adresin!</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="Connect to yourself? This is your own one-time link!" xml:space="preserve"> + <source>Connect to yourself? +This is your own one-time link!</source> + <target>Kendine mi bağlanacaksın? +Bu senin kendi tek kullanımlık bağlantın!</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="Connect via contact address" xml:space="preserve"> + <source>Connect via contact address</source> + <target>Kişi adresi aracılığıyla bağlan</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 state="translated">Bağlantı aracılığıyla bağlan</target> + <target>Bağlantı aracılığıyla bağlan</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Connect via link / QR code" xml:space="preserve"> - <source>Connect via link / QR code</source> + <trans-unit id="Connect via one-time link" xml:space="preserve"> + <source>Connect via one-time link</source> + <target>Tek kullanımlık bağlantı aracılığıyla bağlan</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> + <trans-unit id="Connect with %@" xml:space="preserve"> + <source>Connect with %@</source> + <target>%@ ile bağlan</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Connecting server…" xml:space="preserve" approved="no"> + <trans-unit id="Connected desktop" xml:space="preserve"> + <source>Connected desktop</source> + <target>Bilgisayara bağlandı</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="Connected to desktop" xml:space="preserve"> + <source>Connected to desktop</source> + <target>Bilgisayara bağlanıldı</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="Connecting server…" xml:space="preserve"> <source>Connecting to server…</source> - <target state="translated">Sunucuya bağlanıyor…</target> + <target>Sunucuya bağlanıyor…</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Connecting server… (error: %@)" xml:space="preserve" approved="no"> + <trans-unit id="Connecting server… (error: %@)" xml:space="preserve"> <source>Connecting to server… (error: %@)</source> - <target state="translated">Sunucuya bağlanıyor…(hata:%@)</target> + <target>Sunucuya bağlanıyor…(hata:%@)</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Connection" xml:space="preserve" approved="no"> + <trans-unit id="Connecting to desktop" xml:space="preserve"> + <source>Connecting to desktop</source> + <target>Bilgisayara bağlanıyor</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="Connection" xml:space="preserve"> <source>Connection</source> - <target state="translated">Bağlantı</target> + <target>Bağlantı</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Connection error" xml:space="preserve" approved="no"> + <trans-unit id="Connection error" xml:space="preserve"> <source>Connection error</source> - <target state="translated">Bağlantı hatası</target> + <target>Bağlantı hatası</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Connection error (AUTH)" xml:space="preserve" approved="no"> + <trans-unit id="Connection error (AUTH)" xml:space="preserve"> <source>Connection error (AUTH)</source> - <target state="translated">Bağlantı hatası (DOĞRULAMA)</target> + <target>Bağlantı hatası (DOĞRULAMA)</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Connection request" xml:space="preserve"> - <source>Connection request</source> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="Connection request sent!" xml:space="preserve" approved="no"> + <trans-unit id="Connection request sent!" xml:space="preserve"> <source>Connection request sent!</source> - <target state="translated">Bağlantı daveti gönderildi!</target> + <target>Bağlantı daveti gönderildi!</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Connection timeout" xml:space="preserve" approved="no"> + <trans-unit id="Connection terminated" xml:space="preserve"> + <source>Connection terminated</source> + <target>Bağlantı sonlandırılmış</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="Connection timeout" xml:space="preserve"> <source>Connection timeout</source> - <target state="translated">Bağlantı süresi geçmiş</target> + <target>Bağlantı süresi geçmiş</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Contact allows" xml:space="preserve" approved="no"> + <trans-unit id="Contact allows" xml:space="preserve"> <source>Contact allows</source> - <target state="translated">Kişi izin veriyor</target> + <target>Kişi izin veriyor</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Contact already exists" xml:space="preserve" approved="no"> + <trans-unit id="Contact already exists" xml:space="preserve"> <source>Contact already exists</source> - <target state="translated">Kişi zaten mevcut</target> + <target>Kişi zaten mevcut</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Contact and all messages will be deleted - this cannot be undone!" xml:space="preserve"> - <source>Contact and all messages will be deleted - this cannot be undone!</source> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="Contact hidden:" xml:space="preserve" approved="no"> + <trans-unit id="Contact hidden:" xml:space="preserve"> <source>Contact hidden:</source> - <target state="translated">Kişi gizli:</target> + <target>Kişi gizli:</target> <note>notification</note> </trans-unit> - <trans-unit id="Contact is connected" xml:space="preserve" approved="no"> + <trans-unit id="Contact is connected" xml:space="preserve"> <source>Contact is connected</source> - <target state="translated">Kişi bağlandı</target> + <target>Kişi bağlandı</target> <note>notification</note> </trans-unit> - <trans-unit id="Contact is not connected yet!" xml:space="preserve" approved="no"> + <trans-unit id="Contact is not connected yet!" xml:space="preserve"> <source>Contact is not connected yet!</source> - <target state="translated">Kişi şuan bağlanmadı!</target> + <target>Kişi şuan bağlanmadı!</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Contact name" xml:space="preserve" approved="no"> + <trans-unit id="Contact name" xml:space="preserve"> <source>Contact name</source> - <target state="translated">Kişi adı</target> + <target>Kişi adı</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Contact preferences" xml:space="preserve" approved="no"> + <trans-unit id="Contact preferences" xml:space="preserve"> <source>Contact preferences</source> - <target state="translated">Kişi tercihleri</target> + <target>Kişi tercihleri</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Contacts" xml:space="preserve" approved="no"> + <trans-unit id="Contacts" xml:space="preserve"> <source>Contacts</source> - <target state="translated">Kişiler</target> + <target>Kişiler</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Contacts can mark messages for deletion; you will be able to view them." xml:space="preserve" approved="no"> + <trans-unit id="Contacts can mark messages for deletion; you will be able to view them." xml:space="preserve"> <source>Contacts can mark messages for deletion; you will be able to view them.</source> - <target state="translated">Kişiler silinmesi için mesajları işaretleyebilir; onları görüntüleyebilirsin.</target> + <target>Kişiler silinmesi için mesajları işaretleyebilir; onları görüntüleyebilirsin.</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Continue" xml:space="preserve" approved="no"> + <trans-unit id="Continue" xml:space="preserve"> <source>Continue</source> - <target state="translated">Devam et</target> + <target>Devam et</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Copy" xml:space="preserve" approved="no"> + <trans-unit id="Copy" xml:space="preserve"> <source>Copy</source> - <target state="translated">Kopyala</target> + <target>Kopyala</target> <note>chat item action</note> </trans-unit> - <trans-unit id="Core version: v%@" xml:space="preserve" approved="no"> + <trans-unit id="Core version: v%@" xml:space="preserve"> <source>Core version: v%@</source> - <target state="translated">Çekirdek sürümü: v%@</target> + <target>Çekirdek sürümü: v%@</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Create" xml:space="preserve" approved="no"> + <trans-unit id="Correct name to %@?" xml:space="preserve"> + <source>Correct name to %@?</source> + <target>İsim %@ olarak düzeltilsin mi?</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="Create" xml:space="preserve"> <source>Create</source> - <target state="translated">Oluştur</target> + <target>Oluştur</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Create SimpleX address" xml:space="preserve" approved="no"> + <trans-unit id="Create SimpleX address" xml:space="preserve"> <source>Create SimpleX address</source> - <target state="translated">SimpleX adresi oluştur</target> + <target>SimpleX adresi oluştur</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Create an address to let people connect with you." xml:space="preserve" approved="no"> + <trans-unit id="Create a group using a random profile." xml:space="preserve"> + <source>Create a group using a random profile.</source> + <target>Rasgele profil kullanarak grup oluştur.</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="Create an address to let people connect with you." xml:space="preserve"> <source>Create an address to let people connect with you.</source> - <target state="translated">İnsanların seninle bağlanması için bir adres oluştur.</target> + <target>İnsanların seninle bağlanması için bir adres oluştur.</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Create file" xml:space="preserve" approved="no"> + <trans-unit id="Create file" xml:space="preserve"> <source>Create file</source> - <target state="translated">Dosya oluştur</target> + <target>Dosya oluştur</target> <note>server test step</note> </trans-unit> - <trans-unit id="Create group link" xml:space="preserve" approved="no"> + <trans-unit id="Create group" xml:space="preserve"> + <source>Create group</source> + <target>Grup oluştur</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="Create group link" xml:space="preserve"> <source>Create group link</source> - <target state="translated">Grup bağlantısı oluştur</target> + <target>Grup bağlantısı oluştur</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Create link" xml:space="preserve" approved="no"> + <trans-unit id="Create link" xml:space="preserve"> <source>Create link</source> - <target state="translated">Bağlantı oluştur</target> + <target>Bağlantı oluştur</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Create one-time invitation link" xml:space="preserve"> - <source>Create one-time invitation link</source> + <trans-unit id="Create new profile in [desktop app](https://simplex.chat/downloads/). 💻" xml:space="preserve"> + <source>Create new profile in [desktop app](https://simplex.chat/downloads/). 💻</source> + <target>[bilgisayar uygulaması] nda yeni bir profil oluştur(https://simplex.chat/downloads/). 💻</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Create queue" xml:space="preserve" approved="no"> + <trans-unit id="Create profile" xml:space="preserve"> + <source>Create profile</source> + <target>Profil oluştur</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="Create queue" xml:space="preserve"> <source>Create queue</source> - <target state="translated">Sıra oluştur</target> + <target>Sıra oluştur</target> <note>server test step</note> </trans-unit> - <trans-unit id="Create secret group" xml:space="preserve" approved="no"> + <trans-unit id="Create secret group" xml:space="preserve"> <source>Create secret group</source> - <target state="translated">Gizli grup oluştur</target> + <target>Gizli grup oluştur</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Create your profile" xml:space="preserve" approved="no"> + <trans-unit id="Create your profile" xml:space="preserve"> <source>Create your profile</source> - <target state="translated">Profilini oluştur</target> + <target>Profilini oluştur</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Created on %@" xml:space="preserve" approved="no"> - <source>Created on %@</source> - <target state="translated">%@ de oluşturuldu</target> + <trans-unit id="Created at" xml:space="preserve"> + <source>Created at</source> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Current Passcode" xml:space="preserve" approved="no"> - <source>Current Passcode</source> - <target state="translated">Şu anki şifre</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="Current passphrase…" xml:space="preserve" approved="no"> - <source>Current passphrase…</source> - <target state="translated">Şu anki parola…</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="Currently maximum supported file size is %@." xml:space="preserve" approved="no"> - <source>Currently maximum supported file size is %@.</source> - <target state="translated">Şu anki maksimum desteklenen dosya boyutu %@ kadardır.</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="Custom time" xml:space="preserve" approved="no"> - <source>Custom time</source> - <target state="translated">Özel saat</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="Dark" xml:space="preserve" approved="no"> - <source>Dark</source> - <target state="translated">Karanlık</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="Database ID" xml:space="preserve" approved="no"> - <source>Database ID</source> - <target state="translated">Veritabanı kimliği</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="Database ID: %d" xml:space="preserve" approved="no"> - <source>Database ID: %d</source> - <target state="translated">Veritabanı kimliği: %d</target> + <trans-unit id="Created at: %@" xml:space="preserve"> + <source>Created at: %@</source> <note>copied message info</note> </trans-unit> - <trans-unit id="Database IDs and Transport isolation option." xml:space="preserve" approved="no"> + <trans-unit id="Created on %@" xml:space="preserve"> + <source>Created on %@</source> + <target>%@ de oluşturuldu</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="Creating link…" xml:space="preserve"> + <source>Creating link…</source> + <target>Link oluşturuluyor…</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="Current Passcode" xml:space="preserve"> + <source>Current Passcode</source> + <target>Şu anki şifre</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="Current passphrase…" xml:space="preserve"> + <source>Current passphrase…</source> + <target>Şu anki parola…</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="Currently maximum supported file size is %@." xml:space="preserve"> + <source>Currently maximum supported file size is %@.</source> + <target>Şu anki maksimum desteklenen dosya boyutu %@ kadardır.</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="Custom time" xml:space="preserve"> + <source>Custom time</source> + <target>Özel saat</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="Dark" xml:space="preserve"> + <source>Dark</source> + <target>Karanlık</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="Database ID" xml:space="preserve"> + <source>Database ID</source> + <target>Veritabanı kimliği</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="Database ID: %d" xml:space="preserve"> + <source>Database ID: %d</source> + <target>Veritabanı kimliği: %d</target> + <note>copied message info</note> + </trans-unit> + <trans-unit id="Database IDs and Transport isolation option." xml:space="preserve"> <source>Database IDs and Transport isolation option.</source> - <target state="translated">Veritabanı kimlikleri ve Taşıma izolasyonu seçeneği.</target> + <target>Veritabanı kimlikleri ve Taşıma izolasyonu seçeneği.</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Database downgrade" xml:space="preserve" approved="no"> + <trans-unit id="Database downgrade" xml:space="preserve"> <source>Database downgrade</source> - <target state="translated">Veritabanı sürüm düşürme</target> + <target>Veritabanı sürüm düşürme</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Database encrypted!" xml:space="preserve" approved="no"> + <trans-unit id="Database encrypted!" xml:space="preserve"> <source>Database encrypted!</source> - <target state="translated">Veritabanı şifrelendi!</target> + <target>Veritabanı şifrelendi!</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Database encryption passphrase will be updated and stored in the keychain. " xml:space="preserve" approved="no"> + <trans-unit id="Database encryption passphrase will be updated and stored in the keychain. " xml:space="preserve"> <source>Database encryption passphrase will be updated and stored in the keychain. </source> - <target state="translated">Veritabanı şifreleme parolası güncellenecek ve Anahtar Zinciri'nde saklanacaktır. + <target>Veritabanı şifreleme parolası güncellenecek ve Anahtar Zinciri'nde saklanacaktır. </target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Database encryption passphrase will be updated. " xml:space="preserve" approved="no"> + <trans-unit id="Database encryption passphrase will be updated. " xml:space="preserve"> <source>Database encryption passphrase will be updated. </source> - <target state="translated">Veritabanı şifreleme parolası güncellenecektir. + <target>Veritabanı şifreleme parolası güncellenecektir. </target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Database error" xml:space="preserve" approved="no"> + <trans-unit id="Database error" xml:space="preserve"> <source>Database error</source> - <target state="translated">Veritabanı hatası</target> + <target>Veritabanı hatası</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Database is encrypted using a random passphrase, you can change it." xml:space="preserve" approved="no"> + <trans-unit id="Database is encrypted using a random passphrase, you can change it." xml:space="preserve"> <source>Database is encrypted using a random passphrase, you can change it.</source> - <target state="translated">Veritabanı rastgele bir parola kullanılarak şifrelenir, bunu değiştirebilirsiniz.</target> + <target>Veritabanı rastgele bir parola kullanılarak şifrelenir, bunu değiştirebilirsiniz.</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Database is encrypted using a random passphrase. Please change it before exporting." xml:space="preserve" approved="no"> + <trans-unit id="Database is encrypted using a random passphrase. Please change it before exporting." xml:space="preserve"> <source>Database is encrypted using a random passphrase. Please change it before exporting.</source> - <target state="translated">Veritabanı rastgele bir parola kullanılarak şifrelenir. Lütfen dışa aktarmadan önce değiştirin.</target> + <target>Veritabanı rastgele bir parola kullanılarak şifrelenir. Lütfen dışa aktarmadan önce değiştirin.</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Database passphrase" xml:space="preserve" approved="no"> + <trans-unit id="Database passphrase" xml:space="preserve"> <source>Database passphrase</source> - <target state="translated">Veritabanı parolası</target> + <target>Veritabanı parolası</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Database passphrase & export" xml:space="preserve" approved="no"> + <trans-unit id="Database passphrase & export" xml:space="preserve"> <source>Database passphrase & export</source> - <target state="translated">Veritabanı parolası ve dışa aktarma</target> + <target>Veritabanı parolası ve dışa aktarma</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Database passphrase is different from saved in the keychain." xml:space="preserve" approved="no"> + <trans-unit id="Database passphrase is different from saved in the keychain." xml:space="preserve"> <source>Database passphrase is different from saved in the keychain.</source> - <target state="translated">Veritabanı parolası Anahtar Zinciri'nde kayıtlı olandan farklıdır.</target> + <target>Veritabanı parolası Anahtar Zinciri'nde kayıtlı olandan farklıdır.</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Database passphrase is required to open chat." xml:space="preserve" approved="no"> + <trans-unit id="Database passphrase is required to open chat." xml:space="preserve"> <source>Database passphrase is required to open chat.</source> - <target state="translated">Sohbeti açmak için veritabanı parolası gereklidir.</target> + <target>Sohbeti açmak için veritabanı parolası gereklidir.</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Database upgrade" xml:space="preserve" approved="no"> + <trans-unit id="Database upgrade" xml:space="preserve"> <source>Database upgrade</source> - <target state="translated">Veritabanı yükseltmesi</target> + <target>Veritabanı yükseltmesi</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Database will be encrypted and the passphrase stored in the keychain. " xml:space="preserve" approved="no"> + <trans-unit id="Database will be encrypted and the passphrase stored in the keychain. " xml:space="preserve"> <source>Database will be encrypted and the passphrase stored in the keychain. </source> - <target state="translated">Veritabanı şifrelenecek ve parola Anahtar Zinciri'nde saklanacaktır. + <target>Veritabanı şifrelenecek ve parola Anahtar Zinciri'nde saklanacaktır. </target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Database will be encrypted. " xml:space="preserve" approved="no"> + <trans-unit id="Database will be encrypted. " xml:space="preserve"> <source>Database will be encrypted. </source> - <target state="translated">Veritabanı şifrelenecektir. + <target>Veritabanı şifrelenecektir. </target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Database will be migrated when the app restarts" xml:space="preserve" approved="no"> + <trans-unit id="Database will be migrated when the app restarts" xml:space="preserve"> <source>Database will be migrated when the app restarts</source> - <target state="translated">Uygulama yeniden başlatıldığında veritabanı taşınacaktır</target> + <target>Uygulama yeniden başlatıldığında veritabanı taşınacaktır</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Decentralized" xml:space="preserve" approved="no"> + <trans-unit id="Decentralized" xml:space="preserve"> <source>Decentralized</source> - <target state="translated">Merkezi Olmayan</target> + <target>Merkezi Olmayan</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Decryption error" xml:space="preserve" approved="no"> + <trans-unit id="Decryption error" xml:space="preserve"> <source>Decryption error</source> - <target state="translated">Şifre çözme hatası</target> + <target>Şifre çözme hatası</target> <note>message decrypt error item</note> </trans-unit> - <trans-unit id="Delete" xml:space="preserve" approved="no"> + <trans-unit id="Delete" xml:space="preserve"> <source>Delete</source> - <target state="translated">Sil</target> + <target>Sil</target> <note>chat item action</note> </trans-unit> - <trans-unit id="Delete Contact" xml:space="preserve" approved="no"> + <trans-unit id="Delete %lld messages?" xml:space="preserve"> + <source>Delete %lld messages?</source> + <target>%lld mesajları silinsin mi?</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="Delete Contact" xml:space="preserve"> <source>Delete Contact</source> - <target state="translated">Kişiyi sil</target> + <target>Kişiyi sil</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Delete address" xml:space="preserve" approved="no"> + <trans-unit id="Delete address" xml:space="preserve"> <source>Delete address</source> - <target state="translated">Adresi sil</target> + <target>Adresi sil</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Delete address?" xml:space="preserve" approved="no"> + <trans-unit id="Delete address?" xml:space="preserve"> <source>Delete address?</source> - <target state="translated">Adres silinsin mi?</target> + <target>Adres silinsin mi?</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Delete after" xml:space="preserve" approved="no"> + <trans-unit id="Delete after" xml:space="preserve"> <source>Delete after</source> - <target state="translated">Sonra sil</target> + <target>Sonra sil</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Delete all files" xml:space="preserve" approved="no"> + <trans-unit id="Delete all files" xml:space="preserve"> <source>Delete all files</source> - <target state="translated">Bütün dosyaları sil</target> + <target>Bütün dosyaları sil</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Delete archive" xml:space="preserve" approved="no"> + <trans-unit id="Delete and notify contact" xml:space="preserve"> + <source>Delete and notify contact</source> + <target>Sil ve kişiye bildir</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="Delete archive" xml:space="preserve"> <source>Delete archive</source> - <target state="translated">Arşivi sil</target> + <target>Arşivi sil</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Delete chat archive?" xml:space="preserve" approved="no"> + <trans-unit id="Delete chat archive?" xml:space="preserve"> <source>Delete chat archive?</source> - <target state="translated">Sohbet arşivi silinsin mi?</target> + <target>Sohbet arşivi silinsin mi?</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Delete chat profile" xml:space="preserve" approved="no"> + <trans-unit id="Delete chat profile" xml:space="preserve"> <source>Delete chat profile</source> - <target state="translated">Sohbet profilini sil</target> + <target>Sohbet profilini sil</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Delete chat profile?" xml:space="preserve" approved="no"> + <trans-unit id="Delete chat profile?" xml:space="preserve"> <source>Delete chat profile?</source> - <target state="translated">Sohbet profili silinsin mi?</target> + <target>Sohbet profili silinsin mi?</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Delete connection" xml:space="preserve" approved="no"> + <trans-unit id="Delete connection" xml:space="preserve"> <source>Delete connection</source> - <target state="translated">Bağlantıyı sil</target> + <target>Bağlantıyı sil</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Delete contact" xml:space="preserve" approved="no"> + <trans-unit id="Delete contact" xml:space="preserve"> <source>Delete contact</source> - <target state="translated">Kişiyi sil</target> + <target>Kişiyi sil</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Delete contact?" xml:space="preserve"> - <source>Delete contact?</source> + <trans-unit id="Delete contact? This cannot be undone!" xml:space="preserve"> + <source>Delete contact? +This cannot be undone!</source> + <target>Kişi silinsin mi? +Bu geri alınamaz!</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Delete database" xml:space="preserve" approved="no"> + <trans-unit id="Delete database" xml:space="preserve"> <source>Delete database</source> - <target state="translated">Veritabanını sil</target> + <target>Veritabanını sil</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Delete file" xml:space="preserve" approved="no"> + <trans-unit id="Delete file" xml:space="preserve"> <source>Delete file</source> - <target state="translated">Dosyayı sil</target> + <target>Dosyayı sil</target> <note>server test step</note> </trans-unit> - <trans-unit id="Delete files and media?" xml:space="preserve" approved="no"> + <trans-unit id="Delete files and media?" xml:space="preserve"> <source>Delete files and media?</source> - <target state="translated">Dosyalar ve medya silinsin mi?</target> + <target>Dosyalar ve medya silinsin mi?</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Delete files for all chat profiles" xml:space="preserve" approved="no"> + <trans-unit id="Delete files for all chat profiles" xml:space="preserve"> <source>Delete files for all chat profiles</source> - <target state="translated">Bütün sohbet profilleri için dosyaları sil</target> + <target>Bütün sohbet profilleri için dosyaları sil</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Delete for everyone" xml:space="preserve" approved="no"> + <trans-unit id="Delete for everyone" xml:space="preserve"> <source>Delete for everyone</source> - <target state="translated">Herkesten sil</target> + <target>Herkesten sil</target> <note>chat feature</note> </trans-unit> - <trans-unit id="Delete for me" xml:space="preserve" approved="no"> + <trans-unit id="Delete for me" xml:space="preserve"> <source>Delete for me</source> - <target state="translated">Benden sil</target> + <target>Benden sil</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Delete group" xml:space="preserve" approved="no"> + <trans-unit id="Delete group" xml:space="preserve"> <source>Delete group</source> - <target state="translated">Grubu sil</target> + <target>Grubu sil</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Delete group?" xml:space="preserve" approved="no"> + <trans-unit id="Delete group?" xml:space="preserve"> <source>Delete group?</source> - <target state="translated">Grup silinsin mi?</target> + <target>Grup silinsin mi?</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Delete invitation" xml:space="preserve" approved="no"> + <trans-unit id="Delete invitation" xml:space="preserve"> <source>Delete invitation</source> - <target state="translated">Daveti sil</target> + <target>Daveti sil</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Delete link" xml:space="preserve" approved="no"> + <trans-unit id="Delete link" xml:space="preserve"> <source>Delete link</source> - <target state="translated">Bağlantıyı sil</target> + <target>Bağlantıyı sil</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Delete link?" xml:space="preserve" approved="no"> + <trans-unit id="Delete link?" xml:space="preserve"> <source>Delete link?</source> - <target state="translated">Bağlantı silinsin mi?</target> + <target>Bağlantı silinsin mi?</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Delete member message?" xml:space="preserve" approved="no"> + <trans-unit id="Delete member message?" xml:space="preserve"> <source>Delete member message?</source> - <target state="translated">Kişinin mesajı silinsin mi?</target> + <target>Kişinin mesajı silinsin mi?</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Delete message?" xml:space="preserve" approved="no"> + <trans-unit id="Delete message?" xml:space="preserve"> <source>Delete message?</source> - <target state="translated">Mesaj silinsin mi?</target> + <target>Mesaj silinsin mi?</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Delete messages" xml:space="preserve" approved="no"> + <trans-unit id="Delete messages" xml:space="preserve"> <source>Delete messages</source> - <target state="translated">Mesajları sil</target> + <target>Mesajları sil</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Delete messages after" xml:space="preserve" approved="no"> + <trans-unit id="Delete messages after" xml:space="preserve"> <source>Delete messages after</source> - <target state="translated">Mesajları sonra sil</target> + <target>Mesajları sonra sil</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Delete old database" xml:space="preserve" approved="no"> + <trans-unit id="Delete old database" xml:space="preserve"> <source>Delete old database</source> - <target state="translated">Eski veritabanını sil</target> + <target>Eski veritabanını sil</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Delete old database?" xml:space="preserve" approved="no"> + <trans-unit id="Delete old database?" xml:space="preserve"> <source>Delete old database?</source> - <target state="translated">Eski veritabanı silinsin mi?</target> + <target>Eski veritabanı silinsin mi?</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Delete pending connection" xml:space="preserve" approved="no"> + <trans-unit id="Delete pending connection" xml:space="preserve"> <source>Delete pending connection</source> - <target state="translated">Bekleyen bağlantıyı sil</target> + <target>Bekleyen bağlantıyı sil</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Delete pending connection?" xml:space="preserve" approved="no"> + <trans-unit id="Delete pending connection?" xml:space="preserve"> <source>Delete pending connection?</source> - <target state="translated">Bekleyen bağlantı silinsin mi?</target> + <target>Bekleyen bağlantı silinsin mi?</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Delete profile" xml:space="preserve" approved="no"> + <trans-unit id="Delete profile" xml:space="preserve"> <source>Delete profile</source> - <target state="translated">Profili sil</target> + <target>Profili sil</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Delete queue" xml:space="preserve" approved="no"> + <trans-unit id="Delete queue" xml:space="preserve"> <source>Delete queue</source> - <target state="translated">Sırayı sil</target> + <target>Sırayı sil</target> <note>server test step</note> </trans-unit> - <trans-unit id="Delete user profile?" xml:space="preserve" approved="no"> + <trans-unit id="Delete user profile?" xml:space="preserve"> <source>Delete user profile?</source> - <target state="translated">Kullanıcı profili silinsin mi?</target> + <target>Kullanıcı profili silinsin mi?</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Deleted at" xml:space="preserve" approved="no"> + <trans-unit id="Deleted at" xml:space="preserve"> <source>Deleted at</source> - <target state="translated">de silindi</target> + <target>de silindi</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Deleted at: %@" xml:space="preserve" approved="no"> + <trans-unit id="Deleted at: %@" xml:space="preserve"> <source>Deleted at: %@</source> - <target state="translated">%@ de silindi</target> + <target>%@ de silindi</target> <note>copied message info</note> </trans-unit> - <trans-unit id="Delivery receipts are disabled!" xml:space="preserve" approved="no"> + <trans-unit id="Delivery" xml:space="preserve"> + <source>Delivery</source> + <target>Teslimat</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="Delivery receipts are disabled!" xml:space="preserve"> <source>Delivery receipts are disabled!</source> - <target state="translated">Mesaj gönderim bilgisi devre dışı!</target> + <target>Mesaj gönderim bilgisi devre dışı!</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Delivery receipts will be enabled for all contacts in all visible chat profiles." xml:space="preserve"> - <source>Delivery receipts will be enabled for all contacts in all visible chat profiles.</source> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="Delivery receipts will be enabled for all contacts." xml:space="preserve"> - <source>Delivery receipts will be enabled for all contacts.</source> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="Delivery receipts!" xml:space="preserve" approved="no"> + <trans-unit id="Delivery receipts!" xml:space="preserve"> <source>Delivery receipts!</source> - <target state="translated">Mesaj gönderildi bilgisi!</target> + <target>Mesaj gönderildi bilgisi!</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Description" xml:space="preserve" approved="no"> + <trans-unit id="Description" xml:space="preserve"> <source>Description</source> - <target state="translated">Açıklama</target> + <target>Açıklama</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Develop" xml:space="preserve" approved="no"> + <trans-unit id="Desktop address" xml:space="preserve"> + <source>Desktop address</source> + <target>Bilgisayar adresi</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="Desktop app version %@ is not compatible with this app." xml:space="preserve"> + <source>Desktop app version %@ is not compatible with this app.</source> + <target>Masaüstü uygulaması sürümü %@ bu uygulama ile uyumlu değildir.</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="Desktop devices" xml:space="preserve"> + <source>Desktop devices</source> + <target>Bilgisayar cihazları</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="Develop" xml:space="preserve"> <source>Develop</source> - <target state="translated">Geliştir</target> + <target>Geliştir</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Developer tools" xml:space="preserve" approved="no"> + <trans-unit id="Developer tools" xml:space="preserve"> <source>Developer tools</source> - <target state="translated">Geliştirici araçları</target> + <target>Geliştirici araçları</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Device" xml:space="preserve" approved="no"> + <trans-unit id="Device" xml:space="preserve"> <source>Device</source> - <target state="translated">Cihaz</target> + <target>Cihaz</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Device authentication is disabled. Turning off SimpleX Lock." xml:space="preserve" approved="no"> + <trans-unit id="Device authentication is disabled. Turning off SimpleX Lock." xml:space="preserve"> <source>Device authentication is disabled. Turning off SimpleX Lock.</source> - <target state="translated">Cihaz kimlik doğrulaması devre dışı. SimpleX Kilidi kapatılıyor.</target> + <target>Cihaz kimlik doğrulaması devre dışı. SimpleX Kilidi kapatılıyor.</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Device authentication is not enabled. You can turn on SimpleX Lock via Settings, once you enable device authentication." xml:space="preserve" approved="no"> + <trans-unit id="Device authentication is not enabled. You can turn on SimpleX Lock via Settings, once you enable device authentication." xml:space="preserve"> <source>Device authentication is not enabled. You can turn on SimpleX Lock via Settings, once you enable device authentication.</source> - <target state="translated">Cihaz kimlik doğrulaması etkin değil. Cihaz kimlik doğrulamasını etkinleştirdikten sonra SimpleX Kilidini Ayarlar üzerinden açabilirsiniz.</target> + <target>Cihaz kimlik doğrulaması etkin değil. Cihaz kimlik doğrulamasını etkinleştirdikten sonra SimpleX Kilidini Ayarlar üzerinden açabilirsiniz.</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Different names, avatars and transport isolation." xml:space="preserve" approved="no"> + <trans-unit id="Different names, avatars and transport isolation." xml:space="preserve"> <source>Different names, avatars and transport isolation.</source> - <target state="translated">Farklı isimler, profil fotoğrafları ve taşıma izolasyonu.</target> + <target>Farklı isimler, profil fotoğrafları ve taşıma izolasyonu.</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Direct messages" xml:space="preserve" approved="no"> + <trans-unit id="Direct messages" xml:space="preserve"> <source>Direct messages</source> - <target state="translated">Doğrudan mesajlar</target> + <target>Doğrudan mesajlar</target> <note>chat feature</note> </trans-unit> - <trans-unit id="Direct messages between members are prohibited in this group." xml:space="preserve" approved="no"> + <trans-unit id="Direct messages between members are prohibited in this group." xml:space="preserve"> <source>Direct messages between members are prohibited in this group.</source> - <target state="translated">Bu grupta üyeler arasında direkt mesajlaşma yasaktır.</target> + <target>Bu grupta üyeler arasında direkt mesajlaşma yasaktır.</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Disable SimpleX Lock" xml:space="preserve" approved="no"> + <trans-unit id="Disable (keep overrides)" xml:space="preserve"> + <source>Disable (keep overrides)</source> + <target>Devre dışı bırak (geçersiz kılmaları koru)</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="Disable SimpleX Lock" xml:space="preserve"> <source>Disable SimpleX Lock</source> - <target state="translated">SimpleX Kilidini devre dışı bırak</target> + <target>SimpleX Kilidini devre dışı bırak</target> <note>authentication reason</note> </trans-unit> - <trans-unit id="Disappearing message" xml:space="preserve" approved="no"> - <source>Disappearing message</source> - <target state="translated">Kaybolan mesaj</target> + <trans-unit id="Disable for all" xml:space="preserve"> + <source>Disable for all</source> + <target>Herkes için devre dışı bırak</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Disappearing messages" xml:space="preserve" approved="no"> + <trans-unit id="Disappearing message" xml:space="preserve"> + <source>Disappearing message</source> + <target>Kaybolan mesaj</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="Disappearing messages" xml:space="preserve"> <source>Disappearing messages</source> - <target state="translated">Kaybolan mesajlar</target> + <target>Kaybolan mesajlar</target> <note>chat feature</note> </trans-unit> - <trans-unit id="Disappearing messages are prohibited in this chat." xml:space="preserve" approved="no"> + <trans-unit id="Disappearing messages are prohibited in this chat." xml:space="preserve"> <source>Disappearing messages are prohibited in this chat.</source> - <target state="translated">Kaybolan mesajlar bu sohbette yasaklanmış.</target> + <target>Kaybolan mesajlar bu sohbette yasaklanmış.</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Disappearing messages are prohibited in this group." xml:space="preserve" approved="no"> + <trans-unit id="Disappearing messages are prohibited in this group." xml:space="preserve"> <source>Disappearing messages are prohibited in this group.</source> - <target state="translated">Kaybolan mesajlar bu grupta yasaklanmış.</target> + <target>Kaybolan mesajlar bu grupta yasaklanmış.</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Disappears at" xml:space="preserve" approved="no"> + <trans-unit id="Disappears at" xml:space="preserve"> <source>Disappears at</source> - <target state="translated">da kaybolur</target> + <target>da kaybolur</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Disappears at: %@" xml:space="preserve" approved="no"> + <trans-unit id="Disappears at: %@" xml:space="preserve"> <source>Disappears at: %@</source> - <target state="translated">%@ da kaybolur</target> + <target>%@ da kaybolur</target> <note>copied message info</note> </trans-unit> - <trans-unit id="Disconnect" xml:space="preserve" approved="no"> + <trans-unit id="Disconnect" xml:space="preserve"> <source>Disconnect</source> - <target state="translated">Bağlantıyı kes</target> + <target>Bağlantıyı kes</target> <note>server test step</note> </trans-unit> - <trans-unit id="Display name" xml:space="preserve"> - <source>Display name</source> + <trans-unit id="Disconnect desktop?" xml:space="preserve"> + <source>Disconnect desktop?</source> + <target>Bilgisayarla bağlantı kesilsin mi?</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Display name:" xml:space="preserve"> - <source>Display name:</source> + <trans-unit id="Discover and join groups" xml:space="preserve"> + <source>Discover and join groups</source> + <target>Keşfet ve gruplara katıl</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Do NOT use SimpleX for emergency calls." xml:space="preserve" approved="no"> + <trans-unit id="Discover via local network" xml:space="preserve"> + <source>Discover via local network</source> + <target>Yerel ağ aracılığıyla keşfet</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="Do NOT use SimpleX for emergency calls." xml:space="preserve"> <source>Do NOT use SimpleX for emergency calls.</source> - <target state="translated">Acil aramalar için SimpleX'i KULLANMAYIN.</target> + <target>Acil aramalar için SimpleX'i KULLANMAYIN.</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Do it later" xml:space="preserve" approved="no"> + <trans-unit id="Do it later" xml:space="preserve"> <source>Do it later</source> - <target state="translated">Sonra yap</target> + <target>Sonra yap</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Don't create address" xml:space="preserve" approved="no"> + <trans-unit id="Do not send history to new members." xml:space="preserve"> + <source>Do not send history to new members.</source> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="Don't create address" xml:space="preserve"> <source>Don't create address</source> - <target state="translated">Adres oluşturma</target> + <target>Adres oluşturma</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Don't show again" xml:space="preserve" approved="no"> + <trans-unit id="Don't enable" xml:space="preserve"> + <source>Don't enable</source> + <target>Etkinleştirme</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="Don't show again" xml:space="preserve"> <source>Don't show again</source> - <target state="translated">Yeniden gösterme</target> + <target>Yeniden gösterme</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Downgrade and open chat" xml:space="preserve" approved="no"> + <trans-unit id="Downgrade and open chat" xml:space="preserve"> <source>Downgrade and open chat</source> - <target state="translated">Sürüm düşür ve sohbeti aç</target> + <target>Sürüm düşür ve sohbeti aç</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Download file" xml:space="preserve" approved="no"> + <trans-unit id="Download file" xml:space="preserve"> <source>Download file</source> - <target state="translated">Dosya indir</target> + <target>Dosya indir</target> <note>server test step</note> </trans-unit> - <trans-unit id="Duplicate display name!" xml:space="preserve" approved="no"> + <trans-unit id="Duplicate display name!" xml:space="preserve"> <source>Duplicate display name!</source> - <target state="translated">Yinelenen görünen ad!</target> + <target>Yinelenen görünen ad!</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Duration" xml:space="preserve" approved="no"> + <trans-unit id="Duration" xml:space="preserve"> <source>Duration</source> - <target state="translated">Süre</target> + <target>Süre</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Edit" xml:space="preserve" approved="no"> + <trans-unit id="Edit" xml:space="preserve"> <source>Edit</source> - <target state="translated">Düzenle</target> + <target>Düzenle</target> <note>chat item action</note> </trans-unit> - <trans-unit id="Edit group profile" xml:space="preserve" approved="no"> + <trans-unit id="Edit group profile" xml:space="preserve"> <source>Edit group profile</source> - <target state="translated">Grup profilini düzenle</target> + <target>Grup profilini düzenle</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Enable" xml:space="preserve" approved="no"> + <trans-unit id="Enable" xml:space="preserve"> <source>Enable</source> - <target state="translated">Etkinleştir</target> + <target>Etkinleştir</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Enable SimpleX Lock" xml:space="preserve" approved="no"> + <trans-unit id="Enable (keep overrides)" xml:space="preserve"> + <source>Enable (keep overrides)</source> + <target>Etkinleştir (geçersiz kılmaları koru)</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="Enable SimpleX Lock" xml:space="preserve"> <source>Enable SimpleX Lock</source> - <target state="translated">SimpleX Kilidini etkinleştir</target> + <target>SimpleX Kilidini etkinleştir</target> <note>authentication reason</note> </trans-unit> - <trans-unit id="Enable TCP keep-alive" xml:space="preserve" approved="no"> + <trans-unit id="Enable TCP keep-alive" xml:space="preserve"> <source>Enable TCP keep-alive</source> - <target state="translated">TCP canlı tutmayı etkinleştir</target> + <target>TCP canlı tutmayı etkinleştir</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Enable automatic message deletion?" xml:space="preserve" approved="no"> + <trans-unit id="Enable automatic message deletion?" xml:space="preserve"> <source>Enable automatic message deletion?</source> - <target state="translated">Otomatik mesaj silme etkinleştirilsin mi?</target> + <target>Otomatik mesaj silme etkinleştirilsin mi?</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Enable instant notifications?" xml:space="preserve" approved="no"> + <trans-unit id="Enable camera access" xml:space="preserve"> + <source>Enable camera access</source> + <target>Kamera erişimini etkinleştir</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="Enable for all" xml:space="preserve"> + <source>Enable for all</source> + <target>Herkes için etkinleştir</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="Enable instant notifications?" xml:space="preserve"> <source>Enable instant notifications?</source> - <target state="translated">Anlık bildirimler etkinleştirilsin mi?</target> + <target>Anlık bildirimler etkinleştirilsin mi?</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Enable later via Settings" xml:space="preserve"> - <source>Enable later via Settings</source> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="Enable lock" xml:space="preserve" approved="no"> + <trans-unit id="Enable lock" xml:space="preserve"> <source>Enable lock</source> - <target state="translated">Kilidi etkinleştir</target> + <target>Kilidi etkinleştir</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Enable notifications" xml:space="preserve" approved="no"> + <trans-unit id="Enable notifications" xml:space="preserve"> <source>Enable notifications</source> - <target state="translated">Bildirimleri etkinleştir</target> + <target>Bildirimleri etkinleştir</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Enable periodic notifications?" xml:space="preserve" approved="no"> + <trans-unit id="Enable periodic notifications?" xml:space="preserve"> <source>Enable periodic notifications?</source> - <target state="translated">Periyodik bildirimler etkinleştirilsin mi?</target> + <target>Periyodik bildirimler etkinleştirilsin mi?</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Enable self-destruct" xml:space="preserve" approved="no"> + <trans-unit id="Enable self-destruct" xml:space="preserve"> <source>Enable self-destruct</source> - <target state="translated">Kendini imhayı etkinleştir</target> + <target>Kendini imhayı etkinleştir</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Enable self-destruct passcode" xml:space="preserve" approved="no"> + <trans-unit id="Enable self-destruct passcode" xml:space="preserve"> <source>Enable self-destruct passcode</source> - <target state="translated">Kendini imha şifresini etkinleştir</target> + <target>Kendini imha şifresini etkinleştir</target> <note>set passcode view</note> </trans-unit> - <trans-unit id="Encrypt" xml:space="preserve" approved="no"> + <trans-unit id="Encrypt" xml:space="preserve"> <source>Encrypt</source> - <target state="translated">Şifreleme</target> + <target>Şifreleme</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Encrypt database?" xml:space="preserve" approved="no"> + <trans-unit id="Encrypt database?" xml:space="preserve"> <source>Encrypt database?</source> - <target state="translated">Veritabanı şifrelensin mi?</target> + <target>Veritabanı şifrelensin mi?</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Encrypted database" xml:space="preserve" approved="no"> + <trans-unit id="Encrypt local files" xml:space="preserve"> + <source>Encrypt local files</source> + <target>Yerel dosyaları şifrele</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="Encrypt stored files & media" xml:space="preserve"> + <source>Encrypt stored files & media</source> + <target>Saklanan dosyaları ve medyayı şifreleyin</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="Encrypted database" xml:space="preserve"> <source>Encrypted database</source> - <target state="translated">Şifrelenmiş veritabanı</target> + <target>Şifrelenmiş veritabanı</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Encrypted message or another event" xml:space="preserve" approved="no"> + <trans-unit id="Encrypted message or another event" xml:space="preserve"> <source>Encrypted message or another event</source> - <target state="translated">Şifrelenmiş mesaj veya başka bir etkinlik</target> + <target>Şifrelenmiş mesaj veya başka bir etkinlik</target> <note>notification</note> </trans-unit> - <trans-unit id="Encrypted message: database error" xml:space="preserve" approved="no"> + <trans-unit id="Encrypted message: app is stopped" xml:space="preserve"> + <source>Encrypted message: app is stopped</source> + <target>Şifrelenmiş mesaj: uygulama durdu</target> + <note>notification</note> + </trans-unit> + <trans-unit id="Encrypted message: database error" xml:space="preserve"> <source>Encrypted message: database error</source> - <target state="translated">Şifrelenmiş mesaj: veritabanı hatası</target> + <target>Şifrelenmiş mesaj: veritabanı hatası</target> <note>notification</note> </trans-unit> - <trans-unit id="Encrypted message: database migration error" xml:space="preserve" approved="no"> + <trans-unit id="Encrypted message: database migration error" xml:space="preserve"> <source>Encrypted message: database migration error</source> - <target state="translated">Şifrelenmiş mesaj: veritabanı taşıma hatası</target> + <target>Şifrelenmiş mesaj: veritabanı taşıma hatası</target> <note>notification</note> </trans-unit> - <trans-unit id="Encrypted message: keychain error" xml:space="preserve" approved="no"> + <trans-unit id="Encrypted message: keychain error" xml:space="preserve"> <source>Encrypted message: keychain error</source> - <target state="translated">Şifrelenmiş mesaj: Anahtar Zinciri hatası</target> + <target>Şifrelenmiş mesaj: Anahtar Zinciri hatası</target> <note>notification</note> </trans-unit> - <trans-unit id="Encrypted message: no passphrase" xml:space="preserve" approved="no"> + <trans-unit id="Encrypted message: no passphrase" xml:space="preserve"> <source>Encrypted message: no passphrase</source> - <target state="translated">Şifrelenmiş mesaj: parola yok</target> + <target>Şifrelenmiş mesaj: parola yok</target> <note>notification</note> </trans-unit> - <trans-unit id="Encrypted message: unexpected error" xml:space="preserve" approved="no"> + <trans-unit id="Encrypted message: unexpected error" xml:space="preserve"> <source>Encrypted message: unexpected error</source> - <target state="translated">Şifrelenmiş mesaj: beklenmeyen hata</target> + <target>Şifrelenmiş mesaj: beklenmeyen hata</target> <note>notification</note> </trans-unit> - <trans-unit id="Enter Passcode" xml:space="preserve" approved="no"> + <trans-unit id="Encryption re-negotiation error" xml:space="preserve"> + <source>Encryption re-negotiation error</source> + <target>Şifreleme yeniden anlaşma hatası</target> + <note>message decrypt error item</note> + </trans-unit> + <trans-unit id="Encryption re-negotiation failed." xml:space="preserve"> + <source>Encryption re-negotiation failed.</source> + <target>Şifreleme yeniden anlaşma başarısız oldu.</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="Enter Passcode" xml:space="preserve"> <source>Enter Passcode</source> - <target state="translated">Şifre gir</target> + <target>Şifre gir</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Enter correct passphrase." xml:space="preserve" approved="no"> + <trans-unit id="Enter correct passphrase." xml:space="preserve"> <source>Enter correct passphrase.</source> - <target state="translated">Doğru şifreyi gir.</target> + <target>Doğru şifreyi gir.</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Enter passphrase…" xml:space="preserve" approved="no"> + <trans-unit id="Enter group name…" xml:space="preserve"> + <source>Enter group name…</source> + <target>Grup adı gir…</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="Enter passphrase…" xml:space="preserve"> <source>Enter passphrase…</source> - <target state="translated">Parola gir…</target> + <target>Parola gir…</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Enter password above to show!" xml:space="preserve" approved="no"> + <trans-unit id="Enter password above to show!" xml:space="preserve"> <source>Enter password above to show!</source> - <target state="translated">Göstermek için yukarıdaki şifreyi gir!</target> + <target>Göstermek için yukarıdaki şifreyi gir!</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Enter server manually" xml:space="preserve" approved="no"> + <trans-unit id="Enter server manually" xml:space="preserve"> <source>Enter server manually</source> - <target state="translated">Sunucuya manuel olarak gir</target> + <target>Sunucuya manuel olarak gir</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Enter welcome message…" xml:space="preserve" approved="no"> + <trans-unit id="Enter this device name…" xml:space="preserve"> + <source>Enter this device name…</source> + <target>Bu cihazın adını gir…</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="Enter welcome message…" xml:space="preserve"> <source>Enter welcome message…</source> - <target state="translated">Hoşgeldin mesajı gir…</target> + <target>Hoşgeldin mesajı gir…</target> <note>placeholder</note> </trans-unit> - <trans-unit id="Enter welcome message… (optional)" xml:space="preserve" approved="no"> + <trans-unit id="Enter welcome message… (optional)" xml:space="preserve"> <source>Enter welcome message… (optional)</source> - <target state="translated">Hoşgeldin mesajı gir... (opsiyonel)</target> + <target>Hoşgeldin mesajı gir... (opsiyonel)</target> <note>placeholder</note> </trans-unit> - <trans-unit id="Error" xml:space="preserve" approved="no"> + <trans-unit id="Enter your name…" xml:space="preserve"> + <source>Enter your name…</source> + <target>Adını gir…</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="Error" xml:space="preserve"> <source>Error</source> - <target state="translated">Hata</target> + <target>Hata</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Error aborting address change" xml:space="preserve" approved="no"> + <trans-unit id="Error aborting address change" xml:space="preserve"> <source>Error aborting address change</source> - <target state="translated">Adres değişikliği iptal edilirken hata oluştu</target> + <target>Adres değişikliği iptal edilirken hata oluştu</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Error accepting contact request" xml:space="preserve" approved="no"> + <trans-unit id="Error accepting contact request" xml:space="preserve"> <source>Error accepting contact request</source> - <target state="translated">Bağlantı isteği kabul edilirken hata oluştu</target> + <target>Bağlantı isteği kabul edilirken hata oluştu</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Error accessing database file" xml:space="preserve" approved="no"> + <trans-unit id="Error accessing database file" xml:space="preserve"> <source>Error accessing database file</source> - <target state="translated">Veritabanı dosyasına erişilirken hata oluştu</target> + <target>Veritabanı dosyasına erişilirken hata oluştu</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Error adding member(s)" xml:space="preserve" approved="no"> + <trans-unit id="Error adding member(s)" xml:space="preserve"> <source>Error adding member(s)</source> - <target state="translated">Üye(ler) eklenirken hata oluştu</target> + <target>Üye(ler) eklenirken hata oluştu</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Error changing address" xml:space="preserve" approved="no"> + <trans-unit id="Error changing address" xml:space="preserve"> <source>Error changing address</source> - <target state="translated">Adres değiştirilirken hata oluştu</target> + <target>Adres değiştirilirken hata oluştu</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Error changing role" xml:space="preserve" approved="no"> + <trans-unit id="Error changing role" xml:space="preserve"> <source>Error changing role</source> - <target state="translated">Rol değiştirilirken hata oluştu</target> + <target>Rol değiştirilirken hata oluştu</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Error changing setting" xml:space="preserve" approved="no"> + <trans-unit id="Error changing setting" xml:space="preserve"> <source>Error changing setting</source> - <target state="translated">Ayar değiştirilirken hata oluştu</target> + <target>Ayar değiştirilirken hata oluştu</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Error creating address" xml:space="preserve" approved="no"> + <trans-unit id="Error creating address" xml:space="preserve"> <source>Error creating address</source> - <target state="translated">Adres oluşturulurken hata oluştu</target> + <target>Adres oluşturulurken hata oluştu</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Error creating group" xml:space="preserve" approved="no"> + <trans-unit id="Error creating group" xml:space="preserve"> <source>Error creating group</source> - <target state="translated">Grup oluşturulurken hata oluştu</target> + <target>Grup oluşturulurken hata oluştu</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Error creating group link" xml:space="preserve" approved="no"> + <trans-unit id="Error creating group link" xml:space="preserve"> <source>Error creating group link</source> - <target state="translated">Grup bağlantısı oluşturulurken hata oluştu</target> + <target>Grup bağlantısı oluşturulurken hata oluştu</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Error creating profile!" xml:space="preserve" approved="no"> + <trans-unit id="Error creating member contact" xml:space="preserve"> + <source>Error creating member contact</source> + <target>Kişi iletişimi oluşturulurken hata oluştu</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="Error creating message" xml:space="preserve"> + <source>Error creating message</source> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="Error creating profile!" xml:space="preserve"> <source>Error creating profile!</source> - <target state="translated">Profil oluşturulurken hata oluştu!</target> + <target>Profil oluşturulurken hata oluştu!</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Error deleting chat database" xml:space="preserve" approved="no"> + <trans-unit id="Error decrypting file" xml:space="preserve"> + <source>Error decrypting file</source> + <target>Dosya şifresi çözülürken hata oluştu</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="Error deleting chat database" xml:space="preserve"> <source>Error deleting chat database</source> - <target state="translated">Sohbet veritabanı silinirken sorun oluştu</target> + <target>Sohbet veritabanı silinirken sorun oluştu</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Error deleting chat!" xml:space="preserve" approved="no"> + <trans-unit id="Error deleting chat!" xml:space="preserve"> <source>Error deleting chat!</source> - <target state="translated">Sohbet silinirken hata oluştu!</target> + <target>Sohbet silinirken hata oluştu!</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Error deleting connection" xml:space="preserve" approved="no"> + <trans-unit id="Error deleting connection" xml:space="preserve"> <source>Error deleting connection</source> - <target state="translated">Bağlantı silinirken hata oluştu</target> + <target>Bağlantı silinirken hata oluştu</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Error deleting contact" xml:space="preserve" approved="no"> + <trans-unit id="Error deleting contact" xml:space="preserve"> <source>Error deleting contact</source> - <target state="translated">Kişi silinirken hata oluştu</target> + <target>Kişi silinirken hata oluştu</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Error deleting database" xml:space="preserve" approved="no"> + <trans-unit id="Error deleting database" xml:space="preserve"> <source>Error deleting database</source> - <target state="translated">Veritabanı silinirken hata oluştu</target> + <target>Veritabanı silinirken hata oluştu</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Error deleting old database" xml:space="preserve" approved="no"> + <trans-unit id="Error deleting old database" xml:space="preserve"> <source>Error deleting old database</source> - <target state="translated">Eski veritabanı silinirken hata oluştu</target> + <target>Eski veritabanı silinirken hata oluştu</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Error deleting token" xml:space="preserve" approved="no"> + <trans-unit id="Error deleting token" xml:space="preserve"> <source>Error deleting token</source> - <target state="translated">Token silinirken hata oluştu</target> + <target>Token silinirken hata oluştu</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Error deleting user profile" xml:space="preserve" approved="no"> + <trans-unit id="Error deleting user profile" xml:space="preserve"> <source>Error deleting user profile</source> - <target state="translated">Kullanıcı profili silinirken hata oluştu</target> + <target>Kullanıcı profili silinirken hata oluştu</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Error enabling notifications" xml:space="preserve" approved="no"> + <trans-unit id="Error enabling delivery receipts!" xml:space="preserve"> + <source>Error enabling delivery receipts!</source> + <target>Görüldü bilgisi etkinleştirilirken hata oluştu!</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="Error enabling notifications" xml:space="preserve"> <source>Error enabling notifications</source> - <target state="translated">Bildirimler etkinleştirilirken hata oluştu</target> + <target>Bildirimler etkinleştirilirken hata oluştu</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Error encrypting database" xml:space="preserve" approved="no"> + <trans-unit id="Error encrypting database" xml:space="preserve"> <source>Error encrypting database</source> - <target state="translated">Veritabanı şifrelemesi çözülürken hata oluştu</target> + <target>Veritabanı şifrelemesi çözülürken hata oluştu</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Error exporting chat database" xml:space="preserve" approved="no"> + <trans-unit id="Error exporting chat database" xml:space="preserve"> <source>Error exporting chat database</source> - <target state="translated">Sohbet veritabanı dışa aktarılırken hata oluştu</target> + <target>Sohbet veritabanı dışa aktarılırken hata oluştu</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Error importing chat database" xml:space="preserve" approved="no"> + <trans-unit id="Error importing chat database" xml:space="preserve"> <source>Error importing chat database</source> - <target state="translated">Sohbet veritabanı içe aktarılırken hata oluştu</target> + <target>Sohbet veritabanı içe aktarılırken hata oluştu</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Error joining group" xml:space="preserve" approved="no"> + <trans-unit id="Error joining group" xml:space="preserve"> <source>Error joining group</source> - <target state="translated">Gruba katılırken hata oluştu</target> + <target>Gruba katılırken hata oluştu</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Error loading %@ servers" xml:space="preserve" approved="no"> + <trans-unit id="Error loading %@ servers" xml:space="preserve"> <source>Error loading %@ servers</source> - <target state="translated">%@ sunucuları yüklenirken hata oluştu</target> + <target>%@ sunucuları yüklenirken hata oluştu</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Error receiving file" xml:space="preserve" approved="no"> + <trans-unit id="Error opening chat" xml:space="preserve"> + <source>Error opening chat</source> + <target>Sohbeti açarken sorun oluştu</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="Error receiving file" xml:space="preserve"> <source>Error receiving file</source> - <target state="translated">Dosya alınırken sorun oluştu</target> + <target>Dosya alınırken sorun oluştu</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Error removing member" xml:space="preserve" approved="no"> + <trans-unit id="Error removing member" xml:space="preserve"> <source>Error removing member</source> - <target state="translated">Kişiyi silerken sorun oluştu</target> + <target>Kişiyi silerken sorun oluştu</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Error saving %@ servers" xml:space="preserve" approved="no"> + <trans-unit id="Error saving %@ servers" xml:space="preserve"> <source>Error saving %@ servers</source> - <target state="translated">%@ sunucuları kaydedilirken sorun oluştu</target> + <target>%@ sunucuları kaydedilirken sorun oluştu</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Error saving ICE servers" xml:space="preserve" approved="no"> + <trans-unit id="Error saving ICE servers" xml:space="preserve"> <source>Error saving ICE servers</source> - <target state="translated">ICE sunucularını kaydedirken sorun oluştu</target> + <target>ICE sunucularını kaydedirken sorun oluştu</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Error saving group profile" xml:space="preserve" approved="no"> + <trans-unit id="Error saving group profile" xml:space="preserve"> <source>Error saving group profile</source> - <target state="translated">Grup profili kaydedilirken sorun oluştu</target> + <target>Grup profili kaydedilirken sorun oluştu</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Error saving passcode" xml:space="preserve" approved="no"> + <trans-unit id="Error saving passcode" xml:space="preserve"> <source>Error saving passcode</source> - <target state="translated">Parola kaydedilirken sorun oluştu</target> + <target>Parola kaydedilirken sorun oluştu</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Error saving passphrase to keychain" xml:space="preserve" approved="no"> + <trans-unit id="Error saving passphrase to keychain" xml:space="preserve"> <source>Error saving passphrase to keychain</source> - <target state="translated">Parolayı Anahtar Zincirine kaydederken hata oluştu</target> + <target>Parolayı Anahtar Zincirine kaydederken hata oluştu</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Error saving user password" xml:space="preserve" approved="no"> + <trans-unit id="Error saving user password" xml:space="preserve"> <source>Error saving user password</source> - <target state="translated">Kullanıcı şifresi kaydedilirken hata oluştu</target> + <target>Kullanıcı şifresi kaydedilirken hata oluştu</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Error sending email" xml:space="preserve" approved="no"> + <trans-unit id="Error scanning code: %@" xml:space="preserve"> + <source>Error scanning code: %@</source> + <target>Kod taranırken hata oluştu: %@</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="Error sending email" xml:space="preserve"> <source>Error sending email</source> - <target state="translated">Eposta gönderilirken hata oluştu</target> + <target>Eposta gönderilirken hata oluştu</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Error sending message" xml:space="preserve" approved="no"> + <trans-unit id="Error sending member contact invitation" xml:space="preserve"> + <source>Error sending member contact invitation</source> + <target>Kişi iletişim daveti gönderilirken hata oluştu</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="Error sending message" xml:space="preserve"> <source>Error sending message</source> - <target state="translated">Mesaj gönderilirken hata oluştu</target> + <target>Mesaj gönderilirken hata oluştu</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Error starting chat" xml:space="preserve" approved="no"> + <trans-unit id="Error setting delivery receipts!" xml:space="preserve"> + <source>Error setting delivery receipts!</source> + <target>Görüldü ayarlanırken hata oluştu!</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="Error starting chat" xml:space="preserve"> <source>Error starting chat</source> - <target state="translated">Sohbet başlatılırken hata oluştu</target> + <target>Sohbet başlatılırken hata oluştu</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Error stopping chat" xml:space="preserve" approved="no"> + <trans-unit id="Error stopping chat" xml:space="preserve"> <source>Error stopping chat</source> - <target state="translated">Sohbet durdurulurken hata oluştu</target> + <target>Sohbet durdurulurken hata oluştu</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Error switching profile!" xml:space="preserve" approved="no"> + <trans-unit id="Error switching profile!" xml:space="preserve"> <source>Error switching profile!</source> - <target state="translated">Profil değiştirilirken hata oluştu!</target> + <target>Profil değiştirilirken hata oluştu!</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Error synchronizing connection" xml:space="preserve" approved="no"> + <trans-unit id="Error synchronizing connection" xml:space="preserve"> <source>Error synchronizing connection</source> - <target state="translated">Bağlantı senkronizasyonunda hata oluştu</target> + <target>Bağlantı senkronizasyonunda hata oluştu</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Error updating group link" xml:space="preserve" approved="no"> + <trans-unit id="Error updating group link" xml:space="preserve"> <source>Error updating group link</source> - <target state="translated">Grup bağlantısı güncellenirken hata oluştu</target> + <target>Grup bağlantısı güncellenirken hata oluştu</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Error updating message" xml:space="preserve" approved="no"> + <trans-unit id="Error updating message" xml:space="preserve"> <source>Error updating message</source> - <target state="translated">Mesaj güncellenirken hata oluştu</target> + <target>Mesaj güncellenirken hata oluştu</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Error updating settings" xml:space="preserve" approved="no"> + <trans-unit id="Error updating settings" xml:space="preserve"> <source>Error updating settings</source> - <target state="translated">Ayarları güncellerken hata oluştu</target> + <target>Ayarları güncellerken hata oluştu</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Error updating user privacy" xml:space="preserve" approved="no"> + <trans-unit id="Error updating user privacy" xml:space="preserve"> <source>Error updating user privacy</source> - <target state="translated">Kullanıcı gizliliği güncellenirken hata oluştu</target> + <target>Kullanıcı gizliliği güncellenirken hata oluştu</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Error: " xml:space="preserve" approved="no"> + <trans-unit id="Error: " xml:space="preserve"> <source>Error: </source> - <target state="translated">Hata: </target> + <target>Hata: </target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Error: %@" xml:space="preserve" approved="no"> + <trans-unit id="Error: %@" xml:space="preserve"> <source>Error: %@</source> - <target state="translated">Hata: %@</target> + <target>Hata: %@</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Error: URL is invalid" xml:space="preserve" approved="no"> + <trans-unit id="Error: URL is invalid" xml:space="preserve"> <source>Error: URL is invalid</source> - <target state="translated">Hata: URL geçersiz</target> + <target>Hata: URL geçersiz</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Error: no database file" xml:space="preserve" approved="no"> + <trans-unit id="Error: no database file" xml:space="preserve"> <source>Error: no database file</source> - <target state="translated">Hata: veritabanı dosyası yok</target> + <target>Hata: veritabanı dosyası yok</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Exit without saving" xml:space="preserve" approved="no"> + <trans-unit id="Even when disabled in the conversation." xml:space="preserve"> + <source>Even when disabled in the conversation.</source> + <target>Konuşma sırasında devre dışı bırakılsa bile.</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="Exit without saving" xml:space="preserve"> <source>Exit without saving</source> - <target state="translated">Kaydetmeden çık</target> + <target>Kaydetmeden çık</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Export database" xml:space="preserve" approved="no"> + <trans-unit id="Expand" xml:space="preserve"> + <source>Expand</source> + <target>Genişlet</target> + <note>chat item action</note> + </trans-unit> + <trans-unit id="Export database" xml:space="preserve"> <source>Export database</source> - <target state="translated">Veritabanını dışarı aktar</target> + <target>Veritabanını dışarı aktar</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Export error:" xml:space="preserve" approved="no"> + <trans-unit id="Export error:" xml:space="preserve"> <source>Export error:</source> - <target state="translated">Dışarı çıkarma hatası:</target> + <target>Dışarı çıkarma hatası:</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Exported database archive." xml:space="preserve" approved="no"> + <trans-unit id="Exported database archive." xml:space="preserve"> <source>Exported database archive.</source> - <target state="translated">Dışarı çıkarılmış veritabanı arşivi.</target> + <target>Dışarı çıkarılmış veritabanı arşivi.</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Exporting database archive..." xml:space="preserve"> - <source>Exporting database archive...</source> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="Exporting database archive…" xml:space="preserve" approved="no"> + <trans-unit id="Exporting database archive…" xml:space="preserve"> <source>Exporting database archive…</source> - <target state="translated">Dışarı çıkarılmış veritabanı arşivi…</target> + <target>Dışarı çıkarılmış veritabanı arşivi…</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Failed to remove passphrase" xml:space="preserve" approved="no"> + <trans-unit id="Failed to remove passphrase" xml:space="preserve"> <source>Failed to remove passphrase</source> - <target state="translated">Parola kaldırılamadı</target> + <target>Parola kaldırılamadı</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Fast and no wait until the sender is online!" xml:space="preserve" approved="no"> + <trans-unit id="Fast and no wait until the sender is online!" xml:space="preserve"> <source>Fast and no wait until the sender is online!</source> - <target state="translated">Hızlı ve gönderici çevrimiçi olana kadar beklemek yok!</target> + <target>Hızlı ve gönderici çevrimiçi olana kadar beklemek yok!</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Favorite" xml:space="preserve" approved="no"> + <trans-unit id="Faster joining and more reliable messages." xml:space="preserve"> + <source>Faster joining and more reliable messages.</source> + <target>Daha hızlı katılma ve daha güvenilir mesajlar.</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="Favorite" xml:space="preserve"> <source>Favorite</source> - <target state="translated">Favori</target> + <target>Favori</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="File will be deleted from servers." xml:space="preserve" approved="no"> + <trans-unit id="File will be deleted from servers." xml:space="preserve"> <source>File will be deleted from servers.</source> - <target state="translated">Dosya sunuculardan silinecek.</target> + <target>Dosya sunuculardan silinecek.</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="File will be received when your contact completes uploading it." xml:space="preserve" approved="no"> + <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 state="translated">Dosya kişi yüklemeyi tamamladığında alınacak.</target> + <target>Dosya kişi yüklemeyi tamamladığında alınacak.</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" approved="no"> + <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 state="translated">Dosya kişi çevrimiçi olduğunda alınacaktır, lütfen bekleyin veya daha sonra kontrol edin!</target> + <target>Dosya kişi çevrimiçi olduğunda alınacaktır, lütfen bekleyin veya daha sonra kontrol edin!</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="File: %@" xml:space="preserve" approved="no"> + <trans-unit id="File: %@" xml:space="preserve"> <source>File: %@</source> - <target state="translated">Dosya: %@</target> + <target>Dosya: %@</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Files & media" xml:space="preserve" approved="no"> + <trans-unit id="Files & media" xml:space="preserve"> <source>Files & media</source> - <target state="translated">Dosyalar & medya</target> + <target>Dosyalar & medya</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Files and media" xml:space="preserve" approved="no"> + <trans-unit id="Files and media" xml:space="preserve"> <source>Files and media</source> - <target state="translated">Dosyalar ve medya</target> + <target>Dosyalar ve medya</target> <note>chat feature</note> </trans-unit> - <trans-unit id="Files and media are prohibited in this group." xml:space="preserve" approved="no"> + <trans-unit id="Files and media are prohibited in this group." xml:space="preserve"> <source>Files and media are prohibited in this group.</source> - <target state="translated">Dosyalar ve medya bu grupta yasaklandı.</target> + <target>Dosyalar ve medya bu grupta yasaklandı.</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Files and media prohibited!" xml:space="preserve" approved="no"> + <trans-unit id="Files and media prohibited!" xml:space="preserve"> <source>Files and media prohibited!</source> - <target state="translated">Dosyalar ve medya yasaklandı!</target> + <target>Dosyalar ve medya yasaklandı!</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Finally, we have them! 🚀" xml:space="preserve" approved="no"> + <trans-unit id="Filter unread and favorite chats." xml:space="preserve"> + <source>Filter unread and favorite chats.</source> + <target>Favori ve okunmamış sohbetleri filtrele.</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="Finally, we have them! 🚀" xml:space="preserve"> <source>Finally, we have them! 🚀</source> - <target state="translated">Sonunda, onlara sahibiz! 🚀</target> + <target>Sonunda, onlara sahibiz! 🚀</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Fix" xml:space="preserve" approved="no"> + <trans-unit id="Find chats faster" xml:space="preserve"> + <source>Find chats faster</source> + <target>Sohbetleri daha hızlı bul</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="Fix" xml:space="preserve"> <source>Fix</source> - <target state="translated">Düzelt</target> + <target>Düzelt</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Fix connection" xml:space="preserve" approved="no"> + <trans-unit id="Fix connection" xml:space="preserve"> <source>Fix connection</source> - <target state="translated">Bağlantıyı düzelt</target> + <target>Bağlantıyı düzelt</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Fix connection?" xml:space="preserve" approved="no"> + <trans-unit id="Fix connection?" xml:space="preserve"> <source>Fix connection?</source> - <target state="translated">Bağlantı düzeltilsin mi?</target> + <target>Bağlantı düzeltilsin mi?</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Fix not supported by contact" xml:space="preserve" approved="no"> + <trans-unit id="Fix encryption after restoring backups." xml:space="preserve"> + <source>Fix encryption after restoring backups.</source> + <target>Yedekleri geri yükledikten sonra şifrelemeyi düzelt.</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="Fix not supported by contact" xml:space="preserve"> <source>Fix not supported by contact</source> - <target state="translated">Düzeltme kişi tarafından desteklenmiyor</target> + <target>Düzeltme kişi tarafından desteklenmiyor</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Fix not supported by group member" xml:space="preserve" approved="no"> + <trans-unit id="Fix not supported by group member" xml:space="preserve"> <source>Fix not supported by group member</source> - <target state="translated">Düzeltme grup üyesi tarafından desteklenmiyor</target> + <target>Düzeltme grup üyesi tarafından desteklenmiyor</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="For console" xml:space="preserve" approved="no"> + <trans-unit id="For console" xml:space="preserve"> <source>For console</source> - <target state="translated">Konsol için</target> + <target>Konsol için</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="French interface" xml:space="preserve" approved="no"> + <trans-unit id="Found desktop" xml:space="preserve"> + <source>Found desktop</source> + <target>Bilgisayar bulundu</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="French interface" xml:space="preserve"> <source>French interface</source> - <target state="translated">Fransızca arayüz</target> + <target>Fransızca arayüz</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Full link" xml:space="preserve" approved="no"> + <trans-unit id="Full link" xml:space="preserve"> <source>Full link</source> - <target state="translated">Bütün bağlantı adresi</target> + <target>Bütün bağlantı adresi</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Full name (optional)" xml:space="preserve" approved="no"> + <trans-unit id="Full name (optional)" xml:space="preserve"> <source>Full name (optional)</source> - <target state="translated">Bütün isim (opsiyonel)</target> + <target>Bütün isim (opsiyonel)</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Full name:" xml:space="preserve" approved="no"> + <trans-unit id="Full name:" xml:space="preserve"> <source>Full name:</source> - <target state="translated">Bütün isim:</target> + <target>Bütün isim:</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Fully re-implemented - work in background!" xml:space="preserve" approved="no"> + <trans-unit id="Fully decentralized – visible only to members." xml:space="preserve"> + <source>Fully decentralized – visible only to members.</source> + <target>Tamamiyle merkezi olmayan - sadece kişilere görünür.</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="Fully re-implemented - work in background!" xml:space="preserve"> <source>Fully re-implemented - work in background!</source> - <target state="translated">Arkaplanda çalışma - tamamiyle yeniden yapıldı!</target> + <target>Arkaplanda çalışma - tamamiyle yeniden yapıldı!</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Further reduced battery usage" xml:space="preserve" approved="no"> + <trans-unit id="Further reduced battery usage" xml:space="preserve"> <source>Further reduced battery usage</source> - <target state="translated">Daha da azaltılmış pil kullanımı</target> + <target>Daha da azaltılmış pil kullanımı</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="GIFs and stickers" xml:space="preserve" approved="no"> + <trans-unit id="GIFs and stickers" xml:space="preserve"> <source>GIFs and stickers</source> - <target state="translated">GİFler ve çıkartmalar</target> + <target>GİFler ve çıkartmalar</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Group" xml:space="preserve" approved="no"> + <trans-unit id="Group" xml:space="preserve"> <source>Group</source> - <target state="translated">Grup</target> + <target>Grup</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Group display name" xml:space="preserve" approved="no"> + <trans-unit id="Group already exists" xml:space="preserve"> + <source>Group already exists</source> + <target>Grup çoktan mevcut</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="Group already exists!" xml:space="preserve"> + <source>Group already exists!</source> + <target>Grup çoktan mevcut!</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="Group display name" xml:space="preserve"> <source>Group display name</source> - <target state="translated">Grup görünen adı</target> + <target>Grup görünen adı</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Group full name (optional)" xml:space="preserve" approved="no"> + <trans-unit id="Group full name (optional)" xml:space="preserve"> <source>Group full name (optional)</source> - <target state="translated">Grubun bütün ismi (opsiyonel)</target> + <target>Grubun bütün ismi (opsiyonel)</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Group image" xml:space="preserve" approved="no"> + <trans-unit id="Group image" xml:space="preserve"> <source>Group image</source> - <target state="translated">Grup fotoğrafı</target> + <target>Grup fotoğrafı</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Group invitation" xml:space="preserve" approved="no"> + <trans-unit id="Group invitation" xml:space="preserve"> <source>Group invitation</source> - <target state="translated">Grup daveti</target> + <target>Grup daveti</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Group invitation expired" xml:space="preserve" approved="no"> + <trans-unit id="Group invitation expired" xml:space="preserve"> <source>Group invitation expired</source> - <target state="translated">Grup davetinin süresi doldu</target> + <target>Grup davetinin süresi doldu</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Group invitation is no longer valid, it was removed by sender." xml:space="preserve" approved="no"> + <trans-unit id="Group invitation is no longer valid, it was removed by sender." xml:space="preserve"> <source>Group invitation is no longer valid, it was removed by sender.</source> - <target state="translated">Grup davet artık geçerli değil, gönderici tarafından silindi.</target> + <target>Grup davet artık geçerli değil, gönderici tarafından silindi.</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Group link" xml:space="preserve" approved="no"> + <trans-unit id="Group link" xml:space="preserve"> <source>Group link</source> - <target state="translated">Grup bağlantısı</target> + <target>Grup bağlantısı</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Group links" xml:space="preserve" approved="no"> + <trans-unit id="Group links" xml:space="preserve"> <source>Group links</source> - <target state="translated">Grup bağlantıları</target> + <target>Grup bağlantıları</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Group members can add message reactions." xml:space="preserve" approved="no"> + <trans-unit id="Group members can add message reactions." xml:space="preserve"> <source>Group members can add message reactions.</source> - <target state="translated">Grup üyeleri mesaj tepkileri ekleyebilir.</target> + <target>Grup üyeleri mesaj tepkileri ekleyebilir.</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Group members can irreversibly delete sent messages." xml:space="preserve" approved="no"> - <source>Group members can irreversibly delete sent messages.</source> - <target state="translated">Grup üyeleri gönderilen mesajları geri alınamaz şekilde silebilir.</target> + <trans-unit id="Group members can irreversibly delete sent messages. (24 hours)" xml:space="preserve"> + <source>Group members can irreversibly delete sent messages. (24 hours)</source> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Group members can send direct messages." xml:space="preserve" approved="no"> + <trans-unit id="Group members can send direct messages." xml:space="preserve"> <source>Group members can send direct messages.</source> - <target state="translated">Grup üyeleri doğrudan mesajlar gönderebilir.</target> + <target>Grup üyeleri doğrudan mesajlar gönderebilir.</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Group members can send disappearing messages." xml:space="preserve" approved="no"> + <trans-unit id="Group members can send disappearing messages." xml:space="preserve"> <source>Group members can send disappearing messages.</source> - <target state="translated">Grup üyeleri kaybolan mesajlar gönderebilir.</target> + <target>Grup üyeleri kaybolan mesajlar gönderebilir.</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Group members can send files and media." xml:space="preserve" approved="no"> + <trans-unit id="Group members can send files and media." xml:space="preserve"> <source>Group members can send files and media.</source> - <target state="translated">Grup üyeleri dosyalar ve medya gönderebilir.</target> + <target>Grup üyeleri dosyalar ve medya gönderebilir.</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Group members can send voice messages." xml:space="preserve" approved="no"> + <trans-unit id="Group members can send voice messages." xml:space="preserve"> <source>Group members can send voice messages.</source> - <target state="translated">Grup üyeleri sesli mesajlar gönderebilir.</target> + <target>Grup üyeleri sesli mesajlar gönderebilir.</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Group message:" xml:space="preserve" approved="no"> + <trans-unit id="Group message:" xml:space="preserve"> <source>Group message:</source> - <target state="translated">Grup mesajı:</target> + <target>Grup mesajı:</target> <note>notification</note> </trans-unit> - <trans-unit id="Group moderation" xml:space="preserve" approved="no"> + <trans-unit id="Group moderation" xml:space="preserve"> <source>Group moderation</source> - <target state="translated">Grup yöneticiliği</target> + <target>Grup yöneticiliği</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Group preferences" xml:space="preserve" approved="no"> + <trans-unit id="Group preferences" xml:space="preserve"> <source>Group preferences</source> - <target state="translated">Grup tercihleri</target> + <target>Grup tercihleri</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Group profile" xml:space="preserve" approved="no"> + <trans-unit id="Group profile" xml:space="preserve"> <source>Group profile</source> - <target state="translated">Grup profili</target> + <target>Grup profili</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Group profile is stored on members' devices, not on the servers." xml:space="preserve" approved="no"> + <trans-unit id="Group profile is stored on members' devices, not on the servers." xml:space="preserve"> <source>Group profile is stored on members' devices, not on the servers.</source> - <target state="translated">Grup profili üyelerin cihazlarında saklanır, sunucularda değil.</target> + <target>Grup profili üyelerin cihazlarında saklanır, sunucularda değil.</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Group welcome message" xml:space="preserve" approved="no"> + <trans-unit id="Group welcome message" xml:space="preserve"> <source>Group welcome message</source> - <target state="translated">Grup hoşgeldin mesajı</target> + <target>Grup hoşgeldin mesajı</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Group will be deleted for all members - this cannot be undone!" xml:space="preserve" approved="no"> + <trans-unit id="Group will be deleted for all members - this cannot be undone!" xml:space="preserve"> <source>Group will be deleted for all members - this cannot be undone!</source> - <target state="translated">Grup tüm üyelerden silinecektir - bu geri alınamaz!</target> + <target>Grup tüm üyelerden silinecektir - bu geri alınamaz!</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Group will be deleted for you - this cannot be undone!" xml:space="preserve" approved="no"> + <trans-unit id="Group will be deleted for you - this cannot be undone!" xml:space="preserve"> <source>Group will be deleted for you - this cannot be undone!</source> - <target state="translated">Grup senden silinecektir - bu geri alınamaz!</target> + <target>Grup senden silinecektir - bu geri alınamaz!</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Help" xml:space="preserve" approved="no"> + <trans-unit id="Help" xml:space="preserve"> <source>Help</source> - <target state="translated">Yardım</target> + <target>Yardım</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Hidden" xml:space="preserve" approved="no"> + <trans-unit id="Hidden" xml:space="preserve"> <source>Hidden</source> - <target state="translated">Gizlenmiş</target> + <target>Gizlenmiş</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Hidden chat profiles" xml:space="preserve" approved="no"> + <trans-unit id="Hidden chat profiles" xml:space="preserve"> <source>Hidden chat profiles</source> - <target state="translated">Gizlenmiş sohbet profilleri</target> + <target>Gizlenmiş sohbet profilleri</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Hidden profile password" xml:space="preserve" approved="no"> + <trans-unit id="Hidden profile password" xml:space="preserve"> <source>Hidden profile password</source> - <target state="translated">Gizlenmiş profil şifresi</target> + <target>Gizlenmiş profil şifresi</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Hide" xml:space="preserve" approved="no"> + <trans-unit id="Hide" xml:space="preserve"> <source>Hide</source> - <target state="translated">Gizle</target> + <target>Gizle</target> <note>chat item action</note> </trans-unit> - <trans-unit id="Hide app screen in the recent apps." xml:space="preserve" approved="no"> + <trans-unit id="Hide app screen in the recent apps." xml:space="preserve"> <source>Hide app screen in the recent apps.</source> - <target state="translated">Son uygulamalarda uygulama ekranını gizle.</target> + <target>Son uygulamalarda uygulama ekranını gizle.</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Hide profile" xml:space="preserve" approved="no"> + <trans-unit id="Hide profile" xml:space="preserve"> <source>Hide profile</source> - <target state="translated">Profili gizle</target> + <target>Profili gizle</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Hide:" xml:space="preserve" approved="no"> + <trans-unit id="Hide:" xml:space="preserve"> <source>Hide:</source> - <target state="translated">Gizle:</target> + <target>Gizle:</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="History" xml:space="preserve" approved="no"> + <trans-unit id="History" xml:space="preserve"> <source>History</source> - <target state="translated">Geçmiş</target> - <note>copied message info</note> + <target>Geçmiş</target> + <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="How SimpleX works" xml:space="preserve" approved="no"> + <trans-unit id="History is not sent to new members." xml:space="preserve"> + <source>History is not sent to new members.</source> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="How SimpleX works" xml:space="preserve"> <source>How SimpleX works</source> - <target state="translated">SimpleX nasıl çalışır</target> + <target>SimpleX nasıl çalışır</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="How it works" xml:space="preserve" approved="no"> + <trans-unit id="How it works" xml:space="preserve"> <source>How it works</source> - <target state="translated">Nasıl çalışıyor</target> + <target>Nasıl çalışıyor</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="How to" xml:space="preserve" approved="no"> + <trans-unit id="How to" xml:space="preserve"> <source>How to</source> - <target state="translated">Nasıl yapılır</target> + <target>Nasıl yapılır</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="How to use it" xml:space="preserve" approved="no"> + <trans-unit id="How to use it" xml:space="preserve"> <source>How to use it</source> - <target state="translated">Nasıl kullanılır</target> + <target>Nasıl kullanılır</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="How to use your servers" xml:space="preserve" approved="no"> + <trans-unit id="How to use your servers" xml:space="preserve"> <source>How to use your servers</source> - <target state="translated">Sunucularını nasıl kullanabilirsin</target> + <target>Sunucularını nasıl kullanabilirsin</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="ICE servers (one per line)" xml:space="preserve" approved="no"> + <trans-unit id="ICE servers (one per line)" xml:space="preserve"> <source>ICE servers (one per line)</source> - <target state="translated">ICE sunucuları (her satıra bir tane)</target> + <target>ICE sunucuları (her satıra bir tane)</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="If you can't meet in person, show QR code in a video call, or share the link." xml:space="preserve" approved="no"> + <trans-unit id="If you can't meet in person, show QR code in a video call, or share the link." xml:space="preserve"> <source>If you can't meet in person, show QR code in a video call, or share the link.</source> - <target state="translated">Eğer onunla buluşamıyorsan görüntülü aramada QR kod göster veya bağlantığı paylaş.</target> + <target>Eğer onunla buluşamıyorsan görüntülü aramada QR kod göster veya bağlantığı paylaş.</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="If you cannot meet in person, you can **scan QR code in the video call**, or your contact can share an invitation link." xml:space="preserve"> - <source>If you cannot meet in person, you can **scan QR code in the video call**, or your contact can share an invitation link.</source> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="If you enter this passcode when opening the app, all app data will be irreversibly removed!" xml:space="preserve" approved="no"> + <trans-unit id="If you enter this passcode when opening the app, all app data will be irreversibly removed!" xml:space="preserve"> <source>If you enter this passcode when opening the app, all app data will be irreversibly removed!</source> - <target state="translated">Eğer bu şifreyi uygulamayı açarken girersen, bütün uygulama verileri geri dönülemeyen bir şekilde silinecektir!</target> + <target>Eğer bu şifreyi uygulamayı açarken girersen, bütün uygulama verileri geri dönülemeyen bir şekilde silinecektir!</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="If you enter your self-destruct passcode while opening the app:" xml:space="preserve" approved="no"> + <trans-unit id="If you enter your self-destruct passcode while opening the app:" xml:space="preserve"> <source>If you enter your self-destruct passcode while opening the app:</source> - <target state="translated">Uygulamayı açarken kendi kendini imha eden şifrenizi girerseniz:</target> + <target>Uygulamayı açarken kendi kendini imha eden şifrenizi girerseniz:</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="If you need to use the chat now tap **Do it later** below (you will be offered to migrate the database when you restart the app)." xml:space="preserve" approved="no"> + <trans-unit id="If you need to use the chat now tap **Do it later** below (you will be offered to migrate the database when you restart the app)." xml:space="preserve"> <source>If you need to use the chat now tap **Do it later** below (you will be offered to migrate the database when you restart the app).</source> - <target state="translated">Sohbeti şimdi kullanmanız gerekiyorsa aşağıdaki **Daha sonra yap** seçeneğine dokunun (uygulamayı yeniden başlattığınızda veritabanını taşımanız önerilecektir).</target> + <target>Sohbeti şimdi kullanmanız gerekiyorsa aşağıdaki **Daha sonra yap** seçeneğine dokunun (uygulamayı yeniden başlattığınızda veritabanını taşımanız önerilecektir).</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Ignore" xml:space="preserve" approved="no"> + <trans-unit id="Ignore" xml:space="preserve"> <source>Ignore</source> - <target state="translated">Yok say</target> + <target>Yok say</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Image will be received when your contact completes uploading it." xml:space="preserve" approved="no"> + <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 state="translated">Kişi yüklemeyi bitirdiğinde fotoğraf alınacaktır.</target> + <target>Kişi yüklemeyi bitirdiğinde fotoğraf alınacaktır.</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" approved="no"> + <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 state="translated">Kişi çevrimiçi olduğunda fotoğraf alınacaktır, lütfen bekleyin veya daha sonra kontrol et!</target> + <target>Kişi çevrimiçi olduğunda fotoğraf alınacaktır, lütfen bekleyin veya daha sonra kontrol et!</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Immediately" xml:space="preserve" approved="no"> + <trans-unit id="Immediately" xml:space="preserve"> <source>Immediately</source> - <target state="translated">Hemen</target> + <target>Hemen</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Immune to spam and abuse" xml:space="preserve" approved="no"> + <trans-unit id="Immune to spam and abuse" xml:space="preserve"> <source>Immune to spam and abuse</source> - <target state="translated">Spam ve kötüye kullanıma karşı bağışıklı</target> + <target>Spam ve kötüye kullanıma karşı bağışıklı</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Import" xml:space="preserve" approved="no"> + <trans-unit id="Import" xml:space="preserve"> <source>Import</source> - <target state="translated">İçe aktar</target> + <target>İçe aktar</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Import chat database?" xml:space="preserve" approved="no"> + <trans-unit id="Import chat database?" xml:space="preserve"> <source>Import chat database?</source> - <target state="translated">Sohbet veritabanı içe aktarılsın mı?</target> + <target>Sohbet veritabanı içe aktarılsın mı?</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Import database" xml:space="preserve" approved="no"> + <trans-unit id="Import database" xml:space="preserve"> <source>Import database</source> - <target state="translated">Veritabanını içe aktar</target> + <target>Veritabanını içe aktar</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Improved privacy and security" xml:space="preserve" approved="no"> + <trans-unit id="Improved message delivery" xml:space="preserve"> + <source>Improved message delivery</source> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="Improved privacy and security" xml:space="preserve"> <source>Improved privacy and security</source> - <target state="translated">Geliştirilmiş gizlilik ve güvenlik</target> + <target>Geliştirilmiş gizlilik ve güvenlik</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Improved server configuration" xml:space="preserve" approved="no"> + <trans-unit id="Improved server configuration" xml:space="preserve"> <source>Improved server configuration</source> - <target state="translated">Geliştirilmiş sunucu yapılandırması</target> + <target>Geliştirilmiş sunucu yapılandırması</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="In reply to" xml:space="preserve" approved="no"> + <trans-unit id="In reply to" xml:space="preserve"> <source>In reply to</source> - <target state="translated">Cevap olarak</target> - <note>copied message info</note> + <target>Cevap olarak</target> + <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Incognito" xml:space="preserve" approved="no"> + <trans-unit id="Incognito" xml:space="preserve"> <source>Incognito</source> - <target state="translated">Gizli</target> + <target>Gizli</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Incognito mode" xml:space="preserve" approved="no"> + <trans-unit id="Incognito groups" xml:space="preserve"> + <source>Incognito groups</source> + <target>Gizli gruplar</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="Incognito mode" xml:space="preserve"> <source>Incognito mode</source> - <target state="translated">Gizli mod</target> + <target>Gizli mod</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Incognito mode is not supported here - your main profile will be sent to group members" xml:space="preserve"> - <source>Incognito mode is not supported here - your main profile will be sent to group members</source> + <trans-unit id="Incognito mode protects your privacy by using a new random profile for each contact." xml:space="preserve"> + <source>Incognito mode protects your privacy by using a new random profile for each contact.</source> + <target>Gizli mod her kişiye farklı olarak rasgele profiller kullanarak gizliliğinizi korur.</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Incognito mode protects the privacy of your main profile name and image — for each new contact a new random profile is created." xml:space="preserve"> - <source>Incognito mode protects the privacy of your main profile name and image — for each new contact a new random profile is created.</source> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="Incoming audio call" xml:space="preserve" approved="no"> + <trans-unit id="Incoming audio call" xml:space="preserve"> <source>Incoming audio call</source> - <target state="translated">Gelen sesli arama</target> + <target>Gelen sesli arama</target> <note>notification</note> </trans-unit> - <trans-unit id="Incoming call" xml:space="preserve" approved="no"> + <trans-unit id="Incoming call" xml:space="preserve"> <source>Incoming call</source> - <target state="translated">Gelen arama</target> + <target>Gelen arama</target> <note>notification</note> </trans-unit> - <trans-unit id="Incoming video call" xml:space="preserve" approved="no"> + <trans-unit id="Incoming video call" xml:space="preserve"> <source>Incoming video call</source> - <target state="translated">Gelen görüntülü arama</target> + <target>Gelen görüntülü arama</target> <note>notification</note> </trans-unit> - <trans-unit id="Incompatible database version" xml:space="preserve" approved="no"> + <trans-unit id="Incompatible database version" xml:space="preserve"> <source>Incompatible database version</source> - <target state="translated">Uyumsuz veritabanı sürümü</target> + <target>Uyumsuz veritabanı sürümü</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Incorrect passcode" xml:space="preserve" approved="no"> + <trans-unit id="Incompatible version" xml:space="preserve"> + <source>Incompatible version</source> + <target>Uyumsuz sürüm</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="Incorrect passcode" xml:space="preserve"> <source>Incorrect passcode</source> - <target state="translated">Uyumsuz parola</target> + <target>Uyumsuz parola</target> <note>PIN entry</note> </trans-unit> - <trans-unit id="Incorrect security code!" xml:space="preserve" approved="no"> + <trans-unit id="Incorrect security code!" xml:space="preserve"> <source>Incorrect security code!</source> - <target state="translated">Uyumsuz güvenlik kodu!</target> + <target>Uyumsuz güvenlik kodu!</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Info" xml:space="preserve" approved="no"> + <trans-unit id="Info" xml:space="preserve"> <source>Info</source> - <target state="translated">Bilgi</target> + <target>Bilgi</target> <note>chat item action</note> </trans-unit> - <trans-unit id="Initial role" xml:space="preserve" approved="no"> + <trans-unit id="Initial role" xml:space="preserve"> <source>Initial role</source> - <target state="translated">Başlangıç rolü</target> + <target>Başlangıç rolü</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Install [SimpleX Chat for terminal](https://github.com/simplex-chat/simplex-chat)" xml:space="preserve" approved="no"> + <trans-unit id="Install [SimpleX Chat for terminal](https://github.com/simplex-chat/simplex-chat)" xml:space="preserve"> <source>Install [SimpleX Chat for terminal](https://github.com/simplex-chat/simplex-chat)</source> - <target state="translated">[Terminal için SimpleX Chat]i indir(https://github.com/simplex-chat/simplex-chat)</target> + <target>[Terminal için SimpleX Chat]i indir(https://github.com/simplex-chat/simplex-chat)</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Instant push notifications will be hidden! " xml:space="preserve" approved="no"> + <trans-unit id="Instant push notifications will be hidden! " xml:space="preserve"> <source>Instant push notifications will be hidden! </source> - <target state="translated">Anlık bildirimler gizlenecek! + <target>Anlık bildirimler gizlenecek! </target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Instantly" xml:space="preserve" approved="no"> + <trans-unit id="Instantly" xml:space="preserve"> <source>Instantly</source> - <target state="translated">Anında</target> + <target>Anında</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Interface" xml:space="preserve" approved="no"> + <trans-unit id="Interface" xml:space="preserve"> <source>Interface</source> - <target state="translated">Arayüz</target> + <target>Arayüz</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Invalid connection link" xml:space="preserve" approved="no"> + <trans-unit id="Invalid QR code" xml:space="preserve"> + <source>Invalid QR code</source> + <target>Geçersiz QR kodu</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="Invalid connection link" xml:space="preserve"> <source>Invalid connection link</source> - <target state="translated">Geçersiz bağlanma bağlantısı</target> + <target>Geçersiz bağlanma bağlantısı</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Invalid server address!" xml:space="preserve" approved="no"> + <trans-unit id="Invalid display name!" xml:space="preserve"> + <source>Invalid display name!</source> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="Invalid link" xml:space="preserve"> + <source>Invalid link</source> + <target>Geçersiz bağlantı</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="Invalid name!" xml:space="preserve"> + <source>Invalid name!</source> + <target>Geçersiz isim!</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="Invalid response" xml:space="preserve"> + <source>Invalid response</source> + <target>Geçersiz yanıt</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="Invalid server address!" xml:space="preserve"> <source>Invalid server address!</source> - <target state="translated">Geçersiz sunucu adresi!</target> + <target>Geçersiz sunucu adresi!</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Invitation expired!" xml:space="preserve" approved="no"> + <trans-unit id="Invalid status" xml:space="preserve"> + <source>Invalid status</source> + <target>Geçersiz durum</target> + <note>item status text</note> + </trans-unit> + <trans-unit id="Invitation expired!" xml:space="preserve"> <source>Invitation expired!</source> - <target state="translated">Davetin süresi geçti!</target> + <target>Davetin süresi geçti!</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Invite friends" xml:space="preserve" approved="no"> + <trans-unit id="Invite friends" xml:space="preserve"> <source>Invite friends</source> - <target state="translated">Arkadaşları davet et</target> + <target>Arkadaşları davet et</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Invite members" xml:space="preserve" approved="no"> + <trans-unit id="Invite members" xml:space="preserve"> <source>Invite members</source> - <target state="translated">Üyeleri davet et</target> + <target>Üyeleri davet et</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Invite to group" xml:space="preserve" approved="no"> + <trans-unit id="Invite to group" xml:space="preserve"> <source>Invite to group</source> - <target state="translated">Gruba davet et</target> + <target>Gruba davet et</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Irreversible message deletion" xml:space="preserve" approved="no"> + <trans-unit id="Irreversible message deletion" xml:space="preserve"> <source>Irreversible message deletion</source> - <target state="translated">Geri dönülemeyen mesaj silimi</target> + <target>Geri dönülemeyen mesaj silimi</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Irreversible message deletion is prohibited in this chat." xml:space="preserve" approved="no"> + <trans-unit id="Irreversible message deletion is prohibited in this chat." xml:space="preserve"> <source>Irreversible message deletion is prohibited in this chat.</source> - <target state="translated">Bu sohbette geri döndürülemez mesaj silme yasaktır.</target> + <target>Bu sohbette geri döndürülemez mesaj silme yasaktır.</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Irreversible message deletion is prohibited in this group." xml:space="preserve" approved="no"> + <trans-unit id="Irreversible message deletion is prohibited in this group." xml:space="preserve"> <source>Irreversible message deletion is prohibited in this group.</source> - <target state="translated">Bu grupta geri döndürülemez mesaj silme yasaktır.</target> + <target>Bu grupta geri döndürülemez mesaj silme yasaktır.</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="It allows having many anonymous connections without any shared data between them in a single chat profile." xml:space="preserve" approved="no"> + <trans-unit id="It allows having many anonymous connections without any shared data between them in a single chat profile." xml:space="preserve"> <source>It allows having many anonymous connections without any shared data between them in a single chat profile.</source> - <target state="translated">Tek bir sohbet profilinde aralarında herhangi bir veri paylaşımı olmadan birçok anonim bağlantıya sahip olmaya izin verir.</target> + <target>Tek bir sohbet profilinde aralarında herhangi bir veri paylaşımı olmadan birçok anonim bağlantıya sahip olmaya izin verir.</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="It can happen when you or your connection used the old database backup." xml:space="preserve" approved="no"> + <trans-unit id="It can happen when you or your connection used the old database backup." xml:space="preserve"> <source>It can happen when you or your connection used the old database backup.</source> - <target state="translated">Siz veya bağlantınız eski veritabanı yedeğini kullandığında bu durum ortaya çıkabilir.</target> + <target>Siz veya bağlantınız eski veritabanı yedeğini kullandığında bu durum ortaya çıkabilir.</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="It can happen when: 1. The messages expired in the sending client after 2 days or on the server after 30 days. 2. Message decryption failed, because you or your contact used old database backup. 3. The connection was compromised." xml:space="preserve" approved="no"> + <trans-unit id="It can happen when: 1. The messages expired in the sending client after 2 days or on the server after 30 days. 2. Message decryption failed, because you or your contact used old database backup. 3. The connection was compromised." xml:space="preserve"> <source>It can happen when: 1. The messages expired in the sending client after 2 days or on the server after 30 days. 2. Message decryption failed, because you or your contact used old database backup. 3. The connection was compromised.</source> - <target state="translated">Şu durumlarda ortaya çıkabilir: + <target>Şu durumlarda ortaya çıkabilir: 1. Mesajların gönderici istemcide 2 gün sonra veya sunucuda 30 gün sonra süresi dolmuştur. 2. Siz veya kişi eski veritabanı yedeği kullandığı için mesaj şifre çözme işlemi başarısız olmuştur. 3. Bağlantı tehlikeye girmiştir.</target> <note>No comment provided by engineer.</note> </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" approved="no"> + <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 state="translated">Bu bağlantı üzerinden zaten bağlanmışsınız gibi görünüyor. Eğer durum böyle değilse, bir hata oluştu (%@).</target> + <target>Bu bağlantı üzerinden zaten bağlanmışsınız gibi görünüyor. Eğer durum böyle değilse, bir hata oluştu (%@).</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Italian interface" xml:space="preserve" approved="no"> + <trans-unit id="Italian interface" xml:space="preserve"> <source>Italian interface</source> - <target state="translated">İtalyanca arayüz</target> + <target>İtalyanca arayüz</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Japanese interface" xml:space="preserve" approved="no"> + <trans-unit id="Japanese interface" xml:space="preserve"> <source>Japanese interface</source> - <target state="translated">Japonca arayüz</target> + <target>Japonca arayüz</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Join" xml:space="preserve" approved="no"> + <trans-unit id="Join" xml:space="preserve"> <source>Join</source> - <target state="translated">Katıl</target> + <target>Katıl</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Join group" xml:space="preserve" approved="no"> + <trans-unit id="Join group" xml:space="preserve"> <source>Join group</source> - <target state="translated">Gruba katıl</target> + <target>Gruba katıl</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Join incognito" xml:space="preserve" approved="no"> + <trans-unit id="Join group conversations" xml:space="preserve"> + <source>Join group conversations</source> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="Join group?" xml:space="preserve"> + <source>Join group?</source> + <target>Gruba katılınsın mı?</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="Join incognito" xml:space="preserve"> <source>Join incognito</source> - <target state="translated">Gizli katıl</target> + <target>Gizli katıl</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Joining group" xml:space="preserve" approved="no"> + <trans-unit id="Join with current profile" xml:space="preserve"> + <source>Join with current profile</source> + <target>Şu anki profille katıl</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="Join your group? This is your link for group %@!" xml:space="preserve"> + <source>Join your group? +This is your link for group %@!</source> + <target>Bu gruba katılınsın mı? +Bu senin grup için bağlantın %@!</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="Joining group" xml:space="preserve"> <source>Joining group</source> - <target state="translated">Gruba katılınıyor</target> + <target>Gruba katılınıyor</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="KeyChain error" xml:space="preserve" approved="no"> + <trans-unit id="Keep" xml:space="preserve"> + <source>Keep</source> + <target>Tut</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="Keep the app open to use it from desktop" xml:space="preserve"> + <source>Keep the app open to use it from desktop</source> + <target>Bilgisayardan kullanmak için uygulamayı açık tut</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="Keep unused invitation?" xml:space="preserve"> + <source>Keep unused invitation?</source> + <target>Kullanılmamış davet tutulsun mu?</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="Keep your connections" xml:space="preserve"> + <source>Keep your connections</source> + <target>Bağlantılarınızı koruyun</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="KeyChain error" xml:space="preserve"> <source>KeyChain error</source> - <target state="translated">Anahtar Zinciri hatası</target> + <target>Anahtar Zinciri hatası</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Keychain error" xml:space="preserve" approved="no"> + <trans-unit id="Keychain error" xml:space="preserve"> <source>Keychain error</source> - <target state="translated">Anahtar Zinciri hatası</target> + <target>Anahtar Zinciri hatası</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="LIVE" xml:space="preserve" approved="no"> + <trans-unit id="LIVE" xml:space="preserve"> <source>LIVE</source> - <target state="translated">CANLI</target> + <target>CANLI</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Large file!" xml:space="preserve" approved="no"> + <trans-unit id="Large file!" xml:space="preserve"> <source>Large file!</source> - <target state="translated">Büyük dosya!</target> + <target>Büyük dosya!</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Learn more" xml:space="preserve" approved="no"> + <trans-unit id="Learn more" xml:space="preserve"> <source>Learn more</source> - <target state="translated">Daha fazlası</target> + <target>Daha fazlası</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Leave" xml:space="preserve" approved="no"> + <trans-unit id="Leave" xml:space="preserve"> <source>Leave</source> - <target state="translated">Ayrıl</target> + <target>Ayrıl</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Leave group" xml:space="preserve" approved="no"> + <trans-unit id="Leave group" xml:space="preserve"> <source>Leave group</source> - <target state="translated">Gruptan ayrıl</target> + <target>Gruptan ayrıl</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Leave group?" xml:space="preserve" approved="no"> + <trans-unit id="Leave group?" xml:space="preserve"> <source>Leave group?</source> - <target state="translated">Gruptan çıkılsın mı?</target> + <target>Gruptan çıkılsın mı?</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Let's talk in SimpleX Chat" xml:space="preserve" approved="no"> + <trans-unit id="Let's talk in SimpleX Chat" xml:space="preserve"> <source>Let's talk in SimpleX Chat</source> - <target state="translated">Hadi SimpleX Chat'te konuşalım</target> + <target>Hadi SimpleX Chat'te konuşalım</target> <note>email subject</note> </trans-unit> - <trans-unit id="Light" xml:space="preserve" approved="no"> + <trans-unit id="Light" xml:space="preserve"> <source>Light</source> - <target state="translated">Açık</target> + <target>Açık</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Limitations" xml:space="preserve" approved="no"> + <trans-unit id="Limitations" xml:space="preserve"> <source>Limitations</source> - <target state="translated">Sınırlamalar</target> + <target>Sınırlamalar</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Live message!" xml:space="preserve" approved="no"> + <trans-unit id="Link mobile and desktop apps! 🔗" xml:space="preserve"> + <source>Link mobile and desktop apps! 🔗</source> + <target>Telefon ve bilgisayar uygulamalarını bağla! 🔗</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="Linked desktop options" xml:space="preserve"> + <source>Linked desktop options</source> + <target>Bağlanmış bilgisayar ayarları</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="Linked desktops" xml:space="preserve"> + <source>Linked desktops</source> + <target>Bağlanmış bilgisayarlar</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="Live message!" xml:space="preserve"> <source>Live message!</source> - <target state="translated">Canlı mesaj!</target> + <target>Canlı mesaj!</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Live messages" xml:space="preserve" approved="no"> + <trans-unit id="Live messages" xml:space="preserve"> <source>Live messages</source> - <target state="translated">Canlı mesajlar</target> + <target>Canlı mesajlar</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Local name" xml:space="preserve" approved="no"> + <trans-unit id="Local" xml:space="preserve"> + <source>Local</source> + <target>Yerel</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="Local name" xml:space="preserve"> <source>Local name</source> - <target state="translated">Yerel isim</target> + <target>Yerel isim</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Local profile data only" xml:space="preserve" approved="no"> + <trans-unit id="Local profile data only" xml:space="preserve"> <source>Local profile data only</source> - <target state="translated">Sadece yerel profil verisi</target> + <target>Sadece yerel profil verisi</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Lock after" xml:space="preserve" approved="no"> + <trans-unit id="Lock after" xml:space="preserve"> <source>Lock after</source> - <target state="translated">Sonra kilitle</target> + <target>Sonra kilitle</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Lock mode" xml:space="preserve" approved="no"> + <trans-unit id="Lock mode" xml:space="preserve"> <source>Lock mode</source> - <target state="translated">Kilit modu</target> + <target>Kilit modu</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Make a private connection" xml:space="preserve" approved="no"> + <trans-unit id="Make a private connection" xml:space="preserve"> <source>Make a private connection</source> - <target state="translated">Gizli bir bağlantı oluştur</target> + <target>Gizli bir bağlantı oluştur</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Make profile private!" xml:space="preserve" approved="no"> + <trans-unit id="Make one message disappear" xml:space="preserve"> + <source>Make one message disappear</source> + <target>Bir mesajın kaybolmasını sağlayın</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="Make profile private!" xml:space="preserve"> <source>Make profile private!</source> - <target state="translated">Profili gizli yap!</target> + <target>Profili gizli yap!</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Make sure %@ server addresses are in correct format, line separated and are not duplicated (%@)." xml:space="preserve" approved="no"> + <trans-unit id="Make sure %@ server addresses are in correct format, line separated and are not duplicated (%@)." xml:space="preserve"> <source>Make sure %@ server addresses are in correct format, line separated and are not duplicated (%@).</source> - <target state="translated">%@ sunucu adreslerinin doğru formatta olduğundan, satır ayrımı yapıldığından ve yinelenmediğinden (%@) emin olun.</target> + <target>%@ sunucu adreslerinin doğru formatta olduğundan, satır ayrımı yapıldığından ve yinelenmediğinden (%@) emin olun.</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Make sure WebRTC ICE server addresses are in correct format, line separated and are not duplicated." xml:space="preserve" approved="no"> + <trans-unit id="Make sure WebRTC ICE server addresses are in correct format, line separated and are not duplicated." xml:space="preserve"> <source>Make sure WebRTC ICE server addresses are in correct format, line separated and are not duplicated.</source> - <target state="translated">WebRTC ICE sunucu adreslerinin doğru formatta olduğundan, satırlara ayrıldığından ve yinelenmediğinden emin olun.</target> + <target>WebRTC ICE sunucu adreslerinin doğru formatta olduğundan, satırlara ayrıldığından ve yinelenmediğinden emin olun.</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Many people asked: *if SimpleX has no user identifiers, how can it deliver messages?*" xml:space="preserve" approved="no"> + <trans-unit id="Many people asked: *if SimpleX has no user identifiers, how can it deliver messages?*" xml:space="preserve"> <source>Many people asked: *if SimpleX has no user identifiers, how can it deliver messages?*</source> - <target state="translated">Çoğu kişi sordu: *eğer SimpleX'in hiç kullanıcı tanımlayıcıları yok, o zaman mesajları nasıl gönderebiliyor?*</target> + <target>Çoğu kişi sordu: *eğer SimpleX'in hiç kullanıcı tanımlayıcıları yok, o zaman mesajları nasıl gönderebiliyor?*</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Mark deleted for everyone" xml:space="preserve" approved="no"> + <trans-unit id="Mark deleted for everyone" xml:space="preserve"> <source>Mark deleted for everyone</source> - <target state="translated">Herkes için silinmiş olarak işaretle</target> + <target>Herkes için silinmiş olarak işaretle</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Mark read" xml:space="preserve" approved="no"> + <trans-unit id="Mark read" xml:space="preserve"> <source>Mark read</source> - <target state="translated">Okunmuş olarak işaretle</target> + <target>Okunmuş olarak işaretle</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Mark verified" xml:space="preserve" approved="no"> + <trans-unit id="Mark verified" xml:space="preserve"> <source>Mark verified</source> - <target state="translated">Onaylanmış olarak işaretle</target> + <target>Onaylanmış olarak işaretle</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Markdown in messages" xml:space="preserve" approved="no"> + <trans-unit id="Markdown in messages" xml:space="preserve"> <source>Markdown in messages</source> - <target state="translated">Mesajlarda işaretleme</target> + <target>Mesajlarda işaretleme</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Max 30 seconds, received instantly." xml:space="preserve" approved="no"> + <trans-unit id="Max 30 seconds, received instantly." xml:space="preserve"> <source>Max 30 seconds, received instantly.</source> - <target state="translated">Maksimum 30 saniye, anında alındı.</target> + <target>Maksimum 30 saniye, anında alındı.</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Member" xml:space="preserve" approved="no"> + <trans-unit id="Member" xml:space="preserve"> <source>Member</source> - <target state="translated">Kişi</target> + <target>Kişi</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Member role will be changed to "%@". All group members will be notified." xml:space="preserve" approved="no"> + <trans-unit id="Member role will be changed to "%@". All group members will be notified." xml:space="preserve"> <source>Member role will be changed to "%@". All group members will be notified.</source> - <target state="translated">Üye rolü "%@" olarak değiştirilecektir. Ve tüm grup üyeleri bilgilendirilecektir.</target> + <target>Üye rolü "%@" olarak değiştirilecektir. Ve tüm grup üyeleri bilgilendirilecektir.</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Member role will be changed to "%@". The member will receive a new invitation." xml:space="preserve" approved="no"> + <trans-unit id="Member role will be changed to "%@". The member will receive a new invitation." xml:space="preserve"> <source>Member role will be changed to "%@". The member will receive a new invitation.</source> - <target state="translated">Üye rolü "%@" olarak değiştirilecektir. Ve üye yeni bir davetiye alacaktır.</target> + <target>Üye rolü "%@" olarak değiştirilecektir. Ve üye yeni bir davetiye alacaktır.</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Member will be removed from group - this cannot be undone!" xml:space="preserve" approved="no"> + <trans-unit id="Member will be removed from group - this cannot be undone!" xml:space="preserve"> <source>Member will be removed from group - this cannot be undone!</source> - <target state="translated">Üye gruptan çıkarılacaktır - bu geri alınamaz!</target> + <target>Üye gruptan çıkarılacaktır - bu geri alınamaz!</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Message delivery error" xml:space="preserve" approved="no"> + <trans-unit id="Message delivery error" xml:space="preserve"> <source>Message delivery error</source> - <target state="translated">Mesaj gönderim hatası</target> + <target>Mesaj gönderim hatası</target> + <note>item status text</note> + </trans-unit> + <trans-unit id="Message delivery receipts!" xml:space="preserve"> + <source>Message delivery receipts!</source> + <target>Mesaj alındı bilgisi!</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Message draft" xml:space="preserve" approved="no"> + <trans-unit id="Message draft" xml:space="preserve"> <source>Message draft</source> - <target state="translated">Mesaj taslağı</target> + <target>Mesaj taslağı</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Message reactions" xml:space="preserve" approved="no"> + <trans-unit id="Message reactions" xml:space="preserve"> <source>Message reactions</source> - <target state="translated">Mesaj tepkileri</target> + <target>Mesaj tepkileri</target> <note>chat feature</note> </trans-unit> - <trans-unit id="Message reactions are prohibited in this chat." xml:space="preserve" approved="no"> + <trans-unit id="Message reactions are prohibited in this chat." xml:space="preserve"> <source>Message reactions are prohibited in this chat.</source> - <target state="translated">Mesaj tepkileri bu sohbette yasaklandı.</target> + <target>Mesaj tepkileri bu sohbette yasaklandı.</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Message reactions are prohibited in this group." xml:space="preserve" approved="no"> + <trans-unit id="Message reactions are prohibited in this group." xml:space="preserve"> <source>Message reactions are prohibited in this group.</source> - <target state="translated">Mesaj tepkileri bu grupta yasaklandı.</target> + <target>Mesaj tepkileri bu grupta yasaklandı.</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Message text" xml:space="preserve" approved="no"> + <trans-unit id="Message text" xml:space="preserve"> <source>Message text</source> - <target state="translated">Mesaj yazısı</target> + <target>Mesaj yazısı</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Messages" xml:space="preserve" approved="no"> + <trans-unit id="Messages" xml:space="preserve"> <source>Messages</source> - <target state="translated">Mesajlar</target> + <target>Mesajlar</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Messages & files" xml:space="preserve" approved="no"> + <trans-unit id="Messages & files" xml:space="preserve"> <source>Messages & files</source> - <target state="translated">Mesajlar & dosyalar</target> + <target>Mesajlar & dosyalar</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Migrating database archive..." xml:space="preserve"> - <source>Migrating database archive...</source> + <trans-unit id="Messages from %@ will be shown!" xml:space="preserve"> + <source>Messages from %@ will be shown!</source> + <target>%@ den gelen mesajlar gösterilecektir!</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Migrating database archive…" xml:space="preserve" approved="no"> + <trans-unit id="Migrating database archive…" xml:space="preserve"> <source>Migrating database archive…</source> - <target state="translated">Veritabanı arşivine geçiliyor…</target> + <target>Veritabanı arşivine geçiliyor…</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Migration error:" xml:space="preserve" approved="no"> + <trans-unit id="Migration error:" xml:space="preserve"> <source>Migration error:</source> - <target state="translated">Geçiş hatası:</target> + <target>Geçiş hatası:</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Migration failed. Tap **Skip** below to continue using the current database. Please report the issue to the app developers via chat or email [chat@simplex.chat](mailto:chat@simplex.chat)." xml:space="preserve" approved="no"> + <trans-unit id="Migration failed. Tap **Skip** below to continue using the current database. Please report the issue to the app developers via chat or email [chat@simplex.chat](mailto:chat@simplex.chat)." xml:space="preserve"> <source>Migration failed. Tap **Skip** below to continue using the current database. Please report the issue to the app developers via chat or email [chat@simplex.chat](mailto:chat@simplex.chat).</source> - <target state="translated">Geçiş başarısız oldu. Alttaki **Geç** tuşuna basarak şu anki veritabanını kullanabilirsiniz. Lütfen sorunu sohbet veya e-posta yoluyla uygulama geliştiricilerine bildirin[chat@simplex.chat](mailto:chat@simplex.chat).</target> + <target>Geçiş başarısız oldu. Alttaki **Geç** tuşuna basarak şu anki veritabanını kullanabilirsiniz. Lütfen sorunu sohbet veya e-posta yoluyla uygulama geliştiricilerine bildirin[chat@simplex.chat](mailto:chat@simplex.chat).</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Migration is completed" xml:space="preserve" approved="no"> + <trans-unit id="Migration is completed" xml:space="preserve"> <source>Migration is completed</source> - <target state="translated">Geçiş tamamlandı</target> + <target>Geçiş tamamlandı</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Migrations: %@" xml:space="preserve" approved="no"> + <trans-unit id="Migrations: %@" xml:space="preserve"> <source>Migrations: %@</source> - <target state="translated">Geçişler: %@</target> + <target>Geçişler: %@</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Moderate" xml:space="preserve" approved="no"> + <trans-unit id="Moderate" xml:space="preserve"> <source>Moderate</source> - <target state="translated">Yönet</target> + <target>Yönet</target> <note>chat item action</note> </trans-unit> - <trans-unit id="Moderated at" xml:space="preserve" approved="no"> + <trans-unit id="Moderated at" xml:space="preserve"> <source>Moderated at</source> - <target state="translated">de yönetildi</target> + <target>de yönetildi</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Moderated at: %@" xml:space="preserve" approved="no"> + <trans-unit id="Moderated at: %@" xml:space="preserve"> <source>Moderated at: %@</source> - <target state="translated">%@ de yönetildi</target> + <target>%@ de yönetildi</target> <note>copied message info</note> </trans-unit> - <trans-unit id="More improvements are coming soon!" xml:space="preserve" approved="no"> + <trans-unit id="More improvements are coming soon!" xml:space="preserve"> <source>More improvements are coming soon!</source> - <target state="translated">Daha fazla geliştirmeler yakında geliyor!</target> + <target>Daha fazla geliştirmeler yakında geliyor!</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Most likely this contact has deleted the connection with you." xml:space="preserve" approved="no"> + <trans-unit id="Most likely this connection is deleted." xml:space="preserve"> + <source>Most likely this connection is deleted.</source> + <target>Büyük ihtimalle bu bağlantı silinmiş.</target> + <note>item status description</note> + </trans-unit> + <trans-unit id="Most likely this contact has deleted the connection with you." xml:space="preserve"> <source>Most likely this contact has deleted the connection with you.</source> - <target state="translated">Büyük ihtimalle bu kişi seninle bağlantını sildi.</target> + <target>Büyük ihtimalle bu kişi seninle bağlantını sildi.</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Multiple chat profiles" xml:space="preserve" approved="no"> + <trans-unit id="Multiple chat profiles" xml:space="preserve"> <source>Multiple chat profiles</source> - <target state="translated">Çoklu sohbet profili</target> + <target>Çoklu sohbet profili</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Mute" xml:space="preserve" approved="no"> + <trans-unit id="Mute" xml:space="preserve"> <source>Mute</source> - <target state="translated">Sustur</target> + <target>Sustur</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Muted when inactive!" xml:space="preserve" approved="no"> + <trans-unit id="Muted when inactive!" xml:space="preserve"> <source>Muted when inactive!</source> - <target state="translated">Aktif değilken susturuldu!</target> + <target>Aktif değilken susturuldu!</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Name" xml:space="preserve" approved="no"> + <trans-unit id="Name" xml:space="preserve"> <source>Name</source> - <target state="translated">İsim</target> + <target>İsim</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Network & servers" xml:space="preserve" approved="no"> + <trans-unit id="Network & servers" xml:space="preserve"> <source>Network & servers</source> - <target state="translated">Ağ & sunucular</target> + <target>Ağ & sunucular</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Network settings" xml:space="preserve" approved="no"> + <trans-unit id="Network settings" xml:space="preserve"> <source>Network settings</source> - <target state="translated">Ağ ayarları</target> + <target>Ağ ayarları</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Network status" xml:space="preserve" approved="no"> + <trans-unit id="Network status" xml:space="preserve"> <source>Network status</source> - <target state="translated">Ağ durumu</target> + <target>Ağ durumu</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="New Passcode" xml:space="preserve" approved="no"> + <trans-unit id="New Passcode" xml:space="preserve"> <source>New Passcode</source> - <target state="translated">Yeni şifre</target> + <target>Yeni şifre</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="New contact request" xml:space="preserve" approved="no"> + <trans-unit id="New chat" xml:space="preserve"> + <source>New chat</source> + <target>Yeni sohbet</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="New contact request" xml:space="preserve"> <source>New contact request</source> - <target state="translated">Yeni bağlantı isteği</target> + <target>Yeni bağlantı isteği</target> <note>notification</note> </trans-unit> - <trans-unit id="New contact:" xml:space="preserve" approved="no"> + <trans-unit id="New contact:" xml:space="preserve"> <source>New contact:</source> - <target state="translated">Yeni kişi:</target> + <target>Yeni kişi:</target> <note>notification</note> </trans-unit> - <trans-unit id="New database archive" xml:space="preserve" approved="no"> + <trans-unit id="New database archive" xml:space="preserve"> <source>New database archive</source> - <target state="translated">Yeni veritabanı arşivi</target> + <target>Yeni veritabanı arşivi</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="New display name" xml:space="preserve" approved="no"> + <trans-unit id="New desktop app!" xml:space="preserve"> + <source>New desktop app!</source> + <target>Yeni bilgisayar uygulaması!</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="New display name" xml:space="preserve"> <source>New display name</source> - <target state="translated">Yeni görünen ad</target> + <target>Yeni görünen ad</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="New in %@" xml:space="preserve" approved="no"> + <trans-unit id="New in %@" xml:space="preserve"> <source>New in %@</source> - <target state="translated">%@ da yeni</target> + <target>%@ da yeni</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="New member role" xml:space="preserve" approved="no"> + <trans-unit id="New member role" xml:space="preserve"> <source>New member role</source> - <target state="translated">Yeni üye rolü</target> + <target>Yeni üye rolü</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="New message" xml:space="preserve" approved="no"> + <trans-unit id="New message" xml:space="preserve"> <source>New message</source> - <target state="translated">Yeni mesaj</target> + <target>Yeni mesaj</target> <note>notification</note> </trans-unit> - <trans-unit id="New passphrase…" xml:space="preserve" approved="no"> + <trans-unit id="New passphrase…" xml:space="preserve"> <source>New passphrase…</source> - <target state="translated">Yeni parola…</target> + <target>Yeni parola…</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="No" xml:space="preserve" approved="no"> + <trans-unit id="No" xml:space="preserve"> <source>No</source> - <target state="translated">Hayır</target> + <target>Hayır</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="No app password" xml:space="preserve" approved="no"> + <trans-unit id="No app password" xml:space="preserve"> <source>No app password</source> - <target state="translated">Uygulama şifresi yok</target> + <target>Uygulama şifresi yok</target> <note>Authentication unavailable</note> </trans-unit> - <trans-unit id="No contacts selected" xml:space="preserve" approved="no"> + <trans-unit id="No contacts selected" xml:space="preserve"> <source>No contacts selected</source> - <target state="translated">Hiçbir kişi seçilmedi</target> + <target>Hiçbir kişi seçilmedi</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="No contacts to add" xml:space="preserve" approved="no"> + <trans-unit id="No contacts to add" xml:space="preserve"> <source>No contacts to add</source> - <target state="translated">Eklenecek kişi yok</target> + <target>Eklenecek kişi yok</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="No device token!" xml:space="preserve" approved="no"> + <trans-unit id="No delivery information" xml:space="preserve"> + <source>No delivery information</source> + <target>Gönderim bilgisi yok</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="No device token!" xml:space="preserve"> <source>No device token!</source> - <target state="translated">Cihaz tokeni yok!</target> + <target>Cihaz tokeni yok!</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="No filtered chats" xml:space="preserve" approved="no"> + <trans-unit id="No filtered chats" xml:space="preserve"> <source>No filtered chats</source> - <target state="translated">Filtrelenmiş sohbetler yok</target> + <target>Filtrelenmiş sohbetler yok</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="No group!" xml:space="preserve" approved="no"> + <trans-unit id="No group!" xml:space="preserve"> <source>Group not found!</source> - <target state="translated">Grup bulunamadı!</target> + <target>Grup bulunamadı!</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="No history" xml:space="preserve" approved="no"> + <trans-unit id="No history" xml:space="preserve"> <source>No history</source> - <target state="translated">Geçmiş yok</target> + <target>Geçmiş yok</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="No permission to record voice message" xml:space="preserve" approved="no"> + <trans-unit id="No permission to record voice message" xml:space="preserve"> <source>No permission to record voice message</source> - <target state="translated">Sesli mesaj kaydetmek için izin yok</target> + <target>Sesli mesaj kaydetmek için izin yok</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="No received or sent files" xml:space="preserve" approved="no"> + <trans-unit id="No received or sent files" xml:space="preserve"> <source>No received or sent files</source> - <target state="translated">Hiç alınmış veya gönderilmiş dosya yok</target> + <target>Hiç alınmış veya gönderilmiş dosya yok</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Notifications" xml:space="preserve" approved="no"> + <trans-unit id="Not compatible!" xml:space="preserve"> + <source>Not compatible!</source> + <target>Uyumlu değil!</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="Notifications" xml:space="preserve"> <source>Notifications</source> - <target state="translated">Bildirimler</target> + <target>Bildirimler</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Notifications are disabled!" xml:space="preserve" approved="no"> + <trans-unit id="Notifications are disabled!" xml:space="preserve"> <source>Notifications are disabled!</source> - <target state="translated">Bildirimler devre dışı!</target> + <target>Bildirimler devre dışı!</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Now admins can: - delete members' messages. - disable members ("observer" role)" xml:space="preserve" approved="no"> + <trans-unit id="Now admins can: - delete members' messages. - disable members ("observer" role)" xml:space="preserve"> <source>Now admins can: - delete members' messages. - disable members ("observer" role)</source> - <target state="translated">Şimdi yöneticiler: + <target>Şimdi yöneticiler: - üyelerin mesajlarını silebilir - üyeleri devre dışı bırakabilir ("gözlemci" rolü)</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Off" xml:space="preserve" approved="no"> + <trans-unit id="OK" xml:space="preserve"> + <source>OK</source> + <target>TAMAM</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="Off" xml:space="preserve"> <source>Off</source> - <target state="translated">Kapalı</target> + <target>Kapalı</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Off (Local)" xml:space="preserve"> - <source>Off (Local)</source> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="Ok" xml:space="preserve" approved="no"> + <trans-unit id="Ok" xml:space="preserve"> <source>Ok</source> - <target state="translated">Tamam</target> + <target>Tamam</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Old database" xml:space="preserve" approved="no"> + <trans-unit id="Old database" xml:space="preserve"> <source>Old database</source> - <target state="translated">Eski veritabanı</target> + <target>Eski veritabanı</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Old database archive" xml:space="preserve" approved="no"> + <trans-unit id="Old database archive" xml:space="preserve"> <source>Old database archive</source> - <target state="translated">Eski veritabanı arşivi</target> + <target>Eski veritabanı arşivi</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="One-time invitation link" xml:space="preserve" approved="no"> + <trans-unit id="One-time invitation link" xml:space="preserve"> <source>One-time invitation link</source> - <target state="translated">Tek zamanlı bağlantı daveti</target> + <target>Tek zamanlı bağlantı daveti</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Onion hosts will be required for connection. Requires enabling VPN." xml:space="preserve" approved="no"> + <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 state="translated">Bağlantı için Onion ana bilgisayarları gerekecektir. VPN'nin etkinleştirilmesi gerekir.</target> + <target>Bağlantı için Onion ana bilgisayarları gerekecektir. VPN'nin etkinleştirilmesi gerekir.</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" approved="no"> + <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 state="translated">Onion ana bilgisayarları mevcutsa kullanılacaktır. VPN'nin etkinleştirilmesi gerekir.</target> + <target>Onion ana bilgisayarları mevcutsa kullanılacaktır. VPN'nin etkinleştirilmesi gerekir.</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Onion hosts will not be used." xml:space="preserve" approved="no"> + <trans-unit id="Onion hosts will not be used." xml:space="preserve"> <source>Onion hosts will not be used.</source> - <target state="translated">Onion ana bilgisayarları kullanılmayacaktır.</target> + <target>Onion ana bilgisayarları kullanılmayacaktır.</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" approved="no"> + <trans-unit id="Only client devices store user profiles, contacts, groups, and messages sent with **2-layer end-to-end encryption**." xml:space="preserve"> <source>Only client devices store user profiles, contacts, groups, and messages sent with **2-layer end-to-end encryption**.</source> - <target state="translated">Yalnızca istemci cihazlar kullanıcı profillerini, kişileri, grupları ve **2 katmanlı uçtan uca şifreleme** ile gönderilen mesajları depolar.</target> + <target>Yalnızca istemci cihazlar kullanıcı profillerini, kişileri, grupları ve **2 katmanlı uçtan uca şifreleme** ile gönderilen mesajları depolar.</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Only group owners can change group preferences." xml:space="preserve" approved="no"> + <trans-unit id="Only group owners can change group preferences." xml:space="preserve"> <source>Only group owners can change group preferences.</source> - <target state="translated">Grup tercihlerini yalnızca grup sahipleri değiştirebilir.</target> + <target>Grup tercihlerini yalnızca grup sahipleri değiştirebilir.</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Only group owners can enable files and media." xml:space="preserve" approved="no"> + <trans-unit id="Only group owners can enable files and media." xml:space="preserve"> <source>Only group owners can enable files and media.</source> - <target state="translated">Yalnızca grup sahipleri dosyaları ve medyayı etkinleştirebilir.</target> + <target>Yalnızca grup sahipleri dosyaları ve medyayı etkinleştirebilir.</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Only group owners can enable voice messages." xml:space="preserve" approved="no"> + <trans-unit id="Only group owners can enable voice messages." xml:space="preserve"> <source>Only group owners can enable voice messages.</source> - <target state="translated">Yalnızca grup sahipleri sesli mesajları etkinleştirebilir.</target> + <target>Yalnızca grup sahipleri sesli mesajları etkinleştirebilir.</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Only you can add message reactions." xml:space="preserve" approved="no"> + <trans-unit id="Only you can add message reactions." xml:space="preserve"> <source>Only you can add message reactions.</source> - <target state="translated">Sadece siz mesaj tepkileri ekleyebilirsiniz.</target> + <target>Sadece siz mesaj tepkileri ekleyebilirsiniz.</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Only you can irreversibly delete messages (your contact can mark them for deletion)." xml:space="preserve" approved="no"> - <source>Only you can irreversibly delete messages (your contact can mark them for deletion).</source> - <target state="translated">Mesajları yalnızca siz geri döndürülemez şekilde silebilirsiniz (kişi bunları silinmek üzere işaretleyebilir).</target> + <trans-unit id="Only you can irreversibly delete messages (your contact can mark them for deletion). (24 hours)" xml:space="preserve"> + <source>Only you can irreversibly delete messages (your contact can mark them for deletion). (24 hours)</source> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Only you can make calls." xml:space="preserve" approved="no"> + <trans-unit id="Only you can make calls." xml:space="preserve"> <source>Only you can make calls.</source> - <target state="translated">Sadece sen aramalar yapabilirsin.</target> + <target>Sadece sen aramalar yapabilirsin.</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Only you can send disappearing messages." xml:space="preserve" approved="no"> + <trans-unit id="Only you can send disappearing messages." xml:space="preserve"> <source>Only you can send disappearing messages.</source> - <target state="translated">Sadece sen kaybolan mesajlar gönderebilirsin.</target> + <target>Sadece sen kaybolan mesajlar gönderebilirsin.</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Only you can send voice messages." xml:space="preserve" approved="no"> + <trans-unit id="Only you can send voice messages." xml:space="preserve"> <source>Only you can send voice messages.</source> - <target state="translated">Sadece sen sesli mesajlar gönderebilirsin.</target> + <target>Sadece sen sesli mesajlar gönderebilirsin.</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Only your contact can add message reactions." xml:space="preserve" approved="no"> + <trans-unit id="Only your contact can add message reactions." xml:space="preserve"> <source>Only your contact can add message reactions.</source> - <target state="translated">Sadece karşıdaki kişi mesaj tepkileri ekleyebilir.</target> + <target>Sadece karşıdaki kişi mesaj tepkileri ekleyebilir.</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Only your contact can irreversibly delete messages (you can mark them for deletion)." xml:space="preserve" approved="no"> - <source>Only your contact can irreversibly delete messages (you can mark them for deletion).</source> - <target state="translated">Sadece karşıdaki kişi mesajları geri döndürülemez şekilde silebilir (silinmeleri için işaretleyebilirsiniz).</target> + <trans-unit id="Only your contact can irreversibly delete messages (you can mark them for deletion). (24 hours)" xml:space="preserve"> + <source>Only your contact can irreversibly delete messages (you can mark them for deletion). (24 hours)</source> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Only your contact can make calls." xml:space="preserve" approved="no"> + <trans-unit id="Only your contact can make calls." xml:space="preserve"> <source>Only your contact can make calls.</source> - <target state="translated">Sadece karşıdaki kişi aramalar yapabilir.</target> + <target>Sadece karşıdaki kişi aramalar yapabilir.</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Only your contact can send disappearing messages." xml:space="preserve" approved="no"> + <trans-unit id="Only your contact can send disappearing messages." xml:space="preserve"> <source>Only your contact can send disappearing messages.</source> - <target state="translated">Sadece karşıdaki kişi kaybolan mesajlar gönderebilir.</target> + <target>Sadece karşıdaki kişi kaybolan mesajlar gönderebilir.</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Only your contact can send voice messages." xml:space="preserve" approved="no"> + <trans-unit id="Only your contact can send voice messages." xml:space="preserve"> <source>Only your contact can send voice messages.</source> - <target state="translated">Sadece karşıdaki kişi sesli mesajlar gönderebilir.</target> + <target>Sadece karşıdaki kişi sesli mesajlar gönderebilir.</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Open Settings" xml:space="preserve" approved="no"> - <source>Open Settings</source> - <target state="translated">Ayarları aç</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="Open chat" xml:space="preserve" approved="no"> - <source>Open chat</source> - <target state="translated">Sohbeti aç</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="Open chat console" xml:space="preserve" approved="no"> - <source>Open chat console</source> - <target state="translated">Sohbet konsolunu aç</target> - <note>authentication reason</note> - </trans-unit> - <trans-unit id="Open user profiles" xml:space="preserve" approved="no"> - <source>Open user profiles</source> - <target state="translated">Kullanıcı profillerini aç</target> - <note>authentication reason</note> - </trans-unit> - <trans-unit id="Open-source protocol and code – anybody can run the servers." xml:space="preserve" approved="no"> - <source>Open-source protocol and code – anybody can run the servers.</source> - <target state="translated">Açık kaynak protokolü ve kodu - herhangi biri sunucuları çalıştırabilir.</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="Opening database…" xml:space="preserve"> - <source>Opening database…</source> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="Opening the link in the browser may reduce connection privacy and security. Untrusted SimpleX links will be red." xml:space="preserve"> - <source>Opening the link in the browser may reduce connection privacy and security. Untrusted SimpleX links will be red.</source> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="PING count" xml:space="preserve" approved="no"> - <source>PING count</source> - <target state="translated">PING sayısı</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="PING interval" xml:space="preserve" approved="no"> - <source>PING interval</source> - <target state="translated">PING aralığı</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="Passcode" xml:space="preserve" approved="no"> - <source>Passcode</source> - <target state="translated">Şifre</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="Passcode changed!" xml:space="preserve" approved="no"> - <source>Passcode changed!</source> - <target state="translated">Şifre değiştirildi!</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="Passcode entry" xml:space="preserve" approved="no"> - <source>Passcode entry</source> - <target state="translated">Şifre girişi</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="Passcode not changed!" xml:space="preserve" approved="no"> - <source>Passcode not changed!</source> - <target state="translated">Şifre değiştirilmedi!</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="Passcode set!" xml:space="preserve" approved="no"> - <source>Passcode set!</source> - <target state="translated">Şifre ayarlandı!</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="Password to show" xml:space="preserve" approved="no"> - <source>Password to show</source> - <target state="translated">Gösterilecek şifre</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="Paste" xml:space="preserve"> - <source>Paste</source> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="Paste image" xml:space="preserve" approved="no"> - <source>Paste image</source> - <target state="translated">Fotoğraf yapıştır</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="Paste received link" xml:space="preserve"> - <source>Paste received link</source> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="Paste the link you received into the box below to connect with your contact." xml:space="preserve"> - <source>Paste the link you received into the box below to connect with your contact.</source> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="People can connect to you only via the links you share." xml:space="preserve" approved="no"> - <source>People can connect to you only via the links you share.</source> - <target state="translated">İnsanlar size yalnızca paylaştığınız bağlantılar üzerinden ulaşabilir.</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="Periodically" xml:space="preserve" approved="no"> - <source>Periodically</source> - <target state="translated">Periyodik olarak</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="Permanent decryption error" xml:space="preserve" approved="no"> - <source>Permanent decryption error</source> - <target state="translated">Kalıcı şifre çözümü hatası</target> - <note>message decrypt error item</note> - </trans-unit> - <trans-unit id="Please ask your contact to enable sending voice messages." xml:space="preserve" approved="no"> - <source>Please ask your contact to enable sending voice messages.</source> - <target state="translated">Lütfen konuştuğunuz kişiden sesli mesaj göndermeyi etkinleştirmesini isteyin.</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="Please check that you used the correct link or ask your contact to send you another one." xml:space="preserve" approved="no"> - <source>Please check that you used the correct link or ask your contact to send you another one.</source> - <target state="translated">Lütfen doğru bağlantıyı kullandığınızı kontrol edin veya kişiden size başka bir bağlantı göndermesini isteyin.</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="Please check your network connection with %@ and try again." xml:space="preserve" approved="no"> - <source>Please check your network connection with %@ and try again.</source> - <target state="translated">Lütfen ağ bağlantınızı %@ ile kontrol edin ve tekrar deneyin.</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="Please check yours and your contact preferences." xml:space="preserve" approved="no"> - <source>Please check yours and your contact preferences.</source> - <target state="translated">Lütfen sizinkini ve iletişim tercihlerinizi kontrol edin.</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="Please contact group admin." xml:space="preserve" approved="no"> - <source>Please contact group admin.</source> - <target state="translated">Lütfen grup yöneticisiyle irtibata geçin.</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="Please enter correct current passphrase." xml:space="preserve" approved="no"> - <source>Please enter correct current passphrase.</source> - <target state="translated">Lütfen şu anki doğru olan parolayı girin.</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="Please enter the previous password after restoring database backup. This action can not be undone." xml:space="preserve" approved="no"> - <source>Please enter the previous password after restoring database backup. This action can not be undone.</source> - <target state="translated">Veritabanı yedeğini geri yükledikten sonra lütfen önceki şifreyi girin. Bu işlem geri alınamaz.</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="Please remember or store it securely - there is no way to recover a lost passcode!" xml:space="preserve" approved="no"> - <source>Please remember or store it securely - there is no way to recover a lost passcode!</source> - <target state="translated">Lütfen iyi hatırlayın veya güvenli bir şekilde saklayın - kaybolmuş bir parolayı kurtarmanın bir yolu yoktur!</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="Please report it to the developers." xml:space="preserve" approved="no"> - <source>Please report it to the developers.</source> - <target state="translated">Lütfen geliştiricilere bildirin.</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="Please restart the app and migrate the database to enable push notifications." xml:space="preserve" approved="no"> - <source>Please restart the app and migrate the database to enable push notifications.</source> - <target state="translated">Lütfen uygulamayı yeniden başlatın ve anlık bildirimleri etkinleştirmek için veritabanını taşıyın.</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="Please store passphrase securely, you will NOT be able to access chat if you lose it." xml:space="preserve" approved="no"> - <source>Please store passphrase securely, you will NOT be able to access chat if you lose it.</source> - <target state="translated">Lütfen parolayı güvenli bir şekilde saklayın, kaybederseniz sohbete ERİŞEMEZSİNİZ.</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="Please store passphrase securely, you will NOT be able to change it if you lose it." xml:space="preserve" approved="no"> - <source>Please store passphrase securely, you will NOT be able to change it if you lose it.</source> - <target state="translated">Lütfen parolayı güvenli bir şekilde saklayın, kaybederseniz parolayı DEĞİŞTİREMEZSİNİZ.</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="Polish interface" xml:space="preserve" approved="no"> - <source>Polish interface</source> - <target state="translated">Lehçe arayüz</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="Possibly, certificate fingerprint in server address is incorrect" xml:space="preserve" approved="no"> - <source>Possibly, certificate fingerprint in server address is incorrect</source> - <target state="translated">Muhtemelen, sunucu adresindeki parmakizi sertifikası doğru değil</target> - <note>server test error</note> - </trans-unit> - <trans-unit id="Preserve the last message draft, with attachments." xml:space="preserve" approved="no"> - <source>Preserve the last message draft, with attachments.</source> - <target state="translated">Son mesaj taslağını ekleriyle birlikte koru.</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="Preset server" xml:space="preserve" approved="no"> - <source>Preset server</source> - <target state="translated">Ön ayarlı sunucu</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="Preset server address" xml:space="preserve" approved="no"> - <source>Preset server address</source> - <target state="translated">Ön ayarlı sunucu adresi</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="Preview" xml:space="preserve" approved="no"> - <source>Preview</source> - <target state="translated">Ön izleme</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="Privacy & security" xml:space="preserve" approved="no"> - <source>Privacy & security</source> - <target state="translated">Gizlilik & güvenlik</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="Privacy redefined" xml:space="preserve" approved="no"> - <source>Privacy redefined</source> - <target state="translated">Gizlilik yeniden tanımlandı</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="Private filenames" xml:space="preserve" approved="no"> - <source>Private filenames</source> - <target state="translated">Gizli dosya adları</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="Profile and server connections" xml:space="preserve" approved="no"> - <source>Profile and server connections</source> - <target state="translated">Profil ve sunucu bağlantıları</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="Profile image" xml:space="preserve" approved="no"> - <source>Profile image</source> - <target state="translated">Profil fotoğrafı</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="Profile password" xml:space="preserve" approved="no"> - <source>Profile password</source> - <target state="translated">Profil parolası</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="Profile update will be sent to your contacts." xml:space="preserve" approved="no"> - <source>Profile update will be sent to your contacts.</source> - <target state="translated">Profil güncellemesi kişilerinize gönderilecektir.</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="Prohibit audio/video calls." xml:space="preserve" approved="no"> - <source>Prohibit audio/video calls.</source> - <target state="translated">Sesli/görüntülü aramaları yasakla.</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="Prohibit irreversible message deletion." xml:space="preserve" approved="no"> - <source>Prohibit irreversible message deletion.</source> - <target state="translated">Geri dönüşsüz mesaj silme işlemini yasakla.</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="Prohibit message reactions." xml:space="preserve" approved="no"> - <source>Prohibit message reactions.</source> - <target state="translated">Mesaj tepkisini yasakla.</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="Prohibit messages reactions." xml:space="preserve" approved="no"> - <source>Prohibit messages reactions.</source> - <target state="translated">Mesajlarda tepkileri yasakla.</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="Prohibit sending direct messages to members." xml:space="preserve" approved="no"> - <source>Prohibit sending direct messages to members.</source> - <target state="translated">Geri dönülmez mesaj silme işlemini yasakla.</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="Prohibit sending disappearing messages." xml:space="preserve" approved="no"> - <source>Prohibit sending disappearing messages.</source> - <target state="translated">Kaybolan mesajların gönderimini yasakla.</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="Prohibit sending files and media." xml:space="preserve" approved="no"> - <source>Prohibit sending files and media.</source> - <target state="translated">Dosyalar ve medya gönderimlerini yasakla.</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="Prohibit sending voice messages." xml:space="preserve" approved="no"> - <source>Prohibit sending voice messages.</source> - <target state="translated">Sesli mesajların gönderimini yasakla.</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="Protect app screen" xml:space="preserve" approved="no"> - <source>Protect app screen</source> - <target state="translated">Uygulama ekranını koru</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="Protect your chat profiles with a password!" xml:space="preserve" approved="no"> - <source>Protect your chat profiles with a password!</source> - <target state="translated">Bir parolayla birlikte sohbet profillerini koru!</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="Protocol timeout" xml:space="preserve" approved="no"> - <source>Protocol timeout</source> - <target state="translated">Protokol zaman aşımı</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="Protocol timeout per KB" xml:space="preserve" approved="no"> - <source>Protocol timeout per KB</source> - <target state="translated">KB başına protokol zaman aşımı</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="Push notifications" xml:space="preserve" approved="no"> - <source>Push notifications</source> - <target state="translated">Anında bildirimler</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="Rate the app" xml:space="preserve" approved="no"> - <source>Rate the app</source> - <target state="translated">Uygulamayı değerlendir</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="React…" xml:space="preserve" approved="no"> - <source>React…</source> - <target state="translated">Tepki ver…</target> - <note>chat item menu</note> - </trans-unit> - <trans-unit id="Read" xml:space="preserve" approved="no"> - <source>Read</source> - <target state="translated">Oku</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="Read more" xml:space="preserve" approved="no"> - <source>Read more</source> - <target state="translated">Dahasını oku</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="Read more in [User Guide](https://simplex.chat/docs/guide/app-settings.html#your-simplex-contact-address)." xml:space="preserve" approved="no"> - <source>Read more in [User Guide](https://simplex.chat/docs/guide/app-settings.html#your-simplex-contact-address).</source> - <target state="translated">[Kullanıcı Rehberi]nde daha fazlasını okuyun(https://simplex.chat/docs/guide/app-settings.html#your-simplex-contact-address).</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="Read more in [User Guide](https://simplex.chat/docs/guide/readme.html#connect-to-friends)." xml:space="preserve" approved="no"> - <source>Read more in [User Guide](https://simplex.chat/docs/guide/readme.html#connect-to-friends).</source> - <target state="translated">[Kullanıcı Rehberi]nde daha fazlasını okuyun(https://simplex.chat/docs/guide/readme.html#connect-to-friends).</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="Read more in our GitHub repository." xml:space="preserve" approved="no"> - <source>Read more in our GitHub repository.</source> - <target state="translated">Daha fazlasını GitHub depomuzdan oku.</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="Read more in our [GitHub repository](https://github.com/simplex-chat/simplex-chat#readme)." xml:space="preserve" approved="no"> - <source>Read more in our [GitHub repository](https://github.com/simplex-chat/simplex-chat#readme).</source> - <target state="translated">[GitHub deposu]nda daha fazlasını okuyun(https://github.com/simplex-chat/simplex-chat#readme).</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="Received at" xml:space="preserve" approved="no"> - <source>Received at</source> - <target state="translated">Şuradan alındı</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="Received at: %@" xml:space="preserve" approved="no"> - <source>Received at: %@</source> - <target state="translated">Şuradan alındı: %@</target> - <note>copied message info</note> - </trans-unit> - <trans-unit id="Received file event" xml:space="preserve" approved="no"> - <source>Received file event</source> - <target state="translated">Dosya etkinliği alındı</target> - <note>notification</note> - </trans-unit> - <trans-unit id="Received message" xml:space="preserve" approved="no"> - <source>Received message</source> - <target state="translated">Mesaj alındı</target> - <note>message info title</note> - </trans-unit> - <trans-unit id="Receiving address will be changed to a different server. Address change will complete after sender comes online." xml:space="preserve" approved="no"> - <source>Receiving address will be changed to a different server. Address change will complete after sender comes online.</source> - <target state="translated">Alıcı adresi farklı bir sunucuya değiştirilecektir. Gönderici çevrimiçi olduktan sonra adres değişikliği tamamlanacaktır.</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="Receiving file will be stopped." xml:space="preserve" approved="no"> - <source>Receiving file will be stopped.</source> - <target state="translated">Dosya alımı durdurulacaktır.</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="Receiving via" xml:space="preserve" approved="no"> - <source>Receiving via</source> - <target state="translated">Aracılığıyla alınıyor</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="Recipients see updates as you type them." xml:space="preserve" approved="no"> - <source>Recipients see updates as you type them.</source> - <target state="translated">Alıcılar yazdığına göre güncellemeleri görecektir.</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="Reconnect all connected servers to force message delivery. It uses additional traffic." xml:space="preserve" approved="no"> - <source>Reconnect all connected servers to force message delivery. It uses additional traffic.</source> - <target state="translated">Mesaj teslimini zorlamak için bağlı tüm sunucuları yeniden bağlayın. Ek trafik kullanır.</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="Reconnect servers?" xml:space="preserve" approved="no"> - <source>Reconnect servers?</source> - <target state="translated">Sunuculara yeniden bağlanılsın mı?</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="Record updated at" xml:space="preserve" approved="no"> - <source>Record updated at</source> - <target state="translated">Kayıt şu zamanda güncellendi</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="Record updated at: %@" xml:space="preserve" approved="no"> - <source>Record updated at: %@</source> - <target state="translated">Kayıt şu zamanda güncellendi: %@</target> - <note>copied message info</note> - </trans-unit> - <trans-unit id="Reduced battery usage" xml:space="preserve" approved="no"> - <source>Reduced battery usage</source> - <target state="translated">Azaltılmış pil kullanımı</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="Reject" xml:space="preserve" approved="no"> - <source>Reject</source> - <target state="translated">Reddet</target> - <note>reject incoming call via notification</note> - </trans-unit> - <trans-unit id="Reject contact (sender NOT notified)" xml:space="preserve"> - <source>Reject contact (sender NOT notified)</source> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="Reject contact request" xml:space="preserve" approved="no"> - <source>Reject contact request</source> - <target state="translated">Bağlanma isteğini reddet</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="Relay server is only used if necessary. Another party can observe your IP address." xml:space="preserve" approved="no"> - <source>Relay server is only used if necessary. Another party can observe your IP address.</source> - <target state="translated">Aktarma sunucusu yalnızca gerekli olduğunda kullanılır. Başka bir taraf IP adresinizi gözlemleyebilir.</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="Relay server protects your IP address, but it can observe the duration of the call." xml:space="preserve" approved="no"> - <source>Relay server protects your IP address, but it can observe the duration of the call.</source> - <target state="translated">Aktarıcı sunucu IP adresinizi korur, ancak aramanın süresini gözlemleyebilir.</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="Remove" xml:space="preserve" approved="no"> - <source>Remove</source> - <target state="translated">Sil</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="Remove member" xml:space="preserve" approved="no"> - <source>Remove member</source> - <target state="translated">Kişiyi sil</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="Remove member?" xml:space="preserve" approved="no"> - <source>Remove member?</source> - <target state="translated">Kişi silinsin mi?</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="Remove passphrase from keychain?" xml:space="preserve" approved="no"> - <source>Remove passphrase from keychain?</source> - <target state="translated">Anahtar Zinciri'ndeki parola silinsin mi?</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="Renegotiate" xml:space="preserve" approved="no"> - <source>Renegotiate</source> - <target state="translated">Yeniden müzakere</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="Renegotiate encryption" xml:space="preserve" approved="no"> - <source>Renegotiate encryption</source> - <target state="translated">Şifrelemeyi yeniden müzakere et</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="Renegotiate encryption?" xml:space="preserve" approved="no"> - <source>Renegotiate encryption?</source> - <target state="translated">Şifreleme yeniden müzakere edilsin mi?</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="Reply" xml:space="preserve" approved="no"> - <source>Reply</source> - <target state="translated">Yanıtla</target> - <note>chat item action</note> - </trans-unit> - <trans-unit id="Required" xml:space="preserve" approved="no"> - <source>Required</source> - <target state="translated">Gerekli</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="Reset" xml:space="preserve" approved="no"> - <source>Reset</source> - <target state="translated">Sıfırla</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="Reset colors" xml:space="preserve" approved="no"> - <source>Reset colors</source> - <target state="translated">Renkleri sıfırla</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="Reset to defaults" xml:space="preserve" approved="no"> - <source>Reset to defaults</source> - <target state="translated">Varsayılanlara sıfırla</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="Restart the app to create a new chat profile" xml:space="preserve" approved="no"> - <source>Restart the app to create a new chat profile</source> - <target state="translated">Yeni bir sohbet profili oluşturmak için uygulamayı yeniden başlatın</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="Restart the app to use imported chat database" xml:space="preserve" approved="no"> - <source>Restart the app to use imported chat database</source> - <target state="translated">İçe aktarılmış sohbet veritabanını kullanmak için uygulamayı yeniden başlatın</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="Restore" xml:space="preserve" approved="no"> - <source>Restore</source> - <target state="translated">Geri yükle</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="Restore database backup" xml:space="preserve" approved="no"> - <source>Restore database backup</source> - <target state="translated">Veritabanı yedeğini geri yükle</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="Restore database backup?" xml:space="preserve" approved="no"> - <source>Restore database backup?</source> - <target state="translated">Veritabanı yedeği geri yüklensin mi?</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="Restore database error" xml:space="preserve" approved="no"> - <source>Restore database error</source> - <target state="translated">Veritabanını geri yüklerken hata oluştu</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="Reveal" xml:space="preserve" approved="no"> - <source>Reveal</source> - <target state="translated">Göster</target> - <note>chat item action</note> - </trans-unit> - <trans-unit id="Revert" xml:space="preserve" approved="no"> - <source>Revert</source> - <target state="translated">Geri al</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="Revoke" xml:space="preserve" approved="no"> - <source>Revoke</source> - <target state="translated">İptal et</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="Revoke file" xml:space="preserve" approved="no"> - <source>Revoke file</source> - <target state="translated">Dosyayı iptal et</target> - <note>cancel file action</note> - </trans-unit> - <trans-unit id="Revoke file?" xml:space="preserve" approved="no"> - <source>Revoke file?</source> - <target state="translated">Dosya iptal edilsin mi?</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="Role" xml:space="preserve" approved="no"> - <source>Role</source> - <target state="translated">Rol</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="Run chat" xml:space="preserve" approved="no"> - <source>Run chat</source> - <target state="translated">Sohbeti çalıştır</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="SMP servers" xml:space="preserve" approved="no"> - <source>SMP servers</source> - <target state="translated">SMP sunucuları</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="Save" xml:space="preserve" approved="no"> - <source>Save</source> - <target state="translated">Kaydet</target> - <note>chat item action</note> - </trans-unit> - <trans-unit id="Save (and notify contacts)" xml:space="preserve" approved="no"> - <source>Save (and notify contacts)</source> - <target state="translated">Kaydet (ve kişilere bildir)</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="Save and notify contact" xml:space="preserve" approved="no"> - <source>Save and notify contact</source> - <target state="translated">Kaydet ve kişilere bildir</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="Save and notify group members" xml:space="preserve" approved="no"> - <source>Save and notify group members</source> - <target state="translated">Kaydet ve grup üyelerine bildir</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="Save and update group profile" xml:space="preserve" approved="no"> - <source>Save and update group profile</source> - <target state="translated">Kaydet ve grup profilini güncelle</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="Save archive" xml:space="preserve" approved="no"> - <source>Save archive</source> - <target state="translated">Arşivi kaydet</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="Save auto-accept settings" xml:space="preserve" approved="no"> - <source>Save auto-accept settings</source> - <target state="translated">Otomatik kabul et ayarlarını kaydet</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="Save group profile" xml:space="preserve" approved="no"> - <source>Save group profile</source> - <target state="translated">Grup profilini kaydet</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="Save passphrase and open chat" xml:space="preserve" approved="no"> - <source>Save passphrase and open chat</source> - <target state="translated">Parolayı kaydet ve sohbeti aç</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="Save passphrase in Keychain" xml:space="preserve" approved="no"> - <source>Save passphrase in Keychain</source> - <target state="translated">Parolayı Anahtar Zincirinde kaydet</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="Save preferences?" xml:space="preserve" approved="no"> - <source>Save preferences?</source> - <target state="translated">Tercihler kaydedilsin mi?</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="Save profile password" xml:space="preserve" approved="no"> - <source>Save profile password</source> - <target state="translated">Profil şifresini kaydet</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="Save servers" xml:space="preserve" approved="no"> - <source>Save servers</source> - <target state="translated">Sunucuları kaydet</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="Save servers?" xml:space="preserve" approved="no"> - <source>Save servers?</source> - <target state="translated">Sunucular kaydedilsin mi?</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="Save settings?" xml:space="preserve" approved="no"> - <source>Save settings?</source> - <target state="translated">Ayarlar kaydedilsin mi?</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="Save welcome message?" xml:space="preserve" approved="no"> - <source>Save welcome message?</source> - <target state="translated">Hoşgeldin mesajı kaydedilsin mi?</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="Saved WebRTC ICE servers will be removed" xml:space="preserve" approved="no"> - <source>Saved WebRTC ICE servers will be removed</source> - <target state="translated">Kaydedilmiş WebRTC ICE sunucuları silinecek</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="Scan QR code" xml:space="preserve" approved="no"> - <source>Scan QR code</source> - <target state="translated">QR kodu okut</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="Scan code" xml:space="preserve" approved="no"> - <source>Scan code</source> - <target state="translated">Kod okut</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="Scan security code from your contact's app." xml:space="preserve" approved="no"> - <source>Scan security code from your contact's app.</source> - <target state="translated">Kişinin uygulamasından güvenlik kodunu okut.</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="Scan server QR code" xml:space="preserve" approved="no"> - <source>Scan server QR code</source> - <target state="translated">Sunucu QR kodu okut</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="Search" xml:space="preserve" approved="no"> - <source>Search</source> - <target state="translated">Ara</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="Secure queue" xml:space="preserve" approved="no"> - <source>Secure queue</source> - <target state="translated">Sırayı koru</target> - <note>server test step</note> - </trans-unit> - <trans-unit id="Security assessment" xml:space="preserve" approved="no"> - <source>Security assessment</source> - <target state="translated">Güvenlik değerlendirmesi</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="Security code" xml:space="preserve" approved="no"> - <source>Security code</source> - <target state="translated">Güvenlik kodu</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="Select" xml:space="preserve" approved="no"> - <source>Select</source> - <target state="translated">Seç</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="Self-destruct" xml:space="preserve" approved="no"> - <source>Self-destruct</source> - <target state="translated">Kendi kendini imha</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="Self-destruct passcode" xml:space="preserve" approved="no"> - <source>Self-destruct passcode</source> - <target state="translated">Kendini imha eden şifre</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="Self-destruct passcode changed!" xml:space="preserve" approved="no"> - <source>Self-destruct passcode changed!</source> - <target state="translated">Kendini imha eden şifre değiştirildi!</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="Self-destruct passcode enabled!" xml:space="preserve" approved="no"> - <source>Self-destruct passcode enabled!</source> - <target state="translated">Kendini imha eden şifre etkinleştirildi!</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="Send" xml:space="preserve" approved="no"> - <source>Send</source> - <target state="translated">Gönder</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="Send a live message - it will update for the recipient(s) as you type it" xml:space="preserve" approved="no"> - <source>Send a live message - it will update for the recipient(s) as you type it</source> - <target state="translated">Bir canlı mesaj gönder - yazışına göre kişiye(lere) kendini günceller</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="Send delivery receipts to" xml:space="preserve" approved="no"> - <source>Send delivery receipts to</source> - <target state="translated">Görüldü bilgilerini şuraya gönder</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="Send direct message" xml:space="preserve" approved="no"> - <source>Send direct message</source> - <target state="translated">Doğrudan mesaj gönder</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="Send disappearing message" xml:space="preserve" approved="no"> - <source>Send disappearing message</source> - <target state="translated">Kaybolan bir mesaj gönder</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="Send link previews" xml:space="preserve" approved="no"> - <source>Send link previews</source> - <target state="translated">Bağlantı ön gösterimleri gönder</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="Send live message" xml:space="preserve" approved="no"> - <source>Send live message</source> - <target state="translated">Canlı mesaj gönder</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="Send notifications" xml:space="preserve" approved="no"> - <source>Send notifications</source> - <target state="translated">Bildirimler gönder</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="Send notifications:" xml:space="preserve" approved="no"> - <source>Send notifications:</source> - <target state="translated">Bildirimler gönder:</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="Send questions and ideas" xml:space="preserve" approved="no"> - <source>Send questions and ideas</source> - <target state="translated">Fikirler ve sorular gönderin</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="Send receipts" xml:space="preserve" approved="no"> - <source>Send receipts</source> - <target state="translated">Mesajlar gönder</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="Send them from gallery or custom keyboards." xml:space="preserve" approved="no"> - <source>Send them from gallery or custom keyboards.</source> - <target state="translated">Bunları galeriden veya özel klavyelerden gönder.</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="Sender cancelled file transfer." xml:space="preserve" approved="no"> - <source>Sender cancelled file transfer.</source> - <target state="translated">Gönderici dosya gönderimini iptal etti.</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="Sender may have deleted the connection request." xml:space="preserve" approved="no"> - <source>Sender may have deleted the connection request.</source> - <target state="translated">Gönderici bağlantı isteğini silmiş olabilir.</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="Sending file will be stopped." xml:space="preserve" approved="no"> - <source>Sending file will be stopped.</source> - <target state="translated">Dosya gönderimi durdurulacaktır.</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="Sending via" xml:space="preserve" approved="no"> - <source>Sending via</source> - <target state="translated">Aracılığıyla gönderiliyor</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="Sent at" xml:space="preserve" approved="no"> - <source>Sent at</source> - <target state="translated">Şuradan gönderildi</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="Sent at: %@" xml:space="preserve" approved="no"> - <source>Sent at: %@</source> - <target state="translated">Şuradan gönderildi: %@</target> - <note>copied message info</note> - </trans-unit> - <trans-unit id="Sent file event" xml:space="preserve" approved="no"> - <source>Sent file event</source> - <target state="translated">Dosya etkinliği gönderildi</target> - <note>notification</note> - </trans-unit> - <trans-unit id="Sent message" xml:space="preserve" approved="no"> - <source>Sent message</source> - <target state="translated">Mesaj gönderildi</target> - <note>message info title</note> - </trans-unit> - <trans-unit id="Sent messages will be deleted after set time." xml:space="preserve" approved="no"> - <source>Sent messages will be deleted after set time.</source> - <target state="translated">Gönderilen mesajlar ayarlanan süreden sonra silinecektir.</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="Server requires authorization to create queues, check password" xml:space="preserve" approved="no"> - <source>Server requires authorization to create queues, check password</source> - <target state="translated">Sunucunun sıra oluşturması için yetki gereklidir, şifreyi kontrol edin</target> - <note>server test error</note> - </trans-unit> - <trans-unit id="Server requires authorization to upload, check password" xml:space="preserve" approved="no"> - <source>Server requires authorization to upload, check password</source> - <target state="translated">Sunucunun yükleme yapması için yetki gereklidir, şifreyi kontrol edin</target> - <note>server test error</note> - </trans-unit> - <trans-unit id="Server test failed!" xml:space="preserve" approved="no"> - <source>Server test failed!</source> - <target state="translated">Sunucu testinde hata oluştu!</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="Servers" xml:space="preserve" approved="no"> - <source>Servers</source> - <target state="translated">Sunucular</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="Set 1 day" xml:space="preserve" approved="no"> - <source>Set 1 day</source> - <target state="translated">1 günlüğüne ayarla</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="Set contact name…" xml:space="preserve" approved="no"> - <source>Set contact name…</source> - <target state="translated">Kişi adı gir…</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="Set group preferences" xml:space="preserve" approved="no"> - <source>Set group preferences</source> - <target state="translated">Grup tercihlerini ayarla</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="Set it instead of system authentication." xml:space="preserve" approved="no"> - <source>Set it instead of system authentication.</source> - <target state="translated">Sistem kimlik doğrulaması yerine ayarla.</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="Set passcode" xml:space="preserve" approved="no"> - <source>Set passcode</source> - <target state="translated">Şifre ayarla</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="Set passphrase to export" xml:space="preserve" approved="no"> - <source>Set passphrase to export</source> - <target state="translated">Dışa aktarmak için parola ayarla</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="Set the message shown to new members!" xml:space="preserve" approved="no"> - <source>Set the message shown to new members!</source> - <target state="translated">Yeni üyeler için gösterilen bir mesaj ayarla!</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="Set timeouts for proxy/VPN" xml:space="preserve" approved="no"> - <source>Set timeouts for proxy/VPN</source> - <target state="translated">Vekil/VPN için zaman aşımları ayarla</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="Settings" xml:space="preserve" approved="no"> - <source>Settings</source> - <target state="translated">Ayarlar</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="Share" xml:space="preserve" approved="no"> - <source>Share</source> - <target state="translated">Paylaş</target> - <note>chat item action</note> - </trans-unit> - <trans-unit id="Share 1-time link" xml:space="preserve" approved="no"> - <source>Share 1-time link</source> - <target state="translated">Tek kullanımlık bağlantıyı paylaş</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="Share address" xml:space="preserve" approved="no"> - <source>Share address</source> - <target state="translated">Adresi paylaş</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="Share address with contacts?" xml:space="preserve" approved="no"> - <source>Share address with contacts?</source> - <target state="translated">Kişilerle adres paylaşılsın mı?</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="Share link" xml:space="preserve" approved="no"> - <source>Share link</source> - <target state="translated">Bağlantıyı paylaş</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="Share one-time invitation link" xml:space="preserve"> - <source>Share one-time invitation link</source> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="Share with contacts" xml:space="preserve" approved="no"> - <source>Share with contacts</source> - <target state="translated">Kişilerle paylaş</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="Show calls in phone history" xml:space="preserve" approved="no"> - <source>Show calls in phone history</source> - <target state="translated">Telefon geçmişinde aramaları göster</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="Show developer options" xml:space="preserve" approved="no"> - <source>Show developer options</source> - <target state="translated">Geliştirici ayarlarını göster</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="Show preview" xml:space="preserve" approved="no"> - <source>Show preview</source> - <target state="translated">Ön gösterimi göser</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="Show:" xml:space="preserve" approved="no"> - <source>Show:</source> - <target state="translated">Göster:</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="SimpleX Address" xml:space="preserve" approved="no"> - <source>SimpleX Address</source> - <target state="translated">SimpleX Adresi</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="SimpleX Chat security was audited by Trail of Bits." xml:space="preserve" approved="no"> - <source>SimpleX Chat security was audited by Trail of Bits.</source> - <target state="translated">SimpleX Chat güvenliği Trails of Bits tarafından denetlenmiştir.</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="SimpleX Lock" xml:space="preserve" approved="no"> - <source>SimpleX Lock</source> - <target state="translated">SimpleX Kilidi</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="SimpleX Lock mode" xml:space="preserve" approved="no"> - <source>SimpleX Lock mode</source> - <target state="translated">SimpleX Kilidi modu</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="SimpleX Lock not enabled!" xml:space="preserve" approved="no"> - <source>SimpleX Lock not enabled!</source> - <target state="translated">SimpleX Kilidi etkinleştirilmedi!</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="SimpleX Lock turned on" xml:space="preserve" approved="no"> - <source>SimpleX Lock turned on</source> - <target state="translated">SimpleX Kilidi açıldı</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="SimpleX address" xml:space="preserve" approved="no"> - <source>SimpleX address</source> - <target state="translated">SimpleX adresi</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="SimpleX contact address" xml:space="preserve" approved="no"> - <source>SimpleX contact address</source> - <target state="translated">SimpleX kişi adresi</target> - <note>simplex link type</note> - </trans-unit> - <trans-unit id="SimpleX encrypted message or connection event" xml:space="preserve" approved="no"> - <source>SimpleX encrypted message or connection event</source> - <target state="translated">SimpleX şifrelenmiş mesaj veya bağlantı etkinliği</target> - <note>notification</note> - </trans-unit> - <trans-unit id="SimpleX group link" xml:space="preserve" approved="no"> - <source>SimpleX group link</source> - <target state="translated">SimpleX grup bağlantısı</target> - <note>simplex link type</note> - </trans-unit> - <trans-unit id="SimpleX links" xml:space="preserve" approved="no"> - <source>SimpleX links</source> - <target state="translated">SimpleX bağlantıları</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="SimpleX one-time invitation" xml:space="preserve" approved="no"> - <source>SimpleX one-time invitation</source> - <target state="translated">SimpleX tek kullanımlık davet</target> - <note>simplex link type</note> - </trans-unit> - <trans-unit id="Skip" xml:space="preserve" approved="no"> - <source>Skip</source> - <target state="translated">Atla</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="Skipped messages" xml:space="preserve" approved="no"> - <source>Skipped messages</source> - <target state="translated">Atlanmış mesajlar</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="Small groups (max 10)" xml:space="preserve"> - <source>Small groups (max 10)</source> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="Some non-fatal errors occurred during import - you may see Chat console for more details." xml:space="preserve" approved="no"> - <source>Some non-fatal errors occurred during import - you may see Chat console for more details.</source> - <target state="translated">İçe aktarma sırasında bazı ölümcül olmayan hatalar oluştu - daha fazla ayrıntı için Sohbet konsoluna bakabilirsiniz.</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="Somebody" xml:space="preserve" approved="no"> - <source>Somebody</source> - <target state="translated">Biri</target> - <note>notification title</note> - </trans-unit> - <trans-unit id="Start a new chat" xml:space="preserve"> - <source>Start a new chat</source> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="Start chat" xml:space="preserve" approved="no"> - <source>Start chat</source> - <target state="translated">Sohbeti başlat</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="Start migration" xml:space="preserve" approved="no"> - <source>Start migration</source> - <target state="translated">Geçişi başlat</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="Stop" xml:space="preserve" approved="no"> - <source>Stop</source> - <target state="translated">Dur</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="Stop SimpleX" xml:space="preserve" approved="no"> - <source>Stop SimpleX</source> - <target state="translated">SimpleX'i durdur</target> - <note>authentication reason</note> - </trans-unit> - <trans-unit id="Stop chat to enable database actions" xml:space="preserve" approved="no"> - <source>Stop chat to enable database actions</source> - <target state="translated">Veritabanı eylemlerini etkinleştirmek için sohbeti durdur</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" approved="no"> - <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 state="translated">Sohbet veritabanını dışa aktarmak, içe aktarmak veya silmek için sohbeti durdurun. Sohbet durdurulduğunda mesaj alamaz ve gönderemezsiniz.</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="Stop chat?" xml:space="preserve" approved="no"> - <source>Stop chat?</source> - <target state="translated">Sohbet durdurulsun mu?</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="Stop file" xml:space="preserve" approved="no"> - <source>Stop file</source> - <target state="translated">Dosyayı durdur</target> - <note>cancel file action</note> - </trans-unit> - <trans-unit id="Stop receiving file?" xml:space="preserve" approved="no"> - <source>Stop receiving file?</source> - <target state="translated">Dosya alımı durdurulsun mu?</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="Stop sending file?" xml:space="preserve" approved="no"> - <source>Stop sending file?</source> - <target state="translated">Dosya gönderimi durdurulsun mu?</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="Stop sharing" xml:space="preserve" approved="no"> - <source>Stop sharing</source> - <target state="translated">Paylaşmayı durdur</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="Stop sharing address?" xml:space="preserve" approved="no"> - <source>Stop sharing address?</source> - <target state="translated">Adresi paylaşmak durdurulsun mu?</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="Submit" xml:space="preserve" approved="no"> - <source>Submit</source> - <target state="translated">Gönder</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="Support SimpleX Chat" xml:space="preserve" approved="no"> - <source>Support SimpleX Chat</source> - <target state="translated">SimpleX Chat'e destek ol</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="System" xml:space="preserve" approved="no"> - <source>System</source> - <target state="translated">Sistem</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="System authentication" xml:space="preserve" approved="no"> - <source>System authentication</source> - <target state="translated">Sistem yetkilendirilmesi</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="TCP connection timeout" xml:space="preserve" approved="no"> - <source>TCP connection timeout</source> - <target state="translated">TCP bağlantı zaman aşımı</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="TCP_KEEPCNT" xml:space="preserve" approved="no"> - <source>TCP_KEEPCNT</source> - <target state="translated">TCP_CNTYİTUT</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="TCP_KEEPIDLE" xml:space="preserve" approved="no"> - <source>TCP_KEEPIDLE</source> - <target state="translated">TCP_BOŞTAKAL</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="TCP_KEEPINTVL" xml:space="preserve" approved="no"> - <source>TCP_KEEPINTVL</source> - <target state="translated">TCP_TVLDEKAL</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="Take picture" xml:space="preserve" approved="no"> - <source>Take picture</source> - <target state="translated">Fotoğraf çek</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="Tap button " xml:space="preserve" approved="no"> - <source>Tap button </source> - <target state="translated">Tuşa bas </target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="Tap to activate profile." xml:space="preserve" approved="no"> - <source>Tap to activate profile.</source> - <target state="translated">Profili etkinleştirmek için tıkla.</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="Tap to join" xml:space="preserve" approved="no"> - <source>Tap to join</source> - <target state="translated">Katılmak için tıkla</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="Tap to join incognito" xml:space="preserve" approved="no"> - <source>Tap to join incognito</source> - <target state="translated">Gizli katılmak için tıkla</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="Tap to start a new chat" xml:space="preserve" approved="no"> - <source>Tap to start a new chat</source> - <target state="translated">Yeni bir sohbet başlatmak için tıkla</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="Test failed at step %@." xml:space="preserve" approved="no"> - <source>Test failed at step %@.</source> - <target state="translated">Test %@ adımında başarısız oldu.</target> - <note>server test failure</note> - </trans-unit> - <trans-unit id="Test server" xml:space="preserve" approved="no"> - <source>Test server</source> - <target state="translated">Sunucuyu test et</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="Test servers" xml:space="preserve" approved="no"> - <source>Test servers</source> - <target state="translated">Sunucuları test et</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="Tests failed!" xml:space="preserve" approved="no"> - <source>Tests failed!</source> - <target state="translated">Testler başarısız oldu!</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="Thank you for installing SimpleX Chat!" xml:space="preserve" approved="no"> - <source>Thank you for installing SimpleX Chat!</source> - <target state="translated">SimpleX Chat'i indirdiğin için teşekkürler!</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="Thanks to the users – [contribute via Weblate](https://github.com/simplex-chat/simplex-chat/tree/stable#help-translating-simplex-chat)!" xml:space="preserve" approved="no"> - <source>Thanks to the users – [contribute via Weblate](https://github.com/simplex-chat/simplex-chat/tree/stable#help-translating-simplex-chat)!</source> - <target state="translated">Kullanıcılar için teşekkürler - [Weblate aracılığıyla katkıda bulun](https://github.com/simplex-chat/simplex-chat/tree/stable#help-translating-simplex-chat)!</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="Thanks to the users – contribute via Weblate!" xml:space="preserve" approved="no"> - <source>Thanks to the users – contribute via Weblate!</source> - <target state="translated">Kullanıcılar için teşekkürler - Weblate aracılığıyla katkıda bulun!</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="The 1st platform without any user identifiers – private by design." xml:space="preserve" approved="no"> - <source>The 1st platform without any user identifiers – private by design.</source> - <target state="translated">Herhangi bir kullanıcı tanımlayıcısı olmayan ilk platform - tasarım gereği gizli.</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="The ID of the next message is incorrect (less or equal to the previous). It can happen because of some bug or when the connection is compromised." xml:space="preserve" approved="no"> - <source>The ID of the next message is incorrect (less or equal to the previous). -It can happen because of some bug or when the connection is compromised.</source> - <target state="translated">Bir sonraki mesajın kimliği yanlış (bir öncekinden az veya aynı). -Bazı hatalar nedeniyle veya bağlantı tehlikeye girdiğinde meydana gelebilir.</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="The app can notify you when you receive messages or contact requests - please open settings to enable." xml:space="preserve" approved="no"> - <source>The app can notify you when you receive messages or contact requests - please open settings to enable.</source> - <target state="translated">Uygulama, mesaj veya iletişim isteği aldığınızda sizi bilgilendirebilir - etkinleştirmek için lütfen ayarları açın.</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="The attempt to change database passphrase was not completed." xml:space="preserve" approved="no"> - <source>The attempt to change database passphrase was not completed.</source> - <target state="translated">Veritabanı parolasını değiştirme girişimi tamamlanmadı.</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="The connection you accepted will be cancelled!" xml:space="preserve" approved="no"> - <source>The connection you accepted will be cancelled!</source> - <target state="translated">Bağlantı kabulünüz iptal edilecektir!</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="The contact you shared this link with will NOT be able to connect!" xml:space="preserve" approved="no"> - <source>The contact you shared this link with will NOT be able to connect!</source> - <target state="translated">Bu bağlantıyı paylaştığınız kişi BAĞLANAMAYACAKTIR!</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" approved="no"> - <source>The created archive is available via app Settings / Database / Old database archive.</source> - <target state="translated">Oluşturulan arşive uygulama üzerinden Ayarlar / Veritabanı / Eski veritabanı arşivi üzerinden erişilebilir.</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="The encryption is working and the new encryption agreement is not required. It may result in connection errors!" xml:space="preserve" approved="no"> - <source>The encryption is working and the new encryption agreement is not required. It may result in connection errors!</source> - <target state="translated">Şifreleme çalışıyor ve yeni şifreleme anlaşması gerekli değil. Bağlantı hatalarına neden olabilir!</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="The group is fully decentralized – it is visible only to the members." xml:space="preserve"> - <source>The group is fully decentralized – it is visible only to the members.</source> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="The hash of the previous message is different." xml:space="preserve" approved="no"> - <source>The hash of the previous message is different.</source> - <target state="translated">Önceki mesajın hash'i farklı.</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="The message will be deleted for all members." xml:space="preserve" approved="no"> - <source>The message will be deleted for all members.</source> - <target state="translated">Mesaj tüm üyeler için silinecektir.</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="The message will be marked as moderated for all members." xml:space="preserve" approved="no"> - <source>The message will be marked as moderated for all members.</source> - <target state="translated">Mesaj tüm üyeler için yönetilmiş olarak işaretlenecektir.</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="The next generation of private messaging" xml:space="preserve" approved="no"> - <source>The next generation of private messaging</source> - <target state="translated">Gizli mesajlaşmanın yeni nesli</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="The old database was not removed during the migration, it can be deleted." xml:space="preserve" approved="no"> - <source>The old database was not removed during the migration, it can be deleted.</source> - <target state="translated">Eski veritabanı geçiş sırasında kaldırılmadı, silinebilir.</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="The profile is only shared with your contacts." xml:space="preserve" approved="no"> - <source>The profile is only shared with your contacts.</source> - <target state="translated">Profil sadece kişilerinle paylaşılacak.</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="The sender will NOT be notified" xml:space="preserve" approved="no"> - <source>The sender will NOT be notified</source> - <target state="translated">Gönderene BİLDİRİLMEYECEKTİR</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="The servers for new connections of your current chat profile **%@**." xml:space="preserve" approved="no"> - <source>The servers for new connections of your current chat profile **%@**.</source> - <target state="translated">Mevcut sohbet profilinizin yeni bağlantıları için sunucular **%@**.</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="Theme" xml:space="preserve" approved="no"> - <source>Theme</source> - <target state="translated">Tema</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="There should be at least one user profile." xml:space="preserve" approved="no"> - <source>There should be at least one user profile.</source> - <target state="translated">En az bir kullanıcı profili olmalıdır.</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="There should be at least one visible user profile." xml:space="preserve" approved="no"> - <source>There should be at least one visible user profile.</source> - <target state="translated">En az bir görünür kullanıcı profili olmalıdır.</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="These settings are for your current profile **%@**." xml:space="preserve" approved="no"> - <source>These settings are for your current profile **%@**.</source> - <target state="translated">Bu ayarlar mevcut profiliniz **%@** içindir.</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="They can be overridden in contact and group settings" xml:space="preserve"> - <source>They can be overridden in contact and group settings</source> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="This action cannot be undone - all received and sent files and media will be deleted. Low resolution pictures will remain." xml:space="preserve" approved="no"> - <source>This action cannot be undone - all received and sent files and media will be deleted. Low resolution pictures will remain.</source> - <target state="translated">Bu işlem geri alınamaz - alınan ve gönderilen tüm dosyalar ve medya silinecektir. Düşük çözünürlüklü resimler kalacaktır.</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="This action cannot be undone - the messages sent and received earlier than selected will be deleted. It may take several minutes." xml:space="preserve" approved="no"> - <source>This action cannot be undone - the messages sent and received earlier than selected will be deleted. It may take several minutes.</source> - <target state="translated">Bu işlem geri alınamaz - seçilenden daha önce gönderilen ve alınan mesajlar silinecektir. Bu işlem birkaç dakika sürebilir.</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="This action cannot be undone - your profile, contacts, messages and files will be irreversibly lost." xml:space="preserve" approved="no"> - <source>This action cannot be undone - your profile, contacts, messages and files will be irreversibly lost.</source> - <target state="translated">Bu işlem geri alınamaz - profiliniz, kişileriniz, mesajlarınız ve dosyalarınız geri döndürülemez şekilde kaybolacaktır.</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="This group no longer exists." xml:space="preserve" approved="no"> - <source>This group no longer exists.</source> - <target state="translated">Bu grup artık mevcut değildir.</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="This setting applies to messages in your current chat profile **%@**." xml:space="preserve" approved="no"> - <source>This setting applies to messages in your current chat profile **%@**.</source> - <target state="translated">Bu ayar, geçerli sohbet profiliniz **%@** deki mesajlara uygulanır.</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="To ask any questions and to receive updates:" xml:space="preserve" approved="no"> - <source>To ask any questions and to receive updates:</source> - <target state="translated">Soru sormak ve güncellemeleri almak için:</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="To connect, your contact can scan QR code or use the link in the app." xml:space="preserve" approved="no"> - <source>To connect, your contact can scan QR code or use the link in the app.</source> - <target state="translated">Bağlanmak için, kişi QR kodu okutabilir veya uygulama içinden bağlantıyı kullanabilir.</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="To find the profile used for an incognito connection, tap the contact or group name on top of the chat." xml:space="preserve"> - <source>To find the profile used for an incognito connection, tap the contact or group name on top of the chat.</source> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="To make a new connection" xml:space="preserve" approved="no"> - <source>To make a new connection</source> - <target state="translated">Yeni bir bağlantı oluşturmak için</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="To protect privacy, instead of user IDs used by all other platforms, SimpleX has identifiers for message queues, separate for each of your contacts." xml:space="preserve" approved="no"> - <source>To protect privacy, instead of user IDs used by all other platforms, SimpleX has identifiers for message queues, separate for each of your contacts.</source> - <target state="translated">Gizliliği korumak için, diğer tüm platformlar gibi kullanıcı kimliği kullanmak yerine, SimpleX mesaj kuyrukları için kişilerinizin her biri için ayrı tanımlayıcılara sahiptir.</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="To protect timezone, image/voice files use UTC." xml:space="preserve" approved="no"> - <source>To protect timezone, image/voice files use UTC.</source> - <target state="translated">Zaman bölgesini korumak için,fotoğraf/ses dosyaları UTC kullanır.</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="To protect your information, turn on SimpleX Lock. You will be prompted to complete authentication before this feature is enabled." xml:space="preserve" approved="no"> - <source>To protect your information, turn on SimpleX Lock. -You will be prompted to complete authentication before this feature is enabled.</source> - <target state="translated">Bilgilerinizi korumak için SimpleX Lock özelliğini açın. -Bu özellik etkinleştirilmeden önce kimlik doğrulamayı tamamlamanız istenecektir.</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="To record voice message please grant permission to use Microphone." xml:space="preserve" approved="no"> - <source>To record voice message please grant permission to use Microphone.</source> - <target state="translated">Sesli mesaj kaydetmek için lütfen Mikrofon kullanım izni verin.</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="To reveal your hidden profile, enter a full password into a search field in **Your chat profiles** page." xml:space="preserve" approved="no"> - <source>To reveal your hidden profile, enter a full password into a search field in **Your chat profiles** page.</source> - <target state="translated">Gizli profilinizi ortaya çıkarmak için **Sohbet profilleriniz** sayfasındaki arama alanına tam bir şifre girin.</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="To support instant push notifications the chat database has to be migrated." xml:space="preserve" approved="no"> - <source>To support instant push notifications the chat database has to be migrated.</source> - <target state="translated">Anlık anlık bildirimleri desteklemek için sohbet veritabanının taşınması gerekir.</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="To verify end-to-end encryption with your contact compare (or scan) the code on your devices." xml:space="preserve" approved="no"> - <source>To verify end-to-end encryption with your contact compare (or scan) the code on your devices.</source> - <target state="translated">Kişinizle uçtan uca şifrelemeyi doğrulamak için cihazlarınızdaki kodu karşılaştırın (veya tarayın).</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="Transport isolation" xml:space="preserve" approved="no"> - <source>Transport isolation</source> - <target state="translated">Taşıma izolasyonu</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 (error: %@)." xml:space="preserve" approved="no"> - <source>Trying to connect to the server used to receive messages from this contact (error: %@).</source> - <target state="translated">Bu kişiden mesaj almak için kullanılan sunucuya bağlanılmaya çalışılıyor (hata: %@).</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" approved="no"> - <source>Trying to connect to the server used to receive messages from this contact.</source> - <target state="translated">Bu kişiden mesaj almak için kullanılan sunucuya bağlanılmaya çalışılıyor.</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="Turn off" xml:space="preserve" approved="no"> - <source>Turn off</source> - <target state="translated">Kapat</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="Turn off notifications?" xml:space="preserve"> - <source>Turn off notifications?</source> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="Turn on" xml:space="preserve" approved="no"> - <source>Turn on</source> - <target state="translated">Aç</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="Unable to record voice message" xml:space="preserve" approved="no"> - <source>Unable to record voice message</source> - <target state="translated">Sesli mesaj kaydedilemedi</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="Unexpected error: %@" xml:space="preserve" approved="no"> - <source>Unexpected error: %@</source> - <target state="translated">Beklenmeyen hata: %@</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="Unexpected migration state" xml:space="preserve" approved="no"> - <source>Unexpected migration state</source> - <target state="translated">Beklenmeyen geçiş durumu</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="Unfav." xml:space="preserve" approved="no"> - <source>Unfav.</source> - <target state="translated">Favorilerden çık.</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="Unhide" xml:space="preserve" approved="no"> - <source>Unhide</source> - <target state="translated">Gizlemeyi kaldır</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="Unhide chat profile" xml:space="preserve" approved="no"> - <source>Unhide chat profile</source> - <target state="translated">Sohbet profilinin gizlemesini kaldır</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="Unhide profile" xml:space="preserve" approved="no"> - <source>Unhide profile</source> - <target state="translated">Proflin gizlenmesini kaldır</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="Unit" xml:space="preserve" approved="no"> - <source>Unit</source> - <target state="translated">Birim</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="Unknown caller" xml:space="preserve" approved="no"> - <source>Unknown caller</source> - <target state="translated">Bilinmeyen arayan</target> - <note>callkit banner</note> - </trans-unit> - <trans-unit id="Unknown database error: %@" xml:space="preserve" approved="no"> - <source>Unknown database error: %@</source> - <target state="translated">Bilinmeyen veritabanı hatası: %@</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="Unknown error" xml:space="preserve" approved="no"> - <source>Unknown error</source> - <target state="translated">Bilinmeyen hata</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="Unless you use iOS call interface, enable Do Not Disturb mode to avoid interruptions." xml:space="preserve" approved="no"> - <source>Unless you use iOS call interface, enable Do Not Disturb mode to avoid interruptions.</source> - <target state="translated">iOS arama arayüzünü kullanmadığınız sürece, kesintileri önlemek için Rahatsız Etmeyin modunu etkinleştirin.</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <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" approved="no"> - <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 state="translated">Kişiniz bağlantıyı silmediyse veya bu bağlantı kullanılmadıysa, bu bir hata olabilir - lütfen bildirin. -Bağlanmak için lütfen kişinizden başka bir bağlantı oluşturmasını isteyin ve sabit bir ağ bağlantınız olduğunu kontrol edin.</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="Unlock" xml:space="preserve" approved="no"> - <source>Unlock</source> - <target state="translated">Kilidi aç</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="Unlock app" xml:space="preserve" approved="no"> - <source>Unlock app</source> - <target state="translated">Uygulama kilidini aç</target> - <note>authentication reason</note> - </trans-unit> - <trans-unit id="Unmute" xml:space="preserve" approved="no"> - <source>Unmute</source> - <target state="translated">Susturmayı kaldır</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="Unread" xml:space="preserve" approved="no"> - <source>Unread</source> - <target state="translated">Okunmamış</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="Update" xml:space="preserve" approved="no"> - <source>Update</source> - <target state="translated">Güncelle</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="Update .onion hosts setting?" xml:space="preserve" approved="no"> - <source>Update .onion hosts setting?</source> - <target state="translated">.onion ana bilgisayarların ayarı güncellensin mi?</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="Update database passphrase" xml:space="preserve" approved="no"> - <source>Update database passphrase</source> - <target state="translated">Veritabanı parolasını güncelle</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="Update network settings?" xml:space="preserve" approved="no"> - <source>Update network settings?</source> - <target state="translated">Bağlantı ayarları güncellensin mi?</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="Update transport isolation mode?" xml:space="preserve" approved="no"> - <source>Update transport isolation mode?</source> - <target state="translated">Taşıma izolasyon modu güncellensin mi?</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="Updating settings will re-connect the client to all servers." xml:space="preserve" approved="no"> - <source>Updating settings will re-connect the client to all servers.</source> - <target state="translated">Ayarların güncellenmesi, istemciyi tüm sunuculara yeniden bağlayacaktır.</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="Updating this setting will re-connect the client to all servers." xml:space="preserve" approved="no"> - <source>Updating this setting will re-connect the client to all servers.</source> - <target state="translated">Bu ayarın güncellenmesi, istemciyi tüm sunuculara yeniden bağlayacaktır.</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="Upgrade and open chat" xml:space="preserve" approved="no"> - <source>Upgrade and open chat</source> - <target state="translated">Yükselt ve sohbeti aç</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="Upload file" xml:space="preserve" approved="no"> - <source>Upload file</source> - <target state="translated">Dosya yükle</target> - <note>server test step</note> - </trans-unit> - <trans-unit id="Use .onion hosts" xml:space="preserve" approved="no"> - <source>Use .onion hosts</source> - <target state="translated">.onion ana bilgisayarlarını kullan</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="Use SimpleX Chat servers?" xml:space="preserve" approved="no"> - <source>Use SimpleX Chat servers?</source> - <target state="translated">SimpleX Chat sunucuları kullanılsın mı?</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="Use chat" xml:space="preserve" approved="no"> - <source>Use chat</source> - <target state="translated">Sohbeti kullan</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="Use for new connections" xml:space="preserve" approved="no"> - <source>Use for new connections</source> - <target state="translated">Yeni bağlantılar için kullan</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="Use iOS call interface" xml:space="preserve" approved="no"> - <source>Use iOS call interface</source> - <target state="translated">iOS arama arayüzünden kullan</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="Use server" xml:space="preserve" approved="no"> - <source>Use server</source> - <target state="translated">Sunucu kullan</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="User profile" xml:space="preserve" approved="no"> - <source>User profile</source> - <target state="translated">Kullanıcı profili</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="Using .onion hosts requires compatible VPN provider." xml:space="preserve" approved="no"> - <source>Using .onion hosts requires compatible VPN provider.</source> - <target state="translated">.onion ana bilgisayarlarını kullanmak için uyumlu VPN sağlayıcısı gerekir.</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="Using SimpleX Chat servers." xml:space="preserve" approved="no"> - <source>Using SimpleX Chat servers.</source> - <target state="translated">SimpleX Chat sunucuları kullanılıyor.</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="Verify connection security" xml:space="preserve" approved="no"> - <source>Verify connection security</source> - <target state="translated">Bağlantı güvenliğini doğrula</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="Verify security code" xml:space="preserve" approved="no"> - <source>Verify security code</source> - <target state="translated">Güvenlik kodunu doğrula</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="Via browser" xml:space="preserve" approved="no"> - <source>Via browser</source> - <target state="translated">Tarayıcı üzerinden</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="Video call" xml:space="preserve" approved="no"> - <source>Video call</source> - <target state="translated">Görüntülü arama</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="Video will be received when your contact completes uploading it." xml:space="preserve" approved="no"> - <source>Video will be received when your contact completes uploading it.</source> - <target state="translated">Kişiniz yüklemeyi tamamladığında video alınacaktır.</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" approved="no"> - <source>Video will be received when your contact is online, please wait or check later!</source> - <target state="translated">Kişiniz çevrimiçi olduğunda video alınacaktır, lütfen bekleyin veya daha sonra kontrol edin!</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="Videos and files up to 1gb" xml:space="preserve" approved="no"> - <source>Videos and files up to 1gb</source> - <target state="translated">1gb'a kadar videolar ve dosyalar</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="View security code" xml:space="preserve" approved="no"> - <source>View security code</source> - <target state="translated">Güvenlik kodunu görüntüle</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="Voice messages" xml:space="preserve" approved="no"> - <source>Voice messages</source> - <target state="translated">Sesli mesajlar</target> - <note>chat feature</note> - </trans-unit> - <trans-unit id="Voice messages are prohibited in this chat." xml:space="preserve" approved="no"> - <source>Voice messages are prohibited in this chat.</source> - <target state="translated">Bu sohbette sesli mesajlar yasaktır.</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="Voice messages are prohibited in this group." xml:space="preserve" approved="no"> - <source>Voice messages are prohibited in this group.</source> - <target state="translated">Bu grupta sesli mesajlar yasaktır.</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="Voice messages prohibited!" xml:space="preserve" approved="no"> - <source>Voice messages prohibited!</source> - <target state="translated">Sesli mesajlar yasaktır!</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="Voice message…" xml:space="preserve" approved="no"> - <source>Voice message…</source> - <target state="translated">Sesli mesaj…</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="Waiting for file" xml:space="preserve" approved="no"> - <source>Waiting for file</source> - <target state="translated">Dosya bekleniyor</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="Waiting for image" xml:space="preserve" approved="no"> - <source>Waiting for image</source> - <target state="translated">Görsel bekleniyor</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="Waiting for video" xml:space="preserve" approved="no"> - <source>Waiting for video</source> - <target state="translated">Video bekleniyor</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="Warning: you may lose some data!" xml:space="preserve" approved="no"> - <source>Warning: you may lose some data!</source> - <target state="translated">Uyarı: Bazı verileri kaybedebilirsin!</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="WebRTC ICE servers" xml:space="preserve" approved="no"> - <source>WebRTC ICE servers</source> - <target state="translated">WebRTC ICE sunucuları</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="Welcome %@!" xml:space="preserve" approved="no"> - <source>Welcome %@!</source> - <target state="translated">Hoşgeldin %@!</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="Welcome message" xml:space="preserve" approved="no"> - <source>Welcome message</source> - <target state="translated">Karşılama mesajı</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="What's new" xml:space="preserve" approved="no"> - <source>What's new</source> - <target state="translated">Neler yeni</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="When available" xml:space="preserve" approved="no"> - <source>When available</source> - <target state="translated">Mevcut olduğunda</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" approved="no"> - <source>When people request to connect, you can accept or reject it.</source> - <target state="translated">İnsanlar bağlantı talebinde bulunduğunda, kabul edebilir veya reddedebilirsiniz.</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" approved="no"> - <source>When you share an incognito profile with somebody, this profile will be used for the groups they invite you to.</source> - <target state="translated">Biriyle gizli bir profil paylaştığınızda, bu profil sizi davet ettikleri gruplar için kullanılacaktır.</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="With optional welcome message." xml:space="preserve" approved="no"> - <source>With optional welcome message.</source> - <target state="translated">İsteğe bağlı karşılama mesajı ile.</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="Wrong database passphrase" xml:space="preserve" approved="no"> - <source>Wrong database passphrase</source> - <target state="translated">Yanlış veritabanı parolası</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="Wrong passphrase!" xml:space="preserve" approved="no"> - <source>Wrong passphrase!</source> - <target state="translated">Yanlış parola!</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="XFTP servers" xml:space="preserve" approved="no"> - <source>XFTP servers</source> - <target state="translated">XFTP sunucuları</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="You" xml:space="preserve" approved="no"> - <source>You</source> - <target state="translated">Sen</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="You accepted connection" xml:space="preserve" approved="no"> - <source>You accepted connection</source> - <target state="translated">Bağlantıyı onayladın</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="You allow" xml:space="preserve" approved="no"> - <source>You allow</source> - <target state="translated">İzin veriyorsunuz</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="You already have a chat profile with the same display name. Please choose another name." xml:space="preserve" approved="no"> - <source>You already have a chat profile with the same display name. Please choose another name.</source> - <target state="translated">Aynı görünen ada sahip bir konuşma profilin zaten var. Lütfen başka bir ad seç.</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="You are already connected to %@." xml:space="preserve" approved="no"> - <source>You are already connected to %@.</source> - <target state="translated">Zaten %@'a bağlısınız.</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="You are connected to the server used to receive messages from this contact." xml:space="preserve" approved="no"> - <source>You are connected to the server used to receive messages from this contact.</source> - <target state="translated">Bu kişiden mesaj almak için kullanılan sunucuya bağlısınız.</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="You are invited to group" xml:space="preserve" approved="no"> - <source>You are invited to group</source> - <target state="translated">Gruba davet edildiniz</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="You can accept calls from lock screen, without device and app authentication." xml:space="preserve" approved="no"> - <source>You can accept calls from lock screen, without device and app authentication.</source> - <target state="translated">Cihaz ve uygulama kimlik doğrulaması olmadan kilit ekranından çağrı kabul edebilirsiniz.</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="You can also connect by clicking the link. If it opens in the browser, click **Open in mobile app** button." xml:space="preserve"> - <source>You can also connect by clicking the link. If it opens in the browser, click **Open in mobile app** button.</source> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="You can create it later" xml:space="preserve" approved="no"> - <source>You can create it later</source> - <target state="translated">Daha sonra oluşturabilirsiniz</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="You can enable them later via app Privacy & Security settings." xml:space="preserve" approved="no"> - <source>You can enable them later via app Privacy & Security settings.</source> - <target state="translated">Daha sonra uygulamanın Gizlilik ve Güvenlik ayarlarından etkinleştirebilirsiniz.</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="You can hide or mute a user profile - swipe it to the right." xml:space="preserve" approved="no"> - <source>You can hide or mute a user profile - swipe it to the right.</source> - <target state="translated">Bir kullanıcı profilini gizleyebilir veya sessize alabilirsiniz - sağa kaydırın.</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="You can now send messages to %@" xml:space="preserve" approved="no"> - <source>You can now send messages to %@</source> - <target state="translated">Artık %@ adresine mesaj gönderebilirsin</target> - <note>notification body</note> - </trans-unit> - <trans-unit id="You can set lock screen notification preview via settings." xml:space="preserve" approved="no"> - <source>You can set lock screen notification preview via settings.</source> - <target state="translated">Kilit ekranı bildirim önizlemesini ayarlar üzerinden ayarlayabilirsiniz.</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="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." xml:space="preserve" approved="no"> - <source>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.</source> - <target state="translated">Bir bağlantı veya QR kodu paylaşabilirsiniz - bu durumda herkes gruba katılabilir. Daha sonra silseniz bile grubun üyelerini kaybetmezsiniz.</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="You can share this address with your contacts to let them connect with **%@**." xml:space="preserve" approved="no"> - <source>You can share this address with your contacts to let them connect with **%@**.</source> - <target state="translated">Bu adresi kişilerinizle paylaşarak onların **%@** ile bağlantı kurmasını sağlayabilirsiniz.</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" approved="no"> - <source>You can share your address as a link or QR code - anybody can connect to you.</source> - <target state="translated">Adresinizi bir bağlantı veya QR kodu olarak paylaşabilirsiniz - herkes size bağlanabilir.</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" approved="no"> - <source>You can start chat via app Settings / Database or by restarting the app</source> - <target state="translated">Sohbeti uygulamada Ayarlar / Veritabanı üzerinden veya uygulamayı yeniden başlatarak başlatabilirsiniz</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="You can turn on SimpleX Lock via Settings." xml:space="preserve" approved="no"> - <source>You can turn on SimpleX Lock via Settings.</source> - <target state="translated">SimpleX Kilidini Ayarlar üzerinden açabilirsiniz.</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="You can use markdown to format messages:" xml:space="preserve" approved="no"> - <source>You can use markdown to format messages:</source> - <target state="translated">Mesajları biçimlendirmek için markdown kullanabilirsiniz:</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="You can't send messages!" xml:space="preserve" approved="no"> - <source>You can't send messages!</source> - <target state="translated">Mesajlar gönderemezsiniz!</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="You control through which server(s) **to receive** the messages, your contacts – the servers you use to message them." xml:space="preserve" approved="no"> - <source>You control through which server(s) **to receive** the messages, your contacts – the servers you use to message them.</source> - <target state="translated">Mesajların hangi sunucu(lar)dan **alınacağını**, kişilerinizi - onlara mesaj göndermek için kullandığınız sunucuları - siz kontrol edersiniz.</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="You could not be verified; please try again." xml:space="preserve" approved="no"> - <source>You could not be verified; please try again.</source> - <target state="translated">Doğrulanamadınız; lütfen tekrar deneyin.</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="You have no chats" xml:space="preserve" approved="no"> - <source>You have no chats</source> - <target state="translated">Hiç sohbetiniz yok</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="You have to enter passphrase every time the app starts - it is not stored on the device." xml:space="preserve" approved="no"> - <source>You have to enter passphrase every time the app starts - it is not stored on the device.</source> - <target state="translated">Uygulama her başladığında parola girmeniz gerekir - parola cihazınızda saklanmaz.</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="You invited your contact" xml:space="preserve"> - <source>You invited your contact</source> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="You joined this group" xml:space="preserve" approved="no"> - <source>You joined this group</source> - <target state="translated">Bu gruba katıldınız</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="You joined this group. Connecting to inviting group member." xml:space="preserve" approved="no"> - <source>You joined this group. Connecting to inviting group member.</source> - <target state="translated">Bu gruba katıldınız. Davet eden grup üyesine bağlanılıyor.</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="You must use the most recent version of your chat database on one device ONLY, otherwise you may stop receiving the messages from some contacts." xml:space="preserve" approved="no"> - <source>You must use the most recent version of your chat database on one device ONLY, otherwise you may stop receiving the messages from some contacts.</source> - <target state="translated">Sohbet veritabanınızın en son sürümünü SADECE bir cihazda kullanmalısınız, aksi takdirde bazı kişilerden daha fazla mesaj alamayabilirsiniz.</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="You need to allow your contact to send voice messages to be able to send them." xml:space="preserve" approved="no"> - <source>You need to allow your contact to send voice messages to be able to send them.</source> - <target state="translated">Sesli mesaj gönderebilmeniz için kişinizin de sesli mesaj göndermesine izin vermeniz gerekir.</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="You rejected group invitation" xml:space="preserve" approved="no"> - <source>You rejected group invitation</source> - <target state="translated">Grup davetini reddettiniz.</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="You sent group invitation" xml:space="preserve" approved="no"> - <source>You sent group invitation</source> - <target state="translated">Grup daveti gönderdiniz</target> - <note>No comment provided by engineer.</note> - </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" approved="no"> - <source>You will be connected to group when the group host's device is online, please wait or check later!</source> - <target state="translated">Grup sahibinin cihazı çevrimiçi olduğunda gruba bağlanacaksınız, lütfen bekleyin veya daha sonra kontrol edin!</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" approved="no"> - <source>You will be connected when your connection request is accepted, please wait or check later!</source> - <target state="translated">Bağlantı isteğiniz kabul edildiğinde bağlanacaksınız, lütfen bekleyin veya daha sonra kontrol edin!</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" approved="no"> - <source>You will be connected when your contact's device is online, please wait or check later!</source> - <target state="translated">Kişinizin cihazı çevrimiçi olduğunda bağlanacaksınız, lütfen bekleyin veya daha sonra kontrol edin!</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" approved="no"> - <source>You will be required to authenticate when you start or resume the app after 30 seconds in background.</source> - <target state="translated">Arka planda 30 saniye kaldıktan sonra uygulamayı başlattığınızda veya devam ettirdiğinizde kimlik doğrulaması yapmanız gerekecektir.</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="You will join a group this link refers to and connect to its group members." xml:space="preserve"> - <source>You will join a group this link refers to and connect to its group members.</source> - <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" approved="no"> - <source>You will still receive calls and notifications from muted profiles when they are active.</source> - <target state="translated">Aktif olduklarında sessize alınmış profillerden arama ve bildirim almaya devam edersiniz.</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="You will stop receiving messages from this group. Chat history will be preserved." xml:space="preserve" approved="no"> - <source>You will stop receiving messages from this group. Chat history will be preserved.</source> - <target state="translated">Bu gruptan artık mesaj almayacaksınız. Sohbet geçmişi korunacaktır.</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="You won't lose your contacts if you later delete your address." xml:space="preserve" approved="no"> - <source>You won't lose your contacts if you later delete your address.</source> - <target state="translated">Eğer sonradan bağlantınızı silseniz bile kişilerinizi kaybetmeyeceksiniz.</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" approved="no"> - <source>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</source> - <target state="translated">Gizli bir profil paylaştığınız kişiyi ana profilinizi kullandığınız gruba davet etmeye çalışıyorsunuz</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="You're using an incognito profile for this group - to prevent sharing your main profile inviting contacts is not allowed" xml:space="preserve" approved="no"> - <source>You're using an incognito profile for this group - to prevent sharing your main profile inviting contacts is not allowed</source> - <target state="translated">Bu grup için gizli bir profil kullanıyorsunuz - ana profilinizi paylaşmayı önlemek için kişileri davet etmeye izin verilmiyor</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="Your %@ servers" xml:space="preserve" approved="no"> - <source>Your %@ servers</source> - <target state="translated">%@ sunucularınız</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="Your ICE servers" xml:space="preserve" approved="no"> - <source>Your ICE servers</source> - <target state="translated">ICE sunucularınız</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="Your SMP servers" xml:space="preserve" approved="no"> - <source>Your SMP servers</source> - <target state="translated">SMP sunucularınız</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="Your SimpleX address" xml:space="preserve" approved="no"> - <source>Your SimpleX address</source> - <target state="translated">SimpleX adresin</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="Your XFTP servers" xml:space="preserve" approved="no"> - <source>Your XFTP servers</source> - <target state="translated">XFTP sunucularınız</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="Your calls" xml:space="preserve" approved="no"> - <source>Your calls</source> - <target state="translated">Aramaların</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="Your chat database" xml:space="preserve" approved="no"> - <source>Your chat database</source> - <target state="translated">Sohbet veritabanınız</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="Your chat database is not encrypted - set passphrase to encrypt it." xml:space="preserve" approved="no"> - <source>Your chat database is not encrypted - set passphrase to encrypt it.</source> - <target state="translated">Sohbet veritabanınız şifrelenmemiş - şifrelemek için parola ayarlayın.</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="Your chat profile will be sent to group members" xml:space="preserve"> - <source>Your chat profile will be sent to group members</source> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="Your chat profile will be sent to your contact" xml:space="preserve"> - <source>Your chat profile will be sent to your contact</source> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="Your chat profiles" xml:space="preserve" approved="no"> - <source>Your chat profiles</source> - <target state="translated">Sohbet profillerin</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="Your contact needs to be online for the connection to complete. You can cancel this connection and remove the contact (and try later with a new link)." xml:space="preserve" approved="no"> - <source>Your contact needs to be online for the connection to complete. -You can cancel this connection and remove the contact (and try later with a new link).</source> - <target state="translated">Bağlantının tamamlanması için kişinizin çevrimiçi olması gerekir. -Bu bağlantıyı iptal edebilir ve kişiyi kaldırabilirsiniz (ve daha sonra yeni bir bağlantıyla deneyebilirsiniz).</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="Your contact sent a file that is larger than currently supported maximum size (%@)." xml:space="preserve" approved="no"> - <source>Your contact sent a file that is larger than currently supported maximum size (%@).</source> - <target state="translated">Kişiniz şu anda desteklenen maksimum boyuttan (%@) daha büyük bir dosya gönderdi.</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="Your contacts can allow full message deletion." xml:space="preserve" approved="no"> - <source>Your contacts can allow full message deletion.</source> - <target state="translated">Kişileriniz tam mesaj silme işlemine izin verebilir.</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="Your contacts in SimpleX will see it. You can change it in Settings." xml:space="preserve"> - <source>Your contacts in SimpleX will see it. -You can change it in Settings.</source> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="Your contacts will remain connected." xml:space="preserve" approved="no"> - <source>Your contacts will remain connected.</source> - <target state="translated">Kişileriniz bağlı kalacaktır.</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" approved="no"> - <source>Your current chat database will be DELETED and REPLACED with the imported one.</source> - <target state="translated">Mevcut sohbet veritabanınız SİLİNECEK ve içe aktarılan veritabanıyla DEĞİŞTİRİLECEKTİR.</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="Your current profile" xml:space="preserve" approved="no"> - <source>Your current profile</source> - <target state="translated">Mevcut profiliniz</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="Your preferences" xml:space="preserve" approved="no"> - <source>Your preferences</source> - <target state="translated">Tercihleriniz</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="Your privacy" xml:space="preserve" approved="no"> - <source>Your privacy</source> - <target state="translated">Gizliliğiniz</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="Your profile is stored on your device and shared only with your contacts. SimpleX servers cannot see your profile." xml:space="preserve" approved="no"> - <source>Your profile is stored on your device and shared only with your contacts. -SimpleX servers cannot see your profile.</source> - <target state="translated">Profiliniz cihazınızda saklanır ve sadece kişilerinizle paylaşılır. -SimpleX sunucuları profilinizi göremez.</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="Your profile will be sent to the contact that you received this link from" xml:space="preserve"> - <source>Your profile will be sent to the contact that you received this link from</source> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="Your profile, contacts and delivered messages are stored on your device." xml:space="preserve" approved="no"> - <source>Your profile, contacts and delivered messages are stored on your device.</source> - <target state="translated">Profiliniz, kişileriniz ve gönderilmiş mesajlar cihazınızda saklanır.</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="Your random profile" xml:space="preserve" approved="no"> - <source>Your random profile</source> - <target state="translated">Rasgele profiliniz</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="Your server" xml:space="preserve" approved="no"> - <source>Your server</source> - <target state="translated">Sunucunuz</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="Your server address" xml:space="preserve" approved="no"> - <source>Your server address</source> - <target state="translated">Sunucu adresiniz</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="Your settings" xml:space="preserve" approved="no"> - <source>Your settings</source> - <target state="translated">Ayarlarınız</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="[Contribute](https://github.com/simplex-chat/simplex-chat#contribute)" xml:space="preserve" approved="no"> - <source>[Contribute](https://github.com/simplex-chat/simplex-chat#contribute)</source> - <target state="translated">[Katkıda bulun](https://github.com/simplex-chat/simplex-chat#contribute)</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="[Send us email](mailto:chat@simplex.chat)" xml:space="preserve" approved="no"> - <source>[Send us email](mailto:chat@simplex.chat)</source> - <target state="translated">[Bize e-posta gönder](mailto:chat@simplex.chat)</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="[Star on GitHub](https://github.com/simplex-chat/simplex-chat)" xml:space="preserve" approved="no"> - <source>[Star on GitHub](https://github.com/simplex-chat/simplex-chat)</source> - <target state="translated">[Bize GitHub'da yıldız verin](https://github.com/simplex-chat/simplex-chat)</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="_italic_" xml:space="preserve" approved="no"> - <source>\_italic_</source> - <target state="translated">\_italik_</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="`a + b`" xml:space="preserve" approved="no"> - <source>\`a + b`</source> - <target state="translated">\`a + b`</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="above, then choose:" xml:space="preserve" approved="no"> - <source>above, then choose:</source> - <target state="translated">yukarı çıkın, ardından seçin:</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="accepted call" xml:space="preserve" approved="no"> - <source>accepted call</source> - <target state="translated">kabul edilen arama</target> - <note>call status</note> - </trans-unit> - <trans-unit id="admin" xml:space="preserve" approved="no"> - <source>admin</source> - <target state="translated">yönetici</target> - <note>member role</note> - </trans-unit> - <trans-unit id="agreeing encryption for %@…" xml:space="preserve" approved="no"> - <source>agreeing encryption for %@…</source> - <target state="translated">%@ için şifreleme kabul ediliyor…</target> - <note>chat item text</note> - </trans-unit> - <trans-unit id="agreeing encryption…" xml:space="preserve" approved="no"> - <source>agreeing encryption…</source> - <target state="translated">şifreleme kabul ediliyor…</target> - <note>chat item text</note> - </trans-unit> - <trans-unit id="always" xml:space="preserve" approved="no"> - <source>always</source> - <target state="translated">her zaman</target> - <note>pref value</note> - </trans-unit> - <trans-unit id="audio call (not e2e encrypted)" xml:space="preserve" approved="no"> - <source>audio call (not e2e encrypted)</source> - <target state="translated">sesli arama (uçtan uca şifreli değil)</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="bad message ID" xml:space="preserve" approved="no"> - <source>bad message ID</source> - <target state="translated">kötü mesaj kimliği</target> - <note>integrity error chat item</note> - </trans-unit> - <trans-unit id="bad message hash" xml:space="preserve" approved="no"> - <source>bad message hash</source> - <target state="translated">kötü mesaj hash'i</target> - <note>integrity error chat item</note> - </trans-unit> - <trans-unit id="bold" xml:space="preserve" approved="no"> - <source>bold</source> - <target state="translated">kalın</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="call error" xml:space="preserve" approved="no"> - <source>call error</source> - <target state="translated">arama hatası</target> - <note>call status</note> - </trans-unit> - <trans-unit id="call in progress" xml:space="preserve" approved="no"> - <source>call in progress</source> - <target state="translated">arama yapılıyor</target> - <note>call status</note> - </trans-unit> - <trans-unit id="calling…" xml:space="preserve" approved="no"> - <source>calling…</source> - <target state="translated">aranıyor…</target> - <note>call status</note> - </trans-unit> - <trans-unit id="cancelled %@" xml:space="preserve" approved="no"> - <source>cancelled %@</source> - <target state="translated">%@ iptal edildi</target> - <note>feature offered item</note> - </trans-unit> - <trans-unit id="changed address for you" xml:space="preserve" approved="no"> - <source>changed address for you</source> - <target state="translated">senin için adres değiştirildi</target> - <note>chat item text</note> - </trans-unit> - <trans-unit id="changed role of %@ to %@" xml:space="preserve" approved="no"> - <source>changed role of %1$@ to %2$@</source> - <target state="translated">1$@ rolünü %2$@ olarak değiştirdi</target> - <note>rcv group event chat item</note> - </trans-unit> - <trans-unit id="changed your role to %@" xml:space="preserve" approved="no"> - <source>changed your role to %@</source> - <target state="translated">rolünü %@ olarak değiştirdi</target> - <note>rcv group event chat item</note> - </trans-unit> - <trans-unit id="changing address for %@…" xml:space="preserve" approved="no"> - <source>changing address for %@…</source> - <target state="translated">%@ için adres değiştiriliyor…</target> - <note>chat item text</note> - </trans-unit> - <trans-unit id="changing address…" xml:space="preserve" approved="no"> - <source>changing address…</source> - <target state="translated">adres değiştiriliyor…</target> - <note>chat item text</note> - </trans-unit> - <trans-unit id="colored" xml:space="preserve" approved="no"> - <source>colored</source> - <target state="translated">renklendirilmiş</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="complete" xml:space="preserve" approved="no"> - <source>complete</source> - <target state="translated">tamamlandı</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="connect to SimpleX Chat developers." xml:space="preserve" approved="no"> - <source>connect to SimpleX Chat developers.</source> - <target state="translated">SimpleX Chat geliştiricilerine bağlan.</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="connected" xml:space="preserve" approved="no"> - <source>connected</source> - <target state="translated">bağlanıldı</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="connecting" xml:space="preserve" approved="no"> - <source>connecting</source> - <target state="translated">bağlanılıyor</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="connecting (accepted)" xml:space="preserve" approved="no"> - <source>connecting (accepted)</source> - <target state="translated">bağlanılıyor (onaylandı)</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="connecting (announced)" xml:space="preserve" approved="no"> - <source>connecting (announced)</source> - <target state="translated">bağlanılıyor (duyuruldu)</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="connecting (introduced)" xml:space="preserve" approved="no"> - <source>connecting (introduced)</source> - <target state="translated">bağlanılıyor (tanıtıldı)</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="connecting (introduction invitation)" xml:space="preserve" approved="no"> - <source>connecting (introduction invitation)</source> - <target state="translated">bağlanılıyor (tanıtılma isteği)</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="connecting call" xml:space="preserve" approved="no"> - <source>connecting call…</source> - <target state="translated">aramaya bağlanılıyor…</target> - <note>call status</note> - </trans-unit> - <trans-unit id="connecting…" xml:space="preserve" approved="no"> - <source>connecting…</source> - <target state="translated">bağlanılıyor…</target> - <note>chat list item title</note> - </trans-unit> - <trans-unit id="connection established" xml:space="preserve" approved="no"> - <source>connection established</source> - <target state="translated">bağlantı kuruldu</target> - <note>chat list item title (it should not be shown</note> - </trans-unit> - <trans-unit id="connection:%@" xml:space="preserve" approved="no"> - <source>connection:%@</source> - <target state="translated">bağlantı:%@</target> - <note>connection information</note> - </trans-unit> - <trans-unit id="contact has e2e encryption" xml:space="preserve" approved="no"> - <source>contact has e2e encryption</source> - <target state="translated">kişi uçtan uca şifrelemeye sahiptir</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="contact has no e2e encryption" xml:space="preserve" approved="no"> - <source>contact has no e2e encryption</source> - <target state="translated">kişi uçtan uca şifrelemeye sahip değildir</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="creator" xml:space="preserve" approved="no"> - <source>creator</source> - <target state="translated">oluşturan</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="custom" xml:space="preserve" approved="no"> - <source>custom</source> - <target state="translated">özel</target> - <note>dropdown time picker choice</note> - </trans-unit> - <trans-unit id="database version is newer than the app, but no down migration for: %@" xml:space="preserve" approved="no"> - <source>database version is newer than the app, but no down migration for: %@</source> - <target state="translated">veritabanı sürümü uygulamadan daha yeni, ancak aşağı geçiş yok: %@</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="days" xml:space="preserve" approved="no"> - <source>days</source> - <target state="translated">gün</target> - <note>time unit</note> - </trans-unit> - <trans-unit id="default (%@)" xml:space="preserve" approved="no"> - <source>default (%@)</source> - <target state="translated">varsayılan (%@)</target> - <note>pref value</note> - </trans-unit> - <trans-unit id="default (no)" xml:space="preserve" approved="no"> - <source>default (no)</source> - <target state="translated">varsayılan (hayır)</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="default (yes)" xml:space="preserve" approved="no"> - <source>default (yes)</source> - <target state="translated">varsayılan (evet)</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="deleted" xml:space="preserve" approved="no"> - <source>deleted</source> - <target state="translated">silindi</target> - <note>deleted chat item</note> - </trans-unit> - <trans-unit id="deleted group" xml:space="preserve" approved="no"> - <source>deleted group</source> - <target state="translated">silinmiş grup</target> - <note>rcv group event chat item</note> - </trans-unit> - <trans-unit id="different migration in the app/database: %@ / %@" xml:space="preserve" approved="no"> - <source>different migration in the app/database: %@ / %@</source> - <target state="translated">uygulamada/veritabanında farklı geçiş: %@ / %@</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="direct" xml:space="preserve" approved="no"> - <source>direct</source> - <target state="translated">doğrudan</target> - <note>connection level description</note> - </trans-unit> - <trans-unit id="duplicate message" xml:space="preserve" approved="no"> - <source>duplicate message</source> - <target state="translated">yinelenen mesaj</target> - <note>integrity error chat item</note> - </trans-unit> - <trans-unit id="e2e encrypted" xml:space="preserve" approved="no"> - <source>e2e encrypted</source> - <target state="translated">uçtan uca şifrelenmiş</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="enabled" xml:space="preserve" approved="no"> - <source>enabled</source> - <target state="translated">etkin</target> - <note>enabled status</note> - </trans-unit> - <trans-unit id="enabled for contact" xml:space="preserve" approved="no"> - <source>enabled for contact</source> - <target state="translated">konuşulan kişi için etkinleşti</target> - <note>enabled status</note> - </trans-unit> - <trans-unit id="enabled for you" xml:space="preserve" approved="no"> - <source>enabled for you</source> - <target state="translated">senin için etkinleştirildi</target> - <note>enabled status</note> - </trans-unit> - <trans-unit id="encryption agreed" xml:space="preserve" approved="no"> - <source>encryption agreed</source> - <target state="translated">şifreleme kabul edildi</target> - <note>chat item text</note> - </trans-unit> - <trans-unit id="encryption agreed for %@" xml:space="preserve" approved="no"> - <source>encryption agreed for %@</source> - <target state="translated">şifreleme %@ için kabul edildi</target> - <note>chat item text</note> - </trans-unit> - <trans-unit id="encryption ok" xml:space="preserve" approved="no"> - <source>encryption ok</source> - <target state="translated">şifreleme etkin</target> - <note>chat item text</note> - </trans-unit> - <trans-unit id="encryption ok for %@" xml:space="preserve" approved="no"> - <source>encryption ok for %@</source> - <target state="translated">şifreleme %@ için etkin</target> - <note>chat item text</note> - </trans-unit> - <trans-unit id="encryption re-negotiation allowed" xml:space="preserve" approved="no"> - <source>encryption re-negotiation allowed</source> - <target state="translated">şifrelemenin yeniden anlaşmasına izin verildi</target> - <note>chat item text</note> - </trans-unit> - <trans-unit id="encryption re-negotiation allowed for %@" xml:space="preserve" approved="no"> - <source>encryption re-negotiation allowed for %@</source> - <target state="translated">şifrelemenin yeniden anlaşmasına %@ için izin verildi</target> - <note>chat item text</note> - </trans-unit> - <trans-unit id="encryption re-negotiation required" xml:space="preserve" approved="no"> - <source>encryption re-negotiation required</source> - <target state="translated">şifrelemenin yeniden anlaşması gerekiyor</target> - <note>chat item text</note> - </trans-unit> - <trans-unit id="encryption re-negotiation required for %@" xml:space="preserve" approved="no"> - <source>encryption re-negotiation required for %@</source> - <target state="translated">şifrelemenin yeniden anlaşması %@ için gerekiyor</target> - <note>chat item text</note> - </trans-unit> - <trans-unit id="ended" xml:space="preserve" approved="no"> - <source>ended</source> - <target state="translated">bitti</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="ended call %@" xml:space="preserve" approved="no"> - <source>ended call %@</source> - <target state="translated">%@ araması bitti</target> - <note>call status</note> - </trans-unit> - <trans-unit id="error" xml:space="preserve" approved="no"> - <source>error</source> - <target state="translated">hata</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="group deleted" xml:space="preserve" approved="no"> - <source>group deleted</source> - <target state="translated">grup silindi</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="group profile updated" xml:space="preserve" approved="no"> - <source>group profile updated</source> - <target state="translated">grup profili güncellendi</target> - <note>snd group event chat item</note> - </trans-unit> - <trans-unit id="hours" xml:space="preserve" approved="no"> - <source>hours</source> - <target state="translated">saat</target> - <note>time unit</note> - </trans-unit> - <trans-unit id="iOS Keychain is used to securely store passphrase - it allows receiving push notifications." xml:space="preserve" approved="no"> - <source>iOS Keychain is used to securely store passphrase - it allows receiving push notifications.</source> - <target state="translated">iOS Anahtar Zinciri parolayı güvenli bir şekilde saklamak için kullanılır - anlık bildirimlerin alınmasını sağlar.</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="iOS Keychain will be used to securely store passphrase after you restart the app or change passphrase - it will allow receiving push notifications." xml:space="preserve" approved="no"> - <source>iOS Keychain will be used to securely store passphrase after you restart the app or change passphrase - it will allow receiving push notifications.</source> - <target state="translated">iOS Anahtar Zinciri, uygulamayı yeniden başlattıktan veya parolayı değiştirdikten sonra parolayı güvenli bir şekilde saklamak için kullanılacaktır - anlık bildirimlerin alınmasına izin verecektir.</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="incognito via contact address link" xml:space="preserve" approved="no"> - <source>incognito via contact address link</source> - <target state="translated">kişi bağlantı linki aracılığıyla gizli</target> - <note>chat list item description</note> - </trans-unit> - <trans-unit id="incognito via group link" xml:space="preserve" approved="no"> - <source>incognito via group link</source> - <target state="translated">grup bağlantısı aracılığıyla gizli</target> - <note>chat list item description</note> - </trans-unit> - <trans-unit id="incognito via one-time link" xml:space="preserve" approved="no"> - <source>incognito via one-time link</source> - <target state="translated">tek seferlik bağlantısı aracılığıyla gizli</target> - <note>chat list item description</note> - </trans-unit> - <trans-unit id="indirect (%d)" xml:space="preserve" approved="no"> - <source>indirect (%d)</source> - <target state="translated">dolaylı (%d)</target> - <note>connection level description</note> - </trans-unit> - <trans-unit id="invalid chat" xml:space="preserve" approved="no"> - <source>invalid chat</source> - <target state="translated">geçersi̇z sohbet</target> - <note>invalid chat data</note> - </trans-unit> - <trans-unit id="invalid chat data" xml:space="preserve" approved="no"> - <source>invalid chat data</source> - <target state="translated">geçersi̇z sohbet verisi</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="invalid data" xml:space="preserve" approved="no"> - <source>invalid data</source> - <target state="translated">geçersiz veri</target> - <note>invalid chat item</note> - </trans-unit> - <trans-unit id="invitation to group %@" xml:space="preserve" approved="no"> - <source>invitation to group %@</source> - <target state="translated">%@ grubuna davet</target> - <note>group name</note> - </trans-unit> - <trans-unit id="invited" xml:space="preserve" approved="no"> - <source>invited</source> - <target state="translated">davet edildi</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="invited %@" xml:space="preserve" approved="no"> - <source>invited %@</source> - <target state="translated">%@ a davet edildi</target> - <note>rcv group event chat item</note> - </trans-unit> - <trans-unit id="invited to connect" xml:space="preserve" approved="no"> - <source>invited to connect</source> - <target state="translated">bağlanmaya davet edildi</target> - <note>chat list item title</note> - </trans-unit> - <trans-unit id="invited via your group link" xml:space="preserve" approved="no"> - <source>invited via your group link</source> - <target state="translated">grup bağlantınız üzerinden davet edildi</target> - <note>rcv group event chat item</note> - </trans-unit> - <trans-unit id="italic" xml:space="preserve" approved="no"> - <source>italic</source> - <target state="translated">italik</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="join as %@" xml:space="preserve" approved="no"> - <source>join as %@</source> - <target state="translated">%@ olarak katıl</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="left" xml:space="preserve" approved="no"> - <source>left</source> - <target state="translated">ayrıldı</target> - <note>rcv group event chat item</note> - </trans-unit> - <trans-unit id="marked deleted" xml:space="preserve" approved="no"> - <source>marked deleted</source> - <target state="translated">silinmiş olarak işaretlenmiş</target> - <note>marked deleted chat item preview text</note> - </trans-unit> - <trans-unit id="member" xml:space="preserve" approved="no"> - <source>member</source> - <target state="translated">üye</target> - <note>member role</note> - </trans-unit> - <trans-unit id="member connected" xml:space="preserve" approved="no"> - <source>connected</source> - <target state="translated">bağlanıldı</target> - <note>rcv group event chat item</note> - </trans-unit> - <trans-unit id="message received" xml:space="preserve" approved="no"> - <source>message received</source> - <target state="translated">mesaj alındı</target> - <note>notification</note> - </trans-unit> - <trans-unit id="minutes" xml:space="preserve" approved="no"> - <source>minutes</source> - <target state="translated">dakikalar</target> - <note>time unit</note> - </trans-unit> - <trans-unit id="missed call" xml:space="preserve" approved="no"> - <source>missed call</source> - <target state="translated">cevapsız arama</target> - <note>call status</note> - </trans-unit> - <trans-unit id="moderated" xml:space="preserve" approved="no"> - <source>moderated</source> - <target state="translated">yönetildi</target> - <note>moderated chat item</note> - </trans-unit> - <trans-unit id="moderated by %@" xml:space="preserve" approved="no"> - <source>moderated by %@</source> - <target state="translated">%@ tarafından yönetilmekte</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="months" xml:space="preserve" approved="no"> - <source>months</source> - <target state="translated">aylar</target> - <note>time unit</note> - </trans-unit> - <trans-unit id="never" xml:space="preserve" approved="no"> - <source>never</source> - <target state="translated">asla</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="new message" xml:space="preserve" approved="no"> - <source>new message</source> - <target state="translated">yeni mesaj</target> - <note>notification</note> - </trans-unit> - <trans-unit id="no" xml:space="preserve" approved="no"> - <source>no</source> - <target state="translated">hayır</target> - <note>pref value</note> - </trans-unit> - <trans-unit id="no e2e encryption" xml:space="preserve" approved="no"> - <source>no e2e encryption</source> - <target state="translated">uçtan uca şifreleme yok</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="no text" xml:space="preserve" approved="no"> - <source>no text</source> - <target state="translated">metin yok</target> - <note>copied message info in history</note> - </trans-unit> - <trans-unit id="observer" xml:space="preserve" approved="no"> - <source>observer</source> - <target state="translated">gözlemci</target> - <note>member role</note> - </trans-unit> - <trans-unit id="off" xml:space="preserve" approved="no"> - <source>off</source> - <target state="translated">kapalı</target> - <note>enabled status - group pref value</note> - </trans-unit> - <trans-unit id="offered %@" xml:space="preserve" approved="no"> - <source>offered %@</source> - <target state="translated">%@ teklif edildi</target> - <note>feature offered item</note> - </trans-unit> - <trans-unit id="offered %@: %@" xml:space="preserve" approved="no"> - <source>offered %1$@: %2$@</source> - <target state="translated">%1$@: %2$@ teklif etti</target> - <note>feature offered item</note> - </trans-unit> - <trans-unit id="on" xml:space="preserve" approved="no"> - <source>on</source> - <target state="translated">açık</target> - <note>group pref value</note> - </trans-unit> - <trans-unit id="or chat with the developers" xml:space="preserve"> - <source>or chat with the developers</source> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="owner" xml:space="preserve" approved="no"> - <source>owner</source> - <target state="translated">sahip</target> - <note>member role</note> - </trans-unit> - <trans-unit id="peer-to-peer" xml:space="preserve" approved="no"> - <source>peer-to-peer</source> - <target state="translated">eşler arası</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="received answer…" xml:space="preserve" approved="no"> - <source>received answer…</source> - <target state="translated">alınan cevap…</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="received confirmation…" xml:space="preserve" approved="no"> - <source>received confirmation…</source> - <target state="translated">onaylama alındı…</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="rejected call" xml:space="preserve" approved="no"> - <source>rejected call</source> - <target state="translated">geri çevrilmiş çağrı</target> - <note>call status</note> - </trans-unit> - <trans-unit id="removed" xml:space="preserve" approved="no"> - <source>removed</source> - <target state="translated">kaldırıldı</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="removed %@" xml:space="preserve" approved="no"> - <source>removed %@</source> - <target state="translated">%@ kaldırıldı</target> - <note>rcv group event chat item</note> - </trans-unit> - <trans-unit id="removed you" xml:space="preserve" approved="no"> - <source>removed you</source> - <target state="translated">sen kaldırıldın</target> - <note>rcv group event chat item</note> - </trans-unit> - <trans-unit id="sec" xml:space="preserve" approved="no"> - <source>sec</source> - <target state="translated">sn</target> - <note>network option</note> - </trans-unit> - <trans-unit id="seconds" xml:space="preserve" approved="no"> - <source>seconds</source> - <target state="translated">saniye</target> - <note>time unit</note> - </trans-unit> - <trans-unit id="secret" xml:space="preserve" approved="no"> - <source>secret</source> - <target state="translated">gizli</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="security code changed" xml:space="preserve" approved="no"> - <source>security code changed</source> - <target state="translated">güvenlik kodu değiştirildi</target> - <note>chat item text</note> - </trans-unit> - <trans-unit id="starting…" xml:space="preserve" approved="no"> - <source>starting…</source> - <target state="translated">başlatılıyor…</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="strike" xml:space="preserve" approved="no"> - <source>strike</source> - <target state="translated">grev</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="this contact" xml:space="preserve" approved="no"> - <source>this contact</source> - <target state="translated">Bu kişi</target> - <note>notification title</note> - </trans-unit> - <trans-unit id="unknown" xml:space="preserve" approved="no"> - <source>unknown</source> - <target state="translated">bilinmeyen</target> - <note>connection info</note> - </trans-unit> - <trans-unit id="updated group profile" xml:space="preserve" approved="no"> - <source>updated group profile</source> - <target state="translated">grup profili güncellendi</target> - <note>rcv group event chat item</note> - </trans-unit> - <trans-unit id="v%@ (%@)" xml:space="preserve" approved="no"> - <source>v%@ (%@)</source> - <target state="translated">v%@ (%@)</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="via contact address link" xml:space="preserve" approved="no"> - <source>via contact address link</source> - <target state="translated">bağlantı adres uzantısı ile</target> - <note>chat list item description</note> - </trans-unit> - <trans-unit id="via group link" xml:space="preserve" approved="no"> - <source>via group link</source> - <target state="translated">grup bağlantısı ile</target> - <note>chat list item description</note> - </trans-unit> - <trans-unit id="via one-time link" xml:space="preserve" approved="no"> - <source>via one-time link</source> - <target state="translated">tek kullanımlık bağlantısı ile</target> - <note>chat list item description</note> - </trans-unit> - <trans-unit id="via relay" xml:space="preserve" approved="no"> - <source>via relay</source> - <target state="translated">yönlendirici aracılığıyla</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="video call (not e2e encrypted)" xml:space="preserve" approved="no"> - <source>video call (not e2e encrypted)</source> - <target state="translated">Görüntülü arama (şifrelenmiş değil)</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="waiting for answer…" xml:space="preserve" approved="no"> - <source>waiting for answer…</source> - <target state="translated">cevap bekleniyor…</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="waiting for confirmation…" xml:space="preserve" approved="no"> - <source>waiting for confirmation…</source> - <target state="translated">onay bekleniyor…</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="wants to connect to you!" xml:space="preserve" approved="no"> - <source>wants to connect to you!</source> - <target state="translated">bağlanmak istiyor!</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="weeks" xml:space="preserve" approved="no"> - <source>weeks</source> - <target state="translated">haftalar</target> - <note>time unit</note> - </trans-unit> - <trans-unit id="yes" xml:space="preserve" approved="no"> - <source>yes</source> - <target state="translated">evet</target> - <note>pref value</note> - </trans-unit> - <trans-unit id="you are invited to group" xml:space="preserve" approved="no"> - <source>you are invited to group</source> - <target state="translated">gruba davet edildiniz</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="you are observer" xml:space="preserve" approved="no"> - <source>you are observer</source> - <target state="translated">gözlemcisiniz</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="you changed address" xml:space="preserve" approved="no"> - <source>you changed address</source> - <target state="translated">adresinizi değiştirdiniz</target> - <note>chat item text</note> - </trans-unit> - <trans-unit id="you changed address for %@" xml:space="preserve" approved="no"> - <source>you changed address for %@</source> - <target state="translated">adresinizi %@ ile değiştirdiniz</target> - <note>chat item text</note> - </trans-unit> - <trans-unit id="you changed role for yourself to %@" xml:space="preserve" approved="no"> - <source>you changed role for yourself to %@</source> - <target state="translated">kişisel yetkinizi %@ olarak değiştirdiniz</target> - <note>snd group event chat item</note> - </trans-unit> - <trans-unit id="you changed role of %@ to %@" xml:space="preserve" approved="no"> - <source>you changed role of %1$@ to %2$@</source> - <target state="translated">%1$@'in yetkisini %2$@ olarak değiştirdiniz</target> - <note>snd group event chat item</note> - </trans-unit> - <trans-unit id="you left" xml:space="preserve" approved="no"> - <source>you left</source> - <target state="translated">terk ettiniz</target> - <note>snd group event chat item</note> - </trans-unit> - <trans-unit id="you removed %@" xml:space="preserve" approved="no"> - <source>you removed %@</source> - <target state="translated">%@'yi çıkarttınız</target> - <note>snd group event chat item</note> - </trans-unit> - <trans-unit id="you shared one-time link" xml:space="preserve" approved="no"> - <source>you shared one-time link</source> - <target state="translated">tek kullanımlık bağlantınızı paylaştınız</target> - <note>chat list item description</note> - </trans-unit> - <trans-unit id="you shared one-time link incognito" xml:space="preserve" approved="no"> - <source>you shared one-time link incognito</source> - <target state="translated">tek kullanımlık link paylaştınız gizli</target> - <note>chat list item description</note> - </trans-unit> - <trans-unit id="you: " xml:space="preserve" approved="no"> - <source>you: </source> - <target state="translated">sen: </target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="~strike~" xml:space="preserve" approved="no"> - <source>\~strike~</source> - <target state="translated">\~strike~</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="Accept connection request?" xml:space="preserve" approved="no"> - <source>Accept connection request?</source> - <target state="translated">Bağlantı isteği kabul edilsin mi?</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="# %@" xml:space="preserve" approved="no"> - <source># %@</source> - <target state="translated"># %@</target> - <note>copied message info title, # <title></note> - </trans-unit> - <trans-unit id="Already connecting!" xml:space="preserve" approved="no"> - <source>Already connecting!</source> - <target state="translated">Zaten bağlanılıyor!</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="A few more things" xml:space="preserve" approved="no"> - <source>A few more things</source> - <target state="translated">Birkaç şey daha</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="## History" xml:space="preserve" approved="no"> - <source>## History</source> - <target state="translated">## Geçmiş</target> - <note>copied message info</note> - </trans-unit> - <trans-unit id="A new random profile will be shared." xml:space="preserve" approved="no"> - <source>A new random profile will be shared.</source> - <target state="translated">Yeni bir rastgele profil paylaşılacak.</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="Already joining the group!" xml:space="preserve" approved="no"> - <source>Already joining the group!</source> - <target state="translated">Zaten gruba bağlanılıyor!</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="Block" xml:space="preserve" approved="no"> - <source>Block</source> - <target state="translated">Engelle</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="%@ connected" xml:space="preserve" approved="no"> - <source>%@ connected</source> - <target state="translated">%@ bağlandı</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="Discover and join groups" xml:space="preserve" approved="no"> - <source>Discover and join groups</source> - <target state="translated">Keşfet ve gruplara katıl</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="Disconnect desktop?" xml:space="preserve" approved="no"> - <source>Disconnect desktop?</source> - <target state="translated">Bilgisayarla bağlantı kesilsin mi?</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="Bulgarian, Finnish, Thai and Ukrainian - thanks to the users and [Weblate](https://github.com/simplex-chat/simplex-chat/tree/stable#help-translating-simplex-chat)!" xml:space="preserve" approved="no"> - <source>Bulgarian, Finnish, Thai and Ukrainian - thanks to the users and [Weblate](https://github.com/simplex-chat/simplex-chat/tree/stable#help-translating-simplex-chat)!</source> - <target state="translated">Bulgarca, Fince, Tayca ve Ukraynaca - kullanıcılara ve [Weblate] e teşekkürler! (https://github.com/simplex-chat/simplex-chat/tree/stable#help-translating-simplex-chat)!</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="Create a group using a random profile." xml:space="preserve" approved="no"> - <source>Create a group using a random profile.</source> - <target state="translated">Rasgele profil kullanarak grup oluştur.</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="Don't enable" xml:space="preserve" approved="no"> - <source>Don't enable</source> - <target state="translated">Etkinleştirme</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="Connect with %@" xml:space="preserve" approved="no"> - <source>Connect with %@</source> - <target state="translated">%@ ile bağlan</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="Discover via local network" xml:space="preserve" approved="no"> - <source>Discover via local network</source> - <target state="translated">Yerel ağ aracılığıyla keşfet</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="Enter this device name…" xml:space="preserve" approved="no"> - <source>Enter this device name…</source> - <target state="translated">Bu cihazın adını gir…</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="Better groups" xml:space="preserve" approved="no"> - <source>Better groups</source> - <target state="translated">Daha iyi gruplar</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="Error opening chat" xml:space="preserve" approved="no"> - <source>Error opening chat</source> - <target state="translated">Sohbeti açarken sorun oluştu</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="- more stable message delivery. - a bit better groups. - and more!" xml:space="preserve" approved="no"> - <source>- more stable message delivery. -- a bit better groups. -- and more!</source> - <target state="translated">- daha stabil mesaj gönderimi. -- birazcık daha iyi gruplar. -- ve fazlası!</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="- optionally notify deleted contacts. - profile names with spaces. - and more!" xml:space="preserve" approved="no"> - <source>- optionally notify deleted contacts. -- profile names with spaces. -- and more!</source> - <target state="translated">- isteğe bağlı olarak silinen kişilere bildirme. -- boşluklu profil adları -- ve fazlası!</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="0 sec" xml:space="preserve" approved="no"> - <source>0 sec</source> - <target state="translated">0 saniye</target> - <note>time to disappear</note> - </trans-unit> - <trans-unit id="Block member" xml:space="preserve" approved="no"> - <source>Block member</source> - <target state="translated">Üyeyi engelle</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="Connect via one-time link" xml:space="preserve" approved="no"> - <source>Connect via one-time link</source> - <target state="translated">Tek kullanımlık bağlantı aracılığıyla bağlan</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="Camera not available" xml:space="preserve" approved="no"> - <source>Camera not available</source> - <target state="translated">Kamera mevcut değil</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="Desktop app version %@ is not compatible with this app." xml:space="preserve" approved="no"> - <source>Desktop app version %@ is not compatible with this app.</source> - <target state="translated">Masaüstü uygulaması sürümü %@ bu uygulama ile uyumlu değildir.</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="Connect incognito" xml:space="preserve" approved="no"> - <source>Connect incognito</source> - <target state="translated">Gizli bağlan</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="Create group" xml:space="preserve" approved="no"> - <source>Create group</source> - <target state="translated">Grup oluştur</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="Enter group name…" xml:space="preserve" approved="no"> - <source>Enter group name…</source> - <target state="translated">Grup adı gir…</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="Delete contact? This cannot be undone!" xml:space="preserve" approved="no"> - <source>Delete contact? -This cannot be undone!</source> - <target state="translated">Kişi silinsin mi? -Bu geri alınamaz!</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="Connect to desktop" xml:space="preserve" approved="no"> - <source>Connect to desktop</source> - <target state="translated">Bilgisayara bağlan</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="All new messages from %@ will be hidden!" xml:space="preserve" approved="no"> - <source>All new messages from %@ will be hidden!</source> - <target state="translated">%@ 'den gelen bütün yeni mesajlar saklı olacak!</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="Delete and notify contact" xml:space="preserve" approved="no"> - <source>Delete and notify contact</source> - <target state="translated">Sil ve kişiye bildir</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="- connect to [directory service](simplex:/contact#/?v=1-4&smp=smp%3A%2F%2Fu2dS9sG8nMNURyZwqASV4yROM28Er0luVTx5X1CsMrU%3D%40smp4.simplex.im%2FeXSPwqTkKyDO3px4fLf1wx3MvPdjdLW3%23%2F%3Fv%3D1-2%26dh%3DMCowBQYDK2VuAyEAaiv6MkMH44L2TcYrt_CsX3ZvM11WgbMEUn0hkIKTOho%253D%26srv%3Do5vmywmrnaxalvz6wi3zicyftgio6psuvyniis6gco6bp6ekl4cqj4id.onion) (BETA)! - delivery receipts (up to 20 members). - faster and more stable." xml:space="preserve" approved="no"> - <source>- connect to [directory service](simplex:/contact#/?v=1-4&smp=smp%3A%2F%2Fu2dS9sG8nMNURyZwqASV4yROM28Er0luVTx5X1CsMrU%3D%40smp4.simplex.im%2FeXSPwqTkKyDO3px4fLf1wx3MvPdjdLW3%23%2F%3Fv%3D1-2%26dh%3DMCowBQYDK2VuAyEAaiv6MkMH44L2TcYrt_CsX3ZvM11WgbMEUn0hkIKTOho%253D%26srv%3Do5vmywmrnaxalvz6wi3zicyftgio6psuvyniis6gco6bp6ekl4cqj4id.onion) (BETA)! -- delivery receipts (up to 20 members). -- faster and more stable.</source> - <target state="translated">- [dizin hizmeti] 'ne bağlan(simplex:/contact#/?v=1-4&smp=smp%3A%2F%2Fu2dS9sG8nMNURyZwqASV4yROM28Er0luVTx5X1CsMrU%3D%40smp4.simplex.im%2FeXSPwqTkKyDO3px4fLf1wx3MvPdjdLW3%23%2F%3Fv%3D1-2%26dh%3DMCowBQYDK2VuAyEAaiv6MkMH44L2TcYrt_CsX3ZvM11WgbMEUn0hkIKTOho%253D%26srv%3Do5vmywmrnaxalvz6wi3zicyftgio6psuvyniis6gco6bp6ekl4cqj4id.onion) (BETA)! -- çoklu mesaj gönderimi (20 kişiye kadar). -- daha hızlı ve daha stabil.</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="%@ and %@" xml:space="preserve" approved="no"> - <source>%@ and %@</source> - <target state="translated">%@ ve %@</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="%lld messages moderated by %@" xml:space="preserve" approved="no"> - <source>%lld messages moderated by %@</source> - <target state="translated">%lld mesajları %@ tarafından yönetildi</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="%lld new interface languages" xml:space="preserve" approved="no"> - <source>%lld new interface languages</source> - <target state="translated">%lld yeni arayüz dilleri</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="Delivery" xml:space="preserve" approved="no"> - <source>Delivery</source> - <target state="translated">Teslimat</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="Correct name to %@?" xml:space="preserve" approved="no"> - <source>Correct name to %@?</source> - <target state="translated">İsim %@ olarak düzeltilsin mi?</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="**Add contact**: to create a new invitation link, or connect via a link you received." xml:space="preserve" approved="no"> - <source>**Add contact**: to create a new invitation link, or connect via a link you received.</source> - <target state="translated">**Kişi ekle**: yeni bir davet bağlantısı oluşturmak için, ya da aldığın bağlantıyla bağlan.</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="Creating link…" xml:space="preserve" approved="no"> - <source>Creating link…</source> - <target state="translated">Link oluşturuluyor…</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="## In reply to" xml:space="preserve" approved="no"> - <source>## In reply to</source> - <target state="translated">## cevap olarak</target> - <note>copied message info</note> - </trans-unit> - <trans-unit id="Delete %lld messages?" xml:space="preserve" approved="no"> - <source>Delete %lld messages?</source> - <target state="translated">%lld mesajları silinsin mi?</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="%lld messages blocked" xml:space="preserve" approved="no"> - <source>%lld messages blocked</source> - <target state="translated">%lld mesajlar engellendi</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="Error creating member contact" xml:space="preserve" approved="no"> - <source>Error creating member contact</source> - <target state="translated">Kişi iletişimi oluşturulurken hata oluştu</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="Disable for all" xml:space="preserve" approved="no"> - <source>Disable for all</source> - <target state="translated">Herkes için devre dışı bırak</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="Connection terminated" xml:space="preserve" approved="no"> - <source>Connection terminated</source> - <target state="translated">Bağlantı sonlandırılmış</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="Connect via contact address" xml:space="preserve" approved="no"> - <source>Connect via contact address</source> - <target state="translated">Kişi adresi aracılığıyla bağlan</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="Encrypt stored files & media" xml:space="preserve" approved="no"> - <source>Encrypt stored files & media</source> - <target state="translated">Saklanan dosyaları ve medyayı şifreleyin</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="%lld messages marked deleted" xml:space="preserve" approved="no"> - <source>%lld messages marked deleted</source> - <target state="translated">%lld mesajlar silinmiş olarak işaretlendi</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="%lld group events" xml:space="preserve" approved="no"> - <source>%lld group events</source> - <target state="translated">%lld grup etkinlikleri</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="Add contact" xml:space="preserve" approved="no"> - <source>Add contact</source> - <target state="translated">Kişi ekle</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="Connected to desktop" xml:space="preserve" approved="no"> - <source>Connected to desktop</source> - <target state="translated">Bilgisayara bağlanıldı</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="**Create group**: to create a new group." xml:space="preserve" approved="no"> - <source>**Create group**: to create a new group.</source> - <target state="translated">**Grup oluştur**: yeni bir grup oluşturmak için.</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="Error enabling delivery receipts!" xml:space="preserve" approved="no"> - <source>Error enabling delivery receipts!</source> - <target state="translated">Görüldü bilgisi etkinleştirilirken hata oluştu!</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="Enter your name…" xml:space="preserve" approved="no"> - <source>Enter your name…</source> - <target state="translated">Adını gir…</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="(this device v%@)" xml:space="preserve" approved="no"> - <source>(this device v%@)</source> - <target state="translated">(bu cihaz v%@)</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="Expand" xml:space="preserve" approved="no"> - <source>Expand</source> - <target state="translated">Genişlet</target> - <note>chat item action</note> - </trans-unit> - <trans-unit id="Enable (keep overrides)" xml:space="preserve" approved="no"> - <source>Enable (keep overrides)</source> - <target state="translated">Etkinleştir (geçersiz kılmaları koru)</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="Desktop devices" xml:space="preserve" approved="no"> - <source>Desktop devices</source> - <target state="translated">Bilgisayar cihazları</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="Enable camera access" xml:space="preserve" approved="no"> - <source>Enable camera access</source> - <target state="translated">Kamera erişimini etkinleştir</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="Error decrypting file" xml:space="preserve" approved="no"> - <source>Error decrypting file</source> - <target state="translated">Dosya şifresi çözülürken hata oluştu</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="Encrypted message: app is stopped" xml:space="preserve" approved="no"> - <source>Encrypted message: app is stopped</source> - <target state="translated">Şifrelenmiş mesaj: uygulama durdu</target> - <note>notification</note> - </trans-unit> - <trans-unit id="Create profile" xml:space="preserve" approved="no"> - <source>Create profile</source> - <target state="translated">Profil oluştur</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="Disable (keep overrides)" xml:space="preserve" approved="no"> - <source>Disable (keep overrides)</source> - <target state="translated">Devre dışı bırak (geçersiz kılmaları koru)</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="Encrypt local files" xml:space="preserve" approved="no"> - <source>Encrypt local files</source> - <target state="translated">Yerel dosyaları şifrele</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="Connect automatically" xml:space="preserve" approved="no"> - <source>Connect automatically</source> - <target state="translated">Otomatik olarak bağlan</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="Enable for all" xml:space="preserve" approved="no"> - <source>Enable for all</source> - <target state="translated">Herkes için etkinleştir</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="App encrypts new local files (except videos)." xml:space="preserve" approved="no"> - <source>App encrypts new local files (except videos).</source> - <target state="translated">Uygulama yerel dosyaları şifreler (videolar dışında).</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="Connected desktop" xml:space="preserve" approved="no"> - <source>Connected desktop</source> - <target state="translated">Bilgisayara bağlandı</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="Connect to yourself?" xml:space="preserve" approved="no"> - <source>Connect to yourself?</source> - <target state="translated">Kendine mi bağlanacaksın?</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="Chat is stopped. If you already used this database on another device, you should transfer it back before starting chat." xml:space="preserve" approved="no"> - <source>Chat is stopped. If you already used this database on another device, you should transfer it back before starting chat.</source> - <target state="translated">Sohbet durduruldu. Bu veritabanını zaten başka bir cihazda kullandıysanız, sohbete başlamadan önce onu geri aktarmalısınız.</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="%@, %@ and %lld members" xml:space="preserve" approved="no"> - <source>%@, %@ and %lld members</source> - <target state="translated">%@, %@ ve %lld üyeleri</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="Connect to yourself? This is your own SimpleX address!" xml:space="preserve" approved="no"> - <source>Connect to yourself? -This is your own SimpleX address!</source> - <target state="translated">Kendine mi bağlanacaksın? -Bu senin kendi SimpleX adresin!</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="Block group members" xml:space="preserve" approved="no"> - <source>Block group members</source> - <target state="translated">Grup üyelerini engelle</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="Block member?" xml:space="preserve" approved="no"> - <source>Block member?</source> - <target state="translated">Üyeyi engelle?</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="%@, %@ and %lld other members connected" xml:space="preserve" approved="no"> - <source>%@, %@ and %lld other members connected</source> - <target state="translated">%@, %@ ve %lld diğer üyeler bağlandı</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="Encryption re-negotiation failed." xml:space="preserve" approved="no"> - <source>Encryption re-negotiation failed.</source> - <target state="translated">Şifreleme yeniden anlaşma başarısız oldu.</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="Create new profile in [desktop app](https://simplex.chat/downloads/). 💻" xml:space="preserve" approved="no"> - <source>Create new profile in [desktop app](https://simplex.chat/downloads/). 💻</source> - <target state="translated">[bilgisayar uygulaması] nda yeni bir profil oluştur(https://simplex.chat/downloads/). 💻</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="Bad desktop address" xml:space="preserve" approved="no"> - <source>Bad desktop address</source> - <target state="translated">Kötü bilgisayar adresi</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="Connect to yourself? This is your own one-time link!" xml:space="preserve" approved="no"> - <source>Connect to yourself? -This is your own one-time link!</source> - <target state="translated">Kendine mi bağlanacaksın? -Bu senin kendi tek kullanımlık bağlantın!</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="Desktop address" xml:space="preserve" approved="no"> - <source>Desktop address</source> - <target state="translated">Bilgisayar adresi</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="(new)" xml:space="preserve" approved="no"> - <source>(new)</source> - <target state="translated">(yeni)</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="Encryption re-negotiation error" xml:space="preserve" approved="no"> - <source>Encryption re-negotiation error</source> - <target state="translated">Şifreleme yeniden anlaşma hatası</target> - <note>message decrypt error item</note> - </trans-unit> - <trans-unit id="%@ and %@ connected" xml:space="preserve" approved="no"> - <source>%@ and %@ connected</source> - <target state="translated">%@ ve %@ bağlandı</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="Connecting to desktop" xml:space="preserve" approved="no"> - <source>Connecting to desktop</source> - <target state="translated">Bilgisayara bağlanıyor</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="Open" xml:space="preserve" approved="no"> + <trans-unit id="Open" xml:space="preserve"> <source>Open</source> - <target state="translated">Aç</target> + <target>Aç</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Or show this code" xml:space="preserve" approved="no"> - <source>Or show this code</source> - <target state="translated">Veya bu kodu göster</target> + <trans-unit id="Open Settings" xml:space="preserve"> + <source>Open Settings</source> + <target>Ayarları aç</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Open group" xml:space="preserve" approved="no"> + <trans-unit id="Open chat" xml:space="preserve"> + <source>Open chat</source> + <target>Sohbeti aç</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="Open chat console" xml:space="preserve"> + <source>Open chat console</source> + <target>Sohbet konsolunu aç</target> + <note>authentication reason</note> + </trans-unit> + <trans-unit id="Open group" xml:space="preserve"> <source>Open group</source> - <target state="translated">Grubu aç</target> + <target>Grubu aç</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Found desktop" xml:space="preserve" approved="no"> - <source>Found desktop</source> - <target state="translated">Bilgisayar bulundu</target> + <trans-unit id="Open user profiles" xml:space="preserve"> + <source>Open user profiles</source> + <target>Kullanıcı profillerini aç</target> + <note>authentication reason</note> + </trans-unit> + <trans-unit id="Open-source protocol and code – anybody can run the servers." xml:space="preserve"> + <source>Open-source protocol and code – anybody can run the servers.</source> + <target>Açık kaynak protokolü ve kodu - herhangi biri sunucuları çalıştırabilir.</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Incognito groups" xml:space="preserve" approved="no"> - <source>Incognito groups</source> - <target state="translated">Gizli gruplar</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="Error scanning code: %@" xml:space="preserve" approved="no"> - <source>Error scanning code: %@</source> - <target state="translated">Kod taranırken hata oluştu: %@</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="Invalid QR code" xml:space="preserve" approved="no"> - <source>Invalid QR code</source> - <target state="translated">Geçersiz QR kodu</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="Fully decentralized – visible only to members." xml:space="preserve" approved="no"> - <source>Fully decentralized – visible only to members.</source> - <target state="translated">Tamamiyle merkezi olmayan - sadece kişilere görünür.</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="New desktop app!" xml:space="preserve" approved="no"> - <source>New desktop app!</source> - <target state="translated">Yeni bilgisayar uygulaması!</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="Not compatible!" xml:space="preserve" approved="no"> - <source>Not compatible!</source> - <target state="translated">Uyumlu değil!</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="Invalid name!" xml:space="preserve" approved="no"> - <source>Invalid name!</source> - <target state="translated">Geçersiz isim!</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="Filter unread and favorite chats." xml:space="preserve" approved="no"> - <source>Filter unread and favorite chats.</source> - <target state="translated">Favori ve okunmamış sohbetleri filtrele.</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="Incompatible version" xml:space="preserve" approved="no"> - <source>Incompatible version</source> - <target state="translated">Uyumsuz sürüm</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="Paste the link you received" xml:space="preserve" approved="no"> - <source>Paste the link you received</source> - <target state="translated">Aldığın bağlantıyı yapıştır</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="Opening app…" xml:space="preserve" approved="no"> + <trans-unit id="Opening app…" xml:space="preserve"> <source>Opening app…</source> - <target state="translated">Uygulama açılıyor…</target> + <target>Uygulama açılıyor…</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Linked desktop options" xml:space="preserve" approved="no"> - <source>Linked desktop options</source> - <target state="translated">Bağlanmış bilgisayar ayarları</target> + <trans-unit id="Or scan QR code" xml:space="preserve"> + <source>Or scan QR code</source> + <target>Veya QR kodu okut</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Join group?" xml:space="preserve" approved="no"> - <source>Join group?</source> - <target state="translated">Gruba katılınsın mı?</target> + <trans-unit id="Or show this code" xml:space="preserve"> + <source>Or show this code</source> + <target>Veya bu kodu göster</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Keep unused invitation?" xml:space="preserve" approved="no"> - <source>Keep unused invitation?</source> - <target state="translated">Kullanılmamış davet tutulsun mu?</target> + <trans-unit id="PING count" xml:space="preserve"> + <source>PING count</source> + <target>PING sayısı</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Most likely this connection is deleted." xml:space="preserve" approved="no"> - <source>Most likely this connection is deleted.</source> - <target state="translated">Büyük ihtimalle bu bağlantı silinmiş.</target> - <note>item status description</note> - </trans-unit> - <trans-unit id="Faster joining and more reliable messages." xml:space="preserve" approved="no"> - <source>Faster joining and more reliable messages.</source> - <target state="translated">Daha hızlı katılma ve daha güvenilir mesajlar.</target> + <trans-unit id="PING interval" xml:space="preserve"> + <source>PING interval</source> + <target>PING aralığı</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Join your group? This is your link for group %@!" xml:space="preserve" approved="no"> - <source>Join your group? -This is your link for group %@!</source> - <target state="translated">Bu gruba katılınsın mı? -Bu senin grup için bağlantın %@!</target> + <trans-unit id="Passcode" xml:space="preserve"> + <source>Passcode</source> + <target>Şifre</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Keep your connections" xml:space="preserve" approved="no"> - <source>Keep your connections</source> - <target state="translated">Bağlantılarınızı koruyun</target> + <trans-unit id="Passcode changed!" xml:space="preserve"> + <source>Passcode changed!</source> + <target>Şifre değiştirildi!</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Messages from %@ will be shown!" xml:space="preserve" approved="no"> - <source>Messages from %@ will be shown!</source> - <target state="translated">%@ den gelen mesajlar gösterilecektir!</target> + <trans-unit id="Passcode entry" xml:space="preserve"> + <source>Passcode entry</source> + <target>Şifre girişi</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Paste desktop address" xml:space="preserve" approved="no"> + <trans-unit id="Passcode not changed!" xml:space="preserve"> + <source>Passcode not changed!</source> + <target>Şifre değiştirilmedi!</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="Passcode set!" xml:space="preserve"> + <source>Passcode set!</source> + <target>Şifre ayarlandı!</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="Password to show" xml:space="preserve"> + <source>Password to show</source> + <target>Gösterilecek şifre</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="Past member %@" xml:space="preserve"> + <source>Past member %@</source> + <note>past/unknown group member</note> + </trans-unit> + <trans-unit id="Paste desktop address" xml:space="preserve"> <source>Paste desktop address</source> - <target state="translated">Bilgisayar adresini yapıştır</target> + <target>Bilgisayar adresini yapıştır</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Group already exists!" xml:space="preserve" approved="no"> - <source>Group already exists!</source> - <target state="translated">Grup çoktan mevcut!</target> + <trans-unit id="Paste image" xml:space="preserve"> + <source>Paste image</source> + <target>Fotoğraf yapıştır</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Even when disabled in the conversation." xml:space="preserve" approved="no"> - <source>Even when disabled in the conversation.</source> - <target state="translated">Konuşma sırasında devre dışı bırakılsa bile.</target> + <trans-unit id="Paste link to connect!" xml:space="preserve"> + <source>Paste link to connect!</source> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Message delivery receipts!" xml:space="preserve" approved="no"> - <source>Message delivery receipts!</source> - <target state="translated">Mesaj alındı bilgisi!</target> + <trans-unit id="Paste the link you received" xml:space="preserve"> + <source>Paste the link you received</source> + <target>Aldığın bağlantıyı yapıştır</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Join with current profile" xml:space="preserve" approved="no"> - <source>Join with current profile</source> - <target state="translated">Şu anki profille katıl</target> + <trans-unit id="People can connect to you only via the links you share." xml:space="preserve"> + <source>People can connect to you only via the links you share.</source> + <target>İnsanlar size yalnızca paylaştığınız bağlantılar üzerinden ulaşabilir.</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Keep" xml:space="preserve" approved="no"> - <source>Keep</source> - <target state="translated">Tut</target> + <trans-unit id="Periodically" xml:space="preserve"> + <source>Periodically</source> + <target>Periyodik olarak</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Error setting delivery receipts!" xml:space="preserve" approved="no"> - <source>Error setting delivery receipts!</source> - <target state="translated">Görüldü ayarlanırken hata oluştu!</target> + <trans-unit id="Permanent decryption error" xml:space="preserve"> + <source>Permanent decryption error</source> + <target>Kalıcı şifre çözümü hatası</target> + <note>message decrypt error item</note> + </trans-unit> + <trans-unit id="Please ask your contact to enable sending voice messages." xml:space="preserve"> + <source>Please ask your contact to enable sending voice messages.</source> + <target>Lütfen konuştuğunuz kişiden sesli mesaj göndermeyi etkinleştirmesini isteyin.</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Fix encryption after restoring backups." xml:space="preserve" approved="no"> - <source>Fix encryption after restoring backups.</source> - <target state="translated">Yedekleri geri yükledikten sonra şifrelemeyi düzelt.</target> + <trans-unit id="Please check that you used the correct link or ask your contact to send you another one." xml:space="preserve"> + <source>Please check that you used the correct link or ask your contact to send you another one.</source> + <target>Lütfen doğru bağlantıyı kullandığınızı kontrol edin veya kişiden size başka bir bağlantı göndermesini isteyin.</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Invalid link" xml:space="preserve" approved="no"> - <source>Invalid link</source> - <target state="translated">Geçersiz bağlantı</target> + <trans-unit id="Please check your network connection with %@ and try again." xml:space="preserve"> + <source>Please check your network connection with %@ and try again.</source> + <target>Lütfen ağ bağlantınızı %@ ile kontrol edin ve tekrar deneyin.</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="No delivery information" xml:space="preserve" approved="no"> - <source>No delivery information</source> - <target state="translated">Gönderim bilgisi yok</target> + <trans-unit id="Please check yours and your contact preferences." xml:space="preserve"> + <source>Please check yours and your contact preferences.</source> + <target>Lütfen sizinkini ve iletişim tercihlerinizi kontrol edin.</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Local" xml:space="preserve" approved="no"> - <source>Local</source> - <target state="translated">Yerel</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="Please contact developers. Error: %@" xml:space="preserve" approved="no"> + <trans-unit id="Please contact developers. Error: %@" xml:space="preserve"> <source>Please contact developers. Error: %@</source> - <target state="translated">Lütfen geliştiricilerle irtibata geçin. + <target>Lütfen geliştiricilerle irtibata geçin. Hata: %@</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Incognito mode protects your privacy by using a new random profile for each contact." xml:space="preserve" approved="no"> - <source>Incognito mode protects your privacy by using a new random profile for each contact.</source> - <target state="translated">Gizli mod her kişiye farklı olarak rasgele profiller kullanarak gizliliğinizi korur.</target> + <trans-unit id="Please contact group admin." xml:space="preserve"> + <source>Please contact group admin.</source> + <target>Lütfen grup yöneticisiyle irtibata geçin.</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="New chat" xml:space="preserve" approved="no"> - <source>New chat</source> - <target state="translated">Yeni sohbet</target> + <trans-unit id="Please enter correct current passphrase." xml:space="preserve"> + <source>Please enter correct current passphrase.</source> + <target>Lütfen şu anki doğru olan parolayı girin.</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Make one message disappear" xml:space="preserve" approved="no"> - <source>Make one message disappear</source> - <target state="translated">Bir mesajın kaybolmasını sağlayın</target> + <trans-unit id="Please enter the previous password after restoring database backup. This action can not be undone." xml:space="preserve"> + <source>Please enter the previous password after restoring database backup. This action can not be undone.</source> + <target>Veritabanı yedeğini geri yükledikten sonra lütfen önceki şifreyi girin. Bu işlem geri alınamaz.</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Group already exists" xml:space="preserve" approved="no"> - <source>Group already exists</source> - <target state="translated">Grup çoktan mevcut</target> + <trans-unit id="Please remember or store it securely - there is no way to recover a lost passcode!" xml:space="preserve"> + <source>Please remember or store it securely - there is no way to recover a lost passcode!</source> + <target>Lütfen iyi hatırlayın veya güvenli bir şekilde saklayın - kaybolmuş bir parolayı kurtarmanın bir yolu yoktur!</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Invalid status" xml:space="preserve" approved="no"> - <source>Invalid status</source> - <target state="translated">Geçersiz durum</target> - <note>item status text</note> - </trans-unit> - <trans-unit id="Linked desktops" xml:space="preserve" approved="no"> - <source>Linked desktops</source> - <target state="translated">Bağlanmış bilgisayarlar</target> + <trans-unit id="Please report it to the developers." xml:space="preserve"> + <source>Please report it to the developers.</source> + <target>Lütfen geliştiricilere bildirin.</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="OK" xml:space="preserve" approved="no"> - <source>OK</source> - <target state="translated">TAMAM</target> + <trans-unit id="Please restart the app and migrate the database to enable push notifications." xml:space="preserve"> + <source>Please restart the app and migrate the database to enable push notifications.</source> + <target>Lütfen uygulamayı yeniden başlatın ve anlık bildirimleri etkinleştirmek için veritabanını taşıyın.</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Keep the app open to use it from desktop" xml:space="preserve" approved="no"> - <source>Keep the app open to use it from desktop</source> - <target state="translated">Bilgisayardan kullanmak için uygulamayı açık tut</target> + <trans-unit id="Please store passphrase securely, you will NOT be able to access chat if you lose it." xml:space="preserve"> + <source>Please store passphrase securely, you will NOT be able to access chat if you lose it.</source> + <target>Lütfen parolayı güvenli bir şekilde saklayın, kaybederseniz sohbete ERİŞEMEZSİNİZ.</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Invalid response" xml:space="preserve" approved="no"> - <source>Invalid response</source> - <target state="translated">Geçersiz yanıt</target> + <trans-unit id="Please store passphrase securely, you will NOT be able to change it if you lose it." xml:space="preserve"> + <source>Please store passphrase securely, you will NOT be able to change it if you lose it.</source> + <target>Lütfen parolayı güvenli bir şekilde saklayın, kaybederseniz parolayı DEĞİŞTİREMEZSİNİZ.</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Find chats faster" xml:space="preserve" approved="no"> - <source>Find chats faster</source> - <target state="translated">Sohbetleri daha hızlı bul</target> + <trans-unit id="Polish interface" xml:space="preserve"> + <source>Polish interface</source> + <target>Lehçe arayüz</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Link mobile and desktop apps! 🔗" xml:space="preserve" approved="no"> - <source>Link mobile and desktop apps! 🔗</source> - <target state="translated">Telefon ve bilgisayar uygulamalarını bağla! 🔗</target> + <trans-unit id="Possibly, certificate fingerprint in server address is incorrect" xml:space="preserve"> + <source>Possibly, certificate fingerprint in server address is incorrect</source> + <target>Muhtemelen, sunucu adresindeki parmakizi sertifikası doğru değil</target> + <note>server test error</note> + </trans-unit> + <trans-unit id="Preserve the last message draft, with attachments." xml:space="preserve"> + <source>Preserve the last message draft, with attachments.</source> + <target>Son mesaj taslağını ekleriyle birlikte koru.</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Error sending member contact invitation" xml:space="preserve" approved="no"> - <source>Error sending member contact invitation</source> - <target state="translated">Kişi iletişim daveti gönderilirken hata oluştu</target> + <trans-unit id="Preset server" xml:space="preserve"> + <source>Preset server</source> + <target>Ön ayarlı sunucu</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Or scan QR code" xml:space="preserve" approved="no"> - <source>Or scan QR code</source> - <target state="translated">Veya QR kodu okut</target> + <trans-unit id="Preset server address" xml:space="preserve"> + <source>Preset server address</source> + <target>Ön ayarlı sunucu adresi</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Search or paste SimpleX link" xml:space="preserve" approved="no"> - <source>Search or paste SimpleX link</source> - <target state="translated">Ara veya SimpleX bağlantısını yapıştır</target> + <trans-unit id="Preview" xml:space="preserve"> + <source>Preview</source> + <target>Ön izleme</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Retry" xml:space="preserve" approved="no"> - <source>Retry</source> - <target state="translated">Yeniden dene</target> + <trans-unit id="Privacy & security" xml:space="preserve"> + <source>Privacy & security</source> + <target>Gizlilik & güvenlik</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Receipts are disabled" xml:space="preserve" approved="no"> - <source>Receipts are disabled</source> - <target state="translated">Görüldü devre dışı bırakıldı</target> + <trans-unit id="Privacy redefined" xml:space="preserve"> + <source>Privacy redefined</source> + <target>Gizlilik yeniden tanımlandı</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Profile name" xml:space="preserve" approved="no"> + <trans-unit id="Private filenames" xml:space="preserve"> + <source>Private filenames</source> + <target>Gizli dosya adları</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="Private notes" xml:space="preserve"> + <source>Private notes</source> + <note>name of notes to self</note> + </trans-unit> + <trans-unit id="Profile and server connections" xml:space="preserve"> + <source>Profile and server connections</source> + <target>Profil ve sunucu bağlantıları</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="Profile image" xml:space="preserve"> + <source>Profile image</source> + <target>Profil fotoğrafı</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="Profile name" xml:space="preserve"> <source>Profile name</source> - <target state="translated">Profil ismi</target> + <target>Profil ismi</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Reject (sender NOT notified)" xml:space="preserve" approved="no"> - <source>Reject (sender NOT notified)</source> - <target state="translated">Reddet (göndericiye bildirim GİTMEYECEKTİR)</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="Scan QR code from desktop" xml:space="preserve" approved="no"> - <source>Scan QR code from desktop</source> - <target state="translated">Bilgisayardan QR kodu okut</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="Profile name:" xml:space="preserve" approved="no"> + <trans-unit id="Profile name:" xml:space="preserve"> <source>Profile name:</source> - <target state="translated">Profil ismi:</target> + <target>Profil ismi:</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Sending receipts is disabled for %lld contacts" xml:space="preserve" approved="no"> - <source>Sending receipts is disabled for %lld contacts</source> - <target state="translated">Görüldü bilgisi %lld kişileri için devre dışı bırakıldı</target> + <trans-unit id="Profile password" xml:space="preserve"> + <source>Profile password</source> + <target>Profil parolası</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Share this 1-time invite link" xml:space="preserve" approved="no"> - <source>Share this 1-time invite link</source> - <target state="translated">Bu tek kullanımlık bağlantı davetini paylaş</target> + <trans-unit id="Profile update will be sent to your contacts." xml:space="preserve"> + <source>Profile update will be sent to your contacts.</source> + <target>Profil güncellemesi kişilerinize gönderilecektir.</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Unblock member" xml:space="preserve" approved="no"> - <source>Unblock member</source> - <target state="translated">Üyenin engelini kaldır</target> + <trans-unit id="Prohibit audio/video calls." xml:space="preserve"> + <source>Prohibit audio/video calls.</source> + <target>Sesli/görüntülü aramaları yasakla.</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Via secure quantum resistant protocol." xml:space="preserve" approved="no"> - <source>Via secure quantum resistant protocol.</source> - <target state="translated">Güvenli kuantum dirençli protokol ile.</target> + <trans-unit id="Prohibit irreversible message deletion." xml:space="preserve"> + <source>Prohibit irreversible message deletion.</source> + <target>Geri dönüşsüz mesaj silme işlemini yasakla.</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Sending receipts is enabled for %lld groups" xml:space="preserve" approved="no"> - <source>Sending receipts is enabled for %lld groups</source> - <target state="translated">Görüldü bilgisi %lld grupları için etkinleştirildi</target> + <trans-unit id="Prohibit message reactions." xml:space="preserve"> + <source>Prohibit message reactions.</source> + <target>Mesaj tepkisini yasakla.</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Sending receipts is disabled for %lld groups" xml:space="preserve" approved="no"> - <source>Sending receipts is disabled for %lld groups</source> - <target state="translated">Görüldü bilgisi %lld grupları için devre dışı bırakıldı</target> + <trans-unit id="Prohibit messages reactions." xml:space="preserve"> + <source>Prohibit messages reactions.</source> + <target>Mesajlarda tepkileri yasakla.</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="To hide unwanted messages." xml:space="preserve" approved="no"> - <source>To hide unwanted messages.</source> - <target state="translated">İstenmeyen mesajları gizlemek için.</target> + <trans-unit id="Prohibit sending direct messages to members." xml:space="preserve"> + <source>Prohibit sending direct messages to members.</source> + <target>Geri dönülmez mesaj silme işlemini yasakla.</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Sending delivery receipts will be enabled for all contacts." xml:space="preserve" approved="no"> - <source>Sending delivery receipts will be enabled for all contacts.</source> - <target state="translated">Görüldü bilgisi bütün kişileri için etkinleştirilecektir.</target> + <trans-unit id="Prohibit sending disappearing messages." xml:space="preserve"> + <source>Prohibit sending disappearing messages.</source> + <target>Kaybolan mesajların gönderimini yasakla.</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Sending receipts is enabled for %lld contacts" xml:space="preserve" approved="no"> - <source>Sending receipts is enabled for %lld contacts</source> - <target state="translated">Görüldü bilgisi %lld kişileri için etkinleştirildi</target> + <trans-unit id="Prohibit sending files and media." xml:space="preserve"> + <source>Prohibit sending files and media.</source> + <target>Dosyalar ve medya gönderimlerini yasakla.</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Verify code with desktop" xml:space="preserve" approved="no"> - <source>Verify code with desktop</source> - <target state="translated">Bilgisayarla kodu doğrula</target> + <trans-unit id="Prohibit sending voice messages." xml:space="preserve"> + <source>Prohibit sending voice messages.</source> + <target>Sesli mesajların gönderimini yasakla.</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="This group has over %lld members, delivery receipts are not sent." xml:space="preserve" approved="no"> - <source>This group has over %lld members, delivery receipts are not sent.</source> - <target state="translated">Bu grubun %lld den fazla üyesi var,görüldü bilgisi gönderilmedi.</target> + <trans-unit id="Protect app screen" xml:space="preserve"> + <source>Protect app screen</source> + <target>Uygulama ekranını koru</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Repeat join request?" xml:space="preserve" approved="no"> - <source>Repeat join request?</source> - <target state="translated">Katılma isteği tekrarlansın mı?</target> + <trans-unit id="Protect your chat profiles with a password!" xml:space="preserve"> + <source>Protect your chat profiles with a password!</source> + <target>Bir parolayla birlikte sohbet profillerini koru!</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Unlink desktop?" xml:space="preserve" approved="no"> - <source>Unlink desktop?</source> - <target state="translated">Bilgisayarla bağlantı kaldırılsın mı?</target> + <trans-unit id="Protocol timeout" xml:space="preserve"> + <source>Protocol timeout</source> + <target>Protokol zaman aşımı</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="You are already in group %@." xml:space="preserve" approved="no"> - <source>You are already in group %@.</source> - <target state="translated">Zaten %@ grubundasın.</target> + <trans-unit id="Protocol timeout per KB" xml:space="preserve"> + <source>Protocol timeout per KB</source> + <target>KB başına protokol zaman aşımı</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Unblock member?" xml:space="preserve" approved="no"> - <source>Unblock member?</source> - <target state="translated">Üyenin engeli kaldırılsın mı?</target> + <trans-unit id="Push notifications" xml:space="preserve"> + <source>Push notifications</source> + <target>Anında bildirimler</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Sending delivery receipts will be enabled for all contacts in all visible chat profiles." xml:space="preserve" approved="no"> - <source>Sending delivery receipts will be enabled for all contacts in all visible chat profiles.</source> - <target state="translated">Görüldü bilgisi, tüm görünür sohbet profillerindeki tüm kişiler için etkinleştirilecektir.</target> + <trans-unit id="Rate the app" xml:space="preserve"> + <source>Rate the app</source> + <target>Uygulamayı değerlendir</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" approved="no"> - <source>You are already connecting via this one-time link!</source> - <target state="translated">Bu tek seferlik bağlantı üzerinden zaten bağlanıyorsunuz!</target> + <trans-unit id="React…" xml:space="preserve"> + <source>React…</source> + <target>Tepki ver…</target> + <note>chat item menu</note> + </trans-unit> + <trans-unit id="Read" xml:space="preserve"> + <source>Read</source> + <target>Oku</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Repeat connection request?" xml:space="preserve" approved="no"> - <source>Repeat connection request?</source> - <target state="translated">Bağlantı isteği tekrarlansın mı?</target> + <trans-unit id="Read more" xml:space="preserve"> + <source>Read more</source> + <target>Dahasını oku</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Tap to Connect" xml:space="preserve" approved="no"> - <source>Tap to Connect</source> - <target state="translated">Bağlanmak için Tıkla</target> + <trans-unit id="Read more in [User Guide](https://simplex.chat/docs/guide/app-settings.html#your-simplex-contact-address)." xml:space="preserve"> + <source>Read more in [User Guide](https://simplex.chat/docs/guide/app-settings.html#your-simplex-contact-address).</source> + <target>[Kullanıcı Rehberi]nde daha fazlasını okuyun(https://simplex.chat/docs/guide/app-settings.html#your-simplex-contact-address).</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="They can be overridden in contact and group settings." xml:space="preserve" approved="no"> - <source>They can be overridden in contact and group settings.</source> - <target state="translated">Bunlar kişi ve grup ayarlarında geçersiz kılınabilir.</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" approved="no"> - <source>You are already joining the group via this link!</source> - <target state="translated">Bu bağlantı üzerinden gruba zaten katılıyorsunuz!</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="Session code" xml:space="preserve" approved="no"> - <source>Session code</source> - <target state="translated">Oturum kodu</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" approved="no"> - <source>You are already joining the group via this link.</source> - <target state="translated">Gruba zaten bu bağlantı üzerinden katılıyorsunuz.</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="Use current profile" xml:space="preserve" approved="no"> - <source>Use current profile</source> - <target state="translated">Şu anki profili kullan</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="You can enable later via Settings" xml:space="preserve" approved="no"> - <source>You can enable later via Settings</source> - <target state="translated">Daha sonra Ayarlardan etkinleştirebilirsin</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="Start chat?" xml:space="preserve" approved="no"> - <source>Start chat?</source> - <target state="translated">Sohbet başlatılsın mı?</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="Toggle incognito when connecting." xml:space="preserve" approved="no"> - <source>Toggle incognito when connecting.</source> - <target state="translated">Bağlanırken gizli moda geçiş yap.</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="Tap to scan" xml:space="preserve" approved="no"> - <source>Tap to scan</source> - <target state="translated">Taramak için tıkla</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="Verify connections" xml:space="preserve" approved="no"> - <source>Verify connections</source> - <target state="translated">Bağlantıları doğrula</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="The code you scanned is not a SimpleX link QR code." xml:space="preserve" approved="no"> - <source>The code you scanned is not a SimpleX link QR code.</source> - <target state="translated">Taradığınız kod bir SimpleX bağlantı QR kodu değildir.</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="Waiting for desktop..." xml:space="preserve" approved="no"> - <source>Waiting for desktop...</source> - <target state="translated">Bilgisayar için bekleniyor...</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="You are already joining the group %@." xml:space="preserve" approved="no"> - <source>You are already joining the group %@.</source> - <target state="translated">Zaten %@ grubuna katılıyorsunuz.</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="Use only local notifications?" xml:space="preserve" approved="no"> - <source>Use only local notifications?</source> - <target state="translated">Sadece yerel bildirimler kullanılsın mı?</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="Use new incognito profile" xml:space="preserve" approved="no"> - <source>Use new incognito profile</source> - <target state="translated">Yeni gizli profilden kullan</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="This is your own one-time link!" xml:space="preserve" approved="no"> - <source>This is your own one-time link!</source> - <target state="translated">Bu senin kendi tek kullanımlık bağlantın!</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="Verify connection" xml:space="preserve" approved="no"> - <source>Verify connection</source> - <target state="translated">Bağlantıyı doğrula</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="Tap to paste link" xml:space="preserve" approved="no"> - <source>Tap to paste link</source> - <target state="translated">Bağlantıyı yapıştırmak için tıkla</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="This is your own SimpleX address!" xml:space="preserve" approved="no"> - <source>This is your own SimpleX address!</source> - <target state="translated">Bu senin kendi SimpleX adresin!</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="Simplified incognito mode" xml:space="preserve" approved="no"> - <source>Simplified incognito mode</source> - <target state="translated">Basitleştirilmiş gizli mod</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="The second tick we missed! ✅" xml:space="preserve" approved="no"> - <source>The second tick we missed! ✅</source> - <target state="translated">Özlediğimiz ikinci tik! ✅</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="Unblock" xml:space="preserve" approved="no"> - <source>Unblock</source> - <target state="translated">Engeli kaldır</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="You are already connecting to %@." xml:space="preserve" approved="no"> - <source>You are already connecting to %@.</source> - <target state="translated">Zaten %@'a bağlanıyorsunuz.</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="This device name" xml:space="preserve" approved="no"> - <source>This device name</source> - <target state="translated">Bu cihazın ismi</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="Read more in [User Guide](https://simplex.chat/docs/guide/chat-profiles.html#incognito-mode)." xml:space="preserve" approved="no"> + <trans-unit id="Read more in [User Guide](https://simplex.chat/docs/guide/chat-profiles.html#incognito-mode)." xml:space="preserve"> <source>Read more in [User Guide](https://simplex.chat/docs/guide/chat-profiles.html#incognito-mode).</source> - <target state="translated">[Kullanıcı Rehberi]nde daha fazlasını okuyun(https://simplex.chat/docs/guide/chat-profiles.html#incognito-mode).</target> + <target>[Kullanıcı Rehberi]nde daha fazlasını okuyun(https://simplex.chat/docs/guide/chat-profiles.html#incognito-mode).</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Unlink" xml:space="preserve" approved="no"> + <trans-unit id="Read more in [User Guide](https://simplex.chat/docs/guide/readme.html#connect-to-friends)." xml:space="preserve"> + <source>Read more in [User Guide](https://simplex.chat/docs/guide/readme.html#connect-to-friends).</source> + <target>[Kullanıcı Rehberi]nde daha fazlasını okuyun(https://simplex.chat/docs/guide/readme.html#connect-to-friends).</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="Read more in our GitHub repository." xml:space="preserve"> + <source>Read more in our GitHub repository.</source> + <target>Daha fazlasını GitHub depomuzdan oku.</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="Read more in our [GitHub repository](https://github.com/simplex-chat/simplex-chat#readme)." xml:space="preserve"> + <source>Read more in our [GitHub repository](https://github.com/simplex-chat/simplex-chat#readme).</source> + <target>[GitHub deposu]nda daha fazlasını okuyun(https://github.com/simplex-chat/simplex-chat#readme).</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="Receipts are disabled" xml:space="preserve"> + <source>Receipts are disabled</source> + <target>Görüldü devre dışı bırakıldı</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="Received at" xml:space="preserve"> + <source>Received at</source> + <target>Şuradan alındı</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="Received at: %@" xml:space="preserve"> + <source>Received at: %@</source> + <target>Şuradan alındı: %@</target> + <note>copied message info</note> + </trans-unit> + <trans-unit id="Received file event" xml:space="preserve"> + <source>Received file event</source> + <target>Dosya etkinliği alındı</target> + <note>notification</note> + </trans-unit> + <trans-unit id="Received message" xml:space="preserve"> + <source>Received message</source> + <target>Mesaj alındı</target> + <note>message info title</note> + </trans-unit> + <trans-unit id="Receiving address will be changed to a different server. Address change will complete after sender comes online." xml:space="preserve"> + <source>Receiving address will be changed to a different server. Address change will complete after sender comes online.</source> + <target>Alıcı adresi farklı bir sunucuya değiştirilecektir. Gönderici çevrimiçi olduktan sonra adres değişikliği tamamlanacaktır.</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="Receiving file will be stopped." xml:space="preserve"> + <source>Receiving file will be stopped.</source> + <target>Dosya alımı durdurulacaktır.</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="Receiving via" xml:space="preserve"> + <source>Receiving via</source> + <target>Aracılığıyla alınıyor</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="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)." xml:space="preserve"> + <source>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).</source> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="Recipients see updates as you type them." xml:space="preserve"> + <source>Recipients see updates as you type them.</source> + <target>Alıcılar yazdığına göre güncellemeleri görecektir.</target> + <note>No comment provided by engineer.</note> + </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>Mesaj teslimini zorlamak için bağlı tüm sunucuları yeniden bağlayın. Ek trafik kullanır.</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="Reconnect servers?" xml:space="preserve"> + <source>Reconnect servers?</source> + <target>Sunuculara yeniden bağlanılsın mı?</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="Record updated at" xml:space="preserve"> + <source>Record updated at</source> + <target>Kayıt şu zamanda güncellendi</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="Record updated at: %@" xml:space="preserve"> + <source>Record updated at: %@</source> + <target>Kayıt şu zamanda güncellendi: %@</target> + <note>copied message info</note> + </trans-unit> + <trans-unit id="Reduced battery usage" xml:space="preserve"> + <source>Reduced battery usage</source> + <target>Azaltılmış pil kullanımı</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="Reject" xml:space="preserve"> + <source>Reject</source> + <target>Reddet</target> + <note>reject incoming call via notification</note> + </trans-unit> + <trans-unit id="Reject (sender NOT notified)" xml:space="preserve"> + <source>Reject (sender NOT notified)</source> + <target>Reddet (göndericiye bildirim GİTMEYECEKTİR)</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="Reject contact request" xml:space="preserve"> + <source>Reject contact request</source> + <target>Bağlanma isteğini reddet</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="Relay server is only used if necessary. Another party can observe your IP address." xml:space="preserve"> + <source>Relay server is only used if necessary. Another party can observe your IP address.</source> + <target>Aktarma sunucusu yalnızca gerekli olduğunda kullanılır. Başka bir taraf IP adresinizi gözlemleyebilir.</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="Relay server protects your IP address, but it can observe the duration of the call." xml:space="preserve"> + <source>Relay server protects your IP address, but it can observe the duration of the call.</source> + <target>Aktarıcı sunucu IP adresinizi korur, ancak aramanın süresini gözlemleyebilir.</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="Remove" xml:space="preserve"> + <source>Remove</source> + <target>Sil</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="Remove member" xml:space="preserve"> + <source>Remove member</source> + <target>Kişiyi sil</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="Remove member?" xml:space="preserve"> + <source>Remove member?</source> + <target>Kişi silinsin mi?</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="Remove passphrase from keychain?" xml:space="preserve"> + <source>Remove passphrase from keychain?</source> + <target>Anahtar Zinciri'ndeki parola silinsin mi?</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="Renegotiate" xml:space="preserve"> + <source>Renegotiate</source> + <target>Yeniden müzakere</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="Renegotiate encryption" xml:space="preserve"> + <source>Renegotiate encryption</source> + <target>Şifrelemeyi yeniden müzakere et</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="Renegotiate encryption?" xml:space="preserve"> + <source>Renegotiate encryption?</source> + <target>Şifreleme yeniden müzakere edilsin mi?</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="Repeat connection request?" xml:space="preserve"> + <source>Repeat connection request?</source> + <target>Bağlantı isteği tekrarlansın mı?</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="Repeat join request?" xml:space="preserve"> + <source>Repeat join request?</source> + <target>Katılma isteği tekrarlansın mı?</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="Reply" xml:space="preserve"> + <source>Reply</source> + <target>Yanıtla</target> + <note>chat item action</note> + </trans-unit> + <trans-unit id="Required" xml:space="preserve"> + <source>Required</source> + <target>Gerekli</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="Reset" xml:space="preserve"> + <source>Reset</source> + <target>Sıfırla</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="Reset colors" xml:space="preserve"> + <source>Reset colors</source> + <target>Renkleri sıfırla</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="Reset to defaults" xml:space="preserve"> + <source>Reset to defaults</source> + <target>Varsayılanlara sıfırla</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="Restart the app to create a new chat profile" xml:space="preserve"> + <source>Restart the app to create a new chat profile</source> + <target>Yeni bir sohbet profili oluşturmak için uygulamayı yeniden başlatın</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="Restart the app to use imported chat database" xml:space="preserve"> + <source>Restart the app to use imported chat database</source> + <target>İçe aktarılmış sohbet veritabanını kullanmak için uygulamayı yeniden başlatın</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="Restore" xml:space="preserve"> + <source>Restore</source> + <target>Geri yükle</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="Restore database backup" xml:space="preserve"> + <source>Restore database backup</source> + <target>Veritabanı yedeğini geri yükle</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="Restore database backup?" xml:space="preserve"> + <source>Restore database backup?</source> + <target>Veritabanı yedeği geri yüklensin mi?</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="Restore database error" xml:space="preserve"> + <source>Restore database error</source> + <target>Veritabanını geri yüklerken hata oluştu</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="Retry" xml:space="preserve"> + <source>Retry</source> + <target>Yeniden dene</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="Reveal" xml:space="preserve"> + <source>Reveal</source> + <target>Göster</target> + <note>chat item action</note> + </trans-unit> + <trans-unit id="Revert" xml:space="preserve"> + <source>Revert</source> + <target>Geri al</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="Revoke" xml:space="preserve"> + <source>Revoke</source> + <target>İptal et</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="Revoke file" xml:space="preserve"> + <source>Revoke file</source> + <target>Dosyayı iptal et</target> + <note>cancel file action</note> + </trans-unit> + <trans-unit id="Revoke file?" xml:space="preserve"> + <source>Revoke file?</source> + <target>Dosya iptal edilsin mi?</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="Role" xml:space="preserve"> + <source>Role</source> + <target>Rol</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="Run chat" xml:space="preserve"> + <source>Run chat</source> + <target>Sohbeti çalıştır</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="SMP servers" xml:space="preserve"> + <source>SMP servers</source> + <target>SMP sunucuları</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="Safer groups" xml:space="preserve"> + <source>Safer groups</source> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="Save" xml:space="preserve"> + <source>Save</source> + <target>Kaydet</target> + <note>chat item action</note> + </trans-unit> + <trans-unit id="Save (and notify contacts)" xml:space="preserve"> + <source>Save (and notify contacts)</source> + <target>Kaydet (ve kişilere bildir)</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="Save and notify contact" xml:space="preserve"> + <source>Save and notify contact</source> + <target>Kaydet ve kişilere bildir</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="Save and notify group members" xml:space="preserve"> + <source>Save and notify group members</source> + <target>Kaydet ve grup üyelerine bildir</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="Save and update group profile" xml:space="preserve"> + <source>Save and update group profile</source> + <target>Kaydet ve grup profilini güncelle</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="Save archive" xml:space="preserve"> + <source>Save archive</source> + <target>Arşivi kaydet</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="Save auto-accept settings" xml:space="preserve"> + <source>Save auto-accept settings</source> + <target>Otomatik kabul et ayarlarını kaydet</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="Save group profile" xml:space="preserve"> + <source>Save group profile</source> + <target>Grup profilini kaydet</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="Save passphrase and open chat" xml:space="preserve"> + <source>Save passphrase and open chat</source> + <target>Parolayı kaydet ve sohbeti aç</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="Save passphrase in Keychain" xml:space="preserve"> + <source>Save passphrase in Keychain</source> + <target>Parolayı Anahtar Zincirinde kaydet</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="Save preferences?" xml:space="preserve"> + <source>Save preferences?</source> + <target>Tercihler kaydedilsin mi?</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="Save profile password" xml:space="preserve"> + <source>Save profile password</source> + <target>Profil şifresini kaydet</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="Save servers" xml:space="preserve"> + <source>Save servers</source> + <target>Sunucuları kaydet</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="Save servers?" xml:space="preserve"> + <source>Save servers?</source> + <target>Sunucular kaydedilsin mi?</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="Save settings?" xml:space="preserve"> + <source>Save settings?</source> + <target>Ayarlar kaydedilsin mi?</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="Save welcome message?" xml:space="preserve"> + <source>Save welcome message?</source> + <target>Hoşgeldin mesajı kaydedilsin mi?</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="Saved WebRTC ICE servers will be removed" xml:space="preserve"> + <source>Saved WebRTC ICE servers will be removed</source> + <target>Kaydedilmiş WebRTC ICE sunucuları silinecek</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="Saved message" xml:space="preserve"> + <source>Saved message</source> + <note>message info title</note> + </trans-unit> + <trans-unit id="Scan QR code" xml:space="preserve"> + <source>Scan QR code</source> + <target>QR kodu okut</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="Scan QR code from desktop" xml:space="preserve"> + <source>Scan QR code from desktop</source> + <target>Bilgisayardan QR kodu okut</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="Scan code" xml:space="preserve"> + <source>Scan code</source> + <target>Kod okut</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="Scan security code from your contact's app." xml:space="preserve"> + <source>Scan security code from your contact's app.</source> + <target>Kişinin uygulamasından güvenlik kodunu okut.</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="Scan server QR code" xml:space="preserve"> + <source>Scan server QR code</source> + <target>Sunucu QR kodu okut</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="Search" xml:space="preserve"> + <source>Search</source> + <target>Ara</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="Search bar accepts invitation links." xml:space="preserve"> + <source>Search bar accepts invitation links.</source> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="Search or paste SimpleX link" xml:space="preserve"> + <source>Search or paste SimpleX link</source> + <target>Ara veya SimpleX bağlantısını yapıştır</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="Secure queue" xml:space="preserve"> + <source>Secure queue</source> + <target>Sırayı koru</target> + <note>server test step</note> + </trans-unit> + <trans-unit id="Security assessment" xml:space="preserve"> + <source>Security assessment</source> + <target>Güvenlik değerlendirmesi</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="Security code" xml:space="preserve"> + <source>Security code</source> + <target>Güvenlik kodu</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="Select" xml:space="preserve"> + <source>Select</source> + <target>Seç</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="Self-destruct" xml:space="preserve"> + <source>Self-destruct</source> + <target>Kendi kendini imha</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="Self-destruct passcode" xml:space="preserve"> + <source>Self-destruct passcode</source> + <target>Kendini imha eden şifre</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="Self-destruct passcode changed!" xml:space="preserve"> + <source>Self-destruct passcode changed!</source> + <target>Kendini imha eden şifre değiştirildi!</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="Self-destruct passcode enabled!" xml:space="preserve"> + <source>Self-destruct passcode enabled!</source> + <target>Kendini imha eden şifre etkinleştirildi!</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="Send" xml:space="preserve"> + <source>Send</source> + <target>Gönder</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="Send a live message - it will update for the recipient(s) as you type it" xml:space="preserve"> + <source>Send a live message - it will update for the recipient(s) as you type it</source> + <target>Bir canlı mesaj gönder - yazışına göre kişiye(lere) kendini günceller</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="Send delivery receipts to" xml:space="preserve"> + <source>Send delivery receipts to</source> + <target>Görüldü bilgilerini şuraya gönder</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="Send direct message" xml:space="preserve"> + <source>Send direct message</source> + <target>Doğrudan mesaj gönder</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="Send direct message to connect" xml:space="preserve"> + <source>Send direct message to connect</source> + <target>Bağlanmak için doğrudan mesaj gönder</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="Send disappearing message" xml:space="preserve"> + <source>Send disappearing message</source> + <target>Kaybolan bir mesaj gönder</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="Send link previews" xml:space="preserve"> + <source>Send link previews</source> + <target>Bağlantı ön gösterimleri gönder</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="Send live message" xml:space="preserve"> + <source>Send live message</source> + <target>Canlı mesaj gönder</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="Send notifications" xml:space="preserve"> + <source>Send notifications</source> + <target>Bildirimler gönder</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="Send notifications:" xml:space="preserve"> + <source>Send notifications:</source> + <target>Bildirimler gönder:</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="Send questions and ideas" xml:space="preserve"> + <source>Send questions and ideas</source> + <target>Fikirler ve sorular gönderin</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="Send receipts" xml:space="preserve"> + <source>Send receipts</source> + <target>Mesajlar gönder</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="Send them from gallery or custom keyboards." xml:space="preserve"> + <source>Send them from gallery or custom keyboards.</source> + <target>Bunları galeriden veya özel klavyelerden gönder.</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="Send up to 100 last messages to new members." xml:space="preserve"> + <source>Send up to 100 last messages to new members.</source> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="Sender cancelled file transfer." xml:space="preserve"> + <source>Sender cancelled file transfer.</source> + <target>Gönderici dosya gönderimini iptal etti.</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="Sender may have deleted the connection request." xml:space="preserve"> + <source>Sender may have deleted the connection request.</source> + <target>Gönderici bağlantı isteğini silmiş olabilir.</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="Sending delivery receipts will be enabled for all contacts in all visible chat profiles." xml:space="preserve"> + <source>Sending delivery receipts will be enabled for all contacts in all visible chat profiles.</source> + <target>Görüldü bilgisi, tüm görünür sohbet profillerindeki tüm kişiler için etkinleştirilecektir.</target> + <note>No comment provided by engineer.</note> + </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>Görüldü bilgisi bütün kişileri 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"> + <source>Sending file will be stopped.</source> + <target>Dosya gönderimi durdurulacaktır.</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="Sending receipts is disabled for %lld contacts" xml:space="preserve"> + <source>Sending receipts is disabled for %lld contacts</source> + <target>Görüldü bilgisi %lld kişileri için devre dışı bırakıldı</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="Sending receipts is disabled for %lld groups" xml:space="preserve"> + <source>Sending receipts is disabled for %lld groups</source> + <target>Görüldü bilgisi %lld grupları için devre dışı bırakıldı</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="Sending receipts is enabled for %lld contacts" xml:space="preserve"> + <source>Sending receipts is enabled for %lld contacts</source> + <target>Görüldü bilgisi %lld kişileri için etkinleştirildi</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="Sending receipts is enabled for %lld groups" xml:space="preserve"> + <source>Sending receipts is enabled for %lld groups</source> + <target>Görüldü bilgisi %lld grupları için etkinleştirildi</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="Sending via" xml:space="preserve"> + <source>Sending via</source> + <target>Aracılığıyla gönderiliyor</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="Sent at" xml:space="preserve"> + <source>Sent at</source> + <target>Şuradan gönderildi</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="Sent at: %@" xml:space="preserve"> + <source>Sent at: %@</source> + <target>Şuradan gönderildi: %@</target> + <note>copied message info</note> + </trans-unit> + <trans-unit id="Sent file event" xml:space="preserve"> + <source>Sent file event</source> + <target>Dosya etkinliği gönderildi</target> + <note>notification</note> + </trans-unit> + <trans-unit id="Sent message" xml:space="preserve"> + <source>Sent message</source> + <target>Mesaj gönderildi</target> + <note>message info title</note> + </trans-unit> + <trans-unit id="Sent messages will be deleted after set time." xml:space="preserve"> + <source>Sent messages will be deleted after set time.</source> + <target>Gönderilen mesajlar ayarlanan süreden sonra silinecektir.</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="Server requires authorization to create queues, check password" xml:space="preserve"> + <source>Server requires authorization to create queues, check password</source> + <target>Sunucunun sıra oluşturması için yetki gereklidir, şifreyi kontrol edin</target> + <note>server test error</note> + </trans-unit> + <trans-unit id="Server requires authorization to upload, check password" xml:space="preserve"> + <source>Server requires authorization to upload, check password</source> + <target>Sunucunun yükleme yapması için yetki gereklidir, şifreyi kontrol edin</target> + <note>server test error</note> + </trans-unit> + <trans-unit id="Server test failed!" xml:space="preserve"> + <source>Server test failed!</source> + <target>Sunucu testinde hata oluştu!</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="Servers" xml:space="preserve"> + <source>Servers</source> + <target>Sunucular</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="Session code" xml:space="preserve"> + <source>Session code</source> + <target>Oturum kodu</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="Set 1 day" xml:space="preserve"> + <source>Set 1 day</source> + <target>1 günlüğüne ayarla</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="Set contact name…" xml:space="preserve"> + <source>Set contact name…</source> + <target>Kişi adı gir…</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="Set group preferences" xml:space="preserve"> + <source>Set group preferences</source> + <target>Grup tercihlerini ayarla</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="Set it instead of system authentication." xml:space="preserve"> + <source>Set it instead of system authentication.</source> + <target>Sistem kimlik doğrulaması yerine ayarla.</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="Set passcode" xml:space="preserve"> + <source>Set passcode</source> + <target>Şifre ayarla</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="Set passphrase to export" xml:space="preserve"> + <source>Set passphrase to export</source> + <target>Dışa aktarmak için parola ayarla</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="Set the message shown to new members!" xml:space="preserve"> + <source>Set the message shown to new members!</source> + <target>Yeni üyeler için gösterilen bir mesaj ayarla!</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="Set timeouts for proxy/VPN" xml:space="preserve"> + <source>Set timeouts for proxy/VPN</source> + <target>Vekil/VPN için zaman aşımları ayarla</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="Settings" xml:space="preserve"> + <source>Settings</source> + <target>Ayarlar</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="Share" xml:space="preserve"> + <source>Share</source> + <target>Paylaş</target> + <note>chat item action</note> + </trans-unit> + <trans-unit id="Share 1-time link" xml:space="preserve"> + <source>Share 1-time link</source> + <target>Tek kullanımlık bağlantıyı paylaş</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="Share address" xml:space="preserve"> + <source>Share address</source> + <target>Adresi paylaş</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="Share address with contacts?" xml:space="preserve"> + <source>Share address with contacts?</source> + <target>Kişilerle adres paylaşılsın mı?</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="Share link" xml:space="preserve"> + <source>Share link</source> + <target>Bağlantıyı paylaş</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="Share this 1-time invite link" xml:space="preserve"> + <source>Share this 1-time invite link</source> + <target>Bu tek kullanımlık bağlantı davetini paylaş</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="Share with contacts" xml:space="preserve"> + <source>Share with contacts</source> + <target>Kişilerle paylaş</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="Show calls in phone history" xml:space="preserve"> + <source>Show calls in phone history</source> + <target>Telefon geçmişinde aramaları göster</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="Show developer options" xml:space="preserve"> + <source>Show developer options</source> + <target>Geliştirici ayarlarını göster</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="Show last messages" xml:space="preserve"> + <source>Show last messages</source> + <target>Son mesajları göster</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="Show preview" xml:space="preserve"> + <source>Show preview</source> + <target>Ön gösterimi göser</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="Show:" xml:space="preserve"> + <source>Show:</source> + <target>Göster:</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="SimpleX Address" xml:space="preserve"> + <source>SimpleX Address</source> + <target>SimpleX Adresi</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="SimpleX Chat security was audited by Trail of Bits." xml:space="preserve"> + <source>SimpleX Chat security was audited by Trail of Bits.</source> + <target>SimpleX Chat güvenliği Trails of Bits tarafından denetlenmiştir.</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="SimpleX Lock" xml:space="preserve"> + <source>SimpleX Lock</source> + <target>SimpleX Kilidi</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="SimpleX Lock mode" xml:space="preserve"> + <source>SimpleX Lock mode</source> + <target>SimpleX Kilidi modu</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="SimpleX Lock not enabled!" xml:space="preserve"> + <source>SimpleX Lock not enabled!</source> + <target>SimpleX Kilidi etkinleştirilmedi!</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="SimpleX Lock turned on" xml:space="preserve"> + <source>SimpleX Lock turned on</source> + <target>SimpleX Kilidi açıldı</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="SimpleX address" xml:space="preserve"> + <source>SimpleX address</source> + <target>SimpleX adresi</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="SimpleX contact address" xml:space="preserve"> + <source>SimpleX contact address</source> + <target>SimpleX kişi adresi</target> + <note>simplex link type</note> + </trans-unit> + <trans-unit id="SimpleX encrypted message or connection event" xml:space="preserve"> + <source>SimpleX encrypted message or connection event</source> + <target>SimpleX şifrelenmiş mesaj veya bağlantı etkinliği</target> + <note>notification</note> + </trans-unit> + <trans-unit id="SimpleX group link" xml:space="preserve"> + <source>SimpleX group link</source> + <target>SimpleX grup bağlantısı</target> + <note>simplex link type</note> + </trans-unit> + <trans-unit id="SimpleX links" xml:space="preserve"> + <source>SimpleX links</source> + <target>SimpleX bağlantıları</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="SimpleX one-time invitation" xml:space="preserve"> + <source>SimpleX one-time invitation</source> + <target>SimpleX tek kullanımlık davet</target> + <note>simplex link type</note> + </trans-unit> + <trans-unit id="Simplified incognito mode" xml:space="preserve"> + <source>Simplified incognito mode</source> + <target>Basitleştirilmiş gizli mod</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="Skip" xml:space="preserve"> + <source>Skip</source> + <target>Atla</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="Skipped messages" xml:space="preserve"> + <source>Skipped messages</source> + <target>Atlanmış mesajlar</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="Small groups (max 20)" xml:space="preserve"> + <source>Small groups (max 20)</source> + <target>Küçük gruplar (en fazla 20 kişi)</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="Some non-fatal errors occurred during import - you may see Chat console for more details." xml:space="preserve"> + <source>Some non-fatal errors occurred during import - you may see Chat console for more details.</source> + <target>İçe aktarma sırasında bazı ölümcül olmayan hatalar oluştu - daha fazla ayrıntı için Sohbet konsoluna bakabilirsiniz.</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="Somebody" xml:space="preserve"> + <source>Somebody</source> + <target>Biri</target> + <note>notification title</note> + </trans-unit> + <trans-unit id="Start chat" xml:space="preserve"> + <source>Start chat</source> + <target>Sohbeti başlat</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="Start chat?" xml:space="preserve"> + <source>Start chat?</source> + <target>Sohbet başlatılsın mı?</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="Start migration" xml:space="preserve"> + <source>Start migration</source> + <target>Geçişi başlat</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="Stop" xml:space="preserve"> + <source>Stop</source> + <target>Dur</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="Stop SimpleX" xml:space="preserve"> + <source>Stop SimpleX</source> + <target>SimpleX'i durdur</target> + <note>authentication reason</note> + </trans-unit> + <trans-unit id="Stop chat to enable database actions" xml:space="preserve"> + <source>Stop chat to enable database actions</source> + <target>Veritabanı eylemlerini etkinleştirmek için sohbeti durdur</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>Sohbet veritabanını dışa aktarmak, içe aktarmak veya silmek için sohbeti durdurun. Sohbet durdurulduğunda mesaj alamaz ve gönderemezsiniz.</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="Stop chat?" xml:space="preserve"> + <source>Stop chat?</source> + <target>Sohbet durdurulsun mu?</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="Stop file" xml:space="preserve"> + <source>Stop file</source> + <target>Dosyayı durdur</target> + <note>cancel file action</note> + </trans-unit> + <trans-unit id="Stop receiving file?" xml:space="preserve"> + <source>Stop receiving file?</source> + <target>Dosya alımı durdurulsun mu?</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>Dosya gönderimi durdurulsun mu?</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="Stop sharing" xml:space="preserve"> + <source>Stop sharing</source> + <target>Paylaşmayı durdur</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>Adresi paylaşmak durdurulsun mu?</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="Submit" xml:space="preserve"> + <source>Submit</source> + <target>Gönder</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="Support SimpleX Chat" xml:space="preserve"> + <source>Support SimpleX Chat</source> + <target>SimpleX Chat'e destek ol</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="System" xml:space="preserve"> + <source>System</source> + <target>Sistem</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="System authentication" xml:space="preserve"> + <source>System authentication</source> + <target>Sistem yetkilendirilmesi</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="TCP connection timeout" xml:space="preserve"> + <source>TCP connection timeout</source> + <target>TCP bağlantı zaman aşımı</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="TCP_KEEPCNT" xml:space="preserve"> + <source>TCP_KEEPCNT</source> + <target>TCP_CNTYİTUT</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="TCP_KEEPIDLE" xml:space="preserve"> + <source>TCP_KEEPIDLE</source> + <target>TCP_BOŞTAKAL</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="TCP_KEEPINTVL" xml:space="preserve"> + <source>TCP_KEEPINTVL</source> + <target>TCP_TVLDEKAL</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="Take picture" xml:space="preserve"> + <source>Take picture</source> + <target>Fotoğraf çek</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="Tap button " xml:space="preserve"> + <source>Tap button </source> + <target>Tuşa bas </target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="Tap to Connect" xml:space="preserve"> + <source>Tap to Connect</source> + <target>Bağlanmak için Tıkla</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="Tap to activate profile." xml:space="preserve"> + <source>Tap to activate profile.</source> + <target>Profili etkinleştirmek için tıkla.</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="Tap to join" xml:space="preserve"> + <source>Tap to join</source> + <target>Katılmak için tıkla</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="Tap to join incognito" xml:space="preserve"> + <source>Tap to join incognito</source> + <target>Gizli katılmak için tıkla</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="Tap to paste link" xml:space="preserve"> + <source>Tap to paste link</source> + <target>Bağlantıyı yapıştırmak için tıkla</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="Tap to scan" xml:space="preserve"> + <source>Tap to scan</source> + <target>Taramak için tıkla</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="Tap to start a new chat" xml:space="preserve"> + <source>Tap to start a new chat</source> + <target>Yeni bir sohbet başlatmak için tıkla</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="Test failed at step %@." xml:space="preserve"> + <source>Test failed at step %@.</source> + <target>Test %@ adımında başarısız oldu.</target> + <note>server test failure</note> + </trans-unit> + <trans-unit id="Test server" xml:space="preserve"> + <source>Test server</source> + <target>Sunucuyu test et</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="Test servers" xml:space="preserve"> + <source>Test servers</source> + <target>Sunucuları test et</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="Tests failed!" xml:space="preserve"> + <source>Tests failed!</source> + <target>Testler başarısız oldu!</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="Thank you for installing SimpleX Chat!" xml:space="preserve"> + <source>Thank you for installing SimpleX Chat!</source> + <target>SimpleX Chat'i indirdiğin için teşekkürler!</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="Thanks to the users – [contribute via Weblate](https://github.com/simplex-chat/simplex-chat/tree/stable#help-translating-simplex-chat)!" xml:space="preserve"> + <source>Thanks to the users – [contribute via Weblate](https://github.com/simplex-chat/simplex-chat/tree/stable#help-translating-simplex-chat)!</source> + <target>Kullanıcılar için teşekkürler - [Weblate aracılığıyla katkıda bulun](https://github.com/simplex-chat/simplex-chat/tree/stable#help-translating-simplex-chat)!</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="Thanks to the users – contribute via Weblate!" xml:space="preserve"> + <source>Thanks to the users – contribute via Weblate!</source> + <target>Kullanıcılar için teşekkürler - Weblate aracılığıyla katkıda bulun!</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="The 1st platform without any user identifiers – private by design." xml:space="preserve"> + <source>The 1st platform without any user identifiers – private by design.</source> + <target>Herhangi bir kullanıcı tanımlayıcısı olmayan ilk platform - tasarım gereği gizli.</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="The ID of the next message is incorrect (less or equal to the previous). It can happen because of some bug or when the connection is compromised." xml:space="preserve"> + <source>The ID of the next message is incorrect (less or equal to the previous). +It can happen because of some bug or when the connection is compromised.</source> + <target>Bir sonraki mesajın kimliği yanlış (bir öncekinden az veya aynı). +Bazı hatalar nedeniyle veya bağlantı tehlikeye girdiğinde meydana gelebilir.</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="The app can notify you when you receive messages or contact requests - please open settings to enable." xml:space="preserve"> + <source>The app can notify you when you receive messages or contact requests - please open settings to enable.</source> + <target>Uygulama, mesaj veya iletişim isteği aldığınızda sizi bilgilendirebilir - etkinleştirmek için lütfen ayarları açın.</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="The attempt to change database passphrase was not completed." xml:space="preserve"> + <source>The attempt to change database passphrase was not completed.</source> + <target>Veritabanı parolasını değiştirme girişimi tamamlanmadı.</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="The code you scanned is not a SimpleX link QR code." xml:space="preserve"> + <source>The code you scanned is not a SimpleX link QR code.</source> + <target>Taradığınız kod bir SimpleX bağlantı QR kodu değildir.</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="The connection you accepted will be cancelled!" xml:space="preserve"> + <source>The connection you accepted will be cancelled!</source> + <target>Bağlantı kabulünüz iptal edilecektir!</target> + <note>No comment provided by engineer.</note> + </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>Bu bağlantıyı paylaştığınız kişi BAĞLANAMAYACAKTIR!</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"> + <source>The created archive is available via app Settings / Database / Old database archive.</source> + <target>Oluşturulan arşive uygulama üzerinden Ayarlar / Veritabanı / Eski veritabanı arşivi üzerinden erişilebilir.</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="The encryption is working and the new encryption agreement is not required. It may result in connection errors!" xml:space="preserve"> + <source>The encryption is working and the new encryption agreement is not required. It may result in connection errors!</source> + <target>Şifreleme çalışıyor ve yeni şifreleme anlaşması gerekli değil. Bağlantı hatalarına neden olabilir!</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="The hash of the previous message is different." xml:space="preserve"> + <source>The hash of the previous message is different.</source> + <target>Önceki mesajın hash'i farklı.</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="The message will be deleted for all members." xml:space="preserve"> + <source>The message will be deleted for all members.</source> + <target>Mesaj tüm üyeler için silinecektir.</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="The message will be marked as moderated for all members." xml:space="preserve"> + <source>The message will be marked as moderated for all members.</source> + <target>Mesaj tüm üyeler için yönetilmiş olarak işaretlenecektir.</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="The next generation of private messaging" xml:space="preserve"> + <source>The next generation of private messaging</source> + <target>Gizli mesajlaşmanın yeni nesli</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="The old database was not removed during the migration, it can be deleted." xml:space="preserve"> + <source>The old database was not removed during the migration, it can be deleted.</source> + <target>Eski veritabanı geçiş sırasında kaldırılmadı, silinebilir.</target> + <note>No comment provided by engineer.</note> + </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>Profil sadece kişilerinle paylaşılacak.</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="The second tick we missed! ✅" xml:space="preserve"> + <source>The second tick we missed! ✅</source> + <target>Özlediğimiz ikinci tik! ✅</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="The sender will NOT be notified" xml:space="preserve"> + <source>The sender will NOT be notified</source> + <target>Gönderene BİLDİRİLMEYECEKTİR</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="The servers for new connections of your current chat profile **%@**." xml:space="preserve"> + <source>The servers for new connections of your current chat profile **%@**.</source> + <target>Mevcut sohbet profilinizin yeni bağlantıları için sunucular **%@**.</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="The text you pasted is not a SimpleX link." xml:space="preserve"> + <source>The text you pasted is not a SimpleX link.</source> + <target>Yapıştırdığın metin bir SimpleX bağlantısı değildir.</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="Theme" xml:space="preserve"> + <source>Theme</source> + <target>Tema</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="There should be at least one user profile." xml:space="preserve"> + <source>There should be at least one user profile.</source> + <target>En az bir kullanıcı profili olmalıdır.</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="There should be at least one visible user profile." xml:space="preserve"> + <source>There should be at least one visible user profile.</source> + <target>En az bir görünür kullanıcı profili olmalıdır.</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="These settings are for your current profile **%@**." xml:space="preserve"> + <source>These settings are for your current profile **%@**.</source> + <target>Bu ayarlar mevcut profiliniz **%@** içindir.</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="They can be overridden in contact and group settings." xml:space="preserve"> + <source>They can be overridden in contact and group settings.</source> + <target>Bunlar kişi ve grup ayarlarında geçersiz kılınabilir.</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="This action cannot be undone - all received and sent files and media will be deleted. Low resolution pictures will remain." xml:space="preserve"> + <source>This action cannot be undone - all received and sent files and media will be deleted. Low resolution pictures will remain.</source> + <target>Bu işlem geri alınamaz - alınan ve gönderilen tüm dosyalar ve medya silinecektir. Düşük çözünürlüklü resimler kalacaktır.</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="This action cannot be undone - the messages sent and received earlier than selected will be deleted. It may take several minutes." xml:space="preserve"> + <source>This action cannot be undone - the messages sent and received earlier than selected will be deleted. It may take several minutes.</source> + <target>Bu işlem geri alınamaz - seçilenden daha önce gönderilen ve alınan mesajlar silinecektir. Bu işlem birkaç dakika sürebilir.</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="This action cannot be undone - your profile, contacts, messages and files will be irreversibly lost." xml:space="preserve"> + <source>This action cannot be undone - your profile, contacts, messages and files will be irreversibly lost.</source> + <target>Bu işlem geri alınamaz - profiliniz, kişileriniz, mesajlarınız ve dosyalarınız geri döndürülemez şekilde kaybolacaktır.</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="This device name" xml:space="preserve"> + <source>This device name</source> + <target>Bu cihazın ismi</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="This display name is invalid. Please choose another name." xml:space="preserve"> + <source>This display name is invalid. Please choose another name.</source> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="This group has over %lld members, delivery receipts are not sent." xml:space="preserve"> + <source>This group has over %lld members, delivery receipts are not sent.</source> + <target>Bu grubun %lld den fazla üyesi var,görüldü bilgisi gönderilmedi.</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="This group no longer exists." xml:space="preserve"> + <source>This group no longer exists.</source> + <target>Bu grup artık mevcut değildir.</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="This is your own SimpleX address!" xml:space="preserve"> + <source>This is your own SimpleX address!</source> + <target>Bu senin kendi SimpleX adresin!</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="This is your own one-time link!" xml:space="preserve"> + <source>This is your own one-time link!</source> + <target>Bu senin kendi tek kullanımlık bağlantın!</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="This setting applies to messages in your current chat profile **%@**." xml:space="preserve"> + <source>This setting applies to messages in your current chat profile **%@**.</source> + <target>Bu ayar, geçerli sohbet profiliniz **%@** deki mesajlara uygulanır.</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="To ask any questions and to receive updates:" xml:space="preserve"> + <source>To ask any questions and to receive updates:</source> + <target>Soru sormak ve güncellemeleri almak için:</target> + <note>No comment provided by engineer.</note> + </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>Bağlanmak için, kişi QR kodu okutabilir veya uygulama içinden bağlantıyı kullanabilir.</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="To hide unwanted messages." xml:space="preserve"> + <source>To hide unwanted messages.</source> + <target>İstenmeyen mesajları gizlemek için.</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="To make a new connection" xml:space="preserve"> + <source>To make a new connection</source> + <target>Yeni bir bağlantı oluşturmak için</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="To protect privacy, instead of user IDs used by all other platforms, SimpleX has identifiers for message queues, separate for each of your contacts." xml:space="preserve"> + <source>To protect privacy, instead of user IDs used by all other platforms, SimpleX has identifiers for message queues, separate for each of your contacts.</source> + <target>Gizliliği korumak için, diğer tüm platformlar gibi kullanıcı kimliği kullanmak yerine, SimpleX mesaj kuyrukları için kişilerinizin her biri için ayrı tanımlayıcılara sahiptir.</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="To protect timezone, image/voice files use UTC." xml:space="preserve"> + <source>To protect timezone, image/voice files use UTC.</source> + <target>Zaman bölgesini korumak için,fotoğraf/ses dosyaları UTC kullanır.</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="To protect your information, turn on SimpleX Lock. You will be prompted to complete authentication before this feature is enabled." xml:space="preserve"> + <source>To protect your information, turn on SimpleX Lock. +You will be prompted to complete authentication before this feature is enabled.</source> + <target>Bilgilerinizi korumak için SimpleX Lock özelliğini açın. +Bu özellik etkinleştirilmeden önce kimlik doğrulamayı tamamlamanız istenecektir.</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="To record voice message please grant permission to use Microphone." xml:space="preserve"> + <source>To record voice message please grant permission to use Microphone.</source> + <target>Sesli mesaj kaydetmek için lütfen Mikrofon kullanım izni verin.</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="To reveal your hidden profile, enter a full password into a search field in **Your chat profiles** page." xml:space="preserve"> + <source>To reveal your hidden profile, enter a full password into a search field in **Your chat profiles** page.</source> + <target>Gizli profilinizi ortaya çıkarmak için **Sohbet profilleriniz** sayfasındaki arama alanına tam bir şifre girin.</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="To support instant push notifications the chat database has to be migrated." xml:space="preserve"> + <source>To support instant push notifications the chat database has to be migrated.</source> + <target>Anlık anlık bildirimleri desteklemek için sohbet veritabanının taşınması gerekir.</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="To verify end-to-end encryption with your contact compare (or scan) the code on your devices." xml:space="preserve"> + <source>To verify end-to-end encryption with your contact compare (or scan) the code on your devices.</source> + <target>Kişinizle uçtan uca şifrelemeyi doğrulamak için cihazlarınızdaki kodu karşılaştırın (veya tarayın).</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="Toggle incognito when connecting." xml:space="preserve"> + <source>Toggle incognito when connecting.</source> + <target>Bağlanırken gizli moda geçiş yap.</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="Transport isolation" xml:space="preserve"> + <source>Transport isolation</source> + <target>Taşıma izolasyonu</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 (error: %@)." xml:space="preserve"> + <source>Trying to connect to the server used to receive messages from this contact (error: %@).</source> + <target>Bu kişiden mesaj almak için kullanılan sunucuya bağlanılmaya çalışılıyor (hata: %@).</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>Bu kişiden mesaj almak için kullanılan sunucuya bağlanılmaya çalışılıyor.</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="Turkish interface" xml:space="preserve"> + <source>Turkish interface</source> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="Turn off" xml:space="preserve"> + <source>Turn off</source> + <target>Kapat</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="Turn on" xml:space="preserve"> + <source>Turn on</source> + <target>Aç</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="Unable to record voice message" xml:space="preserve"> + <source>Unable to record voice message</source> + <target>Sesli mesaj kaydedilemedi</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="Unblock" xml:space="preserve"> + <source>Unblock</source> + <target>Engeli kaldır</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="Unblock member" xml:space="preserve"> + <source>Unblock member</source> + <target>Üyenin engelini kaldır</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="Unblock member?" xml:space="preserve"> + <source>Unblock member?</source> + <target>Üyenin engeli kaldırılsın mı?</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="Unexpected error: %@" xml:space="preserve"> + <source>Unexpected error: %@</source> + <target>Beklenmeyen hata: %@</target> + <note>item status description</note> + </trans-unit> + <trans-unit id="Unexpected migration state" xml:space="preserve"> + <source>Unexpected migration state</source> + <target>Beklenmeyen geçiş durumu</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="Unfav." xml:space="preserve"> + <source>Unfav.</source> + <target>Favorilerden çık.</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="Unhide" xml:space="preserve"> + <source>Unhide</source> + <target>Gizlemeyi kaldır</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="Unhide chat profile" xml:space="preserve"> + <source>Unhide chat profile</source> + <target>Sohbet profilinin gizlemesini kaldır</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="Unhide profile" xml:space="preserve"> + <source>Unhide profile</source> + <target>Proflin gizlenmesini kaldır</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="Unit" xml:space="preserve"> + <source>Unit</source> + <target>Birim</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="Unknown caller" xml:space="preserve"> + <source>Unknown caller</source> + <target>Bilinmeyen arayan</target> + <note>callkit banner</note> + </trans-unit> + <trans-unit id="Unknown database error: %@" xml:space="preserve"> + <source>Unknown database error: %@</source> + <target>Bilinmeyen veritabanı hatası: %@</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="Unknown error" xml:space="preserve"> + <source>Unknown error</source> + <target>Bilinmeyen hata</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="Unless you use iOS call interface, enable Do Not Disturb mode to avoid interruptions." xml:space="preserve"> + <source>Unless you use iOS call interface, enable Do Not Disturb mode to avoid interruptions.</source> + <target>iOS arama arayüzünü kullanmadığınız sürece, kesintileri önlemek için Rahatsız Etmeyin modunu etkinleştirin.</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <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>Kişiniz bağlantıyı silmediyse veya bu bağlantı kullanılmadıysa, bu bir hata olabilir - lütfen bildirin. +Bağlanmak için lütfen kişinizden başka bir bağlantı oluşturmasını isteyin ve sabit bir ağ bağlantınız olduğunu kontrol edin.</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="Unlink" xml:space="preserve"> <source>Unlink</source> - <target state="translated">Bağlantıyı Kaldır</target> + <target>Bağlantıyı Kaldır</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Use from desktop" xml:space="preserve" approved="no"> + <trans-unit id="Unlink desktop?" xml:space="preserve"> + <source>Unlink desktop?</source> + <target>Bilgisayarla bağlantı kaldırılsın mı?</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="Unlock" xml:space="preserve"> + <source>Unlock</source> + <target>Kilidi aç</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="Unlock app" xml:space="preserve"> + <source>Unlock app</source> + <target>Uygulama kilidini aç</target> + <note>authentication reason</note> + </trans-unit> + <trans-unit id="Unmute" xml:space="preserve"> + <source>Unmute</source> + <target>Susturmayı kaldır</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="Unread" xml:space="preserve"> + <source>Unread</source> + <target>Okunmamış</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="Up to 100 last messages are sent to new members." xml:space="preserve"> + <source>Up to 100 last messages are sent to new members.</source> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="Update" xml:space="preserve"> + <source>Update</source> + <target>Güncelle</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="Update .onion hosts setting?" xml:space="preserve"> + <source>Update .onion hosts setting?</source> + <target>.onion ana bilgisayarların ayarı güncellensin mi?</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="Update database passphrase" xml:space="preserve"> + <source>Update database passphrase</source> + <target>Veritabanı parolasını güncelle</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="Update network settings?" xml:space="preserve"> + <source>Update network settings?</source> + <target>Bağlantı ayarları güncellensin mi?</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="Update transport isolation mode?" xml:space="preserve"> + <source>Update transport isolation mode?</source> + <target>Taşıma izolasyon modu güncellensin mi?</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="Updating settings will re-connect the client to all servers." xml:space="preserve"> + <source>Updating settings will re-connect the client to all servers.</source> + <target>Ayarların güncellenmesi, istemciyi tüm sunuculara yeniden bağlayacaktır.</target> + <note>No comment provided by engineer.</note> + </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>Bu ayarın güncellenmesi, istemciyi tüm sunuculara yeniden bağlayacaktır.</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="Upgrade and open chat" xml:space="preserve"> + <source>Upgrade and open chat</source> + <target>Yükselt ve sohbeti aç</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="Upload file" xml:space="preserve"> + <source>Upload file</source> + <target>Dosya yükle</target> + <note>server test step</note> + </trans-unit> + <trans-unit id="Use .onion hosts" xml:space="preserve"> + <source>Use .onion hosts</source> + <target>.onion ana bilgisayarlarını kullan</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="Use SimpleX Chat servers?" xml:space="preserve"> + <source>Use SimpleX Chat servers?</source> + <target>SimpleX Chat sunucuları kullanılsın mı?</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="Use chat" xml:space="preserve"> + <source>Use chat</source> + <target>Sohbeti kullan</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="Use current profile" xml:space="preserve"> + <source>Use current profile</source> + <target>Şu anki profili kullan</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="Use for new connections" xml:space="preserve"> + <source>Use for new connections</source> + <target>Yeni bağlantılar için kullan</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="Use from desktop" xml:space="preserve"> <source>Use from desktop</source> - <target state="translated">Bilgisayardan kullan</target> + <target>Bilgisayardan kullan</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" approved="no"> + <trans-unit id="Use iOS call interface" xml:space="preserve"> + <source>Use iOS call interface</source> + <target>iOS arama arayüzünden kullan</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="Use new incognito profile" xml:space="preserve"> + <source>Use new incognito profile</source> + <target>Yeni gizli profilden kullan</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="Use only local notifications?" xml:space="preserve"> + <source>Use only local notifications?</source> + <target>Sadece yerel bildirimler kullanılsın mı?</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="Use server" xml:space="preserve"> + <source>Use server</source> + <target>Sunucu kullan</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="User profile" xml:space="preserve"> + <source>User profile</source> + <target>Kullanıcı profili</target> + <note>No comment provided by engineer.</note> + </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>.onion ana bilgisayarlarını kullanmak için uyumlu VPN sağlayıcısı gerekir.</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="Using SimpleX Chat servers." xml:space="preserve"> + <source>Using SimpleX Chat servers.</source> + <target>SimpleX Chat sunucuları kullanılıyor.</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="Verify code with desktop" xml:space="preserve"> + <source>Verify code with desktop</source> + <target>Bilgisayarla kodu doğrula</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="Verify connection" xml:space="preserve"> + <source>Verify connection</source> + <target>Bağlantıyı doğrula</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="Verify connection security" xml:space="preserve"> + <source>Verify connection security</source> + <target>Bağlantı güvenliğini doğrula</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="Verify connections" xml:space="preserve"> + <source>Verify connections</source> + <target>Bağlantıları doğrula</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="Verify security code" xml:space="preserve"> + <source>Verify security code</source> + <target>Güvenlik kodunu doğrula</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="Via browser" xml:space="preserve"> + <source>Via browser</source> + <target>Tarayıcı üzerinden</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="Via secure quantum resistant protocol." xml:space="preserve"> + <source>Via secure quantum resistant protocol.</source> + <target>Güvenli kuantum dirençli protokol ile.</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="Video call" xml:space="preserve"> + <source>Video call</source> + <target>Görüntülü arama</target> + <note>No comment provided by engineer.</note> + </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>Kişiniz yüklemeyi tamamladığında video alınacaktır.</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>Kişiniz çevrimiçi olduğunda video alınacaktır, lütfen bekleyin veya daha sonra kontrol edin!</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="Videos and files up to 1gb" xml:space="preserve"> + <source>Videos and files up to 1gb</source> + <target>1gb'a kadar videolar ve dosyalar</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="View security code" xml:space="preserve"> + <source>View security code</source> + <target>Güvenlik kodunu görüntüle</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="Visible history" xml:space="preserve"> + <source>Visible history</source> + <note>chat feature</note> + </trans-unit> + <trans-unit id="Voice messages" xml:space="preserve"> + <source>Voice messages</source> + <target>Sesli mesajlar</target> + <note>chat feature</note> + </trans-unit> + <trans-unit id="Voice messages are prohibited in this chat." xml:space="preserve"> + <source>Voice messages are prohibited in this chat.</source> + <target>Bu sohbette sesli mesajlar yasaktır.</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="Voice messages are prohibited in this group." xml:space="preserve"> + <source>Voice messages are prohibited in this group.</source> + <target>Bu grupta sesli mesajlar yasaktır.</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="Voice messages prohibited!" xml:space="preserve"> + <source>Voice messages prohibited!</source> + <target>Sesli mesajlar yasaktır!</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="Voice message…" xml:space="preserve"> + <source>Voice message…</source> + <target>Sesli mesaj…</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="Waiting for desktop..." xml:space="preserve"> + <source>Waiting for desktop...</source> + <target>Bilgisayar için bekleniyor...</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="Waiting for file" xml:space="preserve"> + <source>Waiting for file</source> + <target>Dosya bekleniyor</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="Waiting for image" xml:space="preserve"> + <source>Waiting for image</source> + <target>Görsel bekleniyor</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="Waiting for video" xml:space="preserve"> + <source>Waiting for video</source> + <target>Video bekleniyor</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="Warning: you may lose some data!" xml:space="preserve"> + <source>Warning: you may lose some data!</source> + <target>Uyarı: Bazı verileri kaybedebilirsin!</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="WebRTC ICE servers" xml:space="preserve"> + <source>WebRTC ICE servers</source> + <target>WebRTC ICE sunucuları</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="Welcome %@!" xml:space="preserve"> + <source>Welcome %@!</source> + <target>Hoşgeldin %@!</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="Welcome message" xml:space="preserve"> + <source>Welcome message</source> + <target>Karşılama mesajı</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="What's new" xml:space="preserve"> + <source>What's new</source> + <target>Neler yeni</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="When available" xml:space="preserve"> + <source>When available</source> + <target>Mevcut olduğunda</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"> + <source>When people request to connect, you can accept or reject it.</source> + <target>İnsanlar bağlantı talebinde bulunduğunda, kabul edebilir veya reddedebilirsiniz.</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"> + <source>When you share an incognito profile with somebody, this profile will be used for the groups they invite you to.</source> + <target>Biriyle gizli bir profil paylaştığınızda, bu profil sizi davet ettikleri gruplar için kullanılacaktır.</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="With encrypted files and media." xml:space="preserve"> + <source>With encrypted files and media.</source> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="With optional welcome message." xml:space="preserve"> + <source>With optional welcome message.</source> + <target>İsteğe bağlı karşılama mesajı ile.</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="With reduced battery usage." xml:space="preserve"> + <source>With reduced battery usage.</source> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="Wrong database passphrase" xml:space="preserve"> + <source>Wrong database passphrase</source> + <target>Yanlış veritabanı parolası</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="Wrong passphrase!" xml:space="preserve"> + <source>Wrong passphrase!</source> + <target>Yanlış parola!</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="XFTP servers" xml:space="preserve"> + <source>XFTP servers</source> + <target>XFTP sunucuları</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="You" xml:space="preserve"> + <source>You</source> + <target>Sen</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="You accepted connection" xml:space="preserve"> + <source>You accepted connection</source> + <target>Bağlantıyı onayladın</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="You allow" xml:space="preserve"> + <source>You allow</source> + <target>İzin veriyorsunuz</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="You already have a chat profile with the same display name. Please choose another name." xml:space="preserve"> + <source>You already have a chat profile with the same display name. Please choose another name.</source> + <target>Aynı görünen ada sahip bir konuşma profilin zaten var. Lütfen başka bir ad seç.</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="You are already connected to %@." xml:space="preserve"> + <source>You are already connected to %@.</source> + <target>Zaten %@'a bağlısınız.</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="You are already connecting to %@." xml:space="preserve"> + <source>You are already connecting to %@.</source> + <target>Zaten %@'a bağlanıyorsunuz.</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>Bu tek seferlik bağlantı üzerinden zaten bağlanıyorsunuz!</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="You are already in group %@." xml:space="preserve"> + <source>You are already in group %@.</source> + <target>Zaten %@ grubundasın.</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="You are already joining the group %@." xml:space="preserve"> + <source>You are already joining the group %@.</source> + <target>Zaten %@ grubuna katılıyorsunuz.</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>Bu bağlantı üzerinden gruba zaten katılıyorsunuz!</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>Gruba zaten bu bağlantı üzerinden katılıyorsunuz.</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"> <source>You are already joining the group! Repeat join request?</source> - <target state="translated">Gruba zaten katılıyorsunuz! + <target>Gruba zaten katılıyorsunuz! Katılma isteği tekrarlansın mı?</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="The text you pasted is not a SimpleX link." xml:space="preserve" approved="no"> - <source>The text you pasted is not a SimpleX link.</source> - <target state="translated">Yapıştırdığın metin bir SimpleX bağlantısı değildir.</target> + <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>Bu kişiden mesaj almak için kullanılan sunucuya bağlısınız.</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Small groups (max 20)" xml:space="preserve" approved="no"> - <source>Small groups (max 20)</source> - <target state="translated">Küçük gruplar (en fazla 20 kişi)</target> + <trans-unit id="You are invited to group" xml:space="preserve"> + <source>You are invited to group</source> + <target>Gruba davet edildiniz</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Show last messages" xml:space="preserve" approved="no"> - <source>Show last messages</source> - <target state="translated">Son mesajları göster</target> + <trans-unit id="You can accept calls from lock screen, without device and app authentication." xml:space="preserve"> + <source>You can accept calls from lock screen, without device and app authentication.</source> + <target>Cihaz ve uygulama kimlik doğrulaması olmadan kilit ekranından çağrı kabul edebilirsiniz.</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Send direct message to connect" xml:space="preserve" approved="no"> - <source>Send direct message to connect</source> - <target state="translated">Bağlanmak için doğrudan mesaj gönder</target> + <trans-unit id="You can create it later" xml:space="preserve"> + <source>You can create it later</source> + <target>Daha sonra oluşturabilirsiniz</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="You have already requested connection via this address!" xml:space="preserve" approved="no"> - <source>You have already requested connection via this address!</source> - <target state="translated">Bu adres üzerinden zaten bağlantı talebinde bulundunuz!</target> + <trans-unit id="You can enable later via Settings" xml:space="preserve"> + <source>You can enable later via Settings</source> + <target>Daha sonra Ayarlardan etkinleştirebilirsin</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="You can make it visible to your SimpleX contacts via Settings." xml:space="preserve" approved="no"> + <trans-unit id="You can enable them later via app Privacy & Security settings." xml:space="preserve"> + <source>You can enable them later via app Privacy & Security settings.</source> + <target>Daha sonra uygulamanın Gizlilik ve Güvenlik ayarlarından etkinleştirebilirsiniz.</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="You can hide or mute a user profile - swipe it to the right." xml:space="preserve"> + <source>You can hide or mute a user profile - swipe it to the right.</source> + <target>Bir kullanıcı profilini gizleyebilir veya sessize alabilirsiniz - sağa kaydırın.</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="You can make it visible to your SimpleX contacts via Settings." xml:space="preserve"> <source>You can make it visible to your SimpleX contacts via Settings.</source> - <target state="translated">Ayarlardan SimpleX kişilerinize görünür yapabilirsiniz.</target> + <target>Ayarlardan SimpleX kişilerinize görünür yapabilirsiniz.</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="You have already requested connection! Repeat connection request?" xml:space="preserve" approved="no"> + <trans-unit id="You can now send messages to %@" xml:space="preserve"> + <source>You can now send messages to %@</source> + <target>Artık %@ adresine mesaj gönderebilirsin</target> + <note>notification body</note> + </trans-unit> + <trans-unit id="You can set lock screen notification preview via settings." xml:space="preserve"> + <source>You can set lock screen notification preview via settings.</source> + <target>Kilit ekranı bildirim önizlemesini ayarlar üzerinden ayarlayabilirsiniz.</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="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." xml:space="preserve"> + <source>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.</source> + <target>Bir bağlantı veya QR kodu paylaşabilirsiniz - bu durumda herkes gruba katılabilir. Daha sonra silseniz bile grubun üyelerini kaybetmezsiniz.</target> + <note>No comment provided by engineer.</note> + </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>Bu adresi kişilerinizle paylaşarak onların **%@** ile bağlantı kurmasını sağlayabilirsiniz.</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>Adresinizi bir bağlantı veya QR kodu olarak paylaşabilirsiniz - herkes size bağlanabilir.</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"> + <source>You can start chat via app Settings / Database or by restarting the app</source> + <target>Sohbeti uygulamada Ayarlar / Veritabanı üzerinden veya uygulamayı yeniden başlatarak başlatabilirsiniz</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="You can turn on SimpleX Lock via Settings." xml:space="preserve"> + <source>You can turn on SimpleX Lock via Settings.</source> + <target>SimpleX Kilidini Ayarlar üzerinden açabilirsiniz.</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="You can use markdown to format messages:" xml:space="preserve"> + <source>You can use markdown to format messages:</source> + <target>Mesajları biçimlendirmek için markdown kullanabilirsiniz:</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="You can view invitation link again in connection details." xml:space="preserve"> + <source>You can view invitation link again in connection details.</source> + <target>Bağlantı detaylarından davet bağlantısını yeniden görüntüleyebilirsin.</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="You can't send messages!" xml:space="preserve"> + <source>You can't send messages!</source> + <target>Mesajlar gönderemezsiniz!</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="You control through which server(s) **to receive** the messages, your contacts – the servers you use to message them." xml:space="preserve"> + <source>You control through which server(s) **to receive** the messages, your contacts – the servers you use to message them.</source> + <target>Mesajların hangi sunucu(lar)dan **alınacağını**, kişilerinizi - onlara mesaj göndermek için kullandığınız sunucuları - siz kontrol edersiniz.</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="You could not be verified; please try again." xml:space="preserve"> + <source>You could not be verified; please try again.</source> + <target>Doğrulanamadınız; lütfen tekrar deneyin.</target> + <note>No comment provided by engineer.</note> + </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>Bu adres üzerinden zaten bağlantı talebinde bulundunuz!</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 state="translated">Zaten bağlantı isteğinde bulundunuz! + <target>Zaten bağlantı isteğinde bulundunuz! Bağlantı isteği tekrarlansın mı?</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="You can view invitation link again in connection details." xml:space="preserve" approved="no"> - <source>You can view invitation link again in connection details.</source> - <target state="translated">Bağlantı detaylarından davet bağlantısını yeniden görüntüleyebilirsin.</target> + <trans-unit id="You have no chats" xml:space="preserve"> + <source>You have no chats</source> + <target>Hiç sohbetiniz yok</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="You will connect to all group members." xml:space="preserve" approved="no"> - <source>You will connect to all group members.</source> - <target state="translated">Bütün grup üyelerine bağlanacaksın.</target> + <trans-unit id="You have to enter passphrase every time the app starts - it is not stored on the device." xml:space="preserve"> + <source>You have to enter passphrase every time the app starts - it is not stored on the device.</source> + <target>Uygulama her başladığında parola girmeniz gerekir - parola cihazınızda saklanmaz.</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="disabled" xml:space="preserve" approved="no"> - <source>disabled</source> - <target state="translated">devre dışı</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" approved="no"> - <source>You will be connected when group link host's device is online, please wait or check later!</source> - <target state="translated">Grup sahibinin cihazı çevrimiçi olduğunda gruba bağlanacaksınız, lütfen bekleyin veya daha sonra kontrol edin!</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="connected directly" xml:space="preserve" approved="no"> - <source>connected directly</source> - <target state="translated">doğrudan bağlandı</target> - <note>rcv group event chat item</note> - </trans-unit> - <trans-unit id="Your profile **%@** will be shared." xml:space="preserve" approved="no"> - <source>Your profile **%@** will be shared.</source> - <target state="translated">Profiliniz **%@** paylaşılacaktır.</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="send direct message" xml:space="preserve" approved="no"> - <source>send direct message</source> - <target state="translated">doğrudan mesaj gönder</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="event happened" xml:space="preserve" approved="no"> - <source>event happened</source> - <target state="translated">etkinliği yaşandı</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="and %lld other events" xml:space="preserve" approved="no"> - <source>and %lld other events</source> - <target state="translated">ve %lld diğer etkinlikler</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="deleted contact" xml:space="preserve" approved="no"> - <source>deleted contact</source> - <target state="translated">silinmiş kişi</target> - <note>rcv direct event chat item</note> - </trans-unit> - <trans-unit id="v%@" xml:space="preserve" approved="no"> - <source>v%@</source> - <target state="translated">v%@</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="You invited a contact" xml:space="preserve" approved="no"> + <trans-unit id="You invited a contact" xml:space="preserve"> <source>You invited a contact</source> - <target state="translated">Bir kişiyi davet ettin</target> + <target>Bir kişiyi davet ettin</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Your profile" xml:space="preserve" approved="no"> + <trans-unit id="You joined this group" xml:space="preserve"> + <source>You joined this group</source> + <target>Bu gruba katıldınız</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="You joined this group. Connecting to inviting group member." xml:space="preserve"> + <source>You joined this group. Connecting to inviting group member.</source> + <target>Bu gruba katıldınız. Davet eden grup üyesine bağlanılıyor.</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="You must use the most recent version of your chat database on one device ONLY, otherwise you may stop receiving the messages from some contacts." xml:space="preserve"> + <source>You must use the most recent version of your chat database on one device ONLY, otherwise you may stop receiving the messages from some contacts.</source> + <target>Sohbet veritabanınızın en son sürümünü SADECE bir cihazda kullanmalısınız, aksi takdirde bazı kişilerden daha fazla mesaj alamayabilirsiniz.</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="You need to allow your contact to send voice messages to be able to send them." xml:space="preserve"> + <source>You need to allow your contact to send voice messages to be able to send them.</source> + <target>Sesli mesaj gönderebilmeniz için kişinizin de sesli mesaj göndermesine izin vermeniz gerekir.</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="You rejected group invitation" xml:space="preserve"> + <source>You rejected group invitation</source> + <target>Grup davetini reddettiniz.</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="You sent group invitation" xml:space="preserve"> + <source>You sent group invitation</source> + <target>Grup daveti gönderdiniz</target> + <note>No comment provided by engineer.</note> + </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>Grup sahibinin cihazı çevrimiçi olduğunda gruba bağlanacaksınız, lütfen bekleyin veya daha sonra kontrol edin!</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>Grup sahibinin cihazı çevrimiçi olduğunda gruba bağlanacaksınız, lütfen bekleyin veya daha sonra kontrol edin!</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>Bağlantı isteğiniz kabul edildiğinde bağlanacaksınız, lütfen bekleyin veya daha sonra kontrol edin!</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>Kişinizin cihazı çevrimiçi olduğunda bağlanacaksınız, lütfen bekleyin veya daha sonra kontrol edin!</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"> + <source>You will be required to authenticate when you start or resume the app after 30 seconds in background.</source> + <target>Arka planda 30 saniye kaldıktan sonra uygulamayı başlattığınızda veya devam ettirdiğinizde kimlik doğrulaması yapmanız gerekecektir.</target> + <note>No comment provided by engineer.</note> + </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>Bütün grup üyelerine bağlanacaksın.</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"> + <source>You will still receive calls and notifications from muted profiles when they are active.</source> + <target>Aktif olduklarında sessize alınmış profillerden arama ve bildirim almaya devam edersiniz.</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="You will stop receiving messages from this group. Chat history will be preserved." xml:space="preserve"> + <source>You will stop receiving messages from this group. Chat history will be preserved.</source> + <target>Bu gruptan artık mesaj almayacaksınız. Sohbet geçmişi korunacaktır.</target> + <note>No comment provided by engineer.</note> + </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>Eğer sonradan bağlantınızı silseniz bile kişilerinizi kaybetmeyeceksiniz.</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"> + <source>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</source> + <target>Gizli bir profil paylaştığınız kişiyi ana profilinizi kullandığınız gruba davet etmeye çalışıyorsunuz</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="You're using an incognito profile for this group - to prevent sharing your main profile inviting contacts is not allowed" xml:space="preserve"> + <source>You're using an incognito profile for this group - to prevent sharing your main profile inviting contacts is not allowed</source> + <target>Bu grup için gizli bir profil kullanıyorsunuz - ana profilinizi paylaşmayı önlemek için kişileri davet etmeye izin verilmiyor</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="Your %@ servers" xml:space="preserve"> + <source>Your %@ servers</source> + <target>%@ sunucularınız</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="Your ICE servers" xml:space="preserve"> + <source>Your ICE servers</source> + <target>ICE sunucularınız</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="Your SMP servers" xml:space="preserve"> + <source>Your SMP servers</source> + <target>SMP sunucularınız</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="Your SimpleX address" xml:space="preserve"> + <source>Your SimpleX address</source> + <target>SimpleX adresin</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="Your XFTP servers" xml:space="preserve"> + <source>Your XFTP servers</source> + <target>XFTP sunucularınız</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="Your calls" xml:space="preserve"> + <source>Your calls</source> + <target>Aramaların</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="Your chat database" xml:space="preserve"> + <source>Your chat database</source> + <target>Sohbet veritabanınız</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="Your chat database is not encrypted - set passphrase to encrypt it." xml:space="preserve"> + <source>Your chat database is not encrypted - set passphrase to encrypt it.</source> + <target>Sohbet veritabanınız şifrelenmemiş - şifrelemek için parola ayarlayın.</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="Your chat profiles" xml:space="preserve"> + <source>Your chat profiles</source> + <target>Sohbet profillerin</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="Your contact needs to be online for the connection to complete. You can cancel this connection and remove the contact (and try later with a new link)." xml:space="preserve"> + <source>Your contact needs to be online for the connection to complete. +You can cancel this connection and remove the contact (and try later with a new link).</source> + <target>Bağlantının tamamlanması için kişinizin çevrimiçi olması gerekir. +Bu bağlantıyı iptal edebilir ve kişiyi kaldırabilirsiniz (ve daha sonra yeni bir bağlantıyla deneyebilirsiniz).</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="Your contact sent a file that is larger than currently supported maximum size (%@)." xml:space="preserve"> + <source>Your contact sent a file that is larger than currently supported maximum size (%@).</source> + <target>Kişiniz şu anda desteklenen maksimum boyuttan (%@) daha büyük bir dosya gönderdi.</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="Your contacts can allow full message deletion." xml:space="preserve"> + <source>Your contacts can allow full message deletion.</source> + <target>Kişileriniz tam mesaj silme işlemine izin verebilir.</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="Your contacts will remain connected." xml:space="preserve"> + <source>Your contacts will remain connected.</source> + <target>Kişileriniz bağlı kalacaktır.</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"> + <source>Your current chat database will be DELETED and REPLACED with the imported one.</source> + <target>Mevcut sohbet veritabanınız SİLİNECEK ve içe aktarılan veritabanıyla DEĞİŞTİRİLECEKTİR.</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="Your current profile" xml:space="preserve"> + <source>Your current profile</source> + <target>Mevcut profiliniz</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="Your preferences" xml:space="preserve"> + <source>Your preferences</source> + <target>Tercihleriniz</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="Your privacy" xml:space="preserve"> + <source>Your privacy</source> + <target>Gizliliğiniz</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="Your profile" xml:space="preserve"> <source>Your profile</source> - <target state="translated">Profiliniz</target> + <target>Profiliniz</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="author" xml:space="preserve" approved="no"> - <source>author</source> - <target state="translated">yetkili</target> + <trans-unit id="Your profile **%@** will be shared." xml:space="preserve"> + <source>Your profile **%@** will be shared.</source> + <target>Profiliniz **%@** paylaşılacaktır.</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="Your profile is stored on your device and shared only with your contacts. SimpleX servers cannot see your profile." xml:space="preserve"> + <source>Your profile is stored on your device and shared only with your contacts. +SimpleX servers cannot see your profile.</source> + <target>Profiliniz cihazınızda saklanır ve sadece kişilerinizle paylaşılır. +SimpleX sunucuları profilinizi göremez.</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="Your profile, contacts and delivered messages are stored on your device." xml:space="preserve"> + <source>Your profile, contacts and delivered messages are stored on your device.</source> + <target>Profiliniz, kişileriniz ve gönderilmiş mesajlar cihazınızda saklanır.</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="Your random profile" xml:space="preserve"> + <source>Your random profile</source> + <target>Rasgele profiliniz</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="Your server" xml:space="preserve"> + <source>Your server</source> + <target>Sunucunuz</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="Your server address" xml:space="preserve"> + <source>Your server address</source> + <target>Sunucu adresiniz</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="Your settings" xml:space="preserve"> + <source>Your settings</source> + <target>Ayarlarınız</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="[Contribute](https://github.com/simplex-chat/simplex-chat#contribute)" xml:space="preserve"> + <source>[Contribute](https://github.com/simplex-chat/simplex-chat#contribute)</source> + <target>[Katkıda bulun](https://github.com/simplex-chat/simplex-chat#contribute)</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="[Send us email](mailto:chat@simplex.chat)" xml:space="preserve"> + <source>[Send us email](mailto:chat@simplex.chat)</source> + <target>[Bize e-posta gönder](mailto:chat@simplex.chat)</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="[Star on GitHub](https://github.com/simplex-chat/simplex-chat)" xml:space="preserve"> + <source>[Star on GitHub](https://github.com/simplex-chat/simplex-chat)</source> + <target>[Bize GitHub'da yıldız verin](https://github.com/simplex-chat/simplex-chat)</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="_italic_" xml:space="preserve"> + <source>\_italic_</source> + <target>\_italik_</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="`a + b`" xml:space="preserve"> + <source>\`a + b`</source> + <target>\`a + b`</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="above, then choose:" xml:space="preserve"> + <source>above, then choose:</source> + <target>yukarı çıkın, ardından seçin:</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="accepted call" xml:space="preserve"> + <source>accepted call</source> + <target>kabul edilen arama</target> + <note>call status</note> + </trans-unit> + <trans-unit id="admin" xml:space="preserve"> + <source>admin</source> + <target>yönetici</target> <note>member role</note> </trans-unit> - <trans-unit id="blocked" xml:space="preserve" approved="no"> + <trans-unit id="agreeing encryption for %@…" xml:space="preserve"> + <source>agreeing encryption for %@…</source> + <target>%@ için şifreleme kabul ediliyor…</target> + <note>chat item text</note> + </trans-unit> + <trans-unit id="agreeing encryption…" xml:space="preserve"> + <source>agreeing encryption…</source> + <target>şifreleme kabul ediliyor…</target> + <note>chat item text</note> + </trans-unit> + <trans-unit id="always" xml:space="preserve"> + <source>always</source> + <target>her zaman</target> + <note>pref value</note> + </trans-unit> + <trans-unit id="and %lld other events" xml:space="preserve"> + <source>and %lld other events</source> + <target>ve %lld diğer etkinlikler</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="audio call (not e2e encrypted)" xml:space="preserve"> + <source>audio call (not e2e encrypted)</source> + <target>sesli arama (uçtan uca şifreli değil)</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="author" xml:space="preserve"> + <source>author</source> + <target>yetkili</target> + <note>member role</note> + </trans-unit> + <trans-unit id="bad message ID" xml:space="preserve"> + <source>bad message ID</source> + <target>kötü mesaj kimliği</target> + <note>integrity error chat item</note> + </trans-unit> + <trans-unit id="bad message hash" xml:space="preserve"> + <source>bad message hash</source> + <target>kötü mesaj hash'i</target> + <note>integrity error chat item</note> + </trans-unit> + <trans-unit id="blocked" xml:space="preserve"> <source>blocked</source> - <target state="translated">engellendi</target> + <target>engellendi</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="bold" xml:space="preserve"> + <source>bold</source> + <target>kalın</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="call error" xml:space="preserve"> + <source>call error</source> + <target>arama hatası</target> + <note>call status</note> + </trans-unit> + <trans-unit id="call in progress" xml:space="preserve"> + <source>call in progress</source> + <target>arama yapılıyor</target> + <note>call status</note> + </trans-unit> + <trans-unit id="calling…" xml:space="preserve"> + <source>calling…</source> + <target>aranıyor…</target> + <note>call status</note> + </trans-unit> + <trans-unit id="cancelled %@" xml:space="preserve"> + <source>cancelled %@</source> + <target>%@ iptal edildi</target> + <note>feature offered item</note> + </trans-unit> + <trans-unit id="changed address for you" xml:space="preserve"> + <source>changed address for you</source> + <target>senin için adres değiştirildi</target> + <note>chat item text</note> + </trans-unit> + <trans-unit id="changed role of %@ to %@" xml:space="preserve"> + <source>changed role of %1$@ to %2$@</source> + <target>1$@ rolünü %2$@ olarak değiştirdi</target> + <note>rcv group event chat item</note> + </trans-unit> + <trans-unit id="changed your role to %@" xml:space="preserve"> + <source>changed your role to %@</source> + <target>rolünü %@ olarak değiştirdi</target> + <note>rcv group event chat item</note> + </trans-unit> + <trans-unit id="changing address for %@…" xml:space="preserve"> + <source>changing address for %@…</source> + <target>%@ için adres değiştiriliyor…</target> + <note>chat item text</note> + </trans-unit> + <trans-unit id="changing address…" xml:space="preserve"> + <source>changing address…</source> + <target>adres değiştiriliyor…</target> + <note>chat item text</note> + </trans-unit> + <trans-unit id="colored" xml:space="preserve"> + <source>colored</source> + <target>renklendirilmiş</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="complete" xml:space="preserve"> + <source>complete</source> + <target>tamamlandı</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="connect to SimpleX Chat developers." xml:space="preserve"> + <source>connect to SimpleX Chat developers.</source> + <target>SimpleX Chat geliştiricilerine bağlan.</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="connected" xml:space="preserve"> + <source>connected</source> + <target>bağlanıldı</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="connected directly" xml:space="preserve"> + <source>connected directly</source> + <target>doğrudan bağlandı</target> + <note>rcv group event chat item</note> + </trans-unit> + <trans-unit id="connecting" xml:space="preserve"> + <source>connecting</source> + <target>bağlanılıyor</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="connecting (accepted)" xml:space="preserve"> + <source>connecting (accepted)</source> + <target>bağlanılıyor (onaylandı)</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="connecting (announced)" xml:space="preserve"> + <source>connecting (announced)</source> + <target>bağlanılıyor (duyuruldu)</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="connecting (introduced)" xml:space="preserve"> + <source>connecting (introduced)</source> + <target>bağlanılıyor (tanıtıldı)</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="connecting (introduction invitation)" xml:space="preserve"> + <source>connecting (introduction invitation)</source> + <target>bağlanılıyor (tanıtılma isteği)</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="connecting call" xml:space="preserve"> + <source>connecting call…</source> + <target>aramaya bağlanılıyor…</target> + <note>call status</note> + </trans-unit> + <trans-unit id="connecting…" xml:space="preserve"> + <source>connecting…</source> + <target>bağlanılıyor…</target> + <note>chat list item title</note> + </trans-unit> + <trans-unit id="connection established" xml:space="preserve"> + <source>connection established</source> + <target>bağlantı kuruldu</target> + <note>chat list item title (it should not be shown</note> + </trans-unit> + <trans-unit id="connection:%@" xml:space="preserve"> + <source>connection:%@</source> + <target>bağlantı:%@</target> + <note>connection information</note> + </trans-unit> + <trans-unit id="contact %@ changed to %@" xml:space="preserve"> + <source>contact %1$@ changed to %2$@</source> + <note>profile update event chat item</note> + </trans-unit> + <trans-unit id="contact has e2e encryption" xml:space="preserve"> + <source>contact has e2e encryption</source> + <target>kişi uçtan uca şifrelemeye sahiptir</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="contact has no e2e encryption" xml:space="preserve"> + <source>contact has no e2e encryption</source> + <target>kişi uçtan uca şifrelemeye sahip değildir</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="creator" xml:space="preserve"> + <source>creator</source> + <target>oluşturan</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="custom" xml:space="preserve"> + <source>custom</source> + <target>özel</target> + <note>dropdown time picker choice</note> + </trans-unit> + <trans-unit id="database version is newer than the app, but no down migration for: %@" xml:space="preserve"> + <source>database version is newer than the app, but no down migration for: %@</source> + <target>veritabanı sürümü uygulamadan daha yeni, ancak aşağı geçiş yok: %@</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="days" xml:space="preserve"> + <source>days</source> + <target>gün</target> + <note>time unit</note> + </trans-unit> + <trans-unit id="default (%@)" xml:space="preserve"> + <source>default (%@)</source> + <target>varsayılan (%@)</target> + <note>pref value</note> + </trans-unit> + <trans-unit id="default (no)" xml:space="preserve"> + <source>default (no)</source> + <target>varsayılan (hayır)</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="default (yes)" xml:space="preserve"> + <source>default (yes)</source> + <target>varsayılan (evet)</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="deleted" xml:space="preserve"> + <source>deleted</source> + <target>silindi</target> + <note>deleted chat item</note> + </trans-unit> + <trans-unit id="deleted contact" xml:space="preserve"> + <source>deleted contact</source> + <target>silinmiş kişi</target> + <note>rcv direct event chat item</note> + </trans-unit> + <trans-unit id="deleted group" xml:space="preserve"> + <source>deleted group</source> + <target>silinmiş grup</target> + <note>rcv group event chat item</note> + </trans-unit> + <trans-unit id="different migration in the app/database: %@ / %@" xml:space="preserve"> + <source>different migration in the app/database: %@ / %@</source> + <target>uygulamada/veritabanında farklı geçiş: %@ / %@</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="direct" xml:space="preserve"> + <source>direct</source> + <target>doğrudan</target> + <note>connection level description</note> + </trans-unit> + <trans-unit id="disabled" xml:space="preserve"> + <source>disabled</source> + <target>devre dışı</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="duplicate message" xml:space="preserve"> + <source>duplicate message</source> + <target>yinelenen mesaj</target> + <note>integrity error chat item</note> + </trans-unit> + <trans-unit id="e2e encrypted" xml:space="preserve"> + <source>e2e encrypted</source> + <target>uçtan uca şifrelenmiş</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="enabled" xml:space="preserve"> + <source>enabled</source> + <target>etkin</target> + <note>enabled status</note> + </trans-unit> + <trans-unit id="enabled for contact" xml:space="preserve"> + <source>enabled for contact</source> + <target>konuşulan kişi için etkinleşti</target> + <note>enabled status</note> + </trans-unit> + <trans-unit id="enabled for you" xml:space="preserve"> + <source>enabled for you</source> + <target>senin için etkinleştirildi</target> + <note>enabled status</note> + </trans-unit> + <trans-unit id="encryption agreed" xml:space="preserve"> + <source>encryption agreed</source> + <target>şifreleme kabul edildi</target> + <note>chat item text</note> + </trans-unit> + <trans-unit id="encryption agreed for %@" xml:space="preserve"> + <source>encryption agreed for %@</source> + <target>şifreleme %@ için kabul edildi</target> + <note>chat item text</note> + </trans-unit> + <trans-unit id="encryption ok" xml:space="preserve"> + <source>encryption ok</source> + <target>şifreleme etkin</target> + <note>chat item text</note> + </trans-unit> + <trans-unit id="encryption ok for %@" xml:space="preserve"> + <source>encryption ok for %@</source> + <target>şifreleme %@ için etkin</target> + <note>chat item text</note> + </trans-unit> + <trans-unit id="encryption re-negotiation allowed" xml:space="preserve"> + <source>encryption re-negotiation allowed</source> + <target>şifrelemenin yeniden anlaşmasına izin verildi</target> + <note>chat item text</note> + </trans-unit> + <trans-unit id="encryption re-negotiation allowed for %@" xml:space="preserve"> + <source>encryption re-negotiation allowed for %@</source> + <target>şifrelemenin yeniden anlaşmasına %@ için izin verildi</target> + <note>chat item text</note> + </trans-unit> + <trans-unit id="encryption re-negotiation required" xml:space="preserve"> + <source>encryption re-negotiation required</source> + <target>şifrelemenin yeniden anlaşması gerekiyor</target> + <note>chat item text</note> + </trans-unit> + <trans-unit id="encryption re-negotiation required for %@" xml:space="preserve"> + <source>encryption re-negotiation required for %@</source> + <target>şifrelemenin yeniden anlaşması %@ için gerekiyor</target> + <note>chat item text</note> + </trans-unit> + <trans-unit id="ended" xml:space="preserve"> + <source>ended</source> + <target>bitti</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="ended call %@" xml:space="preserve"> + <source>ended call %@</source> + <target>%@ araması bitti</target> + <note>call status</note> + </trans-unit> + <trans-unit id="error" xml:space="preserve"> + <source>error</source> + <target>hata</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="event happened" xml:space="preserve"> + <source>event happened</source> + <target>etkinliği yaşandı</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="group deleted" xml:space="preserve"> + <source>group deleted</source> + <target>grup silindi</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="group profile updated" xml:space="preserve"> + <source>group profile updated</source> + <target>grup profili güncellendi</target> + <note>snd group event chat item</note> + </trans-unit> + <trans-unit id="hours" xml:space="preserve"> + <source>hours</source> + <target>saat</target> + <note>time unit</note> + </trans-unit> + <trans-unit id="iOS Keychain is used to securely store passphrase - it allows receiving push notifications." xml:space="preserve"> + <source>iOS Keychain is used to securely store passphrase - it allows receiving push notifications.</source> + <target>iOS Anahtar Zinciri parolayı güvenli bir şekilde saklamak için kullanılır - anlık bildirimlerin alınmasını sağlar.</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="iOS Keychain will be used to securely store passphrase after you restart the app or change passphrase - it will allow receiving push notifications." xml:space="preserve"> + <source>iOS Keychain will be used to securely store passphrase after you restart the app or change passphrase - it will allow receiving push notifications.</source> + <target>iOS Anahtar Zinciri, uygulamayı yeniden başlattıktan veya parolayı değiştirdikten sonra parolayı güvenli bir şekilde saklamak için kullanılacaktır - anlık bildirimlerin alınmasına izin verecektir.</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="incognito via contact address link" xml:space="preserve"> + <source>incognito via contact address link</source> + <target>kişi bağlantı linki aracılığıyla gizli</target> + <note>chat list item description</note> + </trans-unit> + <trans-unit id="incognito via group link" xml:space="preserve"> + <source>incognito via group link</source> + <target>grup bağlantısı aracılığıyla gizli</target> + <note>chat list item description</note> + </trans-unit> + <trans-unit id="incognito via one-time link" xml:space="preserve"> + <source>incognito via one-time link</source> + <target>tek seferlik bağlantısı aracılığıyla gizli</target> + <note>chat list item description</note> + </trans-unit> + <trans-unit id="indirect (%d)" xml:space="preserve"> + <source>indirect (%d)</source> + <target>dolaylı (%d)</target> + <note>connection level description</note> + </trans-unit> + <trans-unit id="invalid chat" xml:space="preserve"> + <source>invalid chat</source> + <target>geçersi̇z sohbet</target> + <note>invalid chat data</note> + </trans-unit> + <trans-unit id="invalid chat data" xml:space="preserve"> + <source>invalid chat data</source> + <target>geçersi̇z sohbet verisi</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="invalid data" xml:space="preserve"> + <source>invalid data</source> + <target>geçersiz veri</target> + <note>invalid chat item</note> + </trans-unit> + <trans-unit id="invitation to group %@" xml:space="preserve"> + <source>invitation to group %@</source> + <target>%@ grubuna davet</target> + <note>group name</note> + </trans-unit> + <trans-unit id="invited" xml:space="preserve"> + <source>invited</source> + <target>davet edildi</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="invited %@" xml:space="preserve"> + <source>invited %@</source> + <target>%@ a davet edildi</target> + <note>rcv group event chat item</note> + </trans-unit> + <trans-unit id="invited to connect" xml:space="preserve"> + <source>invited to connect</source> + <target>bağlanmaya davet edildi</target> + <note>chat list item title</note> + </trans-unit> + <trans-unit id="invited via your group link" xml:space="preserve"> + <source>invited via your group link</source> + <target>grup bağlantınız üzerinden davet edildi</target> + <note>rcv group event chat item</note> + </trans-unit> + <trans-unit id="italic" xml:space="preserve"> + <source>italic</source> + <target>italik</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="join as %@" xml:space="preserve"> + <source>join as %@</source> + <target>%@ olarak katıl</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="left" xml:space="preserve"> + <source>left</source> + <target>ayrıldı</target> + <note>rcv group event chat item</note> + </trans-unit> + <trans-unit id="marked deleted" xml:space="preserve"> + <source>marked deleted</source> + <target>silinmiş olarak işaretlenmiş</target> + <note>marked deleted chat item preview text</note> + </trans-unit> + <trans-unit id="member" xml:space="preserve"> + <source>member</source> + <target>üye</target> + <note>member role</note> + </trans-unit> + <trans-unit id="member %@ changed to %@" xml:space="preserve"> + <source>member %1$@ changed to %2$@</source> + <note>profile update event chat item</note> + </trans-unit> + <trans-unit id="member connected" xml:space="preserve"> + <source>connected</source> + <target>bağlanıldı</target> + <note>rcv group event chat item</note> + </trans-unit> + <trans-unit id="message received" xml:space="preserve"> + <source>message received</source> + <target>mesaj alındı</target> + <note>notification</note> + </trans-unit> + <trans-unit id="minutes" xml:space="preserve"> + <source>minutes</source> + <target>dakikalar</target> + <note>time unit</note> + </trans-unit> + <trans-unit id="missed call" xml:space="preserve"> + <source>missed call</source> + <target>cevapsız arama</target> + <note>call status</note> + </trans-unit> + <trans-unit id="moderated" xml:space="preserve"> + <source>moderated</source> + <target>yönetildi</target> + <note>moderated chat item</note> + </trans-unit> + <trans-unit id="moderated by %@" xml:space="preserve"> + <source>moderated by %@</source> + <target>%@ tarafından yönetilmekte</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="months" xml:space="preserve"> + <source>months</source> + <target>aylar</target> + <note>time unit</note> + </trans-unit> + <trans-unit id="never" xml:space="preserve"> + <source>never</source> + <target>asla</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="new message" xml:space="preserve"> + <source>new message</source> + <target>yeni mesaj</target> + <note>notification</note> + </trans-unit> + <trans-unit id="no" xml:space="preserve"> + <source>no</source> + <target>hayır</target> + <note>pref value</note> + </trans-unit> + <trans-unit id="no e2e encryption" xml:space="preserve"> + <source>no e2e encryption</source> + <target>uçtan uca şifreleme yok</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="no text" xml:space="preserve"> + <source>no text</source> + <target>metin yok</target> + <note>copied message info in history</note> + </trans-unit> + <trans-unit id="observer" xml:space="preserve"> + <source>observer</source> + <target>gözlemci</target> + <note>member role</note> + </trans-unit> + <trans-unit id="off" xml:space="preserve"> + <source>off</source> + <target>kapalı</target> + <note>enabled status + group pref value + time to disappear</note> + </trans-unit> + <trans-unit id="offered %@" xml:space="preserve"> + <source>offered %@</source> + <target>%@ teklif edildi</target> + <note>feature offered item</note> + </trans-unit> + <trans-unit id="offered %@: %@" xml:space="preserve"> + <source>offered %1$@: %2$@</source> + <target>%1$@: %2$@ teklif etti</target> + <note>feature offered item</note> + </trans-unit> + <trans-unit id="on" xml:space="preserve"> + <source>on</source> + <target>açık</target> + <note>group pref value</note> + </trans-unit> + <trans-unit id="owner" xml:space="preserve"> + <source>owner</source> + <target>sahip</target> + <note>member role</note> + </trans-unit> + <trans-unit id="peer-to-peer" xml:space="preserve"> + <source>peer-to-peer</source> + <target>eşler arası</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="received answer…" xml:space="preserve"> + <source>received answer…</source> + <target>alınan cevap…</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="received confirmation…" xml:space="preserve"> + <source>received confirmation…</source> + <target>onaylama alındı…</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="rejected call" xml:space="preserve"> + <source>rejected call</source> + <target>geri çevrilmiş çağrı</target> + <note>call status</note> + </trans-unit> + <trans-unit id="removed" xml:space="preserve"> + <source>removed</source> + <target>kaldırıldı</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="removed %@" xml:space="preserve"> + <source>removed %@</source> + <target>%@ kaldırıldı</target> + <note>rcv group event chat item</note> + </trans-unit> + <trans-unit id="removed contact address" xml:space="preserve"> + <source>removed contact address</source> + <note>profile update event chat item</note> + </trans-unit> + <trans-unit id="removed profile picture" xml:space="preserve"> + <source>removed profile picture</source> + <note>profile update event chat item</note> + </trans-unit> + <trans-unit id="removed you" xml:space="preserve"> + <source>removed you</source> + <target>sen kaldırıldın</target> + <note>rcv group event chat item</note> + </trans-unit> + <trans-unit id="sec" xml:space="preserve"> + <source>sec</source> + <target>sn</target> + <note>network option</note> + </trans-unit> + <trans-unit id="seconds" xml:space="preserve"> + <source>seconds</source> + <target>saniye</target> + <note>time unit</note> + </trans-unit> + <trans-unit id="secret" xml:space="preserve"> + <source>secret</source> + <target>gizli</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="security code changed" xml:space="preserve"> + <source>security code changed</source> + <target>güvenlik kodu değiştirildi</target> + <note>chat item text</note> + </trans-unit> + <trans-unit id="send direct message" xml:space="preserve"> + <source>send direct message</source> + <target>doğrudan mesaj gönder</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="set new contact address" xml:space="preserve"> + <source>set new contact address</source> + <note>profile update event chat item</note> + </trans-unit> + <trans-unit id="set new profile picture" xml:space="preserve"> + <source>set new profile picture</source> + <note>profile update event chat item</note> + </trans-unit> + <trans-unit id="starting…" xml:space="preserve"> + <source>starting…</source> + <target>başlatılıyor…</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="strike" xml:space="preserve"> + <source>strike</source> + <target>grev</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="this contact" xml:space="preserve"> + <source>this contact</source> + <target>Bu kişi</target> + <note>notification title</note> + </trans-unit> + <trans-unit id="unknown" xml:space="preserve"> + <source>unknown</source> + <target>bilinmeyen</target> + <note>connection info</note> + </trans-unit> + <trans-unit id="unknown status" xml:space="preserve"> + <source>unknown status</source> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="updated group profile" xml:space="preserve"> + <source>updated group profile</source> + <target>grup profili güncellendi</target> + <note>rcv group event chat item</note> + </trans-unit> + <trans-unit id="updated profile" xml:space="preserve"> + <source>updated profile</source> + <note>profile update event chat item</note> + </trans-unit> + <trans-unit id="v%@" xml:space="preserve"> + <source>v%@</source> + <target>v%@</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="v%@ (%@)" xml:space="preserve"> + <source>v%@ (%@)</source> + <target>v%@ (%@)</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="via contact address link" xml:space="preserve"> + <source>via contact address link</source> + <target>bağlantı adres uzantısı ile</target> + <note>chat list item description</note> + </trans-unit> + <trans-unit id="via group link" xml:space="preserve"> + <source>via group link</source> + <target>grup bağlantısı ile</target> + <note>chat list item description</note> + </trans-unit> + <trans-unit id="via one-time link" xml:space="preserve"> + <source>via one-time link</source> + <target>tek kullanımlık bağlantısı ile</target> + <note>chat list item description</note> + </trans-unit> + <trans-unit id="via relay" xml:space="preserve"> + <source>via relay</source> + <target>yönlendirici aracılığıyla</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="video call (not e2e encrypted)" xml:space="preserve"> + <source>video call (not e2e encrypted)</source> + <target>Görüntülü arama (şifrelenmiş değil)</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="waiting for answer…" xml:space="preserve"> + <source>waiting for answer…</source> + <target>cevap bekleniyor…</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="waiting for confirmation…" xml:space="preserve"> + <source>waiting for confirmation…</source> + <target>onay bekleniyor…</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="wants to connect to you!" xml:space="preserve"> + <source>wants to connect to you!</source> + <target>bağlanmak istiyor!</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="weeks" xml:space="preserve"> + <source>weeks</source> + <target>haftalar</target> + <note>time unit</note> + </trans-unit> + <trans-unit id="yes" xml:space="preserve"> + <source>yes</source> + <target>evet</target> + <note>pref value</note> + </trans-unit> + <trans-unit id="you are invited to group" xml:space="preserve"> + <source>you are invited to group</source> + <target>gruba davet edildiniz</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="you are observer" xml:space="preserve"> + <source>you are observer</source> + <target>gözlemcisiniz</target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="you changed address" xml:space="preserve"> + <source>you changed address</source> + <target>adresinizi değiştirdiniz</target> + <note>chat item text</note> + </trans-unit> + <trans-unit id="you changed address for %@" xml:space="preserve"> + <source>you changed address for %@</source> + <target>adresinizi %@ ile değiştirdiniz</target> + <note>chat item text</note> + </trans-unit> + <trans-unit id="you changed role for yourself to %@" xml:space="preserve"> + <source>you changed role for yourself to %@</source> + <target>kişisel yetkinizi %@ olarak değiştirdiniz</target> + <note>snd group event chat item</note> + </trans-unit> + <trans-unit id="you changed role of %@ to %@" xml:space="preserve"> + <source>you changed role of %1$@ to %2$@</source> + <target>%1$@'in yetkisini %2$@ olarak değiştirdiniz</target> + <note>snd group event chat item</note> + </trans-unit> + <trans-unit id="you left" xml:space="preserve"> + <source>you left</source> + <target>terk ettiniz</target> + <note>snd group event chat item</note> + </trans-unit> + <trans-unit id="you removed %@" xml:space="preserve"> + <source>you removed %@</source> + <target>%@'yi çıkarttınız</target> + <note>snd group event chat item</note> + </trans-unit> + <trans-unit id="you shared one-time link" xml:space="preserve"> + <source>you shared one-time link</source> + <target>tek kullanımlık bağlantınızı paylaştınız</target> + <note>chat list item description</note> + </trans-unit> + <trans-unit id="you shared one-time link incognito" xml:space="preserve"> + <source>you shared one-time link incognito</source> + <target>tek kullanımlık link paylaştınız gizli</target> + <note>chat list item description</note> + </trans-unit> + <trans-unit id="you: " xml:space="preserve"> + <source>you: </source> + <target>sen: </target> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="~strike~" xml:space="preserve"> + <source>\~strike~</source> + <target>\~strike~</target> <note>No comment provided by engineer.</note> </trans-unit> </body> </file> <file original="en.lproj/SimpleX--iOS--InfoPlist.strings" source-language="en" target-language="tr" datatype="plaintext"> <header> - <tool tool-id="com.apple.dt.xcode" tool-name="Xcode" tool-version="14.3.1" build-num="14E300c"/> + <tool tool-id="com.apple.dt.xcode" tool-name="Xcode" tool-version="15.0" build-num="15A240d"/> </header> <body> - <trans-unit id="CFBundleName" xml:space="preserve" approved="no"> + <trans-unit id="CFBundleName" xml:space="preserve"> <source>SimpleX</source> - <target state="translated">SimpleX</target> + <target>SimpleX</target> <note>Bundle name</note> </trans-unit> - <trans-unit id="NSCameraUsageDescription" xml:space="preserve" approved="no"> + <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 state="translated">SimpleX, diğer kullanıcılara bağlanmak amacıyla QR kodlarını taramak ve görüntülü aramalar için kamera erişimine ihtiyaç duyar.</target> + <target>SimpleX, diğer kullanıcılara bağlanmak amacıyla QR kodlarını taramak ve görüntülü aramalar için kamera erişimine ihtiyaç duyar.</target> <note>Privacy - Camera Usage Description</note> </trans-unit> - <trans-unit id="NSFaceIDUsageDescription" xml:space="preserve" approved="no"> + <trans-unit id="NSFaceIDUsageDescription" xml:space="preserve"> <source>SimpleX uses Face ID for local authentication</source> - <target state="translated">SimpleX yerel kimlik doğrulama için Face ID kullanır</target> + <target>SimpleX yerel kimlik doğrulama için Face ID kullanır</target> <note>Privacy - Face ID Usage Description</note> </trans-unit> - <trans-unit id="NSMicrophoneUsageDescription" xml:space="preserve" approved="no"> + <trans-unit id="NSLocalNetworkUsageDescription" xml:space="preserve"> + <source>SimpleX uses local network access to allow using user chat profile via desktop app on the same network.</source> + <target>SimpleX, aynı ağdaki masaüstü uygulaması aracılığıyla kullanıcı sohbet profilinin kullanılmasına izin vermek için yerel ağ erişimini kullanır.</target> + <note>Privacy - Local Network Usage Description</note> + </trans-unit> + <trans-unit id="NSMicrophoneUsageDescription" xml:space="preserve"> <source>SimpleX needs microphone access for audio and video calls, and to record voice messages.</source> - <target state="translated">SimpleX'in sesli ve görüntülü aramalar ve sesli mesajları kaydetmek için mikrofon erişimine ihtiyacı vardır.</target> + <target>SimpleX'in sesli ve görüntülü aramalar ve sesli mesajları kaydetmek için mikrofon erişimine ihtiyacı vardır.</target> <note>Privacy - Microphone Usage Description</note> </trans-unit> - <trans-unit id="NSPhotoLibraryAddUsageDescription" xml:space="preserve" approved="no"> + <trans-unit id="NSPhotoLibraryAddUsageDescription" xml:space="preserve"> <source>SimpleX needs access to Photo Library for saving captured and received media</source> - <target state="translated">SimpleX'in çekilen ve alınan medyayı kaydetmek için Fotoğraf Kitaplığı'na erişmesi gerekir</target> + <target>SimpleX'in çekilen ve alınan medyayı kaydetmek için Fotoğraf Kitaplığı'na erişmesi gerekir</target> <note>Privacy - Photo Library Additions Usage Description</note> </trans-unit> - <trans-unit id="NSLocalNetworkUsageDescription" xml:space="preserve" approved="no"> - <source>SimpleX uses local network access to allow using user chat profile via desktop app on the same network.</source> - <target state="translated">SimpleX, aynı ağdaki masaüstü uygulaması aracılığıyla kullanıcı sohbet profilinin kullanılmasına izin vermek için yerel ağ erişimini kullanır.</target> - <note>Privacy - Local Network Usage Description</note> - </trans-unit> </body> </file> <file original="SimpleX NSE/en.lproj/InfoPlist.strings" source-language="en" target-language="tr" datatype="plaintext"> <header> - <tool tool-id="com.apple.dt.xcode" tool-name="Xcode" tool-version="14.3.1" build-num="14E300c"/> + <tool tool-id="com.apple.dt.xcode" tool-name="Xcode" tool-version="15.0" build-num="15A240d"/> </header> <body> - <trans-unit id="CFBundleDisplayName" xml:space="preserve" approved="no"> + <trans-unit id="CFBundleDisplayName" xml:space="preserve"> <source>SimpleX NSE</source> - <target state="translated">SimpleX NSE</target> + <target>SimpleX NSE</target> <note>Bundle display name</note> </trans-unit> - <trans-unit id="CFBundleName" xml:space="preserve" approved="no"> + <trans-unit id="CFBundleName" xml:space="preserve"> <source>SimpleX NSE</source> - <target state="translated">SimpleX NSE</target> + <target>SimpleX NSE</target> <note>Bundle name</note> </trans-unit> - <trans-unit id="NSHumanReadableCopyright" xml:space="preserve" approved="no"> + <trans-unit id="NSHumanReadableCopyright" xml:space="preserve"> <source>Copyright © 2022 SimpleX Chat. All rights reserved.</source> - <target state="translated">Telif Hakkı © 2024 SimpleX Chat. Tüm hakları saklıdır.</target> + <target>Telif Hakkı © 2024 SimpleX Chat. Tüm hakları saklıdır.</target> <note>Copyright (human-readable)</note> </trans-unit> </body> diff --git a/apps/ios/SimpleX Localizations/uk.xcloc/Localized Contents/uk.xliff b/apps/ios/SimpleX Localizations/uk.xcloc/Localized Contents/uk.xliff index 244a728f8..c613b4878 100644 --- a/apps/ios/SimpleX Localizations/uk.xcloc/Localized Contents/uk.xliff +++ b/apps/ios/SimpleX Localizations/uk.xcloc/Localized Contents/uk.xliff @@ -370,6 +370,11 @@ <target>, </target> <note>No comment provided by engineer.</note> </trans-unit> + <trans-unit id="- block a member to stop spam for all. - contact address is not shared." xml:space="preserve"> + <source>- block a member to stop spam for all. +- contact address is not shared.</source> + <note>No comment provided by engineer.</note> + </trans-unit> <trans-unit id="- connect to [directory service](simplex:/contact#/?v=1-4&smp=smp%3A%2F%2Fu2dS9sG8nMNURyZwqASV4yROM28Er0luVTx5X1CsMrU%3D%40smp4.simplex.im%2FeXSPwqTkKyDO3px4fLf1wx3MvPdjdLW3%23%2F%3Fv%3D1-2%26dh%3DMCowBQYDK2VuAyEAaiv6MkMH44L2TcYrt_CsX3ZvM11WgbMEUn0hkIKTOho%253D%26srv%3Do5vmywmrnaxalvz6wi3zicyftgio6psuvyniis6gco6bp6ekl4cqj4id.onion) (BETA)! - delivery receipts (up to 20 members). - faster and more stable." xml:space="preserve"> <source>- connect to [directory service](simplex:/contact#/?v=1-4&smp=smp%3A%2F%2Fu2dS9sG8nMNURyZwqASV4yROM28Er0luVTx5X1CsMrU%3D%40smp4.simplex.im%2FeXSPwqTkKyDO3px4fLf1wx3MvPdjdLW3%23%2F%3Fv%3D1-2%26dh%3DMCowBQYDK2VuAyEAaiv6MkMH44L2TcYrt_CsX3ZvM11WgbMEUn0hkIKTOho%253D%26srv%3Do5vmywmrnaxalvz6wi3zicyftgio6psuvyniis6gco6bp6ekl4cqj4id.onion) (BETA)! - delivery receipts (up to 20 members). @@ -635,6 +640,10 @@ <target>Всі учасники групи залишаться на зв'язку.</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"> + <source>All messages will be deleted - this cannot be undone!</source> + <note>No comment provided by engineer.</note> + </trans-unit> <trans-unit id="All messages will be deleted - this cannot be undone! The messages will be deleted ONLY for you." xml:space="preserve"> <source>All messages will be deleted - this cannot be undone! The messages will be deleted ONLY for you.</source> <target>Всі повідомлення будуть видалені - це неможливо скасувати! Повідомлення будуть видалені ТІЛЬКИ для вас.</target> @@ -1139,6 +1148,10 @@ <target>Відверта розмова?</target> <note>No comment provided by engineer.</note> </trans-unit> + <trans-unit id="Clear private notes?" xml:space="preserve"> + <source>Clear private notes?</source> + <note>No comment provided by engineer.</note> + </trans-unit> <trans-unit id="Clear verification" xml:space="preserve"> <source>Clear verification</source> <target>Очистити перевірку</target> @@ -1425,6 +1438,14 @@ This is your own one-time link!</source> <target>Створіть свій профіль</target> <note>No comment provided by engineer.</note> </trans-unit> + <trans-unit id="Created at" xml:space="preserve"> + <source>Created at</source> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="Created at: %@" xml:space="preserve"> + <source>Created at: %@</source> + <note>copied message info</note> + </trans-unit> <trans-unit id="Created on %@" xml:space="preserve"> <source>Created on %@</source> <target>Створено %@</target> @@ -2188,6 +2209,10 @@ This cannot be undone!</source> <source>Error creating member contact</source> <note>No comment provided by engineer.</note> </trans-unit> + <trans-unit id="Error creating message" xml:space="preserve"> + <source>Error creating message</source> + <note>No comment provided by engineer.</note> + </trans-unit> <trans-unit id="Error creating profile!" xml:space="preserve"> <source>Error creating profile!</source> <target>Помилка створення профілю!</target> @@ -2847,6 +2872,10 @@ This cannot be undone!</source> <target>Імпорт бази даних</target> <note>No comment provided by engineer.</note> </trans-unit> + <trans-unit id="Improved message delivery" xml:space="preserve"> + <source>Improved message delivery</source> + <note>No comment provided by engineer.</note> + </trans-unit> <trans-unit id="Improved privacy and security" xml:space="preserve"> <source>Improved privacy and security</source> <target>Покращена конфіденційність та безпека</target> @@ -3063,6 +3092,10 @@ This cannot be undone!</source> <target>Приєднуйтесь до групи</target> <note>No comment provided by engineer.</note> </trans-unit> + <trans-unit id="Join group conversations" xml:space="preserve"> + <source>Join group conversations</source> + <note>No comment provided by engineer.</note> + </trans-unit> <trans-unit id="Join group?" xml:space="preserve"> <source>Join group?</source> <note>No comment provided by engineer.</note> @@ -3749,6 +3782,10 @@ This is your link for group %@!</source> <target>Показати пароль</target> <note>No comment provided by engineer.</note> </trans-unit> + <trans-unit id="Past member %@" xml:space="preserve"> + <source>Past member %@</source> + <note>past/unknown group member</note> + </trans-unit> <trans-unit id="Paste desktop address" xml:space="preserve"> <source>Paste desktop address</source> <note>No comment provided by engineer.</note> @@ -3758,6 +3795,10 @@ This is your link for group %@!</source> <target>Вставити зображення</target> <note>No comment provided by engineer.</note> </trans-unit> + <trans-unit id="Paste link to connect!" xml:space="preserve"> + <source>Paste link to connect!</source> + <note>No comment provided by engineer.</note> + </trans-unit> <trans-unit id="Paste the link you received" xml:space="preserve"> <source>Paste the link you received</source> <note>No comment provided by engineer.</note> @@ -3887,6 +3928,10 @@ Error: %@</source> <target>Приватні імена файлів</target> <note>No comment provided by engineer.</note> </trans-unit> + <trans-unit id="Private notes" xml:space="preserve"> + <source>Private notes</source> + <note>name of notes to self</note> + </trans-unit> <trans-unit id="Profile and server connections" xml:space="preserve"> <source>Profile and server connections</source> <target>З'єднання профілю та сервера</target> @@ -4064,6 +4109,10 @@ Error: %@</source> <target>Отримання через</target> <note>No comment provided by engineer.</note> </trans-unit> + <trans-unit id="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)." xml:space="preserve"> + <source>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).</source> + <note>No comment provided by engineer.</note> + </trans-unit> <trans-unit id="Recipients see updates as you type them." xml:space="preserve"> <source>Recipients see updates as you type them.</source> <target>Одержувачі бачать оновлення, коли ви їх вводите.</target> @@ -4261,6 +4310,10 @@ Error: %@</source> <target>Сервери SMP</target> <note>No comment provided by engineer.</note> </trans-unit> + <trans-unit id="Safer groups" xml:space="preserve"> + <source>Safer groups</source> + <note>No comment provided by engineer.</note> + </trans-unit> <trans-unit id="Save" xml:space="preserve"> <source>Save</source> <target>Зберегти</target> @@ -4346,6 +4399,10 @@ Error: %@</source> <target>Збережені сервери WebRTC ICE буде видалено</target> <note>No comment provided by engineer.</note> </trans-unit> + <trans-unit id="Saved message" xml:space="preserve"> + <source>Saved message</source> + <note>message info title</note> + </trans-unit> <trans-unit id="Scan QR code" xml:space="preserve"> <source>Scan QR code</source> <target>Відскануйте QR-код</target> @@ -4375,6 +4432,10 @@ Error: %@</source> <target>Пошук</target> <note>No comment provided by engineer.</note> </trans-unit> + <trans-unit id="Search bar accepts invitation links." xml:space="preserve"> + <source>Search bar accepts invitation links.</source> + <note>No comment provided by engineer.</note> + </trans-unit> <trans-unit id="Search or paste SimpleX link" xml:space="preserve"> <source>Search or paste SimpleX link</source> <note>No comment provided by engineer.</note> @@ -5201,6 +5262,10 @@ You will be prompted to complete authentication before this feature is enabled.< <target>Спроба з'єднатися з сервером, який використовується для отримання повідомлень від цього контакту.</target> <note>No comment provided by engineer.</note> </trans-unit> + <trans-unit id="Turkish interface" xml:space="preserve"> + <source>Turkish interface</source> + <note>No comment provided by engineer.</note> + </trans-unit> <trans-unit id="Turn off" xml:space="preserve"> <source>Turn off</source> <target>Вимкнути</target> @@ -5574,11 +5639,19 @@ To connect, please ask your contact to create another connection link and check <target>Коли ви ділитеся з кимось своїм профілем інкогніто, цей профіль буде використовуватися для груп, до яких вас запрошують.</target> <note>No comment provided by engineer.</note> </trans-unit> + <trans-unit id="With encrypted files and media." xml:space="preserve"> + <source>With encrypted files and media.</source> + <note>No comment provided by engineer.</note> + </trans-unit> <trans-unit id="With optional welcome message." xml:space="preserve"> <source>With optional welcome message.</source> <target>З необов'язковим вітальним повідомленням.</target> <note>No comment provided by engineer.</note> </trans-unit> + <trans-unit id="With reduced battery usage." xml:space="preserve"> + <source>With reduced battery usage.</source> + <note>No comment provided by engineer.</note> + </trans-unit> <trans-unit id="Wrong database passphrase" xml:space="preserve"> <source>Wrong database passphrase</source> <target>Неправильний пароль до бази даних</target> @@ -6182,6 +6255,10 @@ SimpleX servers cannot see your profile.</source> <target>з'єднання:%@</target> <note>connection information</note> </trans-unit> + <trans-unit id="contact %@ changed to %@" xml:space="preserve"> + <source>contact %1$@ changed to %2$@</source> + <note>profile update event chat item</note> + </trans-unit> <trans-unit id="contact has e2e encryption" xml:space="preserve"> <source>contact has e2e encryption</source> <target>контакт має шифрування e2e</target> @@ -6451,6 +6528,10 @@ SimpleX servers cannot see your profile.</source> <target>учасник</target> <note>member role</note> </trans-unit> + <trans-unit id="member %@ changed to %@" xml:space="preserve"> + <source>member %1$@ changed to %2$@</source> + <note>profile update event chat item</note> + </trans-unit> <trans-unit id="member connected" xml:space="preserve"> <source>connected</source> <target>з'єднаний</target> @@ -6573,6 +6654,14 @@ SimpleX servers cannot see your profile.</source> <target>видалено %@</target> <note>rcv group event chat item</note> </trans-unit> + <trans-unit id="removed contact address" xml:space="preserve"> + <source>removed contact address</source> + <note>profile update event chat item</note> + </trans-unit> + <trans-unit id="removed profile picture" xml:space="preserve"> + <source>removed profile picture</source> + <note>profile update event chat item</note> + </trans-unit> <trans-unit id="removed you" xml:space="preserve"> <source>removed you</source> <target>прибрали вас</target> @@ -6602,6 +6691,14 @@ SimpleX servers cannot see your profile.</source> <source>send direct message</source> <note>No comment provided by engineer.</note> </trans-unit> + <trans-unit id="set new contact address" xml:space="preserve"> + <source>set new contact address</source> + <note>profile update event chat item</note> + </trans-unit> + <trans-unit id="set new profile picture" xml:space="preserve"> + <source>set new profile picture</source> + <note>profile update event chat item</note> + </trans-unit> <trans-unit id="starting…" xml:space="preserve"> <source>starting…</source> <target>починаючи…</target> @@ -6622,11 +6719,19 @@ SimpleX servers cannot see your profile.</source> <target>невідомий</target> <note>connection info</note> </trans-unit> + <trans-unit id="unknown status" xml:space="preserve"> + <source>unknown status</source> + <note>No comment provided by engineer.</note> + </trans-unit> <trans-unit id="updated group profile" xml:space="preserve"> <source>updated group profile</source> <target>оновлений профіль групи</target> <note>rcv group event chat item</note> </trans-unit> + <trans-unit id="updated profile" xml:space="preserve"> + <source>updated profile</source> + <note>profile update event chat item</note> + </trans-unit> <trans-unit id="v%@" xml:space="preserve"> <source>v%@</source> <note>No comment provided by engineer.</note> diff --git a/apps/ios/SimpleX Localizations/zh-Hans.xcloc/Localized Contents/zh-Hans.xliff b/apps/ios/SimpleX Localizations/zh-Hans.xcloc/Localized Contents/zh-Hans.xliff index 911df9701..7f8207905 100644 --- a/apps/ios/SimpleX Localizations/zh-Hans.xcloc/Localized Contents/zh-Hans.xliff +++ b/apps/ios/SimpleX Localizations/zh-Hans.xcloc/Localized Contents/zh-Hans.xliff @@ -361,6 +361,11 @@ <target>, </target> <note>No comment provided by engineer.</note> </trans-unit> + <trans-unit id="- block a member to stop spam for all. - contact address is not shared." xml:space="preserve"> + <source>- block a member to stop spam for all. +- contact address is not shared.</source> + <note>No comment provided by engineer.</note> + </trans-unit> <trans-unit id="- connect to [directory service](simplex:/contact#/?v=1-4&smp=smp%3A%2F%2Fu2dS9sG8nMNURyZwqASV4yROM28Er0luVTx5X1CsMrU%3D%40smp4.simplex.im%2FeXSPwqTkKyDO3px4fLf1wx3MvPdjdLW3%23%2F%3Fv%3D1-2%26dh%3DMCowBQYDK2VuAyEAaiv6MkMH44L2TcYrt_CsX3ZvM11WgbMEUn0hkIKTOho%253D%26srv%3Do5vmywmrnaxalvz6wi3zicyftgio6psuvyniis6gco6bp6ekl4cqj4id.onion) (BETA)! - delivery receipts (up to 20 members). - faster and more stable." xml:space="preserve"> <source>- connect to [directory service](simplex:/contact#/?v=1-4&smp=smp%3A%2F%2Fu2dS9sG8nMNURyZwqASV4yROM28Er0luVTx5X1CsMrU%3D%40smp4.simplex.im%2FeXSPwqTkKyDO3px4fLf1wx3MvPdjdLW3%23%2F%3Fv%3D1-2%26dh%3DMCowBQYDK2VuAyEAaiv6MkMH44L2TcYrt_CsX3ZvM11WgbMEUn0hkIKTOho%253D%26srv%3Do5vmywmrnaxalvz6wi3zicyftgio6psuvyniis6gco6bp6ekl4cqj4id.onion) (BETA)! - delivery receipts (up to 20 members). @@ -622,6 +627,10 @@ <target>所有群组成员将保持连接。</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"> + <source>All messages will be deleted - this cannot be undone!</source> + <note>No comment provided by engineer.</note> + </trans-unit> <trans-unit id="All messages will be deleted - this cannot be undone! The messages will be deleted ONLY for you." xml:space="preserve"> <source>All messages will be deleted - this cannot be undone! The messages will be deleted ONLY for you.</source> <target>所有聊天记录和消息将被删除——这一行为无法撤销!只有您的消息会被删除。</target> @@ -1117,6 +1126,10 @@ <target>清除对话吗?</target> <note>No comment provided by engineer.</note> </trans-unit> + <trans-unit id="Clear private notes?" xml:space="preserve"> + <source>Clear private notes?</source> + <note>No comment provided by engineer.</note> + </trans-unit> <trans-unit id="Clear verification" xml:space="preserve"> <source>Clear verification</source> <target>清除验证</target> @@ -1394,6 +1407,14 @@ This is your own one-time link!</source> <target>创建您的资料</target> <note>No comment provided by engineer.</note> </trans-unit> + <trans-unit id="Created at" xml:space="preserve"> + <source>Created at</source> + <note>No comment provided by engineer.</note> + </trans-unit> + <trans-unit id="Created at: %@" xml:space="preserve"> + <source>Created at: %@</source> + <note>copied message info</note> + </trans-unit> <trans-unit id="Created on %@" xml:space="preserve"> <source>Created on %@</source> <target>创建于 %@</target> @@ -2161,6 +2182,10 @@ This cannot be undone!</source> <target>创建成员联系人时出错</target> <note>No comment provided by engineer.</note> </trans-unit> + <trans-unit id="Error creating message" xml:space="preserve"> + <source>Error creating message</source> + <note>No comment provided by engineer.</note> + </trans-unit> <trans-unit id="Error creating profile!" xml:space="preserve"> <source>Error creating profile!</source> <target>创建资料错误!</target> @@ -2822,6 +2847,10 @@ This cannot be undone!</source> <target>导入数据库</target> <note>No comment provided by engineer.</note> </trans-unit> + <trans-unit id="Improved message delivery" xml:space="preserve"> + <source>Improved message delivery</source> + <note>No comment provided by engineer.</note> + </trans-unit> <trans-unit id="Improved privacy and security" xml:space="preserve"> <source>Improved privacy and security</source> <target>改进的隐私和安全</target> @@ -3038,6 +3067,10 @@ This cannot be undone!</source> <target>加入群组</target> <note>No comment provided by engineer.</note> </trans-unit> + <trans-unit id="Join group conversations" xml:space="preserve"> + <source>Join group conversations</source> + <note>No comment provided by engineer.</note> + </trans-unit> <trans-unit id="Join group?" xml:space="preserve"> <source>Join group?</source> <note>No comment provided by engineer.</note> @@ -3726,6 +3759,10 @@ This is your link for group %@!</source> <target>显示密码</target> <note>No comment provided by engineer.</note> </trans-unit> + <trans-unit id="Past member %@" xml:space="preserve"> + <source>Past member %@</source> + <note>past/unknown group member</note> + </trans-unit> <trans-unit id="Paste desktop address" xml:space="preserve"> <source>Paste desktop address</source> <note>No comment provided by engineer.</note> @@ -3735,6 +3772,10 @@ This is your link for group %@!</source> <target>粘贴图片</target> <note>No comment provided by engineer.</note> </trans-unit> + <trans-unit id="Paste link to connect!" xml:space="preserve"> + <source>Paste link to connect!</source> + <note>No comment provided by engineer.</note> + </trans-unit> <trans-unit id="Paste the link you received" xml:space="preserve"> <source>Paste the link you received</source> <note>No comment provided by engineer.</note> @@ -3864,6 +3905,10 @@ Error: %@</source> <target>私密文件名</target> <note>No comment provided by engineer.</note> </trans-unit> + <trans-unit id="Private notes" xml:space="preserve"> + <source>Private notes</source> + <note>name of notes to self</note> + </trans-unit> <trans-unit id="Profile and server connections" xml:space="preserve"> <source>Profile and server connections</source> <target>资料和服务器连接</target> @@ -4041,6 +4086,10 @@ Error: %@</source> <target>接收通过</target> <note>No comment provided by engineer.</note> </trans-unit> + <trans-unit id="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)." xml:space="preserve"> + <source>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).</source> + <note>No comment provided by engineer.</note> + </trans-unit> <trans-unit id="Recipients see updates as you type them." xml:space="preserve"> <source>Recipients see updates as you type them.</source> <target>对方会在您键入时看到更新。</target> @@ -4238,6 +4287,10 @@ Error: %@</source> <target>SMP 服务器</target> <note>No comment provided by engineer.</note> </trans-unit> + <trans-unit id="Safer groups" xml:space="preserve"> + <source>Safer groups</source> + <note>No comment provided by engineer.</note> + </trans-unit> <trans-unit id="Save" xml:space="preserve"> <source>Save</source> <target>保存</target> @@ -4323,6 +4376,10 @@ Error: %@</source> <target>已保存的WebRTC ICE服务器将被删除</target> <note>No comment provided by engineer.</note> </trans-unit> + <trans-unit id="Saved message" xml:space="preserve"> + <source>Saved message</source> + <note>message info title</note> + </trans-unit> <trans-unit id="Scan QR code" xml:space="preserve"> <source>Scan QR code</source> <target>扫描二维码</target> @@ -4352,6 +4409,10 @@ Error: %@</source> <target>搜索</target> <note>No comment provided by engineer.</note> </trans-unit> + <trans-unit id="Search bar accepts invitation links." xml:space="preserve"> + <source>Search bar accepts invitation links.</source> + <note>No comment provided by engineer.</note> + </trans-unit> <trans-unit id="Search or paste SimpleX link" xml:space="preserve"> <source>Search or paste SimpleX link</source> <note>No comment provided by engineer.</note> @@ -5181,6 +5242,10 @@ You will be prompted to complete authentication before this feature is enabled.< <target>正在尝试连接到用于从该联系人接收消息的服务器。</target> <note>No comment provided by engineer.</note> </trans-unit> + <trans-unit id="Turkish interface" xml:space="preserve"> + <source>Turkish interface</source> + <note>No comment provided by engineer.</note> + </trans-unit> <trans-unit id="Turn off" xml:space="preserve"> <source>Turn off</source> <target>关闭</target> @@ -5554,11 +5619,19 @@ To connect, please ask your contact to create another connection link and check <target>当您与某人共享隐身聊天资料时,该资料将用于他们邀请您加入的群组。</target> <note>No comment provided by engineer.</note> </trans-unit> + <trans-unit id="With encrypted files and media." xml:space="preserve"> + <source>With encrypted files and media.</source> + <note>No comment provided by engineer.</note> + </trans-unit> <trans-unit id="With optional welcome message." xml:space="preserve"> <source>With optional welcome message.</source> <target>带有可选的欢迎消息。</target> <note>No comment provided by engineer.</note> </trans-unit> + <trans-unit id="With reduced battery usage." xml:space="preserve"> + <source>With reduced battery usage.</source> + <note>No comment provided by engineer.</note> + </trans-unit> <trans-unit id="Wrong database passphrase" xml:space="preserve"> <source>Wrong database passphrase</source> <target>数据库密码错误</target> @@ -6163,6 +6236,10 @@ SimpleX 服务器无法看到您的资料。</target> <target>连接:%@</target> <note>connection information</note> </trans-unit> + <trans-unit id="contact %@ changed to %@" xml:space="preserve"> + <source>contact %1$@ changed to %2$@</source> + <note>profile update event chat item</note> + </trans-unit> <trans-unit id="contact has e2e encryption" xml:space="preserve"> <source>contact has e2e encryption</source> <target>联系人具有端到端加密</target> @@ -6432,6 +6509,10 @@ SimpleX 服务器无法看到您的资料。</target> <target>成员</target> <note>member role</note> </trans-unit> + <trans-unit id="member %@ changed to %@" xml:space="preserve"> + <source>member %1$@ changed to %2$@</source> + <note>profile update event chat item</note> + </trans-unit> <trans-unit id="member connected" xml:space="preserve"> <source>connected</source> <target>已连接</target> @@ -6554,6 +6635,14 @@ SimpleX 服务器无法看到您的资料。</target> <target>已删除 %@</target> <note>rcv group event chat item</note> </trans-unit> + <trans-unit id="removed contact address" xml:space="preserve"> + <source>removed contact address</source> + <note>profile update event chat item</note> + </trans-unit> + <trans-unit id="removed profile picture" xml:space="preserve"> + <source>removed profile picture</source> + <note>profile update event chat item</note> + </trans-unit> <trans-unit id="removed you" xml:space="preserve"> <source>removed you</source> <target>已将您移除</target> @@ -6584,6 +6673,14 @@ SimpleX 服务器无法看到您的资料。</target> <target>发送私信</target> <note>No comment provided by engineer.</note> </trans-unit> + <trans-unit id="set new contact address" xml:space="preserve"> + <source>set new contact address</source> + <note>profile update event chat item</note> + </trans-unit> + <trans-unit id="set new profile picture" xml:space="preserve"> + <source>set new profile picture</source> + <note>profile update event chat item</note> + </trans-unit> <trans-unit id="starting…" xml:space="preserve"> <source>starting…</source> <target>启动中……</target> @@ -6604,11 +6701,19 @@ SimpleX 服务器无法看到您的资料。</target> <target>未知</target> <note>connection info</note> </trans-unit> + <trans-unit id="unknown status" xml:space="preserve"> + <source>unknown status</source> + <note>No comment provided by engineer.</note> + </trans-unit> <trans-unit id="updated group profile" xml:space="preserve"> <source>updated group profile</source> <target>已更新的群组资料</target> <note>rcv group event chat item</note> </trans-unit> + <trans-unit id="updated profile" xml:space="preserve"> + <source>updated profile</source> + <note>profile update event chat item</note> + </trans-unit> <trans-unit id="v%@" xml:space="preserve"> <source>v%@</source> <note>No comment provided by engineer.</note> diff --git a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/onboarding/WhatsNewView.kt b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/onboarding/WhatsNewView.kt index e1a81d925..e5507430e 100644 --- a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/onboarding/WhatsNewView.kt +++ b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/onboarding/WhatsNewView.kt @@ -462,6 +462,44 @@ private val versionDescriptions: List<VersionDescription> = listOf( ) ) ), + VersionDescription( + version = "v5.5", + post = "https://simplex.chat/blog/20240124-simplex-chat-infrastructure-costs-v5-5-simplex-ux-private-notes-group-history.html", + features = listOf( + FeatureDescription( + icon = MR.images.ic_folder_pen, + titleId = MR.strings.v5_5_private_notes, + descrId = MR.strings.v5_5_private_notes_descr + ), + FeatureDescription( + icon = MR.images.ic_link, + titleId = MR.strings.v5_5_simpler_connect_ui, + descrId = MR.strings.v5_5_simpler_connect_ui_descr + ), + FeatureDescription( + icon = MR.images.ic_forum, + titleId = MR.strings.v5_5_join_group_conversation, + descrId = MR.strings.v5_5_join_group_conversation_descr, + link = "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" + ), + FeatureDescription( + icon = MR.images.ic_group, + titleId = MR.strings.v5_5_safer_groups, + descrId = MR.strings.v5_5_safer_groups_descr + ), + FeatureDescription( + icon = MR.images.ic_battery_3_bar, + titleId = MR.strings.v5_5_message_delivery, + descrId = MR.strings.v5_5_message_delivery_descr + ), + FeatureDescription( + icon = MR.images.ic_translate, + titleId = MR.strings.v5_5_new_interface_languages, + descrId = MR.strings.whats_new_thanks_to_users_contribute_weblate, + link = "https://github.com/simplex-chat/simplex-chat/tree/stable#help-translating-simplex-chat" + ) + ) + ), ) private val lastVersion = versionDescriptions.last().version diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/base/strings.xml b/apps/multiplatform/common/src/commonMain/resources/MR/base/strings.xml index 47cf4bf3a..71ecc9963 100644 --- a/apps/multiplatform/common/src/commonMain/resources/MR/base/strings.xml +++ b/apps/multiplatform/common/src/commonMain/resources/MR/base/strings.xml @@ -1679,6 +1679,17 @@ <string name="v5_4_block_group_members">Block group members</string> <string name="v5_4_block_group_members_descr">To hide unwanted messages.</string> <string name="v5_4_more_things_descr">- optionally notify deleted contacts.\n- profile names with spaces.\n- and more!</string> + <string name="v5_5_private_notes">Private notes</string> + <string name="v5_5_private_notes_descr">With encrypted files and media.</string> + <string name="v5_5_simpler_connect_ui">Paste link to connect!</string> + <string name="v5_5_simpler_connect_ui_descr">Search bar accepts invitation links.</string> + <string name="v5_5_join_group_conversation">Join group conversations</string> + <string name="v5_5_join_group_conversation_descr">Recent history and improved directory bot.</string> + <string name="v5_5_safer_groups">Safer groups</string> + <string name="v5_5_safer_groups_descr">- block a member to stop spam for all.\n- contact address is not shared.</string> + <string name="v5_5_message_delivery">Improved message delivery</string> + <string name="v5_5_message_delivery_descr">With reduced battery usage.</string> + <string name="v5_5_new_interface_languages">Hungarian and Turkish UI</string> <!-- CustomTimePicker --> <string name="custom_time_unit_seconds">seconds</string> diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_folder_pen.svg b/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_folder_pen.svg new file mode 100644 index 000000000..f1aba5bee --- /dev/null +++ b/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_folder_pen.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" height="24" viewBox="0 -960 960 960" width="24"><path d="M142.5-222.5v-515 515Zm0 57.5q-22.969 0-40.234-17.266Q85-199.531 85-222.5v-515q0-22.969 17.266-40.234Q119.531-795 142.5-795h257q11.943 0 22.766 4.739 10.823 4.739 18.727 12.754L481-737.5h336.5q22.969 0 40.234 17.266Q875-702.969 875-680v193.5q-13.5-7.5-27.672-10.5t-29.828-3.5V-680H457l-57.5-57.5h-257v515h358-.5v57.5H142.5Zm415 51v-81q0-5.013 2-9.964 2-4.95 6.5-10.036l211.612-210.773q9.113-8.62 20.004-12.674 10.891-4.053 21.645-4.053 11.732 0 22.485 4.25Q852.5-434 861.5-425l37 37q8.765 8.855 12.632 19.677Q915-357.5 915-346.75t-4.382 22.031q-4.383 11.281-13.201 19.843L687.5-93.5q-5.086 4.5-9.949 6.5-4.864 2-10.051 2h-81q-12.25 0-20.625-8.375T557.5-114Zm299-233-37-37 37 37Zm-240 203h37.761L776.5-267l-17.887-19-18.88-18L616.5-182v38Zm142-142-19-18 37 37-18-19Z"/></svg> \ No newline at end of file diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_forum.svg b/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_forum.svg new file mode 100644 index 000000000..0f556da86 --- /dev/null +++ b/apps/multiplatform/common/src/commonMain/resources/MR/images/ic_forum.svg @@ -0,0 +1 @@ +<svg xmlns="http://www.w3.org/2000/svg" height="24" viewBox="0 -960 960 960" width="24"><path d="M283-245.5q-14 0-27.25-13.75T242.5-287v-98H735v-333.5h100q14 0 26.75 14T874.5-676v517.5q0 19.5-17.75 26.5t-31.25-6.5l-107-107H283Zm-40.5-197-108 108Q121-321 103.25-328T85.5-354.5V-834q0-14 12.75-27.75T125-875.5h512q14.5 0 27.5 13.5t13 28v350q0 14-13 27.75T637-442.5H242.5ZM620-500v-318H143v318h477Zm-477 0v-318 318Z"/></svg> \ No newline at end of file From 5236e0f2016a0dd4b9412a868a3d2609a2175ea9 Mon Sep 17 00:00:00 2001 From: Evgeny Poberezkin <evgeny@poberezkin.com> Date: Thu, 18 Jan 2024 20:56:45 +0000 Subject: [PATCH 10/23] core: 5.4.4.0 --- package.yaml | 2 +- simplex-chat.cabal | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/package.yaml b/package.yaml index 55de68492..675e62eb4 100644 --- a/package.yaml +++ b/package.yaml @@ -1,5 +1,5 @@ name: simplex-chat -version: 5.4.3.0 +version: 5.4.4.0 #synopsis: #description: homepage: https://github.com/simplex-chat/simplex-chat#readme diff --git a/simplex-chat.cabal b/simplex-chat.cabal index 192905b2c..ddac01df0 100644 --- a/simplex-chat.cabal +++ b/simplex-chat.cabal @@ -5,7 +5,7 @@ cabal-version: 1.12 -- see: https://github.com/sol/hpack name: simplex-chat -version: 5.4.3.0 +version: 5.4.4.0 category: Web, System, Services, Cryptography homepage: https://github.com/simplex-chat/simplex-chat#readme author: simplex.chat From 16f53490c5156e4224044813b7fb694eba444e0d Mon Sep 17 00:00:00 2001 From: spaced4ndy <8711996+spaced4ndy@users.noreply.github.com> Date: Fri, 19 Jan 2024 17:57:04 +0400 Subject: [PATCH 11/23] core: block member for all (#3689) * core: silence member wip * change approach * more types * remove comment * bool in protocol msg * flag in items, event * send event, process * apply moderation * remove comment * filter for forward, view * tests * rename * separate response, check already blocked * add test * fix terminal api * add comment * don't send profile update * corrections * refactor * rework - flag blocked by admin * blocked in intro * fix test * cant block unblock self * muted view, create unknown member * blocked by admin in members list * create with maybe null * protocol changes * align code with protocol * revert terminal api * restrict block api for admins * stabilize test * rename * update protocol/types * refactor * refactor2 * stabilize test * member field --------- Co-authored-by: Evgeny Poberezkin <evgeny@poberezkin.com> --- simplex-chat.cabal | 1 + src/Simplex/Chat.hs | 164 +++++++-- src/Simplex/Chat/Controller.hs | 6 + src/Simplex/Chat/Messages.hs | 5 + src/Simplex/Chat/Messages/CIContent.hs | 13 + src/Simplex/Chat/Messages/CIContent/Events.hs | 2 + .../M20240115_block_member_for_all.hs | 18 + src/Simplex/Chat/Migrations/chat_schema.sql | 1 + src/Simplex/Chat/Protocol.hs | 24 +- src/Simplex/Chat/Store/Connections.hs | 4 +- src/Simplex/Chat/Store/Groups.hs | 100 +++-- src/Simplex/Chat/Store/Messages.hs | 54 ++- src/Simplex/Chat/Store/Migrations.hs | 4 +- src/Simplex/Chat/Types.hs | 59 ++- src/Simplex/Chat/View.hs | 34 +- tests/ChatTests/Direct.hs | 29 +- tests/ChatTests/Groups.hs | 345 +++++++++++++++++- tests/ProtocolTests.hs | 7 +- 18 files changed, 751 insertions(+), 119 deletions(-) create mode 100644 src/Simplex/Chat/Migrations/M20240115_block_member_for_all.hs diff --git a/simplex-chat.cabal b/simplex-chat.cabal index 22113f3c2..2cbc790c2 100644 --- a/simplex-chat.cabal +++ b/simplex-chat.cabal @@ -131,6 +131,7 @@ library Simplex.Chat.Migrations.M20231215_recreate_msg_deliveries Simplex.Chat.Migrations.M20240102_note_folders Simplex.Chat.Migrations.M20240104_members_profile_update + Simplex.Chat.Migrations.M20240115_block_member_for_all Simplex.Chat.Mobile Simplex.Chat.Mobile.File Simplex.Chat.Mobile.Shared diff --git a/src/Simplex/Chat.hs b/src/Simplex/Chat.hs index b87f6a7d0..fcb7be61b 100644 --- a/src/Simplex/Chat.hs +++ b/src/Simplex/Chat.hs @@ -1290,9 +1290,8 @@ processChatCommand' vr = \case m <- withStore $ \db -> do liftIO $ updateGroupMemberSettings db user gId gMemberId settings getGroupMember db user gId gMemberId - when (memberActive m) $ forM_ (memberConnId m) $ \connId -> do - let ntfOn = showMessages $ memberSettings m - withAgent (\a -> toggleConnectionNtfs a connId ntfOn) `catchChatError` (toView . CRChatError (Just user)) + let ntfOn = showMessages $ memberSettings m + toggleNtf user m ntfOn ok user APIContactInfo contactId -> withUser $ \user@User {userId} -> do -- [incognito] print user's incognito profile for this contact @@ -1410,7 +1409,10 @@ processChatCommand' vr = \case SetSendReceipts cName rcptsOn_ -> updateChatSettings cName (\cs -> cs {sendRcpts = rcptsOn_}) SetShowMemberMessages gName mName showMessages -> withUser $ \user -> do (gId, mId) <- getGroupAndMemberId user gName mName + gInfo <- withStore $ \db -> getGroupInfo db vr user gId m <- withStore $ \db -> getGroupMember db user gId mId + let GroupInfo {membership = GroupMember {memberRole = membershipRole}} = gInfo + when (membershipRole >= GRAdmin) $ throwChatError $ CECantBlockMemberForSelf gInfo m showMessages let settings = (memberSettings m) {showMessages} processChatCommand $ APISetMemberSettings gId mId settings ContactInfo cName -> withContactName cName APIContactInfo @@ -1721,6 +1723,31 @@ processChatCommand' vr = \case ci <- saveSndChatItem user (CDGroupSnd gInfo) msg (CISndGroupEvent gEvent) toView $ CRNewChatItem user (AChatItem SCTGroup SMDSnd (GroupChat gInfo) ci) pure CRMemberRoleUser {user, groupInfo = gInfo, member = m {memberRole = memRole}, fromRole = mRole, toRole = memRole} + APIBlockMemberForAll groupId memberId blocked -> withUser $ \user -> do + Group gInfo@GroupInfo {membership} members <- withStore $ \db -> getGroup db vr user groupId + when (memberId == groupMemberId' membership) $ throwChatError $ CECommandError "can't block/unblock self" + case splitMember memberId members of + Nothing -> throwChatError $ CEException "expected to find a single blocked member" + Just (bm, remainingMembers) -> do + let GroupMember {memberId = bmMemberId, memberRole = bmRole, memberProfile = bmp} = bm + assertUserGroupRole gInfo $ max GRAdmin bmRole + when (blocked == blockedByAdmin bm) $ throwChatError $ CECommandError $ if blocked then "already blocked" else "already unblocked" + withChatLock "blockForAll" . procCmd $ do + let mrs = if blocked then MRSBlocked else MRSUnrestricted + event = XGrpMemRestrict bmMemberId MemberRestrictions {restriction = mrs} + (msg, _) <- sendGroupMessage' user gInfo remainingMembers event + let ciContent = CISndGroupEvent $ SGEMemberBlocked memberId (fromLocalProfile bmp) blocked + ci <- saveSndChatItem user (CDGroupSnd gInfo) msg ciContent + toView $ CRNewChatItem user (AChatItem SCTGroup SMDSnd (GroupChat gInfo) ci) + bm' <- withStore $ \db -> do + liftIO $ updateGroupMemberBlocked db user groupId memberId mrs + getGroupMember db user groupId memberId + toggleNtf user bm' (not blocked) + pure CRMemberBlockedForAllUser {user, groupInfo = gInfo, member = bm', blocked} + where + splitMember mId ms = case break ((== mId) . groupMemberId') ms of + (_, []) -> Nothing + (ms1, bm : ms2) -> Just (bm, ms1 <> ms2) APIRemoveMember groupId memberId -> withUser $ \user -> do Group gInfo members <- withStore $ \db -> getGroup db vr user groupId case find ((== memberId) . groupMemberId') members of @@ -1761,6 +1788,7 @@ processChatCommand' vr = \case groupId <- withStore $ \db -> getGroupIdByName db user gName processChatCommand $ APIJoinGroup groupId MemberRole gName gMemberName memRole -> withMemberName gName gMemberName $ \gId gMemberId -> APIMemberRole gId gMemberId memRole + BlockForAll gName gMemberName blocked -> withMemberName gName gMemberName $ \gId gMemberId -> APIBlockMemberForAll gId gMemberId blocked RemoveMember gName gMemberName -> withMemberName gName gMemberName APIRemoveMember LeaveGroup gName -> withUser $ \user -> do groupId <- withStore $ \db -> getGroupIdByName db user gName @@ -2487,6 +2515,12 @@ processChatCommand' vr = \case cReqHashes = bimap hash hash cReqSchemas hash = ConnReqUriHash . C.sha256Hash . strEncode +toggleNtf :: ChatMonad m => User -> GroupMember -> Bool -> m () +toggleNtf user m ntfOn = + when (memberActive m) $ + forM_ (memberConnId m) $ \connId -> + withAgent (\a -> toggleConnectionNtfs a connId ntfOn) `catchChatError` (toView . CRChatError (Just user)) + data ChangedProfileContact = ChangedProfileContact { ct :: Contact, ct' :: Contact, @@ -3723,11 +3757,16 @@ processAgentMessageConn vr user@User {userId} corrId agentConnId agentMessage = shuffledIntros <- liftIO $ shuffleIntros intros if isCompatibleRange (memberChatVRange' m) batchSendVRange then do - let events = map (XGrpMemIntro . memberInfo . reMember) shuffledIntros + let events = map (memberIntro . reMember) shuffledIntros forM_ (L.nonEmpty events) $ \events' -> sendGroupMemberMessages user conn events' groupId else forM_ shuffledIntros $ \intro -> processIntro intro `catchChatError` (toView . CRChatError (Just user)) + memberIntro :: GroupMember -> ChatMsgEvent 'Json + memberIntro reMember = + let mInfo = memberInfo reMember + mRestrictions = memberRestrictions reMember + in XGrpMemIntro mInfo mRestrictions shuffleIntros :: [GroupMemberIntro] -> IO [GroupMemberIntro] shuffleIntros intros = do let (admins, others) = partition isAdmin intros @@ -3738,7 +3777,7 @@ processAgentMessageConn vr user@User {userId} corrId agentConnId agentMessage = isAdmin GroupMemberIntro {reMember = GroupMember {memberRole}} = memberRole >= GRAdmin hasPicture GroupMemberIntro {reMember = GroupMember {memberProfile = LocalProfile {image}}} = isJust image processIntro intro@GroupMemberIntro {introId} = do - void $ sendDirectMessage conn (XGrpMemIntro $ memberInfo (reMember intro)) (GroupId groupId) + void $ sendDirectMessage conn (memberIntro $ reMember intro) (GroupId groupId) withStore' $ \db -> updateIntroStatus db introId GMIntroSent sendHistory = when (isCompatibleRange (memberChatVRange' m) batchSendVRange) $ do @@ -3757,9 +3796,10 @@ processAgentMessageConn vr user@User {userId} corrId agentConnId agentMessage = | otherwise = Nothing itemForwardEvents :: CChatItem 'CTGroup -> m [ChatMsgEvent 'Json] itemForwardEvents cci = case cci of - (CChatItem SMDRcv ci@ChatItem {chatDir = CIGroupRcv sender, content = CIRcvMsgContent mc, file}) -> do - fInvDescr_ <- join <$> forM file getRcvFileInvDescr - processContentItem sender ci mc fInvDescr_ + (CChatItem SMDRcv ci@ChatItem {chatDir = CIGroupRcv sender, content = CIRcvMsgContent mc, file}) + | not (blockedByAdmin sender) -> do + fInvDescr_ <- join <$> forM file getRcvFileInvDescr + processContentItem sender ci mc fInvDescr_ (CChatItem SMDSnd ci@ChatItem {content = CISndMsgContent mc, file}) -> do fInvDescr_ <- join <$> forM file getSndFileInvDescr processContentItem membership ci mc fInvDescr_ @@ -3855,7 +3895,7 @@ processAgentMessageConn vr user@User {userId} corrId agentConnId agentMessage = checkSendRcpt $ rights aChatMsgs -- currently only a single message is forwarded let GroupMember {memberRole = membershipMemRole} = membership - when (membershipMemRole >= GRAdmin) $ case aChatMsgs of + when (membershipMemRole >= GRAdmin && not (blockedByAdmin m)) $ case aChatMsgs of [Right (ACMsg _ chatMsg)] -> forwardMsg_ chatMsg _ -> pure () where @@ -3877,10 +3917,11 @@ processAgentMessageConn vr user@User {userId} corrId agentConnId agentMessage = XInfo p -> xInfoMember gInfo m' p XGrpLinkMem p -> xGrpLinkMem gInfo m' conn' p XGrpMemNew memInfo -> xGrpMemNew gInfo m' memInfo msg brokerTs - XGrpMemIntro memInfo -> xGrpMemIntro gInfo m' memInfo + XGrpMemIntro memInfo memRestrictions_ -> xGrpMemIntro gInfo m' memInfo memRestrictions_ XGrpMemInv memId introInv -> xGrpMemInv gInfo m' memId introInv XGrpMemFwd memInfo introInv -> xGrpMemFwd gInfo m' memInfo introInv XGrpMemRole memId memRole -> xGrpMemRole gInfo m' memId memRole msg brokerTs + XGrpMemRestrict memId memRestrictions -> xGrpMemRestrict gInfo m' memId memRestrictions msg brokerTs XGrpMemCon memId -> xGrpMemCon gInfo m' memId XGrpMemDel memId -> xGrpMemDel gInfo m' memId msg brokerTs XGrpLeave -> xGrpLeave gInfo m' msg brokerTs @@ -3916,7 +3957,7 @@ processAgentMessageConn vr user@User {userId} corrId agentConnId agentMessage = -- invited members to which this member was introduced invitedMembers <- withStore' $ \db -> getForwardInvitedMembers db user m highlyAvailable let GroupMember {memberId} = m - ms = introducedMembers <> invitedMembers + ms = forwardedToGroupMembers (introducedMembers <> invitedMembers) chatMsg' msg = XGrpMsgForward memberId chatMsg' brokerTs unless (null ms) . void $ sendGroupMessage' user gInfo ms msg @@ -4506,37 +4547,49 @@ processAgentMessageConn vr user@User {userId} corrId agentConnId agentMessage = newGroupContentMessage :: GroupInfo -> GroupMember -> MsgContainer -> RcvMessage -> UTCTime -> Bool -> m () newGroupContentMessage gInfo m@GroupMember {memberId, memberRole} mc msg@RcvMessage {sharedMsgId_} brokerTs forwarded + | blockedByAdmin m = createBlockedByAdmin | isVoice content && not (groupFeatureAllowed SGFVoice gInfo) = rejected GFVoice | not (isVoice content) && isJust fInv_ && not (groupFeatureAllowed SGFFiles gInfo) = rejected GFFiles - | otherwise = do - let timed_ = - if forwarded - then rcvCITimed_ (Just Nothing) itemTTL - else rcvGroupCITimed gInfo itemTTL - live = fromMaybe False live_ + | otherwise = withStore' (\db -> getCIModeration db user gInfo memberId sharedMsgId_) >>= \case Just ciModeration -> do - applyModeration timed_ live ciModeration + applyModeration ciModeration withStore' $ \db -> deleteCIModeration db gInfo memberId sharedMsgId_ - Nothing -> createItem timed_ live + Nothing -> createContentItem where rejected f = void $ newChatItem (CIRcvGroupFeatureRejected f) Nothing Nothing False + timed' = if forwarded then rcvCITimed_ (Just Nothing) itemTTL else rcvGroupCITimed gInfo itemTTL + live' = fromMaybe False live_ ExtMsgContent content fInv_ itemTTL live_ = mcExtMsgContent mc - applyModeration timed_ live CIModeration {moderatorMember = moderator@GroupMember {memberRole = moderatorRole}, createdByMsgId, moderatedAt} - | moderatorRole < GRAdmin || moderatorRole < memberRole = - createItem timed_ live + createBlockedByAdmin | groupFeatureAllowed SGFFullDelete gInfo = do - ci <- saveRcvChatItem' user (CDGroupRcv gInfo m) msg sharedMsgId_ brokerTs CIRcvModerated Nothing timed_ False - ci' <- withStore' $ \db -> updateGroupChatItemModerated db user gInfo ci moderator moderatedAt - toView $ CRNewChatItem user $ AChatItem SCTGroup SMDRcv (GroupChat gInfo) ci' + ci <- saveRcvChatItem' user (CDGroupRcv gInfo m) msg sharedMsgId_ brokerTs CIRcvBlocked Nothing timed' False + ci' <- withStore' $ \db -> updateGroupCIBlockedByAdmin db user gInfo ci brokerTs + groupMsgToView gInfo ci' | otherwise = do - file_ <- processFileInvitation fInv_ content $ \db -> createRcvGroupFileTransfer db userId m - ci <- saveRcvChatItem' user (CDGroupRcv gInfo m) msg sharedMsgId_ brokerTs (CIRcvMsgContent content) (snd <$> file_) timed_ False + file_ <- processFileInv + ci <- createNonLive file_ + ci' <- withStore' $ \db -> markGroupCIBlockedByAdmin db user gInfo ci + groupMsgToView gInfo ci' + applyModeration CIModeration {moderatorMember = moderator@GroupMember {memberRole = moderatorRole}, createdByMsgId, moderatedAt} + | moderatorRole < GRAdmin || moderatorRole < memberRole = + createContentItem + | groupFeatureAllowed SGFFullDelete gInfo = do + ci <- saveRcvChatItem' user (CDGroupRcv gInfo m) msg sharedMsgId_ brokerTs CIRcvModerated Nothing timed' False + ci' <- withStore' $ \db -> updateGroupChatItemModerated db user gInfo ci moderator moderatedAt + groupMsgToView gInfo ci' + | otherwise = do + file_ <- processFileInv + ci <- createNonLive file_ toView =<< markGroupCIDeleted user gInfo ci createdByMsgId False (Just moderator) moderatedAt - createItem timed_ live = do - file_ <- processFileInvitation fInv_ content $ \db -> createRcvGroupFileTransfer db userId m - newChatItem (CIRcvMsgContent content) (snd <$> file_) timed_ live + createNonLive file_ = + saveRcvChatItem' user (CDGroupRcv gInfo m) msg sharedMsgId_ brokerTs (CIRcvMsgContent content) (snd <$> file_) timed' False + createContentItem = do + file_ <- processFileInv + newChatItem (CIRcvMsgContent content) (snd <$> file_) timed' live' when (showMessages $ memberSettings m) $ autoAcceptFile file_ + processFileInv = + processFileInvitation fInv_ content $ \db -> createRcvGroupFileTransfer db userId m newChatItem ciContent ciFile_ timed_ live = do ci <- saveRcvChatItem' user (CDGroupRcv gInfo m) msg sharedMsgId_ brokerTs ciContent ciFile_ timed_ live ci' <- blockedMember m ci $ withStore' $ \db -> markGroupChatItemBlocked db user gInfo ci @@ -5226,8 +5279,8 @@ processAgentMessageConn vr user@User {userId} corrId agentConnId agentMessage = groupMsgToView gInfo ci toView $ CRJoinedGroupMemberConnecting user gInfo m announcedMember - xGrpMemIntro :: GroupInfo -> GroupMember -> MemberInfo -> m () - xGrpMemIntro gInfo@GroupInfo {chatSettings} m@GroupMember {memberRole, localDisplayName = c} memInfo@(MemberInfo memId _ memChatVRange _) = do + xGrpMemIntro :: GroupInfo -> GroupMember -> MemberInfo -> Maybe MemberRestrictions -> m () + xGrpMemIntro gInfo@GroupInfo {chatSettings} m@GroupMember {memberRole, localDisplayName = c} memInfo@(MemberInfo memId _ memChatVRange _) memRestrictions = do case memberCategory m of GCHostMember -> withStore' (\db -> runExceptT $ getGroupMemberByMemberId db user gInfo memId) >>= \case @@ -5243,7 +5296,7 @@ processAgentMessageConn vr user@User {userId} corrId agentConnId agentMessage = | isCompatibleRange (fromChatVRange mcvr) groupNoDirectVRange -> pure Nothing | otherwise -> Just <$> createConn subMode let customUserProfileId = localProfileId <$> incognitoMembershipProfile gInfo - void $ withStore $ \db -> createIntroReMember db user gInfo m memInfo groupConnIds directConnIds customUserProfileId subMode + void $ withStore $ \db -> createIntroReMember db user gInfo m memInfo memRestrictions groupConnIds directConnIds customUserProfileId subMode _ -> messageError "x.grp.mem.intro can be only sent by host member" where createConn subMode = createAgentConnectionAsync user CFCreateConnGrpMemInv (chatHasNtfs chatSettings) SCMInvitation subMode @@ -5315,6 +5368,40 @@ processAgentMessageConn vr user@User {userId} corrId agentConnId agentMessage = checkHostRole GroupMember {memberRole, localDisplayName} memRole = when (memberRole < GRAdmin || memberRole < memRole) $ throwChatError (CEGroupContactRole localDisplayName) + xGrpMemRestrict :: GroupInfo -> GroupMember -> MemberId -> MemberRestrictions -> RcvMessage -> UTCTime -> m () + xGrpMemRestrict + gInfo@GroupInfo {groupId, membership = GroupMember {memberId = membershipMemId}} + m@GroupMember {memberRole = senderRole} + memId + MemberRestrictions {restriction} + msg + brokerTs + | membershipMemId == memId = + -- member shouldn't receive this message about themselves + messageError "x.grp.mem.restrict: admin blocks you" + | otherwise = + withStore' (\db -> runExceptT $ getGroupMemberByMemberId db user gInfo memId) >>= \case + Right bm@GroupMember {groupMemberId = bmId, memberRole, memberProfile = bmp} + | senderRole < GRAdmin || senderRole < memberRole -> messageError "x.grp.mem.restrict with insufficient member permissions" + | otherwise -> do + bm' <- setMemberBlocked bmId + toggleNtf user bm' (not blocked) + let ciContent = CIRcvGroupEvent $ RGEMemberBlocked bmId (fromLocalProfile bmp) blocked + ci <- saveRcvChatItem user (CDGroupRcv gInfo m) msg brokerTs ciContent + groupMsgToView gInfo ci + toView CRMemberBlockedForAll {user, groupInfo = gInfo, byMember = m, member = bm, blocked} + Left (SEGroupMemberNotFoundByMemberId _) -> do + bm <- createUnknownMember gInfo memId + bm' <- setMemberBlocked $ groupMemberId' bm + toView $ CRUnknownMemberBlocked user gInfo m bm' + Left e -> throwError $ ChatErrorStore e + where + setMemberBlocked bmId = + withStore $ \db -> do + liftIO $ updateGroupMemberBlocked db user groupId bmId restriction + getGroupMember db user groupId bmId + blocked = mrsBlocked restriction + xGrpMemCon :: GroupInfo -> GroupMember -> MemberId -> m () xGrpMemCon gInfo sendingMember memId = do refMember <- withStore $ \db -> getGroupMemberByMemberId db user gInfo memId @@ -5474,8 +5561,7 @@ processAgentMessageConn vr user@User {userId} corrId agentConnId agentMessage = withStore' (\db -> runExceptT $ getGroupMemberByMemberId db user gInfo memberId) >>= \case Right author -> processForwardedMsg author msg Left (SEGroupMemberNotFoundByMemberId _) -> do - let name = T.take 7 . safeDecodeUtf8 . B64.encode . unMemberId $ memberId - unknownAuthor <- withStore $ \db -> createNewUnknownGroupMember db vr user gInfo memberId name + unknownAuthor <- createUnknownMember gInfo memberId toView $ CRUnknownMemberCreated user gInfo m unknownAuthor processForwardedMsg unknownAuthor msg Left e -> throwError $ ChatErrorStore e @@ -5501,6 +5587,11 @@ processAgentMessageConn vr user@User {userId} corrId agentConnId agentMessage = XGrpInfo p' -> xGrpInfo gInfo author p' rcvMsg msgTs _ -> messageError $ "x.grp.msg.forward: unsupported forwarded event " <> T.pack (show $ toCMEventTag event) + createUnknownMember :: GroupInfo -> MemberId -> m GroupMember + createUnknownMember gInfo memberId = do + let name = T.take 7 . safeDecodeUtf8 . B64.encode . unMemberId $ memberId + withStore $ \db -> createNewUnknownGroupMember db vr user gInfo memberId name + directMsgReceived :: Contact -> Connection -> MsgMeta -> NonEmpty MsgReceipt -> m () directMsgReceived ct conn@Connection {connId} msgMeta msgRcpts = do checkIntegrityCreateItem (CDDirectRcv ct) msgMeta @@ -6437,6 +6528,7 @@ chatCommandP = "/_add #" *> (APIAddMember <$> A.decimal <* A.space <*> A.decimal <*> memberRole), "/_join #" *> (APIJoinGroup <$> A.decimal), "/_member role #" *> (APIMemberRole <$> A.decimal <* A.space <*> A.decimal <*> memberRole), + "/_block #" *> (APIBlockMemberForAll <$> A.decimal <* A.space <*> A.decimal <* A.space <* "blocked=" <*> onOffP), "/_remove #" *> (APIRemoveMember <$> A.decimal <* A.space <*> A.decimal), "/_leave #" *> (APILeaveGroup <$> A.decimal), "/_members #" *> (APIListMembers <$> A.decimal), @@ -6506,6 +6598,8 @@ chatCommandP = ("/add " <|> "/a ") *> char_ '#' *> (AddMember <$> displayName <* A.space <* char_ '@' <*> displayName <*> (memberRole <|> pure GRMember)), ("/join " <|> "/j ") *> char_ '#' *> (JoinGroup <$> displayName), ("/member role " <|> "/mr ") *> char_ '#' *> (MemberRole <$> displayName <* A.space <* char_ '@' <*> displayName <*> memberRole), + "/block for all #" *> (BlockForAll <$> displayName <* A.space <*> (char_ '@' *> displayName) <*> pure True), + "/unblock for all #" *> (BlockForAll <$> displayName <* A.space <*> (char_ '@' *> displayName) <*> pure False), ("/remove " <|> "/rm ") *> char_ '#' *> (RemoveMember <$> displayName <* A.space <* char_ '@' <*> displayName), ("/leave " <|> "/l ") *> char_ '#' *> (LeaveGroup <$> displayName), ("/delete #" <|> "/d #") *> (DeleteGroup <$> displayName), diff --git a/src/Simplex/Chat/Controller.hs b/src/Simplex/Chat/Controller.hs index aece4ef1a..d3c8698f9 100644 --- a/src/Simplex/Chat/Controller.hs +++ b/src/Simplex/Chat/Controller.hs @@ -294,6 +294,7 @@ data ChatCommand | APIAddMember GroupId ContactId GroupMemberRole | APIJoinGroup GroupId | APIMemberRole GroupId GroupMemberId GroupMemberRole + | APIBlockMemberForAll GroupId GroupMemberId Bool | APIRemoveMember GroupId GroupMemberId | APILeaveGroup GroupId | APIListMembers GroupId @@ -393,6 +394,7 @@ data ChatCommand | AddMember GroupName ContactName GroupMemberRole | JoinGroup GroupName | MemberRole GroupName ContactName GroupMemberRole + | BlockForAll GroupName ContactName Bool | RemoveMember GroupName ContactName | LeaveGroup GroupName | DeleteGroup GroupName @@ -630,11 +632,14 @@ data ChatResponse | CRJoinedGroupMemberConnecting {user :: User, groupInfo :: GroupInfo, hostMember :: GroupMember, member :: GroupMember} | CRMemberRole {user :: User, groupInfo :: GroupInfo, byMember :: GroupMember, member :: GroupMember, fromRole :: GroupMemberRole, toRole :: GroupMemberRole} | CRMemberRoleUser {user :: User, groupInfo :: GroupInfo, member :: GroupMember, fromRole :: GroupMemberRole, toRole :: GroupMemberRole} + | CRMemberBlockedForAll {user :: User, groupInfo :: GroupInfo, byMember :: GroupMember, member :: GroupMember, blocked :: Bool} + | CRMemberBlockedForAllUser {user :: User, groupInfo :: GroupInfo, member :: GroupMember, blocked :: Bool} | CRConnectedToGroupMember {user :: User, groupInfo :: GroupInfo, member :: GroupMember, memberContact :: Maybe Contact} | CRDeletedMember {user :: User, groupInfo :: GroupInfo, byMember :: GroupMember, deletedMember :: GroupMember} | CRDeletedMemberUser {user :: User, groupInfo :: GroupInfo, member :: GroupMember} | CRLeftMember {user :: User, groupInfo :: GroupInfo, member :: GroupMember} | CRUnknownMemberCreated {user :: User, groupInfo :: GroupInfo, forwardedByMember :: GroupMember, member :: GroupMember} + | CRUnknownMemberBlocked {user :: User, groupInfo :: GroupInfo, blockedByMember :: GroupMember, member :: GroupMember} | CRUnknownMemberAnnounced {user :: User, groupInfo :: GroupInfo, announcingMember :: GroupMember, unknownMember :: GroupMember, announcedMember :: GroupMember} | CRGroupEmpty {user :: User, groupInfo :: GroupInfo} | CRGroupRemoved {user :: User, groupInfo :: GroupInfo} @@ -1053,6 +1058,7 @@ data ChatErrorType | CEGroupDuplicateMemberId | CEGroupNotJoined {groupInfo :: GroupInfo} | CEGroupMemberNotActive + | CECantBlockMemberForSelf {groupInfo :: GroupInfo, member :: GroupMember, setShowMessages :: Bool} | CEGroupMemberUserRemoved | CEGroupMemberNotFound | CEGroupMemberIntroNotFound {contactName :: ContactName} diff --git a/src/Simplex/Chat/Messages.hs b/src/Simplex/Chat/Messages.hs index ec6eb91a2..325c8a13e 100644 --- a/src/Simplex/Chat/Messages.hs +++ b/src/Simplex/Chat/Messages.hs @@ -929,6 +929,7 @@ msgDeliveryStatusT' s = data CIDeleted (c :: ChatType) where CIDeleted :: Maybe UTCTime -> CIDeleted c CIBlocked :: Maybe UTCTime -> CIDeleted 'CTGroup + CIBlockedByAdmin :: Maybe UTCTime -> CIDeleted 'CTGroup CIModerated :: Maybe UTCTime -> GroupMember -> CIDeleted 'CTGroup deriving instance Show (CIDeleted c) @@ -938,6 +939,7 @@ data ACIDeleted = forall c. ChatTypeI c => ACIDeleted (SChatType c) (CIDeleted c data JSONCIDeleted = JCIDDeleted {deletedTs :: Maybe UTCTime, chatType :: ChatType} | JCIDBlocked {deletedTs :: Maybe UTCTime} + | JCIBlockedByAdmin {deletedTs :: Maybe UTCTime} | JCIDModerated {deletedTs :: Maybe UTCTime, byGroupMember :: GroupMember} deriving (Show) @@ -945,18 +947,21 @@ jsonCIDeleted :: forall d. ChatTypeI d => CIDeleted d -> JSONCIDeleted jsonCIDeleted = \case CIDeleted ts -> JCIDDeleted ts (toChatType $ chatTypeI @d) CIBlocked ts -> JCIDBlocked ts + CIBlockedByAdmin ts -> JCIBlockedByAdmin ts CIModerated ts m -> JCIDModerated ts m jsonACIDeleted :: JSONCIDeleted -> ACIDeleted jsonACIDeleted = \case JCIDDeleted ts cType -> case aChatType cType of ACT c -> ACIDeleted c $ CIDeleted ts JCIDBlocked ts -> ACIDeleted SCTGroup $ CIBlocked ts + JCIBlockedByAdmin ts -> ACIDeleted SCTGroup $ CIBlockedByAdmin ts JCIDModerated ts m -> ACIDeleted SCTGroup (CIModerated ts m) itemDeletedTs :: CIDeleted d -> Maybe UTCTime itemDeletedTs = \case CIDeleted ts -> ts CIBlocked ts -> ts + CIBlockedByAdmin ts -> ts CIModerated ts _ -> ts data ChatItemInfo = ChatItemInfo diff --git a/src/Simplex/Chat/Messages/CIContent.hs b/src/Simplex/Chat/Messages/CIContent.hs index cd448599d..f0ce2d627 100644 --- a/src/Simplex/Chat/Messages/CIContent.hs +++ b/src/Simplex/Chat/Messages/CIContent.hs @@ -138,6 +138,7 @@ data CIContent (d :: MsgDirection) where CIRcvGroupFeatureRejected :: GroupFeature -> CIContent 'MDRcv CISndModerated :: CIContent 'MDSnd CIRcvModerated :: CIContent 'MDRcv + CIRcvBlocked :: CIContent 'MDRcv CIInvalidJSON :: Text -> CIContent d -- ^ This type is used both in API and in DB, so we use different JSON encodings for the database and for the API -- ! ^ Nested sum types also have to use different encodings for database and API @@ -177,6 +178,7 @@ ciRequiresAttention content = case msgDirection @d of RGEMemberConnected -> False RGEMemberLeft -> False RGEMemberRole {} -> False + RGEMemberBlocked {} -> False RGEUserRole _ -> True RGEMemberDeleted {} -> False RGEUserDeleted -> True @@ -192,6 +194,7 @@ ciRequiresAttention content = case msgDirection @d of CIRcvChatFeatureRejected _ -> True CIRcvGroupFeatureRejected _ -> True CIRcvModerated -> True + CIRcvBlocked -> False CIInvalidJSON _ -> False newtype DBMsgErrorType = DBME MsgErrorType @@ -246,6 +249,7 @@ ciContentToText = \case CIRcvGroupFeatureRejected feature -> groupFeatureNameText feature <> ": received, prohibited" CISndModerated -> ciModeratedText CIRcvModerated -> ciModeratedText + CIRcvBlocked -> "blocked" CIInvalidJSON _ -> "invalid content JSON" ciGroupInvitationToText :: CIGroupInvitation -> GroupMemberRole -> Text @@ -263,6 +267,7 @@ rcvGroupEventToText = \case RGEMemberConnected -> "connected" RGEMemberLeft -> "left" RGEMemberRole _ p r -> "changed role of " <> profileToText p <> " to " <> safeDecodeUtf8 (strEncode r) + RGEMemberBlocked _ p blocked -> (if blocked then "blocked" else "unblocked") <> " " <> profileToText p RGEUserRole r -> "changed your role to " <> safeDecodeUtf8 (strEncode r) RGEMemberDeleted _ p -> "removed " <> profileToText p RGEUserDeleted -> "removed you" @@ -275,6 +280,7 @@ rcvGroupEventToText = \case sndGroupEventToText :: SndGroupEvent -> Text sndGroupEventToText = \case SGEMemberRole _ p r -> "changed role of " <> profileToText p <> " to " <> safeDecodeUtf8 (strEncode r) + SGEMemberBlocked _ p blocked -> (if blocked then "blocked" else "unblocked") <> " " <> profileToText p SGEUserRole r -> "changed role for yourself to " <> safeDecodeUtf8 (strEncode r) SGEMemberDeleted _ p -> "removed " <> profileToText p SGEUserLeft -> "left" @@ -375,6 +381,7 @@ data JSONCIContent | JCIRcvGroupFeatureRejected {groupFeature :: GroupFeature} | JCISndModerated | JCIRcvModerated + | JCIRcvBlocked | JCIInvalidJSON {direction :: MsgDirection, json :: Text} jsonCIContent :: forall d. MsgDirectionI d => CIContent d -> JSONCIContent @@ -404,6 +411,7 @@ jsonCIContent = \case CIRcvGroupFeatureRejected groupFeature -> JCIRcvGroupFeatureRejected {groupFeature} CISndModerated -> JCISndModerated CIRcvModerated -> JCIRcvModerated + CIRcvBlocked -> JCIRcvBlocked CIInvalidJSON json -> JCIInvalidJSON (toMsgDirection $ msgDirection @d) json aciContentJSON :: JSONCIContent -> ACIContent @@ -433,6 +441,7 @@ aciContentJSON = \case JCIRcvGroupFeatureRejected {groupFeature} -> ACIContent SMDRcv $ CIRcvGroupFeatureRejected groupFeature JCISndModerated -> ACIContent SMDSnd CISndModerated JCIRcvModerated -> ACIContent SMDRcv CIRcvModerated + JCIRcvBlocked -> ACIContent SMDRcv CIRcvBlocked JCIInvalidJSON dir json -> case fromMsgDirection dir of AMsgDirection d -> ACIContent d $ CIInvalidJSON json @@ -463,6 +472,7 @@ data DBJSONCIContent | DBJCIRcvGroupFeatureRejected {groupFeature :: GroupFeature} | DBJCISndModerated | DBJCIRcvModerated + | DBJCIRcvBlocked | DBJCIInvalidJSON {direction :: MsgDirection, json :: Text} dbJsonCIContent :: forall d. MsgDirectionI d => CIContent d -> DBJSONCIContent @@ -492,6 +502,7 @@ dbJsonCIContent = \case CIRcvGroupFeatureRejected groupFeature -> DBJCIRcvGroupFeatureRejected {groupFeature} CISndModerated -> DBJCISndModerated CIRcvModerated -> DBJCIRcvModerated + CIRcvBlocked -> DBJCIRcvBlocked CIInvalidJSON json -> DBJCIInvalidJSON (toMsgDirection $ msgDirection @d) json aciContentDBJSON :: DBJSONCIContent -> ACIContent @@ -521,6 +532,7 @@ aciContentDBJSON = \case DBJCIRcvGroupFeatureRejected {groupFeature} -> ACIContent SMDRcv $ CIRcvGroupFeatureRejected groupFeature DBJCISndModerated -> ACIContent SMDSnd CISndModerated DBJCIRcvModerated -> ACIContent SMDRcv CIRcvModerated + DBJCIRcvBlocked -> ACIContent SMDRcv CIRcvBlocked DBJCIInvalidJSON dir json -> case fromMsgDirection dir of AMsgDirection d -> ACIContent d $ CIInvalidJSON json @@ -613,4 +625,5 @@ toCIContentTag ciContent = case ciContent of CIRcvGroupFeatureRejected _ -> "rcvGroupFeatureRejected" CISndModerated -> "sndModerated" CIRcvModerated -> "rcvModerated" + CIRcvBlocked -> "rcvBlocked" CIInvalidJSON _ -> "invalidJSON" diff --git a/src/Simplex/Chat/Messages/CIContent/Events.hs b/src/Simplex/Chat/Messages/CIContent/Events.hs index 3bb3ee836..05417a2e1 100644 --- a/src/Simplex/Chat/Messages/CIContent/Events.hs +++ b/src/Simplex/Chat/Messages/CIContent/Events.hs @@ -15,6 +15,7 @@ data RcvGroupEvent | RGEMemberConnected -- CRUserJoinedGroup, CRJoinedGroupMember, CRConnectedToGroupMember | RGEMemberLeft -- CRLeftMember | RGEMemberRole {groupMemberId :: GroupMemberId, profile :: Profile, role :: GroupMemberRole} + | RGEMemberBlocked {groupMemberId :: GroupMemberId, profile :: Profile, blocked :: Bool} -- CRMemberBlockedForAll | RGEUserRole {role :: GroupMemberRole} | RGEMemberDeleted {groupMemberId :: GroupMemberId, profile :: Profile} -- CRDeletedMember | RGEUserDeleted -- CRDeletedMemberUser @@ -30,6 +31,7 @@ data RcvGroupEvent data SndGroupEvent = SGEMemberRole {groupMemberId :: GroupMemberId, profile :: Profile, role :: GroupMemberRole} + | SGEMemberBlocked {groupMemberId :: GroupMemberId, profile :: Profile, blocked :: Bool} -- CRMemberBlockedForAllUser | SGEUserRole {role :: GroupMemberRole} | SGEMemberDeleted {groupMemberId :: GroupMemberId, profile :: Profile} -- CRUserDeletedMember | SGEUserLeft -- CRLeftMemberUser diff --git a/src/Simplex/Chat/Migrations/M20240115_block_member_for_all.hs b/src/Simplex/Chat/Migrations/M20240115_block_member_for_all.hs new file mode 100644 index 000000000..af2448e42 --- /dev/null +++ b/src/Simplex/Chat/Migrations/M20240115_block_member_for_all.hs @@ -0,0 +1,18 @@ +{-# LANGUAGE QuasiQuotes #-} + +module Simplex.Chat.Migrations.M20240115_block_member_for_all where + +import Database.SQLite.Simple (Query) +import Database.SQLite.Simple.QQ (sql) + +m20240115_block_member_for_all :: Query +m20240115_block_member_for_all = + [sql| +ALTER TABLE group_members ADD COLUMN member_restriction TEXT; +|] + +down_m20240115_block_member_for_all :: Query +down_m20240115_block_member_for_all = + [sql| +ALTER TABLE group_members DROP COLUMN member_restriction; +|] diff --git a/src/Simplex/Chat/Migrations/chat_schema.sql b/src/Simplex/Chat/Migrations/chat_schema.sql index 0d048417e..3a7f28e33 100644 --- a/src/Simplex/Chat/Migrations/chat_schema.sql +++ b/src/Simplex/Chat/Migrations/chat_schema.sql @@ -152,6 +152,7 @@ CREATE TABLE group_members( invited_by_group_member_id INTEGER REFERENCES group_members ON DELETE SET NULL, peer_chat_min_version INTEGER NOT NULL DEFAULT 1, peer_chat_max_version INTEGER NOT NULL DEFAULT 1, + member_restriction TEXT, FOREIGN KEY(user_id, local_display_name) REFERENCES display_names(user_id, local_display_name) ON DELETE CASCADE diff --git a/src/Simplex/Chat/Protocol.hs b/src/Simplex/Chat/Protocol.hs index 0ad1afde6..c4423bfe6 100644 --- a/src/Simplex/Chat/Protocol.hs +++ b/src/Simplex/Chat/Protocol.hs @@ -244,11 +244,12 @@ data ChatMsgEvent (e :: MsgEncoding) where XGrpLinkInv :: GroupLinkInvitation -> ChatMsgEvent 'Json XGrpLinkMem :: Profile -> ChatMsgEvent 'Json XGrpMemNew :: MemberInfo -> ChatMsgEvent 'Json - XGrpMemIntro :: MemberInfo -> ChatMsgEvent 'Json + XGrpMemIntro :: MemberInfo -> Maybe MemberRestrictions -> ChatMsgEvent 'Json XGrpMemInv :: MemberId -> IntroInvitation -> ChatMsgEvent 'Json XGrpMemFwd :: MemberInfo -> IntroInvitation -> ChatMsgEvent 'Json XGrpMemInfo :: MemberId -> Profile -> ChatMsgEvent 'Json XGrpMemRole :: MemberId -> GroupMemberRole -> ChatMsgEvent 'Json + XGrpMemRestrict :: MemberId -> MemberRestrictions -> ChatMsgEvent 'Json XGrpMemCon :: MemberId -> ChatMsgEvent 'Json XGrpMemConAll :: MemberId -> ChatMsgEvent 'Json -- TODO not implemented XGrpMemDel :: MemberId -> ChatMsgEvent 'Json @@ -290,6 +291,7 @@ isForwardedGroupMsg ev = case ev of XInfo _ -> True XGrpMemNew _ -> True XGrpMemRole {} -> True + XGrpMemRestrict {} -> True XGrpMemDel _ -> True -- TODO there should be a special logic when deleting host member (e.g., host forwards it before deleting connections) XGrpLeave -> True XGrpDel -> True -- TODO there should be a special logic - host should forward before deleting connections @@ -301,6 +303,14 @@ forwardedGroupMsg msg@ChatMessage {chatMsgEvent} = case encoding @e of SJson | isForwardedGroupMsg chatMsgEvent -> Just msg _ -> Nothing +-- applied after checking forwardedGroupMsg and building list of group members to forward to, see Chat +forwardedToGroupMembers :: forall e. MsgEncodingI e => [GroupMember] -> ChatMessage e -> [GroupMember] +forwardedToGroupMembers ms ChatMessage {chatMsgEvent} = case encoding @e of + SJson -> case chatMsgEvent of + XGrpMemRestrict mId _ -> filter (\GroupMember {memberId} -> memberId /= mId) ms + _ -> ms + _ -> [] + data MsgReaction = MREmoji {emoji :: MREmojiChar} | MRUnknown {tag :: Text, json :: J.Object} deriving (Eq, Show) @@ -629,6 +639,7 @@ data CMEventTag (e :: MsgEncoding) where XGrpMemFwd_ :: CMEventTag 'Json XGrpMemInfo_ :: CMEventTag 'Json XGrpMemRole_ :: CMEventTag 'Json + XGrpMemRestrict_ :: CMEventTag 'Json XGrpMemCon_ :: CMEventTag 'Json XGrpMemConAll_ :: CMEventTag 'Json XGrpMemDel_ :: CMEventTag 'Json @@ -678,6 +689,7 @@ instance MsgEncodingI e => StrEncoding (CMEventTag e) where XGrpMemFwd_ -> "x.grp.mem.fwd" XGrpMemInfo_ -> "x.grp.mem.info" XGrpMemRole_ -> "x.grp.mem.role" + XGrpMemRestrict_ -> "x.grp.mem.restrict" XGrpMemCon_ -> "x.grp.mem.con" XGrpMemConAll_ -> "x.grp.mem.con.all" XGrpMemDel_ -> "x.grp.mem.del" @@ -728,6 +740,7 @@ instance StrEncoding ACMEventTag where "x.grp.mem.fwd" -> XGrpMemFwd_ "x.grp.mem.info" -> XGrpMemInfo_ "x.grp.mem.role" -> XGrpMemRole_ + "x.grp.mem.restrict" -> XGrpMemRestrict_ "x.grp.mem.con" -> XGrpMemCon_ "x.grp.mem.con.all" -> XGrpMemConAll_ "x.grp.mem.del" -> XGrpMemDel_ @@ -769,11 +782,12 @@ toCMEventTag msg = case msg of XGrpLinkInv _ -> XGrpLinkInv_ XGrpLinkMem _ -> XGrpLinkMem_ XGrpMemNew _ -> XGrpMemNew_ - XGrpMemIntro _ -> XGrpMemIntro_ + XGrpMemIntro _ _ -> XGrpMemIntro_ XGrpMemInv _ _ -> XGrpMemInv_ XGrpMemFwd _ _ -> XGrpMemFwd_ XGrpMemInfo _ _ -> XGrpMemInfo_ XGrpMemRole _ _ -> XGrpMemRole_ + XGrpMemRestrict _ _ -> XGrpMemRestrict_ XGrpMemCon _ -> XGrpMemCon_ XGrpMemConAll _ -> XGrpMemConAll_ XGrpMemDel _ -> XGrpMemDel_ @@ -868,11 +882,12 @@ appJsonToCM AppMessageJson {v, msgId, event, params} = do XGrpLinkInv_ -> XGrpLinkInv <$> p "groupLinkInvitation" XGrpLinkMem_ -> XGrpLinkMem <$> p "profile" XGrpMemNew_ -> XGrpMemNew <$> p "memberInfo" - XGrpMemIntro_ -> XGrpMemIntro <$> p "memberInfo" + XGrpMemIntro_ -> XGrpMemIntro <$> p "memberInfo" <*> opt "memberRestrictions" XGrpMemInv_ -> XGrpMemInv <$> p "memberId" <*> p "memberIntro" XGrpMemFwd_ -> XGrpMemFwd <$> p "memberInfo" <*> p "memberIntro" XGrpMemInfo_ -> XGrpMemInfo <$> p "memberId" <*> p "profile" XGrpMemRole_ -> XGrpMemRole <$> p "memberId" <*> p "role" + XGrpMemRestrict_ -> XGrpMemRestrict <$> p "memberId" <*> p "memberRestrictions" XGrpMemCon_ -> XGrpMemCon <$> p "memberId" XGrpMemConAll_ -> XGrpMemConAll <$> p "memberId" XGrpMemDel_ -> XGrpMemDel <$> p "memberId" @@ -928,11 +943,12 @@ chatToAppMessage ChatMessage {chatVRange, msgId, chatMsgEvent} = case encoding @ XGrpLinkInv groupLinkInv -> o ["groupLinkInvitation" .= groupLinkInv] XGrpLinkMem profile -> o ["profile" .= profile] XGrpMemNew memInfo -> o ["memberInfo" .= memInfo] - XGrpMemIntro memInfo -> o ["memberInfo" .= memInfo] + XGrpMemIntro memInfo memRestrictions -> o $ ("memberRestrictions" .=? memRestrictions) ["memberInfo" .= memInfo] XGrpMemInv memId memIntro -> o ["memberId" .= memId, "memberIntro" .= memIntro] XGrpMemFwd memInfo memIntro -> o ["memberInfo" .= memInfo, "memberIntro" .= memIntro] XGrpMemInfo memId profile -> o ["memberId" .= memId, "profile" .= profile] XGrpMemRole memId role -> o ["memberId" .= memId, "role" .= role] + XGrpMemRestrict memId memRestrictions -> o ["memberId" .= memId, "memberRestrictions" .= memRestrictions] XGrpMemCon memId -> o ["memberId" .= memId] XGrpMemConAll memId -> o ["memberId" .= memId] XGrpMemDel memId -> o ["memberId" .= memId] diff --git a/src/Simplex/Chat/Store/Connections.hs b/src/Simplex/Chat/Store/Connections.hs index 9f285549b..fdc370321 100644 --- a/src/Simplex/Chat/Store/Connections.hs +++ b/src/Simplex/Chat/Store/Connections.hs @@ -101,11 +101,11 @@ getConnectionEntity db vr user@User {userId, userContactId} agentConnId = do g.created_at, g.updated_at, g.chat_ts, g.user_member_profile_sent_at, -- GroupInfo {membership} mu.group_member_id, mu.group_id, mu.member_id, mu.peer_chat_min_version, mu.peer_chat_max_version, mu.member_role, mu.member_category, - mu.member_status, mu.show_messages, mu.invited_by, mu.invited_by_group_member_id, mu.local_display_name, mu.contact_id, mu.contact_profile_id, pu.contact_profile_id, + mu.member_status, mu.show_messages, mu.member_restriction, mu.invited_by, mu.invited_by_group_member_id, mu.local_display_name, mu.contact_id, mu.contact_profile_id, pu.contact_profile_id, -- GroupInfo {membership = GroupMember {memberProfile}} pu.display_name, pu.full_name, pu.image, pu.contact_link, pu.local_alias, pu.preferences, -- from GroupMember - m.group_member_id, m.group_id, m.member_id, m.peer_chat_min_version, m.peer_chat_max_version, m.member_role, m.member_category, m.member_status, m.show_messages, + m.group_member_id, m.group_id, m.member_id, m.peer_chat_min_version, m.peer_chat_max_version, m.member_role, m.member_category, m.member_status, m.show_messages, m.member_restriction, m.invited_by, m.invited_by_group_member_id, m.local_display_name, m.contact_id, m.contact_profile_id, p.contact_profile_id, p.display_name, p.full_name, p.image, p.contact_link, p.local_alias, p.preferences FROM group_members m JOIN contact_profiles p ON p.contact_profile_id = COALESCE(m.member_profile_id, m.contact_profile_id) diff --git a/src/Simplex/Chat/Store/Groups.hs b/src/Simplex/Chat/Store/Groups.hs index d16812af2..189f95fdf 100644 --- a/src/Simplex/Chat/Store/Groups.hs +++ b/src/Simplex/Chat/Store/Groups.hs @@ -98,6 +98,7 @@ module Simplex.Chat.Store.Groups deleteOldProbes, updateGroupSettings, updateGroupMemberSettings, + updateGroupMemberBlocked, getXGrpMemIntroContDirect, getXGrpMemIntroContGroup, getHostConnId, @@ -147,9 +148,9 @@ import UnliftIO.STM type GroupInfoRow = (Int64, GroupName, GroupName, Text, Maybe Text, Maybe ImageData, Maybe ProfileId, Maybe MsgFilter, Maybe Bool, Bool, Maybe GroupPreferences) :. (UTCTime, UTCTime, Maybe UTCTime, Maybe UTCTime) :. GroupMemberRow -type GroupMemberRow = ((Int64, Int64, MemberId, Version, Version, GroupMemberRole, GroupMemberCategory, GroupMemberStatus, Bool) :. (Maybe Int64, Maybe GroupMemberId, ContactName, Maybe ContactId, ProfileId, ProfileId, ContactName, Text, Maybe ImageData, Maybe ConnReqContact, LocalAlias, Maybe Preferences)) +type GroupMemberRow = ((Int64, Int64, MemberId, Version, Version, GroupMemberRole, GroupMemberCategory, GroupMemberStatus, Bool, Maybe MemberRestrictionStatus) :. (Maybe Int64, Maybe GroupMemberId, ContactName, Maybe ContactId, ProfileId, ProfileId, ContactName, Text, Maybe ImageData, Maybe ConnReqContact, LocalAlias, Maybe Preferences)) -type MaybeGroupMemberRow = ((Maybe Int64, Maybe Int64, Maybe MemberId, Maybe Version, Maybe Version, Maybe GroupMemberRole, Maybe GroupMemberCategory, Maybe GroupMemberStatus, Maybe Bool) :. (Maybe Int64, Maybe GroupMemberId, Maybe ContactName, Maybe ContactId, Maybe ProfileId, Maybe ProfileId, Maybe ContactName, Maybe Text, Maybe ImageData, Maybe ConnReqContact, Maybe LocalAlias, Maybe Preferences)) +type MaybeGroupMemberRow = ((Maybe Int64, Maybe Int64, Maybe MemberId, Maybe Version, Maybe Version, Maybe GroupMemberRole, Maybe GroupMemberCategory, Maybe GroupMemberStatus, Maybe Bool, Maybe MemberRestrictionStatus) :. (Maybe Int64, Maybe GroupMemberId, Maybe ContactName, Maybe ContactId, Maybe ProfileId, Maybe ProfileId, Maybe ContactName, Maybe Text, Maybe ImageData, Maybe ConnReqContact, Maybe LocalAlias, Maybe Preferences)) toGroupInfo :: VersionRange -> Int64 -> GroupInfoRow -> GroupInfo toGroupInfo vr userContactId ((groupId, localDisplayName, displayName, fullName, description, image, hostConnCustomUserProfileId, enableNtfs_, sendRcpts, favorite, groupPreferences) :. (createdAt, updatedAt, chatTs, userMemberProfileSentAt) :. userMemberRow) = @@ -160,17 +161,18 @@ toGroupInfo vr userContactId ((groupId, localDisplayName, displayName, fullName, in GroupInfo {groupId, localDisplayName, groupProfile, fullGroupPreferences, membership, hostConnCustomUserProfileId, chatSettings, createdAt, updatedAt, chatTs, userMemberProfileSentAt} toGroupMember :: Int64 -> GroupMemberRow -> GroupMember -toGroupMember userContactId ((groupMemberId, groupId, memberId, minVer, maxVer, memberRole, memberCategory, memberStatus, showMessages) :. (invitedById, invitedByGroupMemberId, localDisplayName, memberContactId, memberContactProfileId, profileId, displayName, fullName, image, contactLink, localAlias, preferences)) = +toGroupMember userContactId ((groupMemberId, groupId, memberId, minVer, maxVer, memberRole, memberCategory, memberStatus, showMessages, memberRestriction_) :. (invitedById, invitedByGroupMemberId, localDisplayName, memberContactId, memberContactProfileId, profileId, displayName, fullName, image, contactLink, localAlias, preferences)) = let memberProfile = LocalProfile {profileId, displayName, fullName, image, contactLink, preferences, localAlias} memberSettings = GroupMemberSettings {showMessages} + blockedByAdmin = maybe False mrsBlocked memberRestriction_ invitedBy = toInvitedBy userContactId invitedById activeConn = Nothing memberChatVRange = JVersionRange $ fromMaybe (versionToRange maxVer) $ safeVersionRange minVer maxVer in GroupMember {..} toMaybeGroupMember :: Int64 -> MaybeGroupMemberRow -> Maybe GroupMember -toMaybeGroupMember userContactId ((Just groupMemberId, Just groupId, Just memberId, Just minVer, Just maxVer, Just memberRole, Just memberCategory, Just memberStatus, Just showMessages) :. (invitedById, invitedByGroupMemberId, Just localDisplayName, memberContactId, Just memberContactProfileId, Just profileId, Just displayName, Just fullName, image, contactLink, Just localAlias, contactPreferences)) = - Just $ toGroupMember userContactId ((groupMemberId, groupId, memberId, minVer, maxVer, memberRole, memberCategory, memberStatus, showMessages) :. (invitedById, invitedByGroupMemberId, localDisplayName, memberContactId, memberContactProfileId, profileId, displayName, fullName, image, contactLink, localAlias, contactPreferences)) +toMaybeGroupMember userContactId ((Just groupMemberId, Just groupId, Just memberId, Just minVer, Just maxVer, Just memberRole, Just memberCategory, Just memberStatus, Just showMessages, memberBlocked) :. (invitedById, invitedByGroupMemberId, Just localDisplayName, memberContactId, Just memberContactProfileId, Just profileId, Just displayName, Just fullName, image, contactLink, Just localAlias, contactPreferences)) = + Just $ toGroupMember userContactId ((groupMemberId, groupId, memberId, minVer, maxVer, memberRole, memberCategory, memberStatus, showMessages, memberBlocked) :. (invitedById, invitedByGroupMemberId, localDisplayName, memberContactId, memberContactProfileId, profileId, displayName, fullName, image, contactLink, localAlias, contactPreferences)) toMaybeGroupMember _ _ = Nothing createGroupLink :: DB.Connection -> User -> GroupInfo -> ConnId -> ConnReqContact -> GroupLinkId -> GroupMemberRole -> SubscriptionMode -> ExceptT StoreError IO () @@ -268,11 +270,11 @@ getGroupAndMember db User {userId, userContactId} groupMemberId vr = g.created_at, g.updated_at, g.chat_ts, g.user_member_profile_sent_at, -- GroupInfo {membership} mu.group_member_id, mu.group_id, mu.member_id, mu.peer_chat_min_version, mu.peer_chat_max_version, mu.member_role, mu.member_category, - mu.member_status, mu.show_messages, mu.invited_by, mu.invited_by_group_member_id, mu.local_display_name, mu.contact_id, mu.contact_profile_id, pu.contact_profile_id, + mu.member_status, mu.show_messages, mu.member_restriction, mu.invited_by, mu.invited_by_group_member_id, mu.local_display_name, mu.contact_id, mu.contact_profile_id, pu.contact_profile_id, -- GroupInfo {membership = GroupMember {memberProfile}} pu.display_name, pu.full_name, pu.image, pu.contact_link, pu.local_alias, pu.preferences, -- from GroupMember - m.group_member_id, m.group_id, m.member_id, m.peer_chat_min_version, m.peer_chat_max_version, m.member_role, m.member_category, m.member_status, m.show_messages, + m.group_member_id, m.group_id, m.member_id, m.peer_chat_min_version, m.peer_chat_max_version, m.member_role, m.member_category, m.member_status, m.show_messages, m.member_restriction, m.invited_by, m.invited_by_group_member_id, m.local_display_name, m.contact_id, m.contact_profile_id, p.contact_profile_id, p.display_name, p.full_name, p.image, p.contact_link, p.local_alias, p.preferences, c.connection_id, c.agent_conn_id, c.conn_level, c.via_contact, c.via_user_contact_link, c.via_group_link, c.group_link_id, c.custom_user_profile_id, c.conn_status, c.conn_type, c.contact_conn_initiated, c.local_alias, c.contact_id, c.group_member_id, c.snd_file_id, c.rcv_file_id, c.user_contact_link_id, c.created_at, c.security_code, c.security_code_verified_at, c.auth_err_counter, @@ -429,6 +431,7 @@ createContactMemberInv_ db User {userId, userContactId} groupId invitedByGroupMe memberCategory, memberStatus, memberSettings = defaultMemberSettings, + blockedByAdmin = False, invitedBy, invitedByGroupMemberId, localDisplayName, @@ -615,7 +618,7 @@ getUserGroupDetails db vr User {userId, userContactId} _contactId_ search_ = g.group_id, g.local_display_name, gp.display_name, gp.full_name, gp.description, gp.image, g.host_conn_custom_user_profile_id, g.enable_ntfs, g.send_rcpts, g.favorite, gp.preferences, g.created_at, g.updated_at, g.chat_ts, g.user_member_profile_sent_at, - mu.group_member_id, g.group_id, mu.member_id, mu.peer_chat_min_version, mu.peer_chat_max_version, mu.member_role, mu.member_category, mu.member_status, mu.show_messages, + mu.group_member_id, g.group_id, mu.member_id, mu.peer_chat_min_version, mu.peer_chat_max_version, mu.member_role, mu.member_category, mu.member_status, mu.show_messages, mu.member_restriction, mu.invited_by, mu.invited_by_group_member_id, mu.local_display_name, mu.contact_id, mu.contact_profile_id, pu.contact_profile_id, pu.display_name, pu.full_name, pu.image, pu.contact_link, pu.local_alias, pu.preferences FROM groups g JOIN group_profiles gp USING (group_profile_id) @@ -678,7 +681,7 @@ groupMemberQuery :: Query groupMemberQuery = [sql| SELECT - m.group_member_id, m.group_id, m.member_id, m.peer_chat_min_version, m.peer_chat_max_version, m.member_role, m.member_category, m.member_status, m.show_messages, + m.group_member_id, m.group_id, m.member_id, m.peer_chat_min_version, m.peer_chat_max_version, m.member_role, m.member_category, m.member_status, m.show_messages, m.member_restriction, m.invited_by, m.invited_by_group_member_id, m.local_display_name, m.contact_id, m.contact_profile_id, p.contact_profile_id, p.display_name, p.full_name, p.image, p.contact_link, p.local_alias, p.preferences, c.connection_id, c.agent_conn_id, c.conn_level, c.via_contact, c.via_user_contact_link, c.via_group_link, c.group_link_id, c.custom_user_profile_id, c.conn_status, c.conn_type, c.contact_conn_initiated, c.local_alias, c.contact_id, c.group_member_id, c.snd_file_id, c.rcv_file_id, c.user_contact_link_id, c.created_at, c.security_code, c.security_code_verified_at, c.auth_err_counter, @@ -797,6 +800,7 @@ createNewContactMember db gVar User {userId, userContactId} GroupInfo {groupId, memberCategory = GCInviteeMember, memberStatus = GSMemInvited, memberSettings = defaultMemberSettings, + blockedByAdmin = False, invitedBy = IBUser, invitedByGroupMemberId = Just invitedByGroupMemberId, localDisplayName, @@ -954,6 +958,7 @@ createNewGroupMember db user gInfo invitingMember memInfo@MemberInfo {profile} m { memInfo, memCategory, memStatus, + memRestriction = Nothing, memInvitedBy = IBUnknown, memInvitedByGroupMemberId = Just $ groupMemberId' invitingMember, localDisplayName, @@ -981,6 +986,7 @@ createNewMember_ { memInfo = MemberInfo memberId memberRole memChatVRange memberProfile, memCategory = memberCategory, memStatus = memberStatus, + memRestriction, memInvitedBy = invitedBy, memInvitedByGroupMemberId, localDisplayName, @@ -995,12 +1001,12 @@ createNewMember_ db [sql| INSERT INTO group_members - (group_id, member_id, member_role, member_category, member_status, invited_by, invited_by_group_member_id, + (group_id, member_id, member_role, member_category, member_status, member_restriction, invited_by, invited_by_group_member_id, user_id, local_display_name, contact_id, contact_profile_id, created_at, updated_at, peer_chat_min_version, peer_chat_max_version) - VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?) + VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?) |] - ( (groupId, memberId, memberRole, memberCategory, memberStatus, invitedById, memInvitedByGroupMemberId) + ( (groupId, memberId, memberRole, memberCategory, memberStatus, memRestriction, invitedById, memInvitedByGroupMemberId) :. (userId, localDisplayName, memberContactId, memberContactProfileId, createdAt, createdAt) :. (minV, maxV) ) @@ -1014,6 +1020,7 @@ createNewMember_ memberCategory, memberStatus, memberSettings = defaultMemberSettings, + blockedByAdmin = maybe False mrsBlocked memRestriction, invitedBy, invitedByGroupMemberId = memInvitedByGroupMemberId, localDisplayName, @@ -1189,26 +1196,37 @@ getForwardInvitedMembers db user forwardMember highlyAvailable = do WHERE re_group_member_id = ? AND intro_status NOT IN (?,?,?) |] -createIntroReMember :: DB.Connection -> User -> GroupInfo -> GroupMember -> MemberInfo -> (CommandId, ConnId) -> Maybe (CommandId, ConnId) -> Maybe ProfileId -> SubscriptionMode -> ExceptT StoreError IO GroupMember -createIntroReMember db user@User {userId} gInfo@GroupInfo {groupId} _host@GroupMember {memberContactId, activeConn} memInfo@(MemberInfo _ _ memChatVRange memberProfile) (groupCmdId, groupAgentConnId) directConnIds customUserProfileId subMode = do - let mcvr = maybe chatInitialVRange fromChatVRange memChatVRange - cLevel = 1 + maybe 0 (\Connection {connLevel} -> connLevel) activeConn - currentTs <- liftIO getCurrentTime - newMember <- case directConnIds of - Just (directCmdId, directAgentConnId) -> do - Connection {connId = directConnId} <- liftIO $ createConnection_ db userId ConnContact Nothing directAgentConnId mcvr memberContactId Nothing customUserProfileId cLevel currentTs subMode - liftIO $ setCommandConnId db user directCmdId directConnId - (localDisplayName, contactId, memProfileId) <- createContact_ db userId memberProfile "" (Just groupId) currentTs False - liftIO $ DB.execute db "UPDATE connections SET contact_id = ?, updated_at = ? WHERE connection_id = ?" (contactId, currentTs, directConnId) - pure $ NewGroupMember {memInfo, memCategory = GCPreMember, memStatus = GSMemIntroduced, memInvitedBy = IBUnknown, memInvitedByGroupMemberId = Nothing, localDisplayName, memContactId = Just contactId, memProfileId} - Nothing -> do - (localDisplayName, memProfileId) <- createNewMemberProfile_ db user memberProfile currentTs - pure $ NewGroupMember {memInfo, memCategory = GCPreMember, memStatus = GSMemIntroduced, memInvitedBy = IBUnknown, memInvitedByGroupMemberId = Nothing, localDisplayName, memContactId = Nothing, memProfileId} - liftIO $ do - member <- createNewMember_ db user gInfo newMember currentTs - conn@Connection {connId = groupConnId} <- createMemberConnection_ db userId (groupMemberId' member) groupAgentConnId mcvr memberContactId cLevel currentTs subMode - liftIO $ setCommandConnId db user groupCmdId groupConnId - pure (member :: GroupMember) {activeConn = Just conn} +createIntroReMember :: DB.Connection -> User -> GroupInfo -> GroupMember -> MemberInfo -> Maybe MemberRestrictions -> (CommandId, ConnId) -> Maybe (CommandId, ConnId) -> Maybe ProfileId -> SubscriptionMode -> ExceptT StoreError IO GroupMember +createIntroReMember + db + user@User {userId} + gInfo@GroupInfo {groupId} + _host@GroupMember {memberContactId, activeConn} + memInfo@(MemberInfo _ _ memChatVRange memberProfile) + memRestrictions_ + (groupCmdId, groupAgentConnId) + directConnIds + customUserProfileId + subMode = do + let mcvr = maybe chatInitialVRange fromChatVRange memChatVRange + cLevel = 1 + maybe 0 (\Connection {connLevel} -> connLevel) activeConn + memRestriction = restriction <$> memRestrictions_ + currentTs <- liftIO getCurrentTime + newMember <- case directConnIds of + Just (directCmdId, directAgentConnId) -> do + Connection {connId = directConnId} <- liftIO $ createConnection_ db userId ConnContact Nothing directAgentConnId mcvr memberContactId Nothing customUserProfileId cLevel currentTs subMode + liftIO $ setCommandConnId db user directCmdId directConnId + (localDisplayName, contactId, memProfileId) <- createContact_ db userId memberProfile "" (Just groupId) currentTs False + liftIO $ DB.execute db "UPDATE connections SET contact_id = ?, updated_at = ? WHERE connection_id = ?" (contactId, currentTs, directConnId) + pure $ NewGroupMember {memInfo, memCategory = GCPreMember, memStatus = GSMemIntroduced, memRestriction, memInvitedBy = IBUnknown, memInvitedByGroupMemberId = Nothing, localDisplayName, memContactId = Just contactId, memProfileId} + Nothing -> do + (localDisplayName, memProfileId) <- createNewMemberProfile_ db user memberProfile currentTs + pure $ NewGroupMember {memInfo, memCategory = GCPreMember, memStatus = GSMemIntroduced, memRestriction, memInvitedBy = IBUnknown, memInvitedByGroupMemberId = Nothing, localDisplayName, memContactId = Nothing, memProfileId} + liftIO $ do + member <- createNewMember_ db user gInfo newMember currentTs + conn@Connection {connId = groupConnId} <- createMemberConnection_ db userId (groupMemberId' member) groupAgentConnId mcvr memberContactId cLevel currentTs subMode + liftIO $ setCommandConnId db user groupCmdId groupConnId + pure (member :: GroupMember) {activeConn = Just conn} createIntroToMemberContact :: DB.Connection -> User -> GroupMember -> GroupMember -> VersionRange -> (CommandId, ConnId) -> Maybe (CommandId, ConnId) -> Maybe ProfileId -> SubscriptionMode -> IO () createIntroToMemberContact db user@User {userId} GroupMember {memberContactId = viaContactId, activeConn} _to@GroupMember {groupMemberId, localDisplayName} mcvr (groupCmdId, groupAgentConnId) directConnIds customUserProfileId subMode = do @@ -1263,11 +1281,11 @@ getViaGroupMember db vr User {userId, userContactId} Contact {contactId} = g.created_at, g.updated_at, g.chat_ts, g.user_member_profile_sent_at, -- GroupInfo {membership} mu.group_member_id, mu.group_id, mu.member_id, mu.peer_chat_min_version, mu.peer_chat_max_version, mu.member_role, mu.member_category, - mu.member_status, mu.show_messages, mu.invited_by, mu.invited_by_group_member_id, mu.local_display_name, mu.contact_id, mu.contact_profile_id, pu.contact_profile_id, + mu.member_status, mu.show_messages, mu.member_restriction, mu.invited_by, mu.invited_by_group_member_id, mu.local_display_name, mu.contact_id, mu.contact_profile_id, pu.contact_profile_id, -- GroupInfo {membership = GroupMember {memberProfile}} pu.display_name, pu.full_name, pu.image, pu.contact_link, pu.local_alias, pu.preferences, -- via GroupMember - m.group_member_id, m.group_id, m.member_id, m.peer_chat_min_version, m.peer_chat_max_version, m.member_role, m.member_category, m.member_status, m.show_messages, + m.group_member_id, m.group_id, m.member_id, m.peer_chat_min_version, m.peer_chat_max_version, m.member_role, m.member_category, m.member_status, m.show_messages, m.member_restriction, m.invited_by, m.invited_by_group_member_id, m.local_display_name, m.contact_id, m.contact_profile_id, p.contact_profile_id, p.display_name, p.full_name, p.image, p.contact_link, p.local_alias, p.preferences, c.connection_id, c.agent_conn_id, c.conn_level, c.via_contact, c.via_user_contact_link, c.via_group_link, c.group_link_id, c.custom_user_profile_id, c.conn_status, c.conn_type, c.contact_conn_initiated, c.local_alias, c.contact_id, c.group_member_id, c.snd_file_id, c.rcv_file_id, c.user_contact_link_id, c.created_at, c.security_code, c.security_code_verified_at, c.auth_err_counter, @@ -1358,7 +1376,7 @@ getGroupInfo db vr User {userId, userContactId} groupId = g.created_at, g.updated_at, g.chat_ts, g.user_member_profile_sent_at, -- GroupMember - membership mu.group_member_id, mu.group_id, mu.member_id, mu.peer_chat_min_version, mu.peer_chat_max_version, mu.member_role, mu.member_category, - mu.member_status, mu.show_messages, mu.invited_by, mu.invited_by_group_member_id, mu.local_display_name, mu.contact_id, mu.contact_profile_id, pu.contact_profile_id, + mu.member_status, mu.show_messages, mu.member_restriction, mu.invited_by, mu.invited_by_group_member_id, mu.local_display_name, mu.contact_id, mu.contact_profile_id, pu.contact_profile_id, pu.display_name, pu.full_name, pu.image, pu.contact_link, pu.local_alias, pu.preferences FROM groups g JOIN group_profiles gp ON gp.group_profile_id = g.group_profile_id @@ -1768,6 +1786,18 @@ updateGroupMemberSettings db User {userId} gId gMemberId GroupMemberSettings {sh |] (showMessages, currentTs, userId, gId, gMemberId) +updateGroupMemberBlocked :: DB.Connection -> User -> GroupId -> GroupMemberId -> MemberRestrictionStatus -> IO () +updateGroupMemberBlocked db User {userId} gId gMemberId memberBlocked = do + currentTs <- getCurrentTime + DB.execute + db + [sql| + UPDATE group_members + SET member_restriction = ?, updated_at = ? + WHERE user_id = ? AND group_id = ? AND group_member_id = ? + |] + (memberBlocked, currentTs, userId, gId, gMemberId) + getXGrpMemIntroContDirect :: DB.Connection -> User -> Contact -> IO (Maybe (Int64, XGrpMemIntroCont)) getXGrpMemIntroContDirect db User {userId} Contact {contactId} = do fmap join . maybeFirstRow toCont $ diff --git a/src/Simplex/Chat/Store/Messages.hs b/src/Simplex/Chat/Store/Messages.hs index 2ece41666..31373c17b 100644 --- a/src/Simplex/Chat/Store/Messages.hs +++ b/src/Simplex/Chat/Store/Messages.hs @@ -52,8 +52,10 @@ module Simplex.Chat.Store.Messages updateGroupChatItem, deleteGroupChatItem, updateGroupChatItemModerated, + updateGroupCIBlockedByAdmin, markGroupChatItemDeleted, markGroupChatItemBlocked, + markGroupCIBlockedByAdmin, deleteLocalChatItem, updateDirectChatItemsRead, getDirectUnreadTimedItems, @@ -462,7 +464,7 @@ getChatItemQuote_ db User {userId, userContactId} chatDirection QuotedMsg {msgRe SELECT i.chat_item_id, -- GroupMember m.group_member_id, m.group_id, m.member_id, m.peer_chat_min_version, m.peer_chat_max_version, m.member_role, m.member_category, - m.member_status, m.show_messages, m.invited_by, m.invited_by_group_member_id, m.local_display_name, m.contact_id, m.contact_profile_id, p.contact_profile_id, + m.member_status, m.show_messages, m.member_restriction, m.invited_by, m.invited_by_group_member_id, m.local_display_name, m.contact_id, m.contact_profile_id, p.contact_profile_id, p.display_name, p.full_name, p.image, p.contact_link, p.local_alias, p.preferences FROM group_members m JOIN contact_profiles p ON p.contact_profile_id = COALESCE(m.member_profile_id, m.contact_profile_id) @@ -828,7 +830,7 @@ toLocalChatItem currentTs ((itemId, itemTs, AMsgDirection msgDir, itemContentTex ciMeta content status = let itemDeleted' = case itemDeleted of DBCINotDeleted -> Nothing - _ -> Just (CIDeleted @'CTLocal deletedTs) + _ -> Just (CIDeleted @CTLocal deletedTs) itemEdited' = fromMaybe False itemEdited in mkCIMeta itemId content itemText status sharedMsgId itemDeleted' itemEdited' ciTimed itemLive currentTs itemTs Nothing createdAt updatedAt ciTimed :: Maybe CITimed @@ -1361,7 +1363,7 @@ toDirectChatItem currentTs (((itemId, itemTs, AMsgDirection msgDir, itemContentT ciMeta content status = let itemDeleted' = case itemDeleted of DBCINotDeleted -> Nothing - _ -> Just (CIDeleted @'CTDirect deletedTs) + _ -> Just (CIDeleted @CTDirect deletedTs) itemEdited' = fromMaybe False itemEdited in mkCIMeta itemId content itemText status sharedMsgId itemDeleted' itemEdited' ciTimed itemLive currentTs itemTs Nothing createdAt updatedAt ciTimed :: Maybe CITimed @@ -1413,7 +1415,8 @@ toGroupChatItem currentTs userContactId (((itemId, itemTs, AMsgDirection msgDir, let itemDeleted' = case itemDeleted of DBCINotDeleted -> Nothing DBCIBlocked -> Just (CIBlocked deletedTs) - _ -> Just (maybe (CIDeleted @'CTGroup deletedTs) (CIModerated deletedTs) deletedByGroupMember_) + DBCIBlockedByAdmin -> Just (CIBlockedByAdmin deletedTs) + _ -> Just (maybe (CIDeleted @CTGroup deletedTs) (CIModerated deletedTs) deletedByGroupMember_) itemEdited' = fromMaybe False itemEdited in mkCIMeta itemId content itemText status sharedMsgId itemDeleted' itemEdited' ciTimed itemLive currentTs itemTs forwardedByMember createdAt updatedAt ciTimed :: Maybe CITimed @@ -1764,7 +1767,24 @@ updateGroupChatItemModerated db User {userId} GroupInfo {groupId} ci m@GroupMemb WHERE user_id = ? AND group_id = ? AND chat_item_id = ? |] (deletedTs, groupMemberId, toContent, toText, currentTs, userId, groupId, itemId) - pure $ ci {content = toContent, meta = (meta ci) {itemText = toText, itemDeleted = Just (CIModerated (Just currentTs) m), editable = False}, formattedText = Nothing} + pure $ ci {content = toContent, meta = (meta ci) {itemText = toText, itemDeleted = Just (CIModerated (Just deletedTs) m), editable = False}, formattedText = Nothing} + +updateGroupCIBlockedByAdmin :: DB.Connection -> User -> GroupInfo -> ChatItem 'CTGroup d -> UTCTime -> IO (ChatItem 'CTGroup d) +updateGroupCIBlockedByAdmin db User {userId} GroupInfo {groupId} ci deletedTs = do + currentTs <- getCurrentTime + let itemId = chatItemId' ci + deleteChatItemMessages_ db itemId + deleteChatItemVersions_ db itemId + liftIO $ + DB.execute + db + [sql| + UPDATE chat_items + SET item_deleted = ?, item_deleted_ts = ?, updated_at = ? + WHERE user_id = ? AND group_id = ? AND chat_item_id = ? + |] + (DBCIBlockedByAdmin, deletedTs, currentTs, userId, groupId, itemId) + pure $ ci {meta = (meta ci) {itemDeleted = Just (CIBlockedByAdmin $ Just deletedTs), editable = False}, formattedText = Nothing} pattern DBCINotDeleted :: Int pattern DBCINotDeleted = 0 @@ -1775,13 +1795,16 @@ pattern DBCIDeleted = 1 pattern DBCIBlocked :: Int pattern DBCIBlocked = 2 +pattern DBCIBlockedByAdmin :: Int +pattern DBCIBlockedByAdmin = 3 + markGroupChatItemDeleted :: DB.Connection -> User -> GroupInfo -> ChatItem 'CTGroup d -> MessageId -> Maybe GroupMember -> UTCTime -> IO (ChatItem 'CTGroup d) markGroupChatItemDeleted db User {userId} GroupInfo {groupId} ci@ChatItem {meta} msgId byGroupMember_ deletedTs = do currentTs <- liftIO getCurrentTime let itemId = chatItemId' ci (deletedByGroupMemberId, itemDeleted) = case byGroupMember_ of Just m@GroupMember {groupMemberId} -> (Just groupMemberId, Just $ CIModerated (Just deletedTs) m) - _ -> (Nothing, Just $ CIDeleted @'CTGroup (Just deletedTs)) + _ -> (Nothing, Just $ CIDeleted @CTGroup (Just deletedTs)) insertChatItemMessage_ db itemId msgId currentTs DB.execute db @@ -1806,6 +1829,19 @@ markGroupChatItemBlocked db User {userId} GroupInfo {groupId} ci@ChatItem {meta} (DBCIBlocked, deletedTs, deletedTs, userId, groupId, chatItemId' ci) pure ci {meta = meta {itemDeleted = Just $ CIBlocked $ Just deletedTs}} +markGroupCIBlockedByAdmin :: DB.Connection -> User -> GroupInfo -> ChatItem 'CTGroup 'MDRcv -> IO (ChatItem 'CTGroup 'MDRcv) +markGroupCIBlockedByAdmin db User {userId} GroupInfo {groupId} ci@ChatItem {meta} = do + deletedTs <- getCurrentTime + DB.execute + db + [sql| + UPDATE chat_items + SET item_deleted = ?, item_deleted_ts = ?, updated_at = ? + WHERE user_id = ? AND group_id = ? AND chat_item_id = ? + |] + (DBCIBlockedByAdmin, deletedTs, deletedTs, userId, groupId, chatItemId' ci) + pure ci {meta = meta {itemDeleted = Just $ CIBlockedByAdmin $ Just deletedTs}} + getGroupChatItemBySharedMsgId :: DB.Connection -> User -> GroupId -> GroupMemberId -> SharedMsgId -> ExceptT StoreError IO (CChatItem 'CTGroup) getGroupChatItemBySharedMsgId db user@User {userId} groupId groupMemberId sharedMsgId = do itemId <- @@ -1864,17 +1900,17 @@ getGroupChatItem db User {userId, userContactId} groupId itemId = ExceptT $ do i.forwarded_by_group_member_id, -- GroupMember m.group_member_id, m.group_id, m.member_id, m.peer_chat_min_version, m.peer_chat_max_version, m.member_role, m.member_category, - m.member_status, m.show_messages, m.invited_by, m.invited_by_group_member_id, m.local_display_name, m.contact_id, m.contact_profile_id, p.contact_profile_id, + m.member_status, m.show_messages, m.member_restriction, m.invited_by, m.invited_by_group_member_id, m.local_display_name, m.contact_id, m.contact_profile_id, p.contact_profile_id, p.display_name, p.full_name, p.image, p.contact_link, p.local_alias, p.preferences, -- quoted ChatItem ri.chat_item_id, i.quoted_shared_msg_id, i.quoted_sent_at, i.quoted_content, i.quoted_sent, -- quoted GroupMember rm.group_member_id, rm.group_id, rm.member_id, rm.peer_chat_min_version, rm.peer_chat_max_version, rm.member_role, rm.member_category, - rm.member_status, rm.show_messages, rm.invited_by, rm.invited_by_group_member_id, rm.local_display_name, rm.contact_id, rm.contact_profile_id, rp.contact_profile_id, + rm.member_status, rm.show_messages, rm.member_restriction, rm.invited_by, rm.invited_by_group_member_id, rm.local_display_name, rm.contact_id, rm.contact_profile_id, rp.contact_profile_id, rp.display_name, rp.full_name, rp.image, rp.contact_link, rp.local_alias, rp.preferences, -- deleted by GroupMember dbm.group_member_id, dbm.group_id, dbm.member_id, dbm.peer_chat_min_version, dbm.peer_chat_max_version, dbm.member_role, dbm.member_category, - dbm.member_status, dbm.show_messages, dbm.invited_by, dbm.invited_by_group_member_id, dbm.local_display_name, dbm.contact_id, dbm.contact_profile_id, dbp.contact_profile_id, + dbm.member_status, dbm.show_messages, dbm.member_restriction, dbm.invited_by, dbm.invited_by_group_member_id, dbm.local_display_name, dbm.contact_id, dbm.contact_profile_id, dbp.contact_profile_id, dbp.display_name, dbp.full_name, dbp.image, dbp.contact_link, dbp.local_alias, dbp.preferences FROM chat_items i LEFT JOIN files f ON f.chat_item_id = i.chat_item_id diff --git a/src/Simplex/Chat/Store/Migrations.hs b/src/Simplex/Chat/Store/Migrations.hs index ffd5dbdf5..f9513dcc2 100644 --- a/src/Simplex/Chat/Store/Migrations.hs +++ b/src/Simplex/Chat/Store/Migrations.hs @@ -96,6 +96,7 @@ import Simplex.Chat.Migrations.M20231214_item_content_tag import Simplex.Chat.Migrations.M20231215_recreate_msg_deliveries import Simplex.Chat.Migrations.M20240102_note_folders import Simplex.Chat.Migrations.M20240104_members_profile_update +import Simplex.Chat.Migrations.M20240115_block_member_for_all import Simplex.Messaging.Agent.Store.SQLite.Migrations (Migration (..)) schemaMigrations :: [(String, Query, Maybe Query)] @@ -191,7 +192,8 @@ schemaMigrations = ("20231214_item_content_tag", m20231214_item_content_tag, Just down_m20231214_item_content_tag), ("20231215_recreate_msg_deliveries", m20231215_recreate_msg_deliveries, Just down_m20231215_recreate_msg_deliveries), ("20240102_note_folders", m20240102_note_folders, Just down_m20240102_note_folders), - ("20240104_members_profile_update", m20240104_members_profile_update, Just down_m20240104_members_profile_update) + ("20240104_members_profile_update", m20240104_members_profile_update, Just down_m20240104_members_profile_update), + ("20240115_block_member_for_all", m20240115_block_member_for_all, Just down_m20240115_block_member_for_all) ] -- | The list of migrations in ascending order by date diff --git a/src/Simplex/Chat/Types.hs b/src/Simplex/Chat/Types.hs index 417dfcb56..e65e1a916 100644 --- a/src/Simplex/Chat/Types.hs +++ b/src/Simplex/Chat/Types.hs @@ -35,6 +35,7 @@ import Data.Int (Int64) import Data.Maybe (isJust) import Data.Text (Text) import qualified Data.Text as T +import Data.Text.Encoding (encodeUtf8) import Data.Time.Clock (UTCTime) import Data.Typeable (Typeable) import Database.SQLite.Simple (ResultError (..), SQLData (..)) @@ -50,7 +51,7 @@ import Simplex.Messaging.Crypto.File (CryptoFileArgs (..)) import Simplex.Messaging.Encoding.String import Simplex.Messaging.Parsers (defaultJSON, dropPrefix, enumJSON, fromTextField_, sumTypeJSON, taggedObjectJSON) import Simplex.Messaging.Protocol (ProtoServerWithAuth, ProtocolTypeI) -import Simplex.Messaging.Util ((<$?>)) +import Simplex.Messaging.Util (safeDecodeUtf8, (<$?>)) import Simplex.Messaging.Version class IsContact a where @@ -596,9 +597,55 @@ data MemberInfo = MemberInfo memberInfo :: GroupMember -> MemberInfo memberInfo GroupMember {memberId, memberRole, memberProfile, activeConn} = - MemberInfo memberId memberRole cvr (redactedMemberProfile $ fromLocalProfile memberProfile) - where - cvr = ChatVersionRange . fromJVersionRange . peerChatVRange <$> activeConn + MemberInfo + { memberId, + memberRole, + v = ChatVersionRange . fromJVersionRange . peerChatVRange <$> activeConn, + profile = redactedMemberProfile $ fromLocalProfile memberProfile + } + +data MemberRestrictionStatus + = MRSBlocked + | MRSUnrestricted + | MRSUnknown Text + deriving (Eq, Show) + +instance FromField MemberRestrictionStatus where fromField = fromBlobField_ strDecode + +instance ToField MemberRestrictionStatus where toField = toField . strEncode + +instance StrEncoding MemberRestrictionStatus where + strEncode = \case + MRSBlocked -> "blocked" + MRSUnrestricted -> "unrestricted" + MRSUnknown tag -> encodeUtf8 tag + strDecode s = Right $ case s of + "blocked" -> MRSBlocked + "unrestricted" -> MRSUnrestricted + tag -> MRSUnknown $ safeDecodeUtf8 tag + strP = strDecode <$?> A.takeByteString + +instance FromJSON MemberRestrictionStatus where + parseJSON = strParseJSON "MemberRestrictionStatus" + +instance ToJSON MemberRestrictionStatus where + toJSON = strToJSON + toEncoding = strToJEncoding + +mrsBlocked :: MemberRestrictionStatus -> Bool +mrsBlocked = \case + MRSBlocked -> True + _ -> False + +data MemberRestrictions = MemberRestrictions + { restriction :: MemberRestrictionStatus + } + deriving (Eq, Show) + +memberRestrictions :: GroupMember -> Maybe MemberRestrictions +memberRestrictions m + | blockedByAdmin m = Just MemberRestrictions {restriction = MRSBlocked} + | otherwise = Nothing data ReceivedGroupInvitation = ReceivedGroupInvitation { fromMember :: GroupMember, @@ -619,6 +666,7 @@ data GroupMember = GroupMember memberCategory :: GroupMemberCategory, memberStatus :: GroupMemberStatus, memberSettings :: GroupMemberSettings, + blockedByAdmin :: Bool, invitedBy :: InvitedBy, invitedByGroupMemberId :: Maybe GroupMemberId, localDisplayName :: ContactName, @@ -679,6 +727,7 @@ data NewGroupMember = NewGroupMember { memInfo :: MemberInfo, memCategory :: GroupMemberCategory, memStatus :: GroupMemberStatus, + memRestriction :: Maybe MemberRestrictionStatus, memInvitedBy :: InvitedBy, memInvitedByGroupMemberId :: Maybe GroupMemberId, localDisplayName :: ContactName, @@ -1641,6 +1690,8 @@ $(JQ.deriveJSON defaultJSON ''IntroInvitation) $(JQ.deriveJSON defaultJSON ''MemberInfo) +$(JQ.deriveJSON defaultJSON ''MemberRestrictions) + $(JQ.deriveJSON defaultJSON ''GroupMemberRef) $(JQ.deriveJSON defaultJSON ''FileDescr) diff --git a/src/Simplex/Chat/View.hs b/src/Simplex/Chat/View.hs index 4f6e774a1..05c90696b 100644 --- a/src/Simplex/Chat/View.hs +++ b/src/Simplex/Chat/View.hs @@ -179,6 +179,7 @@ responseToView hu@(currentRH, user_) ChatConfig {logLevel, showReactions, showRe CRUserDeletedMember u g m -> ttyUser u [ttyGroup' g <> ": you removed " <> ttyMember m <> " from the group"] CRLeftMemberUser u g -> ttyUser u $ [ttyGroup' g <> ": you left the group"] <> groupPreserved g CRUnknownMemberCreated u g fwdM um -> ttyUser u [ttyGroup' g <> ": " <> ttyMember fwdM <> " forwarded a message from an unknown member, creating unknown member record " <> ttyMember um] + CRUnknownMemberBlocked u g byM um -> ttyUser u [ttyGroup' g <> ": " <> ttyMember byM <> " blocked an unknown member, creating unknown member record " <> ttyMember um] CRUnknownMemberAnnounced u g _ um m -> ttyUser u [ttyGroup' g <> ": unknown member " <> ttyMember um <> " updated to " <> ttyMember m] CRGroupDeletedUser u g -> ttyUser u [ttyGroup' g <> ": you deleted the group"] CRRcvFileDescrReady _ _ -> [] @@ -243,6 +244,8 @@ responseToView hu@(currentRH, user_) ChatConfig {logLevel, showReactions, showRe CRConnectedToGroupMember u g m _ -> ttyUser u [ttyGroup' g <> ": " <> connectedMember m <> " is connected"] CRMemberRole u g by m r r' -> ttyUser u $ viewMemberRoleChanged g by m r r' CRMemberRoleUser u g m r r' -> ttyUser u $ viewMemberRoleUserChanged g m r r' + CRMemberBlockedForAll u g by m blocked -> ttyUser u $ viewMemberBlockedForAll g by m blocked + CRMemberBlockedForAllUser u g m blocked -> ttyUser u $ viewMemberBlockedForAllUser g m blocked CRDeletedMemberUser u g by -> ttyUser u $ [ttyGroup' g <> ": " <> ttyMember by <> " removed you from the group"] <> groupPreserved g CRDeletedMember u g by m -> ttyUser u [ttyGroup' g <> ": " <> ttyMember by <> " removed " <> ttyMember m <> " from the group"] CRLeftMember u g m -> ttyUser u [ttyGroup' g <> ": " <> ttyMember m <> " left the group"] @@ -436,21 +439,16 @@ responseToView hu@(currentRH, user_) ChatConfig {logLevel, showReactions, showRe unmuted' :: User -> ChatInfo c -> CIDirection c d -> Bool -> [StyledString] -> [StyledString] unmuted' u chat chatDir mention s | chatDirNtf u chat chatDir mention = s + | testView = map (<> " <muted>") s | otherwise = [] userNtf :: User -> Bool userNtf User {showNtfs, activeUser} = showNtfs || activeUser -chatNtf :: User -> ChatInfo c -> Bool -> Bool -chatNtf user cInfo mention = case cInfo of - DirectChat ct -> contactNtf user ct mention - GroupChat g -> groupNtf user g mention - _ -> False - chatDirNtf :: User -> ChatInfo c -> CIDirection c d -> Bool -> Bool chatDirNtf user cInfo chatDir mention = case (cInfo, chatDir) of (DirectChat ct, CIDirectRcv) -> contactNtf user ct mention - (GroupChat g, CIGroupRcv m) -> groupNtf user g mention && showMessages (memberSettings m) + (GroupChat g, CIGroupRcv m) -> groupNtf user g mention && not (blockedByAdmin m) && showMessages (memberSettings m) _ -> True contactNtf :: User -> Contact -> Bool -> Bool @@ -473,6 +471,7 @@ chatItemDeletedText ChatItem {meta = CIMeta {itemDeleted}, content} membership_ CIModerated _ m -> markedDeleted content <> byMember m CIDeleted _ -> markedDeleted content CIBlocked _ -> "blocked" + CIBlockedByAdmin _ -> "blocked by admin" markedDeleted = \case CISndModerated -> "deleted" CIRcvModerated -> "deleted" @@ -555,6 +554,7 @@ viewChatItem chat ci@ChatItem {chatDir, meta = meta@CIMeta {forwardedByMember}, CIRcvIntegrityError err -> viewRcvIntegrityError from err ts tz meta CIRcvGroupInvitation {} -> showRcvItemProhibited from CIRcvModerated {} -> receivedWithTime_ ts tz (ttyFromGroup g m) quote meta [plainContent content] False + CIRcvBlocked {} -> receivedWithTime_ ts tz (ttyFromGroup g m) quote meta [plainContent content] False _ -> showRcvItem from where from = ttyFromGroup g m @@ -978,6 +978,14 @@ viewMemberRoleUserChanged g@GroupInfo {membership} m r r' where view s = [ttyGroup' g <> ": you changed " <> s <> " from " <> showRole r <> " to " <> showRole r'] +viewMemberBlockedForAll :: GroupInfo -> GroupMember -> GroupMember -> Bool -> [StyledString] +viewMemberBlockedForAll g by m blocked = + [ttyGroup' g <> ": " <> ttyMember by <> " " <> (if blocked then "blocked" else "unblocked") <> " " <> ttyMember m] + +viewMemberBlockedForAllUser :: GroupInfo -> GroupMember -> Bool -> [StyledString] +viewMemberBlockedForAllUser g m blocked = + [ttyGroup' g <> ": you " <> (if blocked then "blocked" else "unblocked") <> " " <> ttyMember m] + showRole :: GroupMemberRole -> StyledString showRole = plain . strEncode @@ -1003,8 +1011,9 @@ viewGroupMembers (Group GroupInfo {membership} members) = map groupMember . filt GSMemCreator -> ["created group"] _ -> [] muted m - | showMessages (memberSettings m) = [] - | otherwise = ["blocked"] + | blockedByAdmin m = ["blocked by admin"] + | not (showMessages $ memberSettings m) = ["blocked"] + | otherwise = [] viewContactConnected :: Contact -> Maybe Profile -> Bool -> [StyledString] viewContactConnected ct userIncognitoProfile testView = @@ -1847,6 +1856,13 @@ viewChatError logLevel testView = \case CEGroupContactRole c -> ["contact " <> ttyContact c <> " has insufficient permissions for this group action"] CEGroupNotJoined g -> ["you did not join this group, use " <> highlight ("/join #" <> viewGroupName g)] CEGroupMemberNotActive -> ["your group connection is not active yet, try later"] + CECantBlockMemberForSelf g m showMsgs -> + [ "admins or above can't block member for self, use " + <> highlight + ( (if showMsgs then "/unblock for all" else "/block for all") + <> (" #" <> viewGroupName g <> " " <> viewMemberName m) + ) + ] CEGroupMemberUserRemoved -> ["you are no longer a member of the group"] CEGroupMemberNotFound -> ["group doesn't have this member"] CEGroupMemberIntroNotFound c -> ["group member intro not found for " <> ttyContact c] diff --git a/tests/ChatTests/Direct.hs b/tests/ChatTests/Direct.hs index 3eb4afcb0..8e7f8536e 100644 --- a/tests/ChatTests/Direct.hs +++ b/tests/ChatTests/Direct.hs @@ -1180,7 +1180,7 @@ testMuteContact = bob ##> "/mute @alice" bob <## "ok" alice #> "@bob hi" - (bob </) + bob <# "alice> hi <muted>" bob ##> "/contacts" bob <## "alice (Alice) (muted, you can /unmute @alice)" bob ##> "/unmute @alice" @@ -1204,7 +1204,7 @@ testMuteGroup = bob <## "ok" alice #> "#team hi" concurrently_ - (bob </) + (bob <# "#team alice> hi <muted>") (cath <# "#team alice> hi") bob #> "#team hello" concurrently_ @@ -1214,7 +1214,9 @@ testMuteGroup = cath <# "#team > bob hello" cath <## " hello too!" concurrentlyN_ - [ (bob </), + [ do + bob <# "#team cath> > bob hello <muted>" + bob <## " hello too! <muted>", do alice <# "#team cath> > bob hello" alice <## " hello too!" @@ -1236,7 +1238,9 @@ testMuteGroup = alice <# "#team > cath hello too!" alice <## " hey cath!" concurrentlyN_ - [ (bob </), + [ do + bob <# "#team alice> > cath hello too! <muted>" + bob <## " hey cath! <muted>", do cath <# "#team alice> > cath hello too!" cath <## " hey cath!" @@ -1245,20 +1249,32 @@ testMuteGroup = bob <## "#team (3 members, mentions only, you can /unmute #team)" bob ##> "/unmute #team" bob <## "ok" + + threadDelay 1000000 + alice #> "#team hi again" concurrently_ (bob <# "#team alice> hi again") (cath <# "#team alice> hi again") bob ##> "/block #team alice" + bob <## "admins or above can't block member for self, use /block for all #team alice" + -- can bypass with api + bob ##> "/_member settings #1 1 {\"showMessages\": false}" bob <## "ok" bob ##> "/ms team" bob <## "bob (Bob): admin, you, connected" bob <## "alice (Alice): owner, host, connected, blocked" bob <## "cath (Catherine): admin, connected" + + threadDelay 1000000 + alice #> "#team test 1" concurrently_ - (bob </) + (bob <# "#team alice> test 1 [blocked] <muted>") (cath <# "#team alice> test 1") + + threadDelay 1000000 + cath #> "#team test 2" concurrently_ (bob <# "#team cath> test 2") @@ -1269,6 +1285,9 @@ testMuteGroup = bob <# "#team cath> test 2" threadDelay 1000000 bob ##> "/unblock #team alice" + bob <## "admins or above can't block member for self, use /unblock for all #team alice" + -- can bypass with api + bob ##> "/_member settings #1 1 {\"showMessages\": true}" bob <## "ok" bob ##> "/ms team" bob <## "bob (Bob): admin, you, connected" diff --git a/tests/ChatTests/Groups.hs b/tests/ChatTests/Groups.hs index 349db6f7f..51a5b352a 100644 --- a/tests/ChatTests/Groups.hs +++ b/tests/ChatTests/Groups.hs @@ -141,6 +141,12 @@ chatGroupTests = do it "member contact is deleted silently, then considered disabled" testMembershipProfileUpdateContactDisabled it "profile update without change is ignored" testMembershipProfileUpdateNoChangeIgnored it "change of profile contact link is ignored" testMembershipProfileUpdateContactLinkIgnored + describe "block member for all" $ do + it "messages are marked blocked" testBlockForAllMarkedBlocked + it "messages are fully deleted" testBlockForAllFullDelete + it "another admin can unblock" testBlockForAllAnotherAdminUnblocks + it "member was blocked before joining group" testBlockForAllBeforeJoining + it "can't repeat block, unblock" testBlockForAllCantRepeat where _0 = supportedChatVRange -- don't create direct connections _1 = groupCreateDirectVRange @@ -5056,7 +5062,8 @@ testGroupHistoryDeletedMessage = testGroupHistoryDisappearingMessage :: HasCallStack => FilePath -> IO () testGroupHistoryDisappearingMessage = testChat3 aliceProfile bobProfile cathProfile $ - \alice bob cath -> do + -- \alice bob cath -> do -- revert when test is stable + \a b c -> withTestOutput a $ \alice -> withTestOutput b $ \bob -> withTestOutput c $ \cath -> do createGroup2 "team" alice bob threadDelay 1000000 @@ -5067,12 +5074,12 @@ testGroupHistoryDisappearingMessage = threadDelay 1000000 -- 3 seconds so that messages 2 and 3 are not deleted for alice before sending history to cath - alice ##> "/set disappear #team on 3" + alice ##> "/set disappear #team on 4" alice <## "updated group preferences:" - alice <## "Disappearing messages: on (3 sec)" + alice <## "Disappearing messages: on (4 sec)" bob <## "alice updated group #team:" bob <## "updated group preferences:" - bob <## "Disappearing messages: on (3 sec)" + bob <## "Disappearing messages: on (4 sec)" bob #> "#team 2" alice <# "#team bob> 2" @@ -5117,15 +5124,18 @@ testGroupHistoryDisappearingMessage = r1 `shouldContain` [(0, "1"), (0, "2"), (0, "3"), (0, "4")] concurrentlyN_ - [ do - alice <## "timed message deleted: 2" - alice <## "timed message deleted: 3", - do - bob <## "timed message deleted: 2" - bob <## "timed message deleted: 3", - do - cath <## "timed message deleted: 2" - cath <## "timed message deleted: 3" + [ alice + <### [ "timed message deleted: 2", + "timed message deleted: 3" + ], + bob + <### [ "timed message deleted: 2", + "timed message deleted: 3" + ], + cath + <### [ "timed message deleted: 2", + "timed message deleted: 3" + ] ] cath ##> "/_get chat #1 count=100" @@ -5695,3 +5705,312 @@ testMembershipProfileUpdateContactLinkIgnored = bob <##. "sending messages via" bob <## "connection not verified, use /code command to see security code" bob <## currentChatVRangeInfo + +testBlockForAllMarkedBlocked :: HasCallStack => FilePath -> IO () +testBlockForAllMarkedBlocked = + testChat3 aliceProfile bobProfile cathProfile $ + \alice bob cath -> do + createGroup3 "team" alice bob cath + + threadDelay 1000000 + + bob #> "#team 1" + [alice, cath] *<# "#team bob> 1" + + threadDelay 1000000 + + alice ##> "/block for all #team bob" + alice <## "#team: you blocked bob" + cath <## "#team: alice blocked bob" + bob <// 50000 + + alice ##> "/ms team" + alice + <### [ "alice (Alice): owner, you, created group", + "bob (Bob): admin, invited, connected, blocked by admin", + "cath (Catherine): admin, invited, connected" + ] + + cath ##> "/ms team" + cath + <### [ "cath (Catherine): admin, you, connected", + "alice (Alice): owner, host, connected", + "bob (Bob): admin, connected, blocked by admin" + ] + + bob ##> "/ms team" + bob + <### [ "bob (Bob): admin, you, connected", + "alice (Alice): owner, host, connected", + "cath (Catherine): admin, connected" + ] + + threadDelay 1000000 + + bob #> "#team 2" + alice <# "#team bob> 2 [blocked by admin] <muted>" + cath <# "#team bob> 2 [blocked by admin] <muted>" + + threadDelay 1000000 + + bob #> "#team 3" + alice <# "#team bob> 3 [blocked by admin] <muted>" + cath <# "#team bob> 3 [blocked by admin] <muted>" + + threadDelay 1000000 + + alice ##> "/unblock for all #team bob" + alice <## "#team: you unblocked bob" + cath <## "#team: alice unblocked bob" + bob <// 50000 + + threadDelay 1000000 + + bob #> "#team 4" + [alice, cath] *<# "#team bob> 4" + + alice + #$> ( "/_get chat #1 count=6", + chat, + [ (0, "1"), + (1, "blocked bob (Bob)"), + (0, "2 [blocked by admin]"), + (0, "3 [blocked by admin]"), + (1, "unblocked bob (Bob)"), + (0, "4") + ] + ) + cath + #$> ( "/_get chat #1 count=6", + chat, + [ (0, "1"), + (0, "blocked bob (Bob)"), + (0, "2 [blocked by admin]"), + (0, "3 [blocked by admin]"), + (0, "unblocked bob (Bob)"), + (0, "4") + ] + ) + bob #$> ("/_get chat #1 count=4", chat, [(1, "1"), (1, "2"), (1, "3"), (1, "4")]) + +testBlockForAllFullDelete :: HasCallStack => FilePath -> IO () +testBlockForAllFullDelete = + testChat3 aliceProfile bobProfile cathProfile $ + \alice bob cath -> do + createGroup3 "team" alice bob cath + + alice ##> "/set delete #team on" + alice <## "updated group preferences:" + alice <## "Full deletion: on" + concurrentlyN_ + [ do + bob <## "alice updated group #team:" + bob <## "updated group preferences:" + bob <## "Full deletion: on", + do + cath <## "alice updated group #team:" + cath <## "updated group preferences:" + cath <## "Full deletion: on" + ] + + threadDelay 1000000 + + bob #> "#team 1" + [alice, cath] *<# "#team bob> 1" + + threadDelay 1000000 + + alice ##> "/block for all #team bob" + alice <## "#team: you blocked bob" + cath <## "#team: alice blocked bob" + bob <// 50000 + + threadDelay 1000000 + + bob #> "#team 2" + alice <# "#team bob> blocked [blocked by admin] <muted>" + cath <# "#team bob> blocked [blocked by admin] <muted>" + + threadDelay 1000000 + + bob #> "#team 3" + alice <# "#team bob> blocked [blocked by admin] <muted>" + cath <# "#team bob> blocked [blocked by admin] <muted>" + + threadDelay 1000000 + + alice ##> "/unblock for all #team bob" + alice <## "#team: you unblocked bob" + cath <## "#team: alice unblocked bob" + bob <// 50000 + + threadDelay 1000000 + + bob #> "#team 4" + [alice, cath] *<# "#team bob> 4" + + alice + #$> ( "/_get chat #1 count=6", + chat, + [ (0, "1"), + (1, "blocked bob (Bob)"), + (0, "blocked [blocked by admin]"), + (0, "blocked [blocked by admin]"), + (1, "unblocked bob (Bob)"), + (0, "4") + ] + ) + cath + #$> ( "/_get chat #1 count=6", + chat, + [ (0, "1"), + (0, "blocked bob (Bob)"), + (0, "blocked [blocked by admin]"), + (0, "blocked [blocked by admin]"), + (0, "unblocked bob (Bob)"), + (0, "4") + ] + ) + bob #$> ("/_get chat #1 count=4", chat, [(1, "1"), (1, "2"), (1, "3"), (1, "4")]) + +testBlockForAllAnotherAdminUnblocks :: HasCallStack => FilePath -> IO () +testBlockForAllAnotherAdminUnblocks = + testChat3 aliceProfile bobProfile cathProfile $ + \alice bob cath -> do + createGroup3 "team" alice bob cath + + bob #> "#team 1" + [alice, cath] *<# "#team bob> 1" + + alice ##> "/block for all #team bob" + alice <## "#team: you blocked bob" + cath <## "#team: alice blocked bob" + bob <// 50000 + + bob #> "#team 2" + alice <# "#team bob> 2 [blocked by admin] <muted>" + cath <# "#team bob> 2 [blocked by admin] <muted>" + + cath ##> "/unblock for all #team bob" + cath <## "#team: you unblocked bob" + alice <## "#team: cath unblocked bob" + bob <// 50000 + + bob #> "#team 3" + [alice, cath] *<# "#team bob> 3" + + bob #$> ("/_get chat #1 count=3", chat, [(1, "1"), (1, "2"), (1, "3")]) + +testBlockForAllBeforeJoining :: HasCallStack => FilePath -> IO () +testBlockForAllBeforeJoining = + testChat4 aliceProfile bobProfile cathProfile danProfile $ + \alice bob cath dan -> do + createGroup3 "team" alice bob cath + + bob #> "#team 1" + [alice, cath] *<# "#team bob> 1" + + alice ##> "/block for all #team bob" + alice <## "#team: you blocked bob" + cath <## "#team: alice blocked bob" + bob <// 50000 + + bob #> "#team 2" + [alice, cath] *<# "#team bob> 2 [blocked by admin] <muted>" + + connectUsers alice dan + addMember "team" alice dan GRAdmin + dan ##> "/j team" + concurrentlyN_ + [ alice <## "#team: dan joined the group", + do + dan <## "#team: you joined the group" + dan + <### [ "#team: member bob (Bob) is connected", + "#team: member cath (Catherine) is connected" + ], + aliceAddedDan bob, + aliceAddedDan cath + ] + + threadDelay 1000000 + + bob #> "#team 3" + [alice, cath, dan] *<# "#team bob> 3 [blocked by admin] <muted>" + + threadDelay 1000000 + + bob #> "#team 4" + [alice, cath, dan] *<# "#team bob> 4 [blocked by admin] <muted>" + + threadDelay 1000000 + + alice ##> "/unblock for all #team bob" + alice <## "#team: you unblocked bob" + cath <## "#team: alice unblocked bob" + dan <## "#team: alice unblocked bob" + bob <// 50000 + + threadDelay 1000000 + + bob #> "#team 5" + [alice, cath, dan] *<# "#team bob> 5" + + dan ##> "/_get chat #1 count=100" + r <- chat <$> getTermLine dan + r `shouldContain` [(0, "3 [blocked by admin]"), (0, "4 [blocked by admin]"), (0, "unblocked bob (Bob)"), (0, "5")] + r `shouldNotContain` [(0, "1")] + r `shouldNotContain` [(0, "1 [blocked by admin]")] + r `shouldNotContain` [(0, "2")] + r `shouldNotContain` [(0, "2 [blocked by admin]")] + where + aliceAddedDan :: HasCallStack => TestCC -> IO () + aliceAddedDan cc = do + cc <## "#team: alice added dan (Daniel) to the group (connecting...)" + cc <## "#team: new member dan is connected" + +testBlockForAllCantRepeat :: HasCallStack => FilePath -> IO () +testBlockForAllCantRepeat = + testChat3 aliceProfile bobProfile cathProfile $ + \alice bob cath -> do + createGroup3 "team" alice bob cath + + alice ##> "/unblock for all #team bob" + alice <## "bad chat command: already unblocked" + + cath ##> "/unblock for all #team bob" + cath <## "bad chat command: already unblocked" + + bob #> "#team 1" + [alice, cath] *<# "#team bob> 1" + + alice ##> "/block for all #team bob" + alice <## "#team: you blocked bob" + cath <## "#team: alice blocked bob" + bob <// 50000 + + alice ##> "/block for all #team bob" + alice <## "bad chat command: already blocked" + + cath ##> "/block for all #team bob" + cath <## "bad chat command: already blocked" + + bob #> "#team 2" + alice <# "#team bob> 2 [blocked by admin] <muted>" + cath <# "#team bob> 2 [blocked by admin] <muted>" + + cath ##> "/unblock for all #team bob" + cath <## "#team: you unblocked bob" + alice <## "#team: cath unblocked bob" + bob <// 50000 + + alice ##> "/unblock for all #team bob" + alice <## "bad chat command: already unblocked" + + cath ##> "/unblock for all #team bob" + cath <## "bad chat command: already unblocked" + + bob #> "#team 3" + [alice, cath] *<# "#team bob> 3" + + bob #$> ("/_get chat #1 count=3", chat, [(1, "1"), (1, "2"), (1, "3")]) diff --git a/tests/ProtocolTests.hs b/tests/ProtocolTests.hs index 3ab7cf1a9..783f7fb34 100644 --- a/tests/ProtocolTests.hs +++ b/tests/ProtocolTests.hs @@ -243,10 +243,13 @@ decodeChatMessageTest = describe "Chat message encoding/decoding" $ do #==# XGrpMemNew MemberInfo {memberId = MemberId "\1\2\3\4", memberRole = GRAdmin, v = Just $ ChatVersionRange supportedChatVRange, profile = testProfile} it "x.grp.mem.intro" $ "{\"v\":\"1\",\"event\":\"x.grp.mem.intro\",\"params\":{\"memberInfo\":{\"memberRole\":\"admin\",\"memberId\":\"AQIDBA==\",\"profile\":{\"fullName\":\"Alice\",\"displayName\":\"alice\",\"image\":\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAgAAAAIAQMAAAD+wSzIAAAABlBMVEX///+/v7+jQ3Y5AAAADklEQVQI12P4AIX8EAgALgAD/aNpbtEAAAAASUVORK5CYII=\",\"preferences\":{\"reactions\":{\"allow\":\"yes\"},\"voice\":{\"allow\":\"yes\"}}}}}}" - #==# XGrpMemIntro MemberInfo {memberId = MemberId "\1\2\3\4", memberRole = GRAdmin, v = Nothing, profile = testProfile} + #==# XGrpMemIntro MemberInfo {memberId = MemberId "\1\2\3\4", memberRole = GRAdmin, v = Nothing, profile = testProfile} Nothing it "x.grp.mem.intro with member chat version range" $ "{\"v\":\"1\",\"event\":\"x.grp.mem.intro\",\"params\":{\"memberInfo\":{\"memberRole\":\"admin\",\"memberId\":\"AQIDBA==\",\"v\":\"1-7\",\"profile\":{\"fullName\":\"Alice\",\"displayName\":\"alice\",\"image\":\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAgAAAAIAQMAAAD+wSzIAAAABlBMVEX///+/v7+jQ3Y5AAAADklEQVQI12P4AIX8EAgALgAD/aNpbtEAAAAASUVORK5CYII=\",\"preferences\":{\"reactions\":{\"allow\":\"yes\"},\"voice\":{\"allow\":\"yes\"}}}}}}" - #==# XGrpMemIntro MemberInfo {memberId = MemberId "\1\2\3\4", memberRole = GRAdmin, v = Just $ ChatVersionRange supportedChatVRange, profile = testProfile} + #==# XGrpMemIntro MemberInfo {memberId = MemberId "\1\2\3\4", memberRole = GRAdmin, v = Just $ ChatVersionRange supportedChatVRange, profile = testProfile} Nothing + it "x.grp.mem.intro with member restrictions" $ + "{\"v\":\"1\",\"event\":\"x.grp.mem.intro\",\"params\":{\"memberRestrictions\":{\"restriction\":\"blocked\"},\"memberInfo\":{\"memberRole\":\"admin\",\"memberId\":\"AQIDBA==\",\"profile\":{\"fullName\":\"Alice\",\"displayName\":\"alice\",\"image\":\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAgAAAAIAQMAAAD+wSzIAAAABlBMVEX///+/v7+jQ3Y5AAAADklEQVQI12P4AIX8EAgALgAD/aNpbtEAAAAASUVORK5CYII=\",\"preferences\":{\"reactions\":{\"allow\":\"yes\"},\"voice\":{\"allow\":\"yes\"}}}}}}" + #==# XGrpMemIntro MemberInfo {memberId = MemberId "\1\2\3\4", memberRole = GRAdmin, v = Nothing, profile = testProfile} (Just MemberRestrictions {restriction = MRSBlocked}) it "x.grp.mem.inv" $ "{\"v\":\"1\",\"event\":\"x.grp.mem.inv\",\"params\":{\"memberId\":\"AQIDBA==\",\"memberIntro\":{\"directConnReq\":\"simplex:/invitation#/?v=1&smp=smp%3A%2F%2F1234-w%3D%3D%40smp.simplex.im%3A5223%2F3456-w%3D%3D%23%2F%3Fv%3D1-2%26dh%3DMCowBQYDK2VuAyEAjiswwI3O_NlS8Fk3HJUW870EY2bAwmttMBsvRB9eV3o%253D&e2e=v%3D1-2%26x3dh%3DMEIwBQYDK2VvAzkAmKuSYeQ_m0SixPDS8Wq8VBaTS1cW-Lp0n0h4Diu-kUpR-qXx4SDJ32YGEFoGFGSbGPry5Ychr6U%3D%2CMEIwBQYDK2VvAzkAmKuSYeQ_m0SixPDS8Wq8VBaTS1cW-Lp0n0h4Diu-kUpR-qXx4SDJ32YGEFoGFGSbGPry5Ychr6U%3D\",\"groupConnReq\":\"simplex:/invitation#/?v=1&smp=smp%3A%2F%2F1234-w%3D%3D%40smp.simplex.im%3A5223%2F3456-w%3D%3D%23%2F%3Fv%3D1-2%26dh%3DMCowBQYDK2VuAyEAjiswwI3O_NlS8Fk3HJUW870EY2bAwmttMBsvRB9eV3o%253D&e2e=v%3D1-2%26x3dh%3DMEIwBQYDK2VvAzkAmKuSYeQ_m0SixPDS8Wq8VBaTS1cW-Lp0n0h4Diu-kUpR-qXx4SDJ32YGEFoGFGSbGPry5Ychr6U%3D%2CMEIwBQYDK2VvAzkAmKuSYeQ_m0SixPDS8Wq8VBaTS1cW-Lp0n0h4Diu-kUpR-qXx4SDJ32YGEFoGFGSbGPry5Ychr6U%3D\"}}}" #==# XGrpMemInv (MemberId "\1\2\3\4") IntroInvitation {groupConnReq = testConnReq, directConnReq = Just testConnReq} From 0dd1f13d3b05b21a81ee51c819a73053217ccf25 Mon Sep 17 00:00:00 2001 From: spaced4ndy <8711996+spaced4ndy@users.noreply.github.com> Date: Fri, 19 Jan 2024 19:14:35 +0400 Subject: [PATCH 12/23] core: fix blocked by admin encoding --- src/Simplex/Chat/Messages.hs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/Simplex/Chat/Messages.hs b/src/Simplex/Chat/Messages.hs index 325c8a13e..50b098bb7 100644 --- a/src/Simplex/Chat/Messages.hs +++ b/src/Simplex/Chat/Messages.hs @@ -939,7 +939,7 @@ data ACIDeleted = forall c. ChatTypeI c => ACIDeleted (SChatType c) (CIDeleted c data JSONCIDeleted = JCIDDeleted {deletedTs :: Maybe UTCTime, chatType :: ChatType} | JCIDBlocked {deletedTs :: Maybe UTCTime} - | JCIBlockedByAdmin {deletedTs :: Maybe UTCTime} + | JCIDBlockedByAdmin {deletedTs :: Maybe UTCTime} | JCIDModerated {deletedTs :: Maybe UTCTime, byGroupMember :: GroupMember} deriving (Show) @@ -947,14 +947,14 @@ jsonCIDeleted :: forall d. ChatTypeI d => CIDeleted d -> JSONCIDeleted jsonCIDeleted = \case CIDeleted ts -> JCIDDeleted ts (toChatType $ chatTypeI @d) CIBlocked ts -> JCIDBlocked ts - CIBlockedByAdmin ts -> JCIBlockedByAdmin ts + CIBlockedByAdmin ts -> JCIDBlockedByAdmin ts CIModerated ts m -> JCIDModerated ts m jsonACIDeleted :: JSONCIDeleted -> ACIDeleted jsonACIDeleted = \case JCIDDeleted ts cType -> case aChatType cType of ACT c -> ACIDeleted c $ CIDeleted ts JCIDBlocked ts -> ACIDeleted SCTGroup $ CIBlocked ts - JCIBlockedByAdmin ts -> ACIDeleted SCTGroup $ CIBlockedByAdmin ts + JCIDBlockedByAdmin ts -> ACIDeleted SCTGroup $ CIBlockedByAdmin ts JCIDModerated ts m -> ACIDeleted SCTGroup (CIModerated ts m) itemDeletedTs :: CIDeleted d -> Maybe UTCTime From ab9a6dcab5512260d15ed03cf4b851f844b1de9d Mon Sep 17 00:00:00 2001 From: Stanislav Dmitrenko <7953703+avently@users.noreply.github.com> Date: Fri, 19 Jan 2024 22:52:13 +0700 Subject: [PATCH 13/23] ios: allow to delete the last profile (#3707) * ios: allow to delete the last profile * less changes * no flash of empty view --------- Co-authored-by: Avently <avently@local> --- apps/ios/Shared/Model/ChatModel.swift | 2 +- apps/ios/Shared/Model/SimpleXAPI.swift | 33 +++++++---- .../Views/UserSettings/SettingsView.swift | 59 +++++++++++-------- .../Views/UserSettings/UserProfilesView.swift | 38 +++++------- 4 files changed, 72 insertions(+), 60 deletions(-) diff --git a/apps/ios/Shared/Model/ChatModel.swift b/apps/ios/Shared/Model/ChatModel.swift index 6a15a3965..c31ad579a 100644 --- a/apps/ios/Shared/Model/ChatModel.swift +++ b/apps/ios/Shared/Model/ChatModel.swift @@ -139,7 +139,7 @@ final class ChatModel: ObservableObject { } func removeUser(_ user: User) { - if let i = getUserIndex(user), users[i].user.userId != currentUser?.userId { + if let i = getUserIndex(user) { users.remove(at: i) } } diff --git a/apps/ios/Shared/Model/SimpleXAPI.swift b/apps/ios/Shared/Model/SimpleXAPI.swift index c1d0a264b..e4d2a8318 100644 --- a/apps/ios/Shared/Model/SimpleXAPI.swift +++ b/apps/ios/Shared/Model/SimpleXAPI.swift @@ -1339,8 +1339,12 @@ private func changeActiveUser_(_ userId: Int64, viewPwd: String?) throws { try getUserChatData() } -func changeActiveUserAsync_(_ userId: Int64, viewPwd: String?) async throws { - let currentUser = try await apiSetActiveUserAsync(userId, viewPwd: viewPwd) +func changeActiveUserAsync_(_ userId: Int64?, viewPwd: String?) async throws { + let currentUser = if let userId = userId { + try await apiSetActiveUserAsync(userId, viewPwd: viewPwd) + } else { + try apiGetActiveUser() + } let users = try await listUsersAsync() await MainActor.run { let m = ChatModel.shared @@ -1349,7 +1353,7 @@ func changeActiveUserAsync_(_ userId: Int64, viewPwd: String?) async throws { } try await getUserChatDataAsync() await MainActor.run { - if var (_, invitation) = ChatModel.shared.callInvitations.first(where: { _, inv in inv.user.userId == userId }) { + if let currentUser = currentUser, var (_, invitation) = ChatModel.shared.callInvitations.first(where: { _, inv in inv.user.userId == userId }) { invitation.user = currentUser activateCall(invitation) } @@ -1365,14 +1369,21 @@ func getUserChatData() throws { } private func getUserChatDataAsync() async throws { - let userAddress = try await apiGetUserAddressAsync() - let chatItemTTL = try await getChatItemTTLAsync() - let chats = try await apiGetChatsAsync() - await MainActor.run { - let m = ChatModel.shared - m.userAddress = userAddress - m.chatItemTTL = chatItemTTL - m.chats = chats.map { Chat.init($0) } + let m = ChatModel.shared + if m.currentUser != nil { + let userAddress = try await apiGetUserAddressAsync() + let chatItemTTL = try await getChatItemTTLAsync() + let chats = try await apiGetChatsAsync() + await MainActor.run { + m.userAddress = userAddress + m.chatItemTTL = chatItemTTL + m.chats = chats.map { Chat.init($0) } + } + } else { + await MainActor.run { + m.userAddress = nil + m.chats = [] + } } } diff --git a/apps/ios/Shared/Views/UserSettings/SettingsView.swift b/apps/ios/Shared/Views/UserSettings/SettingsView.swift index b73d6b867..a691e6afc 100644 --- a/apps/ios/Shared/Views/UserSettings/SettingsView.swift +++ b/apps/ios/Shared/Views/UserSettings/SettingsView.swift @@ -159,37 +159,42 @@ struct SettingsView: View { } @ViewBuilder func settingsView() -> some View { - let user: User = chatModel.currentUser! + let user = chatModel.currentUser NavigationView { List { Section("You") { - NavigationLink { - UserProfile() - .navigationTitle("Your current profile") - } label: { - ProfilePreview(profileOf: user) - .padding(.leading, -8) + if let user = user { + NavigationLink { + UserProfile() + .navigationTitle("Your current profile") + } label: { + ProfilePreview(profileOf: user) + .padding(.leading, -8) + } } NavigationLink { - UserProfilesView() + UserProfilesView(showSettings: $showSettings) } label: { settingsRow("person.crop.rectangle.stack") { Text("Your chat profiles") } } - NavigationLink { - UserAddressView(shareViaProfile: chatModel.currentUser!.addressShared) - .navigationTitle("SimpleX address") - .navigationBarTitleDisplayMode(.large) - } label: { - settingsRow("qrcode") { Text("Your SimpleX address") } - } - NavigationLink { - PreferencesView(profile: user.profile, preferences: user.fullPreferences, currentPreferences: user.fullPreferences) - .navigationTitle("Your preferences") - } label: { - settingsRow("switch.2") { Text("Chat preferences") } + if let user = user { + NavigationLink { + UserAddressView(shareViaProfile: user.addressShared) + .navigationTitle("SimpleX address") + .navigationBarTitleDisplayMode(.large) + } label: { + settingsRow("qrcode") { Text("Your SimpleX address") } + } + + NavigationLink { + PreferencesView(profile: user.profile, preferences: user.fullPreferences, currentPreferences: user.fullPreferences) + .navigationTitle("Your preferences") + } label: { + settingsRow("switch.2") { Text("Chat preferences") } + } } NavigationLink { @@ -250,12 +255,14 @@ struct SettingsView: View { } Section("Help") { - NavigationLink { - ChatHelp(showSettings: $showSettings) - .navigationTitle("Welcome \(user.displayName)!") - .frame(maxHeight: .infinity, alignment: .top) - } label: { - settingsRow("questionmark") { Text("How to use it") } + if let user = user { + NavigationLink { + ChatHelp(showSettings: $showSettings) + .navigationTitle("Welcome \(user.displayName)!") + .frame(maxHeight: .infinity, alignment: .top) + } label: { + settingsRow("questionmark") { Text("How to use it") } + } } NavigationLink { WhatsNewView(viaSettings: true) diff --git a/apps/ios/Shared/Views/UserSettings/UserProfilesView.swift b/apps/ios/Shared/Views/UserSettings/UserProfilesView.swift index f6c7bf37e..f2cac59da 100644 --- a/apps/ios/Shared/Views/UserSettings/UserProfilesView.swift +++ b/apps/ios/Shared/Views/UserSettings/UserProfilesView.swift @@ -8,6 +8,7 @@ import SimpleXChat struct UserProfilesView: View { @EnvironmentObject private var m: ChatModel + @Binding var showSettings: Bool @Environment(\.editMode) private var editMode @AppStorage(DEFAULT_SHOW_HIDDEN_PROFILES_NOTICE) private var showHiddenProfilesNotice = true @AppStorage(DEFAULT_SHOW_MUTE_PROFILE_ALERT) private var showMuteProfileAlert = true @@ -25,7 +26,6 @@ struct UserProfilesView: View { private enum UserProfilesAlert: Identifiable { case deleteUser(user: User, delSMPQueues: Bool) - case cantDeleteLastUser case hiddenProfilesNotice case muteProfileAlert case activateUserError(error: String) @@ -34,7 +34,6 @@ struct UserProfilesView: View { var id: String { switch self { case let .deleteUser(user, delSMPQueues): return "deleteUser \(user.userId) \(delSMPQueues)" - case .cantDeleteLastUser: return "cantDeleteLastUser" case .hiddenProfilesNotice: return "hiddenProfilesNotice" case .muteProfileAlert: return "muteProfileAlert" case let .activateUserError(err): return "activateUserError \(err)" @@ -78,7 +77,7 @@ struct UserProfilesView: View { Section { let users = filteredUsers() let v = ForEach(users) { u in - userView(u.user, allowDelete: users.count > 1) + userView(u.user) } if #available(iOS 16, *) { v.onDelete { indexSet in @@ -146,13 +145,6 @@ struct UserProfilesView: View { }, secondaryButton: .cancel() ) - case .cantDeleteLastUser: - return Alert( - title: Text("Can't delete user profile!"), - message: m.users.count > 1 - ? Text("There should be at least one visible user profile.") - : Text("There should be at least one user profile.") - ) case .hiddenProfilesNotice: return Alert( title: Text("Make profile private!"), @@ -280,11 +272,21 @@ struct UserProfilesView: View { if let newActive = m.users.first(where: { u in !u.user.activeUser && !u.user.hidden }) { try await changeActiveUserAsync_(newActive.user.userId, viewPwd: nil) try await deleteUser() + } else { + // Deleting the last visible user while having hidden one(s) + try await deleteUser() + try await changeActiveUserAsync_(nil, viewPwd: nil) + await MainActor.run { + onboardingStageDefault.set(.step1_SimpleXInfo) + m.onboardingStage = .step1_SimpleXInfo + showSettings = false + } } } else { try await deleteUser() } } catch let error { + logger.error("Error deleting user profile: \(error)") let a = getErrorAlert(error, "Error deleting user profile") alert = .error(title: a.title, error: a.message) } @@ -295,7 +297,7 @@ struct UserProfilesView: View { } } - @ViewBuilder private func userView(_ user: User, allowDelete: Bool) -> some View { + @ViewBuilder private func userView(_ user: User) -> some View { let v = Button { Task { do { @@ -323,9 +325,7 @@ struct UserProfilesView: View { } } } - .disabled(user.activeUser) .foregroundColor(.primary) - .deleteDisabled(!allowDelete) .swipeActions(edge: .leading, allowsFullSwipe: true) { if user.hidden { Button("Unhide") { @@ -361,8 +361,6 @@ struct UserProfilesView: View { } if #available(iOS 16, *) { v - } else if !allowDelete { - v } else { v.swipeActions(edge: .trailing, allowsFullSwipe: true) { Button("Delete", role: .destructive) { @@ -373,12 +371,8 @@ struct UserProfilesView: View { } private func confirmDeleteUser(_ user: User) { - if m.users.count > 1 && (user.hidden || visibleUsersCount > 1) { - showDeleteConfirmation = true - userToDelete = user - } else { - alert = .cantDeleteLastUser - } + showDeleteConfirmation = true + userToDelete = user } private func setUserPrivacy(_ user: User, successAlert: UserProfilesAlert? = nil, _ api: @escaping () async throws -> User) { @@ -409,6 +403,6 @@ public func chatPasswordHash(_ pwd: String, _ salt: String) -> String { struct UserProfilesView_Previews: PreviewProvider { static var previews: some View { - UserProfilesView() + UserProfilesView(showSettings: Binding.constant(true)) } } From 5d8bb24d1c8278d81a720fcb515ee049410fbaa5 Mon Sep 17 00:00:00 2001 From: Stanislav Dmitrenko <7953703+avently@users.noreply.github.com> Date: Sat, 20 Jan 2024 00:01:33 +0700 Subject: [PATCH 14/23] android, desktop: withLongRunningApi when needed (#3710) --- .../main/java/chat/simplex/app/SimplexService.kt | 4 ++-- .../chat/simplex/common/helpers/SoundPlayer.kt | 6 ++---- .../common/views/call/CallView.android.kt | 2 +- .../views/newchat/QRCodeScanner.android.kt | 2 +- .../views/usersettings/Appearance.android.kt | 2 +- .../chat/simplex/common/platform/NtfManager.kt | 4 ++-- .../simplex/common/views/chat/ComposeView.kt | 4 ++-- .../views/chat/group/AddGroupMembersView.kt | 2 +- .../simplex/common/views/chat/item/CIFileView.kt | 2 +- .../common/views/chat/item/CIVIdeoView.kt | 2 +- .../common/views/chat/item/ChatItemView.kt | 2 +- .../views/database/DatabaseEncryptionView.kt | 2 +- .../common/views/database/DatabaseView.kt | 8 ++++---- .../common/views/helpers/ProcessedErrors.kt | 2 +- .../chat/simplex/common/views/helpers/Utils.kt | 6 ++---- .../common/views/localauth/LocalAuthView.kt | 4 ++-- .../views/onboarding/SetupDatabasePassphrase.kt | 2 +- .../common/views/usersettings/PrivacySettings.kt | 4 ++-- .../common/platform/RecAndPlay.desktop.kt | 16 +++++++--------- .../views/chat/item/ChatItemView.desktop.kt | 8 ++++---- .../views/usersettings/Appearance.desktop.kt | 2 +- 21 files changed, 40 insertions(+), 46 deletions(-) diff --git a/apps/multiplatform/android/src/main/java/chat/simplex/app/SimplexService.kt b/apps/multiplatform/android/src/main/java/chat/simplex/app/SimplexService.kt index bfa1770d9..dd760e0b1 100644 --- a/apps/multiplatform/android/src/main/java/chat/simplex/app/SimplexService.kt +++ b/apps/multiplatform/android/src/main/java/chat/simplex/app/SimplexService.kt @@ -104,7 +104,7 @@ class SimplexService: Service() { if (wakeLock != null || isStartingService) return val self = this isStartingService = true - withBGApi { + withLongRunningApi(slow = 30_000, deadlock = 60_000) { val chatController = ChatController waitDbMigrationEnds(chatController) try { @@ -114,7 +114,7 @@ class SimplexService: Service() { Log.w(chat.simplex.app.TAG, "SimplexService: problem with the database: $chatDbStatus") showPassphraseNotification(chatDbStatus) safeStopService() - return@withBGApi + return@withLongRunningApi } saveServiceState(self, ServiceState.STARTED) wakeLock = (getSystemService(Context.POWER_SERVICE) as PowerManager).run { diff --git a/apps/multiplatform/common/src/androidMain/kotlin/chat/simplex/common/helpers/SoundPlayer.kt b/apps/multiplatform/common/src/androidMain/kotlin/chat/simplex/common/helpers/SoundPlayer.kt index 25369ffdf..ff83c10df 100644 --- a/apps/multiplatform/common/src/androidMain/kotlin/chat/simplex/common/helpers/SoundPlayer.kt +++ b/apps/multiplatform/common/src/androidMain/kotlin/chat/simplex/common/helpers/SoundPlayer.kt @@ -8,9 +8,7 @@ import androidx.core.content.ContextCompat import chat.simplex.common.R import chat.simplex.common.platform.SoundPlayerInterface import chat.simplex.common.platform.androidAppContext -import chat.simplex.common.views.helpers.withScope -import kotlinx.coroutines.CoroutineScope -import kotlinx.coroutines.delay +import kotlinx.coroutines.* object SoundPlayer: SoundPlayerInterface { private var player: MediaPlayer? = null @@ -31,7 +29,7 @@ object SoundPlayer: SoundPlayerInterface { val vibrator = ContextCompat.getSystemService(androidAppContext, Vibrator::class.java) val effect = VibrationEffect.createOneShot(250, VibrationEffect.DEFAULT_AMPLITUDE) playing = true - withScope(scope) { + scope.launch { while (playing) { if (sound) player?.start() vibrator?.vibrate(effect) diff --git a/apps/multiplatform/common/src/androidMain/kotlin/chat/simplex/common/views/call/CallView.android.kt b/apps/multiplatform/common/src/androidMain/kotlin/chat/simplex/common/views/call/CallView.android.kt index 5f30d21bb..ac14b5199 100644 --- a/apps/multiplatform/common/src/androidMain/kotlin/chat/simplex/common/views/call/CallView.android.kt +++ b/apps/multiplatform/common/src/androidMain/kotlin/chat/simplex/common/views/call/CallView.android.kt @@ -383,7 +383,7 @@ private fun DisabledBackgroundCallsButton() { Modifier .padding(bottom = 24.dp) .clickable { - withBGApi { + withLongRunningApi { show = !platform.androidAskToAllowBackgroundCalls() } } diff --git a/apps/multiplatform/common/src/androidMain/kotlin/chat/simplex/common/views/newchat/QRCodeScanner.android.kt b/apps/multiplatform/common/src/androidMain/kotlin/chat/simplex/common/views/newchat/QRCodeScanner.android.kt index 362d793e8..b8f5abc50 100644 --- a/apps/multiplatform/common/src/androidMain/kotlin/chat/simplex/common/views/newchat/QRCodeScanner.android.kt +++ b/apps/multiplatform/common/src/androidMain/kotlin/chat/simplex/common/views/newchat/QRCodeScanner.android.kt @@ -133,7 +133,7 @@ actual fun QRCodeScanner( } } !cameraPermissionState.hasPermission -> { - Button({ withBGApi { cameraPermissionState.launchPermissionRequest() } }, modifier = modifier, colors = buttonColors) { + Button({ cameraPermissionState.launchPermissionRequest() }, modifier = modifier, colors = buttonColors) { Icon(painterResource(MR.images.ic_camera_enhance), null) Spacer(Modifier.width(DEFAULT_PADDING_HALF)) Text(stringResource(MR.strings.enable_camera_access)) diff --git a/apps/multiplatform/common/src/androidMain/kotlin/chat/simplex/common/views/usersettings/Appearance.android.kt b/apps/multiplatform/common/src/androidMain/kotlin/chat/simplex/common/views/usersettings/Appearance.android.kt index 932d259df..e02c011fa 100644 --- a/apps/multiplatform/common/src/androidMain/kotlin/chat/simplex/common/views/usersettings/Appearance.android.kt +++ b/apps/multiplatform/common/src/androidMain/kotlin/chat/simplex/common/views/usersettings/Appearance.android.kt @@ -102,7 +102,7 @@ fun AppearanceScope.AppearanceLayout( val state = rememberSaveable { mutableStateOf(languagePref.get() ?: "system") } LangSelector(state) { state.value = it - withBGApi { + withApi { delay(200) val activity = context as? Activity if (activity != null) { diff --git a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/platform/NtfManager.kt b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/platform/NtfManager.kt index c9ede4848..a75ee7590 100644 --- a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/platform/NtfManager.kt +++ b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/platform/NtfManager.kt @@ -55,7 +55,7 @@ abstract class NtfManager { } fun openChatAction(userId: Long?, chatId: ChatId) { - withBGApi { + withLongRunningApi(slow = 30_000, deadlock = 60_000) { awaitChatStartedIfNeeded(chatModel) if (userId != null && userId != chatModel.currentUser.value?.userId && chatModel.currentUser.value != null) { // TODO include remote host ID in desktop notifications? @@ -70,7 +70,7 @@ abstract class NtfManager { } fun showChatsAction(userId: Long?) { - withBGApi { + withLongRunningApi(slow = 30_000, deadlock = 60_000) { awaitChatStartedIfNeeded(chatModel) if (userId != null && userId != chatModel.currentUser.value?.userId && chatModel.currentUser.value != null) { // TODO include remote host ID in desktop notifications? diff --git a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/ComposeView.kt b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/ComposeView.kt index cd0c424e0..e5982d01d 100644 --- a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/ComposeView.kt +++ b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/ComposeView.kt @@ -267,7 +267,7 @@ fun ComposeView( fun loadLinkPreview(url: String, wait: Long? = null) { if (pendingLinkUrl.value == url) { composeState.value = composeState.value.copy(preview = ComposePreview.CLinkPreview(null)) - withBGApi { + withLongRunningApi(slow = 30_000, deadlock = 60_000) { if (wait != null) delay(wait) val lp = getLinkPreview(url) if (lp != null && pendingLinkUrl.value == url) { @@ -551,7 +551,7 @@ fun ComposeView( } fun sendMessage(ttl: Int?) { - withBGApi { + withLongRunningApi(slow = 30_000, deadlock = 60_000) { sendMessageAsync(null, false, ttl) } } diff --git a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/group/AddGroupMembersView.kt b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/group/AddGroupMembersView.kt index 56656b7fc..e4f31748c 100644 --- a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/group/AddGroupMembersView.kt +++ b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/group/AddGroupMembersView.kt @@ -54,7 +54,7 @@ fun AddGroupMembersView(rhId: Long?, groupInfo: GroupInfo, creatingGroup: Boolea }, inviteMembers = { allowModifyMembers = false - withBGApi { + withLongRunningApi(slow = 30_000, deadlock = 60_000) { for (contactId in selectedContacts) { val member = chatModel.controller.apiAddMember(rhId, groupInfo.groupId, contactId, selectedRole.value) if (member != null) { diff --git a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/item/CIFileView.kt b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/item/CIFileView.kt index 24e9fd691..6a1db9249 100644 --- a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/item/CIFileView.kt +++ b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/item/CIFileView.kt @@ -94,7 +94,7 @@ fun CIFileView( FileProtocol.LOCAL -> {} } file.fileStatus is CIFileStatus.RcvComplete || (file.fileStatus is CIFileStatus.SndStored && file.fileProtocol == FileProtocol.LOCAL) -> { - withBGApi { + withLongRunningApi(slow = 60_000, deadlock = 600_000) { var filePath = getLoadedFilePath(file) if (chatModel.connectedToRemote() && filePath == null) { file.loadRemoteFile(true) diff --git a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/item/CIVIdeoView.kt b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/item/CIVIdeoView.kt index 413d95b67..a5a952108 100644 --- a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/item/CIVIdeoView.kt +++ b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/item/CIVIdeoView.kt @@ -41,7 +41,7 @@ fun CIVideoView( val filePath = remember(file, CIFile.cachedRemoteFileRequests.toList()) { mutableStateOf(getLoadedFilePath(file)) } if (chatModel.connectedToRemote()) { LaunchedEffect(file) { - withBGApi { + withLongRunningApi(slow = 60_000, deadlock = 600_000) { if (file != null && file.loaded && getLoadedFilePath(file) == null) { file.loadRemoteFile(false) filePath.value = getLoadedFilePath(file) diff --git a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/item/ChatItemView.kt b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/item/ChatItemView.kt index 073d10887..8f49ce92c 100644 --- a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/item/ChatItemView.kt +++ b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/item/ChatItemView.kt @@ -213,7 +213,7 @@ fun ChatItemView( showMenu.value = false } if (chatModel.connectedToRemote() && fileSource == null) { - withBGApi { + withLongRunningApi(slow = 60_000, deadlock = 600_000) { cItem.file?.loadRemoteFile(true) fileSource = getLoadedFileSource(cItem.file) shareIfExists() diff --git a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/database/DatabaseEncryptionView.kt b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/database/DatabaseEncryptionView.kt index 406f79d45..86558162d 100644 --- a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/database/DatabaseEncryptionView.kt +++ b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/database/DatabaseEncryptionView.kt @@ -62,7 +62,7 @@ fun DatabaseEncryptionView(m: ChatModel) { initialRandomDBPassphrase, progressIndicator, onConfirmEncrypt = { - withBGApi { + withLongRunningApi(slow = 30_000, deadlock = 60_000) { encryptDatabase(currentKey, newKey, confirmNewKey, initialRandomDBPassphrase, useKeychain, storedKey, progressIndicator) } } diff --git a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/database/DatabaseView.kt b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/database/DatabaseView.kt index 58d3bfd63..2d644b297 100644 --- a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/database/DatabaseView.kt +++ b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/database/DatabaseView.kt @@ -368,7 +368,7 @@ fun chatArchiveTitle(chatArchiveTime: Instant, chatLastStart: Instant): String { } fun startChat(m: ChatModel, chatLastStart: MutableState<Instant?>, chatDbChanged: MutableState<Boolean>, progressIndicator: MutableState<Boolean>? = null) { - withBGApi { + withLongRunningApi(slow = 30_000, deadlock = 60_000) { try { progressIndicator?.value = true if (chatDbChanged.value) { @@ -378,12 +378,12 @@ fun startChat(m: ChatModel, chatLastStart: MutableState<Instant?>, chatDbChanged if (m.chatDbStatus.value !is DBMigrationResult.OK) { /** Hide current view and show [DatabaseErrorView] */ ModalManager.closeAllModalsEverywhere() - return@withBGApi + return@withLongRunningApi } val user = m.currentUser.value if (user == null) { ModalManager.closeAllModalsEverywhere() - return@withBGApi + return@withLongRunningApi } else { m.controller.startChat(user) } @@ -581,7 +581,7 @@ private fun importArchive( progressIndicator.value = true val archivePath = saveArchiveFromURI(importedArchiveURI) if (archivePath != null) { - withBGApi { + withLongRunningApi(slow = 60_000, deadlock = 180_000) { try { m.controller.apiDeleteStorage() try { diff --git a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/helpers/ProcessedErrors.kt b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/helpers/ProcessedErrors.kt index d98f38d71..b645cb1ee 100644 --- a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/helpers/ProcessedErrors.kt +++ b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/helpers/ProcessedErrors.kt @@ -16,7 +16,7 @@ class ProcessedErrors <T: AgentErrorType>(val interval: Long) { fun newError(error: T, offerRestart: Boolean) { timer.cancel() - timer = withBGApi { + timer = withLongRunningApi(slow = 70_000, deadlock = 130_000) { val delayBeforeNext = (lastShownTimestamp + interval) - System.currentTimeMillis() if ((lastShownOfferRestart || !offerRestart) && delayBeforeNext >= 0) { delay(delayBeforeNext) diff --git a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/helpers/Utils.kt b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/helpers/Utils.kt index 75c730b72..33ee72841 100644 --- a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/helpers/Utils.kt +++ b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/helpers/Utils.kt @@ -27,11 +27,9 @@ import kotlin.math.* private val singleThreadDispatcher = Executors.newSingleThreadExecutor().asCoroutineDispatcher() -fun withApi(action: suspend CoroutineScope.() -> Unit): Job = withScope(GlobalScope, action) - -fun withScope(scope: CoroutineScope, action: suspend CoroutineScope.() -> Unit): Job = +fun withApi(action: suspend CoroutineScope.() -> Unit): Job = Exception().let { - scope.launch { withContext(Dispatchers.Main, block = { wrapWithLogging(action, it) }) } + CoroutineScope(Dispatchers.Main).launch(block = { wrapWithLogging(action, it) }) } fun withBGApi(action: suspend CoroutineScope.() -> Unit): Job = diff --git a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/localauth/LocalAuthView.kt b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/localauth/LocalAuthView.kt index cf10d33cb..1048b03bc 100644 --- a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/localauth/LocalAuthView.kt +++ b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/localauth/LocalAuthView.kt @@ -49,7 +49,7 @@ fun LocalAuthView(m: ChatModel, authRequest: LocalAuthRequest) { } private fun deleteStorageAndRestart(m: ChatModel, password: String, completed: (LAResult) -> Unit) { - withBGApi { + withLongRunningApi(slow = 30_000, deadlock = 60_000) { try { /** Waiting until [initChatController] finishes */ while (m.ctrlInitInProgress.value) { @@ -78,7 +78,7 @@ private fun deleteStorageAndRestart(m: ChatModel, password: String, completed: ( displayNamePref.set(null) reinitChatController() if (m.currentUser.value != null) { - return@withBGApi + return@withLongRunningApi } var profile: Profile? = null if (!displayName.isNullOrEmpty()) { diff --git a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/onboarding/SetupDatabasePassphrase.kt b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/onboarding/SetupDatabasePassphrase.kt index 9dd3e20c2..854770489 100644 --- a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/onboarding/SetupDatabasePassphrase.kt +++ b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/onboarding/SetupDatabasePassphrase.kt @@ -50,7 +50,7 @@ fun SetupDatabasePassphrase(m: ChatModel) { confirmNewKey, progressIndicator, onConfirmEncrypt = { - withBGApi { + withLongRunningApi(slow = 30_000, deadlock = 60_000) { if (m.chatRunning.value == true) { // Stop chat if it's started before doing anything stopChatAsync(m) diff --git a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/usersettings/PrivacySettings.kt b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/usersettings/PrivacySettings.kt index e6ec2ba23..76aa905b8 100644 --- a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/usersettings/PrivacySettings.kt +++ b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/usersettings/PrivacySettings.kt @@ -96,7 +96,7 @@ fun PrivacySettingsView( val currentUser = chatModel.currentUser.value if (currentUser != null) { fun setSendReceiptsContacts(enable: Boolean, clearOverrides: Boolean) { - withBGApi { + withLongRunningApi(slow = 30_000, deadlock = 60_000) { val mrs = UserMsgReceiptSettings(enable, clearOverrides) chatModel.controller.apiSetUserContactReceipts(currentUser, mrs) chatModel.controller.appPrefs.privacyDeliveryReceiptsSet.set(true) @@ -119,7 +119,7 @@ fun PrivacySettingsView( } fun setSendReceiptsGroups(enable: Boolean, clearOverrides: Boolean) { - withBGApi { + withLongRunningApi(slow = 30_000, deadlock = 60_000) { val mrs = UserMsgReceiptSettings(enable, clearOverrides) chatModel.controller.apiSetUserGroupReceipts(currentUser, mrs) chatModel.controller.appPrefs.privacyDeliveryReceiptsSet.set(true) diff --git a/apps/multiplatform/common/src/desktopMain/kotlin/chat/simplex/common/platform/RecAndPlay.desktop.kt b/apps/multiplatform/common/src/desktopMain/kotlin/chat/simplex/common/platform/RecAndPlay.desktop.kt index b6d18aaf8..50d143aaf 100644 --- a/apps/multiplatform/common/src/desktopMain/kotlin/chat/simplex/common/platform/RecAndPlay.desktop.kt +++ b/apps/multiplatform/common/src/desktopMain/kotlin/chat/simplex/common/platform/RecAndPlay.desktop.kt @@ -211,15 +211,13 @@ actual object SoundPlayer: SoundPlayerInterface { var playing = false override fun start(scope: CoroutineScope, sound: Boolean) { - withBGApi { - val tmpFile = File(tmpDir, UUID.randomUUID().toString()) - tmpFile.deleteOnExit() - SoundPlayer::class.java.getResource("/media/ring_once.mp3").openStream()!!.use { it.copyTo(tmpFile.outputStream()) } - playing = true - while (playing) { - if (sound) { - AudioPlayer.play(CryptoFile.plain(tmpFile.absolutePath), mutableStateOf(true), mutableStateOf(0), mutableStateOf(0), true) - } + val tmpFile = File(tmpDir, UUID.randomUUID().toString()) + tmpFile.deleteOnExit() + SoundPlayer::class.java.getResource("/media/ring_once.mp3").openStream()!!.use { it.copyTo(tmpFile.outputStream()) } + playing = true + scope.launch { + while (playing && sound) { + AudioPlayer.play(CryptoFile.plain(tmpFile.absolutePath), mutableStateOf(true), mutableStateOf(0), mutableStateOf(0), true) delay(3500) } } diff --git a/apps/multiplatform/common/src/desktopMain/kotlin/chat/simplex/common/views/chat/item/ChatItemView.desktop.kt b/apps/multiplatform/common/src/desktopMain/kotlin/chat/simplex/common/views/chat/item/ChatItemView.desktop.kt index b5e0968c8..29e9d5bae 100644 --- a/apps/multiplatform/common/src/desktopMain/kotlin/chat/simplex/common/views/chat/item/ChatItemView.desktop.kt +++ b/apps/multiplatform/common/src/desktopMain/kotlin/chat/simplex/common/views/chat/item/ChatItemView.desktop.kt @@ -42,7 +42,7 @@ actual fun SaveContentItemAction(cItem: ChatItem, saveFileLauncher: FileChooserL } var fileSource = getLoadedFileSource(cItem.file) if (chatModel.connectedToRemote() && fileSource == null) { - withBGApi { + withLongRunningApi(slow = 60_000, deadlock = 600_000) { cItem.file?.loadRemoteFile(true) fileSource = getLoadedFileSource(cItem.file) saveIfExists() @@ -51,7 +51,7 @@ actual fun SaveContentItemAction(cItem: ChatItem, saveFileLauncher: FileChooserL }) } -actual fun copyItemToClipboard(cItem: ChatItem, clipboard: ClipboardManager) = withBGApi { +actual fun copyItemToClipboard(cItem: ChatItem, clipboard: ClipboardManager) = withLongRunningApi(slow = 60_000, deadlock = 600_000) { var fileSource = getLoadedFileSource(cItem.file) if (chatModel.connectedToRemote() && fileSource == null) { cItem.file?.loadRemoteFile(true) @@ -63,10 +63,10 @@ actual fun copyItemToClipboard(cItem: ChatItem, clipboard: ClipboardManager) = w val tmpFile = File(tmpDir, fileSource.filePath) tmpFile.deleteOnExit() try { - decryptCryptoFile(getAppFilePath(fileSource.filePath), fileSource.cryptoArgs ?: return@withBGApi, tmpFile.absolutePath) + decryptCryptoFile(getAppFilePath(fileSource.filePath), fileSource.cryptoArgs ?: return@withLongRunningApi, tmpFile.absolutePath) } catch (e: Exception) { Log.e(TAG, "Unable to decrypt crypto file: " + e.stackTraceToString()) - return@withBGApi + return@withLongRunningApi } tmpFile.absolutePath } else { diff --git a/apps/multiplatform/common/src/desktopMain/kotlin/chat/simplex/common/views/usersettings/Appearance.desktop.kt b/apps/multiplatform/common/src/desktopMain/kotlin/chat/simplex/common/views/usersettings/Appearance.desktop.kt index 8d7cbed84..1a8ad010e 100644 --- a/apps/multiplatform/common/src/desktopMain/kotlin/chat/simplex/common/views/usersettings/Appearance.desktop.kt +++ b/apps/multiplatform/common/src/desktopMain/kotlin/chat/simplex/common/views/usersettings/Appearance.desktop.kt @@ -51,7 +51,7 @@ fun AppearanceScope.AppearanceLayout( val state = rememberSaveable { mutableStateOf(languagePref.get() ?: "system") } LangSelector(state) { state.value = it - withBGApi { + withApi { delay(200) if (it == "system") { languagePref.set(null) From 68de2b7540f4ff8a8ccce1818b54cabb4102e6bc Mon Sep 17 00:00:00 2001 From: Evgeny Poberezkin <evgeny@poberezkin.com> Date: Fri, 19 Jan 2024 19:50:21 +0000 Subject: [PATCH 15/23] core: update preset smp servers (#3713) --- src/Simplex/Chat.hs | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) diff --git a/src/Simplex/Chat.hs b/src/Simplex/Chat.hs index fcb7be61b..026e5799a 100644 --- a/src/Simplex/Chat.hs +++ b/src/Simplex/Chat.hs @@ -162,14 +162,12 @@ defaultChatConfig = _defaultSMPServers :: NonEmpty SMPServerWithAuth _defaultSMPServers = L.fromList - [ "smp://1OwYGt-yqOfe2IyVHhxz3ohqo3aCCMjtB-8wn4X_aoY=@smp11.simplex.im,6ioorbm6i3yxmuoezrhjk6f6qgkc4syabh7m3so74xunb5nzr4pwgfqd.onion", + [ "smp://0YuTwO05YJWS8rkjn9eLJDjQhFKvIYd8d4xG8X1blIU=@smp8.simplex.im,beccx4yfxxbvyhqypaavemqurytl6hozr47wfc7uuecacjqdvwpw2xid.onion", + "smp://SkIkI6EPd2D63F4xFKfHk7I1UGZVNn6k1QWZ5rcyr6w=@smp9.simplex.im,jssqzccmrcws6bhmn77vgmhfjmhwlyr3u7puw4erkyoosywgl67slqqd.onion", + "smp://6iIcWT_dF2zN_w5xzZEY7HI2Prbh3ldP07YTyDexPjE=@smp10.simplex.im,rb2pbttocvnbrngnwziclp2f4ckjq65kebafws6g4hy22cdaiv5dwjqd.onion", + "smp://1OwYGt-yqOfe2IyVHhxz3ohqo3aCCMjtB-8wn4X_aoY=@smp11.simplex.im,6ioorbm6i3yxmuoezrhjk6f6qgkc4syabh7m3so74xunb5nzr4pwgfqd.onion", "smp://UkMFNAXLXeAAe0beCa4w6X_zp18PwxSaSjY17BKUGXQ=@smp12.simplex.im,ie42b5weq7zdkghocs3mgxdjeuycheeqqmksntj57rmejagmg4eor5yd.onion", - "smp://enEkec4hlR3UtKx2NMpOUK_K4ZuDxjWBO1d9Y4YXVaA=@smp14.simplex.im,aspkyu2sopsnizbyfabtsicikr2s4r3ti35jogbcekhm3fsoeyjvgrid.onion", - "smp://h--vW7ZSkXPeOUpfxlFGgauQmXNFOzGoizak7Ult7cw=@smp15.simplex.im,oauu4bgijybyhczbnxtlggo6hiubahmeutaqineuyy23aojpih3dajad.onion", - "smp://hejn2gVIqNU6xjtGM3OwQeuk8ZEbDXVJXAlnSBJBWUA=@smp16.simplex.im,p3ktngodzi6qrf7w64mmde3syuzrv57y55hxabqcq3l5p6oi7yzze6qd.onion", - "smp://ZKe4uxF4Z_aLJJOEsC-Y6hSkXgQS5-oc442JQGkyP8M=@smp17.simplex.im,ogtwfxyi3h2h5weftjjpjmxclhb5ugufa5rcyrmg7j4xlch7qsr5nuqd.onion", - "smp://PtsqghzQKU83kYTlQ1VKg996dW4Cw4x_bvpKmiv8uns=@smp18.simplex.im,lyqpnwbs2zqfr45jqkncwpywpbtq7jrhxnib5qddtr6npjyezuwd3nqd.onion", - "smp://N_McQS3F9TGoh4ER0QstUf55kGnNSd-wXfNPZ7HukcM=@smp19.simplex.im,i53bbtoqhlc365k6kxzwdp5w3cdt433s7bwh3y32rcbml2vztiyyz5id.onion" + "smp://enEkec4hlR3UtKx2NMpOUK_K4ZuDxjWBO1d9Y4YXVaA=@smp14.simplex.im,aspkyu2sopsnizbyfabtsicikr2s4r3ti35jogbcekhm3fsoeyjvgrid.onion" ] _defaultNtfServers :: [NtfServer] From cc05434b3169e61343c03ea72ce94a2750c035e6 Mon Sep 17 00:00:00 2001 From: Evgeny Poberezkin <evgeny@poberezkin.com> Date: Sat, 20 Jan 2024 08:17:57 +0000 Subject: [PATCH 16/23] core: process message errors (#3709) * core: process message errors * update simplexmq commit sha * style Co-authored-by: spaced4ndy <8711996+spaced4ndy@users.noreply.github.com> * simplexmq --------- Co-authored-by: spaced4ndy <8711996+spaced4ndy@users.noreply.github.com> --- cabal.project | 2 +- scripts/nix/sha256map.nix | 2 +- src/Simplex/Chat.hs | 60 +++++++++++++++++++++++++++++---------- 3 files changed, 47 insertions(+), 17 deletions(-) diff --git a/cabal.project b/cabal.project index f5853e5f8..908962f5c 100644 --- a/cabal.project +++ b/cabal.project @@ -12,7 +12,7 @@ constraints: zip +disable-bzip2 +disable-zstd source-repository-package type: git location: https://github.com/simplex-chat/simplexmq.git - tag: eb41abfb8fe84c7212abca8d1179b5308d937274 + tag: baf2c470658a675f383a0aa628f37b39337f41d9 source-repository-package type: git diff --git a/scripts/nix/sha256map.nix b/scripts/nix/sha256map.nix index 9b5982ad1..83458efdf 100644 --- a/scripts/nix/sha256map.nix +++ b/scripts/nix/sha256map.nix @@ -1,5 +1,5 @@ { - "https://github.com/simplex-chat/simplexmq.git"."eb41abfb8fe84c7212abca8d1179b5308d937274" = "1hxrwib82gzx4j251dz88ivhi288sajg7fccdxbig28dj1gfz4s7"; + "https://github.com/simplex-chat/simplexmq.git"."baf2c470658a675f383a0aa628f37b39337f41d9" = "0zg94ycr72x7zyp1zqnwbld2l6znqiqdygzl5mfn9yclpv76ihmg"; "https://github.com/simplex-chat/hs-socks.git"."a30cc7a79a08d8108316094f8f2f82a0c5e1ac51" = "0yasvnr7g91k76mjkamvzab2kvlb1g5pspjyjn2fr6v83swjhj38"; "https://github.com/simplex-chat/direct-sqlcipher.git"."f814ee68b16a9447fbb467ccc8f29bdd3546bfd9" = "1ql13f4kfwkbaq7nygkxgw84213i0zm7c1a8hwvramayxl38dq5d"; "https://github.com/simplex-chat/sqlcipher-simple.git"."a46bd361a19376c5211f1058908fc0ae6bf42446" = "1z0r78d8f0812kxbgsm735qf6xx8lvaz27k1a0b4a2m0sshpd5gl"; diff --git a/src/Simplex/Chat.hs b/src/Simplex/Chat.hs index 026e5799a..564db9b42 100644 --- a/src/Simplex/Chat.hs +++ b/src/Simplex/Chat.hs @@ -3472,6 +3472,9 @@ processAgentMessageConn vr user@User {userId} corrId agentConnId agentMessage = MERR _ err -> do toView $ CRChatError (Just user) (ChatErrorAgent err $ Just connEntity) incAuthErrCounter connEntity conn err + MERRS _ err -> do + -- error cannot be AUTH error here + toView $ CRChatError (Just user) (ChatErrorAgent err $ Just connEntity) ERR err -> do toView $ CRChatError (Just user) (ChatErrorAgent err $ Just connEntity) when (corrId /= "") $ withCompletedCommand conn agentMsg $ \_cmdData -> pure () @@ -3633,6 +3636,10 @@ processAgentMessageConn vr user@User {userId} corrId agentConnId agentMessage = updateDirectItemStatus ct conn msgId $ agentErrToItemStatus err toView $ CRChatError (Just user) (ChatErrorAgent err $ Just connEntity) incAuthErrCounter connEntity conn err + MERRS msgIds err -> do + -- error cannot be AUTH error here + updateDirectItemsStatus ct conn (L.toList msgIds) $ agentErrToItemStatus err + toView $ CRChatError (Just user) (ChatErrorAgent err $ Just connEntity) ERR err -> do toView $ CRChatError (Just user) (ChatErrorAgent err $ Just connEntity) when (corrId /= "") $ withCompletedCommand conn agentMsg $ \_cmdData -> pure () @@ -4003,18 +4010,26 @@ processAgentMessageConn vr user@User {userId} corrId agentConnId agentMessage = withCompletedCommand conn agentMsg $ \CommandData {cmdFunction, cmdId} -> when (cmdFunction == CFAckMessage) $ ackMsgDeliveryEvent conn cmdId MERR msgId err -> do - chatItemId_ <- withStore' $ \db -> getChatItemIdByAgentMsgId db connId msgId - forM_ chatItemId_ $ \itemId -> do - let GroupMember {groupMemberId} = m - updateGroupMemSndStatus itemId groupMemberId $ agentErrToItemStatus err + withStore' $ \db -> updateGroupItemErrorStatus db msgId (groupMemberId' m) $ agentErrToItemStatus err -- group errors are silenced to reduce load on UI event log -- toView $ CRChatError (Just user) (ChatErrorAgent err $ Just connEntity) incAuthErrCounter connEntity conn err + MERRS msgIds err -> do + let newStatus = agentErrToItemStatus err + -- error cannot be AUTH error here + withStore' $ \db -> forM_ msgIds $ \msgId -> + updateGroupItemErrorStatus db msgId (groupMemberId' m) newStatus `catchAll_` pure () + toView $ CRChatError (Just user) (ChatErrorAgent err $ Just connEntity) ERR err -> do toView $ CRChatError (Just user) (ChatErrorAgent err $ Just connEntity) when (corrId /= "") $ withCompletedCommand conn agentMsg $ \_cmdData -> pure () -- TODO add debugging output _ -> pure () + where + updateGroupItemErrorStatus :: DB.Connection -> AgentMsgId -> GroupMemberId -> CIStatus 'MDSnd -> IO () + updateGroupItemErrorStatus db msgId groupMemberId newStatus = do + chatItemId_ <- getChatItemIdByAgentMsgId db connId msgId + forM_ chatItemId_ $ \itemId -> updateGroupMemSndStatus' db itemId groupMemberId newStatus agentMsgDecryptError :: AgentCryptoError -> (MsgDecryptError, Word32) agentMsgDecryptError = \case @@ -5609,24 +5624,39 @@ processAgentMessageConn vr user@User {userId} corrId agentConnId agentMessage = withStore' $ \db -> updateSndMsgDeliveryStatus db connId agentMsgId $ MDSSndRcvd msgRcptStatus updateGroupItemStatus gInfo m conn agentMsgId $ CISSndRcvd msgRcptStatus SSPComplete - updateDirectItemStatus :: Contact -> Connection -> AgentMsgId -> CIStatus 'MDSnd -> m () - updateDirectItemStatus ct@Contact {contactId} Connection {connId} msgId newStatus = - withStore' (\db -> getDirectChatItemByAgentMsgId db user contactId connId msgId) >>= \case - Just (CChatItem SMDSnd ChatItem {meta = CIMeta {itemStatus = CISSndRcvd _ _}}) -> pure () - Just (CChatItem SMDSnd ChatItem {meta = CIMeta {itemId, itemStatus}}) - | itemStatus == newStatus -> pure () - | otherwise -> do - chatItem <- withStore $ \db -> updateDirectChatItemStatus db user ct itemId newStatus - toView $ CRChatItemStatusUpdated user (AChatItem SCTDirect SMDSnd (DirectChat ct) chatItem) + updateDirectItemsStatus :: Contact -> Connection -> [AgentMsgId] -> CIStatus 'MDSnd -> m () + updateDirectItemsStatus ct conn msgIds newStatus = do + cis_ <- withStore' $ \db -> forM msgIds $ \msgId -> runExceptT $ updateDirectItemStatus' db ct conn msgId newStatus + -- only send the last expired item event to view + case catMaybes $ rights $ reverse cis_ of + ci : _ -> toView $ CRChatItemStatusUpdated user (AChatItem SCTDirect SMDSnd (DirectChat ct) ci) _ -> pure () + updateDirectItemStatus :: Contact -> Connection -> AgentMsgId -> CIStatus 'MDSnd -> m () + updateDirectItemStatus ct conn msgId newStatus = do + ci_ <- withStore $ \db -> updateDirectItemStatus' db ct conn msgId newStatus + forM_ ci_ $ \ci -> toView $ CRChatItemStatusUpdated user (AChatItem SCTDirect SMDSnd (DirectChat ct) ci) + + updateDirectItemStatus' :: DB.Connection -> Contact -> Connection -> AgentMsgId -> CIStatus 'MDSnd -> ExceptT StoreError IO (Maybe (ChatItem 'CTDirect 'MDSnd)) + updateDirectItemStatus' db ct@Contact {contactId} Connection {connId} msgId newStatus = + liftIO (getDirectChatItemByAgentMsgId db user contactId connId msgId) >>= \case + Just (CChatItem SMDSnd ChatItem {meta = CIMeta {itemStatus = CISSndRcvd _ _}}) -> pure Nothing + Just (CChatItem SMDSnd ChatItem {meta = CIMeta {itemId, itemStatus}}) + | itemStatus == newStatus -> pure Nothing + | otherwise -> Just <$> updateDirectChatItemStatus db user ct itemId newStatus + _ -> pure Nothing + updateGroupMemSndStatus :: ChatItemId -> GroupMemberId -> CIStatus 'MDSnd -> m Bool updateGroupMemSndStatus itemId groupMemberId newStatus = - runExceptT (withStore $ \db -> getGroupSndStatus db itemId groupMemberId) >>= \case + withStore' $ \db -> updateGroupMemSndStatus' db itemId groupMemberId newStatus + + updateGroupMemSndStatus' :: DB.Connection -> ChatItemId -> GroupMemberId -> CIStatus 'MDSnd -> IO Bool + updateGroupMemSndStatus' db itemId groupMemberId newStatus = + runExceptT (getGroupSndStatus db itemId groupMemberId) >>= \case Right (CISSndRcvd _ _) -> pure False Right memStatus | memStatus == newStatus -> pure False - | otherwise -> withStore' (\db -> updateGroupSndStatus db itemId groupMemberId newStatus) $> True + | otherwise -> updateGroupSndStatus db itemId groupMemberId newStatus $> True _ -> pure False updateGroupItemStatus :: GroupInfo -> GroupMember -> Connection -> AgentMsgId -> CIStatus 'MDSnd -> m () From f188118643ea71746ad852eb6af1ca60bdb5bf5b Mon Sep 17 00:00:00 2001 From: Evgeny Poberezkin <evgeny@poberezkin.com> Date: Sat, 20 Jan 2024 09:07:57 +0000 Subject: [PATCH 17/23] ui: update whats new (#3716) --- apps/ios/Shared/Views/Onboarding/WhatsNewView.swift | 5 ----- .../chat/simplex/common/views/onboarding/WhatsNewView.kt | 5 ----- .../common/src/commonMain/resources/MR/base/strings.xml | 2 -- 3 files changed, 12 deletions(-) diff --git a/apps/ios/Shared/Views/Onboarding/WhatsNewView.swift b/apps/ios/Shared/Views/Onboarding/WhatsNewView.swift index d8830e8eb..ece10e46d 100644 --- a/apps/ios/Shared/Views/Onboarding/WhatsNewView.swift +++ b/apps/ios/Shared/Views/Onboarding/WhatsNewView.swift @@ -333,11 +333,6 @@ private let versionDescriptions: [VersionDescription] = [ title: "Join group conversations", description: "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)." ), - FeatureDescription( - icon: "person.2", - title: "Safer groups", - description: "- block a member to stop spam for all.\n- contact address is not shared." - ), FeatureDescription( icon: "battery.50", title: "Improved message delivery", diff --git a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/onboarding/WhatsNewView.kt b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/onboarding/WhatsNewView.kt index e5507430e..fce0ceb55 100644 --- a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/onboarding/WhatsNewView.kt +++ b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/onboarding/WhatsNewView.kt @@ -482,11 +482,6 @@ private val versionDescriptions: List<VersionDescription> = listOf( descrId = MR.strings.v5_5_join_group_conversation_descr, link = "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" ), - FeatureDescription( - icon = MR.images.ic_group, - titleId = MR.strings.v5_5_safer_groups, - descrId = MR.strings.v5_5_safer_groups_descr - ), FeatureDescription( icon = MR.images.ic_battery_3_bar, titleId = MR.strings.v5_5_message_delivery, diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/base/strings.xml b/apps/multiplatform/common/src/commonMain/resources/MR/base/strings.xml index 71ecc9963..aae9d54e9 100644 --- a/apps/multiplatform/common/src/commonMain/resources/MR/base/strings.xml +++ b/apps/multiplatform/common/src/commonMain/resources/MR/base/strings.xml @@ -1685,8 +1685,6 @@ <string name="v5_5_simpler_connect_ui_descr">Search bar accepts invitation links.</string> <string name="v5_5_join_group_conversation">Join group conversations</string> <string name="v5_5_join_group_conversation_descr">Recent history and improved directory bot.</string> - <string name="v5_5_safer_groups">Safer groups</string> - <string name="v5_5_safer_groups_descr">- block a member to stop spam for all.\n- contact address is not shared.</string> <string name="v5_5_message_delivery">Improved message delivery</string> <string name="v5_5_message_delivery_descr">With reduced battery usage.</string> <string name="v5_5_new_interface_languages">Hungarian and Turkish UI</string> From 7d2f6a36099d8edf0cd9ce67c27dbf15003060ad Mon Sep 17 00:00:00 2001 From: spaced4ndy <8711996+spaced4ndy@users.noreply.github.com> Date: Sat, 20 Jan 2024 14:33:36 +0400 Subject: [PATCH 18/23] ios: block member for all (#3708) * ios: block for all * member info * change conditions * update ui * blockedByAdmin * fix * rework * fix, comment * comment * fix * fix * fixes for default * fix text * reorder * fix * fix * secondary * old buttons (revert this) * blocked by admin text * revise notification --- apps/ios/Shared/Model/SimpleXAPI.swift | 13 +++ .../Views/Chat/ChatItem/FramedItemView.swift | 4 +- .../Chat/ChatItem/MarkedDeletedItemView.swift | 11 +- apps/ios/Shared/Views/Chat/ChatItemView.swift | 1 + .../Views/Chat/Group/GroupChatInfoView.swift | 68 +++++++++++- .../Chat/Group/GroupMemberInfoView.swift | 100 +++++++++++++++++- apps/ios/SimpleXChat/APITypes.swift | 9 ++ apps/ios/SimpleXChat/ChatTypes.swift | 79 +++++++++----- 8 files changed, 249 insertions(+), 36 deletions(-) diff --git a/apps/ios/Shared/Model/SimpleXAPI.swift b/apps/ios/Shared/Model/SimpleXAPI.swift index e4d2a8318..24a77cb3d 100644 --- a/apps/ios/Shared/Model/SimpleXAPI.swift +++ b/apps/ios/Shared/Model/SimpleXAPI.swift @@ -1141,6 +1141,12 @@ func apiMemberRole(_ groupId: Int64, _ memberId: Int64, _ memberRole: GroupMembe throw r } +func apiBlockMemberForAll(_ groupId: Int64, _ memberId: Int64, _ blocked: Bool) async throws -> GroupMember { + let r = await chatSendCmd(.apiBlockMemberForAll(groupId: groupId, memberId: memberId, blocked: blocked), bgTask: false) + if case let .memberBlockedForAllUser(_, _, member, _) = r { return member } + throw r +} + func leaveGroup(_ groupId: Int64) async { do { let groupInfo = try await apiLeaveGroup(groupId) @@ -1680,6 +1686,13 @@ func processReceivedMsg(_ res: ChatResponse) async { _ = m.upsertGroupMember(groupInfo, member) } } + case let .memberBlockedForAll(user, groupInfo, byMember: _, member: member, blocked: _): + if active(user) { + await MainActor.run { + m.updateGroup(groupInfo) + _ = m.upsertGroupMember(groupInfo, member) + } + } case let .newMemberContactReceivedInv(user, contact, _, _): if active(user) { await MainActor.run { diff --git a/apps/ios/Shared/Views/Chat/ChatItem/FramedItemView.swift b/apps/ios/Shared/Views/Chat/ChatItem/FramedItemView.swift index 1f0ab9ca4..f7775a7cd 100644 --- a/apps/ios/Shared/Views/Chat/ChatItem/FramedItemView.swift +++ b/apps/ios/Shared/Views/Chat/ChatItem/FramedItemView.swift @@ -46,7 +46,9 @@ struct FramedItemView: View { framedItemHeader(icon: "flag", caption: Text("moderated by \(byGroupMember.displayName)").italic()) case .blocked: framedItemHeader(icon: "hand.raised", caption: Text("blocked").italic()) - default: + case .blockedByAdmin: + framedItemHeader(icon: "hand.raised", caption: Text("blocked by admin").italic()) + case .deleted: framedItemHeader(icon: "trash", caption: Text("marked deleted").italic()) } } else if chatItem.meta.isLive { diff --git a/apps/ios/Shared/Views/Chat/ChatItem/MarkedDeletedItemView.swift b/apps/ios/Shared/Views/Chat/ChatItem/MarkedDeletedItemView.swift index c6af95e6f..dfa4a97fc 100644 --- a/apps/ios/Shared/Views/Chat/ChatItem/MarkedDeletedItemView.swift +++ b/apps/ios/Shared/Views/Chat/ChatItem/MarkedDeletedItemView.swift @@ -33,6 +33,7 @@ struct MarkedDeletedItemView: View { var i = m.getChatItemIndex(chatItem) { var moderated = 0 var blocked = 0 + var blockedByAdmin = 0 var deleted = 0 var moderatedBy: Set<String> = [] while i < m.reversedChatItems.count, @@ -44,16 +45,19 @@ struct MarkedDeletedItemView: View { moderated += 1 moderatedBy.insert(byGroupMember.displayName) case .blocked: blocked += 1 + case .blockedByAdmin: blockedByAdmin += 1 case .deleted: deleted += 1 } i += 1 } - let total = moderated + blocked + deleted + let total = moderated + blocked + blockedByAdmin + deleted return total <= 1 ? markedDeletedText : total == moderated ? "\(total) messages moderated by \(moderatedBy.joined(separator: ", "))" - : total == blocked + : total == blockedByAdmin + ? "\(total) messages blocked by admin" + : total == blocked + blockedByAdmin ? "\(total) messages blocked" : "\(total) messages marked deleted" } else { @@ -65,7 +69,8 @@ struct MarkedDeletedItemView: View { switch chatItem.meta.itemDeleted { case let .moderated(_, byGroupMember): "moderated by \(byGroupMember.displayName)" case .blocked: "blocked" - default: "marked deleted" + case .blockedByAdmin: "blocked by admin" + case .deleted, nil: "marked deleted" } } } diff --git a/apps/ios/Shared/Views/Chat/ChatItemView.swift b/apps/ios/Shared/Views/Chat/ChatItemView.swift index 657df6065..8f67a8f73 100644 --- a/apps/ios/Shared/Views/Chat/ChatItemView.swift +++ b/apps/ios/Shared/Views/Chat/ChatItemView.swift @@ -109,6 +109,7 @@ struct ChatItemContentView<Content: View>: View { case let .rcvGroupFeatureRejected(feature): chatFeatureView(feature, .red) case .sndModerated: deletedItemView() case .rcvModerated: deletedItemView() + case .rcvBlocked: deletedItemView() case let .invalidJSON(json): CIInvalidJSONView(json: json) } } diff --git a/apps/ios/Shared/Views/Chat/Group/GroupChatInfoView.swift b/apps/ios/Shared/Views/Chat/Group/GroupChatInfoView.swift index e53347b74..3879e78d3 100644 --- a/apps/ios/Shared/Views/Chat/Group/GroupChatInfoView.swift +++ b/apps/ios/Shared/Views/Chat/Group/GroupChatInfoView.swift @@ -36,6 +36,8 @@ struct GroupChatInfoView: View { case largeGroupReceiptsDisabled case blockMemberAlert(mem: GroupMember) case unblockMemberAlert(mem: GroupMember) + case blockForAllAlert(mem: GroupMember) + case unblockForAllAlert(mem: GroupMember) case removeMemberAlert(mem: GroupMember) case error(title: LocalizedStringKey, error: LocalizedStringKey) @@ -48,6 +50,8 @@ struct GroupChatInfoView: View { case .largeGroupReceiptsDisabled: return "largeGroupReceiptsDisabled" case let .blockMemberAlert(mem): return "blockMemberAlert \(mem.groupMemberId)" case let .unblockMemberAlert(mem): return "unblockMemberAlert \(mem.groupMemberId)" + case let .blockForAllAlert(mem): return "blockForAllAlert \(mem.groupMemberId)" + case let .unblockForAllAlert(mem): return "unblockForAllAlert \(mem.groupMemberId)" case let .removeMemberAlert(mem): return "removeMemberAlert \(mem.groupMemberId)" case let .error(title, _): return "error \(title)" } @@ -143,6 +147,8 @@ struct GroupChatInfoView: View { case .largeGroupReceiptsDisabled: return largeGroupReceiptsDisabledAlert() case let .blockMemberAlert(mem): return blockMemberAlert(groupInfo, mem) case let .unblockMemberAlert(mem): return unblockMemberAlert(groupInfo, mem) + case let .blockForAllAlert(mem): return blockForAllAlert(groupInfo, mem) + case let .unblockForAllAlert(mem): return unblockForAllAlert(groupInfo, mem) case let .removeMemberAlert(mem): return removeMemberAlert(mem) case let .error(title, error): return Alert(title: Text(title), message: Text(error)) } @@ -226,13 +232,10 @@ struct GroupChatInfoView: View { .foregroundColor(.secondary) } Spacer() - let role = member.memberRole - if [.owner, .admin, .observer].contains(role) { - Text(member.memberRole.text) - .foregroundColor(.secondary) - } + memberInfo(member) } + // revert from this: if user { v } else if member.canBeRemoved(groupInfo: groupInfo) { @@ -240,6 +243,43 @@ struct GroupChatInfoView: View { } else { blockSwipe(member, v) } + // revert to this: vvv +// if user { +// v +// } else if groupInfo.membership.memberRole >= .admin { +// // TODO if there are more actions, refactor with lists of swipeActions +// let canBlockForAll = member.canBlockForAll(groupInfo: groupInfo) +// let canRemove = member.canBeRemoved(groupInfo: groupInfo) +// if canBlockForAll && canRemove { +// removeSwipe(member, blockForAllSwipe(member, v)) +// } else if canBlockForAll { +// blockForAllSwipe(member, v) +// } else if canRemove { +// removeSwipe(member, v) +// } else { +// v +// } +// } else { +// if !member.blockedByAdmin { +// blockSwipe(member, v) +// } else { +// v +// } +// } + // ^^^ + } + + @ViewBuilder private func memberInfo(_ member: GroupMember) -> some View { + if member.blocked { + Text("blocked") + .foregroundColor(.secondary) + } else { + let role = member.memberRole + if [.owner, .admin, .observer].contains(role) { + Text(member.memberRole.text) + .foregroundColor(.secondary) + } + } } private func blockSwipe<V: View>(_ member: GroupMember, _ v: V) -> some View { @@ -260,6 +300,24 @@ struct GroupChatInfoView: View { } } + private func blockForAllSwipe<V: View>(_ member: GroupMember, _ v: V) -> some View { + v.swipeActions(edge: .leading) { + if member.blockedByAdmin { + Button { + alert = .unblockForAllAlert(mem: member) + } label: { + Label("Unblock for all", systemImage: "hand.raised.slash").foregroundColor(.accentColor) + } + } else { + Button { + alert = .blockForAllAlert(mem: member) + } label: { + Label("Block for all", systemImage: "hand.raised").foregroundColor(.secondary) + } + } + } + } + private func removeSwipe<V: View>(_ member: GroupMember, _ v: V) -> some View { v.swipeActions(edge: .trailing) { Button(role: .destructive) { diff --git a/apps/ios/Shared/Views/Chat/Group/GroupMemberInfoView.swift b/apps/ios/Shared/Views/Chat/Group/GroupMemberInfoView.swift index 7e336c332..d2b0f7739 100644 --- a/apps/ios/Shared/Views/Chat/Group/GroupMemberInfoView.swift +++ b/apps/ios/Shared/Views/Chat/Group/GroupMemberInfoView.swift @@ -27,6 +27,8 @@ struct GroupMemberInfoView: View { enum GroupMemberInfoViewAlert: Identifiable { case blockMemberAlert(mem: GroupMember) case unblockMemberAlert(mem: GroupMember) + case blockForAllAlert(mem: GroupMember) + case unblockForAllAlert(mem: GroupMember) case removeMemberAlert(mem: GroupMember) case changeMemberRoleAlert(mem: GroupMember, role: GroupMemberRole) case switchAddressAlert @@ -39,6 +41,8 @@ struct GroupMemberInfoView: View { switch self { case let .blockMemberAlert(mem): return "blockMemberAlert \(mem.groupMemberId)" case let .unblockMemberAlert(mem): return "unblockMemberAlert \(mem.groupMemberId)" + case let .blockForAllAlert(mem): return "blockForAllAlert \(mem.groupMemberId)" + case let .unblockForAllAlert(mem): return "unblockForAllAlert \(mem.groupMemberId)" case let .removeMemberAlert(mem): return "removeMemberAlert \(mem.groupMemberId)" case let .changeMemberRoleAlert(mem, role): return "changeMemberRoleAlert \(mem.groupMemberId) \(role.rawValue)" case .switchAddressAlert: return "switchAddressAlert" @@ -164,6 +168,7 @@ struct GroupMemberInfoView: View { } } + // revert from this: Section { if member.memberSettings.showMessages { blockMemberButton(member) @@ -171,9 +176,16 @@ struct GroupMemberInfoView: View { unblockMemberButton(member) } if member.canBeRemoved(groupInfo: groupInfo) { - removeMemberButton(member) + removeMemberButton(member) } } + // revert to this: vvv +// if groupInfo.membership.memberRole >= .admin { +// adminDestructiveSection(member) +// } else { +// nonAdminBlockSection(member) +// } + // ^^^ if developerTools { Section("For console") { @@ -216,6 +228,8 @@ struct GroupMemberInfoView: View { switch(alertItem) { case let .blockMemberAlert(mem): return blockMemberAlert(groupInfo, mem) case let .unblockMemberAlert(mem): return unblockMemberAlert(groupInfo, mem) + case let .blockForAllAlert(mem): return blockForAllAlert(groupInfo, mem) + case let .unblockForAllAlert(mem): return unblockForAllAlert(groupInfo, mem) case let .removeMemberAlert(mem): return removeMemberAlert(mem) case let .changeMemberRoleAlert(mem, _): return changeMemberRoleAlert(mem) case .switchAddressAlert: return switchAddressAlert(switchMemberAddress) @@ -385,6 +399,55 @@ struct GroupMemberInfoView: View { } } + @ViewBuilder private func adminDestructiveSection(_ mem: GroupMember) -> some View { + let canBlockForAll = mem.canBlockForAll(groupInfo: groupInfo) + let canRemove = mem.canBeRemoved(groupInfo: groupInfo) + if canBlockForAll || canRemove { + Section { + if canBlockForAll { + if mem.blockedByAdmin { + unblockForAllButton(mem) + } else { + blockForAllButton(mem) + } + } + if canRemove { + removeMemberButton(mem) + } + } + } + } + + private func nonAdminBlockSection(_ mem: GroupMember) -> some View { + Section { + if mem.blockedByAdmin { + Label("Blocked by admin", systemImage: "hand.raised") + .foregroundColor(.secondary) + } else if mem.memberSettings.showMessages { + blockMemberButton(mem) + } else { + unblockMemberButton(mem) + } + } + } + + private func blockForAllButton(_ mem: GroupMember) -> some View { + Button(role: .destructive) { + alert = .blockForAllAlert(mem: mem) + } label: { + Label("Block for all", systemImage: "hand.raised") + .foregroundColor(.red) + } + } + + private func unblockForAllButton(_ mem: GroupMember) -> some View { + Button { + alert = .unblockForAllAlert(mem: mem) + } label: { + Label("Unblock for all", systemImage: "hand.raised.slash") + } + } + private func blockMemberButton(_ mem: GroupMember) -> some View { Button(role: .destructive) { alert = .blockMemberAlert(mem: mem) @@ -560,6 +623,41 @@ func updateMemberSettings(_ gInfo: GroupInfo, _ member: GroupMember, _ memberSet } } +func blockForAllAlert(_ gInfo: GroupInfo, _ mem: GroupMember) -> Alert { + Alert( + title: Text("Block member for all?"), + message: Text("All new messages from \(mem.chatViewName) will be hidden!"), + primaryButton: .destructive(Text("Block for all")) { + blockMemberForAll(gInfo, mem, true) + }, + secondaryButton: .cancel() + ) +} + +func unblockForAllAlert(_ gInfo: GroupInfo, _ mem: GroupMember) -> Alert { + Alert( + title: Text("Unblock member for all?"), + message: Text("Messages from \(mem.chatViewName) will be shown!"), + primaryButton: .default(Text("Unblock for all")) { + blockMemberForAll(gInfo, mem, false) + }, + secondaryButton: .cancel() + ) +} + +func blockMemberForAll(_ gInfo: GroupInfo, _ member: GroupMember, _ blocked: Bool) { + Task { + do { + let updatedMember = try await apiBlockMemberForAll(gInfo.groupId, member.groupMemberId, blocked) + await MainActor.run { + _ = ChatModel.shared.upsertGroupMember(gInfo, updatedMember) + } + } catch let error { + logger.error("apiBlockMemberForAll error: \(responseError(error))") + } + } +} + struct GroupMemberInfoView_Previews: PreviewProvider { static var previews: some View { GroupMemberInfoView( diff --git a/apps/ios/SimpleXChat/APITypes.swift b/apps/ios/SimpleXChat/APITypes.swift index aff0d0dc3..ae091f841 100644 --- a/apps/ios/SimpleXChat/APITypes.swift +++ b/apps/ios/SimpleXChat/APITypes.swift @@ -55,6 +55,7 @@ public enum ChatCommand { case apiAddMember(groupId: Int64, contactId: Int64, memberRole: GroupMemberRole) case apiJoinGroup(groupId: Int64) case apiMemberRole(groupId: Int64, memberId: Int64, memberRole: GroupMemberRole) + case apiBlockMemberForAll(groupId: Int64, memberId: Int64, blocked: Bool) case apiRemoveMember(groupId: Int64, memberId: Int64) case apiLeaveGroup(groupId: Int64) case apiListMembers(groupId: Int64) @@ -195,6 +196,7 @@ public enum ChatCommand { case let .apiAddMember(groupId, contactId, memberRole): return "/_add #\(groupId) \(contactId) \(memberRole)" case let .apiJoinGroup(groupId): return "/_join #\(groupId)" case let .apiMemberRole(groupId, memberId, memberRole): return "/_member role #\(groupId) \(memberId) \(memberRole.rawValue)" + case let .apiBlockMemberForAll(groupId, memberId, blocked): return "/_block #\(groupId) \(memberId) blocked=\(onOff(blocked))" case let .apiRemoveMember(groupId, memberId): return "/_remove #\(groupId) \(memberId)" case let .apiLeaveGroup(groupId): return "/_leave #\(groupId)" case let .apiListMembers(groupId): return "/_members #\(groupId)" @@ -334,6 +336,7 @@ public enum ChatCommand { case .apiAddMember: return "apiAddMember" case .apiJoinGroup: return "apiJoinGroup" case .apiMemberRole: return "apiMemberRole" + case .apiBlockMemberForAll: return "apiBlockMemberForAll" case .apiRemoveMember: return "apiRemoveMember" case .apiLeaveGroup: return "apiLeaveGroup" case .apiListMembers: return "apiListMembers" @@ -566,6 +569,8 @@ public enum ChatResponse: Decodable, Error { case joinedGroupMemberConnecting(user: UserRef, groupInfo: GroupInfo, hostMember: GroupMember, member: GroupMember) case memberRole(user: UserRef, groupInfo: GroupInfo, byMember: GroupMember, member: GroupMember, fromRole: GroupMemberRole, toRole: GroupMemberRole) case memberRoleUser(user: UserRef, groupInfo: GroupInfo, member: GroupMember, fromRole: GroupMemberRole, toRole: GroupMemberRole) + case memberBlockedForAll(user: UserRef, groupInfo: GroupInfo, byMember: GroupMember, member: GroupMember, blocked: Bool) + case memberBlockedForAllUser(user: UserRef, groupInfo: GroupInfo, member: GroupMember, blocked: Bool) case deletedMemberUser(user: UserRef, groupInfo: GroupInfo, member: GroupMember) case deletedMember(user: UserRef, groupInfo: GroupInfo, byMember: GroupMember, deletedMember: GroupMember) case leftMember(user: UserRef, groupInfo: GroupInfo, member: GroupMember) @@ -716,6 +721,8 @@ public enum ChatResponse: Decodable, Error { case .joinedGroupMemberConnecting: return "joinedGroupMemberConnecting" case .memberRole: return "memberRole" case .memberRoleUser: return "memberRoleUser" + case .memberBlockedForAll: return "memberBlockedForAll" + case .memberBlockedForAllUser: return "memberBlockedForAllUser" case .deletedMemberUser: return "deletedMemberUser" case .deletedMember: return "deletedMember" case .leftMember: return "leftMember" @@ -864,6 +871,8 @@ public enum ChatResponse: Decodable, Error { case let .joinedGroupMemberConnecting(u, groupInfo, hostMember, member): return withUser(u, "groupInfo: \(groupInfo)\nhostMember: \(hostMember)\nmember: \(member)") case let .memberRole(u, groupInfo, byMember, member, fromRole, toRole): return withUser(u, "groupInfo: \(groupInfo)\nbyMember: \(byMember)\nmember: \(member)\nfromRole: \(fromRole)\ntoRole: \(toRole)") case let .memberRoleUser(u, groupInfo, member, fromRole, toRole): return withUser(u, "groupInfo: \(groupInfo)\nmember: \(member)\nfromRole: \(fromRole)\ntoRole: \(toRole)") + case let .memberBlockedForAll(u, groupInfo, byMember, member, blocked): return withUser(u, "groupInfo: \(groupInfo)\nbyMember: \(byMember)\nmember: \(member)\nblocked: \(blocked)") + case let .memberBlockedForAllUser(u, groupInfo, member, blocked): return withUser(u, "groupInfo: \(groupInfo)\nmember: \(member)\nblocked: \(blocked)") case let .deletedMemberUser(u, groupInfo, member): return withUser(u, "groupInfo: \(groupInfo)\nmember: \(member)") case let .deletedMember(u, groupInfo, byMember, deletedMember): return withUser(u, "groupInfo: \(groupInfo)\nbyMember: \(byMember)\ndeletedMember: \(deletedMember)") case let .leftMember(u, groupInfo, member): return withUser(u, "groupInfo: \(groupInfo)\nmember: \(member)") diff --git a/apps/ios/SimpleXChat/ChatTypes.swift b/apps/ios/SimpleXChat/ChatTypes.swift index 5426596a4..ff61a51d3 100644 --- a/apps/ios/SimpleXChat/ChatTypes.swift +++ b/apps/ios/SimpleXChat/ChatTypes.swift @@ -1814,6 +1814,7 @@ public struct GroupMember: Identifiable, Decodable { public var memberCategory: GroupMemberCategory public var memberStatus: GroupMemberStatus public var memberSettings: GroupMemberSettings + public var blockedByAdmin: Bool public var invitedBy: InvitedBy public var localDisplayName: ContactName public var memberProfile: LocalProfile @@ -1833,6 +1834,7 @@ public struct GroupMember: Identifiable, Decodable { public var image: String? { get { memberProfile.image } } public var contactLink: String? { get { memberProfile.contactLink } } public var verified: Bool { activeConn?.connectionCode != nil } + public var blocked: Bool { blockedByAdmin || !memberSettings.showMessages } var directChatId: ChatId? { get { @@ -1899,7 +1901,7 @@ public struct GroupMember: Identifiable, Decodable { public func canBeRemoved(groupInfo: GroupInfo) -> Bool { let userRole = groupInfo.membership.memberRole return memberStatus != .memRemoved && memberStatus != .memLeft - && userRole >= .admin && userRole >= memberRole && groupInfo.membership.memberCurrent + && userRole >= .admin && userRole >= memberRole && groupInfo.membership.memberActive } public func canChangeRoleTo(groupInfo: GroupInfo) -> [GroupMemberRole]? { @@ -1908,6 +1910,12 @@ public struct GroupMember: Identifiable, Decodable { return GroupMemberRole.allCases.filter { $0 <= userRole && $0 != .author } } + public func canBlockForAll(groupInfo: GroupInfo) -> Bool { + let userRole = groupInfo.membership.memberRole + return memberStatus != .memRemoved && memberStatus != .memLeft && memberRole < .admin + && userRole >= .admin && userRole >= memberRole && groupInfo.membership.memberActive + } + public var memberIncognito: Bool { memberProfile.profileId != memberContactProfileId } @@ -1920,6 +1928,7 @@ public struct GroupMember: Identifiable, Decodable { memberCategory: .inviteeMember, memberStatus: .memComplete, memberSettings: GroupMemberSettings(showMessages: true), + blockedByAdmin: false, invitedBy: .user, localDisplayName: "alice", memberProfile: LocalProfile.sampleData, @@ -2184,6 +2193,7 @@ public struct ChatItem: Identifiable, Decodable { case .rcvDeleted: return true case .sndModerated: return true case .rcvModerated: return true + case .rcvBlocked: return true default: return false } } @@ -2228,22 +2238,18 @@ public struct ChatItem: Identifiable, Decodable { } } - private var showNtfDir: Bool { - return !chatDir.sent - } - public var showNotification: Bool { switch content { - case .sndMsgContent: return showNtfDir - case .rcvMsgContent: return showNtfDir - case .sndDeleted: return showNtfDir - case .rcvDeleted: return showNtfDir - case .sndCall: return showNtfDir + case .sndMsgContent: return false + case .rcvMsgContent: return meta.itemDeleted == nil + case .sndDeleted: return false + case .rcvDeleted: return false + case .sndCall: return false case .rcvCall: return false // notification is shown on .callInvitation instead - case .rcvIntegrityError: return showNtfDir - case .rcvDecryptionError: return showNtfDir - case .rcvGroupInvitation: return showNtfDir - case .sndGroupInvitation: return showNtfDir + case .rcvIntegrityError: return false + case .rcvDecryptionError: return false + case .rcvGroupInvitation: return true + case .sndGroupInvitation: return false case .rcvDirectEvent(rcvDirectEvent: let rcvDirectEvent): switch rcvDirectEvent { case .contactDeleted: return false @@ -2254,9 +2260,10 @@ public struct ChatItem: Identifiable, Decodable { case .groupUpdated: return false case .memberConnected: return false case .memberRole: return false - case .userRole: return showNtfDir - case .userDeleted: return showNtfDir - case .groupDeleted: return showNtfDir + case .memberBlocked: return false + case .userRole: return true + case .userDeleted: return true + case .groupDeleted: return true case .memberAdded: return false case .memberLeft: return false case .memberDeleted: return false @@ -2264,19 +2271,20 @@ public struct ChatItem: Identifiable, Decodable { case .memberCreatedContact: return false case .memberProfileUpdated: return false } - case .sndGroupEvent: return showNtfDir + case .sndGroupEvent: return false case .rcvConnEvent: return false - case .sndConnEvent: return showNtfDir + case .sndConnEvent: return false case .rcvChatFeature: return false - case .sndChatFeature: return showNtfDir + case .sndChatFeature: return false case .rcvChatPreference: return false - case .sndChatPreference: return showNtfDir + case .sndChatPreference: return false case .rcvGroupFeature: return false - case .sndGroupFeature: return showNtfDir - case .rcvChatFeatureRejected: return showNtfDir - case .rcvGroupFeatureRejected: return showNtfDir - case .sndModerated: return true - case .rcvModerated: return true + case .sndGroupFeature: return false + case .rcvChatFeatureRejected: return true + case .rcvGroupFeatureRejected: return false + case .sndModerated: return false + case .rcvModerated: return false + case .rcvBlocked: return false case .invalidJSON: return false } } @@ -2663,12 +2671,14 @@ public enum SndCIStatusProgress: String, Decodable { public enum CIDeleted: Decodable { case deleted(deletedTs: Date?) case blocked(deletedTs: Date?) + case blockedByAdmin(deletedTs: Date?) case moderated(deletedTs: Date?, byGroupMember: GroupMember) var id: String { switch self { case .deleted: return "deleted" case .blocked: return "blocked" + case .blockedByAdmin: return "blocked by admin" case .moderated: return "moderated" } } @@ -2709,6 +2719,7 @@ public enum CIContent: Decodable, ItemContent { case rcvGroupFeatureRejected(groupFeature: GroupFeature) case sndModerated case rcvModerated + case rcvBlocked case invalidJSON(json: String) public var text: String { @@ -2739,6 +2750,7 @@ public enum CIContent: Decodable, ItemContent { case let .rcvGroupFeatureRejected(groupFeature): return String.localizedStringWithFormat("%@: received, prohibited", groupFeature.text) case .sndModerated: return NSLocalizedString("moderated", comment: "moderated chat item") case .rcvModerated: return NSLocalizedString("moderated", comment: "moderated chat item") + case .rcvBlocked: return NSLocalizedString("blocked by admin", comment: "blocked chat item") case .invalidJSON: return NSLocalizedString("invalid data", comment: "invalid chat item") } } @@ -2777,6 +2789,7 @@ public enum CIContent: Decodable, ItemContent { case .rcvDecryptionError: return true case .rcvGroupInvitation: return true case .rcvModerated: return true + case .rcvBlocked: return true case .invalidJSON: return true default: return false } @@ -3463,6 +3476,7 @@ public enum RcvGroupEvent: Decodable { case memberConnected case memberLeft case memberRole(groupMemberId: Int64, profile: Profile, role: GroupMemberRole) + case memberBlocked(groupMemberId: Int64, profile: Profile, blocked: Bool) case userRole(role: GroupMemberRole) case memberDeleted(groupMemberId: Int64, profile: Profile) case userDeleted @@ -3480,6 +3494,12 @@ public enum RcvGroupEvent: Decodable { case .memberLeft: return NSLocalizedString("left", comment: "rcv group event chat item") case let .memberRole(_, profile, role): return String.localizedStringWithFormat(NSLocalizedString("changed role of %@ to %@", comment: "rcv group event chat item"), profile.profileViewName, role.text) + case let .memberBlocked(_, profile, blocked): + if blocked { + return String.localizedStringWithFormat(NSLocalizedString("blocked %@", comment: "rcv group event chat item"), profile.profileViewName) + } else { + return String.localizedStringWithFormat(NSLocalizedString("unblocked %@", comment: "rcv group event chat item"), profile.profileViewName) + } case let .userRole(role): return String.localizedStringWithFormat(NSLocalizedString("changed your role to %@", comment: "rcv group event chat item"), role.text) case let .memberDeleted(_, profile): @@ -3510,6 +3530,7 @@ public enum RcvGroupEvent: Decodable { public enum SndGroupEvent: Decodable { case memberRole(groupMemberId: Int64, profile: Profile, role: GroupMemberRole) case userRole(role: GroupMemberRole) + case memberBlocked(groupMemberId: Int64, profile: Profile, blocked: Bool) case memberDeleted(groupMemberId: Int64, profile: Profile) case userLeft case groupUpdated(groupProfile: GroupProfile) @@ -3520,6 +3541,12 @@ public enum SndGroupEvent: Decodable { return String.localizedStringWithFormat(NSLocalizedString("you changed role of %@ to %@", comment: "snd group event chat item"), profile.profileViewName, role.text) case let .userRole(role): return String.localizedStringWithFormat(NSLocalizedString("you changed role for yourself to %@", comment: "snd group event chat item"), role.text) + case let .memberBlocked(_, profile, blocked): + if blocked { + return String.localizedStringWithFormat(NSLocalizedString("you blocked %@", comment: "snd group event chat item"), profile.profileViewName) + } else { + return String.localizedStringWithFormat(NSLocalizedString("you unblocked %@", comment: "snd group event chat item"), profile.profileViewName) + } case let .memberDeleted(_, profile): return String.localizedStringWithFormat(NSLocalizedString("you removed %@", comment: "snd group event chat item"), profile.profileViewName) case .userLeft: return NSLocalizedString("you left", comment: "snd group event chat item") From 106556812c59864a643eeafcb9df5a21e397a60e Mon Sep 17 00:00:00 2001 From: spaced4ndy <8711996+spaced4ndy@users.noreply.github.com> Date: Sat, 20 Jan 2024 14:33:49 +0400 Subject: [PATCH 19/23] android, desktop: block member for all (#3711) * android: block member for all * old buttons (revert this) * blocked by admin text * revise notification --- .../chat/simplex/common/model/ChatModel.kt | 74 ++++++++---- .../chat/simplex/common/model/SimpleXAPI.kt | 24 ++++ .../views/chat/group/GroupChatInfoView.kt | 61 +++++++++- .../views/chat/group/GroupMemberInfoView.kt | 106 ++++++++++++++++++ .../common/views/chat/item/ChatItemView.kt | 13 ++- .../common/views/chat/item/FramedItemView.kt | 5 +- .../views/chat/item/MarkedDeletedItemView.kt | 12 +- .../commonMain/resources/MR/base/strings.xml | 13 +++ 8 files changed, 270 insertions(+), 38 deletions(-) diff --git a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/model/ChatModel.kt b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/model/ChatModel.kt index be0e6ce72..d44c80e92 100644 --- a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/model/ChatModel.kt +++ b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/model/ChatModel.kt @@ -1279,6 +1279,7 @@ data class GroupMember ( val memberCategory: GroupMemberCategory, val memberStatus: GroupMemberStatus, val memberSettings: GroupMemberSettings, + val blockedByAdmin: Boolean, val invitedBy: InvitedBy, val localDisplayName: String, val memberProfile: LocalProfile, @@ -1297,6 +1298,7 @@ data class GroupMember ( val image: String? get() = memberProfile.image val contactLink: String? = memberProfile.contactLink val verified get() = activeConn?.connectionCode != null + val blocked get() = blockedByAdmin || !memberSettings.showMessages val chatViewName: String get() { @@ -1345,7 +1347,7 @@ data class GroupMember ( fun canBeRemoved(groupInfo: GroupInfo): Boolean { val userRole = groupInfo.membership.memberRole return memberStatus != GroupMemberStatus.MemRemoved && memberStatus != GroupMemberStatus.MemLeft - && userRole >= GroupMemberRole.Admin && userRole >= memberRole && groupInfo.membership.memberCurrent + && userRole >= GroupMemberRole.Admin && userRole >= memberRole && groupInfo.membership.memberActive } fun canChangeRoleTo(groupInfo: GroupInfo): List<GroupMemberRole>? = @@ -1354,6 +1356,12 @@ data class GroupMember ( GroupMemberRole.values().filter { it <= userRole && it != GroupMemberRole.Author } } + fun canBlockForAll(groupInfo: GroupInfo): Boolean { + val userRole = groupInfo.membership.memberRole + return memberStatus != GroupMemberStatus.MemRemoved && memberStatus != GroupMemberStatus.MemLeft && memberRole < GroupMemberRole.Admin + && userRole >= GroupMemberRole.Admin && userRole >= memberRole && groupInfo.membership.memberActive + } + val memberIncognito = memberProfile.profileId != memberContactProfileId companion object { @@ -1365,6 +1373,7 @@ data class GroupMember ( memberCategory = GroupMemberCategory.InviteeMember, memberStatus = GroupMemberStatus.MemComplete, memberSettings = GroupMemberSettings(showMessages = true), + blockedByAdmin = false, invitedBy = InvitedBy.IBUser(), localDisplayName = "alice", memberProfile = LocalProfile.sampleData, @@ -1734,6 +1743,7 @@ data class ChatItem ( is CIContent.RcvDeleted -> true is CIContent.SndModerated -> true is CIContent.RcvModerated -> true + is CIContent.RcvBlocked -> true else -> false } @@ -1785,20 +1795,18 @@ data class ChatItem ( } } - private val showNtfDir: Boolean get() = !chatDir.sent - val showNotification: Boolean get() = when (content) { - is CIContent.SndMsgContent -> showNtfDir - is CIContent.RcvMsgContent -> showNtfDir - is CIContent.SndDeleted -> showNtfDir - is CIContent.RcvDeleted -> showNtfDir - is CIContent.SndCall -> showNtfDir + is CIContent.SndMsgContent -> false + is CIContent.RcvMsgContent -> meta.itemDeleted == null + is CIContent.SndDeleted -> false + is CIContent.RcvDeleted -> false + is CIContent.SndCall -> false is CIContent.RcvCall -> false // notification is shown on CallInvitation instead - is CIContent.RcvIntegrityError -> showNtfDir - is CIContent.RcvDecryptionError -> showNtfDir - is CIContent.RcvGroupInvitation -> showNtfDir - is CIContent.SndGroupInvitation -> showNtfDir + is CIContent.RcvIntegrityError -> false + is CIContent.RcvDecryptionError -> false + is CIContent.RcvGroupInvitation -> true + is CIContent.SndGroupInvitation -> false is CIContent.RcvDirectEventContent -> when (content.rcvDirectEvent) { is RcvDirectEvent.ContactDeleted -> false is RcvDirectEvent.ProfileUpdated -> true @@ -1808,28 +1816,30 @@ data class ChatItem ( is RcvGroupEvent.MemberConnected -> false is RcvGroupEvent.MemberLeft -> false is RcvGroupEvent.MemberRole -> false - is RcvGroupEvent.UserRole -> showNtfDir + is RcvGroupEvent.MemberBlocked -> false + is RcvGroupEvent.UserRole -> true is RcvGroupEvent.MemberDeleted -> false - is RcvGroupEvent.UserDeleted -> showNtfDir - is RcvGroupEvent.GroupDeleted -> showNtfDir + is RcvGroupEvent.UserDeleted -> true + is RcvGroupEvent.GroupDeleted -> true is RcvGroupEvent.GroupUpdated -> false is RcvGroupEvent.InvitedViaGroupLink -> false is RcvGroupEvent.MemberCreatedContact -> false is RcvGroupEvent.MemberProfileUpdated -> false } - is CIContent.SndGroupEventContent -> showNtfDir + is CIContent.SndGroupEventContent -> false is CIContent.RcvConnEventContent -> false - is CIContent.SndConnEventContent -> showNtfDir + is CIContent.SndConnEventContent -> false is CIContent.RcvChatFeature -> false - is CIContent.SndChatFeature -> showNtfDir + is CIContent.SndChatFeature -> false is CIContent.RcvChatPreference -> false - is CIContent.SndChatPreference -> showNtfDir + is CIContent.SndChatPreference -> false is CIContent.RcvGroupFeature -> false - is CIContent.SndGroupFeature -> showNtfDir - is CIContent.RcvChatFeatureRejected -> showNtfDir - is CIContent.RcvGroupFeatureRejected -> showNtfDir - is CIContent.SndModerated -> true - is CIContent.RcvModerated -> true + is CIContent.SndGroupFeature -> false + is CIContent.RcvChatFeatureRejected -> true + is CIContent.RcvGroupFeatureRejected -> false + is CIContent.SndModerated -> false + is CIContent.RcvModerated -> false + is CIContent.RcvBlocked -> false is CIContent.InvalidJSON -> false } @@ -2174,6 +2184,7 @@ enum class SndCIStatusProgress { sealed class CIDeleted { @Serializable @SerialName("deleted") class Deleted(val deletedTs: Instant?): CIDeleted() @Serializable @SerialName("blocked") class Blocked(val deletedTs: Instant?): CIDeleted() + @Serializable @SerialName("blockedByAdmin") class BlockedByAdmin(val deletedTs: Instant?): CIDeleted() @Serializable @SerialName("moderated") class Moderated(val deletedTs: Instant?, val byGroupMember: GroupMember): CIDeleted() } @@ -2218,6 +2229,7 @@ sealed class CIContent: ItemContent { @Serializable @SerialName("rcvGroupFeatureRejected") class RcvGroupFeatureRejected(val groupFeature: GroupFeature): CIContent() { override val msgContent: MsgContent? get() = null } @Serializable @SerialName("sndModerated") object SndModerated: CIContent() { override val msgContent: MsgContent? get() = null } @Serializable @SerialName("rcvModerated") object RcvModerated: CIContent() { override val msgContent: MsgContent? get() = null } + @Serializable @SerialName("rcvBlocked") object RcvBlocked: CIContent() { override val msgContent: MsgContent? get() = null } @Serializable @SerialName("invalidJSON") data class InvalidJSON(val json: String): CIContent() { override val msgContent: MsgContent? get() = null } override val text: String get() = when (this) { @@ -2246,6 +2258,7 @@ sealed class CIContent: ItemContent { is RcvGroupFeatureRejected -> "${groupFeature.text}: ${generalGetString(MR.strings.feature_received_prohibited)}" is SndModerated -> generalGetString(MR.strings.moderated_description) is RcvModerated -> generalGetString(MR.strings.moderated_description) + is RcvBlocked -> generalGetString(MR.strings.blocked_by_admin_item_description) is InvalidJSON -> "invalid data" } @@ -2258,6 +2271,7 @@ sealed class CIContent: ItemContent { is RcvDecryptionError -> true is RcvGroupInvitation -> true is RcvModerated -> true + is RcvBlocked -> true is InvalidJSON -> true else -> false } @@ -2958,6 +2972,7 @@ sealed class RcvGroupEvent() { @Serializable @SerialName("memberConnected") class MemberConnected(): RcvGroupEvent() @Serializable @SerialName("memberLeft") class MemberLeft(): RcvGroupEvent() @Serializable @SerialName("memberRole") class MemberRole(val groupMemberId: Long, val profile: Profile, val role: GroupMemberRole): RcvGroupEvent() + @Serializable @SerialName("memberBlocked") class MemberBlocked(val groupMemberId: Long, val profile: Profile, val blocked: Boolean): RcvGroupEvent() @Serializable @SerialName("userRole") class UserRole(val role: GroupMemberRole): RcvGroupEvent() @Serializable @SerialName("memberDeleted") class MemberDeleted(val groupMemberId: Long, val profile: Profile): RcvGroupEvent() @Serializable @SerialName("userDeleted") class UserDeleted(): RcvGroupEvent() @@ -2972,6 +2987,11 @@ sealed class RcvGroupEvent() { is MemberConnected -> generalGetString(MR.strings.rcv_group_event_member_connected) is MemberLeft -> generalGetString(MR.strings.rcv_group_event_member_left) is MemberRole -> String.format(generalGetString(MR.strings.rcv_group_event_changed_member_role), profile.profileViewName, role.text) + is MemberBlocked -> if (blocked) { + String.format(generalGetString(MR.strings.rcv_group_event_member_blocked), profile.profileViewName) + } else { + String.format(generalGetString(MR.strings.rcv_group_event_member_unblocked), profile.profileViewName) + } is UserRole -> String.format(generalGetString(MR.strings.rcv_group_event_changed_your_role), role.text) is MemberDeleted -> String.format(generalGetString(MR.strings.rcv_group_event_member_deleted), profile.profileViewName) is UserDeleted -> generalGetString(MR.strings.rcv_group_event_user_deleted) @@ -3000,6 +3020,7 @@ sealed class RcvGroupEvent() { sealed class SndGroupEvent() { @Serializable @SerialName("memberRole") class MemberRole(val groupMemberId: Long, val profile: Profile, val role: GroupMemberRole): SndGroupEvent() @Serializable @SerialName("userRole") class UserRole(val role: GroupMemberRole): SndGroupEvent() + @Serializable @SerialName("memberBlocked") class MemberBlocked(val groupMemberId: Long, val profile: Profile, val blocked: Boolean): SndGroupEvent() @Serializable @SerialName("memberDeleted") class MemberDeleted(val groupMemberId: Long, val profile: Profile): SndGroupEvent() @Serializable @SerialName("userLeft") class UserLeft(): SndGroupEvent() @Serializable @SerialName("groupUpdated") class GroupUpdated(val groupProfile: GroupProfile): SndGroupEvent() @@ -3007,6 +3028,11 @@ sealed class SndGroupEvent() { val text: String get() = when (this) { is MemberRole -> String.format(generalGetString(MR.strings.snd_group_event_changed_member_role), profile.profileViewName, role.text) is UserRole -> String.format(generalGetString(MR.strings.snd_group_event_changed_role_for_yourself), role.text) + is MemberBlocked -> if (blocked) { + String.format(generalGetString(MR.strings.snd_group_event_member_blocked), profile.profileViewName) + } else { + String.format(generalGetString(MR.strings.snd_group_event_member_unblocked), profile.profileViewName) + } is MemberDeleted -> String.format(generalGetString(MR.strings.snd_group_event_member_deleted), profile.profileViewName) is UserLeft -> generalGetString(MR.strings.snd_group_event_user_left) is GroupUpdated -> generalGetString(MR.strings.snd_group_event_group_profile_updated) diff --git a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/model/SimpleXAPI.kt b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/model/SimpleXAPI.kt index ab172e61f..0f068e96a 100644 --- a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/model/SimpleXAPI.kt +++ b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/model/SimpleXAPI.kt @@ -1332,6 +1332,17 @@ object ChatController { } } + suspend fun apiBlockMemberForAll(rh: Long?, groupId: Long, memberId: Long, blocked: Boolean): GroupMember = + when (val r = sendCmd(rh, CC.ApiBlockMemberForAll(groupId, memberId, blocked))) { + is CR.MemberBlockedForAllUser -> r.member + else -> { + if (!(networkErrorAlert(r))) { + apiErrorAlert("apiBlockMemberForAll", generalGetString(MR.strings.error_blocking_member_for_all), r) + } + throw Exception("failed to block member for all: ${r.responseType} ${r.details}") + } + } + suspend fun apiLeaveGroup(rh: Long?, groupId: Long): GroupInfo? { val r = sendCmd(rh, CC.ApiLeaveGroup(groupId)) if (r is CR.LeftMemberUser) return r.groupInfo @@ -1786,6 +1797,10 @@ object ChatController { if (active(r.user)) { chatModel.upsertGroupMember(rhId, r.groupInfo, r.member) } + is CR.MemberBlockedForAll -> + if (active(r.user)) { + chatModel.upsertGroupMember(rhId, r.groupInfo, r.member) + } is CR.GroupDeleted -> // TODO update user member if (active(r.user)) { chatModel.updateGroup(rhId, r.groupInfo) @@ -2275,6 +2290,7 @@ sealed class CC { class ApiAddMember(val groupId: Long, val contactId: Long, val memberRole: GroupMemberRole): CC() class ApiJoinGroup(val groupId: Long): CC() class ApiMemberRole(val groupId: Long, val memberId: Long, val memberRole: GroupMemberRole): CC() + class ApiBlockMemberForAll(val groupId: Long, val memberId: Long, val blocked: Boolean): CC() class ApiRemoveMember(val groupId: Long, val memberId: Long): CC() class ApiLeaveGroup(val groupId: Long): CC() class ApiListMembers(val groupId: Long): CC() @@ -2409,6 +2425,7 @@ sealed class CC { is ApiAddMember -> "/_add #$groupId $contactId ${memberRole.memberRole}" is ApiJoinGroup -> "/_join #$groupId" is ApiMemberRole -> "/_member role #$groupId $memberId ${memberRole.memberRole}" + is ApiBlockMemberForAll -> "/_block #$groupId $memberId blocked=${onOff(blocked)}" is ApiRemoveMember -> "/_remove #$groupId $memberId" is ApiLeaveGroup -> "/_leave #$groupId" is ApiListMembers -> "/_members #$groupId" @@ -2538,6 +2555,7 @@ sealed class CC { is ApiAddMember -> "apiAddMember" is ApiJoinGroup -> "apiJoinGroup" is ApiMemberRole -> "apiMemberRole" + is ApiBlockMemberForAll -> "apiBlockMemberForAll" is ApiRemoveMember -> "apiRemoveMember" is ApiLeaveGroup -> "apiLeaveGroup" is ApiListMembers -> "apiListMembers" @@ -3928,6 +3946,8 @@ sealed class CR { @Serializable @SerialName("joinedGroupMemberConnecting") class JoinedGroupMemberConnecting(val user: UserRef, val groupInfo: GroupInfo, val hostMember: GroupMember, val member: GroupMember): CR() @Serializable @SerialName("memberRole") class MemberRole(val user: UserRef, val groupInfo: GroupInfo, val byMember: GroupMember, val member: GroupMember, val fromRole: GroupMemberRole, val toRole: GroupMemberRole): CR() @Serializable @SerialName("memberRoleUser") class MemberRoleUser(val user: UserRef, val groupInfo: GroupInfo, val member: GroupMember, val fromRole: GroupMemberRole, val toRole: GroupMemberRole): CR() + @Serializable @SerialName("memberBlockedForAll") class MemberBlockedForAll(val user: UserRef, val groupInfo: GroupInfo, val byMember: GroupMember, val member: GroupMember, val blocked: Boolean): CR() + @Serializable @SerialName("memberBlockedForAllUser") class MemberBlockedForAllUser(val user: UserRef, val groupInfo: GroupInfo, val member: GroupMember, val blocked: Boolean): CR() @Serializable @SerialName("deletedMemberUser") class DeletedMemberUser(val user: UserRef, val groupInfo: GroupInfo, val member: GroupMember): CR() @Serializable @SerialName("deletedMember") class DeletedMember(val user: UserRef, val groupInfo: GroupInfo, val byMember: GroupMember, val deletedMember: GroupMember): CR() @Serializable @SerialName("leftMember") class LeftMember(val user: UserRef, val groupInfo: GroupInfo, val member: GroupMember): CR() @@ -4080,6 +4100,8 @@ sealed class CR { is JoinedGroupMemberConnecting -> "joinedGroupMemberConnecting" is MemberRole -> "memberRole" is MemberRoleUser -> "memberRoleUser" + is MemberBlockedForAll -> "memberBlockedForAll" + is MemberBlockedForAllUser -> "memberBlockedForAllUser" is DeletedMemberUser -> "deletedMemberUser" is DeletedMember -> "deletedMember" is LeftMember -> "leftMember" @@ -4227,6 +4249,8 @@ sealed class CR { is JoinedGroupMemberConnecting -> withUser(user, "groupInfo: $groupInfo\nhostMember: $hostMember\nmember: $member") is MemberRole -> withUser(user, "groupInfo: $groupInfo\nbyMember: $byMember\nmember: $member\nfromRole: $fromRole\ntoRole: $toRole") is MemberRoleUser -> withUser(user, "groupInfo: $groupInfo\nmember: $member\nfromRole: $fromRole\ntoRole: $toRole") + is MemberBlockedForAll -> withUser(user, "groupInfo: $groupInfo\nbyMember: $byMember\nmember: $member\nblocked: $blocked") + is MemberBlockedForAllUser -> withUser(user, "groupInfo: $groupInfo\nmember: $member\nblocked: $blocked") is DeletedMemberUser -> withUser(user, "groupInfo: $groupInfo\nmember: $member") is DeletedMember -> withUser(user, "groupInfo: $groupInfo\nbyMember: $byMember\ndeletedMember: $deletedMember") is LeftMember -> withUser(user, "groupInfo: $groupInfo\nmember: $member") diff --git a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/group/GroupChatInfoView.kt b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/group/GroupChatInfoView.kt index 4d76afcbb..d602d78d8 100644 --- a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/group/GroupChatInfoView.kt +++ b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/group/GroupChatInfoView.kt @@ -368,6 +368,18 @@ private fun AddMembersButton(tint: Color = MaterialTheme.colors.primary, onClick @Composable private fun MemberRow(member: GroupMember, user: Boolean = false, onClick: (() -> Unit)? = null) { + @Composable + fun MemberInfo() { + if (member.blocked) { + Text(stringResource(MR.strings.member_info_member_blocked), color = MaterialTheme.colors.secondary) + } else { + val role = member.memberRole + if (role in listOf(GroupMemberRole.Owner, GroupMemberRole.Admin, GroupMemberRole.Observer)) { + Text(role.text, color = MaterialTheme.colors.secondary) + } + } + } + Row( Modifier.fillMaxWidth(), horizontalArrangement = Arrangement.SpaceBetween, @@ -401,10 +413,7 @@ private fun MemberRow(member: GroupMember, user: Boolean = false, onClick: (() - ) } } - val role = member.memberRole - if (role in listOf(GroupMemberRole.Owner, GroupMemberRole.Admin, GroupMemberRole.Observer)) { - Text(role.text, color = MaterialTheme.colors.secondary) - } + MemberInfo() } } @@ -415,6 +424,7 @@ private fun MemberVerifiedShield() { @Composable private fun DropDownMenuForMember(rhId: Long?, member: GroupMember, groupInfo: GroupInfo, showMenu: MutableState<Boolean>) { + // revert from this: DefaultDropdownMenu(showMenu) { if (member.canBeRemoved(groupInfo)) { ItemAction(stringResource(MR.strings.remove_member_button), painterResource(MR.images.ic_delete), color = MaterialTheme.colors.error, onClick = { @@ -434,6 +444,49 @@ private fun DropDownMenuForMember(rhId: Long?, member: GroupMember, groupInfo: G }) } } + // revert to this: vvv +// if (groupInfo.membership.memberRole >= GroupMemberRole.Admin) { +// val canBlockForAll = member.canBlockForAll(groupInfo) +// val canRemove = member.canBeRemoved(groupInfo) +// if (canBlockForAll || canRemove) { +// DefaultDropdownMenu(showMenu) { +// if (canBlockForAll) { +// if (member.blockedByAdmin) { +// ItemAction(stringResource(MR.strings.unblock_for_all), painterResource(MR.images.ic_do_not_touch), onClick = { +// unblockForAllAlert(rhId, groupInfo, member) +// showMenu.value = false +// }) +// } else { +// ItemAction(stringResource(MR.strings.block_for_all), painterResource(MR.images.ic_back_hand), color = MaterialTheme.colors.error, onClick = { +// blockForAllAlert(rhId, groupInfo, member) +// showMenu.value = false +// }) +// } +// } +// if (canRemove) { +// ItemAction(stringResource(MR.strings.remove_member_button), painterResource(MR.images.ic_delete), color = MaterialTheme.colors.error, onClick = { +// removeMemberAlert(rhId, groupInfo, member) +// showMenu.value = false +// }) +// } +// } +// } +// } else if (!member.blockedByAdmin) { +// DefaultDropdownMenu(showMenu) { +// if (member.memberSettings.showMessages) { +// ItemAction(stringResource(MR.strings.block_member_button), painterResource(MR.images.ic_back_hand), color = MaterialTheme.colors.error, onClick = { +// blockMemberAlert(rhId, groupInfo, member) +// showMenu.value = false +// }) +// } else { +// ItemAction(stringResource(MR.strings.unblock_member_button), painterResource(MR.images.ic_do_not_touch), onClick = { +// unblockMemberAlert(rhId, groupInfo, member) +// showMenu.value = false +// }) +// } +// } +// } + // ^^^ } @Composable diff --git a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/group/GroupMemberInfoView.kt b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/group/GroupMemberInfoView.kt index 84d7afaae..54614d022 100644 --- a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/group/GroupMemberInfoView.kt +++ b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/group/GroupMemberInfoView.kt @@ -3,9 +3,11 @@ package chat.simplex.common.views.chat.group import InfoRow import SectionBottomSpacer import SectionDividerSpaced +import SectionItemView import SectionSpacer import SectionTextFooter import SectionView +import TextIconSpaced import androidx.compose.desktop.ui.tooling.preview.Preview import java.net.URI import androidx.compose.foundation.* @@ -99,6 +101,8 @@ fun GroupMemberInfoView( }, blockMember = { blockMemberAlert(rhId, groupInfo, member) }, unblockMember = { unblockMemberAlert(rhId, groupInfo, member) }, + blockForAll = { blockForAllAlert(rhId, groupInfo, member) }, + unblockForAll = { unblockForAllAlert(rhId, groupInfo, member) }, removeMember = { removeMemberDialog(rhId, groupInfo, member, chatModel, close) }, onRoleSelected = { if (it == newRole.value) return@GroupMemberInfoLayout @@ -230,6 +234,8 @@ fun GroupMemberInfoLayout( connectViaAddress: (String) -> Unit, blockMember: () -> Unit, unblockMember: () -> Unit, + blockForAll: () -> Unit, + unblockForAll: () -> Unit, removeMember: () -> Unit, onRoleSelected: (GroupMemberRole) -> Unit, switchMemberAddress: () -> Unit, @@ -248,6 +254,46 @@ fun GroupMemberInfoLayout( } } + @Composable + fun AdminDestructiveSection() { + val canBlockForAll = member.canBlockForAll(groupInfo) + val canRemove = member.canBeRemoved(groupInfo) + if (canBlockForAll || canRemove) { + SectionDividerSpaced(maxBottomPadding = false) + SectionView { + if (canBlockForAll) { + if (member.blockedByAdmin) { + UnblockForAllButton(unblockForAll) + } else { + BlockForAllButton(blockForAll) + } + } + if (canRemove) { + RemoveMemberButton(removeMember) + } + } + } + } + + @Composable + fun NonAdminBlockSection() { + SectionDividerSpaced(maxBottomPadding = false) + SectionView { + if (member.blockedByAdmin) { + SettingsActionItem( + painterResource(MR.images.ic_back_hand), + stringResource(MR.strings.member_blocked_by_admin), + click = null, + disabled = true + ) + } else if (member.memberSettings.showMessages) { + BlockMemberButton(blockMember) + } else { + UnblockMemberButton(unblockMember) + } + } + } + Column( Modifier .fillMaxWidth() @@ -344,6 +390,7 @@ fun GroupMemberInfoLayout( } } + // revert from this: SectionDividerSpaced(maxBottomPadding = false) SectionView { if (member.memberSettings.showMessages) { @@ -355,6 +402,13 @@ fun GroupMemberInfoLayout( RemoveMemberButton(removeMember) } } + // revert to this: vvv +// if (groupInfo.membership.memberRole >= GroupMemberRole.Admin) { +// AdminDestructiveSection() +// } else { +// NonAdminBlockSection() +// } + // ^^^ if (developerTools) { SectionDividerSpaced() @@ -427,6 +481,26 @@ fun UnblockMemberButton(onClick: () -> Unit) { ) } +@Composable +fun BlockForAllButton(onClick: () -> Unit) { + SettingsActionItem( + painterResource(MR.images.ic_back_hand), + stringResource(MR.strings.block_for_all), + click = onClick, + textColor = Color.Red, + iconColor = Color.Red, + ) +} + +@Composable +fun UnblockForAllButton(onClick: () -> Unit) { + SettingsActionItem( + painterResource(MR.images.ic_do_not_touch), + stringResource(MR.strings.unblock_for_all), + click = onClick + ) +} + @Composable fun RemoveMemberButton(onClick: () -> Unit) { SettingsActionItem( @@ -553,6 +627,36 @@ fun updateMemberSettings(rhId: Long?, gInfo: GroupInfo, member: GroupMember, mem } } +fun blockForAllAlert(rhId: Long?, gInfo: GroupInfo, mem: GroupMember) { + AlertManager.shared.showAlertDialog( + title = generalGetString(MR.strings.block_for_all_question), + text = generalGetString(MR.strings.block_member_desc).format(mem.chatViewName), + confirmText = generalGetString(MR.strings.block_for_all), + onConfirm = { + blockMemberForAll(rhId, gInfo, mem, true) + }, + destructive = true, + ) +} + +fun unblockForAllAlert(rhId: Long?, gInfo: GroupInfo, mem: GroupMember) { + AlertManager.shared.showAlertDialog( + title = generalGetString(MR.strings.unblock_for_all_question), + text = generalGetString(MR.strings.unblock_member_desc).format(mem.chatViewName), + confirmText = generalGetString(MR.strings.unblock_for_all), + onConfirm = { + blockMemberForAll(rhId, gInfo, mem, false) + }, + ) +} + +fun blockMemberForAll(rhId: Long?, gInfo: GroupInfo, member: GroupMember, blocked: Boolean) { + withBGApi { + val updatedMember = ChatController.apiBlockMemberForAll(rhId, gInfo.groupId, member.groupMemberId, blocked) + chatModel.upsertGroupMember(rhId, gInfo, updatedMember) + } +} + @Preview @Composable fun PreviewGroupMemberInfoLayout() { @@ -570,6 +674,8 @@ fun PreviewGroupMemberInfoLayout() { connectViaAddress = {}, blockMember = {}, unblockMember = {}, + blockForAll = {}, + unblockForAll = {}, removeMember = {}, onRoleSelected = {}, switchMemberAddress = {}, diff --git a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/item/ChatItemView.kt b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/item/ChatItemView.kt index 8f49ce92c..549f5f2f5 100644 --- a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/item/ChatItemView.kt +++ b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/item/ChatItemView.kt @@ -319,7 +319,7 @@ fun ChatItemView( } } - @Composable fun DeletedItem() { + @Composable fun LegacyDeletedItem() { DeletedItemView(cItem, cInfo.timedMessagesTTL) DefaultDropdownMenu(showMenu) { ItemInfoAction(cInfo, cItem, showItemDetails, showMenu) @@ -371,7 +371,7 @@ fun ChatItemView( } @Composable - fun ModeratedItem() { + fun DeletedItem() { MarkedDeletedItemView(cItem, cInfo.timedMessagesTTL, revealed) DefaultDropdownMenu(showMenu) { ItemInfoAction(cInfo, cItem, showItemDetails, showMenu) @@ -382,8 +382,8 @@ fun ChatItemView( when (val c = cItem.content) { is CIContent.SndMsgContent -> ContentItem() is CIContent.RcvMsgContent -> ContentItem() - is CIContent.SndDeleted -> DeletedItem() - is CIContent.RcvDeleted -> DeletedItem() + is CIContent.SndDeleted -> LegacyDeletedItem() + is CIContent.RcvDeleted -> LegacyDeletedItem() is CIContent.SndCall -> CallItem(c.status, c.duration) is CIContent.RcvCall -> CallItem(c.status, c.duration) is CIContent.RcvIntegrityError -> if (developerTools) { @@ -449,8 +449,9 @@ fun ChatItemView( CIChatFeatureView(cItem, c.groupFeature, Color.Red, revealed = revealed, showMenu = showMenu) MsgContentItemDropdownMenu() } - is CIContent.SndModerated -> ModeratedItem() - is CIContent.RcvModerated -> ModeratedItem() + is CIContent.SndModerated -> DeletedItem() + is CIContent.RcvModerated -> DeletedItem() + is CIContent.RcvBlocked -> DeletedItem() is CIContent.InvalidJSON -> CIInvalidJSONView(c.json) } } diff --git a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/item/FramedItemView.kt b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/item/FramedItemView.kt index 83ec134d8..641e6affa 100644 --- a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/item/FramedItemView.kt +++ b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/item/FramedItemView.kt @@ -209,7 +209,10 @@ fun FramedItemView( is CIDeleted.Blocked -> { FramedItemHeader(stringResource(MR.strings.blocked_item_description), true, painterResource(MR.images.ic_back_hand)) } - else -> { + is CIDeleted.BlockedByAdmin -> { + FramedItemHeader(stringResource(MR.strings.blocked_by_admin_item_description), true, painterResource(MR.images.ic_back_hand)) + } + is CIDeleted.Deleted -> { FramedItemHeader(stringResource(MR.strings.marked_deleted_description), true, painterResource(MR.images.ic_delete)) } } diff --git a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/item/MarkedDeletedItemView.kt b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/item/MarkedDeletedItemView.kt index f39795499..f7783d682 100644 --- a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/item/MarkedDeletedItemView.kt +++ b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/item/MarkedDeletedItemView.kt @@ -48,6 +48,7 @@ private fun MergedMarkedDeletedText(chatItem: ChatItem, revealed: MutableState<B val reversedChatItems = ChatModel.chatItems.asReversed() var moderated = 0 var blocked = 0 + var blockedByAdmin = 0 var deleted = 0 val moderatedBy: MutableSet<String> = mutableSetOf() while (i < reversedChatItems.size) { @@ -59,16 +60,19 @@ private fun MergedMarkedDeletedText(chatItem: ChatItem, revealed: MutableState<B moderatedBy.add(itemDeleted.byGroupMember.displayName) } is CIDeleted.Blocked -> blocked += 1 + is CIDeleted.BlockedByAdmin -> blockedByAdmin +=1 is CIDeleted.Deleted -> deleted += 1 } i++ } - val total = moderated + blocked + deleted + val total = moderated + blocked + blockedByAdmin + deleted if (total <= 1) markedDeletedText(chatItem.meta) else if (total == moderated) stringResource(MR.strings.moderated_items_description).format(total, moderatedBy.joinToString(", ")) - else if (total == blocked) + else if (total == blockedByAdmin) + stringResource(MR.strings.blocked_by_admin_items_description).format(total) + else if (total == blocked + blockedByAdmin) stringResource(MR.strings.blocked_items_description).format(total) else stringResource(MR.strings.marked_deleted_items_description).format(total) @@ -93,7 +97,9 @@ private fun markedDeletedText(meta: CIMeta): String = String.format(generalGetString(MR.strings.moderated_item_description), meta.itemDeleted.byGroupMember.displayName) is CIDeleted.Blocked -> generalGetString(MR.strings.blocked_item_description) - else -> + is CIDeleted.BlockedByAdmin -> + generalGetString(MR.strings.blocked_by_admin_item_description) + is CIDeleted.Deleted, null -> generalGetString(MR.strings.marked_deleted_description) } diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/base/strings.xml b/apps/multiplatform/common/src/commonMain/resources/MR/base/strings.xml index aae9d54e9..d36eca273 100644 --- a/apps/multiplatform/common/src/commonMain/resources/MR/base/strings.xml +++ b/apps/multiplatform/common/src/commonMain/resources/MR/base/strings.xml @@ -35,7 +35,9 @@ <string name="moderated_item_description">moderated by %s</string> <string name="moderated_items_description">%1$d messages moderated by %2$s</string> <string name="blocked_item_description">blocked</string> + <string name="blocked_by_admin_item_description">blocked by admin</string> <string name="blocked_items_description">%d messages blocked</string> + <string name="blocked_by_admin_items_description">%d messages blocked by admin</string> <string name="sending_files_not_yet_supported">sending files is not supported yet</string> <string name="receiving_files_not_yet_supported">receiving files is not supported yet</string> <string name="sender_you_pronoun">you</string> @@ -1176,6 +1178,8 @@ <string name="rcv_group_event_member_connected">connected</string> <string name="rcv_group_event_member_left">left</string> <string name="rcv_group_event_changed_member_role">changed role of %s to %s</string> + <string name="rcv_group_event_member_blocked">blocked %s</string> + <string name="rcv_group_event_member_unblocked">unblocked %s</string> <string name="rcv_group_event_changed_your_role">changed your role to %s</string> <string name="rcv_group_event_member_deleted">removed %1$s</string> <string name="rcv_group_event_user_deleted">removed you</string> @@ -1185,6 +1189,8 @@ <string name="rcv_group_event_member_created_contact">connected directly</string> <string name="snd_group_event_changed_member_role">you changed role of %s to %s</string> <string name="snd_group_event_changed_role_for_yourself">you changed role for yourself to %s</string> + <string name="snd_group_event_member_blocked">you blocked %s</string> + <string name="snd_group_event_member_unblocked">you unblocked %s</string> <string name="snd_group_event_member_deleted">you removed %1$s</string> <string name="snd_group_event_user_left">you left</string> <string name="snd_group_event_group_profile_updated">group profile updated</string> @@ -1339,11 +1345,17 @@ <string name="block_member_question">Block member?</string> <string name="block_member_button">Block member</string> <string name="block_member_confirmation">Block</string> + <string name="block_for_all_question">Block member for all?</string> + <string name="block_for_all">Block for all</string> <string name="block_member_desc">All new messages from %s will be hidden!</string> <string name="unblock_member_question">Unblock member?</string> <string name="unblock_member_button">Unblock member</string> <string name="unblock_member_confirmation">Unblock</string> + <string name="unblock_for_all_question">Unblock member for all?</string> + <string name="unblock_for_all">Unblock for all</string> <string name="unblock_member_desc">Messages from %s will be shown!</string> + <string name="member_blocked_by_admin">Blocked by admin</string> + <string name="member_info_member_blocked">blocked</string> <string name="member_info_section_title_member">MEMBER</string> <string name="role_in_group">Role</string> <string name="change_role">Change role</string> @@ -1356,6 +1368,7 @@ <string name="connect_via_member_address_alert_desc">Сonnection request will be sent to this group member.</string> <string name="error_removing_member">Error removing member</string> <string name="error_changing_role">Error changing role</string> + <string name="error_blocking_member_for_all">Error blocking member for all</string> <string name="info_row_group">Group</string> <string name="info_row_connection">Connection</string> <string name="conn_level_desc_direct">direct</string> From 1016513dd3dbdfc0a1ef9adcaec395e9192d3b3c Mon Sep 17 00:00:00 2001 From: Evgeny Poberezkin <evgeny@poberezkin.com> Date: Sat, 20 Jan 2024 13:46:23 +0000 Subject: [PATCH 20/23] ui: translations (#3717) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Translated using Weblate (German) Currently translated at 99.9% (1570 of 1571 strings) Translation: SimpleX Chat/SimpleX Chat Android Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/de/ * Translated using Weblate (Italian) Currently translated at 100.0% (1571 of 1571 strings) Translation: SimpleX Chat/SimpleX Chat Android Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/it/ * Translated using Weblate (Italian) Currently translated at 100.0% (1371 of 1371 strings) Translation: SimpleX Chat/SimpleX Chat iOS Translate-URL: https://hosted.weblate.org/projects/simplex-chat/ios/it/ * Translated using Weblate (Chinese (Simplified)) Currently translated at 100.0% (1571 of 1571 strings) Translation: SimpleX Chat/SimpleX Chat Android Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/zh_Hans/ * Translated using Weblate (Hungarian) Currently translated at 100.0% (1571 of 1571 strings) Translation: SimpleX Chat/SimpleX Chat Android Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/hu/ * Translated using Weblate (German) Currently translated at 100.0% (1571 of 1571 strings) Translation: SimpleX Chat/SimpleX Chat Android Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/de/ * Translated using Weblate (German) Currently translated at 100.0% (1371 of 1371 strings) Translation: SimpleX Chat/SimpleX Chat iOS Translate-URL: https://hosted.weblate.org/projects/simplex-chat/ios/de/ * Translated using Weblate (Dutch) Currently translated at 100.0% (1571 of 1571 strings) Translation: SimpleX Chat/SimpleX Chat Android Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/nl/ * Translated using Weblate (Dutch) Currently translated at 100.0% (1371 of 1371 strings) Translation: SimpleX Chat/SimpleX Chat iOS Translate-URL: https://hosted.weblate.org/projects/simplex-chat/ios/nl/ * Translated using Weblate (Hungarian) Currently translated at 100.0% (1571 of 1571 strings) Translation: SimpleX Chat/SimpleX Chat Android Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/hu/ * Translated using Weblate (Hungarian) Currently translated at 100.0% (1571 of 1571 strings) Translation: SimpleX Chat/SimpleX Chat Android Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/hu/ * Translated using Weblate (French) Currently translated at 100.0% (1571 of 1571 strings) Translation: SimpleX Chat/SimpleX Chat Android Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/fr/ * Translated using Weblate (French) Currently translated at 100.0% (1371 of 1371 strings) Translation: SimpleX Chat/SimpleX Chat iOS Translate-URL: https://hosted.weblate.org/projects/simplex-chat/ios/fr/ * Translated using Weblate (Japanese) Currently translated at 99.0% (1556 of 1571 strings) Translation: SimpleX Chat/SimpleX Chat Android Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/ja/ * Translated using Weblate (Spanish) Currently translated at 97.6% (1534 of 1571 strings) Translation: SimpleX Chat/SimpleX Chat Android Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/es/ * Translated using Weblate (Japanese) Currently translated at 100.0% (1571 of 1571 strings) Translation: SimpleX Chat/SimpleX Chat Android Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/ja/ * Added translation using Weblate (Persian) * Translated using Weblate (Italian) Currently translated at 100.0% (1571 of 1571 strings) Translation: SimpleX Chat/SimpleX Chat Android Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/it/ * Translated using Weblate (Italian) Currently translated at 100.0% (1371 of 1371 strings) Translation: SimpleX Chat/SimpleX Chat iOS Translate-URL: https://hosted.weblate.org/projects/simplex-chat/ios/it/ * Translated using Weblate (Japanese) Currently translated at 100.0% (1571 of 1571 strings) Translation: SimpleX Chat/SimpleX Chat Android Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/ja/ * Translated using Weblate (Bulgarian) Currently translated at 99.8% (1569 of 1571 strings) Translation: SimpleX Chat/SimpleX Chat Android Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/bg/ * Translated using Weblate (Japanese) Currently translated at 100.0% (1571 of 1571 strings) Translation: SimpleX Chat/SimpleX Chat Android Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/ja/ * Translated using Weblate (Japanese) Currently translated at 100.0% (1571 of 1571 strings) Translation: SimpleX Chat/SimpleX Chat Android Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/ja/ * Translated using Weblate (Japanese) Currently translated at 100.0% (1571 of 1571 strings) Translation: SimpleX Chat/SimpleX Chat Android Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/ja/ * Translated using Weblate (Japanese) Currently translated at 100.0% (1571 of 1571 strings) Translation: SimpleX Chat/SimpleX Chat Android Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/ja/ * Translated using Weblate (Bulgarian) Currently translated at 100.0% (1371 of 1371 strings) Translation: SimpleX Chat/SimpleX Chat iOS Translate-URL: https://hosted.weblate.org/projects/simplex-chat/ios/bg/ * Translated using Weblate (Bulgarian) Currently translated at 100.0% (1571 of 1571 strings) Translation: SimpleX Chat/SimpleX Chat Android Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/bg/ * Translated using Weblate (Japanese) Currently translated at 100.0% (1571 of 1571 strings) Translation: SimpleX Chat/SimpleX Chat Android Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/ja/ * Translated using Weblate (Persian) Currently translated at 4.0% (63 of 1571 strings) Translation: SimpleX Chat/SimpleX Chat Android Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/fa/ * Translated using Weblate (Persian) Currently translated at 5.6% (88 of 1571 strings) Translation: SimpleX Chat/SimpleX Chat Android Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/fa/ * Translated using Weblate (Arabic) Currently translated at 99.7% (1574 of 1578 strings) Translation: SimpleX Chat/SimpleX Chat Android Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/ar/ * Translated using Weblate (Hungarian) Currently translated at 100.0% (1578 of 1578 strings) Translation: SimpleX Chat/SimpleX Chat Android Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/hu/ * Translated using Weblate (Hungarian) Currently translated at 100.0% (1583 of 1583 strings) Translation: SimpleX Chat/SimpleX Chat Android Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/hu/ * Translated using Weblate (Dutch) Currently translated at 99.3% (1584 of 1594 strings) Translation: SimpleX Chat/SimpleX Chat Android Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/nl/ * Translated using Weblate (French) Currently translated at 100.0% (1594 of 1594 strings) Translation: SimpleX Chat/SimpleX Chat Android Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/fr/ * Translated using Weblate (French) Currently translated at 100.0% (1397 of 1397 strings) Translation: SimpleX Chat/SimpleX Chat iOS Translate-URL: https://hosted.weblate.org/projects/simplex-chat/ios/fr/ * Translated using Weblate (Chinese (Simplified)) Currently translated at 100.0% (1594 of 1594 strings) Translation: SimpleX Chat/SimpleX Chat Android Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/zh_Hans/ * Translated using Weblate (Dutch) Currently translated at 100.0% (1594 of 1594 strings) Translation: SimpleX Chat/SimpleX Chat Android Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/nl/ * Translated using Weblate (Dutch) Currently translated at 100.0% (1397 of 1397 strings) Translation: SimpleX Chat/SimpleX Chat iOS Translate-URL: https://hosted.weblate.org/projects/simplex-chat/ios/nl/ * Translated using Weblate (Arabic) Currently translated at 99.7% (1590 of 1594 strings) Translation: SimpleX Chat/SimpleX Chat Android Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/ar/ * Translated using Weblate (Hungarian) Currently translated at 100.0% (1594 of 1594 strings) Translation: SimpleX Chat/SimpleX Chat Android Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/hu/ * Translated using Weblate (Hungarian) Currently translated at 100.0% (1594 of 1594 strings) Translation: SimpleX Chat/SimpleX Chat Android Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/hu/ * Translated using Weblate (Italian) Currently translated at 99.5% (1587 of 1594 strings) Translation: SimpleX Chat/SimpleX Chat Android Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/it/ * Translated using Weblate (Italian) Currently translated at 99.9% (1593 of 1594 strings) Translation: SimpleX Chat/SimpleX Chat Android Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/it/ * Translated using Weblate (Italian) Currently translated at 100.0% (1594 of 1594 strings) Translation: SimpleX Chat/SimpleX Chat Android Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/it/ * Translated using Weblate (Italian) Currently translated at 100.0% (1397 of 1397 strings) Translation: SimpleX Chat/SimpleX Chat iOS Translate-URL: https://hosted.weblate.org/projects/simplex-chat/ios/it/ * Translated using Weblate (German) Currently translated at 99.9% (1570 of 1571 strings) Translation: SimpleX Chat/SimpleX Chat Android Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/de/ * Translated using Weblate (Italian) Currently translated at 100.0% (1571 of 1571 strings) Translation: SimpleX Chat/SimpleX Chat Android Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/it/ * Translated using Weblate (Italian) Currently translated at 100.0% (1371 of 1371 strings) Translation: SimpleX Chat/SimpleX Chat iOS Translate-URL: https://hosted.weblate.org/projects/simplex-chat/ios/it/ * Translated using Weblate (Chinese (Simplified)) Currently translated at 100.0% (1571 of 1571 strings) Translation: SimpleX Chat/SimpleX Chat Android Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/zh_Hans/ * Translated using Weblate (Hungarian) Currently translated at 100.0% (1571 of 1571 strings) Translation: SimpleX Chat/SimpleX Chat Android Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/hu/ * Translated using Weblate (German) Currently translated at 100.0% (1571 of 1571 strings) Translation: SimpleX Chat/SimpleX Chat Android Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/de/ * Translated using Weblate (German) Currently translated at 100.0% (1371 of 1371 strings) Translation: SimpleX Chat/SimpleX Chat iOS Translate-URL: https://hosted.weblate.org/projects/simplex-chat/ios/de/ * Translated using Weblate (Dutch) Currently translated at 100.0% (1571 of 1571 strings) Translation: SimpleX Chat/SimpleX Chat Android Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/nl/ * Translated using Weblate (Dutch) Currently translated at 100.0% (1371 of 1371 strings) Translation: SimpleX Chat/SimpleX Chat iOS Translate-URL: https://hosted.weblate.org/projects/simplex-chat/ios/nl/ * Translated using Weblate (Hungarian) Currently translated at 100.0% (1571 of 1571 strings) Translation: SimpleX Chat/SimpleX Chat Android Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/hu/ * Translated using Weblate (Hungarian) Currently translated at 100.0% (1571 of 1571 strings) Translation: SimpleX Chat/SimpleX Chat Android Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/hu/ * Translated using Weblate (French) Currently translated at 100.0% (1571 of 1571 strings) Translation: SimpleX Chat/SimpleX Chat Android Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/fr/ * Translated using Weblate (French) Currently translated at 100.0% (1371 of 1371 strings) Translation: SimpleX Chat/SimpleX Chat iOS Translate-URL: https://hosted.weblate.org/projects/simplex-chat/ios/fr/ * Translated using Weblate (Japanese) Currently translated at 99.0% (1556 of 1571 strings) Translation: SimpleX Chat/SimpleX Chat Android Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/ja/ * Translated using Weblate (Spanish) Currently translated at 97.6% (1534 of 1571 strings) Translation: SimpleX Chat/SimpleX Chat Android Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/es/ * Translated using Weblate (Japanese) Currently translated at 100.0% (1571 of 1571 strings) Translation: SimpleX Chat/SimpleX Chat Android Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/ja/ * Added translation using Weblate (Persian) * Translated using Weblate (Italian) Currently translated at 100.0% (1571 of 1571 strings) Translation: SimpleX Chat/SimpleX Chat Android Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/it/ * Translated using Weblate (Italian) Currently translated at 100.0% (1371 of 1371 strings) Translation: SimpleX Chat/SimpleX Chat iOS Translate-URL: https://hosted.weblate.org/projects/simplex-chat/ios/it/ * Translated using Weblate (Japanese) Currently translated at 100.0% (1571 of 1571 strings) Translation: SimpleX Chat/SimpleX Chat Android Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/ja/ * Translated using Weblate (Bulgarian) Currently translated at 99.8% (1569 of 1571 strings) Translation: SimpleX Chat/SimpleX Chat Android Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/bg/ * Translated using Weblate (Japanese) Currently translated at 100.0% (1571 of 1571 strings) Translation: SimpleX Chat/SimpleX Chat Android Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/ja/ * Translated using Weblate (Japanese) Currently translated at 100.0% (1571 of 1571 strings) Translation: SimpleX Chat/SimpleX Chat Android Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/ja/ * Translated using Weblate (Japanese) Currently translated at 100.0% (1571 of 1571 strings) Translation: SimpleX Chat/SimpleX Chat Android Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/ja/ * Translated using Weblate (Japanese) Currently translated at 100.0% (1571 of 1571 strings) Translation: SimpleX Chat/SimpleX Chat Android Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/ja/ * Translated using Weblate (Bulgarian) Currently translated at 100.0% (1371 of 1371 strings) Translation: SimpleX Chat/SimpleX Chat iOS Translate-URL: https://hosted.weblate.org/projects/simplex-chat/ios/bg/ * Translated using Weblate (Bulgarian) Currently translated at 100.0% (1571 of 1571 strings) Translation: SimpleX Chat/SimpleX Chat Android Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/bg/ * Translated using Weblate (Japanese) Currently translated at 100.0% (1571 of 1571 strings) Translation: SimpleX Chat/SimpleX Chat Android Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/ja/ * Translated using Weblate (Persian) Currently translated at 4.0% (63 of 1571 strings) Translation: SimpleX Chat/SimpleX Chat Android Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/fa/ * Translated using Weblate (Persian) Currently translated at 5.6% (88 of 1571 strings) Translation: SimpleX Chat/SimpleX Chat Android Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/fa/ * Translated using Weblate (Arabic) Currently translated at 99.7% (1574 of 1578 strings) Translation: SimpleX Chat/SimpleX Chat Android Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/ar/ * Translated using Weblate (Hungarian) Currently translated at 100.0% (1578 of 1578 strings) Translation: SimpleX Chat/SimpleX Chat Android Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/hu/ * Translated using Weblate (Hungarian) Currently translated at 100.0% (1583 of 1583 strings) Translation: SimpleX Chat/SimpleX Chat Android Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/hu/ * Translated using Weblate (Dutch) Currently translated at 99.3% (1584 of 1594 strings) Translation: SimpleX Chat/SimpleX Chat Android Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/nl/ * Translated using Weblate (French) Currently translated at 100.0% (1594 of 1594 strings) Translation: SimpleX Chat/SimpleX Chat Android Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/fr/ * Translated using Weblate (French) Currently translated at 100.0% (1397 of 1397 strings) Translation: SimpleX Chat/SimpleX Chat iOS Translate-URL: https://hosted.weblate.org/projects/simplex-chat/ios/fr/ * Translated using Weblate (Chinese (Simplified)) Currently translated at 100.0% (1594 of 1594 strings) Translation: SimpleX Chat/SimpleX Chat Android Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/zh_Hans/ * Translated using Weblate (Dutch) Currently translated at 100.0% (1594 of 1594 strings) Translation: SimpleX Chat/SimpleX Chat Android Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/nl/ * Translated using Weblate (Dutch) Currently translated at 100.0% (1397 of 1397 strings) Translation: SimpleX Chat/SimpleX Chat iOS Translate-URL: https://hosted.weblate.org/projects/simplex-chat/ios/nl/ * Translated using Weblate (Arabic) Currently translated at 99.7% (1590 of 1594 strings) Translation: SimpleX Chat/SimpleX Chat Android Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/ar/ * Translated using Weblate (Hungarian) Currently translated at 100.0% (1594 of 1594 strings) Translation: SimpleX Chat/SimpleX Chat Android Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/hu/ * Translated using Weblate (Hungarian) Currently translated at 100.0% (1594 of 1594 strings) Translation: SimpleX Chat/SimpleX Chat Android Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/hu/ * Translated using Weblate (Italian) Currently translated at 99.5% (1587 of 1594 strings) Translation: SimpleX Chat/SimpleX Chat Android Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/it/ * Translated using Weblate (Italian) Currently translated at 99.9% (1593 of 1594 strings) Translation: SimpleX Chat/SimpleX Chat Android Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/it/ * Translated using Weblate (Italian) Currently translated at 100.0% (1594 of 1594 strings) Translation: SimpleX Chat/SimpleX Chat Android Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/it/ * Translated using Weblate (Italian) Currently translated at 100.0% (1397 of 1397 strings) Translation: SimpleX Chat/SimpleX Chat iOS Translate-URL: https://hosted.weblate.org/projects/simplex-chat/ios/it/ * Update translation files Updated by "Cleanup translation files" hook in Weblate. Translation: SimpleX Chat/SimpleX Chat Android Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/ * Translated using Weblate (Russian) Currently translated at 100.0% (1592 of 1592 strings) Translation: SimpleX Chat/SimpleX Chat Android Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/ru/ * Translated using Weblate (Russian) Currently translated at 99.8% (1395 of 1397 strings) Translation: SimpleX Chat/SimpleX Chat iOS Translate-URL: https://hosted.weblate.org/projects/simplex-chat/ios/ru/ * android CDATA * ios: import/export localizations * update ja * ios: fix directory service address in translations * android: fix translations, CDATA --------- Co-authored-by: mlanp <github@lang.xyz> Co-authored-by: Random <random-r@users.noreply.hosted.weblate.org> Co-authored-by: 大王叫我来巡山 <hamburger2048@users.noreply.hosted.weblate.org> Co-authored-by: summoner001 <summoner@vivaldi.net> Co-authored-by: M1K4 <oomikaoo@gmail.com> Co-authored-by: Ghost of Sparta <makesocialfoss32@keemail.me> Co-authored-by: Ophiushi <41908476+ishi-sama@users.noreply.github.com> Co-authored-by: tomato potato <tomato.games@protonmail.com> Co-authored-by: No name <CertainBot@users.noreply.hosted.weblate.org> Co-authored-by: elgratea <weblate@fastmail.com> Co-authored-by: Y. Sakamoto <ysakamoto@tutanota.com> Co-authored-by: a4318 <dalse.077@gmail.com> Co-authored-by: hakkadaikon <hakkadaikon@yahoo.co.jp> Co-authored-by: Siavash <ciavash@proton.me> Co-authored-by: jonnysemon <jonnysemon@users.noreply.hosted.weblate.org> Co-authored-by: Hosted Weblate <hosted@weblate.org> --- .../bg.xcloc/Localized Contents/bg.xliff | 85 +++++--- .../cs.xcloc/Localized Contents/cs.xliff | 70 +++--- .../de.xcloc/Localized Contents/de.xliff | 89 +++++--- .../en.xcloc/Localized Contents/en.xliff | 82 ++++--- .../es.xcloc/Localized Contents/es.xliff | 68 +++--- .../fi.xcloc/Localized Contents/fi.xliff | 68 +++--- .../fr.xcloc/Localized Contents/fr.xliff | 99 ++++++--- .../it.xcloc/Localized Contents/it.xliff | 101 ++++++--- .../ja.xcloc/Localized Contents/ja.xliff | 68 +++--- .../nl.xcloc/Localized Contents/nl.xliff | 99 ++++++--- .../pl.xcloc/Localized Contents/pl.xliff | 68 +++--- .../ru.xcloc/Localized Contents/ru.xliff | 134 +++++++++--- .../th.xcloc/Localized Contents/th.xliff | 68 +++--- .../tr.xcloc/Localized Contents/tr.xliff | 68 +++--- .../uk.xcloc/Localized Contents/uk.xliff | 70 +++--- .../Localized Contents/zh-Hans.xliff | 68 +++--- apps/ios/bg.lproj/Localizable.strings | 40 ++-- apps/ios/cs.lproj/Localizable.strings | 11 +- apps/ios/de.lproj/Localizable.strings | 40 ++-- apps/ios/es.lproj/Localizable.strings | 9 - apps/ios/fi.lproj/Localizable.strings | 9 - apps/ios/fr.lproj/Localizable.strings | 102 ++++++++- apps/ios/it.lproj/Localizable.strings | 104 ++++++++- apps/ios/ja.lproj/Localizable.strings | 9 - apps/ios/nl.lproj/Localizable.strings | 102 ++++++++- apps/ios/pl.lproj/Localizable.strings | 9 - apps/ios/ru.lproj/Localizable.strings | 200 +++++++++++++++++- apps/ios/th.lproj/Localizable.strings | 9 - apps/ios/tr.lproj/Localizable.strings | 9 - apps/ios/uk.lproj/Localizable.strings | 11 +- apps/ios/zh-Hans.lproj/Localizable.strings | 9 - .../commonMain/resources/MR/ar/strings.xml | 141 ++++++++---- .../commonMain/resources/MR/bg/strings.xml | 47 +++- .../commonMain/resources/MR/de/strings.xml | 23 +- .../commonMain/resources/MR/es/strings.xml | 2 +- .../commonMain/resources/MR/fa/strings.xml | 85 ++++++++ .../commonMain/resources/MR/fr/strings.xml | 63 ++++++ .../commonMain/resources/MR/hu/strings.xml | 50 +++++ .../commonMain/resources/MR/it/strings.xml | 55 ++++- .../commonMain/resources/MR/ja/strings.xml | 93 +++++--- .../commonMain/resources/MR/nl/strings.xml | 65 ++++++ .../commonMain/resources/MR/ru/strings.xml | 115 +++++++++- .../resources/MR/zh-rCN/strings.xml | 51 ++++- scripts/ios/import-localizations.sh | 2 +- 44 files changed, 2118 insertions(+), 652 deletions(-) create mode 100644 apps/multiplatform/common/src/commonMain/resources/MR/fa/strings.xml diff --git a/apps/ios/SimpleX Localizations/bg.xcloc/Localized Contents/bg.xliff b/apps/ios/SimpleX Localizations/bg.xcloc/Localized Contents/bg.xliff index dfe4558bc..85e4ebb98 100644 --- a/apps/ios/SimpleX Localizations/bg.xcloc/Localized Contents/bg.xliff +++ b/apps/ios/SimpleX Localizations/bg.xcloc/Localized Contents/bg.xliff @@ -217,6 +217,10 @@ <target>%lld блокирани съобщения</target> <note>No comment provided by engineer.</note> </trans-unit> + <trans-unit id="%lld messages blocked by admin" xml:space="preserve"> + <source>%lld messages blocked by admin</source> + <note>No comment provided by engineer.</note> + </trans-unit> <trans-unit id="%lld messages marked deleted" xml:space="preserve"> <source>%lld messages marked deleted</source> <target>%lld съобщения, маркирани като изтрити</target> @@ -372,16 +376,11 @@ <target>, </target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="- block a member to stop spam for all. - contact address is not shared." xml:space="preserve"> - <source>- block a member to stop spam for all. -- contact address is not shared.</source> - <note>No comment provided by engineer.</note> - </trans-unit> <trans-unit id="- connect to [directory service](simplex:/contact#/?v=1-4&smp=smp%3A%2F%2Fu2dS9sG8nMNURyZwqASV4yROM28Er0luVTx5X1CsMrU%3D%40smp4.simplex.im%2FeXSPwqTkKyDO3px4fLf1wx3MvPdjdLW3%23%2F%3Fv%3D1-2%26dh%3DMCowBQYDK2VuAyEAaiv6MkMH44L2TcYrt_CsX3ZvM11WgbMEUn0hkIKTOho%253D%26srv%3Do5vmywmrnaxalvz6wi3zicyftgio6psuvyniis6gco6bp6ekl4cqj4id.onion) (BETA)! - delivery receipts (up to 20 members). - faster and more stable." xml:space="preserve"> <source>- connect to [directory service](simplex:/contact#/?v=1-4&smp=smp%3A%2F%2Fu2dS9sG8nMNURyZwqASV4yROM28Er0luVTx5X1CsMrU%3D%40smp4.simplex.im%2FeXSPwqTkKyDO3px4fLf1wx3MvPdjdLW3%23%2F%3Fv%3D1-2%26dh%3DMCowBQYDK2VuAyEAaiv6MkMH44L2TcYrt_CsX3ZvM11WgbMEUn0hkIKTOho%253D%26srv%3Do5vmywmrnaxalvz6wi3zicyftgio6psuvyniis6gco6bp6ekl4cqj4id.onion) (BETA)! - delivery receipts (up to 20 members). - faster and more stable.</source> - <target>- свържете се с [директория за услуги](simplex:/contact#/?v=1-4&smp=smp%3A%2F%2Fu2dS9sG8nMNURyZwqASV4yROM28Er0luVTx5X1CsMrU%3D%40smp4.simplex.im%2FeXSPwqTkKyDO3px4fLf1wx3MvPdjd LW3%23%2F%3Fv%3D1-2%26dh %3DMCowBQYDK2VuAyEAaiv6MkMH44L2TcYrt_CsX3ZvM11WgbMEUn0hkIKTOho%253D%26srv%3Do5vmywmrnaxalvz6wi3zicyftgio6psuvyniis6gco6bp6ekl4cqj4id.onion) (БЕТА)! + <target>- свържете се с [директория за услуги](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) (БЕТА)! - потвърждениe за доставка (до 20 члена). - по-бързо и по-стабилно.</target> <note>No comment provided by engineer.</note> @@ -922,6 +921,10 @@ <target>Блокирай</target> <note>No comment provided by engineer.</note> </trans-unit> + <trans-unit id="Block for all" xml:space="preserve"> + <source>Block for all</source> + <note>No comment provided by engineer.</note> + </trans-unit> <trans-unit id="Block group members" xml:space="preserve"> <source>Block group members</source> <target>Блокиране на членове на групата</target> @@ -932,11 +935,19 @@ <target>Блокирай член</target> <note>No comment provided by engineer.</note> </trans-unit> + <trans-unit id="Block member for all?" xml:space="preserve"> + <source>Block member for all?</source> + <note>No comment provided by engineer.</note> + </trans-unit> <trans-unit id="Block member?" xml:space="preserve"> <source>Block member?</source> <target>Блокирай члена?</target> <note>No comment provided by engineer.</note> </trans-unit> + <trans-unit id="Blocked by admin" xml:space="preserve"> + <source>Blocked by admin</source> + <note>No comment provided by engineer.</note> + </trans-unit> <trans-unit id="Both you and your contact can add message reactions." xml:space="preserve"> <source>Both you and your contact can add message reactions.</source> <target>И вие, и вашият контакт можете да добавяте реакции към съобщението.</target> @@ -987,11 +998,6 @@ <target>Камерата е неодстъпна</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Can't delete user profile!" xml:space="preserve"> - <source>Can't delete user profile!</source> - <target>Потребителският профил не може да се изтрие!</target> - <note>No comment provided by engineer.</note> - </trans-unit> <trans-unit id="Can't invite contact!" xml:space="preserve"> <source>Can't invite contact!</source> <target>Не може да покани контакта!</target> @@ -1951,6 +1957,7 @@ This cannot be undone!</source> </trans-unit> <trans-unit id="Do not send history to new members." xml:space="preserve"> <source>Do not send history to new members.</source> + <target>Не изпращай история на нови членове.</target> <note>No comment provided by engineer.</note> </trans-unit> <trans-unit id="Don't create address" xml:space="preserve"> @@ -1980,7 +1987,7 @@ This cannot be undone!</source> </trans-unit> <trans-unit id="Duplicate display name!" xml:space="preserve"> <source>Duplicate display name!</source> - <target>Дублирано показвано име!</target> + <target>Дублирано име!</target> <note>No comment provided by engineer.</note> </trans-unit> <trans-unit id="Duration" xml:space="preserve"> @@ -2669,7 +2676,7 @@ This cannot be undone!</source> </trans-unit> <trans-unit id="Group display name" xml:space="preserve"> <source>Group display name</source> - <target>Показвано име на групата</target> + <target>Име на групата</target> <note>No comment provided by engineer.</note> </trans-unit> <trans-unit id="Group full name (optional)" xml:space="preserve"> @@ -2824,6 +2831,7 @@ This cannot be undone!</source> </trans-unit> <trans-unit id="History is not sent to new members." xml:space="preserve"> <source>History is not sent to new members.</source> + <target>Историята не се изпраща на нови членове.</target> <note>No comment provided by engineer.</note> </trans-unit> <trans-unit id="How SimpleX works" xml:space="preserve"> @@ -3034,6 +3042,7 @@ This cannot be undone!</source> </trans-unit> <trans-unit id="Invalid display name!" xml:space="preserve"> <source>Invalid display name!</source> + <target>Невалидно име!</target> <note>No comment provided by engineer.</note> </trans-unit> <trans-unit id="Invalid link" xml:space="preserve"> @@ -3545,7 +3554,7 @@ This is your link for group %@!</source> </trans-unit> <trans-unit id="New display name" xml:space="preserve"> <source>New display name</source> - <target>Ново показвано име</target> + <target>Ново име</target> <note>No comment provided by engineer.</note> </trans-unit> <trans-unit id="New in %@" xml:space="preserve"> @@ -4390,10 +4399,6 @@ Error: %@</source> <target>SMP сървъри</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Safer groups" xml:space="preserve"> - <source>Safer groups</source> - <note>No comment provided by engineer.</note> - </trans-unit> <trans-unit id="Save" xml:space="preserve"> <source>Save</source> <target>Запази</target> @@ -4629,6 +4634,7 @@ Error: %@</source> </trans-unit> <trans-unit id="Send up to 100 last messages to new members." xml:space="preserve"> <source>Send up to 100 last messages to new members.</source> + <target>Изпращане до последните 100 съобщения на нови членове.</target> <note>No comment provided by engineer.</note> </trans-unit> <trans-unit id="Sender cancelled file transfer." xml:space="preserve"> @@ -5213,16 +5219,6 @@ It can happen because of some bug or when the connection is compromised.</source <target>Тема</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="There should be at least one user profile." xml:space="preserve"> - <source>There should be at least one user profile.</source> - <target>Трябва да има поне един потребителски профил.</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="There should be at least one visible user profile." xml:space="preserve"> - <source>There should be at least one visible user profile.</source> - <target>Трябва да има поне един видим потребителски профил.</target> - <note>No comment provided by engineer.</note> - </trans-unit> <trans-unit id="These settings are for your current profile **%@**." xml:space="preserve"> <source>These settings are for your current profile **%@**.</source> <target>Тези настройки са за текущия ви профил **%@**.</target> @@ -5255,6 +5251,7 @@ It can happen because of some bug or when the connection is compromised.</source </trans-unit> <trans-unit id="This display name is invalid. Please choose another name." xml:space="preserve"> <source>This display name is invalid. Please choose another name.</source> + <target>Това име е невалидно. Моля, изберете друго име.</target> <note>No comment provided by engineer.</note> </trans-unit> <trans-unit id="This group has over %lld members, delivery receipts are not sent." xml:space="preserve"> @@ -5383,11 +5380,19 @@ You will be prompted to complete authentication before this feature is enabled.< <target>Отблокирай</target> <note>No comment provided by engineer.</note> </trans-unit> + <trans-unit id="Unblock for all" xml:space="preserve"> + <source>Unblock for all</source> + <note>No comment provided by engineer.</note> + </trans-unit> <trans-unit id="Unblock member" xml:space="preserve"> <source>Unblock member</source> <target>Отблокирай член</target> <note>No comment provided by engineer.</note> </trans-unit> + <trans-unit id="Unblock member for all?" xml:space="preserve"> + <source>Unblock member for all?</source> + <note>No comment provided by engineer.</note> + </trans-unit> <trans-unit id="Unblock member?" xml:space="preserve"> <source>Unblock member?</source> <target>Отблокирай член?</target> @@ -5487,6 +5492,7 @@ To connect, please ask your contact to create another connection link and check </trans-unit> <trans-unit id="Up to 100 last messages are sent to new members." xml:space="preserve"> <source>Up to 100 last messages are sent to new members.</source> + <target>На новите членове се изпращат до последните 100 съобщения.</target> <note>No comment provided by engineer.</note> </trans-unit> <trans-unit id="Update" xml:space="preserve"> @@ -5661,6 +5667,7 @@ To connect, please ask your contact to create another connection link and check </trans-unit> <trans-unit id="Visible history" xml:space="preserve"> <source>Visible history</source> + <target>Видима история</target> <note>chat feature</note> </trans-unit> <trans-unit id="Voice messages" xml:space="preserve"> @@ -5793,7 +5800,7 @@ To connect, please ask your contact to create another connection link and check </trans-unit> <trans-unit id="You already have a chat profile with the same display name. Please choose another name." xml:space="preserve"> <source>You already have a chat profile with the same display name. Please choose another name.</source> - <target>Вече имате чат профил със същото показвано име. Моля, изберете друго име.</target> + <target>Вече имате чат профил със същото име. Моля, изберете друго име.</target> <note>No comment provided by engineer.</note> </trans-unit> <trans-unit id="You are already connected to %@." xml:space="preserve"> @@ -6264,6 +6271,14 @@ SimpleX сървърите не могат да видят вашия профи <target>блокиран</target> <note>No comment provided by engineer.</note> </trans-unit> + <trans-unit id="blocked %@" xml:space="preserve"> + <source>blocked %@</source> + <note>rcv group event chat item</note> + </trans-unit> + <trans-unit id="blocked by admin" xml:space="preserve"> + <source>blocked by admin</source> + <note>blocked chat item</note> + </trans-unit> <trans-unit id="bold" xml:space="preserve"> <source>bold</source> <target>удебелен</target> @@ -6845,6 +6860,10 @@ SimpleX сървърите не могат да видят вашия профи <target>този контакт</target> <note>notification title</note> </trans-unit> + <trans-unit id="unblocked %@" xml:space="preserve"> + <source>unblocked %@</source> + <note>rcv group event chat item</note> + </trans-unit> <trans-unit id="unknown" xml:space="preserve"> <source>unknown</source> <target>неизвестен</target> @@ -6933,6 +6952,10 @@ SimpleX сървърите не могат да видят вашия профи <target>вие сте наблюдател</target> <note>No comment provided by engineer.</note> </trans-unit> + <trans-unit id="you blocked %@" xml:space="preserve"> + <source>you blocked %@</source> + <note>snd group event chat item</note> + </trans-unit> <trans-unit id="you changed address" xml:space="preserve"> <source>you changed address</source> <target>променихте адреса</target> @@ -6973,6 +6996,10 @@ SimpleX сървърите не могат да видят вашия профи <target>споделихте еднократен инкогнито линк за връзка</target> <note>chat list item description</note> </trans-unit> + <trans-unit id="you unblocked %@" xml:space="preserve"> + <source>you unblocked %@</source> + <note>snd group event chat item</note> + </trans-unit> <trans-unit id="you: " xml:space="preserve"> <source>you: </source> <target>вие: </target> diff --git a/apps/ios/SimpleX Localizations/cs.xcloc/Localized Contents/cs.xliff b/apps/ios/SimpleX Localizations/cs.xcloc/Localized Contents/cs.xliff index a47cdb72d..a376c86ad 100644 --- a/apps/ios/SimpleX Localizations/cs.xcloc/Localized Contents/cs.xliff +++ b/apps/ios/SimpleX Localizations/cs.xcloc/Localized Contents/cs.xliff @@ -214,6 +214,10 @@ <source>%lld messages blocked</source> <note>No comment provided by engineer.</note> </trans-unit> + <trans-unit id="%lld messages blocked by admin" xml:space="preserve"> + <source>%lld messages blocked by admin</source> + <note>No comment provided by engineer.</note> + </trans-unit> <trans-unit id="%lld messages marked deleted" xml:space="preserve"> <source>%lld messages marked deleted</source> <note>No comment provided by engineer.</note> @@ -363,16 +367,11 @@ <target>, </target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="- block a member to stop spam for all. - contact address is not shared." xml:space="preserve"> - <source>- block a member to stop spam for all. -- contact address is not shared.</source> - <note>No comment provided by engineer.</note> - </trans-unit> <trans-unit id="- connect to [directory service](simplex:/contact#/?v=1-4&smp=smp%3A%2F%2Fu2dS9sG8nMNURyZwqASV4yROM28Er0luVTx5X1CsMrU%3D%40smp4.simplex.im%2FeXSPwqTkKyDO3px4fLf1wx3MvPdjdLW3%23%2F%3Fv%3D1-2%26dh%3DMCowBQYDK2VuAyEAaiv6MkMH44L2TcYrt_CsX3ZvM11WgbMEUn0hkIKTOho%253D%26srv%3Do5vmywmrnaxalvz6wi3zicyftgio6psuvyniis6gco6bp6ekl4cqj4id.onion) (BETA)! - delivery receipts (up to 20 members). - faster and more stable." xml:space="preserve"> <source>- connect to [directory service](simplex:/contact#/?v=1-4&smp=smp%3A%2F%2Fu2dS9sG8nMNURyZwqASV4yROM28Er0luVTx5X1CsMrU%3D%40smp4.simplex.im%2FeXSPwqTkKyDO3px4fLf1wx3MvPdjdLW3%23%2F%3Fv%3D1-2%26dh%3DMCowBQYDK2VuAyEAaiv6MkMH44L2TcYrt_CsX3ZvM11WgbMEUn0hkIKTOho%253D%26srv%3Do5vmywmrnaxalvz6wi3zicyftgio6psuvyniis6gco6bp6ekl4cqj4id.onion) (BETA)! - delivery receipts (up to 20 members). - faster and more stable.</source> - <target>- připojit k [adresářová služba](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.cibule) (BETA)! + <target>- připojit k [adresářová služba](simplex:/contact#/?v=1-4&smp=smp%3A%2F%2Fu2dS9sG8nMNURyZwqASV4yROM28Er0luVTx5X1CsMrU%3D%40smp4.simplex.im%2FeXSPwqTkKyDO3px4fLf1wx3MvPdjdLW3%23%2F%3Fv%3D1-2%26dh%3DMCowBQYDK2VuAyEAaiv6MkMH44L2TcYrt_CsX3ZvM11WgbMEUn0hkIKTOho%253D%26srv%3Do5vmywmrnaxalvz6wi3zicyftgio6psuvyniis6gco6bp6ekl4cqj4id.onion) (BETA)! - doručenky (až 20 členů). - Rychlejší a stabilnější.</target> <note>No comment provided by engineer.</note> @@ -902,6 +901,10 @@ <source>Block</source> <note>No comment provided by engineer.</note> </trans-unit> + <trans-unit id="Block for all" xml:space="preserve"> + <source>Block for all</source> + <note>No comment provided by engineer.</note> + </trans-unit> <trans-unit id="Block group members" xml:space="preserve"> <source>Block group members</source> <note>No comment provided by engineer.</note> @@ -910,10 +913,18 @@ <source>Block member</source> <note>No comment provided by engineer.</note> </trans-unit> + <trans-unit id="Block member for all?" xml:space="preserve"> + <source>Block member for all?</source> + <note>No comment provided by engineer.</note> + </trans-unit> <trans-unit id="Block member?" xml:space="preserve"> <source>Block member?</source> <note>No comment provided by engineer.</note> </trans-unit> + <trans-unit id="Blocked by admin" xml:space="preserve"> + <source>Blocked by admin</source> + <note>No comment provided by engineer.</note> + </trans-unit> <trans-unit id="Both you and your contact can add message reactions." xml:space="preserve"> <source>Both you and your contact can add message reactions.</source> <target>Vy i váš kontakt můžete přidávat reakce na zprávy.</target> @@ -963,11 +974,6 @@ <source>Camera not available</source> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Can't delete user profile!" xml:space="preserve"> - <source>Can't delete user profile!</source> - <target>Nemohu smazat uživatelský profil!</target> - <note>No comment provided by engineer.</note> - </trans-unit> <trans-unit id="Can't invite contact!" xml:space="preserve"> <source>Can't invite contact!</source> <target>Nelze pozvat kontakt!</target> @@ -4289,10 +4295,6 @@ Error: %@</source> <target>SMP servery</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Safer groups" xml:space="preserve"> - <source>Safer groups</source> - <note>No comment provided by engineer.</note> - </trans-unit> <trans-unit id="Save" xml:space="preserve"> <source>Save</source> <target>Uložit</target> @@ -5102,16 +5104,6 @@ Může se to stát kvůli nějaké chybě, nebo pokud je spojení kompromitován <target>Téma</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="There should be at least one user profile." xml:space="preserve"> - <source>There should be at least one user profile.</source> - <target>Měl by tam být alespoň jeden uživatelský profil.</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="There should be at least one visible user profile." xml:space="preserve"> - <source>There should be at least one visible user profile.</source> - <target>Měl by tam být alespoň jeden viditelný uživatelský profil.</target> - <note>No comment provided by engineer.</note> - </trans-unit> <trans-unit id="These settings are for your current profile **%@**." xml:space="preserve"> <source>These settings are for your current profile **%@**.</source> <target>Toto nastavení je pro váš aktuální profil **%@**.</target> @@ -5267,10 +5259,18 @@ Před zapnutím této funkce budete vyzváni k dokončení ověření.</target> <source>Unblock</source> <note>No comment provided by engineer.</note> </trans-unit> + <trans-unit id="Unblock for all" xml:space="preserve"> + <source>Unblock for all</source> + <note>No comment provided by engineer.</note> + </trans-unit> <trans-unit id="Unblock member" xml:space="preserve"> <source>Unblock member</source> <note>No comment provided by engineer.</note> </trans-unit> + <trans-unit id="Unblock member for all?" xml:space="preserve"> + <source>Unblock member for all?</source> + <note>No comment provided by engineer.</note> + </trans-unit> <trans-unit id="Unblock member?" xml:space="preserve"> <source>Unblock member?</source> <note>No comment provided by engineer.</note> @@ -6118,6 +6118,14 @@ Servery SimpleX nevidí váš profil.</target> <source>blocked</source> <note>No comment provided by engineer.</note> </trans-unit> + <trans-unit id="blocked %@" xml:space="preserve"> + <source>blocked %@</source> + <note>rcv group event chat item</note> + </trans-unit> + <trans-unit id="blocked by admin" xml:space="preserve"> + <source>blocked by admin</source> + <note>blocked chat item</note> + </trans-unit> <trans-unit id="bold" xml:space="preserve"> <source>bold</source> <target>tučně</target> @@ -6697,6 +6705,10 @@ Servery SimpleX nevidí váš profil.</target> <target>tento kontakt</target> <note>notification title</note> </trans-unit> + <trans-unit id="unblocked %@" xml:space="preserve"> + <source>unblocked %@</source> + <note>rcv group event chat item</note> + </trans-unit> <trans-unit id="unknown" xml:space="preserve"> <source>unknown</source> <target>neznámý</target> @@ -6784,6 +6796,10 @@ Servery SimpleX nevidí váš profil.</target> <target>jste pozorovatel</target> <note>No comment provided by engineer.</note> </trans-unit> + <trans-unit id="you blocked %@" xml:space="preserve"> + <source>you blocked %@</source> + <note>snd group event chat item</note> + </trans-unit> <trans-unit id="you changed address" xml:space="preserve"> <source>you changed address</source> <target>změnili jste adresu</target> @@ -6824,6 +6840,10 @@ Servery SimpleX nevidí váš profil.</target> <target>sdíleli jste jednorázový odkaz inkognito</target> <note>chat list item description</note> </trans-unit> + <trans-unit id="you unblocked %@" xml:space="preserve"> + <source>you unblocked %@</source> + <note>snd group event chat item</note> + </trans-unit> <trans-unit id="you: " xml:space="preserve"> <source>you: </source> <target>vy: </target> diff --git a/apps/ios/SimpleX Localizations/de.xcloc/Localized Contents/de.xliff b/apps/ios/SimpleX Localizations/de.xcloc/Localized Contents/de.xliff index 8ebf184cf..54b6088d9 100644 --- a/apps/ios/SimpleX Localizations/de.xcloc/Localized Contents/de.xliff +++ b/apps/ios/SimpleX Localizations/de.xcloc/Localized Contents/de.xliff @@ -49,7 +49,7 @@ </trans-unit> <trans-unit id="## History" xml:space="preserve"> <source>## History</source> - <target>## Verlauf</target> + <target>## Nachrichtenverlauf</target> <note>copied message info</note> </trans-unit> <trans-unit id="## In reply to" xml:space="preserve"> @@ -217,6 +217,10 @@ <target>%lld Nachrichten blockiert</target> <note>No comment provided by engineer.</note> </trans-unit> + <trans-unit id="%lld messages blocked by admin" xml:space="preserve"> + <source>%lld messages blocked by admin</source> + <note>No comment provided by engineer.</note> + </trans-unit> <trans-unit id="%lld messages marked deleted" xml:space="preserve"> <source>%lld messages marked deleted</source> <target>%lld Nachrichten als gelöscht markiert</target> @@ -372,11 +376,6 @@ <target>, </target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="- block a member to stop spam for all. - contact address is not shared." xml:space="preserve"> - <source>- block a member to stop spam for all. -- contact address is not shared.</source> - <note>No comment provided by engineer.</note> - </trans-unit> <trans-unit id="- connect to [directory service](simplex:/contact#/?v=1-4&smp=smp%3A%2F%2Fu2dS9sG8nMNURyZwqASV4yROM28Er0luVTx5X1CsMrU%3D%40smp4.simplex.im%2FeXSPwqTkKyDO3px4fLf1wx3MvPdjdLW3%23%2F%3Fv%3D1-2%26dh%3DMCowBQYDK2VuAyEAaiv6MkMH44L2TcYrt_CsX3ZvM11WgbMEUn0hkIKTOho%253D%26srv%3Do5vmywmrnaxalvz6wi3zicyftgio6psuvyniis6gco6bp6ekl4cqj4id.onion) (BETA)! - delivery receipts (up to 20 members). - faster and more stable." xml:space="preserve"> <source>- connect to [directory service](simplex:/contact#/?v=1-4&smp=smp%3A%2F%2Fu2dS9sG8nMNURyZwqASV4yROM28Er0luVTx5X1CsMrU%3D%40smp4.simplex.im%2FeXSPwqTkKyDO3px4fLf1wx3MvPdjdLW3%23%2F%3Fv%3D1-2%26dh%3DMCowBQYDK2VuAyEAaiv6MkMH44L2TcYrt_CsX3ZvM11WgbMEUn0hkIKTOho%253D%26srv%3Do5vmywmrnaxalvz6wi3zicyftgio6psuvyniis6gco6bp6ekl4cqj4id.onion) (BETA)! - delivery receipts (up to 20 members). @@ -408,9 +407,9 @@ <source>- voice messages up to 5 minutes. - custom time to disappear. - editing history.</source> - <target>- Bis zu 5 Minuten lange Sprachnachrichten. -- Zeitdauer für verschwindende Nachrichten anpassen. -- Nachrichten-Verlauf bearbeiten.</target> + <target>- Bis zu 5 Minuten lange Sprachnachrichten +- Zeitdauer für verschwindende Nachrichten anpassen +- Nachrichtenverlauf bearbeiten</target> <note>No comment provided by engineer.</note> </trans-unit> <trans-unit id="." xml:space="preserve"> @@ -922,6 +921,10 @@ <target>Blockieren</target> <note>No comment provided by engineer.</note> </trans-unit> + <trans-unit id="Block for all" xml:space="preserve"> + <source>Block for all</source> + <note>No comment provided by engineer.</note> + </trans-unit> <trans-unit id="Block group members" xml:space="preserve"> <source>Block group members</source> <target>Gruppenmitglieder blockieren</target> @@ -932,11 +935,19 @@ <target>Mitglied blockieren</target> <note>No comment provided by engineer.</note> </trans-unit> + <trans-unit id="Block member for all?" xml:space="preserve"> + <source>Block member for all?</source> + <note>No comment provided by engineer.</note> + </trans-unit> <trans-unit id="Block member?" xml:space="preserve"> <source>Block member?</source> <target>Mitglied blockieren?</target> <note>No comment provided by engineer.</note> </trans-unit> + <trans-unit id="Blocked by admin" xml:space="preserve"> + <source>Blocked by admin</source> + <note>No comment provided by engineer.</note> + </trans-unit> <trans-unit id="Both you and your contact can add message reactions." xml:space="preserve"> <source>Both you and your contact can add message reactions.</source> <target>Sowohl Sie, als auch Ihr Kontakt können Reaktionen auf Nachrichten geben.</target> @@ -987,11 +998,6 @@ <target>Kamera nicht verfügbar</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Can't delete user profile!" xml:space="preserve"> - <source>Can't delete user profile!</source> - <target>Das Benutzerprofil kann nicht gelöscht werden!</target> - <note>No comment provided by engineer.</note> - </trans-unit> <trans-unit id="Can't invite contact!" xml:space="preserve"> <source>Can't invite contact!</source> <target>Kontakt kann nicht eingeladen werden!</target> @@ -1951,6 +1957,7 @@ Das kann nicht rückgängig gemacht werden!</target> </trans-unit> <trans-unit id="Do not send history to new members." xml:space="preserve"> <source>Do not send history to new members.</source> + <target>Den Nachrichtenverlauf nicht an neue Mitglieder senden.</target> <note>No comment provided by engineer.</note> </trans-unit> <trans-unit id="Don't create address" xml:space="preserve"> @@ -2819,11 +2826,12 @@ Das kann nicht rückgängig gemacht werden!</target> </trans-unit> <trans-unit id="History" xml:space="preserve"> <source>History</source> - <target>Verlauf</target> + <target>Nachrichtenverlauf</target> <note>No comment provided by engineer.</note> </trans-unit> <trans-unit id="History is not sent to new members." xml:space="preserve"> <source>History is not sent to new members.</source> + <target>Der Nachrichtenverlauf wird nicht an neue Gruppenmitglieder gesendet.</target> <note>No comment provided by engineer.</note> </trans-unit> <trans-unit id="How SimpleX works" xml:space="preserve"> @@ -3034,6 +3042,7 @@ Das kann nicht rückgängig gemacht werden!</target> </trans-unit> <trans-unit id="Invalid display name!" xml:space="preserve"> <source>Invalid display name!</source> + <target>Ungültiger Anzeigename!</target> <note>No comment provided by engineer.</note> </trans-unit> <trans-unit id="Invalid link" xml:space="preserve"> @@ -3610,7 +3619,7 @@ Das ist Ihr Link für die Gruppe %@!</target> </trans-unit> <trans-unit id="No history" xml:space="preserve"> <source>No history</source> - <target>Kein Verlauf</target> + <target>Kein Nachrichtenverlauf</target> <note>No comment provided by engineer.</note> </trans-unit> <trans-unit id="No permission to record voice message" xml:space="preserve"> @@ -4390,10 +4399,6 @@ Fehler: %@</target> <target>SMP-Server</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Safer groups" xml:space="preserve"> - <source>Safer groups</source> - <note>No comment provided by engineer.</note> - </trans-unit> <trans-unit id="Save" xml:space="preserve"> <source>Save</source> <target>Speichern</target> @@ -4629,6 +4634,7 @@ Fehler: %@</target> </trans-unit> <trans-unit id="Send up to 100 last messages to new members." xml:space="preserve"> <source>Send up to 100 last messages to new members.</source> + <target>Bis zu 100 der letzten Nachrichten an neue Gruppenmitglieder senden.</target> <note>No comment provided by engineer.</note> </trans-unit> <trans-unit id="Sender cancelled file transfer." xml:space="preserve"> @@ -5213,16 +5219,6 @@ Dies kann passieren, wenn es einen Fehler gegeben hat oder die Verbindung kompro <target>Design</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="There should be at least one user profile." xml:space="preserve"> - <source>There should be at least one user profile.</source> - <target>Es muss mindestens ein Benutzer-Profil vorhanden sein.</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="There should be at least one visible user profile." xml:space="preserve"> - <source>There should be at least one visible user profile.</source> - <target>Es muss mindestens ein sichtbares Benutzer-Profil vorhanden sein.</target> - <note>No comment provided by engineer.</note> - </trans-unit> <trans-unit id="These settings are for your current profile **%@**." xml:space="preserve"> <source>These settings are for your current profile **%@**.</source> <target>Diese Einstellungen betreffen Ihr aktuelles Profil **%@**.</target> @@ -5255,6 +5251,7 @@ Dies kann passieren, wenn es einen Fehler gegeben hat oder die Verbindung kompro </trans-unit> <trans-unit id="This display name is invalid. Please choose another name." xml:space="preserve"> <source>This display name is invalid. Please choose another name.</source> + <target>Der Anzeigename ist ungültig. Bitte wählen Sie einen anderen Namen.</target> <note>No comment provided by engineer.</note> </trans-unit> <trans-unit id="This group has over %lld members, delivery receipts are not sent." xml:space="preserve"> @@ -5383,11 +5380,19 @@ Sie werden aufgefordert, die Authentifizierung abzuschließen, bevor diese Funkt <target>Freigeben</target> <note>No comment provided by engineer.</note> </trans-unit> + <trans-unit id="Unblock for all" xml:space="preserve"> + <source>Unblock for all</source> + <note>No comment provided by engineer.</note> + </trans-unit> <trans-unit id="Unblock member" xml:space="preserve"> <source>Unblock member</source> <target>Mitglied freigeben</target> <note>No comment provided by engineer.</note> </trans-unit> + <trans-unit id="Unblock member for all?" xml:space="preserve"> + <source>Unblock member for all?</source> + <note>No comment provided by engineer.</note> + </trans-unit> <trans-unit id="Unblock member?" xml:space="preserve"> <source>Unblock member?</source> <target>Mitglied freigeben?</target> @@ -5487,6 +5492,7 @@ Bitten Sie Ihren Kontakt darum einen weiteren Verbindungs-Link zu erzeugen, um s </trans-unit> <trans-unit id="Up to 100 last messages are sent to new members." xml:space="preserve"> <source>Up to 100 last messages are sent to new members.</source> + <target>Bis zu 100 der letzten Nachrichten werden an neue Mitglieder gesendet.</target> <note>No comment provided by engineer.</note> </trans-unit> <trans-unit id="Update" xml:space="preserve"> @@ -5661,6 +5667,7 @@ Bitten Sie Ihren Kontakt darum einen weiteren Verbindungs-Link zu erzeugen, um s </trans-unit> <trans-unit id="Visible history" xml:space="preserve"> <source>Visible history</source> + <target>Sichtbarer Nachrichtenverlauf</target> <note>chat feature</note> </trans-unit> <trans-unit id="Voice messages" xml:space="preserve"> @@ -6032,7 +6039,7 @@ Verbindungsanfrage wiederholen?</target> </trans-unit> <trans-unit id="You will stop receiving messages from this group. Chat history will be preserved." xml:space="preserve"> <source>You will stop receiving messages from this group. Chat history will be preserved.</source> - <target>Sie werden von dieser Gruppe keine Nachrichten mehr erhalten. Der Chatverlauf wird beibehalten.</target> + <target>Sie werden von dieser Gruppe keine Nachrichten mehr erhalten. Der Nachrichtenverlauf wird beibehalten.</target> <note>No comment provided by engineer.</note> </trans-unit> <trans-unit id="You won't lose your contacts if you later delete your address." xml:space="preserve"> @@ -6264,6 +6271,14 @@ SimpleX-Server können Ihr Profil nicht einsehen.</target> <target>blockiert</target> <note>No comment provided by engineer.</note> </trans-unit> + <trans-unit id="blocked %@" xml:space="preserve"> + <source>blocked %@</source> + <note>rcv group event chat item</note> + </trans-unit> + <trans-unit id="blocked by admin" xml:space="preserve"> + <source>blocked by admin</source> + <note>blocked chat item</note> + </trans-unit> <trans-unit id="bold" xml:space="preserve"> <source>bold</source> <target>fett</target> @@ -6845,6 +6860,10 @@ SimpleX-Server können Ihr Profil nicht einsehen.</target> <target>Dieser Kontakt</target> <note>notification title</note> </trans-unit> + <trans-unit id="unblocked %@" xml:space="preserve"> + <source>unblocked %@</source> + <note>rcv group event chat item</note> + </trans-unit> <trans-unit id="unknown" xml:space="preserve"> <source>unknown</source> <target>Unbekannt</target> @@ -6933,6 +6952,10 @@ SimpleX-Server können Ihr Profil nicht einsehen.</target> <target>Sie sind Beobachter</target> <note>No comment provided by engineer.</note> </trans-unit> + <trans-unit id="you blocked %@" xml:space="preserve"> + <source>you blocked %@</source> + <note>snd group event chat item</note> + </trans-unit> <trans-unit id="you changed address" xml:space="preserve"> <source>you changed address</source> <target>Die Empfängeradresse wurde gewechselt</target> @@ -6973,6 +6996,10 @@ SimpleX-Server können Ihr Profil nicht einsehen.</target> <target>Sie haben Inkognito einen Einmal-Link geteilt</target> <note>chat list item description</note> </trans-unit> + <trans-unit id="you unblocked %@" xml:space="preserve"> + <source>you unblocked %@</source> + <note>snd group event chat item</note> + </trans-unit> <trans-unit id="you: " xml:space="preserve"> <source>you: </source> <target>Sie: </target> diff --git a/apps/ios/SimpleX Localizations/en.xcloc/Localized Contents/en.xliff b/apps/ios/SimpleX Localizations/en.xcloc/Localized Contents/en.xliff index 64d76112e..b2b9cbce5 100644 --- a/apps/ios/SimpleX Localizations/en.xcloc/Localized Contents/en.xliff +++ b/apps/ios/SimpleX Localizations/en.xcloc/Localized Contents/en.xliff @@ -217,6 +217,11 @@ <target>%lld messages blocked</target> <note>No comment provided by engineer.</note> </trans-unit> + <trans-unit id="%lld messages blocked by admin" xml:space="preserve"> + <source>%lld messages blocked by admin</source> + <target>%lld messages blocked by admin</target> + <note>No comment provided by engineer.</note> + </trans-unit> <trans-unit id="%lld messages marked deleted" xml:space="preserve"> <source>%lld messages marked deleted</source> <target>%lld messages marked deleted</target> @@ -372,13 +377,6 @@ <target>, </target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="- block a member to stop spam for all. - contact address is not shared." xml:space="preserve"> - <source>- block a member to stop spam for all. -- contact address is not shared.</source> - <target>- block a member to stop spam for all. -- contact address is not shared.</target> - <note>No comment provided by engineer.</note> - </trans-unit> <trans-unit id="- connect to [directory service](simplex:/contact#/?v=1-4&smp=smp%3A%2F%2Fu2dS9sG8nMNURyZwqASV4yROM28Er0luVTx5X1CsMrU%3D%40smp4.simplex.im%2FeXSPwqTkKyDO3px4fLf1wx3MvPdjdLW3%23%2F%3Fv%3D1-2%26dh%3DMCowBQYDK2VuAyEAaiv6MkMH44L2TcYrt_CsX3ZvM11WgbMEUn0hkIKTOho%253D%26srv%3Do5vmywmrnaxalvz6wi3zicyftgio6psuvyniis6gco6bp6ekl4cqj4id.onion) (BETA)! - delivery receipts (up to 20 members). - faster and more stable." xml:space="preserve"> <source>- connect to [directory service](simplex:/contact#/?v=1-4&smp=smp%3A%2F%2Fu2dS9sG8nMNURyZwqASV4yROM28Er0luVTx5X1CsMrU%3D%40smp4.simplex.im%2FeXSPwqTkKyDO3px4fLf1wx3MvPdjdLW3%23%2F%3Fv%3D1-2%26dh%3DMCowBQYDK2VuAyEAaiv6MkMH44L2TcYrt_CsX3ZvM11WgbMEUn0hkIKTOho%253D%26srv%3Do5vmywmrnaxalvz6wi3zicyftgio6psuvyniis6gco6bp6ekl4cqj4id.onion) (BETA)! - delivery receipts (up to 20 members). @@ -925,6 +923,11 @@ <target>Block</target> <note>No comment provided by engineer.</note> </trans-unit> + <trans-unit id="Block for all" xml:space="preserve"> + <source>Block for all</source> + <target>Block for all</target> + <note>No comment provided by engineer.</note> + </trans-unit> <trans-unit id="Block group members" xml:space="preserve"> <source>Block group members</source> <target>Block group members</target> @@ -935,11 +938,21 @@ <target>Block member</target> <note>No comment provided by engineer.</note> </trans-unit> + <trans-unit id="Block member for all?" xml:space="preserve"> + <source>Block member for all?</source> + <target>Block member for all?</target> + <note>No comment provided by engineer.</note> + </trans-unit> <trans-unit id="Block member?" xml:space="preserve"> <source>Block member?</source> <target>Block member?</target> <note>No comment provided by engineer.</note> </trans-unit> + <trans-unit id="Blocked by admin" xml:space="preserve"> + <source>Blocked by admin</source> + <target>Blocked by admin</target> + <note>No comment provided by engineer.</note> + </trans-unit> <trans-unit id="Both you and your contact can add message reactions." xml:space="preserve"> <source>Both you and your contact can add message reactions.</source> <target>Both you and your contact can add message reactions.</target> @@ -990,11 +1003,6 @@ <target>Camera not available</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Can't delete user profile!" xml:space="preserve"> - <source>Can't delete user profile!</source> - <target>Can't delete user profile!</target> - <note>No comment provided by engineer.</note> - </trans-unit> <trans-unit id="Can't invite contact!" xml:space="preserve"> <source>Can't invite contact!</source> <target>Can't invite contact!</target> @@ -4406,11 +4414,6 @@ Error: %@</target> <target>SMP servers</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Safer groups" xml:space="preserve"> - <source>Safer groups</source> - <target>Safer groups</target> - <note>No comment provided by engineer.</note> - </trans-unit> <trans-unit id="Save" xml:space="preserve"> <source>Save</source> <target>Save</target> @@ -5233,16 +5236,6 @@ It can happen because of some bug or when the connection is compromised.</target <target>Theme</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="There should be at least one user profile." xml:space="preserve"> - <source>There should be at least one user profile.</source> - <target>There should be at least one user profile.</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="There should be at least one visible user profile." xml:space="preserve"> - <source>There should be at least one visible user profile.</source> - <target>There should be at least one visible user profile.</target> - <note>No comment provided by engineer.</note> - </trans-unit> <trans-unit id="These settings are for your current profile **%@**." xml:space="preserve"> <source>These settings are for your current profile **%@**.</source> <target>These settings are for your current profile **%@**.</target> @@ -5405,11 +5398,21 @@ You will be prompted to complete authentication before this feature is enabled.< <target>Unblock</target> <note>No comment provided by engineer.</note> </trans-unit> + <trans-unit id="Unblock for all" xml:space="preserve"> + <source>Unblock for all</source> + <target>Unblock for all</target> + <note>No comment provided by engineer.</note> + </trans-unit> <trans-unit id="Unblock member" xml:space="preserve"> <source>Unblock member</source> <target>Unblock member</target> <note>No comment provided by engineer.</note> </trans-unit> + <trans-unit id="Unblock member for all?" xml:space="preserve"> + <source>Unblock member for all?</source> + <target>Unblock member for all?</target> + <note>No comment provided by engineer.</note> + </trans-unit> <trans-unit id="Unblock member?" xml:space="preserve"> <source>Unblock member?</source> <target>Unblock member?</target> @@ -6290,6 +6293,16 @@ SimpleX servers cannot see your profile.</target> <target>blocked</target> <note>No comment provided by engineer.</note> </trans-unit> + <trans-unit id="blocked %@" xml:space="preserve"> + <source>blocked %@</source> + <target>blocked %@</target> + <note>rcv group event chat item</note> + </trans-unit> + <trans-unit id="blocked by admin" xml:space="preserve"> + <source>blocked by admin</source> + <target>blocked by admin</target> + <note>blocked chat item</note> + </trans-unit> <trans-unit id="bold" xml:space="preserve"> <source>bold</source> <target>bold</target> @@ -6877,6 +6890,11 @@ SimpleX servers cannot see your profile.</target> <target>this contact</target> <note>notification title</note> </trans-unit> + <trans-unit id="unblocked %@" xml:space="preserve"> + <source>unblocked %@</source> + <target>unblocked %@</target> + <note>rcv group event chat item</note> + </trans-unit> <trans-unit id="unknown" xml:space="preserve"> <source>unknown</source> <target>unknown</target> @@ -6967,6 +6985,11 @@ SimpleX servers cannot see your profile.</target> <target>you are observer</target> <note>No comment provided by engineer.</note> </trans-unit> + <trans-unit id="you blocked %@" xml:space="preserve"> + <source>you blocked %@</source> + <target>you blocked %@</target> + <note>snd group event chat item</note> + </trans-unit> <trans-unit id="you changed address" xml:space="preserve"> <source>you changed address</source> <target>you changed address</target> @@ -7007,6 +7030,11 @@ SimpleX servers cannot see your profile.</target> <target>you shared one-time link incognito</target> <note>chat list item description</note> </trans-unit> + <trans-unit id="you unblocked %@" xml:space="preserve"> + <source>you unblocked %@</source> + <target>you unblocked %@</target> + <note>snd group event chat item</note> + </trans-unit> <trans-unit id="you: " xml:space="preserve"> <source>you: </source> <target>you: </target> diff --git a/apps/ios/SimpleX Localizations/es.xcloc/Localized Contents/es.xliff b/apps/ios/SimpleX Localizations/es.xcloc/Localized Contents/es.xliff index d12da2e63..bed077aa4 100644 --- a/apps/ios/SimpleX Localizations/es.xcloc/Localized Contents/es.xliff +++ b/apps/ios/SimpleX Localizations/es.xcloc/Localized Contents/es.xliff @@ -217,6 +217,10 @@ <target>%lld mensaje(s) bloqueado(s)</target> <note>No comment provided by engineer.</note> </trans-unit> + <trans-unit id="%lld messages blocked by admin" xml:space="preserve"> + <source>%lld messages blocked by admin</source> + <note>No comment provided by engineer.</note> + </trans-unit> <trans-unit id="%lld messages marked deleted" xml:space="preserve"> <source>%lld messages marked deleted</source> <target>%lld mensaje(s) marcado(s) eliminado(s)</target> @@ -372,11 +376,6 @@ <target>, </target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="- block a member to stop spam for all. - contact address is not shared." xml:space="preserve"> - <source>- block a member to stop spam for all. -- contact address is not shared.</source> - <note>No comment provided by engineer.</note> - </trans-unit> <trans-unit id="- connect to [directory service](simplex:/contact#/?v=1-4&smp=smp%3A%2F%2Fu2dS9sG8nMNURyZwqASV4yROM28Er0luVTx5X1CsMrU%3D%40smp4.simplex.im%2FeXSPwqTkKyDO3px4fLf1wx3MvPdjdLW3%23%2F%3Fv%3D1-2%26dh%3DMCowBQYDK2VuAyEAaiv6MkMH44L2TcYrt_CsX3ZvM11WgbMEUn0hkIKTOho%253D%26srv%3Do5vmywmrnaxalvz6wi3zicyftgio6psuvyniis6gco6bp6ekl4cqj4id.onion) (BETA)! - delivery receipts (up to 20 members). - faster and more stable." xml:space="preserve"> <source>- connect to [directory service](simplex:/contact#/?v=1-4&smp=smp%3A%2F%2Fu2dS9sG8nMNURyZwqASV4yROM28Er0luVTx5X1CsMrU%3D%40smp4.simplex.im%2FeXSPwqTkKyDO3px4fLf1wx3MvPdjdLW3%23%2F%3Fv%3D1-2%26dh%3DMCowBQYDK2VuAyEAaiv6MkMH44L2TcYrt_CsX3ZvM11WgbMEUn0hkIKTOho%253D%26srv%3Do5vmywmrnaxalvz6wi3zicyftgio6psuvyniis6gco6bp6ekl4cqj4id.onion) (BETA)! - delivery receipts (up to 20 members). @@ -922,6 +921,10 @@ <target>Bloquear</target> <note>No comment provided by engineer.</note> </trans-unit> + <trans-unit id="Block for all" xml:space="preserve"> + <source>Block for all</source> + <note>No comment provided by engineer.</note> + </trans-unit> <trans-unit id="Block group members" xml:space="preserve"> <source>Block group members</source> <target>Bloquear miembros del grupo</target> @@ -932,11 +935,19 @@ <target>Bloquear miembro</target> <note>No comment provided by engineer.</note> </trans-unit> + <trans-unit id="Block member for all?" xml:space="preserve"> + <source>Block member for all?</source> + <note>No comment provided by engineer.</note> + </trans-unit> <trans-unit id="Block member?" xml:space="preserve"> <source>Block member?</source> <target>¿Bloquear miembro?</target> <note>No comment provided by engineer.</note> </trans-unit> + <trans-unit id="Blocked by admin" xml:space="preserve"> + <source>Blocked by admin</source> + <note>No comment provided by engineer.</note> + </trans-unit> <trans-unit id="Both you and your contact can add message reactions." xml:space="preserve"> <source>Both you and your contact can add message reactions.</source> <target>Tanto tú como tu contacto podéis añadir reacciones a los mensajes.</target> @@ -987,11 +998,6 @@ <target>Cámara no disponible</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Can't delete user profile!" xml:space="preserve"> - <source>Can't delete user profile!</source> - <target>¡No se puede eliminar el perfil!</target> - <note>No comment provided by engineer.</note> - </trans-unit> <trans-unit id="Can't invite contact!" xml:space="preserve"> <source>Can't invite contact!</source> <target>¡No se puede invitar el contacto!</target> @@ -4390,10 +4396,6 @@ Error: %@</target> <target>Servidores SMP</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Safer groups" xml:space="preserve"> - <source>Safer groups</source> - <note>No comment provided by engineer.</note> - </trans-unit> <trans-unit id="Save" xml:space="preserve"> <source>Save</source> <target>Guardar</target> @@ -5213,16 +5215,6 @@ Puede ocurrir por algún bug o cuando la conexión está comprometida.</target> <target>Tema</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="There should be at least one user profile." xml:space="preserve"> - <source>There should be at least one user profile.</source> - <target>Debe haber al menos un perfil.</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="There should be at least one visible user profile." xml:space="preserve"> - <source>There should be at least one visible user profile.</source> - <target>Debe haber al menos un perfil visible.</target> - <note>No comment provided by engineer.</note> - </trans-unit> <trans-unit id="These settings are for your current profile **%@**." xml:space="preserve"> <source>These settings are for your current profile **%@**.</source> <target>Esta configuración afecta a tu perfil actual **%@**.</target> @@ -5383,11 +5375,19 @@ Se te pedirá que completes la autenticación antes de activar esta función.</t <target>Desbloquear</target> <note>No comment provided by engineer.</note> </trans-unit> + <trans-unit id="Unblock for all" xml:space="preserve"> + <source>Unblock for all</source> + <note>No comment provided by engineer.</note> + </trans-unit> <trans-unit id="Unblock member" xml:space="preserve"> <source>Unblock member</source> <target>Desbloquear miembro</target> <note>No comment provided by engineer.</note> </trans-unit> + <trans-unit id="Unblock member for all?" xml:space="preserve"> + <source>Unblock member for all?</source> + <note>No comment provided by engineer.</note> + </trans-unit> <trans-unit id="Unblock member?" xml:space="preserve"> <source>Unblock member?</source> <target>¿Desbloquear miembro?</target> @@ -6265,6 +6265,14 @@ Los servidores de SimpleX no pueden ver tu perfil.</target> <target>bloqueado</target> <note>No comment provided by engineer.</note> </trans-unit> + <trans-unit id="blocked %@" xml:space="preserve"> + <source>blocked %@</source> + <note>rcv group event chat item</note> + </trans-unit> + <trans-unit id="blocked by admin" xml:space="preserve"> + <source>blocked by admin</source> + <note>blocked chat item</note> + </trans-unit> <trans-unit id="bold" xml:space="preserve"> <source>bold</source> <target>negrita</target> @@ -6846,6 +6854,10 @@ Los servidores de SimpleX no pueden ver tu perfil.</target> <target>este contacto</target> <note>notification title</note> </trans-unit> + <trans-unit id="unblocked %@" xml:space="preserve"> + <source>unblocked %@</source> + <note>rcv group event chat item</note> + </trans-unit> <trans-unit id="unknown" xml:space="preserve"> <source>unknown</source> <target>desconocido</target> @@ -6934,6 +6946,10 @@ Los servidores de SimpleX no pueden ver tu perfil.</target> <target>Tu rol es observador</target> <note>No comment provided by engineer.</note> </trans-unit> + <trans-unit id="you blocked %@" xml:space="preserve"> + <source>you blocked %@</source> + <note>snd group event chat item</note> + </trans-unit> <trans-unit id="you changed address" xml:space="preserve"> <source>you changed address</source> <target>has cambiado de servidor</target> @@ -6974,6 +6990,10 @@ Los servidores de SimpleX no pueden ver tu perfil.</target> <target>has compartido enlace de un solo uso en modo incógnito</target> <note>chat list item description</note> </trans-unit> + <trans-unit id="you unblocked %@" xml:space="preserve"> + <source>you unblocked %@</source> + <note>snd group event chat item</note> + </trans-unit> <trans-unit id="you: " xml:space="preserve"> <source>you: </source> <target>tú: </target> diff --git a/apps/ios/SimpleX Localizations/fi.xcloc/Localized Contents/fi.xliff b/apps/ios/SimpleX Localizations/fi.xcloc/Localized Contents/fi.xliff index ec729f4e2..91dd46fd0 100644 --- a/apps/ios/SimpleX Localizations/fi.xcloc/Localized Contents/fi.xliff +++ b/apps/ios/SimpleX Localizations/fi.xcloc/Localized Contents/fi.xliff @@ -212,6 +212,10 @@ <source>%lld messages blocked</source> <note>No comment provided by engineer.</note> </trans-unit> + <trans-unit id="%lld messages blocked by admin" xml:space="preserve"> + <source>%lld messages blocked by admin</source> + <note>No comment provided by engineer.</note> + </trans-unit> <trans-unit id="%lld messages marked deleted" xml:space="preserve"> <source>%lld messages marked deleted</source> <note>No comment provided by engineer.</note> @@ -361,11 +365,6 @@ <target>, </target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="- block a member to stop spam for all. - contact address is not shared." xml:space="preserve"> - <source>- block a member to stop spam for all. -- contact address is not shared.</source> - <note>No comment provided by engineer.</note> - </trans-unit> <trans-unit id="- connect to [directory service](simplex:/contact#/?v=1-4&smp=smp%3A%2F%2Fu2dS9sG8nMNURyZwqASV4yROM28Er0luVTx5X1CsMrU%3D%40smp4.simplex.im%2FeXSPwqTkKyDO3px4fLf1wx3MvPdjdLW3%23%2F%3Fv%3D1-2%26dh%3DMCowBQYDK2VuAyEAaiv6MkMH44L2TcYrt_CsX3ZvM11WgbMEUn0hkIKTOho%253D%26srv%3Do5vmywmrnaxalvz6wi3zicyftgio6psuvyniis6gco6bp6ekl4cqj4id.onion) (BETA)! - delivery receipts (up to 20 members). - faster and more stable." xml:space="preserve"> <source>- connect to [directory service](simplex:/contact#/?v=1-4&smp=smp%3A%2F%2Fu2dS9sG8nMNURyZwqASV4yROM28Er0luVTx5X1CsMrU%3D%40smp4.simplex.im%2FeXSPwqTkKyDO3px4fLf1wx3MvPdjdLW3%23%2F%3Fv%3D1-2%26dh%3DMCowBQYDK2VuAyEAaiv6MkMH44L2TcYrt_CsX3ZvM11WgbMEUn0hkIKTOho%253D%26srv%3Do5vmywmrnaxalvz6wi3zicyftgio6psuvyniis6gco6bp6ekl4cqj4id.onion) (BETA)! - delivery receipts (up to 20 members). @@ -896,6 +895,10 @@ <source>Block</source> <note>No comment provided by engineer.</note> </trans-unit> + <trans-unit id="Block for all" xml:space="preserve"> + <source>Block for all</source> + <note>No comment provided by engineer.</note> + </trans-unit> <trans-unit id="Block group members" xml:space="preserve"> <source>Block group members</source> <note>No comment provided by engineer.</note> @@ -904,10 +907,18 @@ <source>Block member</source> <note>No comment provided by engineer.</note> </trans-unit> + <trans-unit id="Block member for all?" xml:space="preserve"> + <source>Block member for all?</source> + <note>No comment provided by engineer.</note> + </trans-unit> <trans-unit id="Block member?" xml:space="preserve"> <source>Block member?</source> <note>No comment provided by engineer.</note> </trans-unit> + <trans-unit id="Blocked by admin" xml:space="preserve"> + <source>Blocked by admin</source> + <note>No comment provided by engineer.</note> + </trans-unit> <trans-unit id="Both you and your contact can add message reactions." xml:space="preserve"> <source>Both you and your contact can add message reactions.</source> <target>Sekä sinä että kontaktisi voivat käyttää viestireaktioita.</target> @@ -956,11 +967,6 @@ <source>Camera not available</source> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Can't delete user profile!" xml:space="preserve"> - <source>Can't delete user profile!</source> - <target>Käyttäjäprofiilia ei voi poistaa!</target> - <note>No comment provided by engineer.</note> - </trans-unit> <trans-unit id="Can't invite contact!" xml:space="preserve"> <source>Can't invite contact!</source> <target>Kontaktia ei voi kutsua!</target> @@ -4277,10 +4283,6 @@ Error: %@</source> <target>SMP-palvelimet</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Safer groups" xml:space="preserve"> - <source>Safer groups</source> - <note>No comment provided by engineer.</note> - </trans-unit> <trans-unit id="Save" xml:space="preserve"> <source>Save</source> <target>Tallenna</target> @@ -5088,16 +5090,6 @@ Tämä voi johtua jostain virheestä tai siitä, että yhteys on vaarantunut.</t <target>Teema</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="There should be at least one user profile." xml:space="preserve"> - <source>There should be at least one user profile.</source> - <target>Käyttäjäprofiileja tulee olla vähintään yksi.</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="There should be at least one visible user profile." xml:space="preserve"> - <source>There should be at least one visible user profile.</source> - <target>Näkyviä käyttäjäprofiileja tulee olla vähintään yksi.</target> - <note>No comment provided by engineer.</note> - </trans-unit> <trans-unit id="These settings are for your current profile **%@**." xml:space="preserve"> <source>These settings are for your current profile **%@**.</source> <target>Nämä asetukset koskevat nykyistä profiiliasi **%@**.</target> @@ -5252,10 +5244,18 @@ Sinua kehotetaan suorittamaan todennus loppuun, ennen kuin tämä ominaisuus ote <source>Unblock</source> <note>No comment provided by engineer.</note> </trans-unit> + <trans-unit id="Unblock for all" xml:space="preserve"> + <source>Unblock for all</source> + <note>No comment provided by engineer.</note> + </trans-unit> <trans-unit id="Unblock member" xml:space="preserve"> <source>Unblock member</source> <note>No comment provided by engineer.</note> </trans-unit> + <trans-unit id="Unblock member for all?" xml:space="preserve"> + <source>Unblock member for all?</source> + <note>No comment provided by engineer.</note> + </trans-unit> <trans-unit id="Unblock member?" xml:space="preserve"> <source>Unblock member?</source> <note>No comment provided by engineer.</note> @@ -6103,6 +6103,14 @@ SimpleX-palvelimet eivät näe profiiliasi.</target> <source>blocked</source> <note>No comment provided by engineer.</note> </trans-unit> + <trans-unit id="blocked %@" xml:space="preserve"> + <source>blocked %@</source> + <note>rcv group event chat item</note> + </trans-unit> + <trans-unit id="blocked by admin" xml:space="preserve"> + <source>blocked by admin</source> + <note>blocked chat item</note> + </trans-unit> <trans-unit id="bold" xml:space="preserve"> <source>bold</source> <target>lihavoitu</target> @@ -6681,6 +6689,10 @@ SimpleX-palvelimet eivät näe profiiliasi.</target> <target>tämä kontakti</target> <note>notification title</note> </trans-unit> + <trans-unit id="unblocked %@" xml:space="preserve"> + <source>unblocked %@</source> + <note>rcv group event chat item</note> + </trans-unit> <trans-unit id="unknown" xml:space="preserve"> <source>unknown</source> <target>tuntematon</target> @@ -6768,6 +6780,10 @@ SimpleX-palvelimet eivät näe profiiliasi.</target> <target>olet tarkkailija</target> <note>No comment provided by engineer.</note> </trans-unit> + <trans-unit id="you blocked %@" xml:space="preserve"> + <source>you blocked %@</source> + <note>snd group event chat item</note> + </trans-unit> <trans-unit id="you changed address" xml:space="preserve"> <source>you changed address</source> <target>muutit osoitetta</target> @@ -6808,6 +6824,10 @@ SimpleX-palvelimet eivät näe profiiliasi.</target> <target>jaoit kertalinkin incognito-tilassa</target> <note>chat list item description</note> </trans-unit> + <trans-unit id="you unblocked %@" xml:space="preserve"> + <source>you unblocked %@</source> + <note>snd group event chat item</note> + </trans-unit> <trans-unit id="you: " xml:space="preserve"> <source>you: </source> <target>sinä: </target> diff --git a/apps/ios/SimpleX Localizations/fr.xcloc/Localized Contents/fr.xliff b/apps/ios/SimpleX Localizations/fr.xcloc/Localized Contents/fr.xliff index 79c092ff4..12c10dd0c 100644 --- a/apps/ios/SimpleX Localizations/fr.xcloc/Localized Contents/fr.xliff +++ b/apps/ios/SimpleX Localizations/fr.xcloc/Localized Contents/fr.xliff @@ -217,6 +217,10 @@ <target>%lld messages bloqués</target> <note>No comment provided by engineer.</note> </trans-unit> + <trans-unit id="%lld messages blocked by admin" xml:space="preserve"> + <source>%lld messages blocked by admin</source> + <note>No comment provided by engineer.</note> + </trans-unit> <trans-unit id="%lld messages marked deleted" xml:space="preserve"> <source>%lld messages marked deleted</source> <target>%lld messages marqués comme supprimés</target> @@ -372,11 +376,6 @@ <target>, </target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="- block a member to stop spam for all. - contact address is not shared." xml:space="preserve"> - <source>- block a member to stop spam for all. -- contact address is not shared.</source> - <note>No comment provided by engineer.</note> - </trans-unit> <trans-unit id="- connect to [directory service](simplex:/contact#/?v=1-4&smp=smp%3A%2F%2Fu2dS9sG8nMNURyZwqASV4yROM28Er0luVTx5X1CsMrU%3D%40smp4.simplex.im%2FeXSPwqTkKyDO3px4fLf1wx3MvPdjdLW3%23%2F%3Fv%3D1-2%26dh%3DMCowBQYDK2VuAyEAaiv6MkMH44L2TcYrt_CsX3ZvM11WgbMEUn0hkIKTOho%253D%26srv%3Do5vmywmrnaxalvz6wi3zicyftgio6psuvyniis6gco6bp6ekl4cqj4id.onion) (BETA)! - delivery receipts (up to 20 members). - faster and more stable." xml:space="preserve"> <source>- connect to [directory service](simplex:/contact#/?v=1-4&smp=smp%3A%2F%2Fu2dS9sG8nMNURyZwqASV4yROM28Er0luVTx5X1CsMrU%3D%40smp4.simplex.im%2FeXSPwqTkKyDO3px4fLf1wx3MvPdjdLW3%23%2F%3Fv%3D1-2%26dh%3DMCowBQYDK2VuAyEAaiv6MkMH44L2TcYrt_CsX3ZvM11WgbMEUn0hkIKTOho%253D%26srv%3Do5vmywmrnaxalvz6wi3zicyftgio6psuvyniis6gco6bp6ekl4cqj4id.onion) (BETA)! - delivery receipts (up to 20 members). @@ -645,6 +644,7 @@ </trans-unit> <trans-unit id="All messages will be deleted - this cannot be undone!" xml:space="preserve"> <source>All messages will be deleted - this cannot be undone!</source> + <target>Tous les messages seront supprimés - il n'est pas possible de revenir en arrière !</target> <note>No comment provided by engineer.</note> </trans-unit> <trans-unit id="All messages will be deleted - this cannot be undone! The messages will be deleted ONLY for you." xml:space="preserve"> @@ -922,6 +922,10 @@ <target>Bloquer</target> <note>No comment provided by engineer.</note> </trans-unit> + <trans-unit id="Block for all" xml:space="preserve"> + <source>Block for all</source> + <note>No comment provided by engineer.</note> + </trans-unit> <trans-unit id="Block group members" xml:space="preserve"> <source>Block group members</source> <target>Bloquer des membres d'un groupe</target> @@ -932,11 +936,19 @@ <target>Bloquer ce membre</target> <note>No comment provided by engineer.</note> </trans-unit> + <trans-unit id="Block member for all?" xml:space="preserve"> + <source>Block member for all?</source> + <note>No comment provided by engineer.</note> + </trans-unit> <trans-unit id="Block member?" xml:space="preserve"> <source>Block member?</source> <target>Bloquer ce membre ?</target> <note>No comment provided by engineer.</note> </trans-unit> + <trans-unit id="Blocked by admin" xml:space="preserve"> + <source>Blocked by admin</source> + <note>No comment provided by engineer.</note> + </trans-unit> <trans-unit id="Both you and your contact can add message reactions." xml:space="preserve"> <source>Both you and your contact can add message reactions.</source> <target>Vous et votre contact pouvez ajouter des réactions aux messages.</target> @@ -987,11 +999,6 @@ <target>Caméra non disponible</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Can't delete user profile!" xml:space="preserve"> - <source>Can't delete user profile!</source> - <target>Impossible de supprimer le profil d'utilisateur !</target> - <note>No comment provided by engineer.</note> - </trans-unit> <trans-unit id="Can't invite contact!" xml:space="preserve"> <source>Can't invite contact!</source> <target>Impossible d'inviter le contact !</target> @@ -1155,6 +1162,7 @@ </trans-unit> <trans-unit id="Clear private notes?" xml:space="preserve"> <source>Clear private notes?</source> + <target>Effacer les notes privées ?</target> <note>No comment provided by engineer.</note> </trans-unit> <trans-unit id="Clear verification" xml:space="preserve"> @@ -1453,10 +1461,12 @@ Il s'agit de votre propre lien unique !</target> </trans-unit> <trans-unit id="Created at" xml:space="preserve"> <source>Created at</source> + <target>Créé à</target> <note>No comment provided by engineer.</note> </trans-unit> <trans-unit id="Created at: %@" xml:space="preserve"> <source>Created at: %@</source> + <target>Créé à : %@</target> <note>copied message info</note> </trans-unit> <trans-unit id="Created on %@" xml:space="preserve"> @@ -1951,6 +1961,7 @@ Cette opération ne peut être annulée !</target> </trans-unit> <trans-unit id="Do not send history to new members." xml:space="preserve"> <source>Do not send history to new members.</source> + <target>Ne pas envoyer d'historique aux nouveaux membres.</target> <note>No comment provided by engineer.</note> </trans-unit> <trans-unit id="Don't create address" xml:space="preserve"> @@ -2245,6 +2256,7 @@ Cette opération ne peut être annulée !</target> </trans-unit> <trans-unit id="Error creating message" xml:space="preserve"> <source>Error creating message</source> + <target>Erreur lors de la création du message</target> <note>No comment provided by engineer.</note> </trans-unit> <trans-unit id="Error creating profile!" xml:space="preserve"> @@ -2824,6 +2836,7 @@ Cette opération ne peut être annulée !</target> </trans-unit> <trans-unit id="History is not sent to new members." xml:space="preserve"> <source>History is not sent to new members.</source> + <target>L'historique n'est pas envoyé aux nouveaux membres.</target> <note>No comment provided by engineer.</note> </trans-unit> <trans-unit id="How SimpleX works" xml:space="preserve"> @@ -2918,6 +2931,7 @@ Cette opération ne peut être annulée !</target> </trans-unit> <trans-unit id="Improved message delivery" xml:space="preserve"> <source>Improved message delivery</source> + <target>Amélioration de la transmission des messages</target> <note>No comment provided by engineer.</note> </trans-unit> <trans-unit id="Improved privacy and security" xml:space="preserve"> @@ -3034,6 +3048,7 @@ Cette opération ne peut être annulée !</target> </trans-unit> <trans-unit id="Invalid display name!" xml:space="preserve"> <source>Invalid display name!</source> + <target>Nom d'affichage invalide !</target> <note>No comment provided by engineer.</note> </trans-unit> <trans-unit id="Invalid link" xml:space="preserve"> @@ -3144,6 +3159,7 @@ Cette opération ne peut être annulée !</target> </trans-unit> <trans-unit id="Join group conversations" xml:space="preserve"> <source>Join group conversations</source> + <target>Participez aux conversations de groupe</target> <note>No comment provided by engineer.</note> </trans-unit> <trans-unit id="Join group?" xml:space="preserve"> @@ -3854,6 +3870,7 @@ Voici votre lien pour le groupe %@ !</target> </trans-unit> <trans-unit id="Past member %@" xml:space="preserve"> <source>Past member %@</source> + <target>Ancien membre %@</target> <note>past/unknown group member</note> </trans-unit> <trans-unit id="Paste desktop address" xml:space="preserve"> @@ -3868,6 +3885,7 @@ Voici votre lien pour le groupe %@ !</target> </trans-unit> <trans-unit id="Paste link to connect!" xml:space="preserve"> <source>Paste link to connect!</source> + <target>Collez le lien pour vous connecter !</target> <note>No comment provided by engineer.</note> </trans-unit> <trans-unit id="Paste the link you received" xml:space="preserve"> @@ -4004,6 +4022,7 @@ Erreur : %@</target> </trans-unit> <trans-unit id="Private notes" xml:space="preserve"> <source>Private notes</source> + <target>Notes privées</target> <note>name of notes to self</note> </trans-unit> <trans-unit id="Profile and server connections" xml:space="preserve"> @@ -4188,6 +4207,7 @@ Erreur : %@</target> </trans-unit> <trans-unit id="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)." xml:space="preserve"> <source>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).</source> + <target>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).</target> <note>No comment provided by engineer.</note> </trans-unit> <trans-unit id="Recipients see updates as you type them." xml:space="preserve"> @@ -4390,10 +4410,6 @@ Erreur : %@</target> <target>Serveurs SMP</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Safer groups" xml:space="preserve"> - <source>Safer groups</source> - <note>No comment provided by engineer.</note> - </trans-unit> <trans-unit id="Save" xml:space="preserve"> <source>Save</source> <target>Enregistrer</target> @@ -4481,6 +4497,7 @@ Erreur : %@</target> </trans-unit> <trans-unit id="Saved message" xml:space="preserve"> <source>Saved message</source> + <target>Message enregistré</target> <note>message info title</note> </trans-unit> <trans-unit id="Scan QR code" xml:space="preserve"> @@ -4515,6 +4532,7 @@ Erreur : %@</target> </trans-unit> <trans-unit id="Search bar accepts invitation links." xml:space="preserve"> <source>Search bar accepts invitation links.</source> + <target>La barre de recherche accepte les liens d'invitation.</target> <note>No comment provided by engineer.</note> </trans-unit> <trans-unit id="Search or paste SimpleX link" xml:space="preserve"> @@ -4629,6 +4647,7 @@ Erreur : %@</target> </trans-unit> <trans-unit id="Send up to 100 last messages to new members." xml:space="preserve"> <source>Send up to 100 last messages to new members.</source> + <target>Envoi des 100 derniers messages aux nouveaux membres.</target> <note>No comment provided by engineer.</note> </trans-unit> <trans-unit id="Sender cancelled file transfer." xml:space="preserve"> @@ -5213,16 +5232,6 @@ Cela peut se produire en raison d'un bug ou lorsque la connexion est compromise. <target>Thème</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="There should be at least one user profile." xml:space="preserve"> - <source>There should be at least one user profile.</source> - <target>Il doit y avoir au moins un profil d'utilisateur.</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="There should be at least one visible user profile." xml:space="preserve"> - <source>There should be at least one visible user profile.</source> - <target>Il doit y avoir au moins un profil d'utilisateur visible.</target> - <note>No comment provided by engineer.</note> - </trans-unit> <trans-unit id="These settings are for your current profile **%@**." xml:space="preserve"> <source>These settings are for your current profile **%@**.</source> <target>Ces paramètres s'appliquent à votre profil actuel **%@**.</target> @@ -5255,6 +5264,7 @@ Cela peut se produire en raison d'un bug ou lorsque la connexion est compromise. </trans-unit> <trans-unit id="This display name is invalid. Please choose another name." xml:space="preserve"> <source>This display name is invalid. Please choose another name.</source> + <target>Ce nom d'affichage est invalide. Veuillez choisir un autre nom.</target> <note>No comment provided by engineer.</note> </trans-unit> <trans-unit id="This group has over %lld members, delivery receipts are not sent." xml:space="preserve"> @@ -5361,6 +5371,7 @@ Vous serez invité à confirmer l'authentification avant que cette fonction ne s </trans-unit> <trans-unit id="Turkish interface" xml:space="preserve"> <source>Turkish interface</source> + <target>Interface en turc</target> <note>No comment provided by engineer.</note> </trans-unit> <trans-unit id="Turn off" xml:space="preserve"> @@ -5383,11 +5394,19 @@ Vous serez invité à confirmer l'authentification avant que cette fonction ne s <target>Débloquer</target> <note>No comment provided by engineer.</note> </trans-unit> + <trans-unit id="Unblock for all" xml:space="preserve"> + <source>Unblock for all</source> + <note>No comment provided by engineer.</note> + </trans-unit> <trans-unit id="Unblock member" xml:space="preserve"> <source>Unblock member</source> <target>Débloquer ce membre</target> <note>No comment provided by engineer.</note> </trans-unit> + <trans-unit id="Unblock member for all?" xml:space="preserve"> + <source>Unblock member for all?</source> + <note>No comment provided by engineer.</note> + </trans-unit> <trans-unit id="Unblock member?" xml:space="preserve"> <source>Unblock member?</source> <target>Débloquer ce membre ?</target> @@ -5487,6 +5506,7 @@ Pour vous connecter, veuillez demander à votre contact de créer un autre lien </trans-unit> <trans-unit id="Up to 100 last messages are sent to new members." xml:space="preserve"> <source>Up to 100 last messages are sent to new members.</source> + <target>Les 100 derniers messages sont envoyés aux nouveaux membres.</target> <note>No comment provided by engineer.</note> </trans-unit> <trans-unit id="Update" xml:space="preserve"> @@ -5661,6 +5681,7 @@ Pour vous connecter, veuillez demander à votre contact de créer un autre lien </trans-unit> <trans-unit id="Visible history" xml:space="preserve"> <source>Visible history</source> + <target>Historique visible</target> <note>chat feature</note> </trans-unit> <trans-unit id="Voice messages" xml:space="preserve"> @@ -5750,6 +5771,7 @@ Pour vous connecter, veuillez demander à votre contact de créer un autre lien </trans-unit> <trans-unit id="With encrypted files and media." xml:space="preserve"> <source>With encrypted files and media.</source> + <target>Avec les fichiers et les médias chiffrés.</target> <note>No comment provided by engineer.</note> </trans-unit> <trans-unit id="With optional welcome message." xml:space="preserve"> @@ -5759,6 +5781,7 @@ Pour vous connecter, veuillez demander à votre contact de créer un autre lien </trans-unit> <trans-unit id="With reduced battery usage." xml:space="preserve"> <source>With reduced battery usage.</source> + <target>Consommation réduite de la batterie.</target> <note>No comment provided by engineer.</note> </trans-unit> <trans-unit id="Wrong database passphrase" xml:space="preserve"> @@ -6264,6 +6287,14 @@ Les serveurs SimpleX ne peuvent pas voir votre profil.</target> <target>blocké</target> <note>No comment provided by engineer.</note> </trans-unit> + <trans-unit id="blocked %@" xml:space="preserve"> + <source>blocked %@</source> + <note>rcv group event chat item</note> + </trans-unit> + <trans-unit id="blocked by admin" xml:space="preserve"> + <source>blocked by admin</source> + <note>blocked chat item</note> + </trans-unit> <trans-unit id="bold" xml:space="preserve"> <source>bold</source> <target>gras</target> @@ -6386,6 +6417,7 @@ Les serveurs SimpleX ne peuvent pas voir votre profil.</target> </trans-unit> <trans-unit id="contact %@ changed to %@" xml:space="preserve"> <source>contact %1$@ changed to %2$@</source> + <target>le contact %1$@ est devenu %2$@</target> <note>profile update event chat item</note> </trans-unit> <trans-unit id="contact has e2e encryption" xml:space="preserve"> @@ -6660,6 +6692,7 @@ Les serveurs SimpleX ne peuvent pas voir votre profil.</target> </trans-unit> <trans-unit id="member %@ changed to %@" xml:space="preserve"> <source>member %1$@ changed to %2$@</source> + <target>le membre %1$@ est devenu %2$@</target> <note>profile update event chat item</note> </trans-unit> <trans-unit id="member connected" xml:space="preserve"> @@ -6786,10 +6819,12 @@ Les serveurs SimpleX ne peuvent pas voir votre profil.</target> </trans-unit> <trans-unit id="removed contact address" xml:space="preserve"> <source>removed contact address</source> + <target>suppression de l'adresse de contact</target> <note>profile update event chat item</note> </trans-unit> <trans-unit id="removed profile picture" xml:space="preserve"> <source>removed profile picture</source> + <target>suppression de la photo de profil</target> <note>profile update event chat item</note> </trans-unit> <trans-unit id="removed you" xml:space="preserve"> @@ -6824,10 +6859,12 @@ Les serveurs SimpleX ne peuvent pas voir votre profil.</target> </trans-unit> <trans-unit id="set new contact address" xml:space="preserve"> <source>set new contact address</source> + <target>définir une nouvelle adresse de contact</target> <note>profile update event chat item</note> </trans-unit> <trans-unit id="set new profile picture" xml:space="preserve"> <source>set new profile picture</source> + <target>définir une nouvelle image de profil</target> <note>profile update event chat item</note> </trans-unit> <trans-unit id="starting…" xml:space="preserve"> @@ -6845,6 +6882,10 @@ Les serveurs SimpleX ne peuvent pas voir votre profil.</target> <target>ce contact</target> <note>notification title</note> </trans-unit> + <trans-unit id="unblocked %@" xml:space="preserve"> + <source>unblocked %@</source> + <note>rcv group event chat item</note> + </trans-unit> <trans-unit id="unknown" xml:space="preserve"> <source>unknown</source> <target>inconnu</target> @@ -6852,6 +6893,7 @@ Les serveurs SimpleX ne peuvent pas voir votre profil.</target> </trans-unit> <trans-unit id="unknown status" xml:space="preserve"> <source>unknown status</source> + <target>statut inconnu</target> <note>No comment provided by engineer.</note> </trans-unit> <trans-unit id="updated group profile" xml:space="preserve"> @@ -6861,6 +6903,7 @@ Les serveurs SimpleX ne peuvent pas voir votre profil.</target> </trans-unit> <trans-unit id="updated profile" xml:space="preserve"> <source>updated profile</source> + <target>profil mis à jour</target> <note>profile update event chat item</note> </trans-unit> <trans-unit id="v%@" xml:space="preserve"> @@ -6933,6 +6976,10 @@ Les serveurs SimpleX ne peuvent pas voir votre profil.</target> <target>vous êtes observateur</target> <note>No comment provided by engineer.</note> </trans-unit> + <trans-unit id="you blocked %@" xml:space="preserve"> + <source>you blocked %@</source> + <note>snd group event chat item</note> + </trans-unit> <trans-unit id="you changed address" xml:space="preserve"> <source>you changed address</source> <target>vous avez changé d'adresse</target> @@ -6973,6 +7020,10 @@ Les serveurs SimpleX ne peuvent pas voir votre profil.</target> <target>vous avez partagé un lien unique en incognito</target> <note>chat list item description</note> </trans-unit> + <trans-unit id="you unblocked %@" xml:space="preserve"> + <source>you unblocked %@</source> + <note>snd group event chat item</note> + </trans-unit> <trans-unit id="you: " xml:space="preserve"> <source>you: </source> <target>vous : </target> diff --git a/apps/ios/SimpleX Localizations/it.xcloc/Localized Contents/it.xliff b/apps/ios/SimpleX Localizations/it.xcloc/Localized Contents/it.xliff index f0563f106..007fe9f84 100644 --- a/apps/ios/SimpleX Localizations/it.xcloc/Localized Contents/it.xliff +++ b/apps/ios/SimpleX Localizations/it.xcloc/Localized Contents/it.xliff @@ -217,6 +217,10 @@ <target>%lld messaggi bloccati</target> <note>No comment provided by engineer.</note> </trans-unit> + <trans-unit id="%lld messages blocked by admin" xml:space="preserve"> + <source>%lld messages blocked by admin</source> + <note>No comment provided by engineer.</note> + </trans-unit> <trans-unit id="%lld messages marked deleted" xml:space="preserve"> <source>%lld messages marked deleted</source> <target>%lld messaggi contrassegnati eliminati</target> @@ -372,11 +376,6 @@ <target>, </target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="- block a member to stop spam for all. - contact address is not shared." xml:space="preserve"> - <source>- block a member to stop spam for all. -- contact address is not shared.</source> - <note>No comment provided by engineer.</note> - </trans-unit> <trans-unit id="- connect to [directory service](simplex:/contact#/?v=1-4&smp=smp%3A%2F%2Fu2dS9sG8nMNURyZwqASV4yROM28Er0luVTx5X1CsMrU%3D%40smp4.simplex.im%2FeXSPwqTkKyDO3px4fLf1wx3MvPdjdLW3%23%2F%3Fv%3D1-2%26dh%3DMCowBQYDK2VuAyEAaiv6MkMH44L2TcYrt_CsX3ZvM11WgbMEUn0hkIKTOho%253D%26srv%3Do5vmywmrnaxalvz6wi3zicyftgio6psuvyniis6gco6bp6ekl4cqj4id.onion) (BETA)! - delivery receipts (up to 20 members). - faster and more stable." xml:space="preserve"> <source>- connect to [directory service](simplex:/contact#/?v=1-4&smp=smp%3A%2F%2Fu2dS9sG8nMNURyZwqASV4yROM28Er0luVTx5X1CsMrU%3D%40smp4.simplex.im%2FeXSPwqTkKyDO3px4fLf1wx3MvPdjdLW3%23%2F%3Fv%3D1-2%26dh%3DMCowBQYDK2VuAyEAaiv6MkMH44L2TcYrt_CsX3ZvM11WgbMEUn0hkIKTOho%253D%26srv%3Do5vmywmrnaxalvz6wi3zicyftgio6psuvyniis6gco6bp6ekl4cqj4id.onion) (BETA)! - delivery receipts (up to 20 members). @@ -645,6 +644,7 @@ </trans-unit> <trans-unit id="All messages will be deleted - this cannot be undone!" xml:space="preserve"> <source>All messages will be deleted - this cannot be undone!</source> + <target>Tutti i messaggi verranno eliminati, non è reversibile!</target> <note>No comment provided by engineer.</note> </trans-unit> <trans-unit id="All messages will be deleted - this cannot be undone! The messages will be deleted ONLY for you." xml:space="preserve"> @@ -922,6 +922,10 @@ <target>Blocca</target> <note>No comment provided by engineer.</note> </trans-unit> + <trans-unit id="Block for all" xml:space="preserve"> + <source>Block for all</source> + <note>No comment provided by engineer.</note> + </trans-unit> <trans-unit id="Block group members" xml:space="preserve"> <source>Block group members</source> <target>Blocca i membri dei gruppi</target> @@ -932,11 +936,19 @@ <target>Blocca membro</target> <note>No comment provided by engineer.</note> </trans-unit> + <trans-unit id="Block member for all?" xml:space="preserve"> + <source>Block member for all?</source> + <note>No comment provided by engineer.</note> + </trans-unit> <trans-unit id="Block member?" xml:space="preserve"> <source>Block member?</source> <target>Bloccare il membro?</target> <note>No comment provided by engineer.</note> </trans-unit> + <trans-unit id="Blocked by admin" xml:space="preserve"> + <source>Blocked by admin</source> + <note>No comment provided by engineer.</note> + </trans-unit> <trans-unit id="Both you and your contact can add message reactions." xml:space="preserve"> <source>Both you and your contact can add message reactions.</source> <target>Sia tu che il tuo contatto potete aggiungere reazioni ai messaggi.</target> @@ -987,11 +999,6 @@ <target>Fotocamera non disponibile</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Can't delete user profile!" xml:space="preserve"> - <source>Can't delete user profile!</source> - <target>Impossibile eliminare il profilo utente!</target> - <note>No comment provided by engineer.</note> - </trans-unit> <trans-unit id="Can't invite contact!" xml:space="preserve"> <source>Can't invite contact!</source> <target>Impossibile invitare il contatto!</target> @@ -1155,6 +1162,7 @@ </trans-unit> <trans-unit id="Clear private notes?" xml:space="preserve"> <source>Clear private notes?</source> + <target>Svuotare le note private?</target> <note>No comment provided by engineer.</note> </trans-unit> <trans-unit id="Clear verification" xml:space="preserve"> @@ -1453,10 +1461,12 @@ Questo è il tuo link una tantum!</target> </trans-unit> <trans-unit id="Created at" xml:space="preserve"> <source>Created at</source> + <target>Creato il</target> <note>No comment provided by engineer.</note> </trans-unit> <trans-unit id="Created at: %@" xml:space="preserve"> <source>Created at: %@</source> + <target>Creato il: %@</target> <note>copied message info</note> </trans-unit> <trans-unit id="Created on %@" xml:space="preserve"> @@ -1951,6 +1961,7 @@ Non è reversibile!</target> </trans-unit> <trans-unit id="Do not send history to new members." xml:space="preserve"> <source>Do not send history to new members.</source> + <target>Non inviare la cronologia ai nuovi membri.</target> <note>No comment provided by engineer.</note> </trans-unit> <trans-unit id="Don't create address" xml:space="preserve"> @@ -2245,6 +2256,7 @@ Non è reversibile!</target> </trans-unit> <trans-unit id="Error creating message" xml:space="preserve"> <source>Error creating message</source> + <target>Errore di creazione del messaggio</target> <note>No comment provided by engineer.</note> </trans-unit> <trans-unit id="Error creating profile!" xml:space="preserve"> @@ -2824,6 +2836,7 @@ Non è reversibile!</target> </trans-unit> <trans-unit id="History is not sent to new members." xml:space="preserve"> <source>History is not sent to new members.</source> + <target>La cronologia non viene inviata ai nuovi membri.</target> <note>No comment provided by engineer.</note> </trans-unit> <trans-unit id="How SimpleX works" xml:space="preserve"> @@ -2918,6 +2931,7 @@ Non è reversibile!</target> </trans-unit> <trans-unit id="Improved message delivery" xml:space="preserve"> <source>Improved message delivery</source> + <target>Consegna dei messaggi migliorata</target> <note>No comment provided by engineer.</note> </trans-unit> <trans-unit id="Improved privacy and security" xml:space="preserve"> @@ -3034,6 +3048,7 @@ Non è reversibile!</target> </trans-unit> <trans-unit id="Invalid display name!" xml:space="preserve"> <source>Invalid display name!</source> + <target>Nome da mostrare non valido!</target> <note>No comment provided by engineer.</note> </trans-unit> <trans-unit id="Invalid link" xml:space="preserve"> @@ -3144,6 +3159,7 @@ Non è reversibile!</target> </trans-unit> <trans-unit id="Join group conversations" xml:space="preserve"> <source>Join group conversations</source> + <target>Entra in conversazioni di gruppo</target> <note>No comment provided by engineer.</note> </trans-unit> <trans-unit id="Join group?" xml:space="preserve"> @@ -3854,6 +3870,7 @@ Questo è il tuo link per il gruppo %@!</target> </trans-unit> <trans-unit id="Past member %@" xml:space="preserve"> <source>Past member %@</source> + <target>Membro passato %@</target> <note>past/unknown group member</note> </trans-unit> <trans-unit id="Paste desktop address" xml:space="preserve"> @@ -3868,6 +3885,7 @@ Questo è il tuo link per il gruppo %@!</target> </trans-unit> <trans-unit id="Paste link to connect!" xml:space="preserve"> <source>Paste link to connect!</source> + <target>Incolla un link per connettere!</target> <note>No comment provided by engineer.</note> </trans-unit> <trans-unit id="Paste the link you received" xml:space="preserve"> @@ -4004,6 +4022,7 @@ Errore: %@</target> </trans-unit> <trans-unit id="Private notes" xml:space="preserve"> <source>Private notes</source> + <target>Note private</target> <note>name of notes to self</note> </trans-unit> <trans-unit id="Profile and server connections" xml:space="preserve"> @@ -4188,6 +4207,7 @@ Errore: %@</target> </trans-unit> <trans-unit id="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)." xml:space="preserve"> <source>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).</source> + <target>Cronologia recente e [bot della directory](simplex:/contact#/?v=1-4&smp=smp%3A%2F%2Fu2dS9sG8nMNURyZwqASV4yROM28Er0luVTx5X1CsMrU%3D%40smp4.simplex.im%2FeXSPwqTkKyDO3px4fLf1wx3MvPdjdLW3%23%2F%3Fv%3D1-2%26dh%3DMCowBQYDK2VuAyEAaiv6MkMH44L2TcYrt_CsX3ZvM11WgbMEUn0hkIKTOho%253D%26srv%3Do5vmywmrnaxalvz6wi3zicyftgio6psuvyniis6gco6bp6ekl4cqj4id.onion) migliorato.</target> <note>No comment provided by engineer.</note> </trans-unit> <trans-unit id="Recipients see updates as you type them." xml:space="preserve"> @@ -4390,10 +4410,6 @@ Errore: %@</target> <target>Server SMP</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Safer groups" xml:space="preserve"> - <source>Safer groups</source> - <note>No comment provided by engineer.</note> - </trans-unit> <trans-unit id="Save" xml:space="preserve"> <source>Save</source> <target>Salva</target> @@ -4481,6 +4497,7 @@ Errore: %@</target> </trans-unit> <trans-unit id="Saved message" xml:space="preserve"> <source>Saved message</source> + <target>Messaggio salvato</target> <note>message info title</note> </trans-unit> <trans-unit id="Scan QR code" xml:space="preserve"> @@ -4515,6 +4532,7 @@ Errore: %@</target> </trans-unit> <trans-unit id="Search bar accepts invitation links." xml:space="preserve"> <source>Search bar accepts invitation links.</source> + <target>La barra di ricerca accetta i link di invito.</target> <note>No comment provided by engineer.</note> </trans-unit> <trans-unit id="Search or paste SimpleX link" xml:space="preserve"> @@ -4629,6 +4647,7 @@ Errore: %@</target> </trans-unit> <trans-unit id="Send up to 100 last messages to new members." xml:space="preserve"> <source>Send up to 100 last messages to new members.</source> + <target>Invia fino a 100 ultimi messaggi ai nuovi membri.</target> <note>No comment provided by engineer.</note> </trans-unit> <trans-unit id="Sender cancelled file transfer." xml:space="preserve"> @@ -5213,16 +5232,6 @@ Può accadere a causa di qualche bug o quando la connessione è compromessa.</ta <target>Tema</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="There should be at least one user profile." xml:space="preserve"> - <source>There should be at least one user profile.</source> - <target>Deve esserci almeno un profilo utente.</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="There should be at least one visible user profile." xml:space="preserve"> - <source>There should be at least one visible user profile.</source> - <target>Deve esserci almeno un profilo utente visibile.</target> - <note>No comment provided by engineer.</note> - </trans-unit> <trans-unit id="These settings are for your current profile **%@**." xml:space="preserve"> <source>These settings are for your current profile **%@**.</source> <target>Queste impostazioni sono per il tuo profilo attuale **%@**.</target> @@ -5255,6 +5264,7 @@ Può accadere a causa di qualche bug o quando la connessione è compromessa.</ta </trans-unit> <trans-unit id="This display name is invalid. Please choose another name." xml:space="preserve"> <source>This display name is invalid. Please choose another name.</source> + <target>Questo nome da mostrare non è valido. Scegline un altro.</target> <note>No comment provided by engineer.</note> </trans-unit> <trans-unit id="This group has over %lld members, delivery receipts are not sent." xml:space="preserve"> @@ -5361,6 +5371,7 @@ Ti verrà chiesto di completare l'autenticazione prima di attivare questa funzio </trans-unit> <trans-unit id="Turkish interface" xml:space="preserve"> <source>Turkish interface</source> + <target>Interfaccia in turco</target> <note>No comment provided by engineer.</note> </trans-unit> <trans-unit id="Turn off" xml:space="preserve"> @@ -5383,11 +5394,19 @@ Ti verrà chiesto di completare l'autenticazione prima di attivare questa funzio <target>Sblocca</target> <note>No comment provided by engineer.</note> </trans-unit> + <trans-unit id="Unblock for all" xml:space="preserve"> + <source>Unblock for all</source> + <note>No comment provided by engineer.</note> + </trans-unit> <trans-unit id="Unblock member" xml:space="preserve"> <source>Unblock member</source> <target>Sblocca membro</target> <note>No comment provided by engineer.</note> </trans-unit> + <trans-unit id="Unblock member for all?" xml:space="preserve"> + <source>Unblock member for all?</source> + <note>No comment provided by engineer.</note> + </trans-unit> <trans-unit id="Unblock member?" xml:space="preserve"> <source>Unblock member?</source> <target>Sbloccare il membro?</target> @@ -5487,6 +5506,7 @@ Per connetterti, chiedi al tuo contatto di creare un altro link di connessione e </trans-unit> <trans-unit id="Up to 100 last messages are sent to new members." xml:space="preserve"> <source>Up to 100 last messages are sent to new members.</source> + <target>Vengono inviati ai nuovi membri fino a 100 ultimi messaggi.</target> <note>No comment provided by engineer.</note> </trans-unit> <trans-unit id="Update" xml:space="preserve"> @@ -5661,6 +5681,7 @@ Per connetterti, chiedi al tuo contatto di creare un altro link di connessione e </trans-unit> <trans-unit id="Visible history" xml:space="preserve"> <source>Visible history</source> + <target>Cronologia visibile</target> <note>chat feature</note> </trans-unit> <trans-unit id="Voice messages" xml:space="preserve"> @@ -5750,6 +5771,7 @@ Per connetterti, chiedi al tuo contatto di creare un altro link di connessione e </trans-unit> <trans-unit id="With encrypted files and media." xml:space="preserve"> <source>With encrypted files and media.</source> + <target>Con file e multimediali criptati.</target> <note>No comment provided by engineer.</note> </trans-unit> <trans-unit id="With optional welcome message." xml:space="preserve"> @@ -5759,6 +5781,7 @@ Per connetterti, chiedi al tuo contatto di creare un altro link di connessione e </trans-unit> <trans-unit id="With reduced battery usage." xml:space="preserve"> <source>With reduced battery usage.</source> + <target>Con consumo di batteria ridotto.</target> <note>No comment provided by engineer.</note> </trans-unit> <trans-unit id="Wrong database passphrase" xml:space="preserve"> @@ -5930,7 +5953,7 @@ Ripetere la richiesta di ingresso?</target> </trans-unit> <trans-unit id="You control through which server(s) **to receive** the messages, your contacts – the servers you use to message them." xml:space="preserve"> <source>You control through which server(s) **to receive** the messages, your contacts – the servers you use to message them.</source> - <target>Puoi controllare attraverso quale/i server **ricevere** i messaggi, i tuoi contatti – i server che usi per inviare loro i messaggi.</target> + <target>Tu decidi attraverso quale/i server **ricevere** i messaggi, i tuoi contatti quali server usi per inviare loro i messaggi.</target> <note>No comment provided by engineer.</note> </trans-unit> <trans-unit id="You could not be verified; please try again." xml:space="preserve"> @@ -6264,6 +6287,14 @@ I server di SimpleX non possono vedere il tuo profilo.</target> <target>bloccato</target> <note>No comment provided by engineer.</note> </trans-unit> + <trans-unit id="blocked %@" xml:space="preserve"> + <source>blocked %@</source> + <note>rcv group event chat item</note> + </trans-unit> + <trans-unit id="blocked by admin" xml:space="preserve"> + <source>blocked by admin</source> + <note>blocked chat item</note> + </trans-unit> <trans-unit id="bold" xml:space="preserve"> <source>bold</source> <target>grassetto</target> @@ -6386,6 +6417,7 @@ I server di SimpleX non possono vedere il tuo profilo.</target> </trans-unit> <trans-unit id="contact %@ changed to %@" xml:space="preserve"> <source>contact %1$@ changed to %2$@</source> + <target>contatto %1$@ cambiato in %2$@</target> <note>profile update event chat item</note> </trans-unit> <trans-unit id="contact has e2e encryption" xml:space="preserve"> @@ -6660,6 +6692,7 @@ I server di SimpleX non possono vedere il tuo profilo.</target> </trans-unit> <trans-unit id="member %@ changed to %@" xml:space="preserve"> <source>member %1$@ changed to %2$@</source> + <target>membro %1$@ cambiato in %2$@</target> <note>profile update event chat item</note> </trans-unit> <trans-unit id="member connected" xml:space="preserve"> @@ -6786,10 +6819,12 @@ I server di SimpleX non possono vedere il tuo profilo.</target> </trans-unit> <trans-unit id="removed contact address" xml:space="preserve"> <source>removed contact address</source> + <target>indirizzo di contatto rimosso</target> <note>profile update event chat item</note> </trans-unit> <trans-unit id="removed profile picture" xml:space="preserve"> <source>removed profile picture</source> + <target>immagine del profilo rimossa</target> <note>profile update event chat item</note> </trans-unit> <trans-unit id="removed you" xml:space="preserve"> @@ -6824,10 +6859,12 @@ I server di SimpleX non possono vedere il tuo profilo.</target> </trans-unit> <trans-unit id="set new contact address" xml:space="preserve"> <source>set new contact address</source> + <target>impostato nuovo indirizzo di contatto</target> <note>profile update event chat item</note> </trans-unit> <trans-unit id="set new profile picture" xml:space="preserve"> <source>set new profile picture</source> + <target>impostata nuova immagine del profilo</target> <note>profile update event chat item</note> </trans-unit> <trans-unit id="starting…" xml:space="preserve"> @@ -6845,6 +6882,10 @@ I server di SimpleX non possono vedere il tuo profilo.</target> <target>questo contatto</target> <note>notification title</note> </trans-unit> + <trans-unit id="unblocked %@" xml:space="preserve"> + <source>unblocked %@</source> + <note>rcv group event chat item</note> + </trans-unit> <trans-unit id="unknown" xml:space="preserve"> <source>unknown</source> <target>sconosciuto</target> @@ -6852,6 +6893,7 @@ I server di SimpleX non possono vedere il tuo profilo.</target> </trans-unit> <trans-unit id="unknown status" xml:space="preserve"> <source>unknown status</source> + <target>stato sconosciuto</target> <note>No comment provided by engineer.</note> </trans-unit> <trans-unit id="updated group profile" xml:space="preserve"> @@ -6861,6 +6903,7 @@ I server di SimpleX non possono vedere il tuo profilo.</target> </trans-unit> <trans-unit id="updated profile" xml:space="preserve"> <source>updated profile</source> + <target>profilo aggiornato</target> <note>profile update event chat item</note> </trans-unit> <trans-unit id="v%@" xml:space="preserve"> @@ -6933,6 +6976,10 @@ I server di SimpleX non possono vedere il tuo profilo.</target> <target>sei un osservatore</target> <note>No comment provided by engineer.</note> </trans-unit> + <trans-unit id="you blocked %@" xml:space="preserve"> + <source>you blocked %@</source> + <note>snd group event chat item</note> + </trans-unit> <trans-unit id="you changed address" xml:space="preserve"> <source>you changed address</source> <target>hai cambiato indirizzo</target> @@ -6973,6 +7020,10 @@ I server di SimpleX non possono vedere il tuo profilo.</target> <target>hai condiviso un link incognito una tantum</target> <note>chat list item description</note> </trans-unit> + <trans-unit id="you unblocked %@" xml:space="preserve"> + <source>you unblocked %@</source> + <note>snd group event chat item</note> + </trans-unit> <trans-unit id="you: " xml:space="preserve"> <source>you: </source> <target>tu: </target> diff --git a/apps/ios/SimpleX Localizations/ja.xcloc/Localized Contents/ja.xliff b/apps/ios/SimpleX Localizations/ja.xcloc/Localized Contents/ja.xliff index 75e630a9e..c9f93b458 100644 --- a/apps/ios/SimpleX Localizations/ja.xcloc/Localized Contents/ja.xliff +++ b/apps/ios/SimpleX Localizations/ja.xcloc/Localized Contents/ja.xliff @@ -213,6 +213,10 @@ <source>%lld messages blocked</source> <note>No comment provided by engineer.</note> </trans-unit> + <trans-unit id="%lld messages blocked by admin" xml:space="preserve"> + <source>%lld messages blocked by admin</source> + <note>No comment provided by engineer.</note> + </trans-unit> <trans-unit id="%lld messages marked deleted" xml:space="preserve"> <source>%lld messages marked deleted</source> <target>%lld 件のメッセージが削除されました</target> @@ -364,11 +368,6 @@ <target>, </target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="- block a member to stop spam for all. - contact address is not shared." xml:space="preserve"> - <source>- block a member to stop spam for all. -- contact address is not shared.</source> - <note>No comment provided by engineer.</note> - </trans-unit> <trans-unit id="- connect to [directory service](simplex:/contact#/?v=1-4&smp=smp%3A%2F%2Fu2dS9sG8nMNURyZwqASV4yROM28Er0luVTx5X1CsMrU%3D%40smp4.simplex.im%2FeXSPwqTkKyDO3px4fLf1wx3MvPdjdLW3%23%2F%3Fv%3D1-2%26dh%3DMCowBQYDK2VuAyEAaiv6MkMH44L2TcYrt_CsX3ZvM11WgbMEUn0hkIKTOho%253D%26srv%3Do5vmywmrnaxalvz6wi3zicyftgio6psuvyniis6gco6bp6ekl4cqj4id.onion) (BETA)! - delivery receipts (up to 20 members). - faster and more stable." xml:space="preserve"> <source>- connect to [directory service](simplex:/contact#/?v=1-4&smp=smp%3A%2F%2Fu2dS9sG8nMNURyZwqASV4yROM28Er0luVTx5X1CsMrU%3D%40smp4.simplex.im%2FeXSPwqTkKyDO3px4fLf1wx3MvPdjdLW3%23%2F%3Fv%3D1-2%26dh%3DMCowBQYDK2VuAyEAaiv6MkMH44L2TcYrt_CsX3ZvM11WgbMEUn0hkIKTOho%253D%26srv%3Do5vmywmrnaxalvz6wi3zicyftgio6psuvyniis6gco6bp6ekl4cqj4id.onion) (BETA)! - delivery receipts (up to 20 members). @@ -900,6 +899,10 @@ <source>Block</source> <note>No comment provided by engineer.</note> </trans-unit> + <trans-unit id="Block for all" xml:space="preserve"> + <source>Block for all</source> + <note>No comment provided by engineer.</note> + </trans-unit> <trans-unit id="Block group members" xml:space="preserve"> <source>Block group members</source> <note>No comment provided by engineer.</note> @@ -908,10 +911,18 @@ <source>Block member</source> <note>No comment provided by engineer.</note> </trans-unit> + <trans-unit id="Block member for all?" xml:space="preserve"> + <source>Block member for all?</source> + <note>No comment provided by engineer.</note> + </trans-unit> <trans-unit id="Block member?" xml:space="preserve"> <source>Block member?</source> <note>No comment provided by engineer.</note> </trans-unit> + <trans-unit id="Blocked by admin" xml:space="preserve"> + <source>Blocked by admin</source> + <note>No comment provided by engineer.</note> + </trans-unit> <trans-unit id="Both you and your contact can add message reactions." xml:space="preserve"> <source>Both you and your contact can add message reactions.</source> <target>自分も相手もメッセージへのリアクションを追加できます。</target> @@ -961,11 +972,6 @@ <source>Camera not available</source> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Can't delete user profile!" xml:space="preserve"> - <source>Can't delete user profile!</source> - <target>ユーザープロフィールが削除できません!</target> - <note>No comment provided by engineer.</note> - </trans-unit> <trans-unit id="Can't invite contact!" xml:space="preserve"> <source>Can't invite contact!</source> <target>連絡先を招待できません!</target> @@ -4283,10 +4289,6 @@ Error: %@</source> <target>SMPサーバ</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Safer groups" xml:space="preserve"> - <source>Safer groups</source> - <note>No comment provided by engineer.</note> - </trans-unit> <trans-unit id="Save" xml:space="preserve"> <source>Save</source> <target>保存</target> @@ -5088,16 +5090,6 @@ It can happen because of some bug or when the connection is compromised.</source <target>テーマ</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="There should be at least one user profile." xml:space="preserve"> - <source>There should be at least one user profile.</source> - <target>少なくとも1つのユーザープロファイルが必要です。</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="There should be at least one visible user profile." xml:space="preserve"> - <source>There should be at least one visible user profile.</source> - <target>少なくとも1つのユーザープロフィールが表示されている必要があります。</target> - <note>No comment provided by engineer.</note> - </trans-unit> <trans-unit id="These settings are for your current profile **%@**." xml:space="preserve"> <source>These settings are for your current profile **%@**.</source> <target>これらの設定は現在のプロファイル **%@** 用です。</target> @@ -5251,10 +5243,18 @@ You will be prompted to complete authentication before this feature is enabled.< <source>Unblock</source> <note>No comment provided by engineer.</note> </trans-unit> + <trans-unit id="Unblock for all" xml:space="preserve"> + <source>Unblock for all</source> + <note>No comment provided by engineer.</note> + </trans-unit> <trans-unit id="Unblock member" xml:space="preserve"> <source>Unblock member</source> <note>No comment provided by engineer.</note> </trans-unit> + <trans-unit id="Unblock member for all?" xml:space="preserve"> + <source>Unblock member for all?</source> + <note>No comment provided by engineer.</note> + </trans-unit> <trans-unit id="Unblock member?" xml:space="preserve"> <source>Unblock member?</source> <note>No comment provided by engineer.</note> @@ -6102,6 +6102,14 @@ SimpleX サーバーはあなたのプロファイルを参照できません。 <source>blocked</source> <note>No comment provided by engineer.</note> </trans-unit> + <trans-unit id="blocked %@" xml:space="preserve"> + <source>blocked %@</source> + <note>rcv group event chat item</note> + </trans-unit> + <trans-unit id="blocked by admin" xml:space="preserve"> + <source>blocked by admin</source> + <note>blocked chat item</note> + </trans-unit> <trans-unit id="bold" xml:space="preserve"> <source>bold</source> <target>太文字</target> @@ -6680,6 +6688,10 @@ SimpleX サーバーはあなたのプロファイルを参照できません。 <target>この連絡先</target> <note>notification title</note> </trans-unit> + <trans-unit id="unblocked %@" xml:space="preserve"> + <source>unblocked %@</source> + <note>rcv group event chat item</note> + </trans-unit> <trans-unit id="unknown" xml:space="preserve"> <source>unknown</source> <target>不明</target> @@ -6767,6 +6779,10 @@ SimpleX サーバーはあなたのプロファイルを参照できません。 <target>あなたはオブザーバーです</target> <note>No comment provided by engineer.</note> </trans-unit> + <trans-unit id="you blocked %@" xml:space="preserve"> + <source>you blocked %@</source> + <note>snd group event chat item</note> + </trans-unit> <trans-unit id="you changed address" xml:space="preserve"> <source>you changed address</source> <target>アドレスを変えました</target> @@ -6807,6 +6823,10 @@ SimpleX サーバーはあなたのプロファイルを参照できません。 <target>シークレットモードで使い捨てリンクを送りました</target> <note>chat list item description</note> </trans-unit> + <trans-unit id="you unblocked %@" xml:space="preserve"> + <source>you unblocked %@</source> + <note>snd group event chat item</note> + </trans-unit> <trans-unit id="you: " xml:space="preserve"> <source>you: </source> <target>あなた: </target> diff --git a/apps/ios/SimpleX Localizations/nl.xcloc/Localized Contents/nl.xliff b/apps/ios/SimpleX Localizations/nl.xcloc/Localized Contents/nl.xliff index deb4aeac6..4e5f347a6 100644 --- a/apps/ios/SimpleX Localizations/nl.xcloc/Localized Contents/nl.xliff +++ b/apps/ios/SimpleX Localizations/nl.xcloc/Localized Contents/nl.xliff @@ -217,6 +217,10 @@ <target>%lld berichten geblokkeerd</target> <note>No comment provided by engineer.</note> </trans-unit> + <trans-unit id="%lld messages blocked by admin" xml:space="preserve"> + <source>%lld messages blocked by admin</source> + <note>No comment provided by engineer.</note> + </trans-unit> <trans-unit id="%lld messages marked deleted" xml:space="preserve"> <source>%lld messages marked deleted</source> <target>%lld berichten gemarkeerd als verwijderd</target> @@ -372,11 +376,6 @@ <target>, </target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="- block a member to stop spam for all. - contact address is not shared." xml:space="preserve"> - <source>- block a member to stop spam for all. -- contact address is not shared.</source> - <note>No comment provided by engineer.</note> - </trans-unit> <trans-unit id="- connect to [directory service](simplex:/contact#/?v=1-4&smp=smp%3A%2F%2Fu2dS9sG8nMNURyZwqASV4yROM28Er0luVTx5X1CsMrU%3D%40smp4.simplex.im%2FeXSPwqTkKyDO3px4fLf1wx3MvPdjdLW3%23%2F%3Fv%3D1-2%26dh%3DMCowBQYDK2VuAyEAaiv6MkMH44L2TcYrt_CsX3ZvM11WgbMEUn0hkIKTOho%253D%26srv%3Do5vmywmrnaxalvz6wi3zicyftgio6psuvyniis6gco6bp6ekl4cqj4id.onion) (BETA)! - delivery receipts (up to 20 members). - faster and more stable." xml:space="preserve"> <source>- connect to [directory service](simplex:/contact#/?v=1-4&smp=smp%3A%2F%2Fu2dS9sG8nMNURyZwqASV4yROM28Er0luVTx5X1CsMrU%3D%40smp4.simplex.im%2FeXSPwqTkKyDO3px4fLf1wx3MvPdjdLW3%23%2F%3Fv%3D1-2%26dh%3DMCowBQYDK2VuAyEAaiv6MkMH44L2TcYrt_CsX3ZvM11WgbMEUn0hkIKTOho%253D%26srv%3Do5vmywmrnaxalvz6wi3zicyftgio6psuvyniis6gco6bp6ekl4cqj4id.onion) (BETA)! - delivery receipts (up to 20 members). @@ -645,6 +644,7 @@ </trans-unit> <trans-unit id="All messages will be deleted - this cannot be undone!" xml:space="preserve"> <source>All messages will be deleted - this cannot be undone!</source> + <target>Alle berichten worden verwijderd. Dit kan niet ongedaan worden gemaakt!</target> <note>No comment provided by engineer.</note> </trans-unit> <trans-unit id="All messages will be deleted - this cannot be undone! The messages will be deleted ONLY for you." xml:space="preserve"> @@ -922,6 +922,10 @@ <target>Blokkeren</target> <note>No comment provided by engineer.</note> </trans-unit> + <trans-unit id="Block for all" xml:space="preserve"> + <source>Block for all</source> + <note>No comment provided by engineer.</note> + </trans-unit> <trans-unit id="Block group members" xml:space="preserve"> <source>Block group members</source> <target>Groepsleden blokkeren</target> @@ -932,11 +936,19 @@ <target>Lid blokkeren</target> <note>No comment provided by engineer.</note> </trans-unit> + <trans-unit id="Block member for all?" xml:space="preserve"> + <source>Block member for all?</source> + <note>No comment provided by engineer.</note> + </trans-unit> <trans-unit id="Block member?" xml:space="preserve"> <source>Block member?</source> <target>Lid blokkeren?</target> <note>No comment provided by engineer.</note> </trans-unit> + <trans-unit id="Blocked by admin" xml:space="preserve"> + <source>Blocked by admin</source> + <note>No comment provided by engineer.</note> + </trans-unit> <trans-unit id="Both you and your contact can add message reactions." xml:space="preserve"> <source>Both you and your contact can add message reactions.</source> <target>Zowel u als uw contact kunnen berichtreacties toevoegen.</target> @@ -987,11 +999,6 @@ <target>Camera niet beschikbaar</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Can't delete user profile!" xml:space="preserve"> - <source>Can't delete user profile!</source> - <target>Kan gebruikers profiel niet verwijderen!</target> - <note>No comment provided by engineer.</note> - </trans-unit> <trans-unit id="Can't invite contact!" xml:space="preserve"> <source>Can't invite contact!</source> <target>Kan contact niet uitnodigen!</target> @@ -1155,6 +1162,7 @@ </trans-unit> <trans-unit id="Clear private notes?" xml:space="preserve"> <source>Clear private notes?</source> + <target>Privénotities verwijderen?</target> <note>No comment provided by engineer.</note> </trans-unit> <trans-unit id="Clear verification" xml:space="preserve"> @@ -1453,10 +1461,12 @@ Dit is uw eigen eenmalige link!</target> </trans-unit> <trans-unit id="Created at" xml:space="preserve"> <source>Created at</source> + <target>Gemaakt op</target> <note>No comment provided by engineer.</note> </trans-unit> <trans-unit id="Created at: %@" xml:space="preserve"> <source>Created at: %@</source> + <target>Aangemaakt op: %@</target> <note>copied message info</note> </trans-unit> <trans-unit id="Created on %@" xml:space="preserve"> @@ -1951,6 +1961,7 @@ Dit kan niet ongedaan gemaakt worden!</target> </trans-unit> <trans-unit id="Do not send history to new members." xml:space="preserve"> <source>Do not send history to new members.</source> + <target>Stuur geen geschiedenis naar nieuwe leden.</target> <note>No comment provided by engineer.</note> </trans-unit> <trans-unit id="Don't create address" xml:space="preserve"> @@ -2245,6 +2256,7 @@ Dit kan niet ongedaan gemaakt worden!</target> </trans-unit> <trans-unit id="Error creating message" xml:space="preserve"> <source>Error creating message</source> + <target>Fout bij het maken van een bericht</target> <note>No comment provided by engineer.</note> </trans-unit> <trans-unit id="Error creating profile!" xml:space="preserve"> @@ -2824,6 +2836,7 @@ Dit kan niet ongedaan gemaakt worden!</target> </trans-unit> <trans-unit id="History is not sent to new members." xml:space="preserve"> <source>History is not sent to new members.</source> + <target>Geschiedenis wordt niet naar nieuwe leden gestuurd.</target> <note>No comment provided by engineer.</note> </trans-unit> <trans-unit id="How SimpleX works" xml:space="preserve"> @@ -2918,6 +2931,7 @@ Dit kan niet ongedaan gemaakt worden!</target> </trans-unit> <trans-unit id="Improved message delivery" xml:space="preserve"> <source>Improved message delivery</source> + <target>Verbeterde berichtbezorging</target> <note>No comment provided by engineer.</note> </trans-unit> <trans-unit id="Improved privacy and security" xml:space="preserve"> @@ -3034,6 +3048,7 @@ Dit kan niet ongedaan gemaakt worden!</target> </trans-unit> <trans-unit id="Invalid display name!" xml:space="preserve"> <source>Invalid display name!</source> + <target>Ongeldige weergavenaam!</target> <note>No comment provided by engineer.</note> </trans-unit> <trans-unit id="Invalid link" xml:space="preserve"> @@ -3144,6 +3159,7 @@ Dit kan niet ongedaan gemaakt worden!</target> </trans-unit> <trans-unit id="Join group conversations" xml:space="preserve"> <source>Join group conversations</source> + <target>Neem deel aan groep gesprekken</target> <note>No comment provided by engineer.</note> </trans-unit> <trans-unit id="Join group?" xml:space="preserve"> @@ -3854,6 +3870,7 @@ Dit is jouw link voor groep %@!</target> </trans-unit> <trans-unit id="Past member %@" xml:space="preserve"> <source>Past member %@</source> + <target>Voormalig lid %@</target> <note>past/unknown group member</note> </trans-unit> <trans-unit id="Paste desktop address" xml:space="preserve"> @@ -3868,6 +3885,7 @@ Dit is jouw link voor groep %@!</target> </trans-unit> <trans-unit id="Paste link to connect!" xml:space="preserve"> <source>Paste link to connect!</source> + <target>Plak link om te verbinden!</target> <note>No comment provided by engineer.</note> </trans-unit> <trans-unit id="Paste the link you received" xml:space="preserve"> @@ -4004,6 +4022,7 @@ Fout: %@</target> </trans-unit> <trans-unit id="Private notes" xml:space="preserve"> <source>Private notes</source> + <target>Privé notities</target> <note>name of notes to self</note> </trans-unit> <trans-unit id="Profile and server connections" xml:space="preserve"> @@ -4188,6 +4207,7 @@ Fout: %@</target> </trans-unit> <trans-unit id="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)." xml:space="preserve"> <source>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).</source> + <target>Recente geschiedenis en verbeterde [directory bot](simplex:/contact#/?v=1-4&smp=smp%3A%2F%2Fu2dS9sG8nMNURyZwqASV4yROM28Er0luVTx5X1CsMrU%3D%40smp4.simplex.im%2FeXSPwqTkKyDO3px4fLf1wx3MvPdjdLW3%23%2F%3Fv%3D1-2%26dh%3DMCowBQYDK2VuAyEAaiv6MkMH44L2TcYrt_CsX3ZvM11WgbMEUn0hkIKTOho%253D%26srv%3Do5vmywmrnaxalvz6wi3zicyftgio6psuvyniis6gco6bp6ekl4cqj4id.onion).</target> <note>No comment provided by engineer.</note> </trans-unit> <trans-unit id="Recipients see updates as you type them." xml:space="preserve"> @@ -4390,10 +4410,6 @@ Fout: %@</target> <target>SMP servers</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Safer groups" xml:space="preserve"> - <source>Safer groups</source> - <note>No comment provided by engineer.</note> - </trans-unit> <trans-unit id="Save" xml:space="preserve"> <source>Save</source> <target>Opslaan</target> @@ -4481,6 +4497,7 @@ Fout: %@</target> </trans-unit> <trans-unit id="Saved message" xml:space="preserve"> <source>Saved message</source> + <target>Opgeslagen bericht</target> <note>message info title</note> </trans-unit> <trans-unit id="Scan QR code" xml:space="preserve"> @@ -4515,6 +4532,7 @@ Fout: %@</target> </trans-unit> <trans-unit id="Search bar accepts invitation links." xml:space="preserve"> <source>Search bar accepts invitation links.</source> + <target>Zoekbalk accepteert uitnodigingslinks.</target> <note>No comment provided by engineer.</note> </trans-unit> <trans-unit id="Search or paste SimpleX link" xml:space="preserve"> @@ -4629,6 +4647,7 @@ Fout: %@</target> </trans-unit> <trans-unit id="Send up to 100 last messages to new members." xml:space="preserve"> <source>Send up to 100 last messages to new members.</source> + <target>Stuur tot 100 laatste berichten naar nieuwe leden.</target> <note>No comment provided by engineer.</note> </trans-unit> <trans-unit id="Sender cancelled file transfer." xml:space="preserve"> @@ -5213,16 +5232,6 @@ Het kan gebeuren vanwege een bug of wanneer de verbinding is aangetast.</target> <target>Thema</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="There should be at least one user profile." xml:space="preserve"> - <source>There should be at least one user profile.</source> - <target>Er moet ten minste één gebruikers profiel zijn.</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="There should be at least one visible user profile." xml:space="preserve"> - <source>There should be at least one visible user profile.</source> - <target>Er moet ten minste één zichtbaar gebruikers profiel zijn.</target> - <note>No comment provided by engineer.</note> - </trans-unit> <trans-unit id="These settings are for your current profile **%@**." xml:space="preserve"> <source>These settings are for your current profile **%@**.</source> <target>Deze instellingen zijn voor uw huidige profiel **%@**.</target> @@ -5255,6 +5264,7 @@ Het kan gebeuren vanwege een bug of wanneer de verbinding is aangetast.</target> </trans-unit> <trans-unit id="This display name is invalid. Please choose another name." xml:space="preserve"> <source>This display name is invalid. Please choose another name.</source> + <target>Deze weergavenaam is ongeldig. Kies een andere naam.</target> <note>No comment provided by engineer.</note> </trans-unit> <trans-unit id="This group has over %lld members, delivery receipts are not sent." xml:space="preserve"> @@ -5361,6 +5371,7 @@ U wordt gevraagd de authenticatie te voltooien voordat deze functie wordt ingesc </trans-unit> <trans-unit id="Turkish interface" xml:space="preserve"> <source>Turkish interface</source> + <target>Turkse interface</target> <note>No comment provided by engineer.</note> </trans-unit> <trans-unit id="Turn off" xml:space="preserve"> @@ -5383,11 +5394,19 @@ U wordt gevraagd de authenticatie te voltooien voordat deze functie wordt ingesc <target>Deblokkeren</target> <note>No comment provided by engineer.</note> </trans-unit> + <trans-unit id="Unblock for all" xml:space="preserve"> + <source>Unblock for all</source> + <note>No comment provided by engineer.</note> + </trans-unit> <trans-unit id="Unblock member" xml:space="preserve"> <source>Unblock member</source> <target>Lid deblokkeren</target> <note>No comment provided by engineer.</note> </trans-unit> + <trans-unit id="Unblock member for all?" xml:space="preserve"> + <source>Unblock member for all?</source> + <note>No comment provided by engineer.</note> + </trans-unit> <trans-unit id="Unblock member?" xml:space="preserve"> <source>Unblock member?</source> <target>Lid deblokkeren?</target> @@ -5487,6 +5506,7 @@ Om verbinding te maken, vraagt u uw contact om een andere verbinding link te mak </trans-unit> <trans-unit id="Up to 100 last messages are sent to new members." xml:space="preserve"> <source>Up to 100 last messages are sent to new members.</source> + <target>Er worden maximaal 100 laatste berichten naar nieuwe leden verzonden.</target> <note>No comment provided by engineer.</note> </trans-unit> <trans-unit id="Update" xml:space="preserve"> @@ -5661,6 +5681,7 @@ Om verbinding te maken, vraagt u uw contact om een andere verbinding link te mak </trans-unit> <trans-unit id="Visible history" xml:space="preserve"> <source>Visible history</source> + <target>Zichtbare geschiedenis</target> <note>chat feature</note> </trans-unit> <trans-unit id="Voice messages" xml:space="preserve"> @@ -5750,6 +5771,7 @@ Om verbinding te maken, vraagt u uw contact om een andere verbinding link te mak </trans-unit> <trans-unit id="With encrypted files and media." xml:space="preserve"> <source>With encrypted files and media.</source> + <target>‐Met versleutelde bestanden en media.</target> <note>No comment provided by engineer.</note> </trans-unit> <trans-unit id="With optional welcome message." xml:space="preserve"> @@ -5759,6 +5781,7 @@ Om verbinding te maken, vraagt u uw contact om een andere verbinding link te mak </trans-unit> <trans-unit id="With reduced battery usage." xml:space="preserve"> <source>With reduced battery usage.</source> + <target>Met verminderd batterijgebruik.</target> <note>No comment provided by engineer.</note> </trans-unit> <trans-unit id="Wrong database passphrase" xml:space="preserve"> @@ -6264,6 +6287,14 @@ SimpleX servers kunnen uw profiel niet zien.</target> <target>geblokkeerd</target> <note>No comment provided by engineer.</note> </trans-unit> + <trans-unit id="blocked %@" xml:space="preserve"> + <source>blocked %@</source> + <note>rcv group event chat item</note> + </trans-unit> + <trans-unit id="blocked by admin" xml:space="preserve"> + <source>blocked by admin</source> + <note>blocked chat item</note> + </trans-unit> <trans-unit id="bold" xml:space="preserve"> <source>bold</source> <target>vetgedrukt</target> @@ -6386,6 +6417,7 @@ SimpleX servers kunnen uw profiel niet zien.</target> </trans-unit> <trans-unit id="contact %@ changed to %@" xml:space="preserve"> <source>contact %1$@ changed to %2$@</source> + <target>contactpersoon %1$@ gewijzigd in %2$@</target> <note>profile update event chat item</note> </trans-unit> <trans-unit id="contact has e2e encryption" xml:space="preserve"> @@ -6660,6 +6692,7 @@ SimpleX servers kunnen uw profiel niet zien.</target> </trans-unit> <trans-unit id="member %@ changed to %@" xml:space="preserve"> <source>member %1$@ changed to %2$@</source> + <target>lid %1$@ gewijzigd in %2$@</target> <note>profile update event chat item</note> </trans-unit> <trans-unit id="member connected" xml:space="preserve"> @@ -6786,10 +6819,12 @@ SimpleX servers kunnen uw profiel niet zien.</target> </trans-unit> <trans-unit id="removed contact address" xml:space="preserve"> <source>removed contact address</source> + <target>contactadres verwijderd</target> <note>profile update event chat item</note> </trans-unit> <trans-unit id="removed profile picture" xml:space="preserve"> <source>removed profile picture</source> + <target>profielfoto verwijderd</target> <note>profile update event chat item</note> </trans-unit> <trans-unit id="removed you" xml:space="preserve"> @@ -6824,10 +6859,12 @@ SimpleX servers kunnen uw profiel niet zien.</target> </trans-unit> <trans-unit id="set new contact address" xml:space="preserve"> <source>set new contact address</source> + <target>nieuw contactadres instellen</target> <note>profile update event chat item</note> </trans-unit> <trans-unit id="set new profile picture" xml:space="preserve"> <source>set new profile picture</source> + <target>nieuwe profielfoto instellen</target> <note>profile update event chat item</note> </trans-unit> <trans-unit id="starting…" xml:space="preserve"> @@ -6845,6 +6882,10 @@ SimpleX servers kunnen uw profiel niet zien.</target> <target>dit contact</target> <note>notification title</note> </trans-unit> + <trans-unit id="unblocked %@" xml:space="preserve"> + <source>unblocked %@</source> + <note>rcv group event chat item</note> + </trans-unit> <trans-unit id="unknown" xml:space="preserve"> <source>unknown</source> <target>onbekend</target> @@ -6852,6 +6893,7 @@ SimpleX servers kunnen uw profiel niet zien.</target> </trans-unit> <trans-unit id="unknown status" xml:space="preserve"> <source>unknown status</source> + <target>onbekende status</target> <note>No comment provided by engineer.</note> </trans-unit> <trans-unit id="updated group profile" xml:space="preserve"> @@ -6861,6 +6903,7 @@ SimpleX servers kunnen uw profiel niet zien.</target> </trans-unit> <trans-unit id="updated profile" xml:space="preserve"> <source>updated profile</source> + <target>bijgewerkt profiel</target> <note>profile update event chat item</note> </trans-unit> <trans-unit id="v%@" xml:space="preserve"> @@ -6933,6 +6976,10 @@ SimpleX servers kunnen uw profiel niet zien.</target> <target>jij bent waarnemer</target> <note>No comment provided by engineer.</note> </trans-unit> + <trans-unit id="you blocked %@" xml:space="preserve"> + <source>you blocked %@</source> + <note>snd group event chat item</note> + </trans-unit> <trans-unit id="you changed address" xml:space="preserve"> <source>you changed address</source> <target>je bent van adres veranderd</target> @@ -6973,6 +7020,10 @@ SimpleX servers kunnen uw profiel niet zien.</target> <target>je hebt een eenmalige link incognito gedeeld</target> <note>chat list item description</note> </trans-unit> + <trans-unit id="you unblocked %@" xml:space="preserve"> + <source>you unblocked %@</source> + <note>snd group event chat item</note> + </trans-unit> <trans-unit id="you: " xml:space="preserve"> <source>you: </source> <target>Jij: </target> diff --git a/apps/ios/SimpleX Localizations/pl.xcloc/Localized Contents/pl.xliff b/apps/ios/SimpleX Localizations/pl.xcloc/Localized Contents/pl.xliff index 1be09f1ae..349f40d78 100644 --- a/apps/ios/SimpleX Localizations/pl.xcloc/Localized Contents/pl.xliff +++ b/apps/ios/SimpleX Localizations/pl.xcloc/Localized Contents/pl.xliff @@ -217,6 +217,10 @@ <target>%lld wiadomości zablokowanych</target> <note>No comment provided by engineer.</note> </trans-unit> + <trans-unit id="%lld messages blocked by admin" xml:space="preserve"> + <source>%lld messages blocked by admin</source> + <note>No comment provided by engineer.</note> + </trans-unit> <trans-unit id="%lld messages marked deleted" xml:space="preserve"> <source>%lld messages marked deleted</source> <target>%lld wiadomości oznaczonych do usunięcia</target> @@ -372,11 +376,6 @@ <target>, </target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="- block a member to stop spam for all. - contact address is not shared." xml:space="preserve"> - <source>- block a member to stop spam for all. -- contact address is not shared.</source> - <note>No comment provided by engineer.</note> - </trans-unit> <trans-unit id="- connect to [directory service](simplex:/contact#/?v=1-4&smp=smp%3A%2F%2Fu2dS9sG8nMNURyZwqASV4yROM28Er0luVTx5X1CsMrU%3D%40smp4.simplex.im%2FeXSPwqTkKyDO3px4fLf1wx3MvPdjdLW3%23%2F%3Fv%3D1-2%26dh%3DMCowBQYDK2VuAyEAaiv6MkMH44L2TcYrt_CsX3ZvM11WgbMEUn0hkIKTOho%253D%26srv%3Do5vmywmrnaxalvz6wi3zicyftgio6psuvyniis6gco6bp6ekl4cqj4id.onion) (BETA)! - delivery receipts (up to 20 members). - faster and more stable." xml:space="preserve"> <source>- connect to [directory service](simplex:/contact#/?v=1-4&smp=smp%3A%2F%2Fu2dS9sG8nMNURyZwqASV4yROM28Er0luVTx5X1CsMrU%3D%40smp4.simplex.im%2FeXSPwqTkKyDO3px4fLf1wx3MvPdjdLW3%23%2F%3Fv%3D1-2%26dh%3DMCowBQYDK2VuAyEAaiv6MkMH44L2TcYrt_CsX3ZvM11WgbMEUn0hkIKTOho%253D%26srv%3Do5vmywmrnaxalvz6wi3zicyftgio6psuvyniis6gco6bp6ekl4cqj4id.onion) (BETA)! - delivery receipts (up to 20 members). @@ -922,6 +921,10 @@ <target>Zablokuj</target> <note>No comment provided by engineer.</note> </trans-unit> + <trans-unit id="Block for all" xml:space="preserve"> + <source>Block for all</source> + <note>No comment provided by engineer.</note> + </trans-unit> <trans-unit id="Block group members" xml:space="preserve"> <source>Block group members</source> <target>Blokuj członków grupy</target> @@ -932,11 +935,19 @@ <target>Zablokuj członka</target> <note>No comment provided by engineer.</note> </trans-unit> + <trans-unit id="Block member for all?" xml:space="preserve"> + <source>Block member for all?</source> + <note>No comment provided by engineer.</note> + </trans-unit> <trans-unit id="Block member?" xml:space="preserve"> <source>Block member?</source> <target>Zablokować członka?</target> <note>No comment provided by engineer.</note> </trans-unit> + <trans-unit id="Blocked by admin" xml:space="preserve"> + <source>Blocked by admin</source> + <note>No comment provided by engineer.</note> + </trans-unit> <trans-unit id="Both you and your contact can add message reactions." xml:space="preserve"> <source>Both you and your contact can add message reactions.</source> <target>Zarówno Ty, jak i Twój kontakt możecie dodawać reakcje wiadomości.</target> @@ -987,11 +998,6 @@ <target>Kamera nie dostępna</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Can't delete user profile!" xml:space="preserve"> - <source>Can't delete user profile!</source> - <target>Nie można usunąć profilu użytkownika!</target> - <note>No comment provided by engineer.</note> - </trans-unit> <trans-unit id="Can't invite contact!" xml:space="preserve"> <source>Can't invite contact!</source> <target>Nie można zaprosić kontaktu!</target> @@ -4390,10 +4396,6 @@ Błąd: %@</target> <target>Serwery SMP</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Safer groups" xml:space="preserve"> - <source>Safer groups</source> - <note>No comment provided by engineer.</note> - </trans-unit> <trans-unit id="Save" xml:space="preserve"> <source>Save</source> <target>Zapisz</target> @@ -5213,16 +5215,6 @@ Może się to zdarzyć z powodu jakiegoś błędu lub gdy połączenie jest skom <target>Motyw</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="There should be at least one user profile." xml:space="preserve"> - <source>There should be at least one user profile.</source> - <target>Powinien istnieć co najmniej jeden profil użytkownika.</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="There should be at least one visible user profile." xml:space="preserve"> - <source>There should be at least one visible user profile.</source> - <target>Powinien istnieć co najmniej jeden widoczny profil użytkownika.</target> - <note>No comment provided by engineer.</note> - </trans-unit> <trans-unit id="These settings are for your current profile **%@**." xml:space="preserve"> <source>These settings are for your current profile **%@**.</source> <target>Te ustawienia dotyczą Twojego bieżącego profilu **%@**.</target> @@ -5383,11 +5375,19 @@ Przed włączeniem tej funkcji zostanie wyświetlony monit uwierzytelniania.</ta <target>Odblokuj</target> <note>No comment provided by engineer.</note> </trans-unit> + <trans-unit id="Unblock for all" xml:space="preserve"> + <source>Unblock for all</source> + <note>No comment provided by engineer.</note> + </trans-unit> <trans-unit id="Unblock member" xml:space="preserve"> <source>Unblock member</source> <target>Odblokuj członka</target> <note>No comment provided by engineer.</note> </trans-unit> + <trans-unit id="Unblock member for all?" xml:space="preserve"> + <source>Unblock member for all?</source> + <note>No comment provided by engineer.</note> + </trans-unit> <trans-unit id="Unblock member?" xml:space="preserve"> <source>Unblock member?</source> <target>Odblokować członka?</target> @@ -6264,6 +6264,14 @@ Serwery SimpleX nie mogą zobaczyć Twojego profilu.</target> <target>zablokowany</target> <note>No comment provided by engineer.</note> </trans-unit> + <trans-unit id="blocked %@" xml:space="preserve"> + <source>blocked %@</source> + <note>rcv group event chat item</note> + </trans-unit> + <trans-unit id="blocked by admin" xml:space="preserve"> + <source>blocked by admin</source> + <note>blocked chat item</note> + </trans-unit> <trans-unit id="bold" xml:space="preserve"> <source>bold</source> <target>pogrubiona</target> @@ -6845,6 +6853,10 @@ Serwery SimpleX nie mogą zobaczyć Twojego profilu.</target> <target>ten kontakt</target> <note>notification title</note> </trans-unit> + <trans-unit id="unblocked %@" xml:space="preserve"> + <source>unblocked %@</source> + <note>rcv group event chat item</note> + </trans-unit> <trans-unit id="unknown" xml:space="preserve"> <source>unknown</source> <target>nieznany</target> @@ -6933,6 +6945,10 @@ Serwery SimpleX nie mogą zobaczyć Twojego profilu.</target> <target>jesteś obserwatorem</target> <note>No comment provided by engineer.</note> </trans-unit> + <trans-unit id="you blocked %@" xml:space="preserve"> + <source>you blocked %@</source> + <note>snd group event chat item</note> + </trans-unit> <trans-unit id="you changed address" xml:space="preserve"> <source>you changed address</source> <target>zmieniłeś adres</target> @@ -6973,6 +6989,10 @@ Serwery SimpleX nie mogą zobaczyć Twojego profilu.</target> <target>udostępniłeś jednorazowy link incognito</target> <note>chat list item description</note> </trans-unit> + <trans-unit id="you unblocked %@" xml:space="preserve"> + <source>you unblocked %@</source> + <note>snd group event chat item</note> + </trans-unit> <trans-unit id="you: " xml:space="preserve"> <source>you: </source> <target>ty: </target> diff --git a/apps/ios/SimpleX Localizations/ru.xcloc/Localized Contents/ru.xliff b/apps/ios/SimpleX Localizations/ru.xcloc/Localized Contents/ru.xliff index 6cc98cc3b..472eae353 100644 --- a/apps/ios/SimpleX Localizations/ru.xcloc/Localized Contents/ru.xliff +++ b/apps/ios/SimpleX Localizations/ru.xcloc/Localized Contents/ru.xliff @@ -217,6 +217,10 @@ <target>%lld сообщений заблокировано</target> <note>No comment provided by engineer.</note> </trans-unit> + <trans-unit id="%lld messages blocked by admin" xml:space="preserve"> + <source>%lld messages blocked by admin</source> + <note>No comment provided by engineer.</note> + </trans-unit> <trans-unit id="%lld messages marked deleted" xml:space="preserve"> <source>%lld messages marked deleted</source> <target>%lld сообщений помечено удалёнными</target> @@ -314,6 +318,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>**Добавить контакт**: создать новую ссылку-приглашение или подключиться через полученную ссылку.</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"> @@ -323,6 +328,7 @@ </trans-unit> <trans-unit id="**Create group**: to create a new group." xml:space="preserve"> <source>**Create group**: to create a new group.</source> + <target>**Создать группу**: создать новую группу.</target> <note>No comment provided by engineer.</note> </trans-unit> <trans-unit id="**More private**: check new messages every 20 minutes. Device token is shared with SimpleX Chat server, but not how many contacts or messages you have." xml:space="preserve"> @@ -370,11 +376,6 @@ <target>, </target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="- block a member to stop spam for all. - contact address is not shared." xml:space="preserve"> - <source>- block a member to stop spam for all. -- contact address is not shared.</source> - <note>No comment provided by engineer.</note> - </trans-unit> <trans-unit id="- connect to [directory service](simplex:/contact#/?v=1-4&smp=smp%3A%2F%2Fu2dS9sG8nMNURyZwqASV4yROM28Er0luVTx5X1CsMrU%3D%40smp4.simplex.im%2FeXSPwqTkKyDO3px4fLf1wx3MvPdjdLW3%23%2F%3Fv%3D1-2%26dh%3DMCowBQYDK2VuAyEAaiv6MkMH44L2TcYrt_CsX3ZvM11WgbMEUn0hkIKTOho%253D%26srv%3Do5vmywmrnaxalvz6wi3zicyftgio6psuvyniis6gco6bp6ekl4cqj4id.onion) (BETA)! - delivery receipts (up to 20 members). - faster and more stable." xml:space="preserve"> <source>- connect to [directory service](simplex:/contact#/?v=1-4&smp=smp%3A%2F%2Fu2dS9sG8nMNURyZwqASV4yROM28Er0luVTx5X1CsMrU%3D%40smp4.simplex.im%2FeXSPwqTkKyDO3px4fLf1wx3MvPdjdLW3%23%2F%3Fv%3D1-2%26dh%3DMCowBQYDK2VuAyEAaiv6MkMH44L2TcYrt_CsX3ZvM11WgbMEUn0hkIKTOho%253D%26srv%3Do5vmywmrnaxalvz6wi3zicyftgio6psuvyniis6gco6bp6ekl4cqj4id.onion) (BETA)! - delivery receipts (up to 20 members). @@ -568,6 +569,7 @@ </trans-unit> <trans-unit id="Add contact" xml:space="preserve"> <source>Add contact</source> + <target>Добавить контакт</target> <note>No comment provided by engineer.</note> </trans-unit> <trans-unit id="Add preset servers" xml:space="preserve"> @@ -642,6 +644,7 @@ </trans-unit> <trans-unit id="All messages will be deleted - this cannot be undone!" xml:space="preserve"> <source>All messages will be deleted - this cannot be undone!</source> + <target>Все сообщения будут удалены - это нельзя отменить!</target> <note>No comment provided by engineer.</note> </trans-unit> <trans-unit id="All messages will be deleted - this cannot be undone! The messages will be deleted ONLY for you." xml:space="preserve"> @@ -919,6 +922,10 @@ <target>Заблокировать</target> <note>No comment provided by engineer.</note> </trans-unit> + <trans-unit id="Block for all" xml:space="preserve"> + <source>Block for all</source> + <note>No comment provided by engineer.</note> + </trans-unit> <trans-unit id="Block group members" xml:space="preserve"> <source>Block group members</source> <target>Блокируйте членов группы</target> @@ -929,11 +936,19 @@ <target>Заблокировать члена группы</target> <note>No comment provided by engineer.</note> </trans-unit> + <trans-unit id="Block member for all?" xml:space="preserve"> + <source>Block member for all?</source> + <note>No comment provided by engineer.</note> + </trans-unit> <trans-unit id="Block member?" xml:space="preserve"> <source>Block member?</source> <target>Заблокировать члена группы?</target> <note>No comment provided by engineer.</note> </trans-unit> + <trans-unit id="Blocked by admin" xml:space="preserve"> + <source>Blocked by admin</source> + <note>No comment provided by engineer.</note> + </trans-unit> <trans-unit id="Both you and your contact can add message reactions." xml:space="preserve"> <source>Both you and your contact can add message reactions.</source> <target>И Вы, и Ваш контакт можете добавлять реакции на сообщения.</target> @@ -981,11 +996,7 @@ </trans-unit> <trans-unit id="Camera not available" xml:space="preserve"> <source>Camera not available</source> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="Can't delete user profile!" xml:space="preserve"> - <source>Can't delete user profile!</source> - <target>Нельзя удалить профиль пользователя!</target> + <target>Камера недоступна</target> <note>No comment provided by engineer.</note> </trans-unit> <trans-unit id="Can't invite contact!" xml:space="preserve"> @@ -1101,6 +1112,7 @@ </trans-unit> <trans-unit id="Chat is stopped. If you already used this database on another device, you should transfer it back before starting chat." xml:space="preserve"> <source>Chat is stopped. If you already used this database on another device, you should transfer it back before starting chat.</source> + <target>Чат остановлен. Если вы уже использовали эту базу данных на другом устройстве, перенесите ее обратно до запуска чата.</target> <note>No comment provided by engineer.</note> </trans-unit> <trans-unit id="Chat preferences" xml:space="preserve"> @@ -1150,6 +1162,7 @@ </trans-unit> <trans-unit id="Clear private notes?" xml:space="preserve"> <source>Clear private notes?</source> + <target>Очистить личные заметки?</target> <note>No comment provided by engineer.</note> </trans-unit> <trans-unit id="Clear verification" xml:space="preserve"> @@ -1448,10 +1461,12 @@ This is your own one-time link!</source> </trans-unit> <trans-unit id="Created at" xml:space="preserve"> <source>Created at</source> + <target>Создано</target> <note>No comment provided by engineer.</note> </trans-unit> <trans-unit id="Created at: %@" xml:space="preserve"> <source>Created at: %@</source> + <target>Создано: %@</target> <note>copied message info</note> </trans-unit> <trans-unit id="Created on %@" xml:space="preserve"> @@ -1461,6 +1476,7 @@ This is your own one-time link!</source> </trans-unit> <trans-unit id="Creating link…" xml:space="preserve"> <source>Creating link…</source> + <target>Создаётся ссылка…</target> <note>No comment provided by engineer.</note> </trans-unit> <trans-unit id="Current Passcode" xml:space="preserve"> @@ -1945,6 +1961,7 @@ This cannot be undone!</source> </trans-unit> <trans-unit id="Do not send history to new members." xml:space="preserve"> <source>Do not send history to new members.</source> + <target>Не отправлять историю новым членам.</target> <note>No comment provided by engineer.</note> </trans-unit> <trans-unit id="Don't create address" xml:space="preserve"> @@ -2019,6 +2036,7 @@ This cannot be undone!</source> </trans-unit> <trans-unit id="Enable camera access" xml:space="preserve"> <source>Enable camera access</source> + <target>Включить доступ к камере</target> <note>No comment provided by engineer.</note> </trans-unit> <trans-unit id="Enable for all" xml:space="preserve"> @@ -2088,6 +2106,7 @@ This cannot be undone!</source> </trans-unit> <trans-unit id="Encrypted message: app is stopped" xml:space="preserve"> <source>Encrypted message: app is stopped</source> + <target>Зашифрованное сообщение: приложение остановлено</target> <note>notification</note> </trans-unit> <trans-unit id="Encrypted message: database error" xml:space="preserve"> @@ -2237,6 +2256,7 @@ This cannot be undone!</source> </trans-unit> <trans-unit id="Error creating message" xml:space="preserve"> <source>Error creating message</source> + <target>Ошибка создания сообщения</target> <note>No comment provided by engineer.</note> </trans-unit> <trans-unit id="Error creating profile!" xml:space="preserve"> @@ -2326,6 +2346,7 @@ This cannot be undone!</source> </trans-unit> <trans-unit id="Error opening chat" xml:space="preserve"> <source>Error opening chat</source> + <target>Ошибка доступа к чату</target> <note>No comment provided by engineer.</note> </trans-unit> <trans-unit id="Error receiving file" xml:space="preserve"> @@ -2370,6 +2391,7 @@ This cannot be undone!</source> </trans-unit> <trans-unit id="Error scanning code: %@" xml:space="preserve"> <source>Error scanning code: %@</source> + <target>Ошибка сканирования кода: %@</target> <note>No comment provided by engineer.</note> </trans-unit> <trans-unit id="Error sending email" xml:space="preserve"> @@ -2814,6 +2836,7 @@ This cannot be undone!</source> </trans-unit> <trans-unit id="History is not sent to new members." xml:space="preserve"> <source>History is not sent to new members.</source> + <target>История не отправляется новым членам.</target> <note>No comment provided by engineer.</note> </trans-unit> <trans-unit id="How SimpleX works" xml:space="preserve"> @@ -2908,6 +2931,7 @@ This cannot be undone!</source> </trans-unit> <trans-unit id="Improved message delivery" xml:space="preserve"> <source>Improved message delivery</source> + <target>Улучшенная доставка сообщений</target> <note>No comment provided by engineer.</note> </trans-unit> <trans-unit id="Improved privacy and security" xml:space="preserve"> @@ -3014,6 +3038,7 @@ This cannot be undone!</source> </trans-unit> <trans-unit id="Invalid QR code" xml:space="preserve"> <source>Invalid QR code</source> + <target>Неверный QR код</target> <note>No comment provided by engineer.</note> </trans-unit> <trans-unit id="Invalid connection link" xml:space="preserve"> @@ -3023,10 +3048,12 @@ This cannot be undone!</source> </trans-unit> <trans-unit id="Invalid display name!" xml:space="preserve"> <source>Invalid display name!</source> + <target>Ошибка имени!</target> <note>No comment provided by engineer.</note> </trans-unit> <trans-unit id="Invalid link" xml:space="preserve"> <source>Invalid link</source> + <target>Ошибка ссылки</target> <note>No comment provided by engineer.</note> </trans-unit> <trans-unit id="Invalid name!" xml:space="preserve"> @@ -3036,6 +3063,7 @@ This cannot be undone!</source> </trans-unit> <trans-unit id="Invalid response" xml:space="preserve"> <source>Invalid response</source> + <target>Ошибка ответа</target> <note>No comment provided by engineer.</note> </trans-unit> <trans-unit id="Invalid server address!" xml:space="preserve"> @@ -3131,6 +3159,7 @@ This cannot be undone!</source> </trans-unit> <trans-unit id="Join group conversations" xml:space="preserve"> <source>Join group conversations</source> + <target>Присоединяйтесь к разговорам в группах</target> <note>No comment provided by engineer.</note> </trans-unit> <trans-unit id="Join group?" xml:space="preserve"> @@ -3162,6 +3191,7 @@ This is your link for group %@!</source> </trans-unit> <trans-unit id="Keep" xml:space="preserve"> <source>Keep</source> + <target>Оставить</target> <note>No comment provided by engineer.</note> </trans-unit> <trans-unit id="Keep the app open to use it from desktop" xml:space="preserve"> @@ -3171,6 +3201,7 @@ This is your link for group %@!</source> </trans-unit> <trans-unit id="Keep unused invitation?" xml:space="preserve"> <source>Keep unused invitation?</source> + <target>Оставить неиспользованное приглашение?</target> <note>No comment provided by engineer.</note> </trans-unit> <trans-unit id="Keep your connections" xml:space="preserve"> @@ -3505,6 +3536,7 @@ This is your link for group %@!</source> </trans-unit> <trans-unit id="New chat" xml:space="preserve"> <source>New chat</source> + <target>Новый чат</target> <note>No comment provided by engineer.</note> </trans-unit> <trans-unit id="New contact request" xml:space="preserve"> @@ -3633,6 +3665,7 @@ This is your link for group %@!</source> </trans-unit> <trans-unit id="OK" xml:space="preserve"> <source>OK</source> + <target>OK</target> <note>No comment provided by engineer.</note> </trans-unit> <trans-unit id="Off" xml:space="preserve"> @@ -3782,14 +3815,17 @@ This is your link for group %@!</source> </trans-unit> <trans-unit id="Opening app…" xml:space="preserve"> <source>Opening app…</source> + <target>Приложение отрывается…</target> <note>No comment provided by engineer.</note> </trans-unit> <trans-unit id="Or scan QR code" xml:space="preserve"> <source>Or scan QR code</source> + <target>Или отсканируйте QR код</target> <note>No comment provided by engineer.</note> </trans-unit> <trans-unit id="Or show this code" xml:space="preserve"> <source>Or show this code</source> + <target>Или покажите этот код</target> <note>No comment provided by engineer.</note> </trans-unit> <trans-unit id="PING count" xml:space="preserve"> @@ -3834,6 +3870,7 @@ This is your link for group %@!</source> </trans-unit> <trans-unit id="Past member %@" xml:space="preserve"> <source>Past member %@</source> + <target>Бывший член %@</target> <note>past/unknown group member</note> </trans-unit> <trans-unit id="Paste desktop address" xml:space="preserve"> @@ -3848,10 +3885,12 @@ This is your link for group %@!</source> </trans-unit> <trans-unit id="Paste link to connect!" xml:space="preserve"> <source>Paste link to connect!</source> + <target>Вставьте ссылку, чтобы соединиться!</target> <note>No comment provided by engineer.</note> </trans-unit> <trans-unit id="Paste the link you received" xml:space="preserve"> <source>Paste the link you received</source> + <target>Вставьте полученную ссылку</target> <note>No comment provided by engineer.</note> </trans-unit> <trans-unit id="People can connect to you only via the links you share." xml:space="preserve"> @@ -3892,6 +3931,8 @@ This is your link for group %@!</source> <trans-unit id="Please contact developers. Error: %@" xml:space="preserve"> <source>Please contact developers. Error: %@</source> + <target>Пожалуйста, сообщите разработчикам. +Ошибка: %@</target> <note>No comment provided by engineer.</note> </trans-unit> <trans-unit id="Please contact group admin." xml:space="preserve"> @@ -3981,6 +4022,7 @@ Error: %@</source> </trans-unit> <trans-unit id="Private notes" xml:space="preserve"> <source>Private notes</source> + <target>Личные заметки</target> <note>name of notes to self</note> </trans-unit> <trans-unit id="Profile and server connections" xml:space="preserve"> @@ -4105,6 +4147,7 @@ Error: %@</source> </trans-unit> <trans-unit id="Read more in [User Guide](https://simplex.chat/docs/guide/chat-profiles.html#incognito-mode)." xml:space="preserve"> <source>Read more in [User Guide](https://simplex.chat/docs/guide/chat-profiles.html#incognito-mode).</source> + <target>Дополнительная информация в [Руководстве пользователя](https://simplex.chat/docs/guide/chat-profiles.html#incognito-mode).</target> <note>No comment provided by engineer.</note> </trans-unit> <trans-unit id="Read more in [User Guide](https://simplex.chat/docs/guide/readme.html#connect-to-friends)." xml:space="preserve"> @@ -4164,6 +4207,7 @@ Error: %@</source> </trans-unit> <trans-unit id="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)." xml:space="preserve"> <source>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).</source> + <target>История сообщений и улучшенный [каталог групп](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).</target> <note>No comment provided by engineer.</note> </trans-unit> <trans-unit id="Recipients see updates as you type them." xml:space="preserve"> @@ -4323,6 +4367,7 @@ Error: %@</source> </trans-unit> <trans-unit id="Retry" xml:space="preserve"> <source>Retry</source> + <target>Повторить</target> <note>No comment provided by engineer.</note> </trans-unit> <trans-unit id="Reveal" xml:space="preserve"> @@ -4365,10 +4410,6 @@ Error: %@</source> <target>SMP серверы</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Safer groups" xml:space="preserve"> - <source>Safer groups</source> - <note>No comment provided by engineer.</note> - </trans-unit> <trans-unit id="Save" xml:space="preserve"> <source>Save</source> <target>Сохранить</target> @@ -4456,6 +4497,7 @@ Error: %@</source> </trans-unit> <trans-unit id="Saved message" xml:space="preserve"> <source>Saved message</source> + <target>Сохраненное сообщение</target> <note>message info title</note> </trans-unit> <trans-unit id="Scan QR code" xml:space="preserve"> @@ -4490,10 +4532,12 @@ Error: %@</source> </trans-unit> <trans-unit id="Search bar accepts invitation links." xml:space="preserve"> <source>Search bar accepts invitation links.</source> + <target>Поле поиска поддерживает ссылки-приглашения.</target> <note>No comment provided by engineer.</note> </trans-unit> <trans-unit id="Search or paste SimpleX link" xml:space="preserve"> <source>Search or paste SimpleX link</source> + <target>Искать или вставьте ссылку SimpleX</target> <note>No comment provided by engineer.</note> </trans-unit> <trans-unit id="Secure queue" xml:space="preserve"> @@ -4603,6 +4647,7 @@ Error: %@</source> </trans-unit> <trans-unit id="Send up to 100 last messages to new members." xml:space="preserve"> <source>Send up to 100 last messages to new members.</source> + <target>Отправить до 100 последних сообщений новым членам.</target> <note>No comment provided by engineer.</note> </trans-unit> <trans-unit id="Sender cancelled file transfer." xml:space="preserve"> @@ -4777,6 +4822,7 @@ Error: %@</source> </trans-unit> <trans-unit id="Share this 1-time invite link" xml:space="preserve"> <source>Share this 1-time invite link</source> + <target>Поделиться одноразовой ссылкой-приглашением</target> <note>No comment provided by engineer.</note> </trans-unit> <trans-unit id="Share with contacts" xml:space="preserve"> @@ -4906,6 +4952,7 @@ Error: %@</source> </trans-unit> <trans-unit id="Start chat?" xml:space="preserve"> <source>Start chat?</source> + <target>Запустить чат?</target> <note>No comment provided by engineer.</note> </trans-unit> <trans-unit id="Start migration" xml:space="preserve"> @@ -5035,10 +5082,12 @@ Error: %@</source> </trans-unit> <trans-unit id="Tap to paste link" xml:space="preserve"> <source>Tap to paste link</source> + <target>Нажмите, чтобы вставить ссылку</target> <note>No comment provided by engineer.</note> </trans-unit> <trans-unit id="Tap to scan" xml:space="preserve"> <source>Tap to scan</source> + <target>Нажмите, чтобы сканировать</target> <note>No comment provided by engineer.</note> </trans-unit> <trans-unit id="Tap to start a new chat" xml:space="preserve"> @@ -5105,6 +5154,7 @@ It can happen because of some bug or when the connection is compromised.</source </trans-unit> <trans-unit id="The code you scanned is not a SimpleX link QR code." xml:space="preserve"> <source>The code you scanned is not a SimpleX link QR code.</source> + <target>Этот QR код не является SimpleX-ccылкой.</target> <note>No comment provided by engineer.</note> </trans-unit> <trans-unit id="The connection you accepted will be cancelled!" xml:space="preserve"> @@ -5174,6 +5224,7 @@ It can happen because of some bug or when the connection is compromised.</source </trans-unit> <trans-unit id="The text you pasted is not a SimpleX link." xml:space="preserve"> <source>The text you pasted is not a SimpleX link.</source> + <target>Вставленный текст не является SimpleX-ссылкой.</target> <note>No comment provided by engineer.</note> </trans-unit> <trans-unit id="Theme" xml:space="preserve"> @@ -5181,16 +5232,6 @@ It can happen because of some bug or when the connection is compromised.</source <target>Тема</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="There should be at least one user profile." xml:space="preserve"> - <source>There should be at least one user profile.</source> - <target>Должен быть хотя бы один профиль пользователя.</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="There should be at least one visible user profile." xml:space="preserve"> - <source>There should be at least one visible user profile.</source> - <target>Должен быть хотя бы один открытый профиль пользователя.</target> - <note>No comment provided by engineer.</note> - </trans-unit> <trans-unit id="These settings are for your current profile **%@**." xml:space="preserve"> <source>These settings are for your current profile **%@**.</source> <target>Установки для Вашего активного профиля **%@**.</target> @@ -5223,6 +5264,7 @@ It can happen because of some bug or when the connection is compromised.</source </trans-unit> <trans-unit id="This display name is invalid. Please choose another name." xml:space="preserve"> <source>This display name is invalid. Please choose another name.</source> + <target>Ошибка имени профиля. Пожалуйста, выберите другое имя.</target> <note>No comment provided by engineer.</note> </trans-unit> <trans-unit id="This group has over %lld members, delivery receipts are not sent." xml:space="preserve"> @@ -5329,6 +5371,7 @@ You will be prompted to complete authentication before this feature is enabled.< </trans-unit> <trans-unit id="Turkish interface" xml:space="preserve"> <source>Turkish interface</source> + <target>Турецкий интерфейс</target> <note>No comment provided by engineer.</note> </trans-unit> <trans-unit id="Turn off" xml:space="preserve"> @@ -5351,11 +5394,19 @@ You will be prompted to complete authentication before this feature is enabled.< <target>Разблокировать</target> <note>No comment provided by engineer.</note> </trans-unit> + <trans-unit id="Unblock for all" xml:space="preserve"> + <source>Unblock for all</source> + <note>No comment provided by engineer.</note> + </trans-unit> <trans-unit id="Unblock member" xml:space="preserve"> <source>Unblock member</source> <target>Разблокировать члена группы</target> <note>No comment provided by engineer.</note> </trans-unit> + <trans-unit id="Unblock member for all?" xml:space="preserve"> + <source>Unblock member for all?</source> + <note>No comment provided by engineer.</note> + </trans-unit> <trans-unit id="Unblock member?" xml:space="preserve"> <source>Unblock member?</source> <target>Разблокировать члена группы?</target> @@ -5455,6 +5506,7 @@ To connect, please ask your contact to create another connection link and check </trans-unit> <trans-unit id="Up to 100 last messages are sent to new members." xml:space="preserve"> <source>Up to 100 last messages are sent to new members.</source> + <target>До 100 последних сообщений отправляются новым членам.</target> <note>No comment provided by engineer.</note> </trans-unit> <trans-unit id="Update" xml:space="preserve"> @@ -5544,6 +5596,7 @@ To connect, please ask your contact to create another connection link and check </trans-unit> <trans-unit id="Use only local notifications?" xml:space="preserve"> <source>Use only local notifications?</source> + <target>Использовать только локальные нотификации?</target> <note>No comment provided by engineer.</note> </trans-unit> <trans-unit id="Use server" xml:space="preserve"> @@ -5628,6 +5681,7 @@ To connect, please ask your contact to create another connection link and check </trans-unit> <trans-unit id="Visible history" xml:space="preserve"> <source>Visible history</source> + <target>Доступ к истории</target> <note>chat feature</note> </trans-unit> <trans-unit id="Voice messages" xml:space="preserve"> @@ -5717,6 +5771,7 @@ To connect, please ask your contact to create another connection link and check </trans-unit> <trans-unit id="With encrypted files and media." xml:space="preserve"> <source>With encrypted files and media.</source> + <target>С зашифрованными файлами и медиа.</target> <note>No comment provided by engineer.</note> </trans-unit> <trans-unit id="With optional welcome message." xml:space="preserve"> @@ -5726,6 +5781,7 @@ To connect, please ask your contact to create another connection link and check </trans-unit> <trans-unit id="With reduced battery usage." xml:space="preserve"> <source>With reduced battery usage.</source> + <target>С уменьшенным потреблением батареи.</target> <note>No comment provided by engineer.</note> </trans-unit> <trans-unit id="Wrong database passphrase" xml:space="preserve"> @@ -5842,6 +5898,7 @@ Repeat join request?</source> </trans-unit> <trans-unit id="You can make it visible to your SimpleX contacts via Settings." xml:space="preserve"> <source>You can make it visible to your SimpleX contacts via Settings.</source> + <target>Вы можете сделать его видимым для ваших контактов в SimpleX через Настройки.</target> <note>No comment provided by engineer.</note> </trans-unit> <trans-unit id="You can now send messages to %@" xml:space="preserve"> @@ -5886,6 +5943,7 @@ Repeat join request?</source> </trans-unit> <trans-unit id="You can view invitation link again in connection details." xml:space="preserve"> <source>You can view invitation link again in connection details.</source> + <target>Вы можете увидеть ссылку-приглашение снова открыв соединение.</target> <note>No comment provided by engineer.</note> </trans-unit> <trans-unit id="You can't send messages!" xml:space="preserve"> @@ -6229,6 +6287,14 @@ SimpleX серверы не могут получить доступ к Ваше <target>заблокировано</target> <note>No comment provided by engineer.</note> </trans-unit> + <trans-unit id="blocked %@" xml:space="preserve"> + <source>blocked %@</source> + <note>rcv group event chat item</note> + </trans-unit> + <trans-unit id="blocked by admin" xml:space="preserve"> + <source>blocked by admin</source> + <note>blocked chat item</note> + </trans-unit> <trans-unit id="bold" xml:space="preserve"> <source>bold</source> <target>жирный</target> @@ -6351,6 +6417,7 @@ SimpleX серверы не могут получить доступ к Ваше </trans-unit> <trans-unit id="contact %@ changed to %@" xml:space="preserve"> <source>contact %1$@ changed to %2$@</source> + <target>контакт %1$@ изменён на %2$@</target> <note>profile update event chat item</note> </trans-unit> <trans-unit id="contact has e2e encryption" xml:space="preserve"> @@ -6625,6 +6692,7 @@ SimpleX серверы не могут получить доступ к Ваше </trans-unit> <trans-unit id="member %@ changed to %@" xml:space="preserve"> <source>member %1$@ changed to %2$@</source> + <target>член %1$@ изменился на %2$@</target> <note>profile update event chat item</note> </trans-unit> <trans-unit id="member connected" xml:space="preserve"> @@ -6751,10 +6819,12 @@ SimpleX серверы не могут получить доступ к Ваше </trans-unit> <trans-unit id="removed contact address" xml:space="preserve"> <source>removed contact address</source> + <target>удалён адрес контакта</target> <note>profile update event chat item</note> </trans-unit> <trans-unit id="removed profile picture" xml:space="preserve"> <source>removed profile picture</source> + <target>удалена картинка профиля</target> <note>profile update event chat item</note> </trans-unit> <trans-unit id="removed you" xml:space="preserve"> @@ -6789,10 +6859,12 @@ SimpleX серверы не могут получить доступ к Ваше </trans-unit> <trans-unit id="set new contact address" xml:space="preserve"> <source>set new contact address</source> + <target>установлен новый адрес контакта</target> <note>profile update event chat item</note> </trans-unit> <trans-unit id="set new profile picture" xml:space="preserve"> <source>set new profile picture</source> + <target>установлена новая картинка профиля</target> <note>profile update event chat item</note> </trans-unit> <trans-unit id="starting…" xml:space="preserve"> @@ -6810,6 +6882,10 @@ SimpleX серверы не могут получить доступ к Ваше <target>этот контакт</target> <note>notification title</note> </trans-unit> + <trans-unit id="unblocked %@" xml:space="preserve"> + <source>unblocked %@</source> + <note>rcv group event chat item</note> + </trans-unit> <trans-unit id="unknown" xml:space="preserve"> <source>unknown</source> <target>неизвестно</target> @@ -6817,6 +6893,7 @@ SimpleX серверы не могут получить доступ к Ваше </trans-unit> <trans-unit id="unknown status" xml:space="preserve"> <source>unknown status</source> + <target>неизвестный статус</target> <note>No comment provided by engineer.</note> </trans-unit> <trans-unit id="updated group profile" xml:space="preserve"> @@ -6826,6 +6903,7 @@ SimpleX серверы не могут получить доступ к Ваше </trans-unit> <trans-unit id="updated profile" xml:space="preserve"> <source>updated profile</source> + <target>профиль обновлён</target> <note>profile update event chat item</note> </trans-unit> <trans-unit id="v%@" xml:space="preserve"> @@ -6898,6 +6976,10 @@ SimpleX серверы не могут получить доступ к Ваше <target>только чтение сообщений</target> <note>No comment provided by engineer.</note> </trans-unit> + <trans-unit id="you blocked %@" xml:space="preserve"> + <source>you blocked %@</source> + <note>snd group event chat item</note> + </trans-unit> <trans-unit id="you changed address" xml:space="preserve"> <source>you changed address</source> <target>Вы поменяли адрес</target> @@ -6938,6 +7020,10 @@ SimpleX серверы не могут получить доступ к Ваше <target>Вы создали ссылку инкогнито</target> <note>chat list item description</note> </trans-unit> + <trans-unit id="you unblocked %@" xml:space="preserve"> + <source>you unblocked %@</source> + <note>snd group event chat item</note> + </trans-unit> <trans-unit id="you: " xml:space="preserve"> <source>you: </source> <target>Вы: </target> diff --git a/apps/ios/SimpleX Localizations/th.xcloc/Localized Contents/th.xliff b/apps/ios/SimpleX Localizations/th.xcloc/Localized Contents/th.xliff index c40de4ec1..5e0659e93 100644 --- a/apps/ios/SimpleX Localizations/th.xcloc/Localized Contents/th.xliff +++ b/apps/ios/SimpleX Localizations/th.xcloc/Localized Contents/th.xliff @@ -207,6 +207,10 @@ <source>%lld messages blocked</source> <note>No comment provided by engineer.</note> </trans-unit> + <trans-unit id="%lld messages blocked by admin" xml:space="preserve"> + <source>%lld messages blocked by admin</source> + <note>No comment provided by engineer.</note> + </trans-unit> <trans-unit id="%lld messages marked deleted" xml:space="preserve"> <source>%lld messages marked deleted</source> <note>No comment provided by engineer.</note> @@ -355,11 +359,6 @@ <target>, </target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="- block a member to stop spam for all. - contact address is not shared." xml:space="preserve"> - <source>- block a member to stop spam for all. -- contact address is not shared.</source> - <note>No comment provided by engineer.</note> - </trans-unit> <trans-unit id="- connect to [directory service](simplex:/contact#/?v=1-4&smp=smp%3A%2F%2Fu2dS9sG8nMNURyZwqASV4yROM28Er0luVTx5X1CsMrU%3D%40smp4.simplex.im%2FeXSPwqTkKyDO3px4fLf1wx3MvPdjdLW3%23%2F%3Fv%3D1-2%26dh%3DMCowBQYDK2VuAyEAaiv6MkMH44L2TcYrt_CsX3ZvM11WgbMEUn0hkIKTOho%253D%26srv%3Do5vmywmrnaxalvz6wi3zicyftgio6psuvyniis6gco6bp6ekl4cqj4id.onion) (BETA)! - delivery receipts (up to 20 members). - faster and more stable." xml:space="preserve"> <source>- connect to [directory service](simplex:/contact#/?v=1-4&smp=smp%3A%2F%2Fu2dS9sG8nMNURyZwqASV4yROM28Er0luVTx5X1CsMrU%3D%40smp4.simplex.im%2FeXSPwqTkKyDO3px4fLf1wx3MvPdjdLW3%23%2F%3Fv%3D1-2%26dh%3DMCowBQYDK2VuAyEAaiv6MkMH44L2TcYrt_CsX3ZvM11WgbMEUn0hkIKTOho%253D%26srv%3Do5vmywmrnaxalvz6wi3zicyftgio6psuvyniis6gco6bp6ekl4cqj4id.onion) (BETA)! - delivery receipts (up to 20 members). @@ -888,6 +887,10 @@ <source>Block</source> <note>No comment provided by engineer.</note> </trans-unit> + <trans-unit id="Block for all" xml:space="preserve"> + <source>Block for all</source> + <note>No comment provided by engineer.</note> + </trans-unit> <trans-unit id="Block group members" xml:space="preserve"> <source>Block group members</source> <note>No comment provided by engineer.</note> @@ -896,10 +899,18 @@ <source>Block member</source> <note>No comment provided by engineer.</note> </trans-unit> + <trans-unit id="Block member for all?" xml:space="preserve"> + <source>Block member for all?</source> + <note>No comment provided by engineer.</note> + </trans-unit> <trans-unit id="Block member?" xml:space="preserve"> <source>Block member?</source> <note>No comment provided by engineer.</note> </trans-unit> + <trans-unit id="Blocked by admin" xml:space="preserve"> + <source>Blocked by admin</source> + <note>No comment provided by engineer.</note> + </trans-unit> <trans-unit id="Both you and your contact can add message reactions." xml:space="preserve"> <source>Both you and your contact can add message reactions.</source> <target>ทั้งคุณและผู้ติดต่อของคุณสามารถเพิ่มปฏิกิริยาของข้อความได้</target> @@ -948,11 +959,6 @@ <source>Camera not available</source> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Can't delete user profile!" xml:space="preserve"> - <source>Can't delete user profile!</source> - <target>ไม่สามารถลบโปรไฟล์ผู้ใช้ได้!</target> - <note>No comment provided by engineer.</note> - </trans-unit> <trans-unit id="Can't invite contact!" xml:space="preserve"> <source>Can't invite contact!</source> <target>ไม่สามารถเชิญผู้ติดต่อได้!</target> @@ -4256,10 +4262,6 @@ Error: %@</source> <target>เซิร์ฟเวอร์ SMP</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Safer groups" xml:space="preserve"> - <source>Safer groups</source> - <note>No comment provided by engineer.</note> - </trans-unit> <trans-unit id="Save" xml:space="preserve"> <source>Save</source> <target>บันทึก</target> @@ -5064,16 +5066,6 @@ It can happen because of some bug or when the connection is compromised.</source <target>ธีม</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="There should be at least one user profile." xml:space="preserve"> - <source>There should be at least one user profile.</source> - <target>ควรมีโปรไฟล์ผู้ใช้อย่างน้อยหนึ่งโปรไฟล์</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="There should be at least one visible user profile." xml:space="preserve"> - <source>There should be at least one visible user profile.</source> - <target>ควรมีอย่างน้อยหนึ่งโปรไฟล์ผู้ใช้ที่มองเห็นได้</target> - <note>No comment provided by engineer.</note> - </trans-unit> <trans-unit id="These settings are for your current profile **%@**." xml:space="preserve"> <source>These settings are for your current profile **%@**.</source> <target>การตั้งค่าเหล่านี้ใช้สำหรับโปรไฟล์ปัจจุบันของคุณ **%@**</target> @@ -5226,10 +5218,18 @@ You will be prompted to complete authentication before this feature is enabled.< <source>Unblock</source> <note>No comment provided by engineer.</note> </trans-unit> + <trans-unit id="Unblock for all" xml:space="preserve"> + <source>Unblock for all</source> + <note>No comment provided by engineer.</note> + </trans-unit> <trans-unit id="Unblock member" xml:space="preserve"> <source>Unblock member</source> <note>No comment provided by engineer.</note> </trans-unit> + <trans-unit id="Unblock member for all?" xml:space="preserve"> + <source>Unblock member for all?</source> + <note>No comment provided by engineer.</note> + </trans-unit> <trans-unit id="Unblock member?" xml:space="preserve"> <source>Unblock member?</source> <note>No comment provided by engineer.</note> @@ -6073,6 +6073,14 @@ SimpleX servers cannot see your profile.</source> <source>blocked</source> <note>No comment provided by engineer.</note> </trans-unit> + <trans-unit id="blocked %@" xml:space="preserve"> + <source>blocked %@</source> + <note>rcv group event chat item</note> + </trans-unit> + <trans-unit id="blocked by admin" xml:space="preserve"> + <source>blocked by admin</source> + <note>blocked chat item</note> + </trans-unit> <trans-unit id="bold" xml:space="preserve"> <source>bold</source> <target>ตัวหนา</target> @@ -6649,6 +6657,10 @@ SimpleX servers cannot see your profile.</source> <target>ผู้ติดต่อนี้</target> <note>notification title</note> </trans-unit> + <trans-unit id="unblocked %@" xml:space="preserve"> + <source>unblocked %@</source> + <note>rcv group event chat item</note> + </trans-unit> <trans-unit id="unknown" xml:space="preserve"> <source>unknown</source> <target>ไม่ทราบ</target> @@ -6736,6 +6748,10 @@ SimpleX servers cannot see your profile.</source> <target>คุณเป็นผู้สังเกตการณ์</target> <note>No comment provided by engineer.</note> </trans-unit> + <trans-unit id="you blocked %@" xml:space="preserve"> + <source>you blocked %@</source> + <note>snd group event chat item</note> + </trans-unit> <trans-unit id="you changed address" xml:space="preserve"> <source>you changed address</source> <target>คุณเปลี่ยนที่อยู่แล้ว</target> @@ -6776,6 +6792,10 @@ SimpleX servers cannot see your profile.</source> <target>คุณแชร์ลิงก์แบบใช้ครั้งเดียวโดยไม่ระบุตัวตนแล้ว</target> <note>chat list item description</note> </trans-unit> + <trans-unit id="you unblocked %@" xml:space="preserve"> + <source>you unblocked %@</source> + <note>snd group event chat item</note> + </trans-unit> <trans-unit id="you: " xml:space="preserve"> <source>you: </source> <target>คุณ: </target> diff --git a/apps/ios/SimpleX Localizations/tr.xcloc/Localized Contents/tr.xliff b/apps/ios/SimpleX Localizations/tr.xcloc/Localized Contents/tr.xliff index 7613e8cae..3fa3f55dc 100644 --- a/apps/ios/SimpleX Localizations/tr.xcloc/Localized Contents/tr.xliff +++ b/apps/ios/SimpleX Localizations/tr.xcloc/Localized Contents/tr.xliff @@ -217,6 +217,10 @@ <target>%lld mesajlar engellendi</target> <note>No comment provided by engineer.</note> </trans-unit> + <trans-unit id="%lld messages blocked by admin" xml:space="preserve"> + <source>%lld messages blocked by admin</source> + <note>No comment provided by engineer.</note> + </trans-unit> <trans-unit id="%lld messages marked deleted" xml:space="preserve"> <source>%lld messages marked deleted</source> <target>%lld mesajlar silinmiş olarak işaretlendi</target> @@ -372,11 +376,6 @@ <target>, </target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="- block a member to stop spam for all. - contact address is not shared." xml:space="preserve"> - <source>- block a member to stop spam for all. -- contact address is not shared.</source> - <note>No comment provided by engineer.</note> - </trans-unit> <trans-unit id="- connect to [directory service](simplex:/contact#/?v=1-4&smp=smp%3A%2F%2Fu2dS9sG8nMNURyZwqASV4yROM28Er0luVTx5X1CsMrU%3D%40smp4.simplex.im%2FeXSPwqTkKyDO3px4fLf1wx3MvPdjdLW3%23%2F%3Fv%3D1-2%26dh%3DMCowBQYDK2VuAyEAaiv6MkMH44L2TcYrt_CsX3ZvM11WgbMEUn0hkIKTOho%253D%26srv%3Do5vmywmrnaxalvz6wi3zicyftgio6psuvyniis6gco6bp6ekl4cqj4id.onion) (BETA)! - delivery receipts (up to 20 members). - faster and more stable." xml:space="preserve"> <source>- connect to [directory service](simplex:/contact#/?v=1-4&smp=smp%3A%2F%2Fu2dS9sG8nMNURyZwqASV4yROM28Er0luVTx5X1CsMrU%3D%40smp4.simplex.im%2FeXSPwqTkKyDO3px4fLf1wx3MvPdjdLW3%23%2F%3Fv%3D1-2%26dh%3DMCowBQYDK2VuAyEAaiv6MkMH44L2TcYrt_CsX3ZvM11WgbMEUn0hkIKTOho%253D%26srv%3Do5vmywmrnaxalvz6wi3zicyftgio6psuvyniis6gco6bp6ekl4cqj4id.onion) (BETA)! - delivery receipts (up to 20 members). @@ -919,6 +918,10 @@ <target>Engelle</target> <note>No comment provided by engineer.</note> </trans-unit> + <trans-unit id="Block for all" xml:space="preserve"> + <source>Block for all</source> + <note>No comment provided by engineer.</note> + </trans-unit> <trans-unit id="Block group members" xml:space="preserve"> <source>Block group members</source> <target>Grup üyelerini engelle</target> @@ -929,11 +932,19 @@ <target>Üyeyi engelle</target> <note>No comment provided by engineer.</note> </trans-unit> + <trans-unit id="Block member for all?" xml:space="preserve"> + <source>Block member for all?</source> + <note>No comment provided by engineer.</note> + </trans-unit> <trans-unit id="Block member?" xml:space="preserve"> <source>Block member?</source> <target>Üyeyi engelle?</target> <note>No comment provided by engineer.</note> </trans-unit> + <trans-unit id="Blocked by admin" xml:space="preserve"> + <source>Blocked by admin</source> + <note>No comment provided by engineer.</note> + </trans-unit> <trans-unit id="Both you and your contact can add message reactions." xml:space="preserve"> <source>Both you and your contact can add message reactions.</source> <target>Sen ve konuştuğun kişi mesaj tepkileri ekleyebilir.</target> @@ -983,11 +994,6 @@ <target>Kamera mevcut değil</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Can't delete user profile!" xml:space="preserve"> - <source>Can't delete user profile!</source> - <target>Kullanıcı profili silinemiyor!</target> - <note>No comment provided by engineer.</note> - </trans-unit> <trans-unit id="Can't invite contact!" xml:space="preserve"> <source>Can't invite contact!</source> <target>Kişi davet edilemiyor!</target> @@ -4383,10 +4389,6 @@ Hata: %@</target> <target>SMP sunucuları</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Safer groups" xml:space="preserve"> - <source>Safer groups</source> - <note>No comment provided by engineer.</note> - </trans-unit> <trans-unit id="Save" xml:space="preserve"> <source>Save</source> <target>Kaydet</target> @@ -5206,16 +5208,6 @@ Bazı hatalar nedeniyle veya bağlantı tehlikeye girdiğinde meydana gelebilir. <target>Tema</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="There should be at least one user profile." xml:space="preserve"> - <source>There should be at least one user profile.</source> - <target>En az bir kullanıcı profili olmalıdır.</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="There should be at least one visible user profile." xml:space="preserve"> - <source>There should be at least one visible user profile.</source> - <target>En az bir görünür kullanıcı profili olmalıdır.</target> - <note>No comment provided by engineer.</note> - </trans-unit> <trans-unit id="These settings are for your current profile **%@**." xml:space="preserve"> <source>These settings are for your current profile **%@**.</source> <target>Bu ayarlar mevcut profiliniz **%@** içindir.</target> @@ -5376,11 +5368,19 @@ Bu özellik etkinleştirilmeden önce kimlik doğrulamayı tamamlamanız istenec <target>Engeli kaldır</target> <note>No comment provided by engineer.</note> </trans-unit> + <trans-unit id="Unblock for all" xml:space="preserve"> + <source>Unblock for all</source> + <note>No comment provided by engineer.</note> + </trans-unit> <trans-unit id="Unblock member" xml:space="preserve"> <source>Unblock member</source> <target>Üyenin engelini kaldır</target> <note>No comment provided by engineer.</note> </trans-unit> + <trans-unit id="Unblock member for all?" xml:space="preserve"> + <source>Unblock member for all?</source> + <note>No comment provided by engineer.</note> + </trans-unit> <trans-unit id="Unblock member?" xml:space="preserve"> <source>Unblock member?</source> <target>Üyenin engeli kaldırılsın mı?</target> @@ -6257,6 +6257,14 @@ SimpleX sunucuları profilinizi göremez.</target> <target>engellendi</target> <note>No comment provided by engineer.</note> </trans-unit> + <trans-unit id="blocked %@" xml:space="preserve"> + <source>blocked %@</source> + <note>rcv group event chat item</note> + </trans-unit> + <trans-unit id="blocked by admin" xml:space="preserve"> + <source>blocked by admin</source> + <note>blocked chat item</note> + </trans-unit> <trans-unit id="bold" xml:space="preserve"> <source>bold</source> <target>kalın</target> @@ -6838,6 +6846,10 @@ SimpleX sunucuları profilinizi göremez.</target> <target>Bu kişi</target> <note>notification title</note> </trans-unit> + <trans-unit id="unblocked %@" xml:space="preserve"> + <source>unblocked %@</source> + <note>rcv group event chat item</note> + </trans-unit> <trans-unit id="unknown" xml:space="preserve"> <source>unknown</source> <target>bilinmeyen</target> @@ -6926,6 +6938,10 @@ SimpleX sunucuları profilinizi göremez.</target> <target>gözlemcisiniz</target> <note>No comment provided by engineer.</note> </trans-unit> + <trans-unit id="you blocked %@" xml:space="preserve"> + <source>you blocked %@</source> + <note>snd group event chat item</note> + </trans-unit> <trans-unit id="you changed address" xml:space="preserve"> <source>you changed address</source> <target>adresinizi değiştirdiniz</target> @@ -6966,6 +6982,10 @@ SimpleX sunucuları profilinizi göremez.</target> <target>tek kullanımlık link paylaştınız gizli</target> <note>chat list item description</note> </trans-unit> + <trans-unit id="you unblocked %@" xml:space="preserve"> + <source>you unblocked %@</source> + <note>snd group event chat item</note> + </trans-unit> <trans-unit id="you: " xml:space="preserve"> <source>you: </source> <target>sen: </target> diff --git a/apps/ios/SimpleX Localizations/uk.xcloc/Localized Contents/uk.xliff b/apps/ios/SimpleX Localizations/uk.xcloc/Localized Contents/uk.xliff index c613b4878..566f97e54 100644 --- a/apps/ios/SimpleX Localizations/uk.xcloc/Localized Contents/uk.xliff +++ b/apps/ios/SimpleX Localizations/uk.xcloc/Localized Contents/uk.xliff @@ -217,6 +217,10 @@ <target>%lld повідомлень заблоковано</target> <note>No comment provided by engineer.</note> </trans-unit> + <trans-unit id="%lld messages blocked by admin" xml:space="preserve"> + <source>%lld messages blocked by admin</source> + <note>No comment provided by engineer.</note> + </trans-unit> <trans-unit id="%lld messages marked deleted" xml:space="preserve"> <source>%lld messages marked deleted</source> <target>%lld повідомлень позначено як видалені</target> @@ -370,16 +374,11 @@ <target>, </target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="- block a member to stop spam for all. - contact address is not shared." xml:space="preserve"> - <source>- block a member to stop spam for all. -- contact address is not shared.</source> - <note>No comment provided by engineer.</note> - </trans-unit> <trans-unit id="- connect to [directory service](simplex:/contact#/?v=1-4&smp=smp%3A%2F%2Fu2dS9sG8nMNURyZwqASV4yROM28Er0luVTx5X1CsMrU%3D%40smp4.simplex.im%2FeXSPwqTkKyDO3px4fLf1wx3MvPdjdLW3%23%2F%3Fv%3D1-2%26dh%3DMCowBQYDK2VuAyEAaiv6MkMH44L2TcYrt_CsX3ZvM11WgbMEUn0hkIKTOho%253D%26srv%3Do5vmywmrnaxalvz6wi3zicyftgio6psuvyniis6gco6bp6ekl4cqj4id.onion) (BETA)! - delivery receipts (up to 20 members). - faster and more stable." xml:space="preserve"> <source>- connect to [directory service](simplex:/contact#/?v=1-4&smp=smp%3A%2F%2Fu2dS9sG8nMNURyZwqASV4yROM28Er0luVTx5X1CsMrU%3D%40smp4.simplex.im%2FeXSPwqTkKyDO3px4fLf1wx3MvPdjdLW3%23%2F%3Fv%3D1-2%26dh%3DMCowBQYDK2VuAyEAaiv6MkMH44L2TcYrt_CsX3ZvM11WgbMEUn0hkIKTOho%253D%26srv%3Do5vmywmrnaxalvz6wi3zicyftgio6psuvyniis6gco6bp6ekl4cqj4id.onion) (BETA)! - delivery receipts (up to 20 members). - faster and more stable.</source> - <target>- підключитися до [сервера каталогів](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. цибуля) (БЕТА)! + <target>- підключитися до [сервера каталогів](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) (БЕТА)! - підтвердження доставлення (до 20 учасників). - швидше і стабільніше.</target> <note>No comment provided by engineer.</note> @@ -919,6 +918,10 @@ <target>Блокувати</target> <note>No comment provided by engineer.</note> </trans-unit> + <trans-unit id="Block for all" xml:space="preserve"> + <source>Block for all</source> + <note>No comment provided by engineer.</note> + </trans-unit> <trans-unit id="Block group members" xml:space="preserve"> <source>Block group members</source> <target>Учасники групи блокування</target> @@ -929,11 +932,19 @@ <target>Заблокувати користувача</target> <note>No comment provided by engineer.</note> </trans-unit> + <trans-unit id="Block member for all?" xml:space="preserve"> + <source>Block member for all?</source> + <note>No comment provided by engineer.</note> + </trans-unit> <trans-unit id="Block member?" xml:space="preserve"> <source>Block member?</source> <target>Заблокувати користувача?</target> <note>No comment provided by engineer.</note> </trans-unit> + <trans-unit id="Blocked by admin" xml:space="preserve"> + <source>Blocked by admin</source> + <note>No comment provided by engineer.</note> + </trans-unit> <trans-unit id="Both you and your contact can add message reactions." xml:space="preserve"> <source>Both you and your contact can add message reactions.</source> <target>Реакції на повідомлення можете додавати як ви, так і ваш контакт.</target> @@ -983,11 +994,6 @@ <source>Camera not available</source> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Can't delete user profile!" xml:space="preserve"> - <source>Can't delete user profile!</source> - <target>Не можу видалити профіль користувача!</target> - <note>No comment provided by engineer.</note> - </trans-unit> <trans-unit id="Can't invite contact!" xml:space="preserve"> <source>Can't invite contact!</source> <target>Не вдається запросити контакт!</target> @@ -4310,10 +4316,6 @@ Error: %@</source> <target>Сервери SMP</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Safer groups" xml:space="preserve"> - <source>Safer groups</source> - <note>No comment provided by engineer.</note> - </trans-unit> <trans-unit id="Save" xml:space="preserve"> <source>Save</source> <target>Зберегти</target> @@ -5121,16 +5123,6 @@ It can happen because of some bug or when the connection is compromised.</source <target>Тема</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="There should be at least one user profile." xml:space="preserve"> - <source>There should be at least one user profile.</source> - <target>Повинен бути принаймні один профіль користувача.</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="There should be at least one visible user profile." xml:space="preserve"> - <source>There should be at least one visible user profile.</source> - <target>Повинен бути принаймні один видимий профіль користувача.</target> - <note>No comment provided by engineer.</note> - </trans-unit> <trans-unit id="These settings are for your current profile **%@**." xml:space="preserve"> <source>These settings are for your current profile **%@**.</source> <target>Ці налаштування стосуються вашого поточного профілю **%@**.</target> @@ -5285,10 +5277,18 @@ You will be prompted to complete authentication before this feature is enabled.< <source>Unblock</source> <note>No comment provided by engineer.</note> </trans-unit> + <trans-unit id="Unblock for all" xml:space="preserve"> + <source>Unblock for all</source> + <note>No comment provided by engineer.</note> + </trans-unit> <trans-unit id="Unblock member" xml:space="preserve"> <source>Unblock member</source> <note>No comment provided by engineer.</note> </trans-unit> + <trans-unit id="Unblock member for all?" xml:space="preserve"> + <source>Unblock member for all?</source> + <note>No comment provided by engineer.</note> + </trans-unit> <trans-unit id="Unblock member?" xml:space="preserve"> <source>Unblock member?</source> <note>No comment provided by engineer.</note> @@ -6136,6 +6136,14 @@ SimpleX servers cannot see your profile.</source> <source>blocked</source> <note>No comment provided by engineer.</note> </trans-unit> + <trans-unit id="blocked %@" xml:space="preserve"> + <source>blocked %@</source> + <note>rcv group event chat item</note> + </trans-unit> + <trans-unit id="blocked by admin" xml:space="preserve"> + <source>blocked by admin</source> + <note>blocked chat item</note> + </trans-unit> <trans-unit id="bold" xml:space="preserve"> <source>bold</source> <target>жирний</target> @@ -6714,6 +6722,10 @@ SimpleX servers cannot see your profile.</source> <target>цей контакт</target> <note>notification title</note> </trans-unit> + <trans-unit id="unblocked %@" xml:space="preserve"> + <source>unblocked %@</source> + <note>rcv group event chat item</note> + </trans-unit> <trans-unit id="unknown" xml:space="preserve"> <source>unknown</source> <target>невідомий</target> @@ -6801,6 +6813,10 @@ SimpleX servers cannot see your profile.</source> <target>ви спостерігач</target> <note>No comment provided by engineer.</note> </trans-unit> + <trans-unit id="you blocked %@" xml:space="preserve"> + <source>you blocked %@</source> + <note>snd group event chat item</note> + </trans-unit> <trans-unit id="you changed address" xml:space="preserve"> <source>you changed address</source> <target>ви змінили адресу</target> @@ -6841,6 +6857,10 @@ SimpleX servers cannot see your profile.</source> <target>ви поділилися одноразовим посиланням інкогніто</target> <note>chat list item description</note> </trans-unit> + <trans-unit id="you unblocked %@" xml:space="preserve"> + <source>you unblocked %@</source> + <note>snd group event chat item</note> + </trans-unit> <trans-unit id="you: " xml:space="preserve"> <source>you: </source> <target>ти: </target> diff --git a/apps/ios/SimpleX Localizations/zh-Hans.xcloc/Localized Contents/zh-Hans.xliff b/apps/ios/SimpleX Localizations/zh-Hans.xcloc/Localized Contents/zh-Hans.xliff index 7f8207905..6209cfb41 100644 --- a/apps/ios/SimpleX Localizations/zh-Hans.xcloc/Localized Contents/zh-Hans.xliff +++ b/apps/ios/SimpleX Localizations/zh-Hans.xcloc/Localized Contents/zh-Hans.xliff @@ -212,6 +212,10 @@ <source>%lld messages blocked</source> <note>No comment provided by engineer.</note> </trans-unit> + <trans-unit id="%lld messages blocked by admin" xml:space="preserve"> + <source>%lld messages blocked by admin</source> + <note>No comment provided by engineer.</note> + </trans-unit> <trans-unit id="%lld messages marked deleted" xml:space="preserve"> <source>%lld messages marked deleted</source> <note>No comment provided by engineer.</note> @@ -361,11 +365,6 @@ <target>, </target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="- block a member to stop spam for all. - contact address is not shared." xml:space="preserve"> - <source>- block a member to stop spam for all. -- contact address is not shared.</source> - <note>No comment provided by engineer.</note> - </trans-unit> <trans-unit id="- connect to [directory service](simplex:/contact#/?v=1-4&smp=smp%3A%2F%2Fu2dS9sG8nMNURyZwqASV4yROM28Er0luVTx5X1CsMrU%3D%40smp4.simplex.im%2FeXSPwqTkKyDO3px4fLf1wx3MvPdjdLW3%23%2F%3Fv%3D1-2%26dh%3DMCowBQYDK2VuAyEAaiv6MkMH44L2TcYrt_CsX3ZvM11WgbMEUn0hkIKTOho%253D%26srv%3Do5vmywmrnaxalvz6wi3zicyftgio6psuvyniis6gco6bp6ekl4cqj4id.onion) (BETA)! - delivery receipts (up to 20 members). - faster and more stable." xml:space="preserve"> <source>- connect to [directory service](simplex:/contact#/?v=1-4&smp=smp%3A%2F%2Fu2dS9sG8nMNURyZwqASV4yROM28Er0luVTx5X1CsMrU%3D%40smp4.simplex.im%2FeXSPwqTkKyDO3px4fLf1wx3MvPdjdLW3%23%2F%3Fv%3D1-2%26dh%3DMCowBQYDK2VuAyEAaiv6MkMH44L2TcYrt_CsX3ZvM11WgbMEUn0hkIKTOho%253D%26srv%3Do5vmywmrnaxalvz6wi3zicyftgio6psuvyniis6gco6bp6ekl4cqj4id.onion) (BETA)! - delivery receipts (up to 20 members). @@ -900,6 +899,10 @@ <source>Block</source> <note>No comment provided by engineer.</note> </trans-unit> + <trans-unit id="Block for all" xml:space="preserve"> + <source>Block for all</source> + <note>No comment provided by engineer.</note> + </trans-unit> <trans-unit id="Block group members" xml:space="preserve"> <source>Block group members</source> <note>No comment provided by engineer.</note> @@ -908,10 +911,18 @@ <source>Block member</source> <note>No comment provided by engineer.</note> </trans-unit> + <trans-unit id="Block member for all?" xml:space="preserve"> + <source>Block member for all?</source> + <note>No comment provided by engineer.</note> + </trans-unit> <trans-unit id="Block member?" xml:space="preserve"> <source>Block member?</source> <note>No comment provided by engineer.</note> </trans-unit> + <trans-unit id="Blocked by admin" xml:space="preserve"> + <source>Blocked by admin</source> + <note>No comment provided by engineer.</note> + </trans-unit> <trans-unit id="Both you and your contact can add message reactions." xml:space="preserve"> <source>Both you and your contact can add message reactions.</source> <target>您和您的联系人都可以添加消息回应。</target> @@ -961,11 +972,6 @@ <source>Camera not available</source> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Can't delete user profile!" xml:space="preserve"> - <source>Can't delete user profile!</source> - <target>无法删除用户个人资料!</target> - <note>No comment provided by engineer.</note> - </trans-unit> <trans-unit id="Can't invite contact!" xml:space="preserve"> <source>Can't invite contact!</source> <target>无法邀请联系人!</target> @@ -4287,10 +4293,6 @@ Error: %@</source> <target>SMP 服务器</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="Safer groups" xml:space="preserve"> - <source>Safer groups</source> - <note>No comment provided by engineer.</note> - </trans-unit> <trans-unit id="Save" xml:space="preserve"> <source>Save</source> <target>保存</target> @@ -5100,16 +5102,6 @@ It can happen because of some bug or when the connection is compromised.</source <target>主题</target> <note>No comment provided by engineer.</note> </trans-unit> - <trans-unit id="There should be at least one user profile." xml:space="preserve"> - <source>There should be at least one user profile.</source> - <target>应该至少有一个用户资料。</target> - <note>No comment provided by engineer.</note> - </trans-unit> - <trans-unit id="There should be at least one visible user profile." xml:space="preserve"> - <source>There should be at least one visible user profile.</source> - <target>应该至少有一个可见的用户资料。</target> - <note>No comment provided by engineer.</note> - </trans-unit> <trans-unit id="These settings are for your current profile **%@**." xml:space="preserve"> <source>These settings are for your current profile **%@**.</source> <target>这些设置适用于您当前的配置文件 **%@**。</target> @@ -5265,10 +5257,18 @@ You will be prompted to complete authentication before this feature is enabled.< <source>Unblock</source> <note>No comment provided by engineer.</note> </trans-unit> + <trans-unit id="Unblock for all" xml:space="preserve"> + <source>Unblock for all</source> + <note>No comment provided by engineer.</note> + </trans-unit> <trans-unit id="Unblock member" xml:space="preserve"> <source>Unblock member</source> <note>No comment provided by engineer.</note> </trans-unit> + <trans-unit id="Unblock member for all?" xml:space="preserve"> + <source>Unblock member for all?</source> + <note>No comment provided by engineer.</note> + </trans-unit> <trans-unit id="Unblock member?" xml:space="preserve"> <source>Unblock member?</source> <note>No comment provided by engineer.</note> @@ -6116,6 +6116,14 @@ SimpleX 服务器无法看到您的资料。</target> <source>blocked</source> <note>No comment provided by engineer.</note> </trans-unit> + <trans-unit id="blocked %@" xml:space="preserve"> + <source>blocked %@</source> + <note>rcv group event chat item</note> + </trans-unit> + <trans-unit id="blocked by admin" xml:space="preserve"> + <source>blocked by admin</source> + <note>blocked chat item</note> + </trans-unit> <trans-unit id="bold" xml:space="preserve"> <source>bold</source> <target>加粗</target> @@ -6696,6 +6704,10 @@ SimpleX 服务器无法看到您的资料。</target> <target>这个联系人</target> <note>notification title</note> </trans-unit> + <trans-unit id="unblocked %@" xml:space="preserve"> + <source>unblocked %@</source> + <note>rcv group event chat item</note> + </trans-unit> <trans-unit id="unknown" xml:space="preserve"> <source>unknown</source> <target>未知</target> @@ -6783,6 +6795,10 @@ SimpleX 服务器无法看到您的资料。</target> <target>您是观察者</target> <note>No comment provided by engineer.</note> </trans-unit> + <trans-unit id="you blocked %@" xml:space="preserve"> + <source>you blocked %@</source> + <note>snd group event chat item</note> + </trans-unit> <trans-unit id="you changed address" xml:space="preserve"> <source>you changed address</source> <target>您已更改地址</target> @@ -6823,6 +6839,10 @@ SimpleX 服务器无法看到您的资料。</target> <target>您分享了一次性链接隐身聊天</target> <note>chat list item description</note> </trans-unit> + <trans-unit id="you unblocked %@" xml:space="preserve"> + <source>you unblocked %@</source> + <note>snd group event chat item</note> + </trans-unit> <trans-unit id="you: " xml:space="preserve"> <source>you: </source> <target>您: </target> diff --git a/apps/ios/bg.lproj/Localizable.strings b/apps/ios/bg.lproj/Localizable.strings index 6d18b1a40..4d0ee65e4 100644 --- a/apps/ios/bg.lproj/Localizable.strings +++ b/apps/ios/bg.lproj/Localizable.strings @@ -20,7 +20,7 @@ "_italic_" = "\\_курсив_"; /* No comment provided by engineer. */ -"- connect to [directory service](simplex:/contact#/?v=1-4&smp=smp%3A%2F%2Fu2dS9sG8nMNURyZwqASV4yROM28Er0luVTx5X1CsMrU%3D%40smp4.simplex.im%2FeXSPwqTkKyDO3px4fLf1wx3MvPdjdLW3%23%2F%3Fv%3D1-2%26dh%3DMCowBQYDK2VuAyEAaiv6MkMH44L2TcYrt_CsX3ZvM11WgbMEUn0hkIKTOho%253D%26srv%3Do5vmywmrnaxalvz6wi3zicyftgio6psuvyniis6gco6bp6ekl4cqj4id.onion) (BETA)!\n- delivery receipts (up to 20 members).\n- faster and more stable." = "- свържете се с [директория за услуги](simplex:/contact#/?v=1-4&smp=smp%3A%2F%2Fu2dS9sG8nMNURyZwqASV4yROM28Er0luVTx5X1CsMrU%3D%40smp4.simplex.im%2FeXSPwqTkKyDO3px4fLf1wx3MvPdjd LW3%23%2F%3Fv%3D1-2%26dh %3DMCowBQYDK2VuAyEAaiv6MkMH44L2TcYrt_CsX3ZvM11WgbMEUn0hkIKTOho%253D%26srv%3Do5vmywmrnaxalvz6wi3zicyftgio6psuvyniis6gco6bp6ekl4cqj4id.onion) (БЕТА)!\n- потвърждениe за доставка (до 20 члена).\n- по-бързо и по-стабилно."; +"- connect to [directory service](simplex:/contact#/?v=1-4&smp=smp%3A%2F%2Fu2dS9sG8nMNURyZwqASV4yROM28Er0luVTx5X1CsMrU%3D%40smp4.simplex.im%2FeXSPwqTkKyDO3px4fLf1wx3MvPdjdLW3%23%2F%3Fv%3D1-2%26dh%3DMCowBQYDK2VuAyEAaiv6MkMH44L2TcYrt_CsX3ZvM11WgbMEUn0hkIKTOho%253D%26srv%3Do5vmywmrnaxalvz6wi3zicyftgio6psuvyniis6gco6bp6ekl4cqj4id.onion) (BETA)!\n- delivery receipts (up to 20 members).\n- faster and more stable." = "- свържете се с [директория за услуги](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) (БЕТА)!\n- потвърждениe за доставка (до 20 члена).\n- по-бързо и по-стабилно."; /* No comment provided by engineer. */ "- more stable message delivery.\n- a bit better groups.\n- and more!" = "- по-стабилна доставка на съобщения.\n- малко по-добри групи.\n- и още!"; @@ -635,9 +635,6 @@ /* No comment provided by engineer. */ "Camera not available" = "Камерата е неодстъпна"; -/* No comment provided by engineer. */ -"Can't delete user profile!" = "Потребителският профил не може да се изтрие!"; - /* No comment provided by engineer. */ "Can't invite contact!" = "Не може да покани контакта!"; @@ -1299,6 +1296,9 @@ /* No comment provided by engineer. */ "Do it later" = "Отложи"; +/* No comment provided by engineer. */ +"Do not send history to new members." = "Не изпращай история на нови членове."; + /* No comment provided by engineer. */ "Do NOT use SimpleX for emergency calls." = "НЕ използвайте SimpleX за спешни повиквания."; @@ -1318,7 +1318,7 @@ "Download file" = "Свали файл"; /* No comment provided by engineer. */ -"Duplicate display name!" = "Дублирано показвано име!"; +"Duplicate display name!" = "Дублирано име!"; /* integrity error chat item */ "duplicate message" = "дублирано съобщение"; @@ -1783,7 +1783,7 @@ "group deleted" = "групата е изтрита"; /* No comment provided by engineer. */ -"Group display name" = "Показвано име на групата"; +"Group display name" = "Име на групата"; /* No comment provided by engineer. */ "Group full name (optional)" = "Пълно име на групата (незадължително)"; @@ -1878,6 +1878,9 @@ /* No comment provided by engineer. */ "History" = "История"; +/* No comment provided by engineer. */ +"History is not sent to new members." = "Историята не се изпраща на нови членове."; + /* time unit */ "hours" = "часове"; @@ -2019,6 +2022,9 @@ /* invalid chat item */ "invalid data" = "невалидни данни"; +/* No comment provided by engineer. */ +"Invalid display name!" = "Невалидно име!"; + /* No comment provided by engineer. */ "Invalid link" = "Невалиден линк"; @@ -2377,7 +2383,7 @@ "New desktop app!" = "Ново настолно приложение!"; /* No comment provided by engineer. */ -"New display name" = "Ново показвано име"; +"New display name" = "Ново име"; /* No comment provided by engineer. */ "New in %@" = "Ново в %@"; @@ -3074,6 +3080,9 @@ /* No comment provided by engineer. */ "Send them from gallery or custom keyboards." = "Изпрати от галерия или персонализирани клавиатури."; +/* No comment provided by engineer. */ +"Send up to 100 last messages to new members." = "Изпращане до последните 100 съобщения на нови членове."; + /* No comment provided by engineer. */ "Sender cancelled file transfer." = "Подателят отмени прехвърлянето на файла."; @@ -3431,12 +3440,6 @@ /* No comment provided by engineer. */ "Theme" = "Тема"; -/* No comment provided by engineer. */ -"There should be at least one user profile." = "Трябва да има поне един потребителски профил."; - -/* No comment provided by engineer. */ -"There should be at least one visible user profile." = "Трябва да има поне един видим потребителски профил."; - /* No comment provided by engineer. */ "These settings are for your current profile **%@**." = "Тези настройки са за текущия ви профил **%@**."; @@ -3458,6 +3461,9 @@ /* No comment provided by engineer. */ "This device name" = "Името на това устройство"; +/* No comment provided by engineer. */ +"This display name is invalid. Please choose another name." = "Това име е невалидно. Моля, изберете друго име."; + /* No comment provided by engineer. */ "This group has over %lld members, delivery receipts are not sent." = "Тази група има над %lld членове, потвърждения за доставка не се изпращат."; @@ -3593,6 +3599,9 @@ /* No comment provided by engineer. */ "Unread" = "Непрочетено"; +/* No comment provided by engineer. */ +"Up to 100 last messages are sent to new members." = "На новите членове се изпращат до последните 100 съобщения."; + /* No comment provided by engineer. */ "Update" = "Актуализация"; @@ -3719,6 +3728,9 @@ /* No comment provided by engineer. */ "View security code" = "Виж кода за сигурност"; +/* chat feature */ +"Visible history" = "Видима история"; + /* No comment provided by engineer. */ "Voice message…" = "Гласово съобщение…"; @@ -3807,7 +3819,7 @@ "You allow" = "Вие позволявате"; /* No comment provided by engineer. */ -"You already have a chat profile with the same display name. Please choose another name." = "Вече имате чат профил със същото показвано име. Моля, изберете друго име."; +"You already have a chat profile with the same display name. Please choose another name." = "Вече имате чат профил със същото име. Моля, изберете друго име."; /* No comment provided by engineer. */ "You are already connected to %@." = "Вече сте вече свързани с %@."; diff --git a/apps/ios/cs.lproj/Localizable.strings b/apps/ios/cs.lproj/Localizable.strings index d9cb01f5a..9d8bd1e4a 100644 --- a/apps/ios/cs.lproj/Localizable.strings +++ b/apps/ios/cs.lproj/Localizable.strings @@ -20,7 +20,7 @@ "_italic_" = "\\_kurzíva_"; /* No comment provided by engineer. */ -"- connect to [directory service](simplex:/contact#/?v=1-4&smp=smp%3A%2F%2Fu2dS9sG8nMNURyZwqASV4yROM28Er0luVTx5X1CsMrU%3D%40smp4.simplex.im%2FeXSPwqTkKyDO3px4fLf1wx3MvPdjdLW3%23%2F%3Fv%3D1-2%26dh%3DMCowBQYDK2VuAyEAaiv6MkMH44L2TcYrt_CsX3ZvM11WgbMEUn0hkIKTOho%253D%26srv%3Do5vmywmrnaxalvz6wi3zicyftgio6psuvyniis6gco6bp6ekl4cqj4id.onion) (BETA)!\n- delivery receipts (up to 20 members).\n- faster and more stable." = "- připojit k [adresářová služba](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.cibule) (BETA)!\n- doručenky (až 20 členů).\n- Rychlejší a stabilnější."; +"- connect to [directory service](simplex:/contact#/?v=1-4&smp=smp%3A%2F%2Fu2dS9sG8nMNURyZwqASV4yROM28Er0luVTx5X1CsMrU%3D%40smp4.simplex.im%2FeXSPwqTkKyDO3px4fLf1wx3MvPdjdLW3%23%2F%3Fv%3D1-2%26dh%3DMCowBQYDK2VuAyEAaiv6MkMH44L2TcYrt_CsX3ZvM11WgbMEUn0hkIKTOho%253D%26srv%3Do5vmywmrnaxalvz6wi3zicyftgio6psuvyniis6gco6bp6ekl4cqj4id.onion) (BETA)!\n- delivery receipts (up to 20 members).\n- faster and more stable." = "- připojit k [adresářová služba](simplex:/contact#/?v=1-4&smp=smp%3A%2F%2Fu2dS9sG8nMNURyZwqASV4yROM28Er0luVTx5X1CsMrU%3D%40smp4.simplex.im%2FeXSPwqTkKyDO3px4fLf1wx3MvPdjdLW3%23%2F%3Fv%3D1-2%26dh%3DMCowBQYDK2VuAyEAaiv6MkMH44L2TcYrt_CsX3ZvM11WgbMEUn0hkIKTOho%253D%26srv%3Do5vmywmrnaxalvz6wi3zicyftgio6psuvyniis6gco6bp6ekl4cqj4id.onion) (BETA)!\n- doručenky (až 20 členů).\n- Rychlejší a stabilnější."; /* No comment provided by engineer. */ "- more stable message delivery.\n- a bit better groups.\n- and more!" = "- více stabilní doručování zpráv.\n- o trochu lepší skupiny.\n- a více!"; @@ -560,9 +560,6 @@ /* No comment provided by engineer. */ "Calls" = "Hovory"; -/* No comment provided by engineer. */ -"Can't delete user profile!" = "Nemohu smazat uživatelský profil!"; - /* No comment provided by engineer. */ "Can't invite contact!" = "Nelze pozvat kontakt!"; @@ -3104,12 +3101,6 @@ /* No comment provided by engineer. */ "Theme" = "Téma"; -/* No comment provided by engineer. */ -"There should be at least one user profile." = "Měl by tam být alespoň jeden uživatelský profil."; - -/* No comment provided by engineer. */ -"There should be at least one visible user profile." = "Měl by tam být alespoň jeden viditelný uživatelský profil."; - /* No comment provided by engineer. */ "These settings are for your current profile **%@**." = "Toto nastavení je pro váš aktuální profil **%@**."; diff --git a/apps/ios/de.lproj/Localizable.strings b/apps/ios/de.lproj/Localizable.strings index 7f898d914..d5355de81 100644 --- a/apps/ios/de.lproj/Localizable.strings +++ b/apps/ios/de.lproj/Localizable.strings @@ -29,7 +29,7 @@ "- optionally notify deleted contacts.\n- profile names with spaces.\n- and more!" = "- Optionale Benachrichtigung von gelöschten Kontakten.\n- Profilnamen mit Leerzeichen.\n- Und mehr!"; /* No comment provided by engineer. */ -"- voice messages up to 5 minutes.\n- custom time to disappear.\n- editing history." = "- Bis zu 5 Minuten lange Sprachnachrichten.\n- Zeitdauer für verschwindende Nachrichten anpassen.\n- Nachrichten-Verlauf bearbeiten."; +"- voice messages up to 5 minutes.\n- custom time to disappear.\n- editing history." = "- Bis zu 5 Minuten lange Sprachnachrichten\n- Zeitdauer für verschwindende Nachrichten anpassen\n- Nachrichtenverlauf bearbeiten"; /* No comment provided by engineer. */ ", " = ", "; @@ -101,7 +101,7 @@ "# %@" = "# %@"; /* copied message info */ -"## History" = "## Verlauf"; +"## History" = "## Nachrichtenverlauf"; /* copied message info */ "## In reply to" = "## Als Antwort auf"; @@ -635,9 +635,6 @@ /* No comment provided by engineer. */ "Camera not available" = "Kamera nicht verfügbar"; -/* No comment provided by engineer. */ -"Can't delete user profile!" = "Das Benutzerprofil kann nicht gelöscht werden!"; - /* No comment provided by engineer. */ "Can't invite contact!" = "Kontakt kann nicht eingeladen werden!"; @@ -1299,6 +1296,9 @@ /* No comment provided by engineer. */ "Do it later" = "Später wiederholen"; +/* No comment provided by engineer. */ +"Do not send history to new members." = "Den Nachrichtenverlauf nicht an neue Mitglieder senden."; + /* No comment provided by engineer. */ "Do NOT use SimpleX for emergency calls." = "Nutzen Sie SimpleX nicht für Notrufe."; @@ -1876,7 +1876,10 @@ "Hide:" = "Verberge:"; /* No comment provided by engineer. */ -"History" = "Verlauf"; +"History" = "Nachrichtenverlauf"; + +/* No comment provided by engineer. */ +"History is not sent to new members." = "Der Nachrichtenverlauf wird nicht an neue Gruppenmitglieder gesendet."; /* time unit */ "hours" = "Stunden"; @@ -2019,6 +2022,9 @@ /* invalid chat item */ "invalid data" = "Ungültige Daten"; +/* No comment provided by engineer. */ +"Invalid display name!" = "Ungültiger Anzeigename!"; + /* No comment provided by engineer. */ "Invalid link" = "Ungültiger Link"; @@ -2428,7 +2434,7 @@ "No group!" = "Die Gruppe wurde nicht gefunden!"; /* No comment provided by engineer. */ -"No history" = "Kein Verlauf"; +"No history" = "Kein Nachrichtenverlauf"; /* No comment provided by engineer. */ "No permission to record voice message" = "Keine Berechtigung für das Aufnehmen von Sprachnachrichten"; @@ -3074,6 +3080,9 @@ /* No comment provided by engineer. */ "Send them from gallery or custom keyboards." = "Senden Sie diese aus dem Fotoalbum oder von individuellen Tastaturen."; +/* No comment provided by engineer. */ +"Send up to 100 last messages to new members." = "Bis zu 100 der letzten Nachrichten an neue Gruppenmitglieder senden."; + /* No comment provided by engineer. */ "Sender cancelled file transfer." = "Der Absender hat die Dateiübertragung abgebrochen."; @@ -3431,12 +3440,6 @@ /* No comment provided by engineer. */ "Theme" = "Design"; -/* No comment provided by engineer. */ -"There should be at least one user profile." = "Es muss mindestens ein Benutzer-Profil vorhanden sein."; - -/* No comment provided by engineer. */ -"There should be at least one visible user profile." = "Es muss mindestens ein sichtbares Benutzer-Profil vorhanden sein."; - /* No comment provided by engineer. */ "These settings are for your current profile **%@**." = "Diese Einstellungen betreffen Ihr aktuelles Profil **%@**."; @@ -3458,6 +3461,9 @@ /* No comment provided by engineer. */ "This device name" = "Dieser Gerätename"; +/* No comment provided by engineer. */ +"This display name is invalid. Please choose another name." = "Der Anzeigename ist ungültig. Bitte wählen Sie einen anderen Namen."; + /* No comment provided by engineer. */ "This group has over %lld members, delivery receipts are not sent." = "Es werden keine Empfangsbestätigungen gesendet, da diese Gruppe über %lld Mitglieder hat."; @@ -3593,6 +3599,9 @@ /* No comment provided by engineer. */ "Unread" = "Ungelesen"; +/* No comment provided by engineer. */ +"Up to 100 last messages are sent to new members." = "Bis zu 100 der letzten Nachrichten werden an neue Mitglieder gesendet."; + /* No comment provided by engineer. */ "Update" = "Aktualisieren"; @@ -3719,6 +3728,9 @@ /* No comment provided by engineer. */ "View security code" = "Schauen Sie sich den Sicherheitscode an"; +/* chat feature */ +"Visible history" = "Sichtbarer Nachrichtenverlauf"; + /* No comment provided by engineer. */ "Voice message…" = "Sprachnachrichten…"; @@ -3978,7 +3990,7 @@ "You will still receive calls and notifications from muted profiles when they are active." = "Sie können Anrufe und Benachrichtigungen auch von stummgeschalteten Profilen empfangen, solange diese aktiv sind."; /* No comment provided by engineer. */ -"You will stop receiving messages from this group. Chat history will be preserved." = "Sie werden von dieser Gruppe keine Nachrichten mehr erhalten. Der Chatverlauf wird beibehalten."; +"You will stop receiving messages from this group. Chat history will be preserved." = "Sie werden von dieser Gruppe keine Nachrichten mehr erhalten. Der Nachrichtenverlauf wird beibehalten."; /* No comment provided by engineer. */ "You won't lose your contacts if you later delete your address." = "Sie werden Ihre damit verbundenen Kontakte nicht verlieren, wenn Sie diese Adresse später löschen."; diff --git a/apps/ios/es.lproj/Localizable.strings b/apps/ios/es.lproj/Localizable.strings index a7742c420..25ca04f24 100644 --- a/apps/ios/es.lproj/Localizable.strings +++ b/apps/ios/es.lproj/Localizable.strings @@ -635,9 +635,6 @@ /* No comment provided by engineer. */ "Camera not available" = "Cámara no disponible"; -/* No comment provided by engineer. */ -"Can't delete user profile!" = "¡No se puede eliminar el perfil!"; - /* No comment provided by engineer. */ "Can't invite contact!" = "¡No se puede invitar el contacto!"; @@ -3431,12 +3428,6 @@ /* No comment provided by engineer. */ "Theme" = "Tema"; -/* No comment provided by engineer. */ -"There should be at least one user profile." = "Debe haber al menos un perfil."; - -/* No comment provided by engineer. */ -"There should be at least one visible user profile." = "Debe haber al menos un perfil visible."; - /* No comment provided by engineer. */ "These settings are for your current profile **%@**." = "Esta configuración afecta a tu perfil actual **%@**."; diff --git a/apps/ios/fi.lproj/Localizable.strings b/apps/ios/fi.lproj/Localizable.strings index 5aa5fb68f..2478658ac 100644 --- a/apps/ios/fi.lproj/Localizable.strings +++ b/apps/ios/fi.lproj/Localizable.strings @@ -545,9 +545,6 @@ /* No comment provided by engineer. */ "Calls" = "Puhelut"; -/* No comment provided by engineer. */ -"Can't delete user profile!" = "Käyttäjäprofiilia ei voi poistaa!"; - /* No comment provided by engineer. */ "Can't invite contact!" = "Kontaktia ei voi kutsua!"; @@ -3065,12 +3062,6 @@ /* No comment provided by engineer. */ "Theme" = "Teema"; -/* No comment provided by engineer. */ -"There should be at least one user profile." = "Käyttäjäprofiileja tulee olla vähintään yksi."; - -/* No comment provided by engineer. */ -"There should be at least one visible user profile." = "Näkyviä käyttäjäprofiileja tulee olla vähintään yksi."; - /* No comment provided by engineer. */ "These settings are for your current profile **%@**." = "Nämä asetukset koskevat nykyistä profiiliasi **%@**."; diff --git a/apps/ios/fr.lproj/Localizable.strings b/apps/ios/fr.lproj/Localizable.strings index 9349e636f..fb202c4f2 100644 --- a/apps/ios/fr.lproj/Localizable.strings +++ b/apps/ios/fr.lproj/Localizable.strings @@ -398,6 +398,9 @@ /* No comment provided by engineer. */ "All group members will remain connected." = "Tous les membres du groupe resteront connectés."; +/* 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 !"; + /* No comment provided by engineer. */ "All messages will be deleted - this cannot be undone! The messages will be deleted ONLY for you." = "Tous les messages seront supprimés - impossible de revenir en arrière ! Les messages seront supprimés UNIQUEMENT pour vous."; @@ -635,9 +638,6 @@ /* No comment provided by engineer. */ "Camera not available" = "Caméra non disponible"; -/* No comment provided by engineer. */ -"Can't delete user profile!" = "Impossible de supprimer le profil d'utilisateur !"; - /* No comment provided by engineer. */ "Can't invite contact!" = "Impossible d'inviter le contact !"; @@ -753,6 +753,9 @@ /* No comment provided by engineer. */ "Clear conversation?" = "Effacer la conversation ?"; +/* No comment provided by engineer. */ +"Clear private notes?" = "Effacer les notes privées ?"; + /* No comment provided by engineer. */ "Clear verification" = "Retirer la vérification"; @@ -891,6 +894,9 @@ /* connection information */ "connection:%@" = "connexion : %@"; +/* profile update event chat item */ +"contact %@ changed to %@" = "le contact %1$@ est devenu %2$@"; + /* No comment provided by engineer. */ "Contact allows" = "Votre contact autorise"; @@ -975,6 +981,12 @@ /* No comment provided by engineer. */ "Create your profile" = "Créez votre profil"; +/* No comment provided by engineer. */ +"Created at" = "Créé à"; + +/* copied message info */ +"Created at: %@" = "Créé à : %@"; + /* No comment provided by engineer. */ "Created on %@" = "Créé le %@"; @@ -1299,6 +1311,9 @@ /* No comment provided by engineer. */ "Do it later" = "Faites-le plus tard"; +/* No comment provided by engineer. */ +"Do not send history to new members." = "Ne pas envoyer d'historique aux nouveaux membres."; + /* No comment provided by engineer. */ "Do NOT use SimpleX for emergency calls." = "N'utilisez PAS SimpleX pour les appels d'urgence."; @@ -1524,6 +1539,9 @@ /* No comment provided by engineer. */ "Error creating member contact" = "Erreur lors de la création du contact du membre"; +/* No comment provided by engineer. */ +"Error creating message" = "Erreur lors de la création du message"; + /* No comment provided by engineer. */ "Error creating profile!" = "Erreur lors de la création du profil !"; @@ -1878,6 +1896,9 @@ /* No comment provided by engineer. */ "History" = "Historique"; +/* No comment provided by engineer. */ +"History is not sent to new members." = "L'historique n'est pas envoyé aux nouveaux membres."; + /* time unit */ "hours" = "heures"; @@ -1935,6 +1956,9 @@ /* No comment provided by engineer. */ "Import database" = "Importer la base de données"; +/* No comment provided by engineer. */ +"Improved message delivery" = "Amélioration de la transmission des messages"; + /* No comment provided by engineer. */ "Improved privacy and security" = "Une meilleure sécurité et protection de la vie privée"; @@ -2019,6 +2043,9 @@ /* invalid chat item */ "invalid data" = "données invalides"; +/* No comment provided by engineer. */ +"Invalid display name!" = "Nom d'affichage invalide !"; + /* No comment provided by engineer. */ "Invalid link" = "Lien invalide"; @@ -2109,6 +2136,9 @@ /* No comment provided by engineer. */ "Join group" = "Rejoindre le groupe"; +/* No comment provided by engineer. */ +"Join group conversations" = "Participez aux conversations de groupe"; + /* No comment provided by engineer. */ "Join group?" = "Rejoindre le groupe ?"; @@ -2244,6 +2274,9 @@ /* No comment provided by engineer. */ "Member" = "Membre"; +/* profile update event chat item */ +"member %@ changed to %@" = "le membre %1$@ est devenu %2$@"; + /* rcv group event chat item */ "member connected" = "est connecté·e"; @@ -2588,12 +2621,18 @@ /* No comment provided by engineer. */ "Password to show" = "Mot de passe à entrer"; +/* past/unknown group member */ +"Past member %@" = "Ancien membre %@"; + /* No comment provided by engineer. */ "Paste desktop address" = "Coller l'adresse du bureau"; /* No comment provided by engineer. */ "Paste image" = "Coller l'image"; +/* No comment provided by engineer. */ +"Paste link to connect!" = "Collez le lien pour vous connecter !"; + /* No comment provided by engineer. */ "Paste the link you received" = "Collez le lien que vous avez reçu"; @@ -2681,6 +2720,9 @@ /* No comment provided by engineer. */ "Private filenames" = "Noms de fichiers privés"; +/* name of notes to self */ +"Private notes" = "Notes privées"; + /* No comment provided by engineer. */ "Profile and server connections" = "Profil et connexions au serveur"; @@ -2795,6 +2837,9 @@ /* No comment provided by engineer. */ "Receiving via" = "Réception via"; +/* No comment provided by engineer. */ +"Recent history and improved [directory bot](simplex:/contact#/?v=1-4&smp=smp%3A%2F%2Fu2dS9sG8nMNURyZwqASV4yROM28Er0luVTx5X1CsMrU%3D%40smp4.simplex.im%2FeXSPwqTkKyDO3px4fLf1wx3MvPdjdLW3%23%2F%3Fv%3D1-2%26dh%3DMCowBQYDK2VuAyEAaiv6MkMH44L2TcYrt_CsX3ZvM11WgbMEUn0hkIKTOho%253D%26srv%3Do5vmywmrnaxalvz6wi3zicyftgio6psuvyniis6gco6bp6ekl4cqj4id.onion)." = "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. */ "Recipients see updates as you type them." = "Les destinataires voient les mises à jour au fur et à mesure que vous leur écrivez."; @@ -2849,6 +2894,12 @@ /* rcv group event chat item */ "removed %@" = "a retiré %@"; +/* profile update event chat item */ +"removed contact address" = "suppression de l'adresse de contact"; + +/* profile update event chat item */ +"removed profile picture" = "suppression de la photo de profil"; + /* rcv group event chat item */ "removed you" = "vous a retiré"; @@ -2972,6 +3023,9 @@ /* No comment provided by engineer. */ "Save welcome message?" = "Enregistrer le message d'accueil ?"; +/* message info title */ +"Saved message" = "Message enregistré"; + /* No comment provided by engineer. */ "Saved WebRTC ICE servers will be removed" = "Les serveurs WebRTC ICE sauvegardés seront supprimés"; @@ -2993,6 +3047,9 @@ /* No comment provided by engineer. */ "Search" = "Rechercher"; +/* No comment provided by engineer. */ +"Search bar accepts invitation links." = "La barre de recherche accepte les liens d'invitation."; + /* No comment provided by engineer. */ "Search or paste SimpleX link" = "Rechercher ou coller un lien SimpleX"; @@ -3074,6 +3131,9 @@ /* No comment provided by engineer. */ "Send them from gallery or custom keyboards." = "Envoyez-les depuis la phototèque ou des claviers personnalisés."; +/* No comment provided by engineer. */ +"Send up to 100 last messages to new members." = "Envoi des 100 derniers messages aux nouveaux membres."; + /* No comment provided by engineer. */ "Sender cancelled file transfer." = "L'expéditeur a annulé le transfert de fichiers."; @@ -3146,6 +3206,12 @@ /* No comment provided by engineer. */ "Set it instead of system authentication." = "Il permet de remplacer l'authentification du système."; +/* profile update event chat item */ +"set new contact address" = "définir une nouvelle adresse de contact"; + +/* profile update event chat item */ +"set new profile picture" = "définir une nouvelle image de profil"; + /* No comment provided by engineer. */ "Set passcode" = "Définir le code d'accès"; @@ -3431,12 +3497,6 @@ /* No comment provided by engineer. */ "Theme" = "Thème"; -/* No comment provided by engineer. */ -"There should be at least one user profile." = "Il doit y avoir au moins un profil d'utilisateur."; - -/* No comment provided by engineer. */ -"There should be at least one visible user profile." = "Il doit y avoir au moins un profil d'utilisateur visible."; - /* No comment provided by engineer. */ "These settings are for your current profile **%@**." = "Ces paramètres s'appliquent à votre profil actuel **%@**."; @@ -3458,6 +3518,9 @@ /* No comment provided by engineer. */ "This device name" = "Nom de cet appareil"; +/* No comment provided by engineer. */ +"This display name is invalid. Please choose another name." = "Ce nom d'affichage est invalide. Veuillez choisir un autre nom."; + /* No comment provided by engineer. */ "This group has over %lld members, delivery receipts are not sent." = "Ce groupe compte plus de %lld membres, les accusés de réception ne sont pas envoyés."; @@ -3518,6 +3581,9 @@ /* No comment provided by engineer. */ "Trying to connect to the server used to receive messages from this contact." = "Tentative de connexion au serveur utilisé pour recevoir les messages de ce contact."; +/* No comment provided by engineer. */ +"Turkish interface" = "Interface en turc"; + /* No comment provided by engineer. */ "Turn off" = "Désactiver"; @@ -3569,6 +3635,9 @@ /* No comment provided by engineer. */ "Unknown error" = "Erreur inconnue"; +/* No comment provided by engineer. */ +"unknown status" = "statut inconnu"; + /* No comment provided by engineer. */ "Unless you use iOS call interface, enable Do Not Disturb mode to avoid interruptions." = "À moins que vous utilisiez l'interface d'appel d'iOS, activez le mode \"Ne pas déranger\" pour éviter les interruptions."; @@ -3593,6 +3662,9 @@ /* No comment provided by engineer. */ "Unread" = "Non lu"; +/* No comment provided by engineer. */ +"Up to 100 last messages are sent to new members." = "Les 100 derniers messages sont envoyés aux nouveaux membres."; + /* No comment provided by engineer. */ "Update" = "Mise à jour"; @@ -3611,6 +3683,9 @@ /* rcv group event chat item */ "updated group profile" = "mise à jour du profil de groupe"; +/* profile update event chat item */ +"updated profile" = "profil mis à jour"; + /* No comment provided by engineer. */ "Updating settings will re-connect the client to all servers." = "La mise à jour des ces paramètres reconnectera le client à tous les serveurs."; @@ -3719,6 +3794,9 @@ /* No comment provided by engineer. */ "View security code" = "Afficher le code de sécurité"; +/* chat feature */ +"Visible history" = "Historique visible"; + /* No comment provided by engineer. */ "Voice message…" = "Message vocal…"; @@ -3782,9 +3860,15 @@ /* 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. */ +"With encrypted files and media." = "Avec les fichiers et les médias chiffrés."; + /* No comment provided by engineer. */ "With optional welcome message." = "Avec message de bienvenue facultatif."; +/* No comment provided by engineer. */ +"With reduced battery usage." = "Consommation réduite de la batterie."; + /* No comment provided by engineer. */ "Wrong database passphrase" = "Mauvaise phrase secrète pour la base de données"; diff --git a/apps/ios/it.lproj/Localizable.strings b/apps/ios/it.lproj/Localizable.strings index 963212059..2980ee76b 100644 --- a/apps/ios/it.lproj/Localizable.strings +++ b/apps/ios/it.lproj/Localizable.strings @@ -398,6 +398,9 @@ /* No comment provided by engineer. */ "All group members will remain connected." = "Tutti i membri del gruppo resteranno connessi."; +/* No comment provided by engineer. */ +"All messages will be deleted - this cannot be undone!" = "Tutti i messaggi verranno eliminati, non è reversibile!"; + /* No comment provided by engineer. */ "All messages will be deleted - this cannot be undone! The messages will be deleted ONLY for you." = "Tutti i messaggi verranno eliminati, non è reversibile! I messaggi verranno eliminati SOLO per te."; @@ -635,9 +638,6 @@ /* No comment provided by engineer. */ "Camera not available" = "Fotocamera non disponibile"; -/* No comment provided by engineer. */ -"Can't delete user profile!" = "Impossibile eliminare il profilo utente!"; - /* No comment provided by engineer. */ "Can't invite contact!" = "Impossibile invitare il contatto!"; @@ -753,6 +753,9 @@ /* No comment provided by engineer. */ "Clear conversation?" = "Svuotare la conversazione?"; +/* No comment provided by engineer. */ +"Clear private notes?" = "Svuotare le note private?"; + /* No comment provided by engineer. */ "Clear verification" = "Annulla la verifica"; @@ -891,6 +894,9 @@ /* connection information */ "connection:%@" = "connessione:% @"; +/* profile update event chat item */ +"contact %@ changed to %@" = "contatto %1$@ cambiato in %2$@"; + /* No comment provided by engineer. */ "Contact allows" = "Il contatto lo consente"; @@ -975,6 +981,12 @@ /* No comment provided by engineer. */ "Create your profile" = "Crea il tuo profilo"; +/* No comment provided by engineer. */ +"Created at" = "Creato il"; + +/* copied message info */ +"Created at: %@" = "Creato il: %@"; + /* No comment provided by engineer. */ "Created on %@" = "Creato il %@"; @@ -1299,6 +1311,9 @@ /* No comment provided by engineer. */ "Do it later" = "Fallo dopo"; +/* No comment provided by engineer. */ +"Do not send history to new members." = "Non inviare la cronologia ai nuovi membri."; + /* No comment provided by engineer. */ "Do NOT use SimpleX for emergency calls." = "NON usare SimpleX per chiamate di emergenza."; @@ -1524,6 +1539,9 @@ /* No comment provided by engineer. */ "Error creating member contact" = "Errore di creazione del contatto"; +/* No comment provided by engineer. */ +"Error creating message" = "Errore di creazione del messaggio"; + /* No comment provided by engineer. */ "Error creating profile!" = "Errore nella creazione del profilo!"; @@ -1878,6 +1896,9 @@ /* No comment provided by engineer. */ "History" = "Cronologia"; +/* No comment provided by engineer. */ +"History is not sent to new members." = "La cronologia non viene inviata ai nuovi membri."; + /* time unit */ "hours" = "ore"; @@ -1935,6 +1956,9 @@ /* No comment provided by engineer. */ "Import database" = "Importa database"; +/* No comment provided by engineer. */ +"Improved message delivery" = "Consegna dei messaggi migliorata"; + /* No comment provided by engineer. */ "Improved privacy and security" = "Privacy e sicurezza migliorate"; @@ -2019,6 +2043,9 @@ /* invalid chat item */ "invalid data" = "dati non validi"; +/* No comment provided by engineer. */ +"Invalid display name!" = "Nome da mostrare non valido!"; + /* No comment provided by engineer. */ "Invalid link" = "Link non valido"; @@ -2109,6 +2136,9 @@ /* No comment provided by engineer. */ "Join group" = "Entra nel gruppo"; +/* No comment provided by engineer. */ +"Join group conversations" = "Entra in conversazioni di gruppo"; + /* No comment provided by engineer. */ "Join group?" = "Entrare nel gruppo?"; @@ -2244,6 +2274,9 @@ /* No comment provided by engineer. */ "Member" = "Membro"; +/* profile update event chat item */ +"member %@ changed to %@" = "membro %1$@ cambiato in %2$@"; + /* rcv group event chat item */ "member connected" = "si è connesso/a"; @@ -2588,12 +2621,18 @@ /* No comment provided by engineer. */ "Password to show" = "Password per mostrare"; +/* past/unknown group member */ +"Past member %@" = "Membro passato %@"; + /* No comment provided by engineer. */ "Paste desktop address" = "Incolla l'indirizzo desktop"; /* No comment provided by engineer. */ "Paste image" = "Incolla immagine"; +/* No comment provided by engineer. */ +"Paste link to connect!" = "Incolla un link per connettere!"; + /* No comment provided by engineer. */ "Paste the link you received" = "Incolla il link che hai ricevuto"; @@ -2681,6 +2720,9 @@ /* No comment provided by engineer. */ "Private filenames" = "Nomi di file privati"; +/* name of notes to self */ +"Private notes" = "Note private"; + /* No comment provided by engineer. */ "Profile and server connections" = "Profilo e connessioni al server"; @@ -2795,6 +2837,9 @@ /* No comment provided by engineer. */ "Receiving via" = "Ricezione via"; +/* No comment provided by engineer. */ +"Recent history and improved [directory bot](simplex:/contact#/?v=1-4&smp=smp%3A%2F%2Fu2dS9sG8nMNURyZwqASV4yROM28Er0luVTx5X1CsMrU%3D%40smp4.simplex.im%2FeXSPwqTkKyDO3px4fLf1wx3MvPdjdLW3%23%2F%3Fv%3D1-2%26dh%3DMCowBQYDK2VuAyEAaiv6MkMH44L2TcYrt_CsX3ZvM11WgbMEUn0hkIKTOho%253D%26srv%3Do5vmywmrnaxalvz6wi3zicyftgio6psuvyniis6gco6bp6ekl4cqj4id.onion)." = "Cronologia recente e [bot della directory](simplex:/contact#/?v=1-4&smp=smp%3A%2F%2Fu2dS9sG8nMNURyZwqASV4yROM28Er0luVTx5X1CsMrU%3D%40smp4.simplex.im%2FeXSPwqTkKyDO3px4fLf1wx3MvPdjdLW3%23%2F%3Fv%3D1-2%26dh%3DMCowBQYDK2VuAyEAaiv6MkMH44L2TcYrt_CsX3ZvM11WgbMEUn0hkIKTOho%253D%26srv%3Do5vmywmrnaxalvz6wi3zicyftgio6psuvyniis6gco6bp6ekl4cqj4id.onion) migliorato."; + /* No comment provided by engineer. */ "Recipients see updates as you type them." = "I destinatari vedono gli aggiornamenti mentre li digiti."; @@ -2849,6 +2894,12 @@ /* rcv group event chat item */ "removed %@" = "ha rimosso %@"; +/* profile update event chat item */ +"removed contact address" = "indirizzo di contatto rimosso"; + +/* profile update event chat item */ +"removed profile picture" = "immagine del profilo rimossa"; + /* rcv group event chat item */ "removed you" = "ti ha rimosso/a"; @@ -2972,6 +3023,9 @@ /* No comment provided by engineer. */ "Save welcome message?" = "Salvare il messaggio di benvenuto?"; +/* message info title */ +"Saved message" = "Messaggio salvato"; + /* No comment provided by engineer. */ "Saved WebRTC ICE servers will be removed" = "I server WebRTC ICE salvati verranno rimossi"; @@ -2993,6 +3047,9 @@ /* No comment provided by engineer. */ "Search" = "Cerca"; +/* No comment provided by engineer. */ +"Search bar accepts invitation links." = "La barra di ricerca accetta i link di invito."; + /* No comment provided by engineer. */ "Search or paste SimpleX link" = "Cerca o incolla un link SimpleX"; @@ -3074,6 +3131,9 @@ /* No comment provided by engineer. */ "Send them from gallery or custom keyboards." = "Inviali dalla galleria o dalle tastiere personalizzate."; +/* No comment provided by engineer. */ +"Send up to 100 last messages to new members." = "Invia fino a 100 ultimi messaggi ai nuovi membri."; + /* No comment provided by engineer. */ "Sender cancelled file transfer." = "Il mittente ha annullato il trasferimento del file."; @@ -3146,6 +3206,12 @@ /* No comment provided by engineer. */ "Set it instead of system authentication." = "Impostalo al posto dell'autenticazione di sistema."; +/* profile update event chat item */ +"set new contact address" = "impostato nuovo indirizzo di contatto"; + +/* profile update event chat item */ +"set new profile picture" = "impostata nuova immagine del profilo"; + /* No comment provided by engineer. */ "Set passcode" = "Imposta codice"; @@ -3431,12 +3497,6 @@ /* No comment provided by engineer. */ "Theme" = "Tema"; -/* No comment provided by engineer. */ -"There should be at least one user profile." = "Deve esserci almeno un profilo utente."; - -/* No comment provided by engineer. */ -"There should be at least one visible user profile." = "Deve esserci almeno un profilo utente visibile."; - /* No comment provided by engineer. */ "These settings are for your current profile **%@**." = "Queste impostazioni sono per il tuo profilo attuale **%@**."; @@ -3458,6 +3518,9 @@ /* No comment provided by engineer. */ "This device name" = "Il nome di questo dispositivo"; +/* No comment provided by engineer. */ +"This display name is invalid. Please choose another name." = "Questo nome da mostrare non è valido. Scegline un altro."; + /* No comment provided by engineer. */ "This group has over %lld members, delivery receipts are not sent." = "Questo gruppo ha più di %lld membri, le ricevute di consegna non vengono inviate."; @@ -3518,6 +3581,9 @@ /* No comment provided by engineer. */ "Trying to connect to the server used to receive messages from this contact." = "Tentativo di connessione al server usato per ricevere messaggi da questo contatto."; +/* No comment provided by engineer. */ +"Turkish interface" = "Interfaccia in turco"; + /* No comment provided by engineer. */ "Turn off" = "Spegni"; @@ -3569,6 +3635,9 @@ /* No comment provided by engineer. */ "Unknown error" = "Errore sconosciuto"; +/* No comment provided by engineer. */ +"unknown status" = "stato sconosciuto"; + /* No comment provided by engineer. */ "Unless you use iOS call interface, enable Do Not Disturb mode to avoid interruptions." = "A meno che non utilizzi l'interfaccia di chiamata iOS, attiva la modalità Non disturbare per evitare interruzioni."; @@ -3593,6 +3662,9 @@ /* No comment provided by engineer. */ "Unread" = "Non letto"; +/* No comment provided by engineer. */ +"Up to 100 last messages are sent to new members." = "Vengono inviati ai nuovi membri fino a 100 ultimi messaggi."; + /* No comment provided by engineer. */ "Update" = "Aggiorna"; @@ -3611,6 +3683,9 @@ /* rcv group event chat item */ "updated group profile" = "ha aggiornato il profilo del gruppo"; +/* profile update event chat item */ +"updated profile" = "profilo aggiornato"; + /* No comment provided by engineer. */ "Updating settings will re-connect the client to all servers." = "L'aggiornamento delle impostazioni riconnetterà il client a tutti i server."; @@ -3719,6 +3794,9 @@ /* No comment provided by engineer. */ "View security code" = "Vedi codice di sicurezza"; +/* chat feature */ +"Visible history" = "Cronologia visibile"; + /* No comment provided by engineer. */ "Voice message…" = "Messaggio vocale…"; @@ -3782,9 +3860,15 @@ /* 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." = "Quando condividi un profilo in incognito con qualcuno, questo profilo verrà utilizzato per i gruppi a cui ti invitano."; +/* No comment provided by engineer. */ +"With encrypted files and media." = "Con file e multimediali criptati."; + /* No comment provided by engineer. */ "With optional welcome message." = "Con messaggio di benvenuto facoltativo."; +/* No comment provided by engineer. */ +"With reduced battery usage." = "Con consumo di batteria ridotto."; + /* No comment provided by engineer. */ "Wrong database passphrase" = "Password del database sbagliata"; @@ -3906,7 +3990,7 @@ "you changed role of %@ to %@" = "hai cambiato il ruolo di %1$@ in %2$@"; /* No comment provided by engineer. */ -"You control through which server(s) **to receive** the messages, your contacts – the servers you use to message them." = "Puoi controllare attraverso quale/i server **ricevere** i messaggi, i tuoi contatti – i server che usi per inviare loro i messaggi."; +"You control through which server(s) **to receive** the messages, your contacts – the servers you use to message them." = "Tu decidi attraverso quale/i server **ricevere** i messaggi, i tuoi contatti quali server usi per inviare loro i messaggi."; /* No comment provided by engineer. */ "You could not be verified; please try again." = "Non è stato possibile verificarti, riprova."; diff --git a/apps/ios/ja.lproj/Localizable.strings b/apps/ios/ja.lproj/Localizable.strings index 508790b8e..fb11e8995 100644 --- a/apps/ios/ja.lproj/Localizable.strings +++ b/apps/ios/ja.lproj/Localizable.strings @@ -560,9 +560,6 @@ /* No comment provided by engineer. */ "Calls" = "通話"; -/* No comment provided by engineer. */ -"Can't delete user profile!" = "ユーザープロフィールが削除できません!"; - /* No comment provided by engineer. */ "Can't invite contact!" = "連絡先を招待できません!"; @@ -3065,12 +3062,6 @@ /* No comment provided by engineer. */ "Theme" = "テーマ"; -/* No comment provided by engineer. */ -"There should be at least one user profile." = "少なくとも1つのユーザープロファイルが必要です。"; - -/* No comment provided by engineer. */ -"There should be at least one visible user profile." = "少なくとも1つのユーザープロフィールが表示されている必要があります。"; - /* No comment provided by engineer. */ "These settings are for your current profile **%@**." = "これらの設定は現在のプロファイル **%@** 用です。"; diff --git a/apps/ios/nl.lproj/Localizable.strings b/apps/ios/nl.lproj/Localizable.strings index eae46a903..40e3134d1 100644 --- a/apps/ios/nl.lproj/Localizable.strings +++ b/apps/ios/nl.lproj/Localizable.strings @@ -398,6 +398,9 @@ /* No comment provided by engineer. */ "All group members will remain connected." = "Alle groepsleden blijven verbonden."; +/* No comment provided by engineer. */ +"All messages will be deleted - this cannot be undone!" = "Alle berichten worden verwijderd. Dit kan niet ongedaan worden gemaakt!"; + /* No comment provided by engineer. */ "All messages will be deleted - this cannot be undone! The messages will be deleted ONLY for you." = "Alle berichten worden verwijderd, dit kan niet ongedaan worden gemaakt! De berichten worden ALLEEN voor jou verwijderd."; @@ -635,9 +638,6 @@ /* No comment provided by engineer. */ "Camera not available" = "Camera niet beschikbaar"; -/* No comment provided by engineer. */ -"Can't delete user profile!" = "Kan gebruikers profiel niet verwijderen!"; - /* No comment provided by engineer. */ "Can't invite contact!" = "Kan contact niet uitnodigen!"; @@ -753,6 +753,9 @@ /* No comment provided by engineer. */ "Clear conversation?" = "Gesprek wissen?"; +/* No comment provided by engineer. */ +"Clear private notes?" = "Privénotities verwijderen?"; + /* No comment provided by engineer. */ "Clear verification" = "Verwijderd verificatie"; @@ -891,6 +894,9 @@ /* connection information */ "connection:%@" = "verbinding:%@"; +/* profile update event chat item */ +"contact %@ changed to %@" = "contactpersoon %1$@ gewijzigd in %2$@"; + /* No comment provided by engineer. */ "Contact allows" = "Contact maakt het mogelijk"; @@ -975,6 +981,12 @@ /* No comment provided by engineer. */ "Create your profile" = "Maak je profiel aan"; +/* No comment provided by engineer. */ +"Created at" = "Gemaakt op"; + +/* copied message info */ +"Created at: %@" = "Aangemaakt op: %@"; + /* No comment provided by engineer. */ "Created on %@" = "Gemaakt op %@"; @@ -1299,6 +1311,9 @@ /* No comment provided by engineer. */ "Do it later" = "Doe het later"; +/* No comment provided by engineer. */ +"Do not send history to new members." = "Stuur geen geschiedenis naar nieuwe leden."; + /* No comment provided by engineer. */ "Do NOT use SimpleX for emergency calls." = "Gebruik SimpleX NIET voor noodoproepen."; @@ -1524,6 +1539,9 @@ /* No comment provided by engineer. */ "Error creating member contact" = "Fout bij aanmaken contact"; +/* No comment provided by engineer. */ +"Error creating message" = "Fout bij het maken van een bericht"; + /* No comment provided by engineer. */ "Error creating profile!" = "Fout bij aanmaken van profiel!"; @@ -1878,6 +1896,9 @@ /* No comment provided by engineer. */ "History" = "Geschiedenis"; +/* No comment provided by engineer. */ +"History is not sent to new members." = "Geschiedenis wordt niet naar nieuwe leden gestuurd."; + /* time unit */ "hours" = "uren"; @@ -1935,6 +1956,9 @@ /* No comment provided by engineer. */ "Import database" = "Database importeren"; +/* No comment provided by engineer. */ +"Improved message delivery" = "Verbeterde berichtbezorging"; + /* No comment provided by engineer. */ "Improved privacy and security" = "Verbeterde privacy en veiligheid"; @@ -2019,6 +2043,9 @@ /* invalid chat item */ "invalid data" = "ongeldige gegevens"; +/* No comment provided by engineer. */ +"Invalid display name!" = "Ongeldige weergavenaam!"; + /* No comment provided by engineer. */ "Invalid link" = "Ongeldige link"; @@ -2109,6 +2136,9 @@ /* No comment provided by engineer. */ "Join group" = "Word lid van groep"; +/* No comment provided by engineer. */ +"Join group conversations" = "Neem deel aan groep gesprekken"; + /* No comment provided by engineer. */ "Join group?" = "Deelnemen aan groep?"; @@ -2244,6 +2274,9 @@ /* No comment provided by engineer. */ "Member" = "Lid"; +/* profile update event chat item */ +"member %@ changed to %@" = "lid %1$@ gewijzigd in %2$@"; + /* rcv group event chat item */ "member connected" = "is toegetreden"; @@ -2588,12 +2621,18 @@ /* No comment provided by engineer. */ "Password to show" = "Wachtwoord om weer te geven"; +/* past/unknown group member */ +"Past member %@" = "Voormalig lid %@"; + /* No comment provided by engineer. */ "Paste desktop address" = "Desktopadres plakken"; /* No comment provided by engineer. */ "Paste image" = "Afbeelding plakken"; +/* No comment provided by engineer. */ +"Paste link to connect!" = "Plak link om te verbinden!"; + /* No comment provided by engineer. */ "Paste the link you received" = "Plak de link die je hebt ontvangen"; @@ -2681,6 +2720,9 @@ /* No comment provided by engineer. */ "Private filenames" = "Privé bestandsnamen"; +/* name of notes to self */ +"Private notes" = "Privé notities"; + /* No comment provided by engineer. */ "Profile and server connections" = "Profiel- en serververbindingen"; @@ -2795,6 +2837,9 @@ /* No comment provided by engineer. */ "Receiving via" = "Ontvang via"; +/* No comment provided by engineer. */ +"Recent history and improved [directory bot](simplex:/contact#/?v=1-4&smp=smp%3A%2F%2Fu2dS9sG8nMNURyZwqASV4yROM28Er0luVTx5X1CsMrU%3D%40smp4.simplex.im%2FeXSPwqTkKyDO3px4fLf1wx3MvPdjdLW3%23%2F%3Fv%3D1-2%26dh%3DMCowBQYDK2VuAyEAaiv6MkMH44L2TcYrt_CsX3ZvM11WgbMEUn0hkIKTOho%253D%26srv%3Do5vmywmrnaxalvz6wi3zicyftgio6psuvyniis6gco6bp6ekl4cqj4id.onion)." = "Recente geschiedenis en verbeterde [directory bot](simplex:/contact#/?v=1-4&smp=smp%3A%2F%2Fu2dS9sG8nMNURyZwqASV4yROM28Er0luVTx5X1CsMrU%3D%40smp4.simplex.im%2FeXSPwqTkKyDO3px4fLf1wx3MvPdjdLW3%23%2F%3Fv%3D1-2%26dh%3DMCowBQYDK2VuAyEAaiv6MkMH44L2TcYrt_CsX3ZvM11WgbMEUn0hkIKTOho%253D%26srv%3Do5vmywmrnaxalvz6wi3zicyftgio6psuvyniis6gco6bp6ekl4cqj4id.onion)."; + /* No comment provided by engineer. */ "Recipients see updates as you type them." = "Ontvangers zien updates terwijl u ze typt."; @@ -2849,6 +2894,12 @@ /* rcv group event chat item */ "removed %@" = "verwijderd %@"; +/* profile update event chat item */ +"removed contact address" = "contactadres verwijderd"; + +/* profile update event chat item */ +"removed profile picture" = "profielfoto verwijderd"; + /* rcv group event chat item */ "removed you" = "heeft je verwijderd"; @@ -2972,6 +3023,9 @@ /* No comment provided by engineer. */ "Save welcome message?" = "Welkomst bericht opslaan?"; +/* message info title */ +"Saved message" = "Opgeslagen bericht"; + /* No comment provided by engineer. */ "Saved WebRTC ICE servers will be removed" = "Opgeslagen WebRTC ICE servers worden verwijderd"; @@ -2993,6 +3047,9 @@ /* No comment provided by engineer. */ "Search" = "Zoeken"; +/* No comment provided by engineer. */ +"Search bar accepts invitation links." = "Zoekbalk accepteert uitnodigingslinks."; + /* No comment provided by engineer. */ "Search or paste SimpleX link" = "Zoek of plak de SimpleX link"; @@ -3074,6 +3131,9 @@ /* No comment provided by engineer. */ "Send them from gallery or custom keyboards." = "Stuur ze vanuit de galerij of aangepaste toetsenborden."; +/* No comment provided by engineer. */ +"Send up to 100 last messages to new members." = "Stuur tot 100 laatste berichten naar nieuwe leden."; + /* No comment provided by engineer. */ "Sender cancelled file transfer." = "Afzender heeft bestandsoverdracht geannuleerd."; @@ -3146,6 +3206,12 @@ /* No comment provided by engineer. */ "Set it instead of system authentication." = "Stel het in in plaats van systeemverificatie."; +/* profile update event chat item */ +"set new contact address" = "nieuw contactadres instellen"; + +/* profile update event chat item */ +"set new profile picture" = "nieuwe profielfoto instellen"; + /* No comment provided by engineer. */ "Set passcode" = "Toegangscode instellen"; @@ -3431,12 +3497,6 @@ /* No comment provided by engineer. */ "Theme" = "Thema"; -/* No comment provided by engineer. */ -"There should be at least one user profile." = "Er moet ten minste één gebruikers profiel zijn."; - -/* No comment provided by engineer. */ -"There should be at least one visible user profile." = "Er moet ten minste één zichtbaar gebruikers profiel zijn."; - /* No comment provided by engineer. */ "These settings are for your current profile **%@**." = "Deze instellingen zijn voor uw huidige profiel **%@**."; @@ -3458,6 +3518,9 @@ /* No comment provided by engineer. */ "This device name" = "Deze apparaatnaam"; +/* No comment provided by engineer. */ +"This display name is invalid. Please choose another name." = "Deze weergavenaam is ongeldig. Kies een andere naam."; + /* No comment provided by engineer. */ "This group has over %lld members, delivery receipts are not sent." = "Deze groep heeft meer dan %lld -leden, ontvangstbevestigingen worden niet verzonden."; @@ -3518,6 +3581,9 @@ /* No comment provided by engineer. */ "Trying to connect to the server used to receive messages from this contact." = "Proberen verbinding te maken met de server die wordt gebruikt om berichten van dit contact te ontvangen."; +/* No comment provided by engineer. */ +"Turkish interface" = "Turkse interface"; + /* No comment provided by engineer. */ "Turn off" = "Uitschakelen"; @@ -3569,6 +3635,9 @@ /* No comment provided by engineer. */ "Unknown error" = "Onbekende fout"; +/* No comment provided by engineer. */ +"unknown status" = "onbekende status"; + /* No comment provided by engineer. */ "Unless you use iOS call interface, enable Do Not Disturb mode to avoid interruptions." = "Schakel de modus Niet storen in om onderbrekingen te voorkomen, tenzij u de iOS-oproepinterface gebruikt."; @@ -3593,6 +3662,9 @@ /* No comment provided by engineer. */ "Unread" = "Ongelezen"; +/* No comment provided by engineer. */ +"Up to 100 last messages are sent to new members." = "Er worden maximaal 100 laatste berichten naar nieuwe leden verzonden."; + /* No comment provided by engineer. */ "Update" = "Update"; @@ -3611,6 +3683,9 @@ /* rcv group event chat item */ "updated group profile" = "bijgewerkt groep profiel"; +/* profile update event chat item */ +"updated profile" = "bijgewerkt profiel"; + /* No comment provided by engineer. */ "Updating settings will re-connect the client to all servers." = "Door de instellingen bij te werken, wordt de client opnieuw verbonden met alle servers."; @@ -3719,6 +3794,9 @@ /* No comment provided by engineer. */ "View security code" = "Beveiligingscode bekijken"; +/* chat feature */ +"Visible history" = "Zichtbare geschiedenis"; + /* No comment provided by engineer. */ "Voice message…" = "Spraakbericht…"; @@ -3782,9 +3860,15 @@ /* 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." = "Wanneer je een incognito profiel met iemand deelt, wordt dit profiel gebruikt voor de groepen waarvoor ze je uitnodigen."; +/* No comment provided by engineer. */ +"With encrypted files and media." = "‐Met versleutelde bestanden en media."; + /* No comment provided by engineer. */ "With optional welcome message." = "Met optioneel welkomst bericht."; +/* No comment provided by engineer. */ +"With reduced battery usage." = "Met verminderd batterijgebruik."; + /* No comment provided by engineer. */ "Wrong database passphrase" = "Verkeerd wachtwoord voor de database"; diff --git a/apps/ios/pl.lproj/Localizable.strings b/apps/ios/pl.lproj/Localizable.strings index e173a7430..2892f536d 100644 --- a/apps/ios/pl.lproj/Localizable.strings +++ b/apps/ios/pl.lproj/Localizable.strings @@ -635,9 +635,6 @@ /* No comment provided by engineer. */ "Camera not available" = "Kamera nie dostępna"; -/* No comment provided by engineer. */ -"Can't delete user profile!" = "Nie można usunąć profilu użytkownika!"; - /* No comment provided by engineer. */ "Can't invite contact!" = "Nie można zaprosić kontaktu!"; @@ -3431,12 +3428,6 @@ /* No comment provided by engineer. */ "Theme" = "Motyw"; -/* No comment provided by engineer. */ -"There should be at least one user profile." = "Powinien istnieć co najmniej jeden profil użytkownika."; - -/* No comment provided by engineer. */ -"There should be at least one visible user profile." = "Powinien istnieć co najmniej jeden widoczny profil użytkownika."; - /* No comment provided by engineer. */ "These settings are for your current profile **%@**." = "Te ustawienia dotyczą Twojego bieżącego profilu **%@**."; diff --git a/apps/ios/ru.lproj/Localizable.strings b/apps/ios/ru.lproj/Localizable.strings index dfde268dd..02d8b4f0d 100644 --- a/apps/ios/ru.lproj/Localizable.strings +++ b/apps/ios/ru.lproj/Localizable.strings @@ -64,9 +64,15 @@ /* No comment provided by engineer. */ "[Star on GitHub](https://github.com/simplex-chat/simplex-chat)" = "[Поставить звездочку в GitHub](https://github.com/simplex-chat/simplex-chat)"; +/* No comment provided by engineer. */ +"**Add contact**: to create a new invitation link, or connect via a link you received." = "**Добавить контакт**: создать новую ссылку-приглашение или подключиться через полученную ссылку."; + /* No comment provided by engineer. */ "**Add new contact**: to create your one-time QR Code for your contact." = "**Добавить новый контакт**: чтобы создать одноразовый QR код или ссылку для Вашего контакта."; +/* No comment provided by engineer. */ +"**Create group**: to create a new group." = "**Создать группу**: создать новую группу."; + /* No comment provided by engineer. */ "**e2e encrypted** audio call" = "**e2e зашифрованный** аудиозвонок"; @@ -338,6 +344,9 @@ /* No comment provided by engineer. */ "Add address to your profile, so that your contacts can share it with other people. Profile update will be sent to your contacts." = "Добавьте адрес в свой профиль, чтобы Ваши контакты могли поделиться им. Профиль будет отправлен Вашим контактам."; +/* No comment provided by engineer. */ +"Add contact" = "Добавить контакт"; + /* No comment provided by engineer. */ "Add preset servers" = "Добавить серверы по умолчанию"; @@ -389,6 +398,9 @@ /* No comment provided by engineer. */ "All group members will remain connected." = "Все члены группы, которые соединились через эту ссылку, останутся в группе."; +/* No comment provided by engineer. */ +"All messages will be deleted - this cannot be undone!" = "Все сообщения будут удалены - это нельзя отменить!"; + /* No comment provided by engineer. */ "All messages will be deleted - this cannot be undone! The messages will be deleted ONLY for you." = "Все сообщения будут удалены - это действие нельзя отменить! Сообщения будут удалены только для Вас."; @@ -624,7 +636,7 @@ "Calls" = "Звонки"; /* No comment provided by engineer. */ -"Can't delete user profile!" = "Нельзя удалить профиль пользователя!"; +"Camera not available" = "Камера недоступна"; /* No comment provided by engineer. */ "Can't invite contact!" = "Нельзя пригласить контакт!"; @@ -711,6 +723,9 @@ /* No comment provided by engineer. */ "Chat is stopped" = "Чат остановлен"; +/* No comment provided by engineer. */ +"Chat is stopped. If you already used this database on another device, you should transfer it back before starting chat." = "Чат остановлен. Если вы уже использовали эту базу данных на другом устройстве, перенесите ее обратно до запуска чата."; + /* No comment provided by engineer. */ "Chat preferences" = "Предпочтения"; @@ -738,6 +753,9 @@ /* No comment provided by engineer. */ "Clear conversation?" = "Очистить разговор?"; +/* No comment provided by engineer. */ +"Clear private notes?" = "Очистить личные заметки?"; + /* No comment provided by engineer. */ "Clear verification" = "Сбросить подтверждение"; @@ -876,6 +894,9 @@ /* connection information */ "connection:%@" = "connection:%@"; +/* profile update event chat item */ +"contact %@ changed to %@" = "контакт %1$@ изменён на %2$@"; + /* No comment provided by engineer. */ "Contact allows" = "Контакт разрешает"; @@ -960,9 +981,18 @@ /* No comment provided by engineer. */ "Create your profile" = "Создать профиль"; +/* No comment provided by engineer. */ +"Created at" = "Создано"; + +/* copied message info */ +"Created at: %@" = "Создано: %@"; + /* No comment provided by engineer. */ "Created on %@" = "Дата создания %@"; +/* No comment provided by engineer. */ +"Creating link…" = "Создаётся ссылка…"; + /* No comment provided by engineer. */ "creator" = "создатель"; @@ -1281,6 +1311,9 @@ /* No comment provided by engineer. */ "Do it later" = "Отложить"; +/* No comment provided by engineer. */ +"Do not send history to new members." = "Не отправлять историю новым членам."; + /* No comment provided by engineer. */ "Do NOT use SimpleX for emergency calls." = "Не используйте SimpleX для экстренных звонков."; @@ -1326,6 +1359,9 @@ /* No comment provided by engineer. */ "Enable automatic message deletion?" = "Включить автоматическое удаление сообщений?"; +/* No comment provided by engineer. */ +"Enable camera access" = "Включить доступ к камере"; + /* No comment provided by engineer. */ "Enable for all" = "Включить для всех"; @@ -1380,6 +1416,9 @@ /* notification */ "Encrypted message or another event" = "Зашифрованное сообщение или событие чата"; +/* notification */ +"Encrypted message: app is stopped" = "Зашифрованное сообщение: приложение остановлено"; + /* notification */ "Encrypted message: database error" = "Зашифрованное сообщение: ошибка базы данных"; @@ -1500,6 +1539,9 @@ /* No comment provided by engineer. */ "Error creating member contact" = "Ошибка создания контакта с членом группы"; +/* No comment provided by engineer. */ +"Error creating message" = "Ошибка создания сообщения"; + /* No comment provided by engineer. */ "Error creating profile!" = "Ошибка создания профиля!"; @@ -1551,6 +1593,9 @@ /* No comment provided by engineer. */ "Error loading %@ servers" = "Ошибка загрузки %@ серверов"; +/* No comment provided by engineer. */ +"Error opening chat" = "Ошибка доступа к чату"; + /* No comment provided by engineer. */ "Error receiving file" = "Ошибка при получении файла"; @@ -1575,6 +1620,9 @@ /* No comment provided by engineer. */ "Error saving user password" = "Ошибка при сохранении пароля пользователя"; +/* No comment provided by engineer. */ +"Error scanning code: %@" = "Ошибка сканирования кода: %@"; + /* No comment provided by engineer. */ "Error sending email" = "Ошибка отправки email"; @@ -1848,6 +1896,9 @@ /* No comment provided by engineer. */ "History" = "История"; +/* No comment provided by engineer. */ +"History is not sent to new members." = "История не отправляется новым членам."; + /* time unit */ "hours" = "часов"; @@ -1905,6 +1956,9 @@ /* No comment provided by engineer. */ "Import database" = "Импорт архива чата"; +/* No comment provided by engineer. */ +"Improved message delivery" = "Улучшенная доставка сообщений"; + /* No comment provided by engineer. */ "Improved privacy and security" = "Улучшенная безопасность"; @@ -1989,9 +2043,21 @@ /* invalid chat item */ "invalid data" = "ошибка данных"; +/* No comment provided by engineer. */ +"Invalid display name!" = "Ошибка имени!"; + +/* No comment provided by engineer. */ +"Invalid link" = "Ошибка ссылки"; + /* No comment provided by engineer. */ "Invalid name!" = "Неверное имя!"; +/* No comment provided by engineer. */ +"Invalid QR code" = "Неверный QR код"; + +/* No comment provided by engineer. */ +"Invalid response" = "Ошибка ответа"; + /* No comment provided by engineer. */ "Invalid server address!" = "Ошибка в адресе сервера!"; @@ -2070,6 +2136,9 @@ /* No comment provided by engineer. */ "Join group" = "Вступить в группу"; +/* No comment provided by engineer. */ +"Join group conversations" = "Присоединяйтесь к разговорам в группах"; + /* No comment provided by engineer. */ "Join group?" = "Вступить в группу?"; @@ -2085,9 +2154,15 @@ /* No comment provided by engineer. */ "Joining group" = "Вступление в группу"; +/* No comment provided by engineer. */ +"Keep" = "Оставить"; + /* No comment provided by engineer. */ "Keep the app open to use it from desktop" = "Оставьте приложение открытым, чтобы использовать его с компьютера"; +/* No comment provided by engineer. */ +"Keep unused invitation?" = "Оставить неиспользованное приглашение?"; + /* No comment provided by engineer. */ "Keep your connections" = "Сохраните Ваши соединения"; @@ -2199,6 +2274,9 @@ /* No comment provided by engineer. */ "Member" = "Член группы"; +/* profile update event chat item */ +"member %@ changed to %@" = "член %1$@ изменился на %2$@"; + /* rcv group event chat item */ "member connected" = "соединен(а)"; @@ -2316,6 +2394,9 @@ /* No comment provided by engineer. */ "never" = "никогда"; +/* No comment provided by engineer. */ +"New chat" = "Новый чат"; + /* notification */ "New contact request" = "Новый запрос на соединение"; @@ -2423,6 +2504,9 @@ /* No comment provided by engineer. */ "Ok" = "Ок"; +/* No comment provided by engineer. */ +"OK" = "OK"; + /* No comment provided by engineer. */ "Old database" = "Предыдущая версия данных чата"; @@ -2507,6 +2591,15 @@ /* No comment provided by engineer. */ "Open-source protocol and code – anybody can run the servers." = "Открытый протокол и код - кто угодно может запустить сервер."; +/* No comment provided by engineer. */ +"Opening app…" = "Приложение отрывается…"; + +/* No comment provided by engineer. */ +"Or scan QR code" = "Или отсканируйте QR код"; + +/* No comment provided by engineer. */ +"Or show this code" = "Или покажите этот код"; + /* member role */ "owner" = "владелец"; @@ -2528,12 +2621,21 @@ /* No comment provided by engineer. */ "Password to show" = "Пароль чтобы раскрыть"; +/* past/unknown group member */ +"Past member %@" = "Бывший член %@"; + /* No comment provided by engineer. */ "Paste desktop address" = "Вставить адрес компьютера"; /* No comment provided by engineer. */ "Paste image" = "Вставить изображение"; +/* No comment provided by engineer. */ +"Paste link to connect!" = "Вставьте ссылку, чтобы соединиться!"; + +/* No comment provided by engineer. */ +"Paste the link you received" = "Вставьте полученную ссылку"; + /* No comment provided by engineer. */ "peer-to-peer" = "peer-to-peer"; @@ -2564,6 +2666,9 @@ /* No comment provided by engineer. */ "Please check yours and your contact preferences." = "Проверьте предпочтения Вашего контакта."; +/* No comment provided by engineer. */ +"Please contact developers.\nError: %@" = "Пожалуйста, сообщите разработчикам.\nОшибка: %@"; + /* No comment provided by engineer. */ "Please contact group admin." = "Пожалуйста, свяжитесь с админом группы."; @@ -2615,6 +2720,9 @@ /* No comment provided by engineer. */ "Private filenames" = "Защищенные имена файлов"; +/* name of notes to self */ +"Private notes" = "Личные заметки"; + /* No comment provided by engineer. */ "Profile and server connections" = "Профиль и соединения на сервере"; @@ -2687,6 +2795,9 @@ /* No comment provided by engineer. */ "Read more in [User Guide](https://simplex.chat/docs/guide/app-settings.html#your-simplex-contact-address)." = "Узнать больше в [Руководстве пользователя](https://simplex.chat/docs/guide/app-settings.html#your-simplex-contact-address)."; +/* No comment provided by engineer. */ +"Read more in [User Guide](https://simplex.chat/docs/guide/chat-profiles.html#incognito-mode)." = "Дополнительная информация в [Руководстве пользователя](https://simplex.chat/docs/guide/chat-profiles.html#incognito-mode)."; + /* No comment provided by engineer. */ "Read more in [User Guide](https://simplex.chat/docs/guide/readme.html#connect-to-friends)." = "Узнать больше в [Руководстве пользователя](https://simplex.chat/docs/guide/readme.html#connect-to-friends)."; @@ -2726,6 +2837,9 @@ /* No comment provided by engineer. */ "Receiving via" = "Получение через"; +/* No comment provided by engineer. */ +"Recent history and improved [directory bot](simplex:/contact#/?v=1-4&smp=smp%3A%2F%2Fu2dS9sG8nMNURyZwqASV4yROM28Er0luVTx5X1CsMrU%3D%40smp4.simplex.im%2FeXSPwqTkKyDO3px4fLf1wx3MvPdjdLW3%23%2F%3Fv%3D1-2%26dh%3DMCowBQYDK2VuAyEAaiv6MkMH44L2TcYrt_CsX3ZvM11WgbMEUn0hkIKTOho%253D%26srv%3Do5vmywmrnaxalvz6wi3zicyftgio6psuvyniis6gco6bp6ekl4cqj4id.onion)." = "История сообщений и улучшенный [каталог групп](simplex:/contact#/?v=1-4&smp=smp%3A%2F%2Fu2dS9sG8nMNURyZwqASV4yROM28Er0luVTx5X1CsMrU%3D%40smp4.simplex.im%2FeXSPwqTkKyDO3px4fLf1wx3MvPdjdLW3%23%2F%3Fv%3D1-2%26dh%3DMCowBQYDK2VuAyEAaiv6MkMH44L2TcYrt_CsX3ZvM11WgbMEUn0hkIKTOho%253D%26srv%3Do5vmywmrnaxalvz6wi3zicyftgio6psuvyniis6gco6bp6ekl4cqj4id.onion)."; + /* No comment provided by engineer. */ "Recipients see updates as you type them." = "Получатели видят их в то время как Вы их набираете."; @@ -2780,6 +2894,12 @@ /* rcv group event chat item */ "removed %@" = "удалил(а) %@"; +/* profile update event chat item */ +"removed contact address" = "удалён адрес контакта"; + +/* profile update event chat item */ +"removed profile picture" = "удалена картинка профиля"; + /* rcv group event chat item */ "removed you" = "удалил(а) Вас из группы"; @@ -2831,6 +2951,9 @@ /* No comment provided by engineer. */ "Restore database error" = "Ошибка при восстановлении базы данных"; +/* No comment provided by engineer. */ +"Retry" = "Повторить"; + /* chat item action */ "Reveal" = "Показать"; @@ -2900,6 +3023,9 @@ /* No comment provided by engineer. */ "Save welcome message?" = "Сохранить приветственное сообщение?"; +/* message info title */ +"Saved message" = "Сохраненное сообщение"; + /* No comment provided by engineer. */ "Saved WebRTC ICE servers will be removed" = "Сохраненные WebRTC ICE серверы будут удалены"; @@ -2921,6 +3047,12 @@ /* No comment provided by engineer. */ "Search" = "Поиск"; +/* No comment provided by engineer. */ +"Search bar accepts invitation links." = "Поле поиска поддерживает ссылки-приглашения."; + +/* No comment provided by engineer. */ +"Search or paste SimpleX link" = "Искать или вставьте ссылку SimpleX"; + /* network option */ "sec" = "сек"; @@ -2999,6 +3131,9 @@ /* No comment provided by engineer. */ "Send them from gallery or custom keyboards." = "Отправьте из галереи или из дополнительных клавиатур."; +/* No comment provided by engineer. */ +"Send up to 100 last messages to new members." = "Отправить до 100 последних сообщений новым членам."; + /* No comment provided by engineer. */ "Sender cancelled file transfer." = "Отправитель отменил передачу файла."; @@ -3071,6 +3206,12 @@ /* No comment provided by engineer. */ "Set it instead of system authentication." = "Установите код вместо системной аутентификации."; +/* profile update event chat item */ +"set new contact address" = "установлен новый адрес контакта"; + +/* profile update event chat item */ +"set new profile picture" = "установлена новая картинка профиля"; + /* No comment provided by engineer. */ "Set passcode" = "Установить код доступа"; @@ -3101,6 +3242,9 @@ /* No comment provided by engineer. */ "Share link" = "Поделиться ссылкой"; +/* No comment provided by engineer. */ +"Share this 1-time invite link" = "Поделиться одноразовой ссылкой-приглашением"; + /* No comment provided by engineer. */ "Share with contacts" = "Поделиться с контактами"; @@ -3179,6 +3323,9 @@ /* No comment provided by engineer. */ "Start chat" = "Запустить чат"; +/* No comment provided by engineer. */ +"Start chat?" = "Запустить чат?"; + /* No comment provided by engineer. */ "Start migration" = "Запустить перемещение данных"; @@ -3248,6 +3395,12 @@ /* No comment provided by engineer. */ "Tap to join incognito" = "Нажмите, чтобы вступить инкогнито"; +/* No comment provided by engineer. */ +"Tap to paste link" = "Нажмите, чтобы вставить ссылку"; + +/* No comment provided by engineer. */ +"Tap to scan" = "Нажмите, чтобы сканировать"; + /* No comment provided by engineer. */ "Tap to start a new chat" = "Нажмите, чтобы начать чат"; @@ -3293,6 +3446,9 @@ /* No comment provided by engineer. */ "The attempt to change database passphrase was not completed." = "Попытка поменять пароль базы данных не была завершена."; +/* No comment provided by engineer. */ +"The code you scanned is not a SimpleX link QR code." = "Этот QR код не является SimpleX-ccылкой."; + /* No comment provided by engineer. */ "The connection you accepted will be cancelled!" = "Подтвержденное соединение будет отменено!"; @@ -3335,15 +3491,12 @@ /* No comment provided by engineer. */ "The servers for new connections of your current chat profile **%@**." = "Серверы для новых соединений Вашего текущего профиля чата **%@**."; +/* No comment provided by engineer. */ +"The text you pasted is not a SimpleX link." = "Вставленный текст не является SimpleX-ссылкой."; + /* No comment provided by engineer. */ "Theme" = "Тема"; -/* No comment provided by engineer. */ -"There should be at least one user profile." = "Должен быть хотя бы один профиль пользователя."; - -/* No comment provided by engineer. */ -"There should be at least one visible user profile." = "Должен быть хотя бы один открытый профиль пользователя."; - /* No comment provided by engineer. */ "These settings are for your current profile **%@**." = "Установки для Вашего активного профиля **%@**."; @@ -3365,6 +3518,9 @@ /* No comment provided by engineer. */ "This device name" = "Имя этого устройства"; +/* No comment provided by engineer. */ +"This display name is invalid. Please choose another name." = "Ошибка имени профиля. Пожалуйста, выберите другое имя."; + /* No comment provided by engineer. */ "This group has over %lld members, delivery receipts are not sent." = "В группе более %lld членов, отчёты о доставке выключены."; @@ -3425,6 +3581,9 @@ /* No comment provided by engineer. */ "Trying to connect to the server used to receive messages from this contact." = "Устанавливается соединение с сервером, через который Вы получаете сообщения от этого контакта."; +/* No comment provided by engineer. */ +"Turkish interface" = "Турецкий интерфейс"; + /* No comment provided by engineer. */ "Turn off" = "Выключить"; @@ -3476,6 +3635,9 @@ /* No comment provided by engineer. */ "Unknown error" = "Неизвестная ошибка"; +/* No comment provided by engineer. */ +"unknown status" = "неизвестный статус"; + /* No comment provided by engineer. */ "Unless you use iOS call interface, enable Do Not Disturb mode to avoid interruptions." = "Если Вы не используете интерфейс iOS, включите режим Не отвлекать, чтобы звонок не прерывался."; @@ -3500,6 +3662,9 @@ /* No comment provided by engineer. */ "Unread" = "Не прочитано"; +/* No comment provided by engineer. */ +"Up to 100 last messages are sent to new members." = "До 100 последних сообщений отправляются новым членам."; + /* No comment provided by engineer. */ "Update" = "Обновить"; @@ -3518,6 +3683,9 @@ /* rcv group event chat item */ "updated group profile" = "обновил(а) профиль группы"; +/* profile update event chat item */ +"updated profile" = "профиль обновлён"; + /* No comment provided by engineer. */ "Updating settings will re-connect the client to all servers." = "Обновление настроек приведет к сбросу и установке нового соединения со всеми серверами."; @@ -3551,6 +3719,9 @@ /* No comment provided by engineer. */ "Use new incognito profile" = "Использовать новый Инкогнито профиль"; +/* No comment provided by engineer. */ +"Use only local notifications?" = "Использовать только локальные нотификации?"; + /* No comment provided by engineer. */ "Use server" = "Использовать сервер"; @@ -3623,6 +3794,9 @@ /* No comment provided by engineer. */ "View security code" = "Показать код безопасности"; +/* chat feature */ +"Visible history" = "Доступ к истории"; + /* No comment provided by engineer. */ "Voice message…" = "Голосовое сообщение…"; @@ -3686,9 +3860,15 @@ /* No comment provided by engineer. */ "When you share an incognito profile with somebody, this profile will be used for the groups they invite you to." = "Когда Вы соединены с контактом инкогнито, тот же самый инкогнито профиль будет использоваться для групп с этим контактом."; +/* No comment provided by engineer. */ +"With encrypted files and media." = "С зашифрованными файлами и медиа."; + /* No comment provided by engineer. */ "With optional welcome message." = "С опциональным авто-ответом."; +/* No comment provided by engineer. */ +"With reduced battery usage." = "С уменьшенным потреблением батареи."; + /* No comment provided by engineer. */ "Wrong database passphrase" = "Неправильный пароль базы данных"; @@ -3764,6 +3944,9 @@ /* No comment provided by engineer. */ "You can hide or mute a user profile - swipe it to the right." = "Вы можете скрыть профиль или выключить уведомления - потяните его вправо."; +/* No comment provided by engineer. */ +"You can make it visible to your SimpleX contacts via Settings." = "Вы можете сделать его видимым для ваших контактов в SimpleX через Настройки."; + /* notification body */ "You can now send messages to %@" = "Вы теперь можете отправлять сообщения %@"; @@ -3788,6 +3971,9 @@ /* No comment provided by engineer. */ "You can use markdown to format messages:" = "Вы можете форматировать сообщения:"; +/* No comment provided by engineer. */ +"You can view invitation link again in connection details." = "Вы можете увидеть ссылку-приглашение снова открыв соединение."; + /* No comment provided by engineer. */ "You can't send messages!" = "Вы не можете отправлять сообщения!"; diff --git a/apps/ios/th.lproj/Localizable.strings b/apps/ios/th.lproj/Localizable.strings index e8c62b7ed..686c1a58a 100644 --- a/apps/ios/th.lproj/Localizable.strings +++ b/apps/ios/th.lproj/Localizable.strings @@ -521,9 +521,6 @@ /* No comment provided by engineer. */ "Calls" = "โทร"; -/* No comment provided by engineer. */ -"Can't delete user profile!" = "ไม่สามารถลบโปรไฟล์ผู้ใช้ได้!"; - /* No comment provided by engineer. */ "Can't invite contact!" = "ไม่สามารถเชิญผู้ติดต่อได้!"; @@ -2984,12 +2981,6 @@ /* No comment provided by engineer. */ "Theme" = "ธีม"; -/* No comment provided by engineer. */ -"There should be at least one user profile." = "ควรมีโปรไฟล์ผู้ใช้อย่างน้อยหนึ่งโปรไฟล์"; - -/* No comment provided by engineer. */ -"There should be at least one visible user profile." = "ควรมีอย่างน้อยหนึ่งโปรไฟล์ผู้ใช้ที่มองเห็นได้"; - /* No comment provided by engineer. */ "These settings are for your current profile **%@**." = "การตั้งค่าเหล่านี้ใช้สำหรับโปรไฟล์ปัจจุบันของคุณ **%@**"; diff --git a/apps/ios/tr.lproj/Localizable.strings b/apps/ios/tr.lproj/Localizable.strings index 260577c1f..b7b33ec2f 100644 --- a/apps/ios/tr.lproj/Localizable.strings +++ b/apps/ios/tr.lproj/Localizable.strings @@ -623,9 +623,6 @@ /* No comment provided by engineer. */ "Camera not available" = "Kamera mevcut değil"; -/* No comment provided by engineer. */ -"Can't delete user profile!" = "Kullanıcı profili silinemiyor!"; - /* No comment provided by engineer. */ "Can't invite contact!" = "Kişi davet edilemiyor!"; @@ -3410,12 +3407,6 @@ /* No comment provided by engineer. */ "Theme" = "Tema"; -/* No comment provided by engineer. */ -"There should be at least one user profile." = "En az bir kullanıcı profili olmalıdır."; - -/* No comment provided by engineer. */ -"There should be at least one visible user profile." = "En az bir görünür kullanıcı profili olmalıdır."; - /* No comment provided by engineer. */ "These settings are for your current profile **%@**." = "Bu ayarlar mevcut profiliniz **%@** içindir."; diff --git a/apps/ios/uk.lproj/Localizable.strings b/apps/ios/uk.lproj/Localizable.strings index 42206c355..be912d785 100644 --- a/apps/ios/uk.lproj/Localizable.strings +++ b/apps/ios/uk.lproj/Localizable.strings @@ -20,7 +20,7 @@ "_italic_" = "\\_курсив_"; /* No comment provided by engineer. */ -"- connect to [directory service](simplex:/contact#/?v=1-4&smp=smp%3A%2F%2Fu2dS9sG8nMNURyZwqASV4yROM28Er0luVTx5X1CsMrU%3D%40smp4.simplex.im%2FeXSPwqTkKyDO3px4fLf1wx3MvPdjdLW3%23%2F%3Fv%3D1-2%26dh%3DMCowBQYDK2VuAyEAaiv6MkMH44L2TcYrt_CsX3ZvM11WgbMEUn0hkIKTOho%253D%26srv%3Do5vmywmrnaxalvz6wi3zicyftgio6psuvyniis6gco6bp6ekl4cqj4id.onion) (BETA)!\n- delivery receipts (up to 20 members).\n- faster and more stable." = "- підключитися до [сервера каталогів](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. цибуля) (БЕТА)!\n- підтвердження доставлення (до 20 учасників).\n- швидше і стабільніше."; +"- connect to [directory service](simplex:/contact#/?v=1-4&smp=smp%3A%2F%2Fu2dS9sG8nMNURyZwqASV4yROM28Er0luVTx5X1CsMrU%3D%40smp4.simplex.im%2FeXSPwqTkKyDO3px4fLf1wx3MvPdjdLW3%23%2F%3Fv%3D1-2%26dh%3DMCowBQYDK2VuAyEAaiv6MkMH44L2TcYrt_CsX3ZvM11WgbMEUn0hkIKTOho%253D%26srv%3Do5vmywmrnaxalvz6wi3zicyftgio6psuvyniis6gco6bp6ekl4cqj4id.onion) (BETA)!\n- delivery receipts (up to 20 members).\n- faster and more stable." = "- підключитися до [сервера каталогів](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) (БЕТА)!\n- підтвердження доставлення (до 20 учасників).\n- швидше і стабільніше."; /* No comment provided by engineer. */ "- more stable message delivery.\n- a bit better groups.\n- and more!" = "- стабільніша доставка повідомлень.\n- трохи кращі групи.\n- і багато іншого!"; @@ -614,9 +614,6 @@ /* No comment provided by engineer. */ "Calls" = "Дзвінки"; -/* No comment provided by engineer. */ -"Can't delete user profile!" = "Не можу видалити профіль користувача!"; - /* No comment provided by engineer. */ "Can't invite contact!" = "Не вдається запросити контакт!"; @@ -3146,12 +3143,6 @@ /* No comment provided by engineer. */ "Theme" = "Тема"; -/* No comment provided by engineer. */ -"There should be at least one user profile." = "Повинен бути принаймні один профіль користувача."; - -/* No comment provided by engineer. */ -"There should be at least one visible user profile." = "Повинен бути принаймні один видимий профіль користувача."; - /* No comment provided by engineer. */ "These settings are for your current profile **%@**." = "Ці налаштування стосуються вашого поточного профілю **%@**."; diff --git a/apps/ios/zh-Hans.lproj/Localizable.strings b/apps/ios/zh-Hans.lproj/Localizable.strings index bbcc16697..8ed4cb7c7 100644 --- a/apps/ios/zh-Hans.lproj/Localizable.strings +++ b/apps/ios/zh-Hans.lproj/Localizable.strings @@ -554,9 +554,6 @@ /* No comment provided by engineer. */ "Calls" = "通话"; -/* No comment provided by engineer. */ -"Can't delete user profile!" = "无法删除用户个人资料!"; - /* No comment provided by engineer. */ "Can't invite contact!" = "无法邀请联系人!"; @@ -3101,12 +3098,6 @@ /* No comment provided by engineer. */ "Theme" = "主题"; -/* No comment provided by engineer. */ -"There should be at least one user profile." = "应该至少有一个用户资料。"; - -/* No comment provided by engineer. */ -"There should be at least one visible user profile." = "应该至少有一个可见的用户资料。"; - /* No comment provided by engineer. */ "These settings are for your current profile **%@**." = "这些设置适用于您当前的配置文件 **%@**。"; diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/ar/strings.xml b/apps/multiplatform/common/src/commonMain/resources/MR/ar/strings.xml index 616cd9c75..3ec54b999 100644 --- a/apps/multiplatform/common/src/commonMain/resources/MR/ar/strings.xml +++ b/apps/multiplatform/common/src/commonMain/resources/MR/ar/strings.xml @@ -99,7 +99,7 @@ <string name="cannot_receive_file">لا يمكن استقبال الملف</string> <string name="onboarding_notifications_mode_periodic_desc"><![CDATA[<b> جيد للبطارية </b>. خدمة الخلفية تتحقق من الرسائل كل 10 دقائق. قد تفوتك مكالمات أو رسائل عاجلة.]]></string> <string name="bold_text">عريض</string> - <string name="audio_call_no_encryption">مكالمات الصوت (ليست مشفرة بين الطرفين)</string> + <string name="audio_call_no_encryption">مكالمات الصوت (ليست مُعمّاة بين الطرفين)</string> <string name="onboarding_notifications_mode_off_desc"><![CDATA[<b> الأفضل للبطارية </b>. ستتلقى إشعارات فقط عندما يكون التطبيق قيد التشغيل (لا توجد خدمة في الخلفية).]]></string> <string name="onboarding_notifications_mode_service_desc"><![CDATA[<b> تستهلك المزيد من البطارية </b>! تعمل خدمة الخلفية دائمًا - تظهر الإشعارات بمجرد توفر الرسائل.]]></string> <string name="call_already_ended">انتهت المكالمة بالفعل!</string> @@ -179,8 +179,8 @@ <string name="create_address">إنشاء عنوان</string> <string name="settings_section_title_chats">الدردشات</string> <string name="confirm_new_passphrase">تأكيد عبارة المرور الجديدة…</string> - <string name="encrypt_database_question">تشفير قاعدة بيانات</string> - <string name="encrypted_database">قاعدة بيانات مشفرة</string> + <string name="encrypt_database_question">تعمية قاعدة البيانات؟</string> + <string name="encrypted_database">قاعدة البيانات مُعمّاة</string> <string name="rcv_group_event_changed_member_role">غيرت دور %s إلى %s</string> <string name="switch_receiving_address">تغيير عنوان الاستلام</string> <string name="failed_to_create_user_title">خطأ في إنشاء الملف الشخصي!</string> @@ -219,7 +219,7 @@ <string name="enable_lock">تفعيل القفل</string> <string name="confirm_passcode">تأكيد رمز المرور</string> <string name="error_deleting_database">خطأ في حذف قاعدة بيانات الدردشة</string> - <string name="error_encrypting_database">خطأ في تشفير قاعدة بيانات</string> + <string name="error_encrypting_database">خطأ في تعمية قاعدة البيانات</string> <string name="chat_is_stopped_indication">توقفت الدردشة</string> <string name="group_member_status_complete">مكتمل</string> <string name="group_member_status_announced">جاري الاتصال (أعلن)</string> @@ -234,10 +234,10 @@ <string name="snd_conn_event_switch_queue_phase_changing_for_member">جارِ تغيير العنوان ل%s…</string> <string name="allow_to_send_files">السماح بإرسال الملفات والوسائط.</string> <string name="enter_welcome_message_optional">أدخل رسالة ترحيب… (اختياري)</string> - <string name="snd_conn_event_ratchet_sync_agreed">وافق التشفير ل%s</string> - <string name="snd_conn_event_ratchet_sync_allowed">سمح بإعادة التفاوض على التشفير ل%s</string> + <string name="snd_conn_event_ratchet_sync_agreed">وافق التعمية ل%s</string> + <string name="snd_conn_event_ratchet_sync_allowed">سمح بإعادة التفاوض على التعمية ل%s</string> <string name="error_accepting_contact_request">خطأ في قبول طلب جهة الاتصال</string> - <string name="status_contact_has_no_e2e_encryption">ليس لدى جهة الاتصال التشفير بين الطريفين</string> + <string name="status_contact_has_no_e2e_encryption">ليس لدى جهة الاتصال التعمية بين الطريفين</string> <string name="change_self_destruct_mode">تغيير وضع التدمير الذاتي</string> <string name="change_self_destruct_passcode">تغيير رمز المرور التدمير الذاتي</string> <string name="confirm_database_upgrades">تأكيد ترقيات قاعدة البيانات</string> @@ -290,7 +290,7 @@ <string name="connection_local_display_name">الاتصال %1$d</string> <string name="display_name_connection_established">انشأت الاتصال</string> <string name="callstatus_connecting">مكالمة جارية…</string> - <string name="encrypt_database">تشفير</string> + <string name="encrypt_database">عَمِّ</string> <string name="enter_passphrase">أدخل عبارة المرور…</string> <string name="group_member_status_creator">المنشئ</string> <string name="error_adding_members">خطأ في إضافة الأعضاء</string> @@ -316,20 +316,20 @@ <string name="create_address_and_let_people_connect">أنشئ عنوانًا للسماح للأشخاص بالتواصل معك.</string> <string name="smp_servers_enter_manually">أدخل الخادم يدويًا</string> <string name="colored_text">ملون</string> - <string name="status_contact_has_e2e_encryption">لدى جهة الاتصال التشفير بين الطريفين</string> + <string name="status_contact_has_e2e_encryption">لدى جهة الاتصال التعمية بين الطريفين</string> <string name="create_profile_button">إنشاء</string> <string name="create_your_profile">إنشاء حسابك الشخصي</string> <string name="icon_descr_call_connecting">مكالمة جارية...</string> <string name="enable_self_destruct">تفعيل التدمير الذاتي</string> - <string name="conn_event_ratchet_sync_started">الموافقة على التشفير…</string> - <string name="snd_conn_event_ratchet_sync_started">الموافقة على التشفير لـ%s…</string> + <string name="conn_event_ratchet_sync_started">الموافقة على التعمية…</string> + <string name="snd_conn_event_ratchet_sync_started">الموافقة على التعمية لـ%s…</string> <string name="group_member_status_introduced">متصل (مقدم)</string> - <string name="conn_event_ratchet_sync_agreed">وافق التشفير</string> - <string name="conn_event_ratchet_sync_ok">التشفير نعم</string> - <string name="snd_conn_event_ratchet_sync_ok">التشفير نعم ل%s</string> - <string name="conn_event_ratchet_sync_allowed">سمح بإعادة التفاوض على التشفير</string> - <string name="conn_event_ratchet_sync_required">مطلوب إعادة التفاوض على التشفير</string> - <string name="snd_conn_event_ratchet_sync_required">مطلوب إعادة التفاوض على التشفير ل%s</string> + <string name="conn_event_ratchet_sync_agreed">وافق التعمية</string> + <string name="conn_event_ratchet_sync_ok">التعمية نعم</string> + <string name="snd_conn_event_ratchet_sync_ok">التعمية نعم ل%s</string> + <string name="conn_event_ratchet_sync_allowed">سمح بإعادة التفاوض على التعمية</string> + <string name="conn_event_ratchet_sync_required">مطلوب إعادة التفاوض على التعمية</string> + <string name="snd_conn_event_ratchet_sync_required">مطلوب إعادة التفاوض على التعمية ل%s</string> <string name="error_changing_message_deletion">خطأ في تغيير الإعداد</string> <string name="error_changing_role">خطأ في تغيير الدور</string> <string name="alert_text_decryption_error_n_messages_failed_to_decrypt">%1$d فشل فك تشفير الرسائل.</string> @@ -344,7 +344,7 @@ <string name="delete_group_menu_action">حذف</string> <string name="delete_messages">حذف الرسائل</string> <string name="delete_messages_after">حذف الرسائل بعد</string> - <string name="database_encrypted">قاعدة بيانات مشفرة!</string> + <string name="database_encrypted">قاعدة البيانات مُعمّاة!</string> <string name="passphrase_is_different">تختلف عبارة مرور قاعدة البيانات عن تلك المحفوظة في Keystore.</string> <string name="database_error">خطأ في قاعدة البيانات</string> <string name="database_upgrade">ترقية قاعدة البيانات</string> @@ -360,8 +360,8 @@ <string name="delete_database">حذف قاعدة البيانات</string> <string name="delete_chat_profile_question">حذف ملف تعريف الدردشة؟</string> <string name="delete_files_and_media_for_all_users">حذف الملفات لجميع ملفات تعريف الدردشة</string> - <string name="encrypted_with_random_passphrase">قاعدة البيانات مشفرة باستخدام عبارة مرور عشوائية، يمكنك تغييرها.</string> - <string name="database_will_be_encrypted_and_passphrase_stored">سيتم تشفير قاعدة البيانات وتخزين عبارة المرور في Keystore.</string> + <string name="encrypted_with_random_passphrase">قاعدة البيانات مُعمّاة باستخدام عبارة مرور عشوائية، يمكنك تغييرها.</string> + <string name="database_will_be_encrypted_and_passphrase_stored">سيتم تعمية قاعدة البيانات وتخزين عبارة المرور في Keystore.</string> <string name="database_passphrase_is_required">عبارة مرور قاعدة البيانات مطلوبة لفتح الدردشة.</string> <string name="mtr_error_no_down_migration">إصدار قاعدة البيانات أحدث من التطبيق، ولكن لا يوجد ترحيل لأسفل ل%s</string> <string name="share_text_database_id">معرّف قاعدة البيانات: %d</string> @@ -370,13 +370,13 @@ <string name="full_deletion">حذف للجميع</string> <string name="custom_time_unit_days">أيام</string> <string name="delete_address">حذف العنوان</string> - <string name="database_passphrase_will_be_updated">سيتم تحديث عبارة مرور تشفير قاعدة البيانات.</string> + <string name="database_passphrase_will_be_updated">سيتم تحديث عبارة مرور تعمية قاعدة البيانات.</string> <string name="delete_archive">حذف الأرشيف</string> <string name="delete_link_question">حذف الرابط؟</string> <string name="database_downgrade">الرجوع إلى إصدار سابق من قاعدة البيانات</string> - <string name="set_password_to_export_desc">يتم تشفير قاعدة البيانات باستخدام عبارة مرور عشوائية. يرجى تغييره قبل التصدير.</string> + <string name="set_password_to_export_desc">قاعدة البيانات مُعمّاة باستخدام عبارة مرور عشوائية. يُرجى تغييره قبل التصدير.</string> <string name="ttl_day">%d يوم</string> - <string name="database_will_be_encrypted">سيتم تشفير قاعدة البيانات.</string> + <string name="database_will_be_encrypted">سيتم تعمية قاعدة البيانات.</string> <string name="delete_contact_menu_action">حذف</string> <string name="delete_files_and_media_question">حذف الملفات والوسائط؟</string> <string name="button_delete_contact">حذف جهة الاتصال</string> @@ -396,7 +396,7 @@ <string name="decentralized">لامركزي</string> <string name="database_passphrase">عبارة مرور قاعدة البيانات</string> <string name="current_passphrase">عبارة المرور الحالية…</string> - <string name="database_encryption_will_be_updated">سيتم تحديث عبارة مرور تشفير قاعدة البيانات وتخزينها في Keystore.</string> + <string name="database_encryption_will_be_updated">سيتم تحديث عبارة مرور تعمية قاعدة البيانات وتخزينها في Keystore.</string> <string name="info_row_database_id">معرّف قاعدة البيانات</string> <string name="info_row_deleted_at">حُذِفت في</string> <string name="ttl_d">%d يوم</string> @@ -552,7 +552,7 @@ \n2. فشل فك تشفير الرسالة، لأنك أو جهة اتصالك استخدمت نسخة احتياطية قديمة من قاعدة البيانات. \n3. اُخترق الاتصال.</string> <string name="v5_1_japanese_portuguese_interface">واجهة أستخدام يابانية وبرتغالية</string> - <string name="alert_text_fragment_encryption_out_of_sync_old_database">يمكن أن يحدث ذلك عندما تستخدم أنت أو اتصالك النسخة الاحتياطية القديمة لقاعدة البيانات.</string> + <string name="alert_text_fragment_encryption_out_of_sync_old_database">يمكن أن يحدث ذلك عندما تستخدم أنت أو اتصالك النُسخة الاحتياطية القديمة لقاعدة البيانات.</string> <string name="group_preview_join_as">انضمام ك%s</string> <string name="invalid_QR_code">رمز QR غير صالح</string> <string name="v4_5_italian_interface">الواجهة الإيطالية</string> @@ -615,7 +615,7 @@ <string name="integrity_msg_duplicate">كرر الرسالة</string> <string name="share_text_disappears_at">يختفي في: %s</string> <string name="disappearing_prohibited_in_this_chat">الرسائل المختفية ممنوعة في هذه الدردشة.</string> - <string name="status_e2e_encrypted">مشفر بين الطريفين</string> + <string name="status_e2e_encrypted">مُعمّى بين الطريفين</string> <string name="icon_descr_edited">حُرر</string> <string name="downgrade_and_open_chat">الرجوع إلى إصدار سابق وفتح الدردشة</string> <string name="direct_messages">رسائل مباشرة</string> @@ -625,7 +625,7 @@ <string name="settings_section_title_device">الجهاز</string> <string name="ttl_week">%d أسبوع</string> <string name="display_name_cannot_contain_whitespace">لا يمكن أن يحتوي اسم العرض على مسافة فارغة.</string> - <string name="encrypted_video_call">مكالمة فيديو مشفرة بين الطريفين</string> + <string name="encrypted_video_call">مكالمة فيديو مُعمّاة بين الطريفين</string> <string name="direct_messages_are_prohibited_in_chat">الرسائل المباشرة بين الأعضاء ممنوعة في هذه المجموعة.</string> <string name="ttl_hour">%d ساعة</string> <string name="ttl_h">%d ساعة</string> @@ -650,7 +650,7 @@ <string name="dont_enable_receipts">لا تُفعل</string> <string name="la_minutes">%d دقائق</string> <string name="la_seconds">%d ثواني</string> - <string name="encrypted_audio_call">مكالمة صوتية مشفرة بين الطريفين</string> + <string name="encrypted_audio_call">مكالمة صوتية مُعمّاة بين الطريفين</string> <string name="ttl_sec">%d ثانية</string> <string name="icon_descr_server_status_disconnected">قُطع الاتصال</string> <string name="disappearing_message">رسالة تختفي</string> @@ -694,7 +694,7 @@ <string name="v5_2_favourites_filter">البحث عن الدردشات بشكل أسرع</string> <string name="enable_receipts_all">تفعيل</string> <string name="v5_2_disappear_one_message_descr">حتى عندما يتم تعطيله في المحادثة.</string> - <string name="v5_2_fix_encryption_descr">إصلاح التشفير بعد استعادة النسخ الاحتياطية.</string> + <string name="v5_2_fix_encryption_descr">إصلاح التعمية بعد استعادة النُسخ الاحتياطية.</string> <string name="v5_2_disappear_one_message">اجعل رسالة واحدة تختفي</string> <string name="error_enabling_delivery_receipts">خطأ في تفعيل إيصالات التسليم!</string> <string name="error_saving_smp_servers">خطأ في حفظ خوادم SMP</string> @@ -748,7 +748,7 @@ <string name="v4_5_message_draft">مسودة الرسالة</string> <string name="v4_5_multiple_chat_profiles">ملفات تعريف دردشة متعددة</string> <string name="settings_notification_preview_title">معاينة الإشعار</string> - <string name="status_no_e2e_encryption">لا يوجد تشفير بين الطريفين</string> + <string name="status_no_e2e_encryption">لا يوجد تعمية بين الطريفين</string> <string name="chat_preferences_no">لا</string> <string name="notification_preview_new_message">رسالة جديدة</string> <string name="images_limit_desc">يمكن إرسال 10 صور فقط في نفس الوقت</string> @@ -829,7 +829,7 @@ <string name="call_connection_peer_to_peer">ندّ لِندّ</string> <string name="people_can_connect_only_via_links_you_share">يمكن للناس التواصل معك فقط عبر الرابط الذي تقوم بمشاركته</string> <string name="icon_descr_call_pending_sent">مكالمة في الانتظار</string> - <string name="only_client_devices_store_contacts_groups_e2e_encrypted_messages"><![CDATA[تقوم أجهزة العميل فقط بتخزين ملفات تعريف المستخدمين وجهات الاتصال والمجموعات والرسائل المرسلة باستخدام <b>تشفير ثنائي الطبقات من بين الطريفين</b>.]]></string> + <string name="only_client_devices_store_contacts_groups_e2e_encrypted_messages"><![CDATA[تقوم أجهزة العميل فقط بتخزين ملفات تعريف المستخدمين وجهات الاتصال والمجموعات والرسائل المُرسلة باستخدام <b>تعمية ثنائية الطبقات من بين الطريفين</b>.]]></string> <string name="reset_color">إعادة تعيين الألوان</string> <string name="save_verb">حفظ</string> <string name="smp_servers_preset_address">عنوان الخادم المحدد مسبقًا</string> @@ -932,7 +932,7 @@ <string name="simplex_service_notification_text">يتم استلام الرسائل…</string> <string name="observer_cant_send_message_desc">يرجى الاتصال بمسؤول المجموعة.</string> <string name="sync_connection_force_confirm">أعد التفاوض</string> - <string name="sync_connection_force_question">إعادة تفاوض التشفير</string> + <string name="sync_connection_force_question">إعادة تفاوض التعمية</string> <string name="revoke_file__action">سحب وصول الملف</string> <string name="revoke_file__title">سحب وصول الملف؟</string> <string name="toast_permission_denied">رٌفض الإذن!</string> @@ -947,7 +947,7 @@ <string name="save_and_notify_contact">حفظ وإشعار جهة الاتصال</string> <string name="settings_restart_app">إعادة التشغيل</string> <string name="share_text_received_at">استلمت في: %s</string> - <string name="renegotiate_encryption">إعادة تفاوض التشفير</string> + <string name="renegotiate_encryption">إعادة تفاوض التعمية</string> <string name="sender_at_ts">%s في %s</string> <string name="save_group_profile">حفظ ملف المجموعة</string> <string name="color_secondary">ثانوي</string> @@ -1090,7 +1090,7 @@ <string name="language_system">النظام</string> <string name="theme">السمة</string> <string name="to_start_a_new_chat_help_header">لبدء محادثة جديدة</string> - <string name="to_verify_compare">للتحقق من التشفير بين الطريفين مع جهة اتصالك، قارن (أو امسح) الرمز الموجود على أجهزتك.</string> + <string name="to_verify_compare">للتحقق من التعمية بين الطريفين مع جهة اتصالك، قارن (أو امسح) الرمز الموجود على أجهزتك.</string> <string name="group_is_decentralized">لامركزية بالكامل – مرئية للأعضاء فقط.</string> <string name="theme_system">النظام</string> <string name="error_smp_test_failed_at_step">فشل الاختبار في الخطوة %s.</string> @@ -1137,7 +1137,7 @@ <string name="database_backup_can_be_restored">لم تكتمل محاولة تغيير عبارة مرور قاعدة البيانات.</string> <string name="enter_passphrase_notification_desc">لتلقي الإشعارات، يرجى إدخال عبارة مرور قاعدة البيانات</string> <string name="la_lock_mode_system">مصادقة النظام</string> - <string name="sync_connection_force_desc">يعمل التشفير واتفاقية التشفير الجديدة غير مطلوبة. قد ينتج عن ذلك أخطاء في الاتصال!</string> + <string name="sync_connection_force_desc">يعمل التعمية واتفاقية التعمية الجديدة غير مطلوبة. قد ينتج عن ذلك أخطاء في الاتصال!</string> <string name="image_decoding_exception_desc">لا يمكن فك ترميز الصورة. من فضلك، جرب صورة مختلفة أو تواصل مع المطورين.</string> <string name="moderate_message_will_be_deleted_warning">سيتم حذف الرسالة لجميع الأعضاء.</string> <string name="images_limit_title">الصور كثيرة!</string> @@ -1220,7 +1220,7 @@ <string name="v4_3_irreversible_message_deletion_desc">يمكن أن تسمح جهات اتصالك بحذف الرسائل بالكامل.</string> <string name="unknown_message_format">تنسيق رسالة غير معروف</string> <string name="description_via_one_time_link">عبر رابط لمرة واحدة</string> - <string name="video_call_no_encryption">مكالمة الفيديو ليست مشفرة بين الطريفين</string> + <string name="video_call_no_encryption">مكالمة الفيديو ليست مُعمّاة بين الطريفين</string> <string name="snd_conn_event_switch_queue_phase_completed">غيّرتَ العنوان</string> <string name="you_will_be_connected_when_your_contacts_device_is_online">سوف تكون متصلاً عندما يكون جهاز جهة الاتصال الخاصة بك متصلاً بالإنترنت، يرجى الانتظار أو التحقق لاحقًا!</string> <string name="snd_group_event_user_left">غادرت</string> @@ -1230,7 +1230,7 @@ <string name="you_can_share_this_address_with_your_contacts">يمكنك مشاركة هذا العنوان مع جهات اتصالك للسماح لهم بالاتصال بـ%s.</string> <string name="snd_group_event_member_deleted">أُزيلت %1$s</string> <string name="update_database">تحديث</string> - <string name="database_is_not_encrypted">قاعدة بيانات الدردشة الخاصة بك غير مشفرة - قم بتعيين عبارة المرور لحمايتها.</string> + <string name="database_is_not_encrypted">قاعدة بيانات الدردشة الخاصة بك غير مُعمّاة - عيّن عبارة مرور لحمايتها.</string> <string name="wrong_passphrase">عبارة مرور قاعدة بيانات خاطئة</string> <string name="group_main_profile_sent">سيتم إرسال ملف تعريف الدردشة الخاص بك إلى أعضاء المجموعة</string> <string name="personal_welcome">مرحبًا! %1$s</string> @@ -1364,10 +1364,10 @@ <string name="privacy_show_last_messages">إظهار الرسائل الأخيرة</string> <string name="rcv_group_event_n_members_connected">%s، %s و %d أعضاء آخرين متصلون</string> <string name="rcv_group_event_3_members_connected">%s، %s و %s متصل</string> - <string name="database_will_be_encrypted_and_passphrase_stored_in_settings">سيتم تشفير قاعدة البيانات وتخزين عبارة المرور في الإعدادات.</string> + <string name="database_will_be_encrypted_and_passphrase_stored_in_settings">سيتم تعمية قاعدة البيانات وتخزين عبارة المرور في الإعدادات.</string> <string name="you_can_change_it_later">يُخزين عبارة المرور العشوائية في الإعدادات كنص عادي. \nيمكنك تغييره لاحقا.</string> - <string name="database_encryption_will_be_updated_in_settings">سيتم تحديث عبارة مرور تشفير قاعدة البيانات وتخزينها في الإعدادات.</string> + <string name="database_encryption_will_be_updated_in_settings">سيتم تحديث عبارة مرور تعمية قاعدة البيانات وتخزينها في الإعدادات.</string> <string name="remove_passphrase_from_settings">هل تريد إزالة عبارة المرور من الإعدادات؟</string> <string name="use_random_passphrase">استخدم عبارة مرور عشوائية</string> <string name="save_passphrase_in_settings">حفظ عبارة المرور في الإعدادات</string> @@ -1377,11 +1377,11 @@ <string name="passphrase_will_be_saved_in_settings">سيتم تخزين عبارة المرور في الإعدادات كنص عادي بعد تغييرها أو إعادة تشغيل التطبيق.</string> <string name="settings_is_storing_in_clear_text">يُخزين عبارة المرور في الإعدادات كنص عادي.</string> <string name="socks_proxy_setting_limitations"><![CDATA[<b>يُرجى الملاحظة</b>: يتم توصيل مرحلات الرسائل والملفات عبر وكيل SOCKS. تستخدم المكالمات وإرسال معاينات الارتباط الاتصال المباشر.]]></string> - <string name="encrypt_local_files">تشفير الملفات المحلية</string> - <string name="v5_3_encrypt_local_files">تشفير الملفات والوسائط المخزنة</string> + <string name="encrypt_local_files">عَمِّ الملفات المحلية</string> + <string name="v5_3_encrypt_local_files">عَمِّ الملفات والوسائط المخزنة</string> <string name="v5_3_new_desktop_app">تطبيق سطح المكتب الجديد!</string> <string name="v5_3_new_interface_languages">6 لغات واجهة جديدة</string> - <string name="v5_3_encrypt_local_files_descr">يقوم التطبيق بتشفير الملفات المحلية الجديدة (باستثناء مقاطع الفيديو).</string> + <string name="v5_3_encrypt_local_files_descr">يُعمِّي الملفات المحلية الجديدة (باستثناء مقاطع الفيديو).</string> <string name="v5_3_discover_join_groups">اكتشاف والانضمام إلى المجموعات</string> <string name="v5_3_new_interface_languages_descr">العربية والبلغارية والفنلندية والعبرية والتايلاندية والأوكرانية - شكرًا للمستخدمين و Weblate.</string> <string name="v5_3_new_desktop_app_descr">إنشاء ملف تعريف جديد في تطبيق سطح المكتب. 💻</string> @@ -1439,7 +1439,7 @@ <string name="desktop_app_version_is_incompatible">إصدار تطبيق سطح المكتب %s غير متوافق مع هذا التطبيق.</string> <string name="expand_verb">توسيع</string> <string name="connect_plan_repeat_connection_request">هل تريد تكرار طلب الاتصال؟</string> - <string name="encryption_renegotiation_error">خطأ في إعادة التفاوض بشأن التشفير</string> + <string name="encryption_renegotiation_error">خطأ في إعادة التفاوض بشأن التعمية</string> <string name="connect_plan_you_are_already_connecting_to_vName"><![CDATA[أنت متصل بالفعل بـ <b>%1$s</b>.]]></string> <string name="error_alert_title">خطأ</string> <string name="connect_plan_you_are_already_joining_the_group_via_this_link">لقد انضممت بالفعل إلى المجموعة عبر هذا الرابط.</string> @@ -1476,7 +1476,7 @@ <string name="connect_plan_this_is_your_own_simplex_address">هذا هو عنوان SimpleX الخاص بك!</string> <string name="loading_remote_file_title">جارِ تحميل الملف</string> <string name="found_desktop">وجدت سطح المكتب</string> - <string name="alert_text_encryption_renegotiation_failed">فشلت إعادة التفاوض على التشفير.</string> + <string name="alert_text_encryption_renegotiation_failed">فشلت إعادة التفاوض على التعمية.</string> <string name="not_compatible">غير متوافق!</string> <string name="link_a_mobile">ربط الجوّال</string> <string name="remove_member_button">إزالة العضو</string> @@ -1564,4 +1564,57 @@ \n \nيوصى بإعادة تشغيل التطبيق.</string> <string name="restart_chat_button">أعد تشغيل الدردشة</string> + <string name="remote_host_error_inactive"><![CDATA[الجوال <b>%s</b> غير نشط]]></string> + <string name="show_slow_api_calls">أظهر مكالمات API البطيئة</string> + <string name="group_member_status_unknown_short">غير معروف</string> + <string name="profile_update_event_updated_profile">حدّثت الملف الشخصي</string> + <string name="remote_host_error_missing"><![CDATA[الجوال <b>%s</b> مفقود]]></string> + <string name="remote_host_error_bad_version"><![CDATA[الجوال <b>%s</b> لديه إصدار غير مدعوم. يُرجى التأكد من استخدام نفس الإصدار على كلا الجهازين]]></string> + <string name="remote_host_error_bad_state"><![CDATA[الاتصال بالجوال <b>%s</b> في حالة سيئة]]></string> + <string name="failed_to_create_user_invalid_title">اسم العرض غير صالح!</string> + <string name="failed_to_create_user_invalid_desc">اسم العرض هذا غير صالح. الرجاء اختيار اسم آخر.</string> + <string name="remote_host_was_disconnected_title">توقف الاتصال</string> + <string name="remote_ctrl_was_disconnected_title">توقف الاتصال</string> + <string name="remote_host_disconnected_from"><![CDATA[قُطع الاتصال بالجوال <b>%s</b> بسبب: %s]]></string> + <string name="remote_ctrl_disconnected_with_reason">قُطع الاتصال بسبب: %s</string> + <string name="remote_host_error_disconnected"><![CDATA[قُطع اتصال الجوال <b>%s</b>]]></string> + <string name="remote_host_error_timeout"><![CDATA[انتهت المهلة أثناء الاتصال بالجوال <b>%s</b>]]></string> + <string name="remote_ctrl_error_inactive">سطح المكتب غير نشط</string> + <string name="remote_host_error_busy"><![CDATA[الجوال <b>%s</b> مشغول]]></string> + <string name="remote_ctrl_error_timeout">انتهت المهلة أثناء الاتصال بسطح المكتب</string> + <string name="remote_ctrl_error_disconnected">قُطع اتصال سطح المكتب</string> + <string name="remote_ctrl_error_bad_state">الاتصال بسطح المكتب في حالة سيئة</string> + <string name="remote_ctrl_error_bad_invitation">يحتوي سطح المكتب على رمز دعوة خاطئ</string> + <string name="remote_ctrl_error_busy">سطح المكتب مشغول</string> + <string name="remote_ctrl_error_bad_version">يحتوي سطح المكتب على إصدار غير مدعوم. يُرجى التأكد من استخدام نفس الإصدار على كلا الجهازين</string> + <string name="past_member_vName">العضو السابق %1$s</string> + <string name="possible_deadlock_title">مأزق</string> + <string name="possible_deadlock_desc">يستغرق تنفيذ التعليمات البرمجية وقتًا طويلاً جدًا: %1$d ثانية. من المحتمل أن التطبيق مجمّد: %2$s</string> + <string name="possible_slow_function_title">وظيفة بطيئة</string> + <string name="developer_options_section">خيارات المطور</string> + <string name="profile_update_event_member_name_changed">تغيّر العضو %1$s إلى %2$s</string> + <string name="profile_update_event_removed_address">أزلت عنوان الاتصال</string> + <string name="profile_update_event_removed_picture">أزلت الصورة الشخصية</string> + <string name="profile_update_event_set_new_address">عيّن عنوان جهة اتصال جديد</string> + <string name="profile_update_event_set_new_picture">عيّن صورة شخصية جديدة</string> + <string name="group_member_status_unknown">حالة غير معروفة</string> + <string name="profile_update_event_contact_name_changed">تغيّر جهة الاتصال %1$s إلى %2$s</string> + <string name="possible_slow_function_desc">يستغرق تنفيذ الوظيفة وقتًا طويلاً جدًا: %1$d ثانية: %2$s</string> + <string name="v5_5_private_notes">ملاحظات خاصة</string> + <string name="v5_5_join_group_conversation">انضم إلى المحادثات الجماعية</string> + <string name="v5_5_simpler_connect_ui_descr">يقبل شريط البحث روابط الدعوة.</string> + <string name="v5_5_message_delivery">تحسّن تسليم الرسائل</string> + <string name="v5_5_message_delivery_descr">مع انخفاض استخدام البطارية.</string> + <string name="clear_note_folder_warning">سيتم حذف كافة الرسائل - لا يمكن التراجع عن هذا!</string> + <string name="info_row_created_at">أُنشئ في</string> + <string name="v5_5_new_interface_languages">واجهة المستخدم المجرية والتركية</string> + <string name="v5_5_simpler_connect_ui">الصق الرابط للاتصال!</string> + <string name="v5_5_join_group_conversation_descr">التاريخ الحديث وبوت الدليل المحسن.</string> + <string name="v5_5_private_notes_descr">مع الملفات والوسائط المُعمّاة.</string> + <string name="error_creating_message">حدث خطأ أثناء إنشاء الرسالة</string> + <string name="error_deleting_note_folder">حدث خطأ أثناء حذف الملاحظات الخاصة</string> + <string name="note_folder_local_display_name">ملاحظات خاصة</string> + <string name="clear_note_folder_question">مسح الملاحظات الخاصة؟</string> + <string name="share_text_created_at">أُنشئ في: %s</string> + <string name="saved_message_title">رسالة محفوظة</string> </resources> \ No newline at end of file diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/bg/strings.xml b/apps/multiplatform/common/src/commonMain/resources/MR/bg/strings.xml index a73c72670..05101075a 100644 --- a/apps/multiplatform/common/src/commonMain/resources/MR/bg/strings.xml +++ b/apps/multiplatform/common/src/commonMain/resources/MR/bg/strings.xml @@ -475,7 +475,7 @@ <string name="scan_qr_to_connect_to_contact">За да се свърже, вашият контакт може да сканира QR код или да използва линка в приложението.</string> <string name="direct_messages">Лични съобщения</string> <string name="display_name">Въведи своето име:</string> - <string name="display_name_cannot_contain_whitespace">Показваното име не може да съдържа интервал.</string> + <string name="display_name_cannot_contain_whitespace">Името не може да съдържа интервал.</string> <string name="sending_delivery_receipts_will_be_enabled">Изпращането на потвърждениe за доставка ще бъде активирано за всички контакти.</string> <string name="receipts_contacts_enable_for_all">Активиране за всички</string> <string name="error_enabling_delivery_receipts">Грешка при активирането на потвърждениeто за доставка!</string> @@ -546,8 +546,8 @@ <string name="smp_server_test_delete_queue">Изтрий опашка</string> <string name="smp_server_test_disconnect">Прекъсни връзката</string> <string name="smp_server_test_download_file">Свали файл</string> - <string name="failed_to_create_user_duplicate_title">Дублирано показвано име!</string> - <string name="failed_to_create_user_duplicate_desc">Вече имате чат профил със същото показвано име. Моля, изберете друго име.</string> + <string name="failed_to_create_user_duplicate_title">Дублирано име!</string> + <string name="failed_to_create_user_duplicate_desc">Вече имате чат профил със същото име. Моля, изберете друго име.</string> <string name="la_minutes">%d минути</string> <string name="la_seconds">%d секунди</string> <string name="edit_verb">Редактирай</string> @@ -566,7 +566,7 @@ <string name="integrity_msg_duplicate">дублирано съобщение</string> <string name="privacy_and_security">Поверителност и сигурност</string> <string name="alert_text_fragment_encryption_out_of_sync_old_database">Това може да се случи, когато вие или вашата връзка използвате старо резервно копие на базата данни.</string> - <string name="self_destruct_new_display_name">Ново показвано име:</string> + <string name="self_destruct_new_display_name">Ново име:</string> <string name="enable_lock">Активирай заключване</string> <string name="enable_self_destruct">Активирай самоунищожение</string> <string name="chat_item_ttl_none">никога</string> @@ -1553,4 +1553,43 @@ <string name="search_or_paste_simplex_link">Търсене или поставяне на SimpleX линк</string> <string name="start_chat_question">Стартирай чата?</string> <string name="chat_is_stopped_you_should_transfer_database">Чатът е спрян. Ако вече сте използвали тази база данни на друго устройство, трябва да я прехвърлите обратно, преди да стартирате чата отново.</string> + <string name="remote_ctrl_error_bad_invitation">Настолното устройство има грешен код за връзка</string> + <string name="remote_ctrl_error_bad_version">Настолното устройство е с неподдържана версия. Моля, уверете се, че използвате една и съща версия и на двете устройства</string> + <string name="possible_deadlock_desc">Изпълнението на кода отнема твърде много време: %1$d секунди. Вероятно приложението е замразено: %2$s</string> + <string name="possible_slow_function_title">Бавна функция</string> + <string name="possible_slow_function_desc">Изпълнението на функцията отнема твърде много време: %1$d секунди: %2$s</string> + <string name="show_internal_errors">Покажи вътрешните грешки</string> + <string name="remote_host_disconnected_from"><![CDATA[Прекъсната е връзката с мобилното устройство <b>%s</b> с причина: %s]]></string> + <string name="remote_ctrl_was_disconnected_title">Връзката е прекъсната</string> + <string name="failed_to_create_user_invalid_title">Невалидно име!</string> + <string name="failed_to_create_user_invalid_desc">Това име е невалидно. Моля, изберете друго име.</string> + <string name="remote_host_was_disconnected_title">Връзката е прекъсната</string> + <string name="remote_ctrl_disconnected_with_reason">Прекъсната е връзката с причината: %s</string> + <string name="remote_host_error_missing"><![CDATA[Мобилното устройство <b>%s</b> липсва]]></string> + <string name="remote_host_error_inactive"><![CDATA[Мобилното устройство <b>%s</b> е неактивно]]></string> + <string name="remote_host_error_busy"><![CDATA[Мобилното устройство <b>%s</b> е заето]]></string> + <string name="remote_host_error_timeout"><![CDATA[Времето за изчакване е достигнато при свързване с мобилното устройство <b>%s</b>]]></string> + <string name="remote_host_error_bad_state"><![CDATA[Връзката с мобилното устройство <b>%s</b> е в лошо състояние]]></string> + <string name="remote_host_error_bad_version"><![CDATA[Мобилното устройство <b>%s</b> е с неподдържана версия. Моля, уверете се, че използвате една и съща версия и на двете устройства]]></string> + <string name="remote_host_error_disconnected"><![CDATA[Връзката с мобилното устройство <b>%s</b> бе прекъсната]]></string> + <string name="remote_ctrl_error_inactive">Настолното устройство е неактивно</string> + <string name="remote_ctrl_error_timeout">Времето за изчакване е достигнато при свързване с настолното устройство</string> + <string name="remote_ctrl_error_bad_state">Връзката с настолното устройство е в лошо състояние</string> + <string name="remote_ctrl_error_busy">Настолното устройство е заето</string> + <string name="remote_ctrl_error_disconnected">Връзката с настолното устройство бе прекъсната</string> + <string name="agent_critical_error_title">Критична грешка</string> + <string name="past_member_vName">Бивш член %1$s</string> + <string name="group_member_status_unknown">неизвестен статус</string> + <string name="group_member_status_unknown_short">неизвестен</string> + <string name="agent_internal_error_title">Вътрешна грешка</string> + <string name="agent_internal_error_desc">Моля, докладвайте го на разработчиците: +\n%s</string> + <string name="restart_chat_button">Рестартирай чата</string> + <string name="agent_critical_error_desc">Моля, докладвайте го на разработчиците: +\n%s +\n +\nПрепоръчително е да рестартирате приложението.</string> + <string name="developer_options_section">Опции за разработчици</string> + <string name="show_slow_api_calls">Показване на бавни API заявки</string> + <string name="possible_deadlock_title">Грешка в заключено положение</string> </resources> \ No newline at end of file diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/de/strings.xml b/apps/multiplatform/common/src/commonMain/resources/MR/de/strings.xml index a46bfdf41..236600fc2 100644 --- a/apps/multiplatform/common/src/commonMain/resources/MR/de/strings.xml +++ b/apps/multiplatform/common/src/commonMain/resources/MR/de/strings.xml @@ -690,7 +690,7 @@ <string name="youve_accepted_group_invitation_connecting_to_inviting_group_member">Sie sind dieser Gruppe beigetreten. Sie werden mit dem einladenden Gruppenmitglied verbunden.</string> <string name="leave_group_button">Verlassen</string> <string name="leave_group_question">Die Gruppe verlassen?</string> - <string name="you_will_stop_receiving_messages_from_this_group_chat_history_will_be_preserved">Sie werden von dieser Gruppe keine Nachrichten mehr erhalten. Der Chatverlauf wird beibehalten.</string> + <string name="you_will_stop_receiving_messages_from_this_group_chat_history_will_be_preserved">Sie werden von dieser Gruppe keine Nachrichten mehr erhalten. Der Nachrichtenverlauf wird beibehalten.</string> <string name="icon_descr_add_members">Mitglieder einladen</string> <string name="icon_descr_group_inactive">Gruppe inaktiv</string> <string name="alert_title_group_invitation_expired">Die Einladung ist abgelaufen!</string> @@ -1313,7 +1313,7 @@ <string name="custom_time_unit_hours">Stunden</string> <string name="v5_1_better_messages_descr">- Bis zu 5 Minuten lange Sprachnachrichten \n- Zeitdauer für verschwindende Nachrichten anpassen -\n- Nachrichten-Verlauf bearbeiten</string> +\n- Nachrichtenverlauf bearbeiten</string> <string name="custom_time_picker_custom">benutzerdefiniert</string> <string name="custom_time_unit_months">Monate</string> <string name="custom_time_picker_select">Auswählen</string> @@ -1324,7 +1324,7 @@ <string name="share_text_deleted_at">Gelöscht um: %s</string> <string name="info_row_disappears_at">Verschwindet um</string> <string name="share_text_disappears_at">Verschwindet um: %s</string> - <string name="edit_history">Verlauf bearbeiten</string> + <string name="edit_history">Nachrichtenverlauf bearbeiten</string> <string name="message_reactions_prohibited_in_this_chat">In diesem Chat sind Reaktionen auf Nachrichten nicht erlaubt.</string> <string name="item_info_no_text">Kein Text</string> <string name="non_fatal_errors_occured_during_import">Während des Imports sind einige nicht schwerwiegende Fehler aufgetreten – weitere Details finden Sie in der Chat-Konsole.</string> @@ -1356,7 +1356,7 @@ <string name="error_synchronizing_connection">Fehler beim Synchronisieren der Verbindung</string> <string name="sync_connection_force_question">Verschlüsselung neu aushandeln\?</string> <string name="fix_connection_question">Verbindung reparieren\?</string> - <string name="no_history">Kein Verlauf</string> + <string name="no_history">Kein Nachrichtenverlauf</string> <string name="sync_connection_force_confirm">Neu aushandeln</string> <string name="sync_connection_force_desc">Die Verschlüsselung funktioniert und ein neues Verschlüsselungsabkommen ist nicht erforderlich. Es kann zu Verbindungsfehlern kommen!</string> <string name="renegotiate_encryption">Verschlüsselung neu aushandeln</string> @@ -1608,12 +1608,12 @@ <string name="error_showing_content">Fehler beim Anzeigen des Inhalts</string> <string name="error_showing_message">Fehler beim Anzeigen der Nachricht</string> <string name="you_can_make_address_visible_via_settings">Sie können sie über Einstellungen für Ihre SimpleX-Kontakte sichtbar machen.</string> - <string name="recent_history_is_not_sent_to_new_members">Der Verlauf wird nicht an neue Gruppenmitglieder gesendet.</string> + <string name="recent_history_is_not_sent_to_new_members">Der Nachrichtenverlauf wird nicht an neue Gruppenmitglieder gesendet.</string> <string name="retry_verb">Wiederholen</string> <string name="camera_not_available">Kamera nicht verfügbar</string> <string name="enable_sending_recent_history">Bis zu 100 der letzten Nachrichten an neue Gruppenmitglieder senden.</string> <string name="add_contact_button_to_create_link_or_connect_via_link"><![CDATA[<b>Kontakt hinzufügen</b>: Um einen neuen Einladungslink zu erstellen oder eine Verbindung über einen Link herzustellen, den Sie erhalten haben.]]></string> - <string name="disable_sending_recent_history">Den Verlauf nicht an neue Mitglieder senden.</string> + <string name="disable_sending_recent_history">Den Nachrichtenverlauf nicht an neue Mitglieder senden.</string> <string name="or_show_this_qr_code">Oder diesen QR-Code anzeigen</string> <string name="recent_history_is_sent_to_new_members">Bis zu 100 der letzten Nachrichten werden an neue Mitglieder gesendet.</string> <string name="code_you_scanned_is_not_simplex_link_qr_code">Der von Ihnen gescannte Code ist kein SimpleX-Link-QR-Code.</string> @@ -1623,7 +1623,7 @@ <string name="keep_unused_invitation_question">Nicht genutzte Einladung behalten?</string> <string name="share_this_1_time_link">Teilen Sie diesen Einmal-Einladungslink</string> <string name="create_group_button_to_create_new_group"><![CDATA[<b>Gruppe erstellen</b>: Um eine neue Gruppe zu erstellen.]]></string> - <string name="recent_history">Sichtbarer Verlauf</string> + <string name="recent_history">Sichtbarer Nachrichtenverlauf</string> <string name="la_app_passcode">App-Zugangscode</string> <string name="new_chat">Neuer Chat</string> <string name="loading_chats">Chats werden geladen…</string> @@ -1667,4 +1667,13 @@ <string name="agent_internal_error_title">Interner Fehler</string> <string name="remote_host_error_bad_version"><![CDATA[Auf dem Mobiltelefon <b>%s</b> wird eine nicht unterstützte Version verwendet. Bitte stellen Sie sicher, dass beide Geräte die selbe Version nutzen]]></string> <string name="remote_host_error_busy"><![CDATA[Mobiltelefon <b>%s</b> ist besetzt]]></string> + <string name="past_member_vName">Ehemaliges Mitglied %1$s</string> + <string name="possible_slow_function_desc">Die Ausführung dieser Funktion dauert zu lange: %1$d Sekunden: %2$s</string> + <string name="possible_slow_function_title">Langsame Funktion</string> + <string name="show_slow_api_calls">Zeige langsame API-Aufrufe an</string> + <string name="group_member_status_unknown_short">unbekannt</string> + <string name="possible_deadlock_title">Blockade</string> + <string name="developer_options_section">Optionen für Entwickler</string> + <string name="possible_deadlock_desc">Die Code-Ausführung dauert zu lange: %1$d Sekunden. Wahrscheinlich ist die App eingefroren: %2$s</string> + <string name="group_member_status_unknown">unbekannter Gruppenmitglieds-Status</string> </resources> \ No newline at end of file diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/es/strings.xml b/apps/multiplatform/common/src/commonMain/resources/MR/es/strings.xml index e1ded8295..f67a753bb 100644 --- a/apps/multiplatform/common/src/commonMain/resources/MR/es/strings.xml +++ b/apps/multiplatform/common/src/commonMain/resources/MR/es/strings.xml @@ -680,7 +680,7 @@ <string name="run_chat_section">EJECUTAR CHAT</string> <string name="restart_the_app_to_use_imported_chat_database">Reinicia la aplicación para poder usar la base de datos importada.</string> <string name="enter_correct_current_passphrase">Introduce la contraseña actual correcta.</string> - <string name="feature_received_prohibited">recepción prohibida</string> + <string name="feature_received_prohibited">recepción no permitida</string> <string name="only_you_can_delete_messages">Sólo tú puedes eliminar mensajes de forma irreversible (tu contacto puede marcarlos para eliminar). (24 horas)</string> <string name="prohibit_direct_messages">No se permiten mensajes directos entre miembros.</string> <string name="prohibit_sending_disappearing">No se permiten mensajes temporales.</string> diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/fa/strings.xml b/apps/multiplatform/common/src/commonMain/resources/MR/fa/strings.xml new file mode 100644 index 000000000..07e0b09a3 --- /dev/null +++ b/apps/multiplatform/common/src/commonMain/resources/MR/fa/strings.xml @@ -0,0 +1,85 @@ +<?xml version="1.0" encoding="utf-8"?> +<resources> + <string name="alert_text_decryption_error_n_messages_failed_to_decrypt">رمزگشایی %1$d پیام ناموفق بود.</string> + <string name="moderated_items_description">%1$d پیام توسط %2$s حذف شد</string> + <string name="integrity_msg_skipped">%1$d پیام از قلم افتاده</string> + <string name="group_info_section_title_num_members">%1$s عضو</string> + <string name="contact_wants_to_connect_via_call">%1$s می‌خواهد به شما متصل شود، به وسیله</string> + <string name="chat_item_ttl_day">1 روز</string> + <string name="send_disappearing_message_1_minute">1 دقیقه</string> + <string name="abort_switch_receiving_address_confirm">لغو</string> + <string name="abort_switch_receiving_address">لغو تغییر نشانی</string> + <string name="abort_switch_receiving_address_question">تغییر نشانی را لغو می‌کنید؟</string> + <string name="about_simplex">درباره سیمپل‌اکس(SimpleX)</string> + <string name="connect_via_contact_link">به وسیله نشانی مخاطب متصل می‌شوید؟</string> + <string name="connect_via_invitation_link">به وسیله لینک یک بار مصرف متصل می‌شوید؟</string> + <string name="connect_use_new_incognito_profile">از نمایه ناشناس جدید استفاده کن</string> + <string name="opening_database">در حال گشودن پایگاه داده…</string> + <string name="profile_will_be_sent_to_contact_sending_link">نمایه شما به مخاطبی که این لینک را از او دریافت کردید، فرستاده خواهد شد.</string> + <string name="connect_via_link_incognito">متصل شدن به صورت ناشناس</string> + <string name="non_content_uri_alert_text">شما یک مسیر نامعتبر پرونده به اشتراک گذاشتید. موضوع را به توسعه‌دهندگان برنامه گزارش دهید.</string> + <string name="receiving_files_not_yet_supported">هنوز از دریافت پرونده پشتیبانی نمی‌شود</string> + <string name="invalid_message_format">قالب پیام نامعتبر</string> + <string name="moderated_description">حذف شده</string> + <string name="error_showing_message">خطا در نمایش پیام</string> + <string name="trying_to_connect_to_server_to_receive_messages">در حال تلاش برای اتصال به سرور مورد استفاده برای دریافت پیام‌ها از این مخاطب.</string> + <string name="marked_deleted_items_description">%d پیام به عنوان حذف شده علامت گذاشته شد</string> + <string name="connected_to_server_to_receive_messages_from_contact">به سرور مورد استفاده برای دریافت پیام‌ها از این مخاطب متصل شده‌اید.</string> + <string name="server_connected">متصل</string> + <string name="server_error">خطا</string> + <string name="server_connecting">در حال اتصال</string> + <string name="thousand_abbreviation">k</string> + <string name="connect_via_group_link">به گروه می‌پیوندید؟</string> + <string name="connect_use_current_profile">از نمایه کنونی استفاده کن</string> + <string name="you_will_join_group">به تمام اعضای گروه متصل خواهید شد.</string> + <string name="connect_via_link_verb">متصل شدن</string> + <string name="non_content_uri_alert_title">مسیر نامعتبر پرونده</string> + <string name="app_was_crashed">برنامه از کار افتاد</string> + <string name="trying_to_connect_to_server_to_receive_messages_with_error">در حال تلاش برای اتصال به سرور مورد استفاده برای دریافت پیام‌ها از این مخاطب (خطا: %1$s).</string> + <string name="deleted_description">حذف شده</string> + <string name="marked_deleted_description">علامت گذاشته شده به عنوان حذف شده</string> + <string name="moderated_item_description">توسط %s حذف شد</string> + <string name="blocked_item_description">مسدود</string> + <string name="blocked_items_description">%d پیام مسدود شده</string> + <string name="sending_files_not_yet_supported">هنوز از ارسال پرونده پشتیبانی نمی‌شود</string> + <string name="sender_you_pronoun">شما</string> + <string name="unknown_message_format">قالب پیام ناشناخته</string> + <string name="live">زنده</string> + <string name="invalid_chat">گپ نامعتبر</string> + <string name="invalid_data">داده نامعتبر</string> + <string name="error_showing_content">خطا در نمایش محتوا</string> + <string name="decryption_error">خطا در رمزگشایی</string> + <string name="send_disappearing_message_5_minutes">5 دقیقه</string> + <string name="learn_more_about_address">درباره نشانی سیمپل‌اکس(SimpleX)</string> + <string name="one_time_link_short">لینک یک بار مصرف</string> + <string name="about_simplex_chat">درباره سیمپل‌اکس چت(SimpleX Chat)</string> + <string name="alert_text_decryption_error_too_many_skipped">%1$d پیام از قلم افتاد.</string> + <string name="chat_item_ttl_month">1 ماه</string> + <string name="chat_item_ttl_week">1 هفته</string> + <string name="v5_3_new_interface_languages">6 زبان جدید برای رابط کاربری</string> + <string name="send_disappearing_message_30_seconds">30 ثانیه</string> + <string name="description_you_shared_one_time_link_incognito">شما لینک یک بار مصرف ناشناس به اشتراک گذاشتید</string> + <string name="description_via_group_link">به وسیله لینک گروه</string> + <string name="description_via_group_link_incognito">ناشناس به وسیله لینک گروه</string> + <string name="description_via_contact_address_link">به وسیله لینک نشانی مخاطب</string> + <string name="description_via_one_time_link_incognito">ناشناس به وسیله لینک یک بار مصرف</string> + <string name="simplex_link_mode_description">توصیف</string> + <string name="simplex_link_mode_full">لینک کامل</string> + <string name="simplex_link_mode">لینک‌های SimpleX</string> + <string name="error_saving_smp_servers">خطا در ذخیره کردن سرورهای SMP</string> + <string name="error_saving_xftp_servers">خطا در ذخیره کردن سرورهای XFTP</string> + <string name="encryption_renegotiation_error">خطا در مذاکره مجدد رمزگذاری</string> + <string name="connection_local_display_name">اتصال %1$d</string> + <string name="display_name_connection_established">اتصال برقرار شد</string> + <string name="description_you_shared_one_time_link">شما لینک یک بار مصرف به اشتراک گذاشتید</string> + <string name="display_name_invited_to_connect">برای اتصال دعوت شده</string> + <string name="description_via_contact_address_link_incognito">ناشناس به وسیله لینک نشانی مخاطب</string> + <string name="description_via_one_time_link">به وسیله لینک یک بار مصرف</string> + <string name="simplex_link_group">لینک گروه SimpleX</string> + <string name="simplex_link_connection">به وسیله %1$s</string> + <string name="simplex_link_mode_browser">به وسیله مرورگر</string> + <string name="simplex_link_contact">نشانی مخاطب SimpleX</string> + <string name="simplex_link_invitation">دعوت یک بار مصرف SimpleX</string> + <string name="display_name_connecting">در حال اتصال…</string> + <string name="simplex_link_mode_browser_warning">باز کردن لینک در مرورگر ممکن است حریم خصوصی و امنیت اتصال را کاهش دهد. لینک‌های SimpleX ناموثق قرمز خواهند بود.</string> +</resources> \ No newline at end of file diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/fr/strings.xml b/apps/multiplatform/common/src/commonMain/resources/MR/fr/strings.xml index 88f276cea..43068ac7b 100644 --- a/apps/multiplatform/common/src/commonMain/resources/MR/fr/strings.xml +++ b/apps/multiplatform/common/src/commonMain/resources/MR/fr/strings.xml @@ -1556,4 +1556,67 @@ <string name="search_or_paste_simplex_link">Rechercher ou coller un lien SimpleX</string> <string name="chat_is_stopped_you_should_transfer_database">Le chat est arrêté. Si vous avez déjà utilisé cette base de données sur un autre appareil, vous devez la transférer à nouveau avant de démarrer le chat.</string> <string name="start_chat_question">Lancer le chat ?</string> + <string name="remote_host_error_bad_state"><![CDATA[État médiocre de la connexion au mobile <b>%s</b>.]]></string> + <string name="remote_ctrl_was_disconnected_title">Connexion interrompue</string> + <string name="remote_ctrl_error_bad_state">État médiocre de la connexion avec le bureau</string> + <string name="possible_deadlock_title">Impasse</string> + <string name="remote_ctrl_error_bad_version">La version de l\'ordinateur de bureau n\'est pas prise en charge. Veillez à utiliser la même version sur les deux appareils.</string> + <string name="remote_ctrl_error_disconnected">Le bureau a été déconnecté</string> + <string name="developer_options_section">Options pour les développeurs</string> + <string name="possible_deadlock_desc">Le code prend trop de temps à s\'exécuter : %1$d secondes. Il est probable que l\'application soit figée : %2$s</string> + <string name="agent_internal_error_title">Erreur interne</string> + <string name="remote_host_error_bad_version"><![CDATA[La version du mobile <b>%s</b> n\'est pas prise en charge. Veillez à utiliser la même version sur les deux appareils.]]></string> + <string name="show_internal_errors">Afficher les erreurs internes</string> + <string name="remote_ctrl_disconnected_with_reason">Déconnecté pour la raison suivante : %s</string> + <string name="failed_to_create_user_invalid_title">Nom d\'affichage invalide !</string> + <string name="failed_to_create_user_invalid_desc">Ce nom d\'affichage est invalide. Veuillez choisir un autre nom.</string> + <string name="remote_ctrl_error_timeout">Délai d\'attente dépassé lors de la connexion au bureau</string> + <string name="agent_critical_error_title">Erreur critique</string> + <string name="agent_critical_error_desc">Veuillez le signaler aux développeurs : +\n%s +\n +\nIl est recommandé de redémarrer l\'application.</string> + <string name="agent_internal_error_desc">Veuillez le signaler aux développeurs : +\n%s</string> + <string name="restart_chat_button">Redémarrer le chat</string> + <string name="group_member_status_unknown_short">inconnu</string> + <string name="group_member_status_unknown">statut inconnu</string> + <string name="remote_host_was_disconnected_title">Connexion interrompue</string> + <string name="past_member_vName">Ancien membre %1$s</string> + <string name="possible_slow_function_desc">La fonctions prend trop de temps à s\'exécuter : %1$d secondes : %2$s</string> + <string name="possible_slow_function_title">Fonction lente</string> + <string name="show_slow_api_calls">Afficher les appels d\'API lents</string> + <string name="remote_host_disconnected_from"><![CDATA[Déconnecté du mobile <b>%s</b> en raison de : %s]]></string> + <string name="remote_host_error_busy"><![CDATA[Mobile <b>%s</b> est occupé]]></string> + <string name="remote_host_error_inactive"><![CDATA[Le mobile <b>%s</b> est inactif]]></string> + <string name="remote_host_error_missing"><![CDATA[Mobile <b>%s</b> est manquant]]></string> + <string name="remote_host_error_disconnected"><![CDATA[Le mobile <b>%s</b> a été déconnecté]]></string> + <string name="remote_host_error_timeout"><![CDATA[Délai d\'attente expiré lors de la connexion au mobile <b>%s</b>]]></string> + <string name="remote_ctrl_error_bad_invitation">Le bureau ne possède pas le bon code d\'invitation</string> + <string name="remote_ctrl_error_busy">Le bureau est occupé</string> + <string name="remote_ctrl_error_inactive">Le bureau est inactif</string> + <string name="v5_5_private_notes_descr">Avec les fichiers et les médias chiffrés.</string> + <string name="v5_5_join_group_conversation_descr">Historique récent et bot d\'annuaire amélioré.</string> + <string name="v5_5_simpler_connect_ui_descr">La barre de recherche accepte les liens d\'invitation.</string> + <string name="v5_5_message_delivery_descr">Consommation réduite de la batterie.</string> + <string name="clear_note_folder_warning">Tous les messages seront supprimés - il n\'est pas possible de revenir en arrière !</string> + <string name="v5_5_new_interface_languages">Interface utilisateur en hongrois et en turc</string> + <string name="v5_5_private_notes">Notes privées</string> + <string name="info_row_created_at">Créé à</string> + <string name="error_creating_message">Erreur lors de la création du message</string> + <string name="v5_5_message_delivery">Amélioration de la transmission des messages</string> + <string name="v5_5_join_group_conversation">Participez aux conversations de groupe</string> + <string name="share_text_created_at">Créé à : %s</string> + <string name="error_deleting_note_folder">Erreur lors de la suppression de notes privées</string> + <string name="v5_5_simpler_connect_ui">Collez le lien pour vous connecter !</string> + <string name="note_folder_local_display_name">Notes privées</string> + <string name="profile_update_event_contact_name_changed">le contact %1$s est devenu %2$s</string> + <string name="profile_update_event_member_name_changed">le membre %1$s est devenu %2$s</string> + <string name="profile_update_event_removed_address">suppression de l\'adresse de contact</string> + <string name="profile_update_event_removed_picture">suppression de la photo de profil</string> + <string name="profile_update_event_set_new_address">définir une nouvelle adresse de contact</string> + <string name="profile_update_event_set_new_picture">définir une nouvelle image de profil</string> + <string name="profile_update_event_updated_profile">profil mis à jour</string> + <string name="clear_note_folder_question">Effacer les notes privées ?</string> + <string name="saved_message_title">Message enregistré</string> </resources> \ No newline at end of file diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/hu/strings.xml b/apps/multiplatform/common/src/commonMain/resources/MR/hu/strings.xml index 1cc668e79..26bfc908c 100644 --- a/apps/multiplatform/common/src/commonMain/resources/MR/hu/strings.xml +++ b/apps/multiplatform/common/src/commonMain/resources/MR/hu/strings.xml @@ -1564,4 +1564,54 @@ <string name="remote_host_was_disconnected_title">A kapcsolat megszakadt</string> <string name="remote_ctrl_was_disconnected_title">A kapcsolat megszakadt</string> <string name="remote_ctrl_error_bad_state">Az asztali kliens kapcsolata rossz állapotban van</string> + <string name="agent_critical_error_desc">Kérjük, jelezd ezt a fejlesztőknek: +\n%s +\n +\nJavasoljuk, hogy indítsd újra az alkalmazást.</string> + <string name="agent_internal_error_desc">Kérjük, jelezd a fejlesztőknek: +\n%s</string> + <string name="remote_host_error_bad_version"><![CDATA[A(z) <b>%s</b> mobil eszköz verziója nem támogatott. Kérlek, győződj meg róla, hogy mindkét eszközön ugyanazt a verziót használod]]></string> + <string name="remote_host_error_disconnected"><![CDATA[Megszakadt a kapcsolat a(z) <b>%s</b> mobil eszközzel]]></string> + <string name="failed_to_create_user_invalid_title">Érvénytelen megjelenítendő felhaszálónév!</string> + <string name="failed_to_create_user_invalid_desc">Ez a megjelenített felhasználónév érvénytelen. Kérjük, válassz másikat.</string> + <string name="remote_host_disconnected_from"><![CDATA[Megszakadt a kapcsolat a <b>%s</b> mobil eszközzel, a(z) %s probléma miatt.]]></string> + <string name="remote_ctrl_disconnected_with_reason">%s probléma miatt megszakadt a kapcsolat</string> + <string name="remote_host_error_missing"><![CDATA[A(z) <b>%s</b> mobil eszköz nem található]]></string> + <string name="remote_host_error_bad_state"><![CDATA[A kapcsolat a(z) <b>%s</b> mobil eszközzel rossz állapotban van]]></string> + <string name="remote_host_error_timeout"><![CDATA[Időtúllépés a(z) <b>%s</b> mobil eszközhöz való csatlakozás közben]]></string> + <string name="group_member_status_unknown_short">ismeretlen</string> + <string name="possible_slow_function_title">Lassú funkció</string> + <string name="show_slow_api_calls">Lassú API-hívások megjelenítése</string> + <string name="remote_host_error_inactive"><![CDATA[A(z) <b>%s</b> mobil eszköz inaktív]]></string> + <string name="possible_deadlock_title">Elakadt</string> + <string name="developer_options_section">Fejlesztői beállítások</string> + <string name="possible_deadlock_desc">A kód végrehajtása túl sokáig tart: %1$d másodperc. Valószínűleg az alkalmazás lefagyott: %2$s</string> + <string name="possible_slow_function_desc">A funkció végrehajtása túl sokáig tart: %1$d másodperc: %2$s</string> + <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 %2$s-ra/re változott</string> + <string name="profile_update_event_removed_address">törölt csatlakozási cím</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_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 %2$s-ra/re változott</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> + <string name="clear_note_folder_question">Törlöd a privát jegyzeteket?</string> + <string name="info_row_created_at">Létrehozva ekkor:</string> + <string name="saved_message_title">Mentett üzenet</string> + <string name="share_text_created_at">Létrehozva ekkor: %s</string> + <string name="clear_note_folder_warning">Az összes üzenet törlődik – ez 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">A link beillesztése a csatlakozáshoz!</string> + <string name="v5_5_private_notes">Privát jegyzetek</string> + <string name="v5_5_simpler_connect_ui_descr">A keresősáv fogadja a meghívó hivatkozásokat.</string> + <string name="v5_5_private_notes_descr">Titkosított fájlokkal és média állományokkal.</string> + <string name="v5_5_message_delivery_descr">Csökkentett akkumulátorhasználattal.</string> + <string name="v5_5_new_interface_languages">Magyar és török felhasználói felület</string> + <string name="v5_5_join_group_conversation_descr">A közelmúlt eseményei és továbbfejlesztett Jegyzék Bot.</string> </resources> \ No newline at end of file diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/it/strings.xml b/apps/multiplatform/common/src/commonMain/resources/MR/it/strings.xml index 61755d1db..e0ebdcacc 100644 --- a/apps/multiplatform/common/src/commonMain/resources/MR/it/strings.xml +++ b/apps/multiplatform/common/src/commonMain/resources/MR/it/strings.xml @@ -678,7 +678,7 @@ <string name="video_call_no_encryption">videochiamata (non crittografata e2e)</string> <string name="onboarding_notifications_mode_off">Quando l\'app è in esecuzione</string> <string name="contact_wants_to_connect_via_call">%1$s vuole connettersi con te via</string> - <string name="you_control_servers_to_receive_your_contacts_to_send"><![CDATA[Puoi controllare attraverso quale/i server <b>ricevere</b> i messaggi, i tuoi contatti – i server che usi per inviare loro i messaggi.]]></string> + <string name="you_control_servers_to_receive_your_contacts_to_send"><![CDATA[Tu decidi attraverso quale/i server <b>ricevere</b> i messaggi, i tuoi contatti quali server usi per inviare loro i messaggi.]]></string> <string name="alert_text_skipped_messages_it_can_happen_when">Può accadere quando: \n1. I messaggi sono scaduti sul client mittente dopo 2 giorni o sul server dopo 30 giorni. \n2. La decifrazione del messaggio è fallita, perché tu o il tuo contatto avete usato un backup del database vecchio. @@ -1566,4 +1566,57 @@ \n%s</string> <string name="restart_chat_button">Riavvia la chat</string> <string name="show_internal_errors">Mostra errori interni</string> + <string name="remote_host_disconnected_from"><![CDATA[Disconnesso dal telefono <b>%s</b> per il motivo: %s]]></string> + <string name="remote_ctrl_disconnected_with_reason">Disconnesso per il motivo: %s</string> + <string name="remote_host_was_disconnected_title">Connessione interrotta</string> + <string name="remote_ctrl_was_disconnected_title">Connessione interrotta</string> + <string name="remote_host_error_missing"><![CDATA[Telefono <b>%s</b> non trovato]]></string> + <string name="remote_ctrl_error_busy">Il desktop è occupato</string> + <string name="remote_ctrl_error_bad_version">Il desktop ha una versione non supportata. Assicurati di usare la stessa versione su entrambi i dispositivi</string> + <string name="failed_to_create_user_invalid_title">Nome da mostrare non valido!</string> + <string name="failed_to_create_user_invalid_desc">Questo nome da mostrare non è valido. Scegline un altro.</string> + <string name="remote_host_error_bad_state"><![CDATA[La connessione al telefono <b>%s</b> è in cattivo stato]]></string> + <string name="remote_host_error_bad_version"><![CDATA[Il telefono <b>%s</b> ha una versione non supportata. Assicurati di usare la stessa versione su entrambi i dispositivi]]></string> + <string name="remote_host_error_busy"><![CDATA[Il telefono <b>%s</b> è occupato]]></string> + <string name="remote_host_error_inactive"><![CDATA[Il telefono <b>%s</b> è inattivo]]></string> + <string name="remote_host_error_disconnected"><![CDATA[Il telefono <b>%s</b> è stato disconnesso]]></string> + <string name="remote_host_error_timeout"><![CDATA[Tempo scaduto durante la connessione al telefono <b>%s</b>]]></string> + <string name="remote_ctrl_error_bad_state">La connessione al desktop è in cattivo stato</string> + <string name="remote_ctrl_error_bad_invitation">Il desktop ha un codice di invito sbagliato</string> + <string name="remote_ctrl_error_inactive">Il desktop è inattivo</string> + <string name="remote_ctrl_error_disconnected">Il desktop è stato disconnesso</string> + <string name="remote_ctrl_error_timeout">Tempo scaduto durante la connessione al desktop</string> + <string name="past_member_vName">Membro passato %1$s</string> + <string name="possible_slow_function_desc">L\'esecuzione della funzione impiega troppo tempo: %1$d secondi: %2$s</string> + <string name="possible_slow_function_title">Funzione lenta</string> + <string name="show_slow_api_calls">Mostra chiamate API lente</string> + <string name="group_member_status_unknown_short">sconosciuto</string> + <string name="possible_deadlock_desc">L\'esecuzione del codice impiega troppo tempo: %1$d secondi. Probabilmente l\'app è congelata: %2$s</string> + <string name="group_member_status_unknown">stato sconosciuto</string> + <string name="possible_deadlock_title">Stallo</string> + <string name="developer_options_section">Opzioni sviluppatore</string> + <string name="v5_5_private_notes">Note private</string> + <string name="v5_5_new_interface_languages">Interfaccia in ungherese e turco</string> + <string name="v5_5_join_group_conversation_descr">Cronologia recente e bot della directory migliorato.</string> + <string name="info_row_created_at">Creato il</string> + <string name="clear_note_folder_warning">Tutti i messaggi verranno eliminati, non è reversibile!</string> + <string name="share_text_created_at">Creato il: %s</string> + <string name="error_creating_message">Errore di creazione del messaggio</string> + <string name="error_deleting_note_folder">Errore di eliminazione delle note private</string> + <string name="v5_5_message_delivery">Consegna dei messaggi migliorata</string> + <string name="v5_5_join_group_conversation">Entra in conversazioni di gruppo</string> + <string name="profile_update_event_member_name_changed">membro %1$s cambiato in %2$s</string> + <string name="v5_5_simpler_connect_ui">Incolla un link per connettere!</string> + <string name="profile_update_event_removed_address">indirizzo di contatto rimosso</string> + <string name="profile_update_event_contact_name_changed">contatto %1$s cambiato in %2$s</string> + <string name="note_folder_local_display_name">Note private</string> + <string name="clear_note_folder_question">Svuotare le note private?</string> + <string name="profile_update_event_removed_picture">immagine del profilo rimossa</string> + <string name="v5_5_private_notes_descr">Con file e multimediali criptati.</string> + <string name="v5_5_simpler_connect_ui_descr">La barra di ricerca accetta i link di invito.</string> + <string name="profile_update_event_set_new_picture">impostata nuova immagine del profilo</string> + <string name="profile_update_event_set_new_address">impostato nuovo indirizzo di contatto</string> + <string name="profile_update_event_updated_profile">profilo aggiornato</string> + <string name="saved_message_title">Messaggio salvato</string> + <string name="v5_5_message_delivery_descr">Con consumo di batteria ridotto.</string> </resources> \ No newline at end of file diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/ja/strings.xml b/apps/multiplatform/common/src/commonMain/resources/MR/ja/strings.xml index d8659e009..2951b1315 100644 --- a/apps/multiplatform/common/src/commonMain/resources/MR/ja/strings.xml +++ b/apps/multiplatform/common/src/commonMain/resources/MR/ja/strings.xml @@ -328,7 +328,7 @@ <string name="callstatus_connecting">発信中…</string> <string name="callstate_ended">終了</string> <string name="opensource_protocol_and_code_anybody_can_run_servers">プロトコル技術とコードはオープンソースで、どなたでもご自分のサーバを運用できます。</string> - <string name="privacy_redefined">プライバシーの基準を新境地に</string> + <string name="privacy_redefined">プライバシーを再定義</string> <string name="how_it_works">技術の説明</string> <string name="make_private_connection">プライベートな接続をする</string> <string name="onboarding_notifications_mode_title">プライベートな通知</string> @@ -530,7 +530,7 @@ <string name="network_use_onion_hosts_required_desc">接続にオニオンのホストが必要となります。 \n注意: .onion アドレスがないとサーバーに接続できません。</string> <string name="create_address">アドレスを作成</string> - <string name="delete_address__question">アドレスの削除?</string> + <string name="delete_address__question">アドレスを削除?</string> <string name="display_name__field">プロフィール名:</string> <string name="full_name__field">フルネーム:</string> <string name="create_profile_button">作成</string> @@ -566,7 +566,7 @@ <string name="theme_light">ライトテーマ</string> <string name="chat_preferences_default">デフォルト (%s)</string> <string name="prohibit_sending_disappearing_messages">消えるメッセージを使用禁止にする。</string> - <string name="contacts_can_mark_messages_for_deletion">連絡先はメッセージを削除対象とすることができます。あなたには閲覧可能です。</string> + <string name="contacts_can_mark_messages_for_deletion">連絡先はメッセージを削除対象としてマークを付けられます。あなたには閲覧可能です。</string> <string name="only_you_can_send_disappearing">消えるメッセージを送れるのはあなただけです。</string> <string name="prohibit_message_deletion">メッセージの完全削除を使用禁止にする。</string> <string name="prohibit_sending_voice">音声メッセージを使用禁止にする。</string> @@ -582,7 +582,7 @@ <string name="v4_5_private_filenames">プライベートなファイル名</string> <string name="v4_5_reduced_battery_usage">電池使用量低減</string> <string name="error_removing_member">メンバー削除でエラー発生</string> - <string name="conn_level_desc_indirect">間接 (%1$s)</string> + <string name="conn_level_desc_indirect">間接 (%1$s)</string> <string name="incognito">シークレットモード</string> <string name="incognito_info_protects">シークレット モードでは、連絡先ごとに新しいランダムなプロファイルを使用してプライバシーを保護します。</string> <string name="chat_preferences_no">いいえ</string> @@ -620,7 +620,7 @@ <string name="rcv_group_event_changed_member_role">%s の役割を %s に変えました。</string> <string name="rcv_group_event_changed_your_role">役割を %s に変えました。</string> <string name="rcv_group_event_member_added">招待された %1$s</string> - <string name="snd_conn_event_switch_queue_phase_changing_for_member">アドレスを変更いたします: %s</string> + <string name="snd_conn_event_switch_queue_phase_changing_for_member">アドレスを変更しています: %s</string> <string name="group_member_role_owner">オーナー</string> <string name="group_member_status_connecting">接続待ち</string> <string name="icon_descr_expand_role">役割の選択を拡大</string> @@ -716,7 +716,7 @@ <string name="you_will_be_connected_when_group_host_device_is_online">グループのホスト端末がオンラインになったら、接続されます。後でチェックするか、しばらくお待ちください。</string> <string name="you_will_be_connected_when_your_contacts_device_is_online">連絡先がオンラインになったら、接続されます。後でチェックするか、しばらくお待ちください。</string> <string name="your_chat_profile_will_be_sent_to_your_contact">あなたのチャットプロフィールが -\n連絡相手に送られます。</string> +\n連絡先に公開されます。</string> <string name="share_invitation_link">ワンタイムリンクを送る</string> <string name="scan_code">コードを読み込む</string> <string name="scan_code_from_contacts_app">連絡相手のアプリからセキュリティコードを読み込む</string> @@ -739,9 +739,9 @@ <string name="network_use_onion_hosts">.onionホストを使う</string> <string name="network_use_onion_hosts_prefer">利用可能時に</string> <string name="network_session_mode_transport_isolation">トランスポート隔離</string> - <string name="save_and_notify_contact">保存して、連絡先にに知らせる</string> + <string name="save_and_notify_contact">保存して、連絡先に公開</string> <string name="your_current_profile">現在のプロフィール</string> - <string name="save_and_notify_contacts">保存して、連絡先にに知らせる</string> + <string name="save_and_notify_contacts">保存して、連絡先に公開</string> <string name="the_messaging_and_app_platform_protecting_your_privacy_and_security">あなたのプライバシーとセキュリティを守るメッセージとアプリのプラットフォーム</string> <string name="we_do_not_store_contacts_or_messages_on_servers">連絡先情報と届けたメッセージをサーバに保存することは一切ありません。</string> <string name="you_control_your_chat">あなたのチャットはあなたが決めます!</string> @@ -809,8 +809,8 @@ <string name="ntf_channel_messages">SimpleX Chatメッセージ</string> <string name="ntf_channel_calls">SimpleX Chat通話</string> <string name="settings_notification_preview_mode_title">プレビューを表示</string> - <string name="notifications_mode_periodic">定期的に起動</string> - <string name="notifications_mode_off">アプリがアクティブ時に実行</string> + <string name="notifications_mode_periodic">定期的に更新</string> + <string name="notifications_mode_off">アプリがアクティブ時に通知を受ける</string> <string name="icon_descr_sent_msg_status_sent">送信済み</string> <string name="you_have_no_chats">あなたはチャットがありません。</string> <string name="share_message">メッセージを送る…</string> @@ -848,7 +848,7 @@ \nオンにするには、認証ステップが行われます。</string> <string name="la_notice_turn_on">オンにする</string> <string name="auth_unlock">ロック解除</string> - <string name="save_verb">保存する</string> + <string name="save_verb">保存</string> <string name="reveal_verb">開示する</string> <string name="tap_to_start_new_chat">タップして新しいチャットを始める</string> <string name="image_decoding_exception_desc">画像が解読できません。別のイメージで試すか、開発者に伝えてください。</string> @@ -864,7 +864,7 @@ <string name="set_contact_name">連絡先を設定</string> <string name="contact_wants_to_connect_with_you">あなたと接続を希望しています!</string> <string name="you_can_also_connect_by_clicking_the_link"><![CDATA[リンクをクリックすることでも接続できます。ブラウザが起動すれば <b>Open in mobile app (アプリで開く)</b>ボタンをクリックしてください。]]></string> - <string name="your_chat_profiles">あなたのチャットプロフィール</string> + <string name="your_chat_profiles">チャットプロフィール</string> <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> @@ -873,7 +873,7 @@ <string name="core_simplexmq_version">simplexmq: バージョン%s (%2s)</string> <string name="callstate_waiting_for_answer">応答を待機中…</string> <string name="callstate_waiting_for_confirmation">確認を待機中…</string> - <string name="first_platform_without_user_ids">世界初のユーザーIDのないプラットフォーム|設計も元からプライベート</string> + <string name="first_platform_without_user_ids">世界初のユーザーIDのないプラットフォーム - プライバシーに配慮した設計</string> <string name="use_chat">チャット</string> <string name="contact_wants_to_connect_via_call">%1$sは次の方法であなたと繋がりたいです:</string> <string name="video_call_no_encryption">ビデオ通話 (非エンドツーエンド暗号化)</string> @@ -901,7 +901,7 @@ <string name="smp_servers_test_servers">テストサーバ</string> <string name="switch_receiving_address_desc">受信アドレスは別のサーバーに変更されます。アドレス変更は送信者がオンラインになった後に完了します。</string> <string name="to_protect_privacy_simplex_has_ids_for_queues">あなたのプライバシーを守るために、他のアプリと違って、ユーザーIDの変わりに SimpleX メッセージ束毎にIDを配布し、各連絡先が別々と扱います。</string> - <string name="group_main_profile_sent">あなたのチャットプロフィールが他のグループメンバーに送られます。</string> + <string name="group_main_profile_sent">あなたのチャットプロフィールが他のグループメンバーに公開されます。</string> <string name="to_verify_compare">エンドツーエンド暗号化を確認するには、ご自分の端末と連絡先の端末のコードを比べます (スキャンします)。</string> <string name="trying_to_connect_to_server_to_receive_messages_with_error">このコンタクトから受信するメッセージのサーバに接続しようとしてます。(エラー: %1$s)。</string> <string name="connection_error_auth_desc">使用済みリンク、または連絡先による接続の削除ではなければ、バッグの可能性があります。開発者にお伝えください。 @@ -960,7 +960,7 @@ <string name="read_more_in_user_guide_with_link"><![CDATA[<font color="#0088ff">ユーザーガイド</font>で詳細を見る]]></string> <string name="simplex_address">SimpleXアドレス</string> <string name="network_proxy_port">ポート %d</string> - <string name="enter_welcome_message_optional">ウェルカムメッセージを入力…(オプション)</string> + <string name="enter_welcome_message_optional">ウェルカムメッセージを入力…(任意)</string> <string name="save_settings_question">設定を保存しますか?</string> <string name="confirm_passcode">パスコードを確認</string> <string name="la_mode_passcode">パスコード</string> @@ -972,7 +972,7 @@ <string name="one_time_link_short">使い捨てのリンク</string> <string name="address_section_title">アドレス</string> <string name="color_background">背景色</string> - <string name="confirm_password">パスワードを確認</string> + <string name="confirm_password">ご確認のため、再度ご入力ください。</string> <string name="settings_section_title_experimenta">β機能</string> <string name="decryption_error">復号化エラー</string> <string name="button_add_welcome_message">ウェルカムメッセージを追加</string> @@ -1039,7 +1039,7 @@ <string name="stop_sharing">共有を停止</string> <string name="invite_friends">友人を招待する</string> <string name="you_can_create_it_later">後からでも作成できます</string> - <string name="password_to_show">パスワードを表示する</string> + <string name="password_to_show">ここにパスワードを入力してください。</string> <string name="authentication_cancelled">認証がキャンセルされました</string> <string name="share_address">アドレスを共有する</string> <string name="theme_simplex">SimpleX</string> @@ -1100,12 +1100,12 @@ <string name="downgrade_and_open_chat">ダウングレードしてチャットを開く</string> <string name="la_please_remember_to_store_password">パスワードを覚えるか、安全に保管してください。失われたパスワードを回復する方法はありません。</string> <string name="smp_server_test_download_file">ファイルをダウンロード</string> - <string name="you_can_hide_or_mute_user_profile">ユーザープロフィールを非表示またはミュートすることができます(メニューを長押し)。</string> + <string name="you_can_hide_or_mute_user_profile">ユーザープロフィールを非表示またはミュートすることができます(名前を長押し)。</string> <string name="v4_6_group_moderation">グループのモデレーション</string> <string name="email_invite_body">こんにちは! \nSimpleX Chatの招待が届いています: %s</string> <string name="v4_6_group_welcome_message">グループのウェルカムメッセージ</string> - <string name="tap_to_activate_profile">タップしてプロフィールを有効化する。</string> + <string name="tap_to_activate_profile">タップでプロフィールを切り替え</string> <string name="profile_password">プロフィールのパスワード</string> <string name="v4_6_hidden_chat_profiles_descr">チャットのプロフィールをパスワードで保護します!</string> <string name="group_member_role_observer">オブザーバー</string> @@ -1150,16 +1150,16 @@ <string name="mtr_error_different">アプリ/データベースの異なる移行: %s / %s</string> <string name="user_hide">非表示</string> <string name="user_unhide">表示にする</string> - <string name="hidden_profile_password">非表示のプロフィール パスワード</string> + <string name="hidden_profile_password">非表示プロフィールのパスワード</string> <string name="show_dev_options">表示する:</string> <string name="create_address_and_let_people_connect">人々があなたとつながるためのアドレスを作成します。</string> <string name="error_setting_address">アドレス設定エラー</string> <string name="you_can_share_your_address">アドレスをリンクまたは QR コードとして共有すると、誰でもあなたに接続できます。</string> <string name="you_wont_lose_your_contacts_if_delete_address">後でアドレスを削除しても、連絡先が失われることはありません。</string> - <string name="your_contacts_will_remain_connected">連絡先は接続されたままになります。</string> - <string name="all_your_contacts_will_remain_connected_update_sent">すべての連絡先は接続されたままになります。 プロフィールの更新が連絡先に送信されます。</string> + <string name="your_contacts_will_remain_connected">連絡先との接続がそのまま続きます。</string> + <string name="all_your_contacts_will_remain_connected_update_sent">連絡先との接続がそのまま続きます。 プロフィールの更新が連絡先に共有されます。</string> <string name="create_simplex_address">SimpleX のアドレスを作成</string> - <string name="share_with_contacts">連絡先と共有する</string> + <string name="share_with_contacts">連絡先に公開する</string> <string name="profile_update_will_be_sent_to_contacts">プロフィールの更新は連絡先に送信されます。</string> <string name="dont_create_address">アドレスを作成しない</string> <string name="email_invite_subject">SimpleXチャットで会話しよう</string> @@ -1167,7 +1167,7 @@ <string name="save_profile_password">プロフィールのパスワードを保存する</string> <string name="you_can_share_this_address_with_your_contacts">このアドレスを連絡先と共有して、%s に接続できるようにすることができます。</string> <string name="save_and_update_group_profile">グループプロフィールの保存と更新</string> - <string name="to_reveal_profile_enter_password">非表示のプロフィールを表示するには、チャット プロフィール ページの検索フィールドに完全なパスワードを入力します。</string> + <string name="to_reveal_profile_enter_password">非表示のプロフィールを戻すには、プロフィールページの検索欄にパスワードを入力します。</string> <string name="hide_dev_options">非表示 :</string> <string name="delete_chat_profile">チャット プロフィールを削除する</string> <string name="delete_profile">プロフィールの削除</string> @@ -1351,11 +1351,11 @@ <string name="rcv_group_event_3_members_connected">%s, %s と %s は接続中</string> <string name="in_developing_desc">この機能はまだサポートされていません。次のリリースをお試しください。</string> <string name="receipts_contacts_enable_keep_overrides">有効にする(設定の優先を維持)</string> - <string name="receipts_groups_disable_keep_overrides">無効にする(グループの設定の優先を維持)</string> + <string name="receipts_groups_disable_keep_overrides">無効にする (グループの上書きを維持)</string> <string name="receipts_groups_enable_keep_overrides">有効にする(グループの設定の優先を維持)</string> - <string name="receipts_contacts_disable_keep_overrides">無効にする(設定の優先を維持)</string> + <string name="receipts_contacts_disable_keep_overrides">無効化(設定の優先を維持)</string> <string name="v5_2_disappear_one_message_descr">会話中に無効になっている場合でも。</string> - <string name="v5_2_message_delivery_receipts">メッセージ配信の通知!</string> + <string name="v5_2_message_delivery_receipts">メッセージの配送通知</string> <string name="delivery_receipts_title">配信通知!</string> <string name="sending_delivery_receipts_will_be_enabled_all_profiles">配信通知の送信はすべてのチャットプロフィールのすべての連絡先に対して有効になります。</string> <string name="message_delivery_error_title">メッセージ配信でエラー発生</string> @@ -1556,4 +1556,43 @@ <string name="no_connected_mobile">未接続のモバイル</string> <string name="search_or_paste_simplex_link">検索またはSimpleXリンクをペースト</string> <string name="blocked_item_description">ブロック済</string> + <string name="agent_internal_error_title">内部エラー</string> + <string name="agent_critical_error_title">重大エラー</string> + <string name="failed_to_create_user_invalid_title">表示名が無効です!</string> + <string name="remote_host_was_disconnected_title">切断されました。</string> + <string name="remote_ctrl_was_disconnected_title">切断されました。</string> + <string name="remote_host_disconnected_from"><![CDATA[携帯 <b>%s</b> が次の理由で切断されました: %s]]></string> + <string name="remote_ctrl_disconnected_with_reason">次の理由で切断されました: %s</string> + <string name="remote_ctrl_error_bad_state">PC版との接続が不安定</string> + <string name="remote_host_error_bad_state"><![CDATA[携帯 <b>%s</b> との接続が不安定]]></string> + <string name="remote_ctrl_error_inactive">PC版が非アクティブ</string> + <string name="remote_host_error_bad_version"><![CDATA[携帯版 <b>%s</b> のバージョンがサポートされてません。。両端末のバージョンが同じかどうか、ご確認ください。]]></string> + <string name="remote_ctrl_error_bad_invitation">PC版の招待コードが正しくない</string> + <string name="remote_ctrl_error_busy">PC版が処理中</string> + <string name="remote_ctrl_error_disconnected">PC版が切断されました</string> + <string name="remote_ctrl_error_bad_version">ご利用のPC版のバージョンがサポートされてません。両端末が同じバージョンかどうか、ご確認ください。</string> + <string name="possible_deadlock_title">デッドロック状態</string> + <string name="developer_options_section">開発者向けの設定</string> + <string name="possible_deadlock_desc">処理時間が異常にかかるようです: %1$d 秒。アプリが固まった恐れがあります: %2$s</string> + <string name="remote_host_error_busy"><![CDATA[携帯版 <b>%s</b> がただいま処理中]]></string> + <string name="possible_slow_function_desc">機能の処理時間が以上にかかってます: %1$d 秒: %2$s</string> + <string name="show_internal_errors">内部エラーを表示</string> + <string name="agent_internal_error_desc">開発側にお伝えください: +\n%s</string> + <string name="agent_critical_error_desc">開発側にお伝えください: +\n%s +\n +\nアプリを再起動してください。</string> + <string name="failed_to_create_user_invalid_desc">表示名が無効です。別の名前にしてください。</string> + <string name="remote_host_error_inactive"><![CDATA[携帯版 <b>%s</b> が非アクティブ]]></string> + <string name="remote_host_error_missing"><![CDATA[携帯版 <b>%s</b> が見つかりません]]></string> + <string name="remote_host_error_timeout"><![CDATA[携帯版に接続する段階で時間切れになりました <b>%s</b>]]></string> + <string name="remote_ctrl_error_timeout">PC版に接続する段階で時間切れになりました</string> + <string name="restart_chat_button">チャットを再起動</string> + <string name="remote_host_error_disconnected"><![CDATA[携帯版 <b>%s</b> が切断されました]]></string> + <string name="group_member_status_unknown_short">不明</string> + <string name="past_member_vName">過去のメンバー %1$s</string> + <string name="possible_slow_function_title">遅延が発生した機能</string> + <string name="show_slow_api_calls">遅いAPIコールを表示</string> + <string name="group_member_status_unknown">ステータス不明</string> </resources> \ No newline at end of file diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/nl/strings.xml b/apps/multiplatform/common/src/commonMain/resources/MR/nl/strings.xml index b3ebcd916..bb4c9c4b6 100644 --- a/apps/multiplatform/common/src/commonMain/resources/MR/nl/strings.xml +++ b/apps/multiplatform/common/src/commonMain/resources/MR/nl/strings.xml @@ -1552,4 +1552,69 @@ <string name="keep_invitation_link">Bewaar</string> <string name="tap_to_paste_link">Tik om de link te plakken</string> <string name="search_or_paste_simplex_link">Zoek of plak de SimpleX link</string> + <string name="chat_is_stopped_you_should_transfer_database">De chat is gestopt. Als u deze database al op een ander apparaat heeft gebruikt, moet u deze terugzetten voordat u met chatten begint.</string> + <string name="start_chat_question">Begin chat?</string> + <string name="show_internal_errors">Toon interne fouten</string> + <string name="agent_critical_error_title">Kritische fout</string> + <string name="agent_internal_error_title">Interne fout</string> + <string name="agent_internal_error_desc">Rapporteer dit alstublieft aan de ontwikkelaars: +\n%s</string> + <string name="agent_critical_error_desc">Rapporteer dit alstublieft aan de ontwikkelaars: +\n%s +\n +\nHet wordt aanbevolen om de app opnieuw te starten.</string> + <string name="remote_ctrl_error_bad_version">Desktop heeft een niet-ondersteunde versie. Zorg ervoor dat u op beide apparaten dezelfde versie gebruikt</string> + <string name="failed_to_create_user_invalid_title">Ongeldige weergavenaam!</string> + <string name="failed_to_create_user_invalid_desc">Deze weergavenaam is ongeldig. Kies een andere naam.</string> + <string name="remote_host_was_disconnected_title">Verbinding gestopt</string> + <string name="remote_ctrl_was_disconnected_title">Verbinding gestopt</string> + <string name="remote_host_disconnected_from"><![CDATA[Verbinding met mobiel <b>%s</b> \u0020is verbroken met als reden: %s]]></string> + <string name="remote_host_error_busy"><![CDATA[Mobiel <b>%s</b> is bezet]]></string> + <string name="remote_host_error_inactive"><![CDATA[Mobiel <b>%s</b> is inactief]]></string> + <string name="remote_host_error_missing"><![CDATA[Mobiel <b>%s</b> ontbreekt]]></string> + <string name="remote_host_error_bad_state"><![CDATA[De verbinding met de mobiel <b>%s</b> is in slechte staat]]></string> + <string name="remote_ctrl_error_disconnected">De verbinding met desktop is verbroken</string> + <string name="possible_deadlock_title">Impasse</string> + <string name="possible_slow_function_desc">Uitvoering van functie duurt te lang: %1$d seconden: %2$s</string> + <string name="possible_slow_function_title">Langzame functie</string> + <string name="developer_options_section">Ontwikkelaars opties</string> + <string name="show_slow_api_calls">Toon langzame API aanroepen</string> + <string name="past_member_vName">Voormalig lid %1$s</string> + <string name="group_member_status_unknown_short">onbekend</string> + <string name="remote_ctrl_disconnected_with_reason">Verbinding verbroken met als reden: %s</string> + <string name="remote_ctrl_error_busy">Desktop is bezet</string> + <string name="remote_ctrl_error_inactive">Desktop is inactief</string> + <string name="remote_host_error_disconnected"><![CDATA[Mobiele verbinding <b>%s</b> is verbroken]]></string> + <string name="restart_chat_button">Chat opnieuw starten</string> + <string name="remote_host_error_timeout"><![CDATA[Time-out bereikt tijdens het verbinden met de mobiel <b>%s</b>]]></string> + <string name="remote_ctrl_error_bad_state">De verbinding met de desktop is in slechte staat</string> + <string name="possible_deadlock_desc">Het uitvoeren van de code duurt te lang: %1$d seconden. Waarschijnlijk is de app vastgelopen: %2$s</string> + <string name="remote_ctrl_error_bad_invitation">Desktop heeft verkeerde uitnodigingscode</string> + <string name="remote_host_error_bad_version"><![CDATA[Mobiel <b>%s</b> heeft een niet-ondersteunde versie. Zorg ervoor dat u op beide apparaten dezelfde versie gebruikt]]></string> + <string name="remote_ctrl_error_timeout">Time-out bereikt tijdens het verbinden met de desktop</string> + <string name="group_member_status_unknown">onbekende status</string> + <string name="v5_5_message_delivery">Verbeterde berichtbezorging</string> + <string name="v5_5_join_group_conversation">Neem deel aan groep gesprekken</string> + <string name="v5_5_simpler_connect_ui">Plak link om te verbinden!</string> + <string name="v5_5_private_notes">Privé notities</string> + <string name="clear_note_folder_warning">Alle berichten worden verwijderd. Dit kan niet ongedaan worden gemaakt!</string> + <string name="info_row_created_at">Gemaakt op</string> + <string name="error_creating_message">Fout bij het maken van een bericht</string> + <string name="v5_5_new_interface_languages">Hongaarse en Turkse gebruikersinterface</string> + <string name="v5_5_join_group_conversation_descr">Recente geschiedenis en verbeterde directory-bot.</string> + <string name="note_folder_local_display_name">Privé notities</string> + <string name="share_text_created_at">Gemaakt op: %s</string> + <string name="profile_update_event_member_name_changed">lid %1$s gewijzigd in %2$s</string> + <string name="profile_update_event_contact_name_changed">contactpersoon %1$s gewijzigd in %2$s</string> + <string name="error_deleting_note_folder">Fout bij verwijderen van privénotities</string> + <string name="clear_note_folder_question">Privénotities verwijderen?</string> + <string name="v5_5_simpler_connect_ui_descr">Zoekbalk accepteert uitnodigingslinks.</string> + <string name="v5_5_private_notes_descr">‐Met versleutelde bestanden en media.</string> + <string name="v5_5_message_delivery_descr">Met verminderd batterijgebruik.</string> + <string name="saved_message_title">Opgeslagen bericht</string> + <string name="profile_update_event_updated_profile">bijgewerkt profiel</string> + <string name="profile_update_event_removed_address">contactadres verwijderd</string> + <string name="profile_update_event_removed_picture">profielfoto verwijderd</string> + <string name="profile_update_event_set_new_address">nieuw contactadres instellen</string> + <string name="profile_update_event_set_new_picture">nieuwe profielfoto instellen</string> </resources> \ No newline at end of file diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/ru/strings.xml b/apps/multiplatform/common/src/commonMain/resources/MR/ru/strings.xml index df0938dbe..94cb6d826 100644 --- a/apps/multiplatform/common/src/commonMain/resources/MR/ru/strings.xml +++ b/apps/multiplatform/common/src/commonMain/resources/MR/ru/strings.xml @@ -299,7 +299,8 @@ <string name="connection_you_accepted_will_be_cancelled">Подтвержденное соединение будет отменено!</string> <!-- Connection Pending Alert Dialogue - ChatListNavLinkView.kt --> <string name="alert_title_contact_connection_pending">Соединение еще не установлено!</string> - <string name="alert_text_connection_pending_they_need_to_be_online_can_delete_and_retry">Ваш контакт должен быть в сети чтобы установить соединение.\nВы можете отменить соединение и удалить контакт (и попробовать позже с другой ссылкой).</string> + <string name="alert_text_connection_pending_they_need_to_be_online_can_delete_and_retry">Ваш контакт должен быть в сети, чтобы установить соединение. +\nВы можете отменить соединение и удалить контакт (и попробовать позже с другой ссылкой).</string> <!-- Contact Request Information - ContactRequestView.kt --> <string name="contact_wants_to_connect_with_you">хочет соединиться с Вами!</string> <!-- Image Placeholder - ChatInfoImage.kt --> @@ -487,7 +488,7 @@ <!-- SetNotificationsMode.kt --> <string name="use_chat">Использовать чат</string> <!-- MakeConnection --> - <string name="paste_the_link_you_received">Вставить полученную ссылку</string> + <string name="paste_the_link_you_received">Вставьте полученную ссылку</string> <!-- Call --> <string name="incoming_video_call">Входящий видеозвонок</string> <string name="incoming_audio_call">Входящий аудиозвонок</string> @@ -872,15 +873,15 @@ <string name="feature_enabled_for_contact">включено для контакта</string> <string name="feature_off">выключено</string> <string name="feature_received_prohibited">получено, не разрешено</string> - <string name="allow_your_contacts_irreversibly_delete">Разрешить Вашим контактам необратимо удалять отправленные сообщения.</string> - <string name="allow_irreversible_message_deletion_only_if">Разрешить необратимое удаление сообщений, только если Ваш контакт разрешает это Вам.</string> + <string name="allow_your_contacts_irreversibly_delete">Разрешить Вашим контактам необратимо удалять отправленные сообщения. (24 часа)</string> + <string name="allow_irreversible_message_deletion_only_if">Разрешить необратимое удаление сообщений, только если Ваш контакт разрешает это Вам. (24 часа)</string> <string name="contacts_can_mark_messages_for_deletion">Контакты могут помечать сообщения для удаления; Вы сможете просмотреть их.</string> <string name="allow_your_contacts_to_send_voice_messages">Разрешить Вашим контактам отправлять голосовые сообщения.</string> <string name="allow_voice_messages_only_if">Разрешить голосовые сообщения, только если их разрешает Ваш контакт.</string> <string name="prohibit_sending_voice_messages">Запретить отправлять голосовые сообщений.</string> - <string name="both_you_and_your_contacts_can_delete">Вы и Ваш контакт можете необратимо удалять отправленные сообщения.</string> - <string name="only_you_can_delete_messages">Только Вы можете необратимо удалять сообщения (Ваш контакт может помечать их на удаление).</string> - <string name="only_your_contact_can_delete">Только Ваш контакт может необратимо удалять сообщения (Вы можете помечать их на удаление).</string> + <string name="both_you_and_your_contacts_can_delete">Вы и Ваш контакт можете необратимо удалять отправленные сообщения. (24 часа)</string> + <string name="only_you_can_delete_messages">Только Вы можете необратимо удалять сообщения (Ваш контакт может помечать их на удаление). (24 часа)</string> + <string name="only_your_contact_can_delete">Только Ваш контакт может необратимо удалять сообщения (Вы можете помечать их на удаление). (24 часа)</string> <string name="message_deletion_prohibited">Необратимое удаление сообщений запрещено в этой группе.</string> <string name="both_you_and_your_contact_can_send_voice">Вы и Ваш контакт можете отправлять голосовые сообщения.</string> <string name="only_you_can_send_voice">Только Вы можете отправлять голосовые сообщения.</string> @@ -888,13 +889,13 @@ <string name="voice_prohibited_in_this_chat">Голосовые сообщения запрещены в этом чате.</string> <string name="allow_direct_messages">Разрешить посылать прямые сообщения членам группы.</string> <string name="prohibit_direct_messages">Запретить посылать прямые сообщения членам группы.</string> - <string name="allow_to_delete_messages">Разрешить необратимо удалять отправленные сообщения.</string> + <string name="allow_to_delete_messages">Разрешить необратимо удалять отправленные сообщения. (24 часа)</string> <string name="prohibit_message_deletion">Запретить необратимое удаление сообщений.</string> <string name="allow_to_send_voice">Разрешить отправлять голосовые сообщения.</string> <string name="prohibit_sending_voice">Запретить отправлять голосовые сообщений.</string> <string name="group_members_can_send_dms">Члены группы могут посылать прямые сообщения.</string> <string name="direct_messages_are_prohibited_in_chat">Прямые сообщения между членами группы запрещены.</string> - <string name="group_members_can_delete">Члены группы могут необратимо удалять отправленные сообщения.</string> + <string name="group_members_can_delete">Члены группы могут необратимо удалять отправленные сообщения. (24 часа)</string> <string name="message_deletion_prohibited_in_chat">Необратимое удаление сообщений запрещено в этой группе.</string> <string name="group_members_can_send_voice">Члены группы могут отправлять голосовые сообщения.</string> <string name="voice_messages_are_prohibited">Голосовые сообщения запрещены в этой группе.</string> @@ -1572,7 +1573,7 @@ <string name="group_members_n">%s, %s и %d членов группы</string> <string name="this_device">Это устройство</string> <string name="unblock_member_button">Разблокировать члена группы</string> - <string name="contact_tap_to_connect">Нажмите чтобы соединиться</string> + <string name="contact_tap_to_connect">Нажмите, чтобы соединиться</string> <string name="this_device_name">Имя этого устройства</string> <string name="connect_plan_you_are_already_in_group_vName"><![CDATA[Вы уже состоите в группе <b>%1$s</b>.]]></string> <string name="connect_plan_this_is_your_own_simplex_address">Это ваш собственный адрес SimpleX!</string> @@ -1607,4 +1608,98 @@ <string name="disconnect_remote_hosts">Отключить мобильные</string> <string name="no_connected_mobile">Нет подключённых мобильных</string> <string name="add_contact_tab">Добавить контакт</string> + <string name="v5_5_private_notes">Личные заметки</string> + <string name="v5_5_join_group_conversation">Присоединяйтесь к разговорам в группах</string> + <string name="v5_5_simpler_connect_ui">Вставьте ссылку, чтобы соединиться!</string> + <string name="v5_5_simpler_connect_ui_descr">Поле поиска поддерживает ссылки-приглашения.</string> + <string name="v5_5_join_group_conversation_descr">История сообщений и улучшенный каталог групп.</string> + <string name="remote_host_error_inactive"><![CDATA[Мобильный <b>%s</b> неактивен]]></string> + <string name="remote_ctrl_error_timeout">Превышено максимальное время соединения с компьютером.</string> + <string name="remote_ctrl_error_disconnected">Компьютер отсоединён</string> + <string name="remote_ctrl_error_bad_invitation">Неверный код приглашения у компьютера</string> + <string name="loading_chats">Загрузка чатов…</string> + <string name="enable_camera_access">Включить доступ к камере</string> + <string name="tap_to_scan">Нажмите, чтобы сканировать</string> + <string name="create_group_button_to_create_new_group"><![CDATA[<b>Создать группу</b>: создать новую группу.]]></string> + <string name="disable_sending_recent_history">Не отправлять историю новым членам.</string> + <string name="enable_sending_recent_history">Отправить до 100 последних сообщений новым членам.</string> + <string name="clear_note_folder_warning">Все сообщения будут удалены - это нельзя отменить!</string> + <string name="camera_not_available">Камера недоступна</string> + <string name="la_app_passcode">Код доступа в приложение</string> + <string name="add_contact_button_to_create_link_or_connect_via_link"><![CDATA[<b>Добавить контакт</b>: создать новую ссылку-приглашение или подключиться через полученную ссылку.]]></string> + <string name="chat_is_stopped_you_should_transfer_database">Чат остановлен. Если вы уже использовали эту базу данных на другом устройстве, перенесите ее обратно до запуска чата.</string> + <string name="remote_host_was_disconnected_title">Соединение остановлено</string> + <string name="info_row_created_at">Создано</string> + <string name="keep_invitation_link">Оставить</string> + <string name="share_text_created_at">Создано: %s</string> + <string name="remote_host_error_missing"><![CDATA[Мобильный <b>%s</b> отсутствует]]></string> + <string name="or_show_this_qr_code">Или покажите этот код</string> + <string name="agent_internal_error_desc">Пожалуйста, сообщите об этом разработчикам: +\n%s</string> + <string name="developer_options_section">Опции разработчика</string> + <string name="remote_host_disconnected_from"><![CDATA[Отсоединён от мобильного <b>%s</b> по причине: %s]]></string> + <string name="error_creating_message">Ошибка создания сообщения</string> + <string name="error_deleting_note_folder">Ошибка удаления заметки</string> + <string name="v5_5_new_interface_languages">Венгерский и Турецкий интерфейс</string> + <string name="search_or_paste_simplex_link">Искать или вставьте ссылку SimpleX</string> + <string name="code_you_scanned_is_not_simplex_link_qr_code">Этот QR код не является SimpleX-ccылкой.</string> + <string name="v5_5_private_notes_descr">С зашифрованными файлами и медиа.</string> + <string name="v5_5_message_delivery_descr">С уменьшенным потреблением батареи.</string> + <string name="keep_unused_invitation_question">Оставить неиспользованное приглашение?</string> + <string name="v5_5_message_delivery">Улучшенная доставка сообщений</string> + <string name="remote_ctrl_was_disconnected_title">Соединение остановлено</string> + <string name="restart_chat_button">Перезапустить чат</string> + <string name="start_chat_question">Запустить чат?</string> + <string name="note_folder_local_display_name">Личные заметки</string> + <string name="recent_history">Доступ к истории</string> + <string name="recent_history_is_not_sent_to_new_members">История не отправляется новым членам.</string> + <string name="recent_history_is_sent_to_new_members">До 100 последних сообщений отправляются новым членам.</string> + <string name="show_internal_errors">Показывать внутренние ошибки</string> + <string name="remote_ctrl_error_bad_state">Ошибка соединения с компьютером</string> + <string name="remote_host_error_bad_state"><![CDATA[Ошибка соединения с мобильным <b>%s</b>]]></string> + <string name="remote_ctrl_error_busy">Компьютер занят</string> + <string name="remote_ctrl_error_inactive">Компьютер неактивен</string> + <string name="remote_host_error_bad_version"><![CDATA[Версия приложения на мобильном <b>%s</b> не поддерживается. Пожалуйста, установите одинаковую версию на оба устройства.]]></string> + <string name="remote_host_error_busy"><![CDATA[Мобильный <b>%s</b> занят]]></string> + <string name="remote_host_error_disconnected"><![CDATA[Мобильный <b>%s</b> отсоединён]]></string> + <string name="remote_host_error_timeout"><![CDATA[Превышено максимальное время соединения с мобильным <b>%s</b>]]></string> + <string name="agent_critical_error_title">Критическая ошибка</string> + <string name="agent_critical_error_desc">Пожалуйста, сообщите об этом разработчикам: +\n%s +\n +\nРекомендовано перезапустить приложение.</string> + <string name="failed_to_create_user_invalid_title">Ошибка имени!</string> + <string name="failed_to_create_user_invalid_desc">Ошибка имени профиля. Пожалуйста, выберите другое имя.</string> + <string name="the_text_you_pasted_is_not_a_link">Вставленный текст не является SimpleX-ссылкой.</string> + <string name="creating_link">Создаётся ссылка…</string> + <string name="tap_to_paste_link">Нажмите, чтобы вставить ссылку</string> + <string name="invalid_qr_code">Ошибка QR кода</string> + <string name="share_this_1_time_link">Поделиться одноразовой ссылкой-приглашением</string> + <string name="retry_verb">Повторить</string> + <string name="app_was_crashed">Ошибка приложения</string> + <string name="error_showing_message">ошибка отображения сообщения</string> + <string name="error_showing_content">ошибка отображения содержания</string> + <string name="remote_ctrl_disconnected_with_reason">Отсоединён по причине: %s</string> + <string name="possible_deadlock_title">Взаимная блокировка</string> + <string name="possible_deadlock_desc">Выполнение задачи занимает долгое время: %1$d секунд. Возможно, приложение заблокировано: %2$s</string> + <string name="possible_slow_function_desc">Выполнение задачи занимает долгое время: %1$d секунд: %2$s</string> + <string name="possible_slow_function_title">Медленный вызов</string> + <string name="profile_update_event_contact_name_changed">контакт %1$s изменён на %2$s</string> + <string name="profile_update_event_member_name_changed">член %1$s изменился на %2$s</string> + <string name="profile_update_event_removed_address">удалён адрес контакта</string> + <string name="profile_update_event_removed_picture">удалена картинка профиля</string> + <string name="profile_update_event_set_new_address">установлен новый адрес контакта</string> + <string name="profile_update_event_set_new_picture">установлена новая картинка профиля</string> + <string name="profile_update_event_updated_profile">профиль обновлён</string> + <string name="remote_ctrl_error_bad_version">Версия приложения на компьютере не поддерживается. Пожалуйста, установите одинаковую версию на оба устройства.</string> + <string name="agent_internal_error_title">Внутренняя ошибка</string> + <string name="clear_note_folder_question">Очистить личные заметки?</string> + <string name="new_chat">Новый чат</string> + <string name="or_scan_qr_code">Или отсканируйте QR код</string> + <string name="you_can_view_invitation_link_again">Вы можете увидеть ссылку-приглашение снова открыв соединение.</string> + <string name="show_slow_api_calls">Показывать медленные вызовы API</string> + <string name="past_member_vName">Бывший член %1$s</string> + <string name="saved_message_title">Сохраненное сообщение</string> + <string name="group_member_status_unknown_short">неизвестно</string> + <string name="group_member_status_unknown">неизвестный статус</string> </resources> \ No newline at end of file diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/zh-rCN/strings.xml b/apps/multiplatform/common/src/commonMain/resources/MR/zh-rCN/strings.xml index 19887d732..1142a48b6 100644 --- a/apps/multiplatform/common/src/commonMain/resources/MR/zh-rCN/strings.xml +++ b/apps/multiplatform/common/src/commonMain/resources/MR/zh-rCN/strings.xml @@ -1503,7 +1503,7 @@ <string name="v5_4_block_group_members_descr">隐藏不需要的信息。</string> <string name="v5_4_better_groups">更佳的群组</string> <string name="v5_4_incognito_groups">匿名群组</string> - <string name="remote_host_was_disconnected_toast"><![CDATA[远程主机 <b>%s</b> 已断开连接]]></string> + <string name="remote_host_was_disconnected_toast"><![CDATA[移动主机 <b>%s</b> 连接断开]]></string> <string name="v5_4_better_groups_descr">加入速度更快、信息更可靠。</string> <string name="v5_4_more_things_descr">- 可选择通知已删除的联系人。 \n- 带空格的个人资料名称。 @@ -1566,7 +1566,7 @@ <string name="agent_critical_error_title">严重错误</string> <string name="restart_chat_button">重启聊天</string> <string name="show_internal_errors">显示内部错误</string> - <string name="remote_host_disconnected_from"><![CDATA[和移动设备<b>%s</b>的连接已断开,原因是:%s]]></string> + <string name="remote_host_disconnected_from"><![CDATA[和移动主机<b>%s</b>的连接断开,原因是:%s]]></string> <string name="remote_ctrl_disconnected_with_reason">断连原因:%s</string> <string name="remote_ctrl_error_timeout">连接到桌面时超时</string> <string name="remote_ctrl_error_busy">桌面繁忙</string> @@ -1577,13 +1577,46 @@ <string name="remote_ctrl_error_disconnected">桌面连接已断开</string> <string name="failed_to_create_user_invalid_title">无效的显示名!</string> <string name="remote_ctrl_was_disconnected_title">连接停止</string> - <string name="remote_host_error_bad_version"><![CDATA[移动设备 <b>%s</b> 的版本不受支持。请确保两台设备安装的版本相同]]></string> - <string name="remote_host_error_busy"><![CDATA[移动设备 <b>%s</b> 繁忙]]></string> - <string name="remote_host_error_inactive"><![CDATA[移动设备 <b>%s</b>不活跃]]></string> - <string name="remote_host_error_missing"><![CDATA[移动设备 <b>%s</b> 缺失]]></string> - <string name="remote_host_error_disconnected"><![CDATA[未与移动设备<b>%s</b>建立连接]]></string> + <string name="remote_host_error_bad_version"><![CDATA[移动主机 <b>%s</b> 有一个不受支持的版本。请确保两台设备安装的版本相同]]></string> + <string name="remote_host_error_busy"><![CDATA[移动主机 <b>%s</b> 繁忙]]></string> + <string name="remote_host_error_inactive"><![CDATA[移动主机 <b>%s</b>不活跃]]></string> + <string name="remote_host_error_missing"><![CDATA[移动主机 <b>%s</b> 缺失]]></string> + <string name="remote_host_error_disconnected"><![CDATA[移动主机<b>%s</b>连接断开]]></string> <string name="remote_host_was_disconnected_title">连接停止</string> - <string name="remote_host_error_bad_state"><![CDATA[到移动设备 <b>%s</b>的连接处于糟糕状态]]></string> - <string name="remote_host_error_timeout"><![CDATA[连接到移动设备<b>%s</b>时超时]]></string> + <string name="remote_host_error_bad_state"><![CDATA[到移动主机 <b>%s</b>的连接状态不佳]]></string> + <string name="remote_host_error_timeout"><![CDATA[连接到移动主机<b>%s</b>时超时]]></string> <string name="failed_to_create_user_invalid_desc">显示名无效。请另选一个名称。</string> + <string name="possible_deadlock_title">死锁</string> + <string name="possible_deadlock_desc">代码执行花费的时间过久:%1$d秒。应用可能卡住了:%2$s</string> + <string name="possible_slow_function_title">慢函数</string> + <string name="show_slow_api_calls">显示缓慢的 API 调用</string> + <string name="past_member_vName">过往成员 %1$s</string> + <string name="group_member_status_unknown_short">未知</string> + <string name="group_member_status_unknown">未知状态</string> + <string name="developer_options_section">开发者选项</string> + <string name="possible_slow_function_desc">函数执行花费的时间过久:%1$d 秒: %2$s</string> + <string name="v5_5_message_delivery">改进了消息传递</string> + <string name="v5_5_join_group_conversation">加入群对话</string> + <string name="v5_5_simpler_connect_ui">粘贴链接以连接!</string> + <string name="v5_5_simpler_connect_ui_descr">搜索栏接受邀请链接。</string> + <string name="v5_5_private_notes_descr">加密的文件和媒体。</string> + <string name="v5_5_message_delivery_descr">降低了电量使用。</string> + <string name="clear_note_folder_warning">所有消息都将被删除 - 这无法被撤销!</string> + <string name="info_row_created_at">创建于</string> + <string name="share_text_created_at">创建于:%s</string> + <string name="v5_5_new_interface_languages">匈牙利语和土耳其语用户界面</string> + <string name="v5_5_private_notes">私密笔记</string> + <string name="v5_5_join_group_conversation_descr">最近历史和改进的目录机器人。</string> + <string name="profile_update_event_contact_name_changed">联系人姓名从 %1$s 改为了 %2$s</string> + <string name="profile_update_event_member_name_changed">成员姓名从 %1$s 改为了 %2$s</string> + <string name="profile_update_event_removed_address">删除了联系地址</string> + <string name="profile_update_event_removed_picture">删除了资料图片</string> + <string name="profile_update_event_set_new_address">设置新的联系地址</string> + <string name="profile_update_event_set_new_picture">设置新的资料图片</string> + <string name="profile_update_event_updated_profile">更新了资料</string> + <string name="error_creating_message">创建消息出错</string> + <string name="error_deleting_note_folder">删除私密笔记出错</string> + <string name="note_folder_local_display_name">私密笔记</string> + <string name="clear_note_folder_question">清除私密笔记?</string> + <string name="saved_message_title">已保存的消息</string> </resources> \ No newline at end of file diff --git a/scripts/ios/import-localizations.sh b/scripts/ios/import-localizations.sh index c699966d7..4bf33f7db 100755 --- a/scripts/ios/import-localizations.sh +++ b/scripts/ios/import-localizations.sh @@ -2,7 +2,7 @@ set -e -langs=( en bg cs de es fi fr it ja nl pl ru th uk zh-Hans ) +langs=( en bg cs de es fi fr it ja nl pl ru th tr uk zh-Hans ) for lang in "${langs[@]}"; do echo "***" From 5aa4b7687e25eece1712bad8502bdc5e9b117daf Mon Sep 17 00:00:00 2001 From: Evgeny Poberezkin <evgeny@poberezkin.com> Date: Sat, 20 Jan 2024 13:48:45 +0000 Subject: [PATCH 21/23] website: translations (#3718) * Translated using Weblate (Arabic) Currently translated at 100.0% (252 of 252 strings) Translation: SimpleX Chat/SimpleX Chat website Translate-URL: https://hosted.weblate.org/projects/simplex-chat/website/ar/ * Translated using Weblate (Italian) Currently translated at 100.0% (252 of 252 strings) Translation: SimpleX Chat/SimpleX Chat website Translate-URL: https://hosted.weblate.org/projects/simplex-chat/website/it/ * Translated using Weblate (Arabic) Currently translated at 100.0% (252 of 252 strings) Translation: SimpleX Chat/SimpleX Chat website Translate-URL: https://hosted.weblate.org/projects/simplex-chat/website/ar/ * Translated using Weblate (Italian) Currently translated at 100.0% (252 of 252 strings) Translation: SimpleX Chat/SimpleX Chat website Translate-URL: https://hosted.weblate.org/projects/simplex-chat/website/it/ --------- Co-authored-by: jonnysemon <jonnysemon@users.noreply.hosted.weblate.org> Co-authored-by: Random <random-r@users.noreply.hosted.weblate.org> --- website/langs/ar.json | 6 +++--- website/langs/it.json | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/website/langs/ar.json b/website/langs/ar.json index 9a5207a77..5986d59e8 100644 --- a/website/langs/ar.json +++ b/website/langs/ar.json @@ -72,7 +72,7 @@ "privacy-matters-3-overlay-1-linkText": "الخصوصية تحمي حريتك", "simplex-unique-1-title": "لديك خصوصية كاملة", "simplex-unique-1-overlay-1-title": "الخصوصية الكاملة لهويتك وملفك الشخصي وجهات الاتصال والبيانات الوصفية", - "simplex-unique-2-title": "أنت محمي <br> من البريد العشوائي وإساءة الاستخدام", + "simplex-unique-2-title": "أنت محمي <br> من رسائل الإزعاج وإساءة الاستخدام", "simplex-unique-3-title": "أنت تتحكم في بياناتك", "simplex-unique-3-overlay-1-title": "ملكية ومراقبة وأمان بياناتك", "simplex-unique-4-title": "أنت تمتلك شبكة SimpleX", @@ -96,7 +96,7 @@ "simplex-private-card-7-point-2": "إذا أُضيفت أي رسالة أو أُزيلت أو تغيّرت، فسيتم تنبيه المُستلم.", "simplex-private-card-10-point-2": "يسمح بتسليم الرسائل بدون معرّفات ملف تعريف المستخدم، مما يوفر خصوصية للبيانات الوصفية أفضل من البدائل.", "privacy-matters-2-overlay-1-linkText": "تمنحك الخصوصية القوة", - "simplex-unique-2-overlay-1-title": "أفضل حماية من البريد العشوائي وإساءة الاستخدام", + "simplex-unique-2-overlay-1-title": "أفضل حماية من رسائل الإزعاج وإساءة الاستخدام", "hero-overlay-card-1-p-3": "أنت تحدد الخادم (الخوادم) المراد استخدامه لاستلام الرسائل وجهات الاتصال الخاصة بك — الخوادم التي تستخدمها لإرسال الرسائل إليهم. من المرجح أن تستخدم كل مُحادثة خادمين مختلفين.", "hero-overlay-card-1-p-1": "سأل العديد من المستخدمين: <em> إذا لم يكن لدى SimpleX معرّفات مستخدم، فكيف يمكنها معرفة مكان تسليم الرسائل؟ </em>", "hero-overlay-card-1-p-2": "لتوصيل الرسائل، بدلاً من معرفات المستخدم التي تستخدمها جميع المنصات الأخرى، يستخدم SimpleX معرّفات مزدوجة مؤقتة مجهولة الهوية لقوائم انتظار الرسائل، مختلفة لكل اتصال من اتصالاتك — لا توجد معرفات مستخدم دائمة.", @@ -114,7 +114,7 @@ "privacy-matters-overlay-card-3-p-4": "لا يكفي استخدام برنامج مُراسلة مُعمَّاة من طرف إلى طرف، يجب علينا جميعًا استخدام برامج مُراسلة التي تحمي خصوصية شبكاتنا الشخصية — مع من نحن مرتبطون.", "simplex-unique-overlay-card-1-p-3": "يحمي هذا التصميم خصوصية الأشخاص الذين تتواصل معهم، ويخفيها عن خوادم منصة SimpleX ومن أي مراقبين. لإخفاء عنوان IP الخاص بك من الخوادم، يمكنك <strong> الاتصال بخوادم SimpleX عبر تور</strong>.", "simplex-unique-overlay-card-2-p-1": "نظرًا لعدم وجود معرف لديك على نظام SimpleX، لا يمكن لأي شخص الاتصال بك ما لم تشارك عنوان مستخدم لمرة واحدة أو مؤقتًا، كرمز QR أو رابط.", - "simplex-unique-overlay-card-2-p-2": "حتى مع عنوان المستخدم الاختياري، بينما يمكن استخدامه لإرسال طلبات جهات اتصال غير مرغوب فيها، يمكنك تغييره أو حذفه بالكامل دون فقد أي من اتصالاتك.", + "simplex-unique-overlay-card-2-p-2": "حتى مع عنوان المستخدم الاختياري، بينما يمكن استخدامه لإرسال طلبات جهات اتصال مزعجة، يمكنك تغييره أو حذفه بالكامل دون فقد أي من اتصالاتك.", "simplex-unique-overlay-card-3-p-2": "يتم الاحتفاظ بالرسائل المُعمَّاة من طرف إلى طرف مؤقتًا على خوادم ترحيل SimpleX حتى يتم استلامها، ثُمَّ تُحذف نهائيًا.", "simplex-unique-overlay-card-3-p-4": "لا توجد معرفّات أو نص مُعَمَّى مشترك بين حركة مرور بيانات الخادم المُرسلة والمُستلمة — ؛ إذا كان أي شخص يراقب ذلك، فلن يتمكّن بسهولة من تحديد من يتواصل مع من، حتى لو اختُرق TLS.", "simplex-unique-card-1-p-1": "يحمي SimpleX خصوصية ملف التعريف الخاص بك، جهات الاتصال والبيانات الوصفية، ويخفيه عن خوادم منصة SimpleX وأي مراقبين.", diff --git a/website/langs/it.json b/website/langs/it.json index 1f3ad7fdd..3dda11e9c 100644 --- a/website/langs/it.json +++ b/website/langs/it.json @@ -54,7 +54,7 @@ "simplex-unique-4-title": "Possiedi la rete SimpleX", "simplex-unique-4-overlay-1-title": "Completamente decentralizzata — gli utenti possiedono la rete SimpleX", "hero-overlay-card-1-p-1": "Molti utenti hanno chiesto: <em>se SimpleX non ha identificatori utente, come può sapere dove recapitare i messaggi? </em>", - "hero-overlay-card-1-p-3": "Sei tu a definire quale/i server usare per ricevere i messaggi, i tuoi contatti — i server che usi per inviare loro i messaggi. È probabile che ogni conversazione utilizzi due server diversi.", + "hero-overlay-card-1-p-3": "Sei tu a definire quale/i server usare per ricevere i messaggi, i tuoi contatti i server che usi per inviare loro i messaggi. È probabile che ogni conversazione utilizzi due server diversi.", "hero-overlay-card-1-p-5": "Solo i dispositivi client conservano profili utente, contatti e gruppi; i messaggi vengono inviati con crittografia end-to-end a 2 livelli.", "hero-overlay-card-1-p-6": "Maggiori informazioni nel <a href='https://github.com/simplex-chat/simplexmq/blob/stable/protocol/overview-tjr.md' target='_blank'>libro bianco di SimpleX</a>.", "hero-overlay-card-2-p-2": "Potrebbero quindi correlare queste informazioni con i social network pubblici esistenti e determinare alcune identità reali.", From c65a17fccb9417de07b74c6aa8dc017d83a99c02 Mon Sep 17 00:00:00 2001 From: Evgeny Poberezkin <evgeny@poberezkin.com> Date: Sat, 20 Jan 2024 14:59:13 +0000 Subject: [PATCH 22/23] core: output messages and events while executing the CLI command passed via -e option (#3683) * core: output messages and events while executing the CLI command passed via -e option * option * add option --- .../src/Broadcast/Options.hs | 3 +- apps/simplex-chat/Main.hs | 44 ++++++++++++------- .../src/Directory/Options.hs | 3 +- src/Simplex/Chat/Mobile.hs | 1 + src/Simplex/Chat/Options.hs | 21 +++++++++ tests/ChatClient.hs | 1 + 6 files changed, 54 insertions(+), 19 deletions(-) diff --git a/apps/simplex-broadcast-bot/src/Broadcast/Options.hs b/apps/simplex-broadcast-bot/src/Broadcast/Options.hs index 9a79af4b4..bce0f9497 100644 --- a/apps/simplex-broadcast-bot/src/Broadcast/Options.hs +++ b/apps/simplex-broadcast-bot/src/Broadcast/Options.hs @@ -10,7 +10,7 @@ import Data.Maybe (fromMaybe) import Options.Applicative import Simplex.Chat.Bot.KnownContacts import Simplex.Chat.Controller (updateStr, versionNumber, versionString) -import Simplex.Chat.Options (ChatOpts (..), CoreChatOpts, coreChatOptsP) +import Simplex.Chat.Options (ChatCmdLog (..), ChatOpts (..), CoreChatOpts, coreChatOptsP) data BroadcastBotOpts = BroadcastBotOpts { coreOptions :: CoreChatOpts, @@ -77,6 +77,7 @@ mkChatOpts BroadcastBotOpts {coreOptions} = deviceName = Nothing, chatCmd = "", chatCmdDelay = 3, + chatCmdLog = CCLNone, chatServerPort = Nothing, optFilesFolder = Nothing, showReactions = False, diff --git a/apps/simplex-chat/Main.hs b/apps/simplex-chat/Main.hs index ccfc6a484..f47bd6c7c 100644 --- a/apps/simplex-chat/Main.hs +++ b/apps/simplex-chat/Main.hs @@ -1,13 +1,15 @@ +{-# LANGUAGE DuplicateRecordFields #-} {-# LANGUAGE NamedFieldPuns #-} module Main where -import Control.Concurrent (threadDelay) -import Control.Concurrent.STM.TVar (readTVarIO) +import Control.Concurrent (forkIO, threadDelay) +import Control.Concurrent.STM +import Control.Monad import Data.Time.Clock (getCurrentTime) import Data.Time.LocalTime (getCurrentTimeZone) import Server -import Simplex.Chat.Controller (currentRemoteHost, versionNumber, versionString) +import Simplex.Chat.Controller (ChatController (..), ChatResponse (..), currentRemoteHost, versionNumber, versionString) import Simplex.Chat.Core import Simplex.Chat.Options import Simplex.Chat.Terminal @@ -22,20 +24,28 @@ main = do opts@ChatOpts {chatCmd, chatServerPort} <- getChatOpts appDir "simplex_v1" if null chatCmd then case chatServerPort of - Just chatPort -> - simplexChatServer defaultChatServerConfig {chatPort} terminalChatConfig opts - _ -> do - welcome opts - t <- withTerminal pure - simplexChatTerminal terminalChatConfig opts t - else simplexChatCore terminalChatConfig opts $ \user cc -> do - rh <- readTVarIO $ currentRemoteHost cc - let cmdRH = rh -- response RemoteHost is the same as for the command itself - r <- sendChatCmdStr cc chatCmd - ts <- getCurrentTime - tz <- getCurrentTimeZone - putStrLn $ serializeChatResponse (rh, Just user) ts tz cmdRH r - threadDelay $ chatCmdDelay opts * 1000000 + Just chatPort -> simplexChatServer defaultChatServerConfig {chatPort} terminalChatConfig opts + _ -> runCLI opts + else simplexChatCore terminalChatConfig opts $ runCommand opts + where + runCLI opts = do + welcome opts + t <- withTerminal pure + simplexChatTerminal terminalChatConfig opts t + runCommand ChatOpts {chatCmd, chatCmdLog, chatCmdDelay} user cc = do + when (chatCmdLog /= CCLNone) . void . forkIO . forever $ do + (_, _, r') <- atomically . readTBQueue $ outputQ cc + case r' of + CRNewChatItem {} -> printResponse r' + _ -> when (chatCmdLog == CCLAll) $ printResponse r' + sendChatCmdStr cc chatCmd >>= printResponse + threadDelay $ chatCmdDelay * 1000000 + where + printResponse r = do + ts <- getCurrentTime + tz <- getCurrentTimeZone + rh <- readTVarIO $ currentRemoteHost cc + putStrLn $ serializeChatResponse (rh, Just user) ts tz rh r welcome :: ChatOpts -> IO () welcome ChatOpts {coreOptions = CoreChatOpts {dbFilePrefix, networkConfig}} = diff --git a/apps/simplex-directory-service/src/Directory/Options.hs b/apps/simplex-directory-service/src/Directory/Options.hs index 6d4e1296f..78157d7e1 100644 --- a/apps/simplex-directory-service/src/Directory/Options.hs +++ b/apps/simplex-directory-service/src/Directory/Options.hs @@ -14,7 +14,7 @@ where import Options.Applicative import Simplex.Chat.Bot.KnownContacts import Simplex.Chat.Controller (updateStr, versionNumber, versionString) -import Simplex.Chat.Options (ChatOpts (..), CoreChatOpts, coreChatOptsP) +import Simplex.Chat.Options (ChatOpts (..), ChatCmdLog (..), CoreChatOpts, coreChatOptsP) data DirectoryOpts = DirectoryOpts { coreOptions :: CoreChatOpts, @@ -77,6 +77,7 @@ mkChatOpts DirectoryOpts {coreOptions} = deviceName = Nothing, chatCmd = "", chatCmdDelay = 3, + chatCmdLog = CCLNone, chatServerPort = Nothing, optFilesFolder = Nothing, showReactions = False, diff --git a/src/Simplex/Chat/Mobile.hs b/src/Simplex/Chat/Mobile.hs index 3671844d7..7c74a7325 100644 --- a/src/Simplex/Chat/Mobile.hs +++ b/src/Simplex/Chat/Mobile.hs @@ -197,6 +197,7 @@ mobileChatOpts dbFilePrefix = deviceName = Nothing, chatCmd = "", chatCmdDelay = 3, + chatCmdLog = CCLNone, chatServerPort = Nothing, optFilesFolder = Nothing, showReactions = False, diff --git a/src/Simplex/Chat/Options.hs b/src/Simplex/Chat/Options.hs index 85298ae31..a222e2e77 100644 --- a/src/Simplex/Chat/Options.hs +++ b/src/Simplex/Chat/Options.hs @@ -8,6 +8,7 @@ module Simplex.Chat.Options ( ChatOpts (..), CoreChatOpts (..), + ChatCmdLog (..), chatOptsP, coreChatOptsP, getChatOpts, @@ -37,6 +38,7 @@ data ChatOpts = ChatOpts deviceName :: Maybe Text, chatCmd :: String, chatCmdDelay :: Int, + chatCmdLog :: ChatCmdLog, chatServerPort :: Maybe String, optFilesFolder :: Maybe FilePath, showReactions :: Bool, @@ -62,6 +64,9 @@ data CoreChatOpts = CoreChatOpts highlyAvailable :: Bool } +data ChatCmdLog = CCLAll | CCLMessages | CCLNone + deriving (Eq) + agentLogLevel :: ChatLogLevel -> LogLevel agentLogLevel = \case CLLDebug -> LogDebug @@ -229,6 +234,14 @@ chatOptsP appDir defaultDbFileName = do <> value 3 <> showDefault ) + chatCmdLog <- + option + parseChatCmdLog + ( long "execute-log" + <> metavar "EXEC_LOG" + <> help "Log during command execution: all, messages, none (default)" + <> value CCLNone + ) chatServerPort <- option parseServerPort @@ -288,6 +301,7 @@ chatOptsP appDir defaultDbFileName = do deviceName, chatCmd, chatCmdDelay, + chatCmdLog, chatServerPort, optFilesFolder, showReactions, @@ -327,6 +341,13 @@ parseLogLevel = eitherReader $ \case "important" -> Right CLLImportant _ -> Left "Invalid log level" +parseChatCmdLog :: ReadM ChatCmdLog +parseChatCmdLog = eitherReader $ \case + "all" -> Right CCLAll + "messages" -> Right CCLMessages + "none" -> Right CCLNone + _ -> Left "Invalid chat command log level" + getChatOpts :: FilePath -> FilePath -> IO ChatOpts getChatOpts appDir defaultDbFileName = execParser $ diff --git a/tests/ChatClient.hs b/tests/ChatClient.hs index 578eef4e4..f7982c5fb 100644 --- a/tests/ChatClient.hs +++ b/tests/ChatClient.hs @@ -63,6 +63,7 @@ testOpts = deviceName = Nothing, chatCmd = "", chatCmdDelay = 3, + chatCmdLog = CCLNone, chatServerPort = Nothing, optFilesFolder = Nothing, showReactions = True, From a9ba0a2e8a6133a338b59593bf8d1b61cf92335a Mon Sep 17 00:00:00 2001 From: Evgeny Poberezkin <evgeny@poberezkin.com> Date: Sat, 20 Jan 2024 15:02:03 +0000 Subject: [PATCH 23/23] core: 5.5.0.2, update simplexmq 5.5.1.0 --- cabal.project | 2 +- package.yaml | 2 +- scripts/nix/sha256map.nix | 2 +- simplex-chat.cabal | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/cabal.project b/cabal.project index 908962f5c..eb1873dc0 100644 --- a/cabal.project +++ b/cabal.project @@ -12,7 +12,7 @@ constraints: zip +disable-bzip2 +disable-zstd source-repository-package type: git location: https://github.com/simplex-chat/simplexmq.git - tag: baf2c470658a675f383a0aa628f37b39337f41d9 + tag: 1e49f1c92d23032761fd3d167a2f003dc0e57f78 source-repository-package type: git diff --git a/package.yaml b/package.yaml index a9b7e7770..6342e98ea 100644 --- a/package.yaml +++ b/package.yaml @@ -1,5 +1,5 @@ name: simplex-chat -version: 5.5.0.1 +version: 5.5.0.2 #synopsis: #description: homepage: https://github.com/simplex-chat/simplex-chat#readme diff --git a/scripts/nix/sha256map.nix b/scripts/nix/sha256map.nix index 83458efdf..d14dbc15a 100644 --- a/scripts/nix/sha256map.nix +++ b/scripts/nix/sha256map.nix @@ -1,5 +1,5 @@ { - "https://github.com/simplex-chat/simplexmq.git"."baf2c470658a675f383a0aa628f37b39337f41d9" = "0zg94ycr72x7zyp1zqnwbld2l6znqiqdygzl5mfn9yclpv76ihmg"; + "https://github.com/simplex-chat/simplexmq.git"."1e49f1c92d23032761fd3d167a2f003dc0e57f78" = "1xks7gb2ll0qpliijh8fbkaz4pnvrxmfk8rm9nf0yrypqs5js36y"; "https://github.com/simplex-chat/hs-socks.git"."a30cc7a79a08d8108316094f8f2f82a0c5e1ac51" = "0yasvnr7g91k76mjkamvzab2kvlb1g5pspjyjn2fr6v83swjhj38"; "https://github.com/simplex-chat/direct-sqlcipher.git"."f814ee68b16a9447fbb467ccc8f29bdd3546bfd9" = "1ql13f4kfwkbaq7nygkxgw84213i0zm7c1a8hwvramayxl38dq5d"; "https://github.com/simplex-chat/sqlcipher-simple.git"."a46bd361a19376c5211f1058908fc0ae6bf42446" = "1z0r78d8f0812kxbgsm735qf6xx8lvaz27k1a0b4a2m0sshpd5gl"; diff --git a/simplex-chat.cabal b/simplex-chat.cabal index 2cbc790c2..9be4f5d26 100644 --- a/simplex-chat.cabal +++ b/simplex-chat.cabal @@ -5,7 +5,7 @@ cabal-version: 1.12 -- see: https://github.com/sol/hpack name: simplex-chat -version: 5.5.0.1 +version: 5.5.0.2 category: Web, System, Services, Cryptography homepage: https://github.com/simplex-chat/simplex-chat#readme author: simplex.chat