diff --git a/apps/ios/Shared/ContentView.swift b/apps/ios/Shared/ContentView.swift index 652258415e..3198a3d361 100644 --- a/apps/ios/Shared/ContentView.swift +++ b/apps/ios/Shared/ContentView.swift @@ -288,8 +288,10 @@ struct ContentView: View { } prefShowLANotice = true connectViaUrl() + showReRegisterTokenAlert() } .onChange(of: chatModel.appOpenUrl) { _ in connectViaUrl() } + .onChange(of: chatModel.reRegisterTknStatus) { _ in showReRegisterTokenAlert() } .sheet(item: $noticesSheetItem) { item in switch item { case let .whatsNew(updatedConditions): @@ -468,6 +470,21 @@ struct ContentView: View { } } + func showReRegisterTokenAlert() { + dismissAllSheets() { + let m = ChatModel.shared + if let errorTknStatus = m.reRegisterTknStatus, let token = chatModel.deviceToken { + chatModel.reRegisterTknStatus = nil + AlertManager.shared.showAlert(Alert( + title: Text("Notifications error"), + message: Text(tokenStatusInfo(errorTknStatus, register: true)), + primaryButton: .default(Text("Register")) { reRegisterToken(token: token) }, + secondaryButton: .cancel() + )) + } + } + } + private func showPlanAndConnectAlert(_ alert: PlanAndConnectAlert) { AlertManager.shared.showAlert(planAndConnectAlert(alert, dismiss: false)) } diff --git a/apps/ios/Shared/Model/ChatModel.swift b/apps/ios/Shared/Model/ChatModel.swift index d46b524867..90c95f4fc5 100644 --- a/apps/ios/Shared/Model/ChatModel.swift +++ b/apps/ios/Shared/Model/ChatModel.swift @@ -267,6 +267,7 @@ final class ChatModel: ObservableObject { @Published var deviceToken: DeviceToken? @Published var savedToken: DeviceToken? @Published var tokenRegistered = false + @Published var reRegisterTknStatus: NtfTknStatus? = nil @Published var tokenStatus: NtfTknStatus? @Published var notificationMode = NotificationsMode.off @Published var notificationServer: String? @@ -917,7 +918,7 @@ final class ChatModel: ObservableObject { } func decreaseGroupReportsCounter(_ chatId: ChatId, by: Int = 1) { - changeGroupReportsCounter(chatId, -1) + changeGroupReportsCounter(chatId, -by) } private func changeGroupReportsCounter(_ chatId: ChatId, _ by: Int = 0) { diff --git a/apps/ios/Shared/Model/SimpleXAPI.swift b/apps/ios/Shared/Model/SimpleXAPI.swift index 65b69a75c8..3418531d3d 100644 --- a/apps/ios/Shared/Model/SimpleXAPI.swift +++ b/apps/ios/Shared/Model/SimpleXAPI.swift @@ -516,6 +516,18 @@ func apiDeleteMemberChatItems(groupId: Int64, itemIds: [Int64]) async throws -> throw r } +func apiArchiveReceivedReports(groupId: Int64) async throws -> ChatResponse { + let r = await chatSendCmd(.apiArchiveReceivedReports(groupId: groupId), bgDelay: msgDelay) + if case .groupChatItemsDeleted = r { return r } + throw r +} + +func apiDeleteReceivedReports(groupId: Int64, itemIds: [Int64], mode: CIDeleteMode) async throws -> [ChatItemDeletion] { + let r = await chatSendCmd(.apiDeleteReceivedReports(groupId: groupId, itemIds: itemIds, mode: mode), bgDelay: msgDelay) + if case let .chatItemsDeleted(_, chatItemDeletions, _) = r { return chatItemDeletions } + throw r +} + func apiGetNtfToken() -> (DeviceToken?, NtfTknStatus?, NotificationsMode, String?) { let r = chatSendCmdSync(.apiGetNtfToken) switch r { @@ -542,7 +554,12 @@ func registerToken(token: DeviceToken) { Task { do { let status = try await apiRegisterToken(token: token, notificationMode: mode) - await MainActor.run { m.tokenStatus = status } + await MainActor.run { + m.tokenStatus = status + if !status.workingToken { + m.reRegisterTknStatus = status + } + } } catch let error { logger.error("registerToken apiRegisterToken error: \(responseError(error))") } @@ -550,10 +567,49 @@ func registerToken(token: DeviceToken) { } } +func tokenStatusInfo(_ status: NtfTknStatus, register: Bool) -> String { + String.localizedStringWithFormat(NSLocalizedString("Token status: %@.", comment: "token status"), status.text) + + "\n" + status.info(register: register) +} + +func reRegisterToken(token: DeviceToken) { + let m = ChatModel.shared + let mode = m.notificationMode + logger.debug("reRegisterToken \(mode.rawValue)") + Task { + do { + let status = try await apiRegisterToken(token: token, notificationMode: mode) + await MainActor.run { + m.tokenStatus = status + showAlert( + status.workingToken + ? NSLocalizedString("Notifications status", comment: "alert title") + : NSLocalizedString("Notifications error", comment: "alert title"), + message: tokenStatusInfo(status, register: false) + ) + } + } catch let error { + logger.error("reRegisterToken apiRegisterToken error: \(responseError(error))") + await MainActor.run { + showAlert( + NSLocalizedString("Error registering for notifications", comment: "alert title"), + message: responseError(error) + ) + } + } + } +} + func apiVerifyToken(token: DeviceToken, nonce: String, code: String) async throws { try await sendCommandOkResp(.apiVerifyToken(token: token, nonce: nonce, code: code)) } +func apiCheckToken(token: DeviceToken) async throws -> NtfTknStatus { + let r = await chatSendCmd(.apiCheckToken(token: token)) + if case let .ntfTokenStatus(status) = r { return status } + throw r +} + func apiDeleteToken(token: DeviceToken) async throws { try await sendCommandOkResp(.apiDeleteToken(token: token)) } @@ -2090,42 +2146,13 @@ func processReceivedMsg(_ res: ChatResponse) async { } else { m.removeChatItem(item.deletedChatItem.chatInfo, item.deletedChatItem.chatItem) } + if item.deletedChatItem.chatItem.isActiveReport { + m.decreaseGroupReportsCounter(item.deletedChatItem.chatInfo.id) + } } } case let .groupChatItemsDeleted(user, groupInfo, chatItemIDs, _, member_): - if !active(user) { - do { - let users = try listUsers() - await MainActor.run { - m.users = users - } - } catch { - logger.error("Error loading users: \(error)") - } - return - } - let im = ItemsModel.shared - let cInfo = ChatInfo.group(groupInfo: groupInfo) - await MainActor.run { - m.decreaseGroupReportsCounter(cInfo.id, by: chatItemIDs.count) - } - var notFound = chatItemIDs.count - for ci in im.reversedChatItems { - if chatItemIDs.contains(ci.id) { - let deleted = if case let .groupRcv(groupMember) = ci.chatDir, let member_, groupMember.groupMemberId != member_.groupMemberId { - CIDeleted.moderated(deletedTs: Date.now, byGroupMember: member_) - } else { - CIDeleted.deleted(deletedTs: Date.now) - } - await MainActor.run { - var newItem = ci - newItem.meta.itemDeleted = deleted - _ = m.upsertChatItem(cInfo, newItem) - } - notFound -= 1 - if notFound == 0 { break } - } - } + await groupChatItemsDeleted(user, groupInfo, chatItemIDs, member_) case let .receivedGroupInvitation(user, groupInfo, _, _): if active(user) { await MainActor.run { @@ -2468,6 +2495,43 @@ func chatItemSimpleUpdate(_ user: any UserLike, _ aChatItem: AChatItem) async { } } +func groupChatItemsDeleted(_ user: UserRef, _ groupInfo: GroupInfo, _ chatItemIDs: Set, _ member_: GroupMember?) async { + let m = ChatModel.shared + if !active(user) { + do { + let users = try listUsers() + await MainActor.run { + m.users = users + } + } catch { + logger.error("Error loading users: \(error)") + } + return + } + let im = ItemsModel.shared + let cInfo = ChatInfo.group(groupInfo: groupInfo) + await MainActor.run { + m.decreaseGroupReportsCounter(cInfo.id, by: chatItemIDs.count) + } + var notFound = chatItemIDs.count + for ci in im.reversedChatItems { + if chatItemIDs.contains(ci.id) { + let deleted = if case let .groupRcv(groupMember) = ci.chatDir, let member_, groupMember.groupMemberId != member_.groupMemberId { + CIDeleted.moderated(deletedTs: Date.now, byGroupMember: member_) + } else { + CIDeleted.deleted(deletedTs: Date.now) + } + await MainActor.run { + var newItem = ci + newItem.meta.itemDeleted = deleted + _ = m.upsertChatItem(cInfo, newItem) + } + notFound -= 1 + if notFound == 0 { break } + } + } +} + func refreshCallInvitations() async throws { let m = ChatModel.shared let callInvitations = try await apiGetCallInvitations() diff --git a/apps/ios/Shared/Views/Chat/ChatView.swift b/apps/ios/Shared/Views/Chat/ChatView.swift index 9e48bd897a..e83391e386 100644 --- a/apps/ios/Shared/Views/Chat/ChatView.swift +++ b/apps/ios/Shared/Views/Chat/ChatView.swift @@ -46,6 +46,7 @@ struct ChatView: View { @State private var forwardedChatItems: [ChatItem] = [] @State private var selectedChatItems: Set? = nil @State private var showDeleteSelectedMessages: Bool = false + @State private var showArchiveSelectedReports: Bool = false @State private var allowToDeleteSelectedMessagesForAll: Bool = false @AppStorage(DEFAULT_TOOLBAR_MATERIAL) private var toolbarMaterial = ToolbarMaterial.defaultMaterial @@ -100,6 +101,9 @@ struct ChatView: View { allowToDeleteSelectedMessagesForAll = forAll showDeleteSelectedMessages = true }, + archiveItems: { + showArchiveSelectedReports = true + }, moderateItems: { if case let .group(groupInfo) = chat.chatInfo { showModerateSelectedMessagesAlert(groupInfo) @@ -135,6 +139,20 @@ struct ChatView: View { } } } + .confirmationDialog(selectedChatItems?.count == 1 ? "Archive report?" : "Archive \((selectedChatItems?.count ?? 0)) reports?", isPresented: $showArchiveSelectedReports, titleVisibility: .visible) { + Button("For me", role: .destructive) { + if let selected = selectedChatItems { + archiveReports(chat.chatInfo, selected.sorted(), false, deletedSelectedMessages) + } + } + if case let ChatInfo.group(groupInfo) = chat.chatInfo, groupInfo.membership.memberActive { + Button("For all moderators", role: .destructive) { + if let selected = selectedChatItems { + archiveReports(chat.chatInfo, selected.sorted(), true, deletedSelectedMessages) + } + } + } + } .appSheet(item: $selectedMember) { member in Group { if case let .group(groupInfo) = chat.chatInfo { @@ -914,6 +932,8 @@ struct ChatView: View { @State private var showDeleteMessage = false @State private var deletingItems: [Int64] = [] @State private var showDeleteMessages = false + @State private var archivingReports: Set? = nil + @State private var showArchivingReports = false @State private var showChatItemInfoSheet: Bool = false @State private var chatItemInfo: ChatItemInfo? @State private var msgWidth: CGFloat = 0 @@ -1233,6 +1253,22 @@ struct ChatView: View { deleteMessages(chat, deletingItems, moderate: false) } } + .confirmationDialog(archivingReports?.count == 1 ? "Archive report?" : "Archive \(archivingReports?.count ?? 0) reports?", isPresented: $showArchivingReports, titleVisibility: .visible) { + Button("For me", role: .destructive) { + if let reports = self.archivingReports { + archiveReports(chat.chatInfo, reports.sorted(), false) + self.archivingReports = [] + } + } + if case let ChatInfo.group(groupInfo) = chat.chatInfo, groupInfo.membership.memberActive { + Button("For all moderators", role: .destructive) { + if let reports = self.archivingReports { + archiveReports(chat.chatInfo, reports.sorted(), true) + self.archivingReports = [] + } + } + } + } .frame(maxWidth: maxWidth, maxHeight: .infinity, alignment: alignment) .frame(minWidth: 0, maxWidth: .infinity, alignment: alignment) .sheet(isPresented: $showChatItemInfoSheet, onDismiss: { @@ -1354,7 +1390,11 @@ struct ChatView: View { if ci.chatDir != .groupSnd { if let (groupInfo, _) = ci.memberToModerate(chat.chatInfo) { moderateButton(ci, groupInfo) - } else if ci.meta.itemDeleted == nil, case let .group(gInfo) = chat.chatInfo, gInfo.membership.memberRole == .member, !live, composeState.voiceMessageRecordingState == .noRecording { + } else if ci.meta.itemDeleted == nil && chat.groupFeatureEnabled(.reports), + case let .group(gInfo) = chat.chatInfo, + gInfo.membership.memberRole == .member + && !live + && composeState.voiceMessageRecordingState == .noRecording { reportButton(ci) } } @@ -1690,18 +1730,9 @@ struct ChatView: View { } private func archiveReportButton(_ cItem: ChatItem) -> Button { - Button(role: .destructive) { - AlertManager.shared.showAlert( - Alert( - title: Text("Archive report?"), - message: Text("The report will be archived for you."), - primaryButton: .destructive(Text("Archive")) { - deletingItem = cItem - deleteMessage(.cidmInternalMark, moderate: false) - }, - secondaryButton: .cancel() - ) - ) + Button { + archivingReports = [cItem.id] + showArchivingReports = true } label: { Label("Archive report", systemImage: "archivebox") } @@ -1932,6 +1963,37 @@ private func deleteMessages(_ chat: Chat, _ deletingItems: [Int64], _ mode: CIDe } } +func archiveReports(_ chatInfo: ChatInfo, _ itemIds: [Int64], _ forAll: Bool, _ onSuccess: @escaping () async -> Void = {}) { + if itemIds.count > 0 { + Task { + do { + let deleted = try await apiDeleteReceivedReports( + groupId: chatInfo.apiId, + itemIds: itemIds, + mode: forAll ? CIDeleteMode.cidmBroadcast : CIDeleteMode.cidmInternalMark + ) + + await MainActor.run { + for di in deleted { + if let toItem = di.toChatItem { + _ = ChatModel.shared.upsertChatItem(chatInfo, toItem.chatItem) + } else { + ChatModel.shared.removeChatItem(chatInfo, di.deletedChatItem.chatItem) + } + let deletedItem = di.deletedChatItem.chatItem + if deletedItem.isActiveReport { + ChatModel.shared.decreaseGroupReportsCounter(chatInfo.id) + } + } + } + await onSuccess() + } catch { + logger.error("ChatView.archiveReports error: \(error.localizedDescription)") + } + } + } +} + private func buildTheme() -> AppTheme { if let cId = ChatModel.shared.chatId, let chat = ChatModel.shared.getChat(cId) { let perChatTheme = if case let .direct(contact) = chat.chatInfo { diff --git a/apps/ios/Shared/Views/Chat/Group/GroupMentions.swift b/apps/ios/Shared/Views/Chat/Group/GroupMentions.swift index 0b9db8493b..168f0490c3 100644 --- a/apps/ios/Shared/Views/Chat/Group/GroupMentions.swift +++ b/apps/ios/Shared/Views/Chat/Group/GroupMentions.swift @@ -30,7 +30,7 @@ struct GroupMentionsView: View { @State private var sortedMembers: [GMember] = [] var body: some View { - ZStack { + ZStack(alignment: .bottom) { if isVisible { let filtered = filteredMembers() if filtered.count > 0 { @@ -39,16 +39,15 @@ struct GroupMentionsView: View { .onTapGesture { isVisible = false } - VStack { + VStack(spacing: 0) { Spacer() - VStack { - Spacer() - VStack { - Divider() - let list = List { - ForEach(filtered, id: \.wrapped.groupMemberId) { member in - let mentioned = mentionMemberId == member.wrapped.memberId - let disabled = composeState.mentions.count >= MAX_NUMBER_OF_MENTIONS && !mentioned + Divider() + let scroll = ScrollView { + LazyVStack(spacing: 0) { + ForEach(Array(filtered.enumerated()), id: \.element.wrapped.groupMemberId) { index, member in + let mentioned = mentionMemberId == member.wrapped.memberId + let disabled = composeState.mentions.count >= MAX_NUMBER_OF_MENTIONS && !mentioned + ZStack(alignment: .bottom) { memberRowView(member.wrapped, mentioned) .contentShape(Rectangle()) .disabled(disabled) @@ -56,22 +55,25 @@ struct GroupMentionsView: View { .onTapGesture { memberSelected(member) } + .padding(.horizontal) + .frame(height: MEMBER_ROW_SIZE) + + Divider() + .padding(.leading) + .padding(.leading, 48) } } - .listStyle(PlainListStyle()) - .frame(maxHeight: MEMBER_ROW_SIZE * min(MAX_VISIBLE_MEMBER_ROWS, CGFloat(filtered.count))) - - if #available(iOS 16.0, *) { - list.scrollDismissesKeyboard(.never) - } else { - list - } } - .background(Color(UIColor.systemBackground)) } - .frame(maxWidth: .infinity, maxHeight: MEMBER_ROW_SIZE * MAX_VISIBLE_MEMBER_ROWS) + .frame(maxHeight: MEMBER_ROW_SIZE * min(MAX_VISIBLE_MEMBER_ROWS, CGFloat(filtered.count))) + .background(Color(UIColor.systemBackground)) + + if #available(iOS 16.0, *) { + scroll.scrollDismissesKeyboard(.never) + } else { + scroll + } } - .animation(.spring(), value: isVisible) } } } diff --git a/apps/ios/Shared/Views/Chat/Group/GroupPreferencesView.swift b/apps/ios/Shared/Views/Chat/Group/GroupPreferencesView.swift index 9ef53258aa..ed39c401ce 100644 --- a/apps/ios/Shared/Views/Chat/Group/GroupPreferencesView.swift +++ b/apps/ios/Shared/Views/Chat/Group/GroupPreferencesView.swift @@ -37,6 +37,7 @@ struct GroupPreferencesView: View { featureSection(.voice, $preferences.voice.enable, $preferences.voice.role) featureSection(.files, $preferences.files.enable, $preferences.files.role) featureSection(.simplexLinks, $preferences.simplexLinks.enable, $preferences.simplexLinks.role) + featureSection(.reports, $preferences.reports.enable) featureSection(.history, $preferences.history.enable) if groupInfo.isOwner { @@ -89,6 +90,7 @@ struct GroupPreferencesView: View { settingsRow(icon, color: color) { Toggle(feature.text, isOn: enable) } + .disabled(feature == .reports) // remove in 6.4 if timedOn { DropdownCustomTimePicker( selection: $preferences.timedMessages.ttl, diff --git a/apps/ios/Shared/Views/Chat/SelectableChatItemToolbars.swift b/apps/ios/Shared/Views/Chat/SelectableChatItemToolbars.swift index 81498ee497..85d6b279c5 100644 --- a/apps/ios/Shared/Views/Chat/SelectableChatItemToolbars.swift +++ b/apps/ios/Shared/Views/Chat/SelectableChatItemToolbars.swift @@ -30,12 +30,15 @@ struct SelectedItemsBottomToolbar: View { var chatInfo: ChatInfo // Bool - delete for everyone is possible var deleteItems: (Bool) -> Void + var archiveItems: () -> Void var moderateItems: () -> Void //var shareItems: () -> Void var forwardItems: () -> Void @State var deleteEnabled: Bool = false @State var deleteForEveryoneEnabled: Bool = false + @State var canArchiveReports: Bool = false + @State var canModerate: Bool = false @State var moderateEnabled: Bool = false @@ -50,7 +53,11 @@ struct SelectedItemsBottomToolbar: View { HStack(alignment: .center) { Button { - deleteItems(deleteForEveryoneEnabled) + if canArchiveReports { + archiveItems() + } else { + deleteItems(deleteForEveryoneEnabled) + } } label: { Image(systemName: "trash") .resizable() @@ -109,19 +116,25 @@ struct SelectedItemsBottomToolbar: View { deleteCountProhibited = count == 0 || count > 200 forwardCountProhibited = count == 0 || count > 20 canModerate = possibleToModerate(chatInfo) + let groupInfo: GroupInfo? = if case let ChatInfo.group(groupInfo: info) = chatInfo { + info + } else { + nil + } if let selected = selectedItems { let me: Bool let onlyOwnGroupItems: Bool - (deleteEnabled, deleteForEveryoneEnabled, me, onlyOwnGroupItems, forwardEnabled, selectedChatItems) = chatItems.reduce((true, true, true, true, true, [])) { (r, ci) in + (deleteEnabled, deleteForEveryoneEnabled, canArchiveReports, me, onlyOwnGroupItems, forwardEnabled, selectedChatItems) = chatItems.reduce((true, true, true, true, true, true, [])) { (r, ci) in if selected.contains(ci.id) { - var (de, dee, me, onlyOwnGroupItems, fe, sel) = r + var (de, dee, ar, me, onlyOwnGroupItems, fe, sel) = r de = de && ci.canBeDeletedForSelf dee = dee && ci.meta.deletable && !ci.localNote && !ci.isReport + ar = ar && ci.isActiveReport && ci.chatDir != .groupSnd && groupInfo != nil && groupInfo!.membership.memberRole >= .moderator onlyOwnGroupItems = onlyOwnGroupItems && ci.chatDir == .groupSnd && !ci.isReport me = me && ci.content.msgContent != nil && ci.memberToModerate(chatInfo) != nil && !ci.isReport fe = fe && ci.content.msgContent != nil && ci.meta.itemDeleted == nil && !ci.isLiveDummy && !ci.isReport sel.insert(ci.id) // we are collecting new selected items here to account for any changes in chat items list - return (de, dee, me, onlyOwnGroupItems, fe, sel) + return (de, dee, ar, me, onlyOwnGroupItems, fe, sel) } else { return r } diff --git a/apps/ios/Shared/Views/ChatList/ChatListNavLink.swift b/apps/ios/Shared/Views/ChatList/ChatListNavLink.swift index 39268d4727..e3aad890bb 100644 --- a/apps/ios/Shared/Views/ChatList/ChatListNavLink.swift +++ b/apps/ios/Shared/Views/ChatList/ChatListNavLink.swift @@ -211,23 +211,32 @@ struct ChatListNavLink: View { } .swipeActions(edge: .trailing, allowsFullSwipe: true) { tagChatButton(chat) + let showReportsButton = chat.chatStats.reportsCount > 0 && groupInfo.membership.memberRole >= .moderator let showClearButton = !chat.chatItems.isEmpty let showDeleteGroup = groupInfo.canDelete let showLeaveGroup = groupInfo.membership.memberCurrent - let totalNumberOfButtons = 1 + (showClearButton ? 1 : 0) + (showDeleteGroup ? 1 : 0) + (showLeaveGroup ? 1 : 0) + let totalNumberOfButtons = 1 + (showReportsButton ? 1 : 0) + (showClearButton ? 1 : 0) + (showDeleteGroup ? 1 : 0) + (showLeaveGroup ? 1 : 0) - if showClearButton, totalNumberOfButtons <= 3 { + if showClearButton && totalNumberOfButtons <= 3 { clearChatButton() } - if (showLeaveGroup) { + + if showReportsButton && totalNumberOfButtons <= 3 { + archiveAllReportsButton() + } + + if showLeaveGroup { leaveGroupChatButton(groupInfo) } - - if showDeleteGroup { - if totalNumberOfButtons <= 3 { + + if showDeleteGroup && totalNumberOfButtons <= 3 { + deleteGroupChatButton(groupInfo) + } else if totalNumberOfButtons > 3 { + if showDeleteGroup && !groupInfo.membership.memberActive { deleteGroupChatButton(groupInfo) + moreOptionsButton(false, chat, groupInfo) } else { - moreOptionsButton(chat, groupInfo) + moreOptionsButton(true, chat, groupInfo) } } } @@ -313,6 +322,14 @@ struct ChatListNavLink: View { } } + private func archiveAllReportsButton() -> some View { + Button { + AlertManager.shared.showAlert(archiveAllReportsAlert()) + } label: { + SwipeLabel(NSLocalizedString("Archive reports", comment: "swipe action"), systemImage: "archivebox", inverted: oneHandUI) + } + } + private func clearChatButton() -> some View { Button { AlertManager.shared.showAlert(clearChatAlert()) @@ -354,15 +371,20 @@ struct ChatListNavLink: View { ) } - private func moreOptionsButton(_ chat: Chat, _ groupInfo: GroupInfo?) -> some View { + private func moreOptionsButton(_ canShowGroupDelete: Bool, _ chat: Chat, _ groupInfo: GroupInfo?) -> some View { Button { - var buttons: [Alert.Button] = [ - .default(Text("Clear")) { - AlertManager.shared.showAlert(clearChatAlert()) - } - ] - - if let gi = groupInfo, gi.canDelete { + var buttons: [Alert.Button] = [] + buttons.append(.default(Text("Clear")) { + AlertManager.shared.showAlert(clearChatAlert()) + }) + + if let groupInfo, chat.chatStats.reportsCount > 0 && groupInfo.membership.memberRole >= .moderator && groupInfo.ready { + buttons.append(.default(Text("Archive reports")) { + AlertManager.shared.showAlert(archiveAllReportsAlert()) + }) + } + + if canShowGroupDelete, let gi = groupInfo, gi.canDelete { buttons.append(.destructive(Text("Delete")) { AlertManager.shared.showAlert(deleteGroupAlert(gi)) }) @@ -372,7 +394,7 @@ struct ChatListNavLink: View { actionSheet = SomeActionSheet( actionSheet: ActionSheet( - title: Text("Clear or delete group?"), + title: canShowGroupDelete ? Text("Clear or delete group?") : Text("Clear group?"), buttons: buttons ), id: "other options" @@ -490,6 +512,27 @@ struct ChatListNavLink: View { ) } + private func archiveAllReportsAlert() -> Alert { + Alert( + title: Text("Archive all reports?"), + message: Text("All reports will be archived for you."), + primaryButton: .destructive(Text("Archive")) { + Task { await archiveAllReportsForMe(chat.chatInfo.apiId) } + }, + secondaryButton: .cancel() + ) + } + + private func archiveAllReportsForMe(_ apiId: Int64) async { + do { + if case let .groupChatItemsDeleted(user, groupInfo, chatItemIDs, _, member) = try await apiArchiveReceivedReports(groupId: apiId) { + await groupChatItemsDeleted(user, groupInfo, chatItemIDs, member) + } + } catch { + logger.error("archiveAllReportsForMe error: \(responseError(error))") + } + } + private func clearChatAlert() -> Alert { Alert( title: Text("Clear conversation?"), diff --git a/apps/ios/Shared/Views/UserSettings/NotificationsView.swift b/apps/ios/Shared/Views/UserSettings/NotificationsView.swift index 4e7f826f4f..c4d0588987 100644 --- a/apps/ios/Shared/Views/UserSettings/NotificationsView.swift +++ b/apps/ios/Shared/Views/UserSettings/NotificationsView.swift @@ -13,7 +13,7 @@ struct NotificationsView: View { @EnvironmentObject var m: ChatModel @EnvironmentObject var theme: AppTheme @State private var notificationMode: NotificationsMode = ChatModel.shared.notificationMode - @State private var showAlert: NotificationAlert? + @State private var ntfAlert: NotificationAlert? @State private var legacyDatabase = dbContainerGroupDefault.get() == .documents @State private var testing = false @State private var testedSuccess: Bool? = nil @@ -25,7 +25,7 @@ struct NotificationsView: View { ProgressView().scaleEffect(2) } } - .alert(item: $showAlert) { alert in + .alert(item: $ntfAlert) { alert in if let token = m.deviceToken { return notificationAlert(alert, token) } else { @@ -41,7 +41,7 @@ struct NotificationsView: View { List { Section { SelectionListView(list: NotificationsMode.values, selection: $notificationMode) { mode in - showAlert = .setMode(mode: mode) + ntfAlert = .setMode(mode: mode) } } footer: { VStack(alignment: .leading) { @@ -95,7 +95,7 @@ struct NotificationsView: View { if let server = m.notificationServer { smpServers("Push server", [server], theme.colors.secondary) - testServerButton(server) + testTokenButton(server) } } header: { Text("Push notifications") @@ -163,7 +163,7 @@ struct NotificationsView: View { await MainActor.run { let err = responseError(error) logger.error("apiDeleteToken error: \(err)") - showAlert = .error(title: "Error deleting token", error: err) + ntfAlert = .error(title: "Error deleting token", error: err) } } default: @@ -181,19 +181,19 @@ struct NotificationsView: View { await MainActor.run { let err = responseError(error) logger.error("apiRegisterToken error: \(err)") - showAlert = .error(title: "Error enabling notifications", error: err) + ntfAlert = .error(title: "Error enabling notifications", error: err) } } } } } - private func testServerButton(_ server: String) -> some View { + private func testTokenButton(_ server: String) -> some View { HStack { - Button("Test server") { + Button("Test notifications") { testing = true Task { - await testServer(server) + await testServerAndToken(server) await MainActor.run { testing = false } } } @@ -215,22 +215,61 @@ struct NotificationsView: View { } } - private func testServer(_ server: String) async { + private func testServerAndToken(_ server: String) async { do { let r = try await testProtoServer(server: server) switch r { case .success: - await MainActor.run { - testedSuccess = true + if let token = m.deviceToken { + do { + let status = try await apiCheckToken(token: token) + await MainActor.run { + m.tokenStatus = status + testedSuccess = status.workingToken + if status.workingToken { + showAlert( + NSLocalizedString("Notifications status", comment: "alert title"), + message: tokenStatusInfo(status, register: false) + ) + } else { + showAlert( + title: NSLocalizedString("Notifications error", comment: "alert title"), + message: tokenStatusInfo(status, register: true), + buttonTitle: "Register", + buttonAction: { + reRegisterToken(token: token) + testedSuccess = nil + }, + cancelButton: true + ) + } + } + } catch let error { + await MainActor.run { + let err = responseError(error) + logger.error("apiCheckToken \(err)") + ntfAlert = .error(title: "Error checking token status", error: err) + } + } + } else { + await MainActor.run { + showAlert( + NSLocalizedString("No token!", comment: "alert title") + ) + } } case let .failure(f): await MainActor.run { - showAlert = .testFailure(testFailure: f) + ntfAlert = .testFailure(testFailure: f) testedSuccess = false } } } catch let error { - logger.error("testServerConnection \(responseError(error))") + await MainActor.run { + let err = responseError(error) + logger.error("testServerConnection \(err)") + ntfAlert = .error(title: "Error testing server connection", error: err) + } } } } diff --git a/apps/ios/Shared/Views/UserSettings/SettingsView.swift b/apps/ios/Shared/Views/UserSettings/SettingsView.swift index 138c3689f5..61dbb5d5d7 100644 --- a/apps/ios/Shared/Views/UserSettings/SettingsView.swift +++ b/apps/ios/Shared/Views/UserSettings/SettingsView.swift @@ -477,7 +477,11 @@ struct SettingsView: View { case .registered: icon = "bolt.fill" color = theme.colors.secondary - case .invalid: + case .invalid: fallthrough + case .invalidBad: fallthrough + case .invalidTopic: fallthrough + case .invalidExpired: fallthrough + case .invalidUnregistered: icon = "bolt.slash" color = theme.colors.secondary case .confirmed: 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 048ea3990b..04dd78337f 100644 --- a/apps/ios/SimpleX Localizations/bg.xcloc/Localized Contents/bg.xliff +++ b/apps/ios/SimpleX Localizations/bg.xcloc/Localized Contents/bg.xliff @@ -531,6 +531,14 @@ <p><a href="%@">Свържете се с мен чрез SimpleX Chat</a></p> email text + + @%@ + No comment provided by engineer. + + + @'%@' + No comment provided by engineer. + A few more things Още няколко неща @@ -631,6 +639,10 @@ Грешки при потвърждението No comment provided by engineer. + + Active + token status text + Active connections Активни връзки @@ -1732,6 +1744,10 @@ Потвърди качването No comment provided by engineer. + + Confirmed + token status text + Connect Свързване @@ -1993,31 +2009,32 @@ This is your own one-time link! Create - Създай + Създаване No comment provided by engineer. Create 1-time link + Създаване на еднократна препратка No comment provided by engineer. Create SimpleX address - Създай SimpleX адрес + Създаване на адрес в SimpleX No comment provided by engineer. Create a group using a random profile. - Създай група с автоматично генериран профилл. + Създаване група с автоматично създаден профил. No comment provided by engineer. Create file - Създай файл + Създаване на файл server test step Create group - Създай група + Създаване на група No comment provided by engineer. @@ -3032,6 +3049,10 @@ This is your own one-time link! Error changing to incognito! No comment provided by engineer. + + Error checking token status + No comment provided by engineer. + Error connecting to forwarding server %@. Please try later. No comment provided by engineer. @@ -3179,6 +3200,10 @@ This is your own one-time link! Error reconnecting servers No comment provided by engineer. + + Error registering for notifications + alert title + Error removing member Грешка при отстраняване на член @@ -3279,6 +3304,10 @@ This is your own one-time link! Грешка при синхронизиране на връзката No comment provided by engineer. + + Error testing server connection + No comment provided by engineer. + Error updating group link Грешка при актуализиране на груповия линк @@ -3356,6 +3385,10 @@ This is your own one-time link! Разшири chat item action + + Expired + token status text + Export database Експортирай база данни @@ -4077,6 +4110,26 @@ More improvements are coming soon! Interface colors No comment provided by engineer. + + Invalid + token status text + + + Invalid (bad token) + token status text + + + Invalid (expired) + token status text + + + Invalid (unregistered) + token status text + + + Invalid (wrong topic) + token status text + Invalid QR code Невалиден QR код @@ -4734,7 +4787,11 @@ This is your link for group %@! Mute Без звук - swipe action + notification label action + + + Mute all + notification label action Muted when inactive! @@ -4783,6 +4840,10 @@ This is your link for group %@! Състояние на мрежата No comment provided by engineer. + + New + token status text + New Passcode Нов kод за достъп @@ -4974,6 +5035,10 @@ This is your link for group %@! No servers to send files. servers error + + No token! + alert title + No unread chats No comment provided by engineer. @@ -5010,10 +5075,18 @@ This is your link for group %@! Известията са деактивирани! No comment provided by engineer. + + Notifications error + alert title + Notifications privacy No comment provided by engineer. + + Notifications status + alert title + Now admins can: - delete members' messages. @@ -5427,6 +5500,18 @@ Error: %@ Моля, съхранявайте паролата на сигурно място, НЯМА да можете да я промените, ако я загубите. No comment provided by engineer. + + Please try to disable and re-enable notfications. + token info + + + Please wait for token activation to complete. + token info + + + Please wait for token to be registered. + token info + Polish interface Полски интерфейс @@ -5794,6 +5879,18 @@ Enable in *Network & servers* settings. Намалена консумация на батерията No comment provided by engineer. + + Register + No comment provided by engineer. + + + Register notification token? + token info + + + Registered + token status text + Reject Отхвърляне @@ -6972,6 +7069,10 @@ Enable in *Network & servers* settings. Времето на изчакване за установяване на TCP връзка No comment provided by engineer. + + TCP port for messaging + No comment provided by engineer. + TCP_KEEPCNT TCP_KEEPCNT @@ -7044,6 +7145,10 @@ Enable in *Network & servers* settings. Тестът е неуспешен на стъпка %@. server test failure + + Test notifications + No comment provided by engineer. + Test server Тествай сървър @@ -7394,6 +7499,10 @@ You will be prompted to complete authentication before this feature is enabled.< Избор на инкогнито при свързване. No comment provided by engineer. + + Token status: %@. + token status + Toolbar opacity No comment provided by engineer. @@ -7554,7 +7663,7 @@ To connect, please ask your contact to create another connection link and check Unmute Уведомявай - swipe action + notification label action Unread @@ -7640,6 +7749,10 @@ To connect, please ask your contact to create another connection link and check Използвай сървърите на SimpleX Chat? No comment provided by engineer. + + Use TCP port %@ when no port is specified. + No comment provided by engineer. + Use chat Използвай чата @@ -7709,6 +7822,10 @@ To connect, please ask your contact to create another connection link and check Use the app with one hand. No comment provided by engineer. + + Use web port + No comment provided by engineer. + User selection No comment provided by engineer. @@ -8239,6 +8356,10 @@ Repeat connection request? Изпратихте покана за групата No comment provided by engineer. + + You should receive notifications. + token info + You will be connected to group when the group host's device is online, please wait or check later! Ще бъдете свързани с групата, когато устройството на домакина на групата е онлайн, моля, изчакайте или проверете по-късно! @@ -8310,7 +8431,7 @@ Repeat connection request? Your SimpleX address - Вашият SimpleX адрес + Вашият адрес в SimpleX No comment provided by engineer. @@ -9017,10 +9138,6 @@ Repeat connection request? месеци time unit - - mute - No comment provided by engineer. - never никога @@ -9239,10 +9356,6 @@ last received msg: %2$@ неизвестен статус No comment provided by engineer. - - unmute - No comment provided by engineer. - unprotected No comment provided by engineer. 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 410463098f..9b3a40e012 100644 --- a/apps/ios/SimpleX Localizations/cs.xcloc/Localized Contents/cs.xliff +++ b/apps/ios/SimpleX Localizations/cs.xcloc/Localized Contents/cs.xliff @@ -519,6 +519,14 @@ <p><a href="%@"> Připojte se ke mne přes SimpleX Chat</a></p> email text + + @%@ + No comment provided by engineer. + + + @'%@' + No comment provided by engineer. + A few more things Ještě pár věcí @@ -613,6 +621,10 @@ Acknowledgement errors No comment provided by engineer. + + Active + token status text + Active connections No comment provided by engineer. @@ -1644,6 +1656,10 @@ Confirm upload No comment provided by engineer. + + Confirmed + token status text + Connect Připojit @@ -2900,6 +2916,10 @@ This is your own one-time link! Error changing to incognito! No comment provided by engineer. + + Error checking token status + No comment provided by engineer. + Error connecting to forwarding server %@. Please try later. No comment provided by engineer. @@ -3044,6 +3064,10 @@ This is your own one-time link! Error reconnecting servers No comment provided by engineer. + + Error registering for notifications + alert title + Error removing member Chyba při odebrání člena @@ -3142,6 +3166,10 @@ This is your own one-time link! Chyba synchronizace připojení No comment provided by engineer. + + Error testing server connection + No comment provided by engineer. + Error updating group link Chyba aktualizace odkazu skupiny @@ -3216,6 +3244,10 @@ This is your own one-time link! Expand chat item action + + Expired + token status text + Export database Export databáze @@ -3915,6 +3947,26 @@ More improvements are coming soon! Interface colors No comment provided by engineer. + + Invalid + token status text + + + Invalid (bad token) + token status text + + + Invalid (expired) + token status text + + + Invalid (unregistered) + token status text + + + Invalid (wrong topic) + token status text + Invalid QR code No comment provided by engineer. @@ -4541,7 +4593,11 @@ This is your link for group %@! Mute Ztlumit - swipe action + notification label action + + + Mute all + notification label action Muted when inactive! @@ -4588,6 +4644,10 @@ This is your link for group %@! Stav sítě No comment provided by engineer. + + New + token status text + New Passcode Nové heslo @@ -4777,6 +4837,10 @@ This is your link for group %@! No servers to send files. servers error + + No token! + alert title + No unread chats No comment provided by engineer. @@ -4812,10 +4876,18 @@ This is your link for group %@! Oznámení jsou zakázána! No comment provided by engineer. + + Notifications error + alert title + Notifications privacy No comment provided by engineer. + + Notifications status + alert title + Now admins can: - delete members' messages. @@ -5212,6 +5284,18 @@ Error: %@ Heslo uložte bezpečně, v případě jeho ztráty jej NEBUDE možné změnit. No comment provided by engineer. + + Please try to disable and re-enable notfications. + token info + + + Please wait for token activation to complete. + token info + + + Please wait for token to be registered. + token info + Polish interface Polské rozhraní @@ -5571,6 +5655,18 @@ Enable in *Network & servers* settings. Snížení spotřeby baterie No comment provided by engineer. + + Register + No comment provided by engineer. + + + Register notification token? + token info + + + Registered + token status text + Reject Odmítnout @@ -6724,6 +6820,10 @@ Enable in *Network & servers* settings. Časový limit připojení TCP No comment provided by engineer. + + TCP port for messaging + No comment provided by engineer. + TCP_KEEPCNT TCP_KEEPCNT @@ -6793,6 +6893,10 @@ Enable in *Network & servers* settings. Test selhal v kroku %@. server test failure + + Test notifications + No comment provided by engineer. + Test server Testovací server @@ -7134,6 +7238,10 @@ Před zapnutím této funkce budete vyzváni k dokončení ověření. Změnit inkognito režim při připojení. No comment provided by engineer. + + Token status: %@. + token status + Toolbar opacity No comment provided by engineer. @@ -7286,7 +7394,7 @@ Chcete-li se připojit, požádejte svůj kontakt o vytvoření dalšího odkazu Unmute Zrušit ztlumení - swipe action + notification label action Unread @@ -7369,6 +7477,10 @@ Chcete-li se připojit, požádejte svůj kontakt o vytvoření dalšího odkazu Používat servery SimpleX Chat? No comment provided by engineer. + + Use TCP port %@ when no port is specified. + No comment provided by engineer. + Use chat Použijte chat @@ -7435,6 +7547,10 @@ Chcete-li se připojit, požádejte svůj kontakt o vytvoření dalšího odkazu Use the app with one hand. No comment provided by engineer. + + Use web port + No comment provided by engineer. + User selection No comment provided by engineer. @@ -7933,6 +8049,10 @@ Repeat connection request? Odeslali jste pozvánku do skupiny No comment provided by engineer. + + You should receive notifications. + token info + You will be connected to group when the group host's device is online, please wait or check later! Ke skupině budete připojeni, až bude zařízení hostitele skupiny online, vyčkejte prosím nebo se podívejte později! @@ -8696,10 +8816,6 @@ Repeat connection request? měsíců time unit - - mute - No comment provided by engineer. - never nikdy @@ -8907,10 +9023,6 @@ last received msg: %2$@ unknown status No comment provided by engineer. - - unmute - No comment provided by engineer. - unprotected No comment provided by engineer. diff --git a/apps/ios/SimpleX Localizations/de.xcloc/Localized Contents/de.xliff b/apps/ios/SimpleX Localizations/de.xcloc/Localized Contents/de.xliff index d978641d4a..f0f1bf84ef 100644 --- a/apps/ios/SimpleX Localizations/de.xcloc/Localized Contents/de.xliff +++ b/apps/ios/SimpleX Localizations/de.xcloc/Localized Contents/de.xliff @@ -14,6 +14,7 @@ + No comment provided by engineer. @@ -208,6 +209,7 @@ %d seconds(s) + %d Sekunde(n) delete after time @@ -473,7 +475,7 @@ 1 day - täglich + Älter als ein Tag delete after time time interval @@ -489,18 +491,19 @@ 1 month - monatlich + Älter als einen Monat delete after time time interval 1 week - wöchentlich + Älter als eine Woche delete after time time interval 1 year + Älter als ein Jahr delete after time @@ -540,6 +543,14 @@ <p><a href="%@">Verbinden Sie sich per SimpleX Chat mit mir</a></p> email text + + @%@ + No comment provided by engineer. + + + @'%@' + No comment provided by engineer. + A few more things Ein paar weitere Dinge @@ -640,6 +651,10 @@ Fehler bei der Bestätigung No comment provided by engineer. + + Active + token status text + Active connections Aktive Verbindungen @@ -657,6 +672,7 @@ Add list + Liste hinzufügen No comment provided by engineer. @@ -686,6 +702,7 @@ Add to list + Zur Liste hinzufügen No comment provided by engineer. @@ -765,6 +782,7 @@ All + Alle No comment provided by engineer. @@ -779,6 +797,7 @@ All chats will be removed from the list (text), and the list deleted. + Alle Chats werden von der Liste (text) entfernt und danach wird die Liste gelöscht. alert message @@ -978,6 +997,7 @@ Another reason + Anderer Grund report reason @@ -1007,6 +1027,7 @@ App group: + App-Gruppe: No comment provided by engineer. @@ -1056,6 +1077,7 @@ Archive + Archiv No comment provided by engineer. @@ -1070,10 +1092,12 @@ Archive report + Meldung archivieren No comment provided by engineer. Archive report? + Meldung archivieren? No comment provided by engineer. @@ -1088,6 +1112,7 @@ Ask + Fragen No comment provided by engineer. @@ -1312,6 +1337,7 @@ Businesses + Unternehmen No comment provided by engineer. @@ -1407,6 +1433,7 @@ Change automatic message deletion? + Automatisches Löschen von Nachrichten ändern? alert title @@ -1632,6 +1659,7 @@ Clear or delete group? + Gruppe entfernen oder löschen? No comment provided by engineer. @@ -1656,6 +1684,7 @@ Community guidelines violation + Verstoß gegen die Gemeinschaftsrichtlinien report reason @@ -1773,6 +1802,10 @@ Hochladen bestätigen No comment provided by engineer. + + Confirmed + token status text + Connect Verbinden @@ -1894,6 +1927,7 @@ Das ist Ihr eigener Einmal-Link! Connection blocked + Verbindung blockiert No comment provided by engineer. @@ -1909,10 +1943,13 @@ Das ist Ihr eigener Einmal-Link! Connection is blocked by server operator: %@ + Die Verbindung wurde vom Server-Betreiber blockiert: +%@ No comment provided by engineer. Connection not ready. + Verbindung noch nicht bereit. No comment provided by engineer. @@ -1927,6 +1964,7 @@ Das ist Ihr eigener Einmal-Link! Connection requires encryption renegotiation. + Die Verbindung erfordert eine Neuverhandlung der Verschlüsselung. No comment provided by engineer. @@ -2011,6 +2049,7 @@ Das ist Ihr eigener Einmal-Link! Content violates conditions of use + Inhalt verletzt Nutzungsbedingungen blocking reason @@ -2090,6 +2129,7 @@ Das ist Ihr eigener Einmal-Link! Create list + Liste erstellen No comment provided by engineer. @@ -2353,6 +2393,7 @@ Das ist Ihr eigener Einmal-Link! Delete chat messages from your device. + Chat-Nachrichten von Ihrem Gerät löschen. No comment provided by engineer. @@ -2447,6 +2488,7 @@ Das ist Ihr eigener Einmal-Link! Delete list? + Liste löschen? alert title @@ -2501,6 +2543,7 @@ Das ist Ihr eigener Einmal-Link! Delete report + Meldung löschen No comment provided by engineer. @@ -2665,10 +2708,12 @@ Das ist Ihr eigener Einmal-Link! Disable automatic message deletion? + Automatisches Löschen von Nachrichten deaktivieren? alert title Disable delete messages + Löschen von Nachrichten deaktivieren alert button @@ -2763,6 +2808,7 @@ Das ist Ihr eigener Einmal-Link! Documents: + Dokumente: No comment provided by engineer. @@ -2782,6 +2828,7 @@ Das ist Ihr eigener Einmal-Link! Done + Fertig No comment provided by engineer. @@ -3017,6 +3064,7 @@ Das ist Ihr eigener Einmal-Link! Encryption renegotiation in progress. + Die Neuverhandlung der Verschlüsselung läuft. No comment provided by engineer. @@ -3129,6 +3177,10 @@ Das ist Ihr eigener Einmal-Link! Fehler beim Wechseln zum Inkognito-Profil! No comment provided by engineer. + + Error checking token status + No comment provided by engineer. + Error connecting to forwarding server %@. Please try later. Fehler beim Verbinden mit dem Weiterleitungsserver %@. Bitte versuchen Sie es später erneut. @@ -3151,6 +3203,7 @@ Das ist Ihr eigener Einmal-Link! Error creating list + Fehler beim Erstellen der Liste alert title @@ -3170,6 +3223,7 @@ Das ist Ihr eigener Einmal-Link! Error creating report + Fehler beim Erstellen der Meldung No comment provided by engineer. @@ -3282,6 +3336,10 @@ Das ist Ihr eigener Einmal-Link! Fehler beim Wiederherstellen der Verbindungen zu den Servern No comment provided by engineer. + + Error registering for notifications + alert title + Error removing member Fehler beim Entfernen des Mitglieds @@ -3289,6 +3347,7 @@ Das ist Ihr eigener Einmal-Link! Error reordering lists + Fehler beim Umsortieren der Listen alert title @@ -3303,6 +3362,7 @@ Das ist Ihr eigener Einmal-Link! Error saving chat list + Fehler beim Speichern der Chat-Liste alert title @@ -3385,6 +3445,10 @@ Das ist Ihr eigener Einmal-Link! Fehler beim Synchronisieren der Verbindung No comment provided by engineer. + + Error testing server connection + No comment provided by engineer. + Error updating group link Fehler beim Aktualisieren des Gruppen-Links @@ -3465,6 +3529,10 @@ Das ist Ihr eigener Einmal-Link! Erweitern chat item action + + Expired + token status text + Export database Datenbank exportieren @@ -3517,6 +3585,7 @@ Das ist Ihr eigener Einmal-Link! Favorites + Favoriten No comment provided by engineer. @@ -3534,6 +3603,8 @@ Das ist Ihr eigener Einmal-Link! File is blocked by server operator: (info.reason.text). + Datei wurde vom Server-Betreiber blockiert: +(info.reason.text). file error text @@ -3907,6 +3978,7 @@ Fehler: %2$@ Groups + Gruppen No comment provided by engineer. @@ -3976,6 +4048,7 @@ Fehler: %2$@ How it works + Wie es funktioniert alert button @@ -4122,10 +4195,12 @@ Weitere Verbesserungen sind bald verfügbar! Inappropriate content + Unangemessener Inhalt report reason Inappropriate profile + Unangemessenes Profil report reason @@ -4220,6 +4295,26 @@ Weitere Verbesserungen sind bald verfügbar! Interface-Farben No comment provided by engineer. + + Invalid + token status text + + + Invalid (bad token) + token status text + + + Invalid (expired) + token status text + + + Invalid (unregistered) + token status text + + + Invalid (wrong topic) + token status text + Invalid QR code Ungültiger QR-Code @@ -4495,14 +4590,17 @@ Das ist Ihr Link für die Gruppe %@! List + Liste swipe action List name and emoji should be different for all lists. + Der Listenname und das Emoji sollen für alle Listen unterschiedlich sein. No comment provided by engineer. List name... + Listenname... No comment provided by engineer. @@ -4767,6 +4865,7 @@ Das ist Ihr Link für die Gruppe %@! Messages in this chat will never be deleted. + Nachrichten in diesem Chat werden nie gelöscht. alert message @@ -4871,6 +4970,7 @@ Das ist Ihr Link für die Gruppe %@! More + Mehr swipe action @@ -4901,7 +5001,11 @@ Das ist Ihr Link für die Gruppe %@! Mute Stummschalten - swipe action + notification label action + + + Mute all + notification label action Muted when inactive! @@ -4953,6 +5057,10 @@ Das ist Ihr Link für die Gruppe %@! Netzwerkstatus No comment provided by engineer. + + New + token status text + New Passcode Neuer Zugangscode @@ -5045,14 +5153,17 @@ Das ist Ihr Link für die Gruppe %@! No chats + Keine Chats No comment provided by engineer. No chats found + Keine Chats gefunden No comment provided by engineer. No chats in list %@ + Keine Chats in der Liste %@ No comment provided by engineer. @@ -5160,8 +5271,13 @@ Das ist Ihr Link für die Gruppe %@! Keine Server für das Versenden von Dateien. servers error + + No token! + alert title + No unread chats + Keine ungelesenen Chats No comment provided by engineer. @@ -5176,6 +5292,7 @@ Das ist Ihr Link für die Gruppe %@! Notes + Anmerkungen No comment provided by engineer. @@ -5198,11 +5315,19 @@ Das ist Ihr Link für die Gruppe %@! Benachrichtigungen sind deaktiviert! No comment provided by engineer. + + Notifications error + alert title + Notifications privacy Datenschutz für Benachrichtigungen No comment provided by engineer. + + Notifications status + alert title + Now admins can: - delete members' messages. @@ -5288,10 +5413,12 @@ Dies erfordert die Aktivierung eines VPNs. Only sender and moderators see it + Nur Absender und Moderatoren sehen es No comment provided by engineer. Only you and moderators see it + Nur Sie und Moderatoren sehen es No comment provided by engineer. @@ -5381,10 +5508,12 @@ Dies erfordert die Aktivierung eines VPNs. Open link + Web-Link öffnen No comment provided by engineer. Open links from chat list + Web-Links aus der Chat-Liste öffnen No comment provided by engineer. @@ -5394,6 +5523,7 @@ Dies erfordert die Aktivierung eines VPNs. Open web link? + Web-Link öffnen? No comment provided by engineer. @@ -5632,6 +5762,18 @@ Fehler: %@ Bitte bewahren Sie das Passwort sicher auf, Sie können es NICHT mehr ändern, wenn Sie es vergessen haben oder verlieren. No comment provided by engineer. + + Please try to disable and re-enable notfications. + token info + + + Please wait for token activation to complete. + token info + + + Please wait for token to be registered. + token info + Polish interface Polnische Bedienoberfläche @@ -6024,6 +6166,18 @@ Aktivieren Sie es in den *Netzwerk & Server* Einstellungen. Reduzierter Batterieverbrauch No comment provided by engineer. + + Register + No comment provided by engineer. + + + Register notification token? + token info + + + Registered + token status text + Reject Ablehnen @@ -6127,34 +6281,42 @@ Aktivieren Sie es in den *Netzwerk & Server* Einstellungen. Report + Melden chat item action Report content: only group moderators will see it. + Inhalt melden: Nur Gruppenmoderatoren werden es sehen. report reason Report member profile: only group moderators will see it. + Mitgliederprofil melden: Nur Gruppenmoderatoren werden es sehen. report reason Report other: only group moderators will see it. + Anderes melden: Nur Gruppenmoderatoren werden es sehen. report reason Report reason? + Grund der Meldung? No comment provided by engineer. Report spam: only group moderators will see it. + Spam melden: Nur Gruppenmoderatoren werden es sehen. report reason Report violation: only group moderators will see it. + Verstoß melden: Nur Gruppenmoderatoren werden es sehen. report reason Reports + Meldungen No comment provided by engineer. @@ -6335,6 +6497,7 @@ Aktivieren Sie es in den *Netzwerk & Server* Einstellungen. Save list + Liste speichern No comment provided by engineer. @@ -6794,6 +6957,7 @@ Aktivieren Sie es in den *Netzwerk & Server* Einstellungen. Set chat name… + Chat-Name festlegen… No comment provided by engineer. @@ -7126,6 +7290,7 @@ Aktivieren Sie es in den *Netzwerk & Server* Einstellungen. Spam + Spam blocking reason report reason @@ -7216,6 +7381,7 @@ Aktivieren Sie es in den *Netzwerk & Server* Einstellungen. Storage + Ablage No comment provided by engineer. @@ -7278,6 +7444,10 @@ Aktivieren Sie es in den *Netzwerk & Server* Einstellungen. Timeout der TCP-Verbindung No comment provided by engineer. + + TCP port for messaging + No comment provided by engineer. + TCP_KEEPCNT TCP_KEEPCNT @@ -7353,6 +7523,10 @@ Aktivieren Sie es in den *Netzwerk & Server* Einstellungen. Der Test ist beim Schritt %@ fehlgeschlagen. server test failure + + Test notifications + No comment provided by engineer. + Test server Teste Server @@ -7482,6 +7656,7 @@ Dies kann passieren, wenn es einen Fehler gegeben hat oder die Verbindung kompro The report will be archived for you. + Die Meldung wird für Sie archiviert. No comment provided by engineer. @@ -7561,6 +7736,7 @@ Dies kann passieren, wenn es einen Fehler gegeben hat oder die Verbindung kompro This action cannot be undone - the messages sent and received in this chat earlier than selected will be deleted. + Die älteren als die ausgewählten gesendeten und empfangenen Nachrichten in diesem Chat werden gelöscht. Diese Aktion kann nicht rückgängig gemacht werden! alert message @@ -7725,6 +7901,10 @@ Sie werden aufgefordert, die Authentifizierung abzuschließen, bevor diese Funkt Inkognito beim Verbinden einschalten. No comment provided by engineer. + + Token status: %@. + token status + Toolbar opacity Deckkraft der Symbolleiste @@ -7890,7 +8070,7 @@ Bitten Sie Ihren Kontakt darum einen weiteren Verbindungs-Link zu erzeugen, um s Unmute Stummschaltung aufheben - swipe action + notification label action Unread @@ -7982,6 +8162,10 @@ Bitten Sie Ihren Kontakt darum einen weiteren Verbindungs-Link zu erzeugen, um s Verwenden Sie SimpleX-Chat-Server? No comment provided by engineer. + + Use TCP port %@ when no port is specified. + No comment provided by engineer. + Use chat Verwenden Sie Chat @@ -8057,6 +8241,10 @@ Bitten Sie Ihren Kontakt darum einen weiteren Verbindungs-Link zu erzeugen, um s Die App mit einer Hand bedienen. No comment provided by engineer. + + Use web port + No comment provided by engineer. + User selection Benutzer-Auswahl @@ -8339,6 +8527,7 @@ Bitten Sie Ihren Kontakt darum einen weiteren Verbindungs-Link zu erzeugen, um s Yes + Ja No comment provided by engineer. @@ -8610,6 +8799,10 @@ Verbindungsanfrage wiederholen? Sie haben eine Gruppeneinladung gesendet No comment provided by engineer. + + You should receive notifications. + token info + You will be connected to group when the group host's device is online, please wait or check later! Sie werden mit der Gruppe verbunden, sobald das Endgerät des Gruppen-Hosts online ist. Bitte warten oder schauen Sie später nochmal nach! @@ -8877,6 +9070,7 @@ Verbindungsanfrage wiederholen? archived report + Archivierte Meldung No comment provided by engineer. @@ -9397,6 +9591,7 @@ Verbindungsanfrage wiederholen? moderator + Moderator member role @@ -9404,11 +9599,6 @@ Verbindungsanfrage wiederholen? Monate time unit - - mute - Stummschalten - No comment provided by engineer. - never nie @@ -9635,11 +9825,6 @@ Zuletzt empfangene Nachricht: %2$@ unbekannter Gruppenmitglieds-Status No comment provided by engineer. - - unmute - Stummschaltung aufheben - No comment provided by engineer. - unprotected Ungeschützt 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 79eb1573a4..22d61004ca 100644 --- a/apps/ios/SimpleX Localizations/en.xcloc/Localized Contents/en.xliff +++ b/apps/ios/SimpleX Localizations/en.xcloc/Localized Contents/en.xliff @@ -543,6 +543,16 @@ <p><a href="%@">Connect to me via SimpleX Chat</a></p> email text + + @%@ + @%@ + No comment provided by engineer. + + + @'%@' + @'%@' + No comment provided by engineer. + A few more things A few more things @@ -643,6 +653,11 @@ Acknowledgement errors No comment provided by engineer. + + Active + Active + token status text + Active connections Active connections @@ -1790,6 +1805,11 @@ Confirm upload No comment provided by engineer. + + Confirmed + Confirmed + token status text + Connect Connect @@ -3161,6 +3181,11 @@ This is your own one-time link! Error changing to incognito! No comment provided by engineer. + + Error checking token status + Error checking token status + No comment provided by engineer. + Error connecting to forwarding server %@. Please try later. Error connecting to forwarding server %@. Please try later. @@ -3316,6 +3341,11 @@ This is your own one-time link! Error reconnecting servers No comment provided by engineer. + + Error registering for notifications + Error registering for notifications + alert title + Error removing member Error removing member @@ -3421,6 +3451,11 @@ This is your own one-time link! Error synchronizing connection No comment provided by engineer. + + Error testing server connection + Error testing server connection + No comment provided by engineer. + Error updating group link Error updating group link @@ -3501,6 +3536,11 @@ This is your own one-time link! Expand chat item action + + Expired + Expired + token status text + Export database Export database @@ -4263,6 +4303,31 @@ More improvements are coming soon! Interface colors No comment provided by engineer. + + Invalid + Invalid + token status text + + + Invalid (bad token) + Invalid (bad token) + token status text + + + Invalid (expired) + Invalid (expired) + token status text + + + Invalid (unregistered) + Invalid (unregistered) + token status text + + + Invalid (wrong topic) + Invalid (wrong topic) + token status text + Invalid QR code Invalid QR code @@ -4949,7 +5014,12 @@ This is your link for group %@! Mute Mute - swipe action + notification label action + + + Mute all + Mute all + notification label action Muted when inactive! @@ -5001,6 +5071,11 @@ This is your link for group %@! Network status No comment provided by engineer. + + New + New + token status text + New Passcode New Passcode @@ -5211,6 +5286,11 @@ This is your link for group %@! No servers to send files. servers error + + No token! + No token! + alert title + No unread chats No unread chats @@ -5251,11 +5331,21 @@ This is your link for group %@! Notifications are disabled! No comment provided by engineer. + + Notifications error + Notifications error + alert title + Notifications privacy Notifications privacy No comment provided by engineer. + + Notifications status + Notifications status + alert title + Now admins can: - delete members' messages. @@ -5690,6 +5780,21 @@ Error: %@ Please store passphrase securely, you will NOT be able to change it if you lose it. No comment provided by engineer. + + Please try to disable and re-enable notfications. + Please try to disable and re-enable notfications. + token info + + + Please wait for token activation to complete. + Please wait for token activation to complete. + token info + + + Please wait for token to be registered. + Please wait for token to be registered. + token info + Polish interface Polish interface @@ -6082,6 +6187,21 @@ Enable in *Network & servers* settings. Reduced battery usage No comment provided by engineer. + + Register + Register + No comment provided by engineer. + + + Register notification token? + Register notification token? + token info + + + Registered + Registered + token status text + Reject Reject @@ -7348,6 +7468,11 @@ Enable in *Network & servers* settings. TCP connection timeout No comment provided by engineer. + + TCP port for messaging + TCP port for messaging + No comment provided by engineer. + TCP_KEEPCNT TCP_KEEPCNT @@ -7423,6 +7548,11 @@ Enable in *Network & servers* settings. Test failed at step %@. server test failure + + Test notifications + Test notifications + No comment provided by engineer. + Test server Test server @@ -7797,6 +7927,11 @@ You will be prompted to complete authentication before this feature is enabled.< Toggle incognito when connecting. No comment provided by engineer. + + Token status: %@. + Token status: %@. + token status + Toolbar opacity Toolbar opacity @@ -7962,7 +8097,7 @@ To connect, please ask your contact to create another connection link and check Unmute Unmute - swipe action + notification label action Unread @@ -8054,6 +8189,11 @@ To connect, please ask your contact to create another connection link and check Use SimpleX Chat servers? No comment provided by engineer. + + Use TCP port %@ when no port is specified. + Use TCP port %@ when no port is specified. + No comment provided by engineer. + Use chat Use chat @@ -8129,6 +8269,11 @@ To connect, please ask your contact to create another connection link and check Use the app with one hand. No comment provided by engineer. + + Use web port + Use web port + No comment provided by engineer. + User selection User selection @@ -8683,6 +8828,11 @@ Repeat connection request? You sent group invitation No comment provided by engineer. + + You should receive notifications. + You should receive notifications. + token info + You will be connected to group when the group host's device is online, please wait or check later! You will be connected to group when the group host's device is online, please wait or check later! @@ -9479,11 +9629,6 @@ Repeat connection request? months time unit - - mute - mute - No comment provided by engineer. - never never @@ -9710,11 +9855,6 @@ last received msg: %2$@ unknown status No comment provided by engineer. - - unmute - unmute - No comment provided by engineer. - unprotected unprotected 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 dd8790768a..86043e9fcf 100644 --- a/apps/ios/SimpleX Localizations/es.xcloc/Localized Contents/es.xliff +++ b/apps/ios/SimpleX Localizations/es.xcloc/Localized Contents/es.xliff @@ -14,6 +14,7 @@ + No comment provided by engineer. @@ -208,6 +209,7 @@ %d seconds(s) + %d segundos delete after time @@ -501,6 +503,7 @@ 1 year + Un año delete after time @@ -540,6 +543,14 @@ <p><a href="%@"> Conecta conmigo a través de SimpleX Chat</a></p> email text + + @%@ + No comment provided by engineer. + + + @'%@' + No comment provided by engineer. + A few more things Algunas cosas más @@ -640,6 +651,10 @@ Errores de confirmación No comment provided by engineer. + + Active + token status text + Active connections Conexiones activas @@ -657,6 +672,7 @@ Add list + Añadir lista No comment provided by engineer. @@ -686,6 +702,7 @@ Add to list + Añadir a la lista No comment provided by engineer. @@ -765,6 +782,7 @@ All + Todo No comment provided by engineer. @@ -779,6 +797,7 @@ All chats will be removed from the list (text), and the list deleted. + Todos los chats serán quitados de la lista (text) y esta será eliminada. alert message @@ -978,6 +997,7 @@ Another reason + Otro motivo report reason @@ -1007,6 +1027,7 @@ App group: + Grupo app: No comment provided by engineer. @@ -1056,6 +1077,7 @@ Archive + Archivar No comment provided by engineer. @@ -1070,10 +1092,12 @@ Archive report + Archivar informe No comment provided by engineer. Archive report? + ¿Archivar informe? No comment provided by engineer. @@ -1088,6 +1112,7 @@ Ask + Preguntar No comment provided by engineer. @@ -1312,6 +1337,7 @@ Businesses + Empresas No comment provided by engineer. @@ -1407,6 +1433,7 @@ Change automatic message deletion? + ¿Modificar la eliminación automática de mensajes? alert title @@ -1632,6 +1659,7 @@ Clear or delete group? + ¿Vaciar o eliminar grupo? No comment provided by engineer. @@ -1656,6 +1684,7 @@ Community guidelines violation + Violación de las normas de la comunidad report reason @@ -1773,6 +1802,10 @@ Confirmar subida No comment provided by engineer. + + Confirmed + token status text + Connect Conectar @@ -1894,6 +1927,7 @@ This is your own one-time link! Connection blocked + Conexión bloqueada No comment provided by engineer. @@ -1909,10 +1943,13 @@ This is your own one-time link! Connection is blocked by server operator: %@ + Conexión bloqueada por el operador del servidor: +%@ No comment provided by engineer. Connection not ready. + Conexión no establecida. No comment provided by engineer. @@ -1927,6 +1964,7 @@ This is your own one-time link! Connection requires encryption renegotiation. + La conexión requiere renegociar el cifrado. No comment provided by engineer. @@ -2011,6 +2049,7 @@ This is your own one-time link! Content violates conditions of use + El contenido viola las condiciones de uso blocking reason @@ -2090,6 +2129,7 @@ This is your own one-time link! Create list + Crear lista No comment provided by engineer. @@ -2353,6 +2393,7 @@ This is your own one-time link! Delete chat messages from your device. + Elimina los mensajes del dispositivo. No comment provided by engineer. @@ -2447,6 +2488,7 @@ This is your own one-time link! Delete list? + ¿Eliminar lista? alert title @@ -2461,7 +2503,7 @@ This is your own one-time link! Delete messages - Eliminar mensaje + Eliminar mensajes alert button @@ -2501,6 +2543,7 @@ This is your own one-time link! Delete report + Borrar informe No comment provided by engineer. @@ -2665,10 +2708,12 @@ This is your own one-time link! Disable automatic message deletion? + ¿Desactivar la eliminación automática de mensajes? alert title Disable delete messages + Desactivar alert button @@ -2763,6 +2808,7 @@ This is your own one-time link! Documents: + Documentos: No comment provided by engineer. @@ -2782,6 +2828,7 @@ This is your own one-time link! Done + Hecho No comment provided by engineer. @@ -3017,6 +3064,7 @@ This is your own one-time link! Encryption renegotiation in progress. + Renegociación de cifrado en curso. No comment provided by engineer. @@ -3129,6 +3177,10 @@ This is your own one-time link! ¡Error al cambiar a incógnito! No comment provided by engineer. + + Error checking token status + No comment provided by engineer. + Error connecting to forwarding server %@. Please try later. Error al conectar con el servidor de reenvío %@. Por favor, inténtalo más tarde. @@ -3151,6 +3203,7 @@ This is your own one-time link! Error creating list + Error al crear lista alert title @@ -3170,6 +3223,7 @@ This is your own one-time link! Error creating report + Error al crear informe No comment provided by engineer. @@ -3282,6 +3336,10 @@ This is your own one-time link! Error al reconectar con los servidores No comment provided by engineer. + + Error registering for notifications + alert title + Error removing member Error al eliminar miembro @@ -3289,6 +3347,7 @@ This is your own one-time link! Error reordering lists + Error al reorganizar listas alert title @@ -3303,6 +3362,7 @@ This is your own one-time link! Error saving chat list + Error al guardar listas alert title @@ -3385,6 +3445,10 @@ This is your own one-time link! Error al sincronizar conexión No comment provided by engineer. + + Error testing server connection + No comment provided by engineer. + Error updating group link Error al actualizar enlace de grupo @@ -3465,6 +3529,10 @@ This is your own one-time link! Expandir chat item action + + Expired + token status text + Export database Exportar base de datos @@ -3517,6 +3585,7 @@ This is your own one-time link! Favorites + Favoritos No comment provided by engineer. @@ -3534,6 +3603,8 @@ This is your own one-time link! File is blocked by server operator: (info.reason.text). + Archivo bloqueado por el operador del servidor +(info.reason.text). file error text @@ -3907,6 +3978,7 @@ Error: %2$@ Groups + Grupos No comment provided by engineer. @@ -3976,6 +4048,7 @@ Error: %2$@ How it works + Cómo funciona alert button @@ -4122,10 +4195,12 @@ More improvements are coming soon! Inappropriate content + Contenido inapropiado report reason Inappropriate profile + Perfil inapropiado report reason @@ -4220,6 +4295,26 @@ More improvements are coming soon! Colores del interfaz No comment provided by engineer. + + Invalid + token status text + + + Invalid (bad token) + token status text + + + Invalid (expired) + token status text + + + Invalid (unregistered) + token status text + + + Invalid (wrong topic) + token status text + Invalid QR code Código QR no válido @@ -4495,14 +4590,17 @@ This is your link for group %@! List + Lista swipe action List name and emoji should be different for all lists. + El nombre y el emoji deben ser diferentes en todas las listas. No comment provided by engineer. List name... + Nombre de la lista... No comment provided by engineer. @@ -4767,6 +4865,7 @@ This is your link for group %@! Messages in this chat will never be deleted. + Los mensajes de esta conversación nunca se borran. alert message @@ -4871,6 +4970,7 @@ This is your link for group %@! More + Más swipe action @@ -4901,7 +5001,11 @@ This is your link for group %@! Mute Silenciar - swipe action + notification label action + + + Mute all + notification label action Muted when inactive! @@ -4953,6 +5057,10 @@ This is your link for group %@! Estado de la red No comment provided by engineer. + + New + token status text + New Passcode Código Nuevo @@ -5045,14 +5153,17 @@ This is your link for group %@! No chats + Sin chats No comment provided by engineer. No chats found + Ningún chat encontrado No comment provided by engineer. No chats in list %@ + Sin chats en la lista %@ No comment provided by engineer. @@ -5160,8 +5271,13 @@ This is your link for group %@! Sin servidores para enviar archivos. servers error + + No token! + alert title + No unread chats + Ningún chat sin leer No comment provided by engineer. @@ -5176,6 +5292,7 @@ This is your link for group %@! Notes + Notas No comment provided by engineer. @@ -5198,11 +5315,19 @@ This is your link for group %@! ¡Las notificaciones están desactivadas! No comment provided by engineer. + + Notifications error + alert title + Notifications privacy Privacidad en las notificaciones No comment provided by engineer. + + Notifications status + alert title + Now admins can: - delete members' messages. @@ -5288,10 +5413,12 @@ Requiere activación de la VPN. Only sender and moderators see it + Solo el remitente y el moderador pueden verlo No comment provided by engineer. Only you and moderators see it + Solo tú y los moderadores podéis verlo No comment provided by engineer. @@ -5381,10 +5508,12 @@ Requiere activación de la VPN. Open link + Abrir enlace No comment provided by engineer. Open links from chat list + Abrir enlaces desde listado de chats No comment provided by engineer. @@ -5394,6 +5523,7 @@ Requiere activación de la VPN. Open web link? + ¿Abrir enlace web? No comment provided by engineer. @@ -5632,6 +5762,18 @@ Error: %@ Guarda la contraseña de forma segura, NO podrás cambiarla si la pierdes. No comment provided by engineer. + + Please try to disable and re-enable notfications. + token info + + + Please wait for token activation to complete. + token info + + + Please wait for token to be registered. + token info + Polish interface Interfaz en polaco @@ -5799,7 +5941,7 @@ Error: %@ Protect app screen - Proteger la pantalla de la aplicación + Proteger la pantalla No comment provided by engineer. @@ -6024,6 +6166,18 @@ Actívalo en ajustes de *Servidores y Redes*. Reducción del uso de batería No comment provided by engineer. + + Register + No comment provided by engineer. + + + Register notification token? + token info + + + Registered + token status text + Reject Rechazar @@ -6127,34 +6281,42 @@ Actívalo en ajustes de *Servidores y Redes*. Report + Informe chat item action Report content: only group moderators will see it. + Informar de contenido: sólo los moderadores del grupo lo verán. report reason Report member profile: only group moderators will see it. + Informar del perfil de un miembro: sólo los moderadores del grupo lo verán. report reason Report other: only group moderators will see it. + Informar de otros: sólo los moderadores del grupo lo verán. report reason Report reason? + ¿Motivo del informe? No comment provided by engineer. Report spam: only group moderators will see it. + Informar de spam: sólo los moderadores del grupo lo verán. report reason Report violation: only group moderators will see it. + Informar de violación: sólo los moderadores del grupo lo verán. report reason Reports + Informes No comment provided by engineer. @@ -6335,6 +6497,7 @@ Actívalo en ajustes de *Servidores y Redes*. Save list + Guardar lista No comment provided by engineer. @@ -6794,6 +6957,7 @@ Actívalo en ajustes de *Servidores y Redes*. Set chat name… + Nombre para el chat… No comment provided by engineer. @@ -7084,7 +7248,7 @@ Actívalo en ajustes de *Servidores y Redes*. Small groups (max 20) - Grupos pequeños (máx. 20) + Grupos pequeños (max. 20) No comment provided by engineer. @@ -7126,6 +7290,7 @@ Actívalo en ajustes de *Servidores y Redes*. Spam + Spam blocking reason report reason @@ -7216,6 +7381,7 @@ Actívalo en ajustes de *Servidores y Redes*. Storage + Almacenamiento No comment provided by engineer. @@ -7278,6 +7444,10 @@ Actívalo en ajustes de *Servidores y Redes*. Timeout de la conexión TCP No comment provided by engineer. + + TCP port for messaging + No comment provided by engineer. + TCP_KEEPCNT TCP_KEEPCNT @@ -7353,6 +7523,10 @@ Actívalo en ajustes de *Servidores y Redes*. Prueba no superada en el paso %@. server test failure + + Test notifications + No comment provided by engineer. + Test server Probar servidor @@ -7482,6 +7656,7 @@ Puede ocurrir por algún bug o cuando la conexión está comprometida. The report will be archived for you. + El informe será archivado para ti. No comment provided by engineer. @@ -7516,7 +7691,7 @@ Puede ocurrir por algún bug o cuando la conexión está comprometida. The servers for new files of your current chat profile **%@**. - Servidores para archivos nuevos en tu perfil **%@**. + Servidores para enviar archivos en tu perfil **%@**. No comment provided by engineer. @@ -7561,6 +7736,7 @@ Puede ocurrir por algún bug o cuando la conexión está comprometida. This action cannot be undone - the messages sent and received in this chat earlier than selected will be deleted. + Todos los mensajes previos a la selección serán eliminados del chat. ¡No podrá deshacerse! alert message @@ -7725,6 +7901,10 @@ Se te pedirá que completes la autenticación antes de activar esta función.Activa incógnito al conectar. No comment provided by engineer. + + Token status: %@. + token status + Toolbar opacity Opacidad barra @@ -7890,7 +8070,7 @@ Para conectarte pide a tu contacto que cree otro enlace y comprueba la conexión Unmute Activar audio - swipe action + notification label action Unread @@ -7924,7 +8104,7 @@ Para conectarte pide a tu contacto que cree otro enlace y comprueba la conexión Updating settings will re-connect the client to all servers. - Al actualizar la configuración el cliente se reconectará a todos los servidores. + Para actualizar la configuración el cliente se reconectará a todos los servidores. No comment provided by engineer. @@ -7982,6 +8162,10 @@ Para conectarte pide a tu contacto que cree otro enlace y comprueba la conexión ¿Usar servidores SimpleX Chat? No comment provided by engineer. + + Use TCP port %@ when no port is specified. + No comment provided by engineer. + Use chat Usar Chat @@ -8057,6 +8241,10 @@ Para conectarte pide a tu contacto que cree otro enlace y comprueba la conexión Usa la aplicación con una sola mano. No comment provided by engineer. + + Use web port + No comment provided by engineer. + User selection Selección de usuarios @@ -8339,6 +8527,7 @@ Para conectarte pide a tu contacto que cree otro enlace y comprueba la conexión Yes + Si No comment provided by engineer. @@ -8610,6 +8799,10 @@ Repeat connection request? Has enviado una invitación de grupo No comment provided by engineer. + + You should receive notifications. + token info + You will be connected to group when the group host's device is online, please wait or check later! Te conectarás al grupo cuando el dispositivo del anfitrión esté en línea, por favor espera o revisa más tarde. @@ -8877,6 +9070,7 @@ Repeat connection request? archived report + informes archivados No comment provided by engineer. @@ -9397,6 +9591,7 @@ Repeat connection request? moderator + moderador member role @@ -9404,11 +9599,6 @@ Repeat connection request? meses time unit - - mute - silenciar - No comment provided by engineer. - never nunca @@ -9635,11 +9825,6 @@ last received msg: %2$@ estado desconocido No comment provided by engineer. - - unmute - activar sonido - No comment provided by engineer. - unprotected con IP desprotegida 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 5a27563de3..2a4c3fb9ff 100644 --- a/apps/ios/SimpleX Localizations/fi.xcloc/Localized Contents/fi.xliff +++ b/apps/ios/SimpleX Localizations/fi.xcloc/Localized Contents/fi.xliff @@ -506,6 +506,14 @@ <p> <a href="%@"> Ollaan yhteydessä SimpleX Chatin kautta</a></p> email text + + @%@ + No comment provided by engineer. + + + @'%@' + No comment provided by engineer. + A few more things Muutama asia lisää @@ -600,6 +608,10 @@ Acknowledgement errors No comment provided by engineer. + + Active + token status text + Active connections No comment provided by engineer. @@ -1629,6 +1641,10 @@ Confirm upload No comment provided by engineer. + + Confirmed + token status text + Connect Yhdistä @@ -2884,6 +2900,10 @@ This is your own one-time link! Error changing to incognito! No comment provided by engineer. + + Error checking token status + No comment provided by engineer. + Error connecting to forwarding server %@. Please try later. No comment provided by engineer. @@ -3027,6 +3047,10 @@ This is your own one-time link! Error reconnecting servers No comment provided by engineer. + + Error registering for notifications + alert title + Error removing member Virhe poistettaessa jäsentä @@ -3124,6 +3148,10 @@ This is your own one-time link! Virhe yhteyden synkronoinnissa No comment provided by engineer. + + Error testing server connection + No comment provided by engineer. + Error updating group link Virhe ryhmälinkin päivittämisessä @@ -3198,6 +3226,10 @@ This is your own one-time link! Expand chat item action + + Expired + token status text + Export database Vie tietokanta @@ -3897,6 +3929,26 @@ More improvements are coming soon! Interface colors No comment provided by engineer. + + Invalid + token status text + + + Invalid (bad token) + token status text + + + Invalid (expired) + token status text + + + Invalid (unregistered) + token status text + + + Invalid (wrong topic) + token status text + Invalid QR code No comment provided by engineer. @@ -4523,7 +4575,11 @@ This is your link for group %@! Mute Mykistä - swipe action + notification label action + + + Mute all + notification label action Muted when inactive! @@ -4570,6 +4626,10 @@ This is your link for group %@! Verkon tila No comment provided by engineer. + + New + token status text + New Passcode Uusi pääsykoodi @@ -4758,6 +4818,10 @@ This is your link for group %@! No servers to send files. servers error + + No token! + alert title + No unread chats No comment provided by engineer. @@ -4793,10 +4857,18 @@ This is your link for group %@! Ilmoitukset on poistettu käytöstä! No comment provided by engineer. + + Notifications error + alert title + Notifications privacy No comment provided by engineer. + + Notifications status + alert title + Now admins can: - delete members' messages. @@ -5192,6 +5264,18 @@ Error: %@ Säilytä tunnuslause turvallisesti, ET voi muuttaa sitä, jos kadotat sen. No comment provided by engineer. + + Please try to disable and re-enable notfications. + token info + + + Please wait for token activation to complete. + token info + + + Please wait for token to be registered. + token info + Polish interface Puolalainen käyttöliittymä @@ -5551,6 +5635,18 @@ Enable in *Network & servers* settings. Pienempi akun käyttö No comment provided by engineer. + + Register + No comment provided by engineer. + + + Register notification token? + token info + + + Registered + token status text + Reject Hylkää @@ -6702,6 +6798,10 @@ Enable in *Network & servers* settings. TCP-yhteyden aikakatkaisu No comment provided by engineer. + + TCP port for messaging + No comment provided by engineer. + TCP_KEEPCNT TCP_KEEPCNT @@ -6771,6 +6871,10 @@ Enable in *Network & servers* settings. Testi epäonnistui vaiheessa %@. server test failure + + Test notifications + No comment provided by engineer. + Test server Testipalvelin @@ -7111,6 +7215,10 @@ Sinua kehotetaan suorittamaan todennus loppuun, ennen kuin tämä ominaisuus ote Toggle incognito when connecting. No comment provided by engineer. + + Token status: %@. + token status + Toolbar opacity No comment provided by engineer. @@ -7263,7 +7371,7 @@ Jos haluat muodostaa yhteyden, pyydä kontaktiasi luomaan toinen yhteyslinkki ja Unmute Poista mykistys - swipe action + notification label action Unread @@ -7346,6 +7454,10 @@ Jos haluat muodostaa yhteyden, pyydä kontaktiasi luomaan toinen yhteyslinkki ja Käytä SimpleX Chat palvelimia? No comment provided by engineer. + + Use TCP port %@ when no port is specified. + No comment provided by engineer. + Use chat Käytä chattia @@ -7412,6 +7524,10 @@ Jos haluat muodostaa yhteyden, pyydä kontaktiasi luomaan toinen yhteyslinkki ja Use the app with one hand. No comment provided by engineer. + + Use web port + No comment provided by engineer. + User selection No comment provided by engineer. @@ -7910,6 +8026,10 @@ Repeat connection request? Lähetit ryhmäkutsun No comment provided by engineer. + + You should receive notifications. + token info + You will be connected to group when the group host's device is online, please wait or check later! Sinut yhdistetään ryhmään, kun ryhmän isännän laite on online-tilassa, odota tai tarkista myöhemmin! @@ -8673,10 +8793,6 @@ Repeat connection request? kuukautta time unit - - mute - No comment provided by engineer. - never ei koskaan @@ -8883,10 +8999,6 @@ last received msg: %2$@ unknown status No comment provided by engineer. - - unmute - No comment provided by engineer. - unprotected No comment provided by engineer. diff --git a/apps/ios/SimpleX Localizations/fr.xcloc/Localized Contents/fr.xliff b/apps/ios/SimpleX Localizations/fr.xcloc/Localized Contents/fr.xliff index f0baecb04d..c030ccf98b 100644 --- a/apps/ios/SimpleX Localizations/fr.xcloc/Localized Contents/fr.xliff +++ b/apps/ios/SimpleX Localizations/fr.xcloc/Localized Contents/fr.xliff @@ -540,6 +540,14 @@ <p><a href="%@">Contactez-moi via SimpleX Chat</a></p> email text + + @%@ + No comment provided by engineer. + + + @'%@' + No comment provided by engineer. + A few more things Encore quelques points @@ -640,6 +648,10 @@ Erreur d'accusé de réception No comment provided by engineer. + + Active + token status text + Active connections Connections actives @@ -1773,6 +1785,10 @@ Confirmer la transmission No comment provided by engineer. + + Confirmed + token status text + Connect Se connecter @@ -3129,6 +3145,10 @@ Il s'agit de votre propre lien unique ! Erreur lors du passage en mode incognito ! No comment provided by engineer. + + Error checking token status + No comment provided by engineer. + Error connecting to forwarding server %@. Please try later. Erreur de connexion au serveur de redirection %@. Veuillez réessayer plus tard. @@ -3282,6 +3302,10 @@ Il s'agit de votre propre lien unique ! Erreur de reconnexion des serveurs No comment provided by engineer. + + Error registering for notifications + alert title + Error removing member Erreur lors de la suppression d'un membre @@ -3385,6 +3409,10 @@ Il s'agit de votre propre lien unique ! Erreur de synchronisation de connexion No comment provided by engineer. + + Error testing server connection + No comment provided by engineer. + Error updating group link Erreur lors de la mise à jour du lien de groupe @@ -3465,6 +3493,10 @@ Il s'agit de votre propre lien unique ! Étendre chat item action + + Expired + token status text + Export database Exporter la base de données @@ -4220,6 +4252,26 @@ D'autres améliorations sont à venir ! Couleurs d'interface No comment provided by engineer. + + Invalid + token status text + + + Invalid (bad token) + token status text + + + Invalid (expired) + token status text + + + Invalid (unregistered) + token status text + + + Invalid (wrong topic) + token status text + Invalid QR code Code QR invalide @@ -4901,7 +4953,11 @@ Voici votre lien pour le groupe %@ ! Mute Muet - swipe action + notification label action + + + Mute all + notification label action Muted when inactive! @@ -4953,6 +5009,10 @@ Voici votre lien pour le groupe %@ ! État du réseau No comment provided by engineer. + + New + token status text + New Passcode Nouveau code d'accès @@ -5160,6 +5220,10 @@ Voici votre lien pour le groupe %@ ! Pas de serveurs pour envoyer des fichiers. servers error + + No token! + alert title + No unread chats No comment provided by engineer. @@ -5198,11 +5262,19 @@ Voici votre lien pour le groupe %@ ! Les notifications sont désactivées ! No comment provided by engineer. + + Notifications error + alert title + Notifications privacy Notifications sécurisées No comment provided by engineer. + + Notifications status + alert title + Now admins can: - delete members' messages. @@ -5632,6 +5704,18 @@ Erreur : %@ Veuillez conserver votre phrase secrète en lieu sûr, vous NE pourrez PAS la changer si vous la perdez. No comment provided by engineer. + + Please try to disable and re-enable notfications. + token info + + + Please wait for token activation to complete. + token info + + + Please wait for token to be registered. + token info + Polish interface Interface en polonais @@ -6024,6 +6108,18 @@ Activez-le dans les paramètres *Réseau et serveurs*. Réduction de la consommation de batterie No comment provided by engineer. + + Register + No comment provided by engineer. + + + Register notification token? + token info + + + Registered + token status text + Reject Rejeter @@ -7278,6 +7374,10 @@ Activez-le dans les paramètres *Réseau et serveurs*. Délai de connexion TCP No comment provided by engineer. + + TCP port for messaging + No comment provided by engineer. + TCP_KEEPCNT TCP_KEEPCNT @@ -7353,6 +7453,10 @@ Activez-le dans les paramètres *Réseau et serveurs*. Échec du test à l'étape %@. server test failure + + Test notifications + No comment provided by engineer. + Test server Tester le serveur @@ -7725,6 +7829,10 @@ Vous serez invité à confirmer l'authentification avant que cette fonction ne s Basculer en mode incognito lors de la connexion. No comment provided by engineer. + + Token status: %@. + token status + Toolbar opacity Opacité de la barre d'outils @@ -7890,7 +7998,7 @@ Pour vous connecter, veuillez demander à votre contact de créer un autre lien Unmute Démute - swipe action + notification label action Unread @@ -7982,6 +8090,10 @@ Pour vous connecter, veuillez demander à votre contact de créer un autre lien Utiliser les serveurs SimpleX Chat ? No comment provided by engineer. + + Use TCP port %@ when no port is specified. + No comment provided by engineer. + Use chat Utiliser le chat @@ -8057,6 +8169,10 @@ Pour vous connecter, veuillez demander à votre contact de créer un autre lien Utiliser l'application d'une main. No comment provided by engineer. + + Use web port + No comment provided by engineer. + User selection Sélection de l'utilisateur @@ -8610,6 +8726,10 @@ Répéter la demande de connexion ? Vous avez envoyé une invitation de groupe No comment provided by engineer. + + You should receive notifications. + token info + You will be connected to group when the group host's device is online, please wait or check later! Vous serez connecté·e au groupe lorsque l'appareil de l'hôte sera en ligne, veuillez attendre ou vérifier plus tard ! @@ -9404,11 +9524,6 @@ Répéter la demande de connexion ? mois time unit - - mute - muet - No comment provided by engineer. - never jamais @@ -9635,11 +9750,6 @@ dernier message reçu : %2$@ statut inconnu No comment provided by engineer. - - unmute - démuter - No comment provided by engineer. - unprotected non protégé diff --git a/apps/ios/SimpleX Localizations/hr.xcloc/Localized Contents/hr.xliff b/apps/ios/SimpleX Localizations/hr.xcloc/Localized Contents/hr.xliff index 286533d5fe..bdb3083f5a 100644 --- a/apps/ios/SimpleX Localizations/hr.xcloc/Localized Contents/hr.xliff +++ b/apps/ios/SimpleX Localizations/hr.xcloc/Localized Contents/hr.xliff @@ -1693,12 +1693,14 @@ We will be adding server redundancy to prevent lost messages. Live message! No comment provided by engineer. - + Live messages + Žive poruke No comment provided by engineer. - + Local name + Lokalno ime No comment provided by engineer. @@ -3715,6 +3717,14 @@ SimpleX servers cannot see your profile. Immediately Odmah + + Address settings + Podešavanje adrese + + + Admins can block a member for all. + Administratori mogu da blokiraju + diff --git a/apps/ios/SimpleX Localizations/hu.xcloc/Localized Contents/hu.xliff b/apps/ios/SimpleX Localizations/hu.xcloc/Localized Contents/hu.xliff index 49f863e810..5b212638e7 100644 --- a/apps/ios/SimpleX Localizations/hu.xcloc/Localized Contents/hu.xliff +++ b/apps/ios/SimpleX Localizations/hu.xcloc/Localized Contents/hu.xliff @@ -14,6 +14,7 @@ + No comment provided by engineer. @@ -208,6 +209,7 @@ %d seconds(s) + %d másodperc delete after time @@ -451,7 +453,7 @@ - voice messages up to 5 minutes. - custom time to disappear. - editing history. - - 5 perc hosszúságú hangüzenetek. + - legfeljebb 5 perc hosszúságú hangüzenetek. - egyedi üzenet-eltűnési időkorlát. - előzmények szerkesztése. No comment provided by engineer. @@ -501,6 +503,7 @@ 1 year + 1 év delete after time @@ -540,6 +543,14 @@ <p><a href="%@">Csatlakozzon hozzám a SimpleX Chaten keresztül</a></p> email text + + @%@ + No comment provided by engineer. + + + @'%@' + No comment provided by engineer. + A few more things Néhány további dolog @@ -640,6 +651,10 @@ Visszaigazolási hibák No comment provided by engineer. + + Active + token status text + Active connections Aktív kapcsolatok száma @@ -657,6 +672,7 @@ Add list + Lista hozzáadása No comment provided by engineer. @@ -686,6 +702,7 @@ Add to list + Hozzáadás listához No comment provided by engineer. @@ -765,6 +782,7 @@ All + Összes No comment provided by engineer. @@ -779,6 +797,7 @@ All chats will be removed from the list (text), and the list deleted. + Az összes csevegés el lesz távolítva a(z) (text) nevű listáról, és a lista is törölve lesz. alert message @@ -978,6 +997,7 @@ Another reason + Egyéb indoklás report reason @@ -1007,6 +1027,7 @@ App group: + Alkalmazáscsoport: No comment provided by engineer. @@ -1031,12 +1052,12 @@ App version - Alkalmazás verzió + Az alkalmazás verziója No comment provided by engineer. App version: v%@ - Alkalmazás verzió: v%@ + Az alkalmazás verziója: v%@ No comment provided by engineer. @@ -1056,6 +1077,7 @@ Archive + Archívum No comment provided by engineer. @@ -1070,10 +1092,12 @@ Archive report + Jelentés archiválása No comment provided by engineer. Archive report? + Jelentés archiválása? No comment provided by engineer. @@ -1088,6 +1112,7 @@ Ask + Mindig kérdezzen rá No comment provided by engineer. @@ -1177,7 +1202,7 @@ Bad message hash - Érvénytelen az üzenet hasító-értéke + Érvénytelen az üzenet hasítóértéke No comment provided by engineer. @@ -1312,6 +1337,7 @@ Businesses + Üzleti No comment provided by engineer. @@ -1407,6 +1433,7 @@ Change automatic message deletion? + Automatikus üzenettörlés módosítása? alert title @@ -1632,6 +1659,7 @@ Clear or delete group? + Csoport kiürítése vagy törlése? No comment provided by engineer. @@ -1656,6 +1684,7 @@ Community guidelines violation + Közösségi irányelvek megsértése report reason @@ -1773,6 +1802,10 @@ Feltöltés megerősítése No comment provided by engineer. + + Confirmed + token status text + Connect Kapcsolódás @@ -1894,6 +1927,7 @@ Ez az Ön egyszer használható meghívó-hivatkozása! Connection blocked + A kapcsolat le van tiltva No comment provided by engineer. @@ -1909,10 +1943,13 @@ Ez az Ön egyszer használható meghívó-hivatkozása! Connection is blocked by server operator: %@ + A kiszolgáló üzemeltetője letiltotta a kapcsolatot: +%@ No comment provided by engineer. Connection not ready. + A kapcsolat nem áll készen. No comment provided by engineer. @@ -1927,6 +1964,7 @@ Ez az Ön egyszer használható meghívó-hivatkozása! Connection requires encryption renegotiation. + A kapcsolat titkosítása újraegyeztetést igényel. No comment provided by engineer. @@ -1991,7 +2029,7 @@ Ez az Ön egyszer használható meghívó-hivatkozása! Contact preferences - Ismerős beállításai + Ismerős-beállítások No comment provided by engineer. @@ -2011,6 +2049,7 @@ Ez az Ön egyszer használható meghívó-hivatkozása! Content violates conditions of use + A tartalom sérti a használati feltételeket blocking reason @@ -2090,6 +2129,7 @@ Ez az Ön egyszer használható meghívó-hivatkozása! Create list + Lista létrehozása No comment provided by engineer. @@ -2353,6 +2393,7 @@ Ez az Ön egyszer használható meghívó-hivatkozása! Delete chat messages from your device. + Csevegési üzenetek törlése az Ön eszközéről. No comment provided by engineer. @@ -2447,6 +2488,7 @@ Ez az Ön egyszer használható meghívó-hivatkozása! Delete list? + Lista törlése? alert title @@ -2501,6 +2543,7 @@ Ez az Ön egyszer használható meghívó-hivatkozása! Delete report + Jelentés törlése No comment provided by engineer. @@ -2665,10 +2708,12 @@ Ez az Ön egyszer használható meghívó-hivatkozása! Disable automatic message deletion? + Automatikus üzenettörlés letiltása? alert title Disable delete messages + Üzenetek törlésének letiltása alert button @@ -2763,6 +2808,7 @@ Ez az Ön egyszer használható meghívó-hivatkozása! Documents: + Dokumentumok: No comment provided by engineer. @@ -2782,6 +2828,7 @@ Ez az Ön egyszer használható meghívó-hivatkozása! Done + Kész No comment provided by engineer. @@ -3017,6 +3064,7 @@ Ez az Ön egyszer használható meghívó-hivatkozása! Encryption renegotiation in progress. + A titkosítás újraegyeztetése folyamatban van. No comment provided by engineer. @@ -3129,6 +3177,10 @@ Ez az Ön egyszer használható meghívó-hivatkozása! Hiba az inkognitóprofilra való váltáskor! No comment provided by engineer. + + Error checking token status + No comment provided by engineer. + Error connecting to forwarding server %@. Please try later. Hiba a(z) %@ továbbító kiszolgálóhoz való kapcsolódáskor. Próbálja meg később. @@ -3151,6 +3203,7 @@ Ez az Ön egyszer használható meghívó-hivatkozása! Error creating list + Hiba a lista létrehozásakor alert title @@ -3170,6 +3223,7 @@ Ez az Ön egyszer használható meghívó-hivatkozása! Error creating report + Hiba a jelentés létrehozásakor No comment provided by engineer. @@ -3282,6 +3336,10 @@ Ez az Ön egyszer használható meghívó-hivatkozása! Hiba a kiszolgálókhoz való újrakapcsolódáskor No comment provided by engineer. + + Error registering for notifications + alert title + Error removing member Hiba a tag eltávolításakor @@ -3289,6 +3347,7 @@ Ez az Ön egyszer használható meghívó-hivatkozása! Error reordering lists + Hiba a listák újrarendezésekor alert title @@ -3303,6 +3362,7 @@ Ez az Ön egyszer használható meghívó-hivatkozása! Error saving chat list + Hiba a csevegési lista mentésekor alert title @@ -3385,6 +3445,10 @@ Ez az Ön egyszer használható meghívó-hivatkozása! Hiba a kapcsolat szinkronizálásakor No comment provided by engineer. + + Error testing server connection + No comment provided by engineer. + Error updating group link Hiba a csoporthivatkozás frissítésekor @@ -3465,6 +3529,10 @@ Ez az Ön egyszer használható meghívó-hivatkozása! Kibontás chat item action + + Expired + token status text + Export database Adatbázis exportálása @@ -3517,6 +3585,7 @@ Ez az Ön egyszer használható meghívó-hivatkozása! Favorites + Kedvencek No comment provided by engineer. @@ -3534,6 +3603,8 @@ Ez az Ön egyszer használható meghívó-hivatkozása! File is blocked by server operator: (info.reason.text). + A kiszolgáló üzemeltetője letiltotta a fájlt: +(info.reason.text). file error text @@ -3877,7 +3948,7 @@ Hiba: %2$@ Group preferences - Csoportbeállítások + Csoport-beállítások No comment provided by engineer. @@ -3907,6 +3978,7 @@ Hiba: %2$@ Groups + Csoportok No comment provided by engineer. @@ -3976,6 +4048,7 @@ Hiba: %2$@ How it works + Hogyan működik alert button @@ -4122,10 +4195,12 @@ További fejlesztések hamarosan! Inappropriate content + Kifogásolt tartalom report reason Inappropriate profile + Kifogásolt profil report reason @@ -4220,6 +4295,26 @@ További fejlesztések hamarosan! Kezelőfelület színei No comment provided by engineer. + + Invalid + token status text + + + Invalid (bad token) + token status text + + + Invalid (expired) + token status text + + + Invalid (unregistered) + token status text + + + Invalid (wrong topic) + token status text + Invalid QR code Érvénytelen QR-kód @@ -4495,14 +4590,17 @@ Ez az Ön hivatkozása a(z) %@ nevű csoporthoz! List + Lista swipe action List name and emoji should be different for all lists. + Az összes lista nevének és emodzsiának különbözőnek kell lennie. No comment provided by engineer. List name... + Listanév… No comment provided by engineer. @@ -4767,6 +4865,7 @@ Ez az Ön hivatkozása a(z) %@ nevű csoporthoz! Messages in this chat will never be deleted. + Az ebben a csevegésben lévő üzenetek soha nem lesznek törölve. alert message @@ -4871,6 +4970,7 @@ Ez az Ön hivatkozása a(z) %@ nevű csoporthoz! More + Továbbiak swipe action @@ -4901,7 +5001,11 @@ Ez az Ön hivatkozása a(z) %@ nevű csoporthoz! Mute Némítás - swipe action + notification label action + + + Mute all + notification label action Muted when inactive! @@ -4953,6 +5057,10 @@ Ez az Ön hivatkozása a(z) %@ nevű csoporthoz! Hálózat állapota No comment provided by engineer. + + New + token status text + New Passcode Új jelkód @@ -5045,19 +5153,22 @@ Ez az Ön hivatkozása a(z) %@ nevű csoporthoz! No chats + Nincsenek csevegések No comment provided by engineer. No chats found + Nem találhatók csevegések No comment provided by engineer. No chats in list %@ + Nincsenek csevegések a(z) %@ nevű listában No comment provided by engineer. No contacts selected - Nincs kijelölve ismerős + Nincs ismerős kijelölve No comment provided by engineer. @@ -5160,8 +5271,13 @@ Ez az Ön hivatkozása a(z) %@ nevű csoporthoz! Nincsenek fájlküldő-kiszolgálók. servers error + + No token! + alert title + No unread chats + Nincsenek olvasatlan csevegések No comment provided by engineer. @@ -5176,11 +5292,12 @@ Ez az Ön hivatkozása a(z) %@ nevű csoporthoz! Notes + Jegyzetek No comment provided by engineer. Nothing selected - Nincs kijelölve semmi + Nincs semmi kijelölve No comment provided by engineer. @@ -5198,11 +5315,19 @@ Ez az Ön hivatkozása a(z) %@ nevű csoporthoz! Az értesítések le vannak tiltva! No comment provided by engineer. + + Notifications error + alert title + Notifications privacy Értesítési adatvédelem No comment provided by engineer. + + Notifications status + alert title + Now admins can: - delete members' messages. @@ -5273,25 +5398,27 @@ VPN engedélyezése szükséges. Only group owners can change group preferences. - Csak a csoporttulajdonosok változtathatják meg a csoportbeállításokat. + Csak a csoport-tulajdonosok változtathatják meg a csoport-beállításokat. No comment provided by engineer. Only group owners can enable files and media. - Csak a csoporttulajdonosok engedélyezhetik a fájlok- és a médiatartalmak küldését. + Csak a csoport-tulajdonosok engedélyezhetik a fájlok- és a médiatartalmak küldését. No comment provided by engineer. Only group owners can enable voice messages. - Csak a csoporttulajdonosok engedélyezhetik a hangüzenetek küldését. + Csak a csoport-tulajdonosok engedélyezhetik a hangüzenetek küldését. No comment provided by engineer. Only sender and moderators see it + Csak a küldő és a moderátorok látják No comment provided by engineer. Only you and moderators see it + Csak Ön és a moderátorok látják No comment provided by engineer. @@ -5366,7 +5493,7 @@ VPN engedélyezése szükséges. Open chat console - Csevegés konzol megnyitása + Csevegési konzol megnyitása authentication reason @@ -5381,10 +5508,12 @@ VPN engedélyezése szükséges. Open link + Hivatkozás megnyitása No comment provided by engineer. Open links from chat list + Hivatkozás megnyitása a csevegési listából No comment provided by engineer. @@ -5394,6 +5523,7 @@ VPN engedélyezése szükséges. Open web link? + Webhivatkozás megnyitása? No comment provided by engineer. @@ -5632,6 +5762,18 @@ Hiba: %@ Tárolja el biztonságosan jelmondatát, mert ha elveszíti azt, NEM tudja megváltoztatni. No comment provided by engineer. + + Please try to disable and re-enable notfications. + token info + + + Please wait for token activation to complete. + token info + + + Please wait for token to be registered. + token info + Polish interface Lengyel kezelőfelület @@ -5805,7 +5947,7 @@ Hiba: %@ Protect your IP address from the messaging relays chosen by your contacts. Enable in *Network & servers* settings. - Védje IP-címét az ismerősei által kiválasztott üzenet-továbbító-kiszolgálókkal szemben. + Védje IP-címét az ismerősei által kiválasztott üzenetváltó-továbbító-kiszolgálókkal szemben. Engedélyezze a „Beállítások -> Hálózat és kiszolgálók” menüben. No comment provided by engineer. @@ -6024,6 +6166,18 @@ Engedélyezze a „Beállítások -> Hálózat és kiszolgálók” menüben. Csökkentett akkumulátor-használat No comment provided by engineer. + + Register + No comment provided by engineer. + + + Register notification token? + token info + + + Registered + token status text + Reject Elutasítás @@ -6127,34 +6281,42 @@ Engedélyezze a „Beállítások -> Hálózat és kiszolgálók” menüben. Report + Jelentés chat item action Report content: only group moderators will see it. + Tartalom jelentése: csak a csoport moderátorai látják. report reason Report member profile: only group moderators will see it. + Tag profiljának jelentése: csak a csoport moderátorai látják. report reason Report other: only group moderators will see it. + Egyéb jelentés: csak a csoport moderátorai látják. report reason Report reason? + Jelentés indoklása? No comment provided by engineer. Report spam: only group moderators will see it. + Kéretlen tartalom jelentése: csak a csoport moderátorai látják. report reason Report violation: only group moderators will see it. + Szabálysértés jelentése: csak a csoport moderátorai látják. report reason Reports + Jelentések No comment provided by engineer. @@ -6335,6 +6497,7 @@ Engedélyezze a „Beállítások -> Hálózat és kiszolgálók” menüben. Save list + Lista mentése No comment provided by engineer. @@ -6594,7 +6757,7 @@ Engedélyezze a „Beállítások -> Hálózat és kiszolgálók” menüben. Send up to 100 last messages to new members. - Az utolsó 100 üzenet elküldése az új tagoknak. + Legfeljebb az utolsó 100 üzenet elküldése az új tagok számára. No comment provided by engineer. @@ -6694,7 +6857,7 @@ Engedélyezze a „Beállítások -> Hálózat és kiszolgálók” menüben. Sent via proxy - Proxyn keresztül küldve + Proxyn keresztül küldött No comment provided by engineer. @@ -6794,6 +6957,7 @@ Engedélyezze a „Beállítások -> Hálózat és kiszolgálók” menüben. Set chat name… + Csevegés nevének beállítása… No comment provided by engineer. @@ -6808,7 +6972,7 @@ Engedélyezze a „Beállítások -> Hálózat és kiszolgálók” menüben. Set group preferences - Csoportbeállítások megadása + Csoport-beállítások megadása No comment provided by engineer. @@ -7126,6 +7290,7 @@ Engedélyezze a „Beállítások -> Hálózat és kiszolgálók” menüben. Spam + Kéretlen tartalom blocking reason report reason @@ -7216,6 +7381,7 @@ Engedélyezze a „Beállítások -> Hálózat és kiszolgálók” menüben. Storage + Tárhely No comment provided by engineer. @@ -7278,6 +7444,10 @@ Engedélyezze a „Beállítások -> Hálózat és kiszolgálók” menüben. TCP kapcsolat időtúllépése No comment provided by engineer. + + TCP port for messaging + No comment provided by engineer. + TCP_KEEPCNT TCP_KEEPCNT @@ -7353,6 +7523,10 @@ Engedélyezze a „Beállítások -> Hálózat és kiszolgálók” menüben. A teszt sikertelen volt a(z) %@ lépésnél. server test failure + + Test notifications + No comment provided by engineer. + Test server Kiszolgáló tesztelése @@ -7442,12 +7616,12 @@ Ez valamilyen hiba vagy sérült kapcsolat esetén fordulhat elő. The future of messaging - A privát üzenetküldés következő generációja + Az üzenetváltás jövője No comment provided by engineer. The hash of the previous message is different. - Az előző üzenet hasító értéke különbözik. + Az előző üzenet hasítóértéke különbözik. No comment provided by engineer. @@ -7482,6 +7656,7 @@ Ez valamilyen hiba vagy sérült kapcsolat esetén fordulhat elő. The report will be archived for you. + A jelentés archiválva lesz az Ön számára. No comment provided by engineer. @@ -7546,7 +7721,7 @@ Ez valamilyen hiba vagy sérült kapcsolat esetén fordulhat elő. They can be overridden in contact and group settings. - Ezek felülbírálhatók az ismerős- és csoportbeállításokban. + Ezek felülbírálhatók az ismerős- és csoport-beállításokban. No comment provided by engineer. @@ -7561,6 +7736,7 @@ Ez valamilyen hiba vagy sérült kapcsolat esetén fordulhat elő. This action cannot be undone - the messages sent and received in this chat earlier than selected will be deleted. + Ez a művelet nem vonható vissza – a kijelölt üzenettől korábban küldött és fogadott üzenetek törölve lesznek a csevegésből. alert message @@ -7725,6 +7901,10 @@ A funkció bekapcsolása előtt a rendszer felszólítja a képernyőzár beáll Inkognitóra váltás kapcsolódáskor. No comment provided by engineer. + + Token status: %@. + token status + Toolbar opacity Eszköztár átlátszatlansága @@ -7890,7 +8070,7 @@ A kapcsolódáshoz kérje meg az ismerősét, hogy hozzon létre egy másik kapc Unmute Némítás megszüntetése - swipe action + notification label action Unread @@ -7982,9 +8162,13 @@ A kapcsolódáshoz kérje meg az ismerősét, hogy hozzon létre egy másik kapc SimpleX Chat-kiszolgálók használata? No comment provided by engineer. + + Use TCP port %@ when no port is specified. + No comment provided by engineer. + Use chat - Csevegés használata + Simplex Chat használata No comment provided by engineer. @@ -8057,6 +8241,10 @@ A kapcsolódáshoz kérje meg az ismerősét, hogy hozzon létre egy másik kapc Használja az alkalmazást egy kézzel. No comment provided by engineer. + + Use web port + No comment provided by engineer. + User selection Felhasználó kijelölése @@ -8134,7 +8322,7 @@ A kapcsolódáshoz kérje meg az ismerősét, hogy hozzon létre egy másik kapc Videos and files up to 1gb - Videók és fájlok 1Gb méretig + Videók és fájlok legfeljebb 1GB méretig No comment provided by engineer. @@ -8339,6 +8527,7 @@ A kapcsolódáshoz kérje meg az ismerősét, hogy hozzon létre egy másik kapc Yes + Igen No comment provided by engineer. @@ -8610,6 +8799,10 @@ Kapcsolatkérés megismétlése? Csoportmeghívó elküldve No comment provided by engineer. + + You should receive notifications. + token info + You will be connected to group when the group host's device is online, please wait or check later! Akkor lesz kapcsolódva a csoporthoz, amikor a csoport tulajdonosának eszköze online lesz, várjon, vagy ellenőrizze később! @@ -8877,6 +9070,7 @@ Kapcsolatkérés megismétlése? archived report + archivált jelentés No comment provided by engineer. @@ -8901,7 +9095,7 @@ Kapcsolatkérés megismétlése? bad message hash - érvénytelen az üzenet hasító-értéke + érvénytelen az üzenet hasítóértéke integrity error chat item @@ -9071,7 +9265,7 @@ Kapcsolatkérés megismétlése? database version is newer than the app, but no down migration for: %@ - az adatbázis verziója újabb, mint az alkalmazásé, de nincs visszafelé átköltöztetés a következőhöz: %@ + az adatbázis verziója újabb, mint az alkalmazásé, de a visszafelé történő átköltöztetés viszont nem lehetséges a következőhöz: %@ No comment provided by engineer. @@ -9397,6 +9591,7 @@ Kapcsolatkérés megismétlése? moderator + moderátor member role @@ -9404,11 +9599,6 @@ Kapcsolatkérés megismétlése? hónap time unit - - mute - némítás - No comment provided by engineer. - never soha @@ -9635,11 +9825,6 @@ utoljára fogadott üzenet: %2$@ ismeretlen állapot No comment provided by engineer. - - unmute - némítás megszüntetése - No comment provided by engineer. - unprotected nem védett @@ -9667,7 +9852,7 @@ utoljára fogadott üzenet: %2$@ via contact address link - a kapcsolattartási cím-hivatkozáson keresztül + a kapcsolattartási címhivatkozáson keresztül chat list item description diff --git a/apps/ios/SimpleX Localizations/it.xcloc/Localized Contents/it.xliff b/apps/ios/SimpleX Localizations/it.xcloc/Localized Contents/it.xliff index fce4c9f6ac..2492edc626 100644 --- a/apps/ios/SimpleX Localizations/it.xcloc/Localized Contents/it.xliff +++ b/apps/ios/SimpleX Localizations/it.xcloc/Localized Contents/it.xliff @@ -14,6 +14,7 @@ + No comment provided by engineer. @@ -208,6 +209,7 @@ %d seconds(s) + %d secondo/i delete after time @@ -501,6 +503,7 @@ 1 year + 1 anno delete after time @@ -540,6 +543,14 @@ <p><a href="%@">Connettiti a me via SimpleX Chat</a></p> email text + + @%@ + No comment provided by engineer. + + + @'%@' + No comment provided by engineer. + A few more things Qualche altra cosa @@ -640,6 +651,10 @@ Errori di riconoscimento No comment provided by engineer. + + Active + token status text + Active connections Connessioni attive @@ -657,6 +672,7 @@ Add list + Aggiungi elenco No comment provided by engineer. @@ -686,6 +702,7 @@ Add to list + Aggiungi ad un elenco No comment provided by engineer. @@ -765,6 +782,7 @@ All + Tutte No comment provided by engineer. @@ -779,6 +797,7 @@ All chats will be removed from the list (text), and the list deleted. + Tutte le chat verranno rimosse dall'elenco (testo) e l'elenco eliminato. alert message @@ -978,6 +997,7 @@ Another reason + Altro motivo report reason @@ -1007,6 +1027,7 @@ App group: + Gruppo app: No comment provided by engineer. @@ -1056,6 +1077,7 @@ Archive + Archivia No comment provided by engineer. @@ -1070,10 +1092,12 @@ Archive report + Archivia la segnalazione No comment provided by engineer. Archive report? + Archiviare la segnalazione? No comment provided by engineer. @@ -1088,6 +1112,7 @@ Ask + Chiedi No comment provided by engineer. @@ -1312,6 +1337,7 @@ Businesses + Lavorative No comment provided by engineer. @@ -1407,6 +1433,7 @@ Change automatic message deletion? + Cambiare l'eliminazione automatica dei messaggi? alert title @@ -1632,6 +1659,7 @@ Clear or delete group? + Svuotare o eliminare il gruppo? No comment provided by engineer. @@ -1656,6 +1684,7 @@ Community guidelines violation + Violazione delle linee guida della comunità report reason @@ -1773,6 +1802,10 @@ Conferma caricamento No comment provided by engineer. + + Confirmed + token status text + Connect Connetti @@ -1894,6 +1927,7 @@ Questo è il tuo link una tantum! Connection blocked + Connessione bloccata No comment provided by engineer. @@ -1909,10 +1943,13 @@ Questo è il tuo link una tantum! Connection is blocked by server operator: %@ + La connessione è bloccata dall'operatore del server: +%@ No comment provided by engineer. Connection not ready. + Connessione non pronta. No comment provided by engineer. @@ -1927,6 +1964,7 @@ Questo è il tuo link una tantum! Connection requires encryption renegotiation. + La connessione richiede la rinegoziazione della crittografia. No comment provided by engineer. @@ -2011,6 +2049,7 @@ Questo è il tuo link una tantum! Content violates conditions of use + Il contenuto viola le condizioni di utilizzo blocking reason @@ -2090,6 +2129,7 @@ Questo è il tuo link una tantum! Create list + Crea elenco No comment provided by engineer. @@ -2353,6 +2393,7 @@ Questo è il tuo link una tantum! Delete chat messages from your device. + Elimina i messaggi di chat dal tuo dispositivo. No comment provided by engineer. @@ -2447,6 +2488,7 @@ Questo è il tuo link una tantum! Delete list? + Eliminare l'elenco? alert title @@ -2501,6 +2543,7 @@ Questo è il tuo link una tantum! Delete report + Elimina la segnalazione No comment provided by engineer. @@ -2665,10 +2708,12 @@ Questo è il tuo link una tantum! Disable automatic message deletion? + Disattivare l'eliminazione automatica dei messaggi? alert title Disable delete messages + Disattiva eliminazione messaggi alert button @@ -2763,6 +2808,7 @@ Questo è il tuo link una tantum! Documents: + Documenti: No comment provided by engineer. @@ -2782,6 +2828,7 @@ Questo è il tuo link una tantum! Done + Fatto No comment provided by engineer. @@ -3017,6 +3064,7 @@ Questo è il tuo link una tantum! Encryption renegotiation in progress. + Rinegoziazione della crittografia in corso. No comment provided by engineer. @@ -3129,6 +3177,10 @@ Questo è il tuo link una tantum! Errore nel passaggio a incognito! No comment provided by engineer. + + Error checking token status + No comment provided by engineer. + Error connecting to forwarding server %@. Please try later. Errore di connessione al server di inoltro %@. Riprova più tardi. @@ -3151,6 +3203,7 @@ Questo è il tuo link una tantum! Error creating list + Errore nella creazione dell'elenco alert title @@ -3170,6 +3223,7 @@ Questo è il tuo link una tantum! Error creating report + Errore nella creazione del resoconto No comment provided by engineer. @@ -3282,6 +3336,10 @@ Questo è il tuo link una tantum! Errore di riconnessione ai server No comment provided by engineer. + + Error registering for notifications + alert title + Error removing member Errore nella rimozione del membro @@ -3289,6 +3347,7 @@ Questo è il tuo link una tantum! Error reordering lists + Errore riordinando gli elenchi alert title @@ -3303,6 +3362,7 @@ Questo è il tuo link una tantum! Error saving chat list + Errore nel salvataggio dell'elenco di chat alert title @@ -3385,6 +3445,10 @@ Questo è il tuo link una tantum! Errore nella sincronizzazione della connessione No comment provided by engineer. + + Error testing server connection + No comment provided by engineer. + Error updating group link Errore nell'aggiornamento del link del gruppo @@ -3465,6 +3529,10 @@ Questo è il tuo link una tantum! Espandi chat item action + + Expired + token status text + Export database Esporta database @@ -3517,6 +3585,7 @@ Questo è il tuo link una tantum! Favorites + Preferite No comment provided by engineer. @@ -3534,6 +3603,8 @@ Questo è il tuo link una tantum! File is blocked by server operator: (info.reason.text). + Il file è bloccato dall'operatore del server: +(info.reason.text). file error text @@ -3907,6 +3978,7 @@ Errore: %2$@ Groups + Gruppi No comment provided by engineer. @@ -3976,6 +4048,7 @@ Errore: %2$@ How it works + Come funziona alert button @@ -4122,10 +4195,12 @@ Altri miglioramenti sono in arrivo! Inappropriate content + Contenuto inappropriato report reason Inappropriate profile + Profilo inappropriato report reason @@ -4220,6 +4295,26 @@ Altri miglioramenti sono in arrivo! Colori dell'interfaccia No comment provided by engineer. + + Invalid + token status text + + + Invalid (bad token) + token status text + + + Invalid (expired) + token status text + + + Invalid (unregistered) + token status text + + + Invalid (wrong topic) + token status text + Invalid QR code Codice QR non valido @@ -4495,14 +4590,17 @@ Questo è il tuo link per il gruppo %@! List + Elenco swipe action List name and emoji should be different for all lists. + Il nome dell'elenco e l'emoji dovrebbero essere diversi per tutte le liste. No comment provided by engineer. List name... + Nome elenco... No comment provided by engineer. @@ -4767,6 +4865,7 @@ Questo è il tuo link per il gruppo %@! Messages in this chat will never be deleted. + I messaggi in questa chat non verranno mai eliminati. alert message @@ -4871,6 +4970,7 @@ Questo è il tuo link per il gruppo %@! More + Altro swipe action @@ -4901,7 +5001,11 @@ Questo è il tuo link per il gruppo %@! Mute Silenzia - swipe action + notification label action + + + Mute all + notification label action Muted when inactive! @@ -4953,6 +5057,10 @@ Questo è il tuo link per il gruppo %@! Stato della rete No comment provided by engineer. + + New + token status text + New Passcode Nuovo codice di accesso @@ -5045,14 +5153,17 @@ Questo è il tuo link per il gruppo %@! No chats + Nessuna chat No comment provided by engineer. No chats found + Nessuna chat trovata No comment provided by engineer. No chats in list %@ + Nessuna chat nell'elenco %@ No comment provided by engineer. @@ -5160,8 +5271,13 @@ Questo è il tuo link per il gruppo %@! Nessun server per inviare file. servers error + + No token! + alert title + No unread chats + Nessuna chat non letta No comment provided by engineer. @@ -5176,6 +5292,7 @@ Questo è il tuo link per il gruppo %@! Notes + Note No comment provided by engineer. @@ -5198,11 +5315,19 @@ Questo è il tuo link per il gruppo %@! Le notifiche sono disattivate! No comment provided by engineer. + + Notifications error + alert title + Notifications privacy Privacy delle notifiche No comment provided by engineer. + + Notifications status + alert title + Now admins can: - delete members' messages. @@ -5288,10 +5413,12 @@ Richiede l'attivazione della VPN. Only sender and moderators see it + Solo il mittente e i moderatori lo vedono No comment provided by engineer. Only you and moderators see it + Solo tu e i moderatori lo vedete No comment provided by engineer. @@ -5381,10 +5508,12 @@ Richiede l'attivazione della VPN. Open link + Apri link No comment provided by engineer. Open links from chat list + Apri i link dall'elenco delle chat No comment provided by engineer. @@ -5394,6 +5523,7 @@ Richiede l'attivazione della VPN. Open web link? + Aprire il link? No comment provided by engineer. @@ -5632,6 +5762,18 @@ Errore: %@ Conserva la password in modo sicuro, NON potrai cambiarla se la perdi. No comment provided by engineer. + + Please try to disable and re-enable notfications. + token info + + + Please wait for token activation to complete. + token info + + + Please wait for token to be registered. + token info + Polish interface Interfaccia polacca @@ -6024,6 +6166,18 @@ Attivalo nelle impostazioni *Rete e server*. Consumo di batteria ridotto No comment provided by engineer. + + Register + No comment provided by engineer. + + + Register notification token? + token info + + + Registered + token status text + Reject Rifiuta @@ -6127,34 +6281,42 @@ Attivalo nelle impostazioni *Rete e server*. Report + Segnala chat item action Report content: only group moderators will see it. + Segnala contenuto: solo i moderatori del gruppo lo vedranno. report reason Report member profile: only group moderators will see it. + Segnala profilo: solo i moderatori del gruppo lo vedranno. report reason Report other: only group moderators will see it. + Segnala altro: solo i moderatori del gruppo lo vedranno. report reason Report reason? + Motivo della segnalazione? No comment provided by engineer. Report spam: only group moderators will see it. + Segnala spam: solo i moderatori del gruppo lo vedranno. report reason Report violation: only group moderators will see it. + Segnala violazione: solo i moderatori del gruppo lo vedranno. report reason Reports + Segnalazioni No comment provided by engineer. @@ -6335,6 +6497,7 @@ Attivalo nelle impostazioni *Rete e server*. Save list + Salva elenco No comment provided by engineer. @@ -6794,6 +6957,7 @@ Attivalo nelle impostazioni *Rete e server*. Set chat name… + Imposta il nome della chat… No comment provided by engineer. @@ -7126,6 +7290,7 @@ Attivalo nelle impostazioni *Rete e server*. Spam + Spam blocking reason report reason @@ -7216,6 +7381,7 @@ Attivalo nelle impostazioni *Rete e server*. Storage + Archiviazione No comment provided by engineer. @@ -7278,6 +7444,10 @@ Attivalo nelle impostazioni *Rete e server*. Scadenza connessione TCP No comment provided by engineer. + + TCP port for messaging + No comment provided by engineer. + TCP_KEEPCNT TCP_KEEPCNT @@ -7353,6 +7523,10 @@ Attivalo nelle impostazioni *Rete e server*. Test fallito al passo %@. server test failure + + Test notifications + No comment provided by engineer. + Test server Prova server @@ -7482,6 +7656,7 @@ Può accadere a causa di qualche bug o quando la connessione è compromessa. The report will be archived for you. + La segnalazione verrà archiviata per te. No comment provided by engineer. @@ -7561,6 +7736,7 @@ Può accadere a causa di qualche bug o quando la connessione è compromessa. This action cannot be undone - the messages sent and received in this chat earlier than selected will be deleted. + Questa azione non è reversibile: i messaggi inviati e ricevuti in questa chat prima della selezione verranno eliminati. alert message @@ -7725,6 +7901,10 @@ Ti verrà chiesto di completare l'autenticazione prima di attivare questa funzio Attiva/disattiva l'incognito quando ti colleghi. No comment provided by engineer. + + Token status: %@. + token status + Toolbar opacity Opacità barra degli strumenti @@ -7890,7 +8070,7 @@ Per connetterti, chiedi al tuo contatto di creare un altro link di connessione e Unmute Riattiva notifiche - swipe action + notification label action Unread @@ -7982,6 +8162,10 @@ Per connetterti, chiedi al tuo contatto di creare un altro link di connessione e Usare i server di SimpleX Chat? No comment provided by engineer. + + Use TCP port %@ when no port is specified. + No comment provided by engineer. + Use chat Usa la chat @@ -8057,6 +8241,10 @@ Per connetterti, chiedi al tuo contatto di creare un altro link di connessione e Usa l'app con una mano sola. No comment provided by engineer. + + Use web port + No comment provided by engineer. + User selection Selezione utente @@ -8339,6 +8527,7 @@ Per connetterti, chiedi al tuo contatto di creare un altro link di connessione e Yes + No comment provided by engineer. @@ -8610,6 +8799,10 @@ Ripetere la richiesta di connessione? Hai inviato un invito al gruppo No comment provided by engineer. + + You should receive notifications. + token info + You will be connected to group when the group host's device is online, please wait or check later! Verrai connesso/a al gruppo quando il dispositivo dell'host del gruppo sarà in linea, attendi o controlla più tardi! @@ -8877,6 +9070,7 @@ Ripetere la richiesta di connessione? archived report + segnalazione archiviata No comment provided by engineer. @@ -9397,6 +9591,7 @@ Ripetere la richiesta di connessione? moderator + moderatore member role @@ -9404,11 +9599,6 @@ Ripetere la richiesta di connessione? mesi time unit - - mute - silenzia - No comment provided by engineer. - never mai @@ -9635,11 +9825,6 @@ ultimo msg ricevuto: %2$@ stato sconosciuto No comment provided by engineer. - - unmute - riattiva notifiche - No comment provided by engineer. - unprotected non protetto 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 8b754050a2..913e227f17 100644 --- a/apps/ios/SimpleX Localizations/ja.xcloc/Localized Contents/ja.xliff +++ b/apps/ios/SimpleX Localizations/ja.xcloc/Localized Contents/ja.xliff @@ -540,6 +540,14 @@ <p><a href="%@">SimpleX Chatでつながろう</a></p> email text + + @%@ + No comment provided by engineer. + + + @'%@' + No comment provided by engineer. + A few more things その他 @@ -634,6 +642,10 @@ Acknowledgement errors No comment provided by engineer. + + Active + token status text + Active connections No comment provided by engineer. @@ -1685,6 +1697,10 @@ Confirm upload No comment provided by engineer. + + Confirmed + token status text + Connect 接続 @@ -2957,6 +2973,10 @@ This is your own one-time link! Error changing to incognito! No comment provided by engineer. + + Error checking token status + No comment provided by engineer. + Error connecting to forwarding server %@. Please try later. No comment provided by engineer. @@ -3100,6 +3120,10 @@ This is your own one-time link! Error reconnecting servers No comment provided by engineer. + + Error registering for notifications + alert title + Error removing member メンバー除名にエラー発生 @@ -3197,6 +3221,10 @@ This is your own one-time link! 接続の同期エラー No comment provided by engineer. + + Error testing server connection + No comment provided by engineer. + Error updating group link グループのリンクのアップデートにエラー発生 @@ -3271,6 +3299,10 @@ This is your own one-time link! Expand chat item action + + Expired + token status text + Export database データベースをエキスポート @@ -3970,6 +4002,26 @@ More improvements are coming soon! Interface colors No comment provided by engineer. + + Invalid + token status text + + + Invalid (bad token) + token status text + + + Invalid (expired) + token status text + + + Invalid (unregistered) + token status text + + + Invalid (wrong topic) + token status text + Invalid QR code No comment provided by engineer. @@ -4598,7 +4650,11 @@ This is your link for group %@! Mute ミュート - swipe action + notification label action + + + Mute all + notification label action Muted when inactive! @@ -4645,6 +4701,10 @@ This is your link for group %@! ネットワーク状況 No comment provided by engineer. + + New + token status text + New Passcode 新しいパスコード @@ -4834,6 +4894,10 @@ This is your link for group %@! No servers to send files. servers error + + No token! + alert title + No unread chats No comment provided by engineer. @@ -4869,10 +4933,18 @@ This is your link for group %@! 通知が無効になっています! No comment provided by engineer. + + Notifications error + alert title + Notifications privacy No comment provided by engineer. + + Notifications status + alert title + Now admins can: - delete members' messages. @@ -5269,6 +5341,18 @@ Error: %@ パスフレーズを失くさないように保管してください。失くすと変更できなくなります。 No comment provided by engineer. + + Please try to disable and re-enable notfications. + token info + + + Please wait for token activation to complete. + token info + + + Please wait for token to be registered. + token info + Polish interface ポーランド語UI @@ -5628,6 +5712,18 @@ Enable in *Network & servers* settings. 電池使用量低減 No comment provided by engineer. + + Register + No comment provided by engineer. + + + Register notification token? + token info + + + Registered + token status text + Reject 拒否 @@ -6773,6 +6869,10 @@ Enable in *Network & servers* settings. TCP接続タイムアウト No comment provided by engineer. + + TCP port for messaging + No comment provided by engineer. + TCP_KEEPCNT TCP_KEEPCNT @@ -6842,6 +6942,10 @@ Enable in *Network & servers* settings. テストはステップ %@ で失敗しました。 server test failure + + Test notifications + No comment provided by engineer. + Test server テストサーバ @@ -7181,6 +7285,10 @@ You will be prompted to complete authentication before this feature is enabled.< Toggle incognito when connecting. No comment provided by engineer. + + Token status: %@. + token status + Toolbar opacity No comment provided by engineer. @@ -7333,7 +7441,7 @@ To connect, please ask your contact to create another connection link and check Unmute ミュート解除 - swipe action + notification label action Unread @@ -7416,6 +7524,10 @@ To connect, please ask your contact to create another connection link and check SimpleX チャット サーバーを使用しますか? No comment provided by engineer. + + Use TCP port %@ when no port is specified. + No comment provided by engineer. + Use chat チャット @@ -7482,6 +7594,10 @@ To connect, please ask your contact to create another connection link and check Use the app with one hand. No comment provided by engineer. + + Use web port + No comment provided by engineer. + User selection No comment provided by engineer. @@ -7981,6 +8097,10 @@ Repeat connection request? グループの招待を送りました No comment provided by engineer. + + You should receive notifications. + token info + You will be connected to group when the group host's device is online, please wait or check later! グループのホスト端末がオンラインになったら、接続されます。後でチェックするか、しばらくお待ちください! @@ -8744,10 +8864,6 @@ Repeat connection request? time unit - - mute - No comment provided by engineer. - never 一度も @@ -8954,10 +9070,6 @@ last received msg: %2$@ unknown status No comment provided by engineer. - - unmute - No comment provided by engineer. - unprotected No comment provided by engineer. diff --git a/apps/ios/SimpleX Localizations/nl.xcloc/Localized Contents/nl.xliff b/apps/ios/SimpleX Localizations/nl.xcloc/Localized Contents/nl.xliff index 81d7ba4d98..d8ced23aa4 100644 --- a/apps/ios/SimpleX Localizations/nl.xcloc/Localized Contents/nl.xliff +++ b/apps/ios/SimpleX Localizations/nl.xcloc/Localized Contents/nl.xliff @@ -14,6 +14,7 @@ + No comment provided by engineer. @@ -208,6 +209,7 @@ %d seconds(s) + %d seconden delete after time @@ -501,6 +503,7 @@ 1 year + 1 jaar delete after time @@ -540,6 +543,14 @@ <p><a href="%@">Maak verbinding met mij via SimpleX Chat</a></p> email text + + @%@ + No comment provided by engineer. + + + @'%@' + No comment provided by engineer. + A few more things Nog een paar dingen @@ -640,6 +651,10 @@ Bevestigingsfouten No comment provided by engineer. + + Active + token status text + Active connections Actieve verbindingen @@ -657,6 +672,7 @@ Add list + Lijst toevoegen No comment provided by engineer. @@ -686,6 +702,7 @@ Add to list + Toevoegen aan lijst No comment provided by engineer. @@ -765,6 +782,7 @@ All + alle No comment provided by engineer. @@ -779,6 +797,7 @@ All chats will be removed from the list (text), and the list deleted. + Alle chats worden uit de lijst (tekst) verwijderd en de lijst wordt verwijderd. alert message @@ -978,6 +997,7 @@ Another reason + Een andere reden report reason @@ -1007,6 +1027,7 @@ App group: + App-groep: No comment provided by engineer. @@ -1056,6 +1077,7 @@ Archive + Archief No comment provided by engineer. @@ -1070,10 +1092,12 @@ Archive report + Rapport archiveren No comment provided by engineer. Archive report? + Rapport archiveren? No comment provided by engineer. @@ -1088,6 +1112,7 @@ Ask + Vragen No comment provided by engineer. @@ -1312,6 +1337,7 @@ Businesses + bedrijven No comment provided by engineer. @@ -1407,6 +1433,7 @@ Change automatic message deletion? + Automatisch verwijderen van berichten wijzigen? alert title @@ -1632,6 +1659,7 @@ Clear or delete group? + Groep wissen of verwijderen? No comment provided by engineer. @@ -1656,6 +1684,7 @@ Community guidelines violation + Schending van de communityrichtlijnen report reason @@ -1773,6 +1802,10 @@ Bevestig het uploaden No comment provided by engineer. + + Confirmed + token status text + Connect Verbind @@ -1894,6 +1927,7 @@ Dit is uw eigen eenmalige link! Connection blocked + Verbinding geblokkeerd No comment provided by engineer. @@ -1909,10 +1943,13 @@ Dit is uw eigen eenmalige link! Connection is blocked by server operator: %@ + Verbinding is geblokkeerd door serveroperator: +%@ No comment provided by engineer. Connection not ready. + Verbinding nog niet klaar. No comment provided by engineer. @@ -1927,6 +1964,7 @@ Dit is uw eigen eenmalige link! Connection requires encryption renegotiation. + Verbinding vereist heronderhandeling over encryptie. No comment provided by engineer. @@ -2011,6 +2049,7 @@ Dit is uw eigen eenmalige link! Content violates conditions of use + Inhoud schendt de gebruiksvoorwaarden blocking reason @@ -2090,6 +2129,7 @@ Dit is uw eigen eenmalige link! Create list + Maak een lijst No comment provided by engineer. @@ -2353,6 +2393,7 @@ Dit is uw eigen eenmalige link! Delete chat messages from your device. + Verwijder chatberichten van uw apparaat. No comment provided by engineer. @@ -2447,6 +2488,7 @@ Dit is uw eigen eenmalige link! Delete list? + Lijst verwijderen? alert title @@ -2501,6 +2543,7 @@ Dit is uw eigen eenmalige link! Delete report + Rapport verwijderen No comment provided by engineer. @@ -2665,10 +2708,12 @@ Dit is uw eigen eenmalige link! Disable automatic message deletion? + Automatisch verwijderen van berichten uitschakelen? alert title Disable delete messages + Berichten verwijderen uitschakelen alert button @@ -2763,6 +2808,7 @@ Dit is uw eigen eenmalige link! Documents: + Documenten: No comment provided by engineer. @@ -2782,6 +2828,7 @@ Dit is uw eigen eenmalige link! Done + Klaar No comment provided by engineer. @@ -3017,6 +3064,7 @@ Dit is uw eigen eenmalige link! Encryption renegotiation in progress. + Er wordt opnieuw onderhandeld over de encryptie. No comment provided by engineer. @@ -3129,6 +3177,10 @@ Dit is uw eigen eenmalige link! Fout bij het overschakelen naar incognito! No comment provided by engineer. + + Error checking token status + No comment provided by engineer. + Error connecting to forwarding server %@. Please try later. Fout bij het verbinden met doorstuurserver %@. Probeer het later opnieuw. @@ -3151,6 +3203,7 @@ Dit is uw eigen eenmalige link! Error creating list + Fout bij het aanmaken van de lijst alert title @@ -3170,6 +3223,7 @@ Dit is uw eigen eenmalige link! Error creating report + Fout bij maken van rapport No comment provided by engineer. @@ -3282,6 +3336,10 @@ Dit is uw eigen eenmalige link! Fout bij opnieuw verbinden van servers No comment provided by engineer. + + Error registering for notifications + alert title + Error removing member Fout bij verwijderen van lid @@ -3289,6 +3347,7 @@ Dit is uw eigen eenmalige link! Error reordering lists + Fout bij het opnieuw ordenen van lijsten alert title @@ -3303,6 +3362,7 @@ Dit is uw eigen eenmalige link! Error saving chat list + Fout bij het opslaan van chatlijst alert title @@ -3385,6 +3445,10 @@ Dit is uw eigen eenmalige link! Fout bij het synchroniseren van de verbinding No comment provided by engineer. + + Error testing server connection + No comment provided by engineer. + Error updating group link Fout bij bijwerken van groep link @@ -3465,6 +3529,10 @@ Dit is uw eigen eenmalige link! Uitklappen chat item action + + Expired + token status text + Export database Database exporteren @@ -3517,6 +3585,7 @@ Dit is uw eigen eenmalige link! Favorites + Favorieten No comment provided by engineer. @@ -3534,6 +3603,8 @@ Dit is uw eigen eenmalige link! File is blocked by server operator: (info.reason.text). + Bestand is geblokkeerd door serveroperator: +(info.reason.text). file error text @@ -3907,6 +3978,7 @@ Fout: %2$@ Groups + Groepen No comment provided by engineer. @@ -3976,6 +4048,7 @@ Fout: %2$@ How it works + Hoe het werkt alert button @@ -4122,10 +4195,12 @@ Binnenkort meer verbeteringen! Inappropriate content + Ongepaste inhoud report reason Inappropriate profile + Ongepast profiel report reason @@ -4220,6 +4295,26 @@ Binnenkort meer verbeteringen! Interface kleuren No comment provided by engineer. + + Invalid + token status text + + + Invalid (bad token) + token status text + + + Invalid (expired) + token status text + + + Invalid (unregistered) + token status text + + + Invalid (wrong topic) + token status text + Invalid QR code Ongeldige QR-code @@ -4495,14 +4590,17 @@ Dit is jouw link voor groep %@! List + Lijst swipe action List name and emoji should be different for all lists. + De naam en emoji van de lijst moeten voor alle lijsten verschillend zijn. No comment provided by engineer. List name... + Naam van lijst... No comment provided by engineer. @@ -4767,6 +4865,7 @@ Dit is jouw link voor groep %@! Messages in this chat will never be deleted. + Berichten in deze chat zullen nooit worden verwijderd. alert message @@ -4871,6 +4970,7 @@ Dit is jouw link voor groep %@! More + Meer swipe action @@ -4901,7 +5001,11 @@ Dit is jouw link voor groep %@! Mute Dempen - swipe action + notification label action + + + Mute all + notification label action Muted when inactive! @@ -4953,6 +5057,10 @@ Dit is jouw link voor groep %@! Netwerk status No comment provided by engineer. + + New + token status text + New Passcode Nieuwe toegangscode @@ -5045,14 +5153,17 @@ Dit is jouw link voor groep %@! No chats + Geen chats No comment provided by engineer. No chats found + Geen chats gevonden No comment provided by engineer. No chats in list %@ + Geen chats in lijst %@ No comment provided by engineer. @@ -5160,8 +5271,13 @@ Dit is jouw link voor groep %@! Geen servers om bestanden te verzenden. servers error + + No token! + alert title + No unread chats + Geen ongelezen chats No comment provided by engineer. @@ -5176,6 +5292,7 @@ Dit is jouw link voor groep %@! Notes + Notities No comment provided by engineer. @@ -5198,11 +5315,19 @@ Dit is jouw link voor groep %@! Meldingen zijn uitgeschakeld! No comment provided by engineer. + + Notifications error + alert title + Notifications privacy Privacy van meldingen No comment provided by engineer. + + Notifications status + alert title + Now admins can: - delete members' messages. @@ -5288,10 +5413,12 @@ Vereist het inschakelen van VPN. Only sender and moderators see it + Alleen de verzender en moderators zien het No comment provided by engineer. Only you and moderators see it + Alleen jij en moderators zien het No comment provided by engineer. @@ -5381,10 +5508,12 @@ Vereist het inschakelen van VPN. Open link + Link openen No comment provided by engineer. Open links from chat list + Open links van chatlijst No comment provided by engineer. @@ -5394,6 +5523,7 @@ Vereist het inschakelen van VPN. Open web link? + Weblink openen? No comment provided by engineer. @@ -5632,6 +5762,18 @@ Fout: %@ Bewaar het wachtwoord veilig, u kunt deze NIET wijzigen als u het kwijtraakt. No comment provided by engineer. + + Please try to disable and re-enable notfications. + token info + + + Please wait for token activation to complete. + token info + + + Please wait for token to be registered. + token info + Polish interface Poolse interface @@ -6024,6 +6166,18 @@ Schakel dit in in *Netwerk en servers*-instellingen. Verminderd batterijgebruik No comment provided by engineer. + + Register + No comment provided by engineer. + + + Register notification token? + token info + + + Registered + token status text + Reject Afwijzen @@ -6127,34 +6281,42 @@ Schakel dit in in *Netwerk en servers*-instellingen. Report + Rapport chat item action Report content: only group moderators will see it. + Inhoud melden: alleen groepsmoderators kunnen dit zien. report reason Report member profile: only group moderators will see it. + Rapporteer ledenprofiel: alleen groepsmoderators kunnen dit zien. report reason Report other: only group moderators will see it. + Anders melden: alleen groepsmoderators kunnen het zien. report reason Report reason? + Reden melding? No comment provided by engineer. Report spam: only group moderators will see it. + Spam melden: alleen groepsmoderators kunnen het zien. report reason Report violation: only group moderators will see it. + Rapporteer overtreding: alleen groepsmoderators kunnen dit zien. report reason Reports + Rapporten No comment provided by engineer. @@ -6335,6 +6497,7 @@ Schakel dit in in *Netwerk en servers*-instellingen. Save list + Lijst opslaan No comment provided by engineer. @@ -6794,6 +6957,7 @@ Schakel dit in in *Netwerk en servers*-instellingen. Set chat name… + Stel chatnaam in… No comment provided by engineer. @@ -7126,6 +7290,7 @@ Schakel dit in in *Netwerk en servers*-instellingen. Spam + Spam blocking reason report reason @@ -7216,6 +7381,7 @@ Schakel dit in in *Netwerk en servers*-instellingen. Storage + Opslag No comment provided by engineer. @@ -7278,6 +7444,10 @@ Schakel dit in in *Netwerk en servers*-instellingen. Timeout van TCP-verbinding No comment provided by engineer. + + TCP port for messaging + No comment provided by engineer. + TCP_KEEPCNT TCP_KEEPCNT @@ -7353,6 +7523,10 @@ Schakel dit in in *Netwerk en servers*-instellingen. Test mislukt bij stap %@. server test failure + + Test notifications + No comment provided by engineer. + Test server Server test @@ -7482,6 +7656,7 @@ Het kan gebeuren vanwege een bug of wanneer de verbinding is aangetast. The report will be archived for you. + Het rapport wordt voor u gearchiveerd. No comment provided by engineer. @@ -7561,6 +7736,7 @@ Het kan gebeuren vanwege een bug of wanneer de verbinding is aangetast. This action cannot be undone - the messages sent and received in this chat earlier than selected will be deleted. + Deze actie kan niet ongedaan worden gemaakt. De berichten die eerder in deze chat zijn verzonden en ontvangen dan geselecteerd, worden verwijderd. alert message @@ -7725,6 +7901,10 @@ U wordt gevraagd de authenticatie te voltooien voordat deze functie wordt ingesc Schakel incognito in tijdens het verbinden. No comment provided by engineer. + + Token status: %@. + token status + Toolbar opacity De transparantie van de werkbalk @@ -7890,7 +8070,7 @@ Om verbinding te maken, vraagt u uw contact om een andere verbinding link te mak Unmute Dempen opheffen - swipe action + notification label action Unread @@ -7982,6 +8162,10 @@ Om verbinding te maken, vraagt u uw contact om een andere verbinding link te mak SimpleX Chat servers gebruiken? No comment provided by engineer. + + Use TCP port %@ when no port is specified. + No comment provided by engineer. + Use chat Gebruik chat @@ -8057,6 +8241,10 @@ Om verbinding te maken, vraagt u uw contact om een andere verbinding link te mak Gebruik de app met één hand. No comment provided by engineer. + + Use web port + No comment provided by engineer. + User selection Gebruikersselectie @@ -8339,6 +8527,7 @@ Om verbinding te maken, vraagt u uw contact om een andere verbinding link te mak Yes + Ja No comment provided by engineer. @@ -8610,6 +8799,10 @@ Verbindingsverzoek herhalen? Je hebt een groep uitnodiging verzonden No comment provided by engineer. + + You should receive notifications. + token info + You will be connected to group when the group host's device is online, please wait or check later! Je wordt verbonden met de groep wanneer het apparaat van de groep host online is, even geduld a.u.b. of controleer het later! @@ -8877,6 +9070,7 @@ Verbindingsverzoek herhalen? archived report + gearchiveerd rapport No comment provided by engineer. @@ -9397,6 +9591,7 @@ Verbindingsverzoek herhalen? moderator + moderator member role @@ -9404,11 +9599,6 @@ Verbindingsverzoek herhalen? maanden time unit - - mute - dempen - No comment provided by engineer. - never nooit @@ -9635,11 +9825,6 @@ laatst ontvangen bericht: %2$@ onbekende status No comment provided by engineer. - - unmute - dempen opheffen - No comment provided by engineer. - unprotected onbeschermd 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 c9adcfcd9e..c410ff46e3 100644 --- a/apps/ios/SimpleX Localizations/pl.xcloc/Localized Contents/pl.xliff +++ b/apps/ios/SimpleX Localizations/pl.xcloc/Localized Contents/pl.xliff @@ -208,6 +208,7 @@ %d seconds(s) + %d sekundach delete after time @@ -501,6 +502,7 @@ 1 year + 1 roku delete after time @@ -540,6 +542,14 @@ <p><a href="%@">Połącz się ze mną poprzez SimpleX Chat.</a></p> email text + + @%@ + No comment provided by engineer. + + + @'%@' + No comment provided by engineer. + A few more things Jeszcze kilka rzeczy @@ -640,6 +650,10 @@ Błędy potwierdzenia No comment provided by engineer. + + Active + token status text + Active connections Aktywne połączenia @@ -657,6 +671,7 @@ Add list + Dodaj listę No comment provided by engineer. @@ -686,6 +701,7 @@ Add to list + Dodaj do listy No comment provided by engineer. @@ -765,6 +781,7 @@ All + Wszystko No comment provided by engineer. @@ -779,6 +796,7 @@ All chats will be removed from the list (text), and the list deleted. + Wszystkie rozmowy zostaną usunięte z listy (text), a lista usunięta. alert message @@ -1311,6 +1329,7 @@ Businesses + Firmy No comment provided by engineer. @@ -1768,6 +1787,10 @@ Potwierdź wgranie No comment provided by engineer. + + Confirmed + token status text + Connect Połącz @@ -3111,6 +3134,10 @@ To jest twój jednorazowy link! Błąd zmiany na incognito! No comment provided by engineer. + + Error checking token status + No comment provided by engineer. + Error connecting to forwarding server %@. Please try later. Błąd połączenia z serwerem przekierowania %@. Spróbuj ponownie później. @@ -3263,6 +3290,10 @@ To jest twój jednorazowy link! Błąd ponownego łączenia serwerów No comment provided by engineer. + + Error registering for notifications + alert title + Error removing member Błąd usuwania członka @@ -3365,6 +3396,10 @@ To jest twój jednorazowy link! Błąd synchronizacji połączenia No comment provided by engineer. + + Error testing server connection + No comment provided by engineer. + Error updating group link Błąd aktualizacji linku grupy @@ -3443,6 +3478,10 @@ To jest twój jednorazowy link! Rozszerz chat item action + + Expired + token status text + Export database Eksportuj bazę danych @@ -4189,6 +4228,26 @@ More improvements are coming soon! Kolory interfejsu No comment provided by engineer. + + Invalid + token status text + + + Invalid (bad token) + token status text + + + Invalid (expired) + token status text + + + Invalid (unregistered) + token status text + + + Invalid (wrong topic) + token status text + Invalid QR code Nieprawidłowy kod QR @@ -4864,7 +4923,11 @@ To jest twój link do grupy %@! Mute Wycisz - swipe action + notification label action + + + Mute all + notification label action Muted when inactive! @@ -4914,6 +4977,10 @@ To jest twój link do grupy %@! Status sieci No comment provided by engineer. + + New + token status text + New Passcode Nowy Pin @@ -5113,6 +5180,10 @@ To jest twój link do grupy %@! No servers to send files. servers error + + No token! + alert title + No unread chats No comment provided by engineer. @@ -5151,10 +5222,18 @@ To jest twój link do grupy %@! Powiadomienia są wyłączone! No comment provided by engineer. + + Notifications error + alert title + Notifications privacy No comment provided by engineer. + + Notifications status + alert title + Now admins can: - delete members' messages. @@ -5577,6 +5656,18 @@ Błąd: %@ Przechowuj kod dostępu w bezpieczny sposób, w przypadku jego utraty NIE będzie można go zmienić. No comment provided by engineer. + + Please try to disable and re-enable notfications. + token info + + + Please wait for token activation to complete. + token info + + + Please wait for token to be registered. + token info + Polish interface Polski interfejs @@ -5967,6 +6058,18 @@ Włącz w ustawianiach *Sieć i serwery* . Zmniejszone zużycie baterii No comment provided by engineer. + + Register + No comment provided by engineer. + + + Register notification token? + token info + + + Registered + token status text + Reject Odrzuć @@ -7204,6 +7307,10 @@ Włącz w ustawianiach *Sieć i serwery* . Limit czasu połączenia TCP No comment provided by engineer. + + TCP port for messaging + No comment provided by engineer. + TCP_KEEPCNT TCP_KEEPCNT @@ -7278,6 +7385,10 @@ Włącz w ustawianiach *Sieć i serwery* . Test nie powiódł się na etapie %@. server test failure + + Test notifications + No comment provided by engineer. + Test server Przetestuj serwer @@ -7639,6 +7750,10 @@ Przed włączeniem tej funkcji zostanie wyświetlony monit uwierzytelniania.Przełącz incognito przy połączeniu. No comment provided by engineer. + + Token status: %@. + token status + Toolbar opacity Nieprzezroczystość paska narzędzi @@ -7803,7 +7918,7 @@ Aby się połączyć, poproś Twój kontakt o utworzenie kolejnego linku połąc Unmute Wyłącz wyciszenie - swipe action + notification label action Unread @@ -7894,6 +8009,10 @@ Aby się połączyć, poproś Twój kontakt o utworzenie kolejnego linku połąc Użyć serwerów SimpleX Chat? No comment provided by engineer. + + Use TCP port %@ when no port is specified. + No comment provided by engineer. + Use chat Użyj czatu @@ -7966,6 +8085,10 @@ Aby się połączyć, poproś Twój kontakt o utworzenie kolejnego linku połąc Korzystaj z aplikacji jedną ręką. No comment provided by engineer. + + Use web port + No comment provided by engineer. + User selection Wybór użytkownika @@ -8512,6 +8635,10 @@ Powtórzyć prośbę połączenia? Wysłałeś zaproszenie do grupy No comment provided by engineer. + + You should receive notifications. + token info + You will be connected to group when the group host's device is online, please wait or check later! Zostaniesz połączony do grupy, gdy urządzenie gospodarza grupy będzie online, proszę czekać lub sprawdzić później! @@ -9302,11 +9429,6 @@ Powtórzyć prośbę połączenia? miesiące time unit - - mute - wycisz - No comment provided by engineer. - never nigdy @@ -9532,11 +9654,6 @@ ostatnia otrzymana wiadomość: %2$@ nieznany status No comment provided by engineer. - - unmute - wyłącz wyciszenie - No comment provided by engineer. - unprotected niezabezpieczony 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 e37d0e4534..d5dc066a9f 100644 --- a/apps/ios/SimpleX Localizations/ru.xcloc/Localized Contents/ru.xliff +++ b/apps/ios/SimpleX Localizations/ru.xcloc/Localized Contents/ru.xliff @@ -208,6 +208,7 @@ %d seconds(s) + %d секунд delete after time @@ -501,6 +502,7 @@ 1 year + 1 год delete after time @@ -540,6 +542,14 @@ <p><a href="%@">Соединитесь со мной в SimpleX Chat.</a></p> email text + + @%@ + No comment provided by engineer. + + + @'%@' + No comment provided by engineer. + A few more things Еще несколько изменений @@ -640,6 +650,10 @@ Ошибки подтверждения No comment provided by engineer. + + Active + token status text + Active connections Активные соединения @@ -657,6 +671,7 @@ Add list + Добавить список No comment provided by engineer. @@ -686,6 +701,7 @@ Add to list + Добавить в список No comment provided by engineer. @@ -765,6 +781,7 @@ All + Все No comment provided by engineer. @@ -978,6 +995,7 @@ Another reason + Другая причина report reason @@ -1056,6 +1074,7 @@ Archive + Архивировать No comment provided by engineer. @@ -1070,10 +1089,12 @@ Archive report + Архивировать отчет No comment provided by engineer. Archive report? + Архивировать отчет? No comment provided by engineer. @@ -1773,6 +1794,10 @@ Подтвердить загрузку No comment provided by engineer. + + Confirmed + token status text + Connect Соединиться @@ -3129,6 +3154,10 @@ This is your own one-time link! Ошибка при смене на Инкогнито! No comment provided by engineer. + + Error checking token status + No comment provided by engineer. + Error connecting to forwarding server %@. Please try later. Ошибка подключения к пересылающему серверу %@. Попробуйте позже. @@ -3282,6 +3311,10 @@ This is your own one-time link! Ошибка переподключения к серверам No comment provided by engineer. + + Error registering for notifications + alert title + Error removing member Ошибка при удалении члена группы @@ -3385,6 +3418,10 @@ This is your own one-time link! Ошибка синхронизации соединения No comment provided by engineer. + + Error testing server connection + No comment provided by engineer. + Error updating group link Ошибка обновления ссылки группы @@ -3465,6 +3502,10 @@ This is your own one-time link! Раскрыть chat item action + + Expired + token status text + Export database Экспорт архива чата @@ -4219,6 +4260,26 @@ More improvements are coming soon! Цвета интерфейса No comment provided by engineer. + + Invalid + token status text + + + Invalid (bad token) + token status text + + + Invalid (expired) + token status text + + + Invalid (unregistered) + token status text + + + Invalid (wrong topic) + token status text + Invalid QR code Неверный QR код @@ -4900,7 +4961,11 @@ This is your link for group %@! Mute Без звука - swipe action + notification label action + + + Mute all + notification label action Muted when inactive! @@ -4952,6 +5017,10 @@ This is your link for group %@! Состояние сети No comment provided by engineer. + + New + token status text + New Passcode Новый Код @@ -5159,6 +5228,10 @@ This is your link for group %@! Нет серверов для отправки файлов. servers error + + No token! + alert title + No unread chats No comment provided by engineer. @@ -5197,11 +5270,19 @@ This is your link for group %@! Уведомления выключены No comment provided by engineer. + + Notifications error + alert title + Notifications privacy Конфиденциальность уведомлений No comment provided by engineer. + + Notifications status + alert title + Now admins can: - delete members' messages. @@ -5631,6 +5712,18 @@ Error: %@ Пожалуйста, надежно сохраните пароль, Вы НЕ сможете его поменять, если потеряете. No comment provided by engineer. + + Please try to disable and re-enable notfications. + token info + + + Please wait for token activation to complete. + token info + + + Please wait for token to be registered. + token info + Polish interface Польский интерфейс @@ -6023,6 +6116,18 @@ Enable in *Network & servers* settings. Уменьшенное потребление батареи No comment provided by engineer. + + Register + No comment provided by engineer. + + + Register notification token? + token info + + + Registered + token status text + Reject Отклонить @@ -7277,6 +7382,10 @@ Enable in *Network & servers* settings. Таймаут TCP соединения No comment provided by engineer. + + TCP port for messaging + No comment provided by engineer. + TCP_KEEPCNT TCP_KEEPCNT @@ -7352,6 +7461,10 @@ Enable in *Network & servers* settings. Ошибка теста на шаге %@. server test failure + + Test notifications + No comment provided by engineer. + Test server Тестировать сервер @@ -7724,6 +7837,10 @@ You will be prompted to complete authentication before this feature is enabled.< Установите режим Инкогнито при соединении. No comment provided by engineer. + + Token status: %@. + token status + Toolbar opacity Прозрачность тулбара @@ -7889,7 +8006,7 @@ To connect, please ask your contact to create another connection link and check Unmute Уведомлять - swipe action + notification label action Unread @@ -7981,6 +8098,10 @@ To connect, please ask your contact to create another connection link and check Использовать серверы предосталенные SimpleX Chat? No comment provided by engineer. + + Use TCP port %@ when no port is specified. + No comment provided by engineer. + Use chat Использовать чат @@ -8056,6 +8177,10 @@ To connect, please ask your contact to create another connection link and check Используйте приложение одной рукой. No comment provided by engineer. + + Use web port + No comment provided by engineer. + User selection Выбор пользователя @@ -8609,6 +8734,10 @@ Repeat connection request? Вы отправили приглашение в группу No comment provided by engineer. + + You should receive notifications. + token info + You will be connected to group when the group host's device is online, please wait or check later! Соединение с группой будет установлено, когда хост группы будет онлайн. Пожалуйста, подождите или проверьте позже! @@ -9403,11 +9532,6 @@ Repeat connection request? месяцев time unit - - mute - без звука - No comment provided by engineer. - never никогда @@ -9634,11 +9758,6 @@ last received msg: %2$@ неизвестный статус No comment provided by engineer. - - unmute - уведомлять - No comment provided by engineer. - unprotected незащищённый 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 65e294465f..ea0ecaa4f0 100644 --- a/apps/ios/SimpleX Localizations/th.xcloc/Localized Contents/th.xliff +++ b/apps/ios/SimpleX Localizations/th.xcloc/Localized Contents/th.xliff @@ -500,6 +500,14 @@ <p><a href="%@">เชื่อมต่อกับฉันผ่าน SimpleX Chat</a></p> email text + + @%@ + No comment provided by engineer. + + + @'%@' + No comment provided by engineer. + A few more things อีกสองสามอย่าง @@ -592,6 +600,10 @@ Acknowledgement errors No comment provided by engineer. + + Active + token status text + Active connections No comment provided by engineer. @@ -1621,6 +1633,10 @@ Confirm upload No comment provided by engineer. + + Confirmed + token status text + Connect เชื่อมต่อ @@ -2870,6 +2886,10 @@ This is your own one-time link! Error changing to incognito! No comment provided by engineer. + + Error checking token status + No comment provided by engineer. + Error connecting to forwarding server %@. Please try later. No comment provided by engineer. @@ -3012,6 +3032,10 @@ This is your own one-time link! Error reconnecting servers No comment provided by engineer. + + Error registering for notifications + alert title + Error removing member เกิดข้อผิดพลาดในการลบสมาชิก @@ -3109,6 +3133,10 @@ This is your own one-time link! เกิดข้อผิดพลาดในการซิงโครไนซ์การเชื่อมต่อ No comment provided by engineer. + + Error testing server connection + No comment provided by engineer. + Error updating group link เกิดข้อผิดพลาดในการอัปเดตลิงก์กลุ่ม @@ -3183,6 +3211,10 @@ This is your own one-time link! Expand chat item action + + Expired + token status text + Export database ส่งออกฐานข้อมูล @@ -3881,6 +3913,26 @@ More improvements are coming soon! Interface colors No comment provided by engineer. + + Invalid + token status text + + + Invalid (bad token) + token status text + + + Invalid (expired) + token status text + + + Invalid (unregistered) + token status text + + + Invalid (wrong topic) + token status text + Invalid QR code No comment provided by engineer. @@ -4505,7 +4557,11 @@ This is your link for group %@! Mute ปิดเสียง - swipe action + notification label action + + + Mute all + notification label action Muted when inactive! @@ -4552,6 +4608,10 @@ This is your link for group %@! สถานะเครือข่าย No comment provided by engineer. + + New + token status text + New Passcode รหัสผ่านใหม่ @@ -4739,6 +4799,10 @@ This is your link for group %@! No servers to send files. servers error + + No token! + alert title + No unread chats No comment provided by engineer. @@ -4774,10 +4838,18 @@ This is your link for group %@! ปิดการแจ้งเตือน! No comment provided by engineer. + + Notifications error + alert title + Notifications privacy No comment provided by engineer. + + Notifications status + alert title + Now admins can: - delete members' messages. @@ -5171,6 +5243,18 @@ Error: %@ โปรดจัดเก็บรหัสผ่านอย่างปลอดภัย คุณจะไม่สามารถเปลี่ยนรหัสผ่านได้หากคุณทำรหัสผ่านหาย No comment provided by engineer. + + Please try to disable and re-enable notfications. + token info + + + Please wait for token activation to complete. + token info + + + Please wait for token to be registered. + token info + Polish interface อินเตอร์เฟซภาษาโปแลนด์ @@ -5529,6 +5613,18 @@ Enable in *Network & servers* settings. ลดการใช้แบตเตอรี่ No comment provided by engineer. + + Register + No comment provided by engineer. + + + Register notification token? + token info + + + Registered + token status text + Reject ปฏิเสธ @@ -6675,6 +6771,10 @@ Enable in *Network & servers* settings. หมดเวลาการเชื่อมต่อ TCP No comment provided by engineer. + + TCP port for messaging + No comment provided by engineer. + TCP_KEEPCNT TCP_KEEPCNT @@ -6744,6 +6844,10 @@ Enable in *Network & servers* settings. การทดสอบล้มเหลวในขั้นตอน %@ server test failure + + Test notifications + No comment provided by engineer. + Test server เซิร์ฟเวอร์ทดสอบ @@ -7083,6 +7187,10 @@ You will be prompted to complete authentication before this feature is enabled.< Toggle incognito when connecting. No comment provided by engineer. + + Token status: %@. + token status + Toolbar opacity No comment provided by engineer. @@ -7235,7 +7343,7 @@ To connect, please ask your contact to create another connection link and check Unmute เปิดเสียง - swipe action + notification label action Unread @@ -7318,6 +7426,10 @@ To connect, please ask your contact to create another connection link and check ใช้เซิร์ฟเวอร์ SimpleX Chat ไหม? No comment provided by engineer. + + Use TCP port %@ when no port is specified. + No comment provided by engineer. + Use chat ใช้แชท @@ -7382,6 +7494,10 @@ To connect, please ask your contact to create another connection link and check Use the app with one hand. No comment provided by engineer. + + Use web port + No comment provided by engineer. + User selection No comment provided by engineer. @@ -7879,6 +7995,10 @@ Repeat connection request? คุณส่งคำเชิญเข้าร่วมกลุ่มแล้ว No comment provided by engineer. + + You should receive notifications. + token info + You will be connected to group when the group host's device is online, please wait or check later! คุณจะเชื่อมต่อกับกลุ่มเมื่ออุปกรณ์โฮสต์ของกลุ่มออนไลน์อยู่ โปรดรอหรือตรวจสอบภายหลัง! @@ -8639,10 +8759,6 @@ Repeat connection request? เดือน time unit - - mute - No comment provided by engineer. - never ไม่เคย @@ -8849,10 +8965,6 @@ last received msg: %2$@ unknown status No comment provided by engineer. - - unmute - No comment provided by engineer. - unprotected No comment provided by engineer. diff --git a/apps/ios/SimpleX Localizations/tr.xcloc/Localized Contents/tr.xliff b/apps/ios/SimpleX Localizations/tr.xcloc/Localized Contents/tr.xliff index 0625825006..28befea033 100644 --- a/apps/ios/SimpleX Localizations/tr.xcloc/Localized Contents/tr.xliff +++ b/apps/ios/SimpleX Localizations/tr.xcloc/Localized Contents/tr.xliff @@ -540,6 +540,14 @@ <p><a href="%@">SimpleX Chat ile bana bağlanın</a></p> email text + + @%@ + No comment provided by engineer. + + + @'%@' + No comment provided by engineer. + A few more things Birkaç şey daha @@ -640,6 +648,10 @@ Onay hataları No comment provided by engineer. + + Active + token status text + Active connections Aktif bağlantılar @@ -1773,6 +1785,10 @@ Yüklemeyi onayla No comment provided by engineer. + + Confirmed + token status text + Connect Bağlan @@ -3128,6 +3144,10 @@ Bu senin kendi tek kullanımlık bağlantın! Gizli moduna geçerken hata oluştu! No comment provided by engineer. + + Error checking token status + No comment provided by engineer. + Error connecting to forwarding server %@. Please try later. Yönlendirme sunucusu %@'ya bağlanırken hata oluştu. Lütfen daha sonra deneyin. @@ -3281,6 +3301,10 @@ Bu senin kendi tek kullanımlık bağlantın! Hata sunuculara yeniden bağlanılıyor No comment provided by engineer. + + Error registering for notifications + alert title + Error removing member Kişiyi silerken sorun oluştu @@ -3384,6 +3408,10 @@ Bu senin kendi tek kullanımlık bağlantın! Bağlantı senkronizasyonunda hata oluştu No comment provided by engineer. + + Error testing server connection + No comment provided by engineer. + Error updating group link Grup bağlantısı güncellenirken hata oluştu @@ -3464,6 +3492,10 @@ Bu senin kendi tek kullanımlık bağlantın! Genişlet chat item action + + Expired + token status text + Export database Veritabanını dışarı aktar @@ -4219,6 +4251,26 @@ Daha fazla iyileştirme yakında geliyor! Arayüz renkleri No comment provided by engineer. + + Invalid + token status text + + + Invalid (bad token) + token status text + + + Invalid (expired) + token status text + + + Invalid (unregistered) + token status text + + + Invalid (wrong topic) + token status text + Invalid QR code Geçersiz QR kodu @@ -4898,7 +4950,11 @@ Bu senin grup için bağlantın %@! Mute Sustur - swipe action + notification label action + + + Mute all + notification label action Muted when inactive! @@ -4948,6 +5004,10 @@ Bu senin grup için bağlantın %@! Ağ durumu No comment provided by engineer. + + New + token status text + New Passcode Yeni şifre @@ -5147,6 +5207,10 @@ Bu senin grup için bağlantın %@! No servers to send files. servers error + + No token! + alert title + No unread chats No comment provided by engineer. @@ -5185,10 +5249,18 @@ Bu senin grup için bağlantın %@! Bildirimler devre dışı! No comment provided by engineer. + + Notifications error + alert title + Notifications privacy No comment provided by engineer. + + Notifications status + alert title + Now admins can: - delete members' messages. @@ -5611,6 +5683,18 @@ Hata: %@ Lütfen parolayı güvenli bir şekilde saklayın, kaybederseniz parolayı DEĞİŞTİREMEZSİNİZ. No comment provided by engineer. + + Please try to disable and re-enable notfications. + token info + + + Please wait for token activation to complete. + token info + + + Please wait for token to be registered. + token info + Polish interface Lehçe arayüz @@ -6001,6 +6085,18 @@ Enable in *Network & servers* settings. Azaltılmış pil kullanımı No comment provided by engineer. + + Register + No comment provided by engineer. + + + Register notification token? + token info + + + Registered + token status text + Reject Reddet @@ -7241,6 +7337,10 @@ Enable in *Network & servers* settings. TCP bağlantı zaman aşımı No comment provided by engineer. + + TCP port for messaging + No comment provided by engineer. + TCP_KEEPCNT TCP_KEEPCNT @@ -7315,6 +7415,10 @@ Enable in *Network & servers* settings. Test %@ adımında başarısız oldu. server test failure + + Test notifications + No comment provided by engineer. + Test server Sunucuyu test et @@ -7676,6 +7780,10 @@ Bu özellik etkinleştirilmeden önce kimlik doğrulamayı tamamlamanız istenec Bağlanırken gizli moda geçiş yap. No comment provided by engineer. + + Token status: %@. + token status + Toolbar opacity Araç çubuğu opaklığı @@ -7840,7 +7948,7 @@ Bağlanmak için lütfen kişinizden başka bir bağlantı oluşturmasını iste Unmute Susturmayı kaldır - swipe action + notification label action Unread @@ -7931,6 +8039,10 @@ Bağlanmak için lütfen kişinizden başka bir bağlantı oluşturmasını iste SimpleX Chat sunucuları kullanılsın mı? No comment provided by engineer. + + Use TCP port %@ when no port is specified. + No comment provided by engineer. + Use chat Sohbeti kullan @@ -8003,6 +8115,10 @@ Bağlanmak için lütfen kişinizden başka bir bağlantı oluşturmasını iste Uygulamayı tek elle kullan. No comment provided by engineer. + + Use web port + No comment provided by engineer. + User selection Kullanıcı seçimi @@ -8549,6 +8665,10 @@ Bağlantı isteği tekrarlansın mı? Grup daveti gönderdiniz No comment provided by engineer. + + You should receive notifications. + token info + You will be connected to group when the group host's device is online, please wait or check later! Grup sahibinin cihazı çevrimiçi olduğunda gruba bağlanacaksınız, lütfen bekleyin veya daha sonra kontrol edin! @@ -9339,11 +9459,6 @@ Bağlantı isteği tekrarlansın mı? aylar time unit - - mute - Sessiz - No comment provided by engineer. - never asla @@ -9569,11 +9684,6 @@ son alınan msj: %2$@ bilinmeyen durum No comment provided by engineer. - - unmute - susturmayı kaldır - No comment provided by engineer. - unprotected korumasız 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 500fa0c87b..a8c1ec27b7 100644 --- a/apps/ios/SimpleX Localizations/uk.xcloc/Localized Contents/uk.xliff +++ b/apps/ios/SimpleX Localizations/uk.xcloc/Localized Contents/uk.xliff @@ -540,6 +540,14 @@ <p><a href="%@"> Зв'яжіться зі мною через SimpleX Chat</a></p> email text + + @%@ + No comment provided by engineer. + + + @'%@' + No comment provided by engineer. + A few more things Ще кілька речей @@ -640,6 +648,10 @@ Помилки підтвердження No comment provided by engineer. + + Active + token status text + Active connections Активні з'єднання @@ -1773,6 +1785,10 @@ Підтвердити завантаження No comment provided by engineer. + + Confirmed + token status text + Connect Підключіться @@ -3129,6 +3145,10 @@ This is your own one-time link! Помилка переходу на інкогніто! No comment provided by engineer. + + Error checking token status + No comment provided by engineer. + Error connecting to forwarding server %@. Please try later. Помилка підключення до сервера переадресації %@. Спробуйте пізніше. @@ -3282,6 +3302,10 @@ This is your own one-time link! Помилка перепідключення серверів No comment provided by engineer. + + Error registering for notifications + alert title + Error removing member Помилка видалення учасника @@ -3385,6 +3409,10 @@ This is your own one-time link! Помилка синхронізації з'єднання No comment provided by engineer. + + Error testing server connection + No comment provided by engineer. + Error updating group link Помилка оновлення посилання на групу @@ -3465,6 +3493,10 @@ This is your own one-time link! Розгорнути chat item action + + Expired + token status text + Export database Експорт бази даних @@ -4220,6 +4252,26 @@ More improvements are coming soon! Кольори інтерфейсу No comment provided by engineer. + + Invalid + token status text + + + Invalid (bad token) + token status text + + + Invalid (expired) + token status text + + + Invalid (unregistered) + token status text + + + Invalid (wrong topic) + token status text + Invalid QR code Неправильний QR-код @@ -4901,7 +4953,11 @@ This is your link for group %@! Mute Вимкнути звук - swipe action + notification label action + + + Mute all + notification label action Muted when inactive! @@ -4953,6 +5009,10 @@ This is your link for group %@! Стан мережі No comment provided by engineer. + + New + token status text + New Passcode Новий пароль @@ -5160,6 +5220,10 @@ This is your link for group %@! Немає серверів для надсилання файлів. servers error + + No token! + alert title + No unread chats No comment provided by engineer. @@ -5198,11 +5262,19 @@ This is your link for group %@! Сповіщення вимкнено! No comment provided by engineer. + + Notifications error + alert title + Notifications privacy Сповіщення про приватність No comment provided by engineer. + + Notifications status + alert title + Now admins can: - delete members' messages. @@ -5632,6 +5704,18 @@ Error: %@ Будь ласка, зберігайте пароль надійно, ви НЕ зможете змінити його, якщо втратите. No comment provided by engineer. + + Please try to disable and re-enable notfications. + token info + + + Please wait for token activation to complete. + token info + + + Please wait for token to be registered. + token info + Polish interface Польський інтерфейс @@ -6024,6 +6108,18 @@ Enable in *Network & servers* settings. Зменшення використання акумулятора No comment provided by engineer. + + Register + No comment provided by engineer. + + + Register notification token? + token info + + + Registered + token status text + Reject Відхилити @@ -7278,6 +7374,10 @@ Enable in *Network & servers* settings. Тайм-аут TCP-з'єднання No comment provided by engineer. + + TCP port for messaging + No comment provided by engineer. + TCP_KEEPCNT TCP_KEEPCNT @@ -7353,6 +7453,10 @@ Enable in *Network & servers* settings. Тест завершився невдало на кроці %@. server test failure + + Test notifications + No comment provided by engineer. + Test server Тестовий сервер @@ -7725,6 +7829,10 @@ You will be prompted to complete authentication before this feature is enabled.< Увімкніть інкогніто при підключенні. No comment provided by engineer. + + Token status: %@. + token status + Toolbar opacity Непрозорість панелі інструментів @@ -7890,7 +7998,7 @@ To connect, please ask your contact to create another connection link and check Unmute Увімкнути звук - swipe action + notification label action Unread @@ -7982,6 +8090,10 @@ To connect, please ask your contact to create another connection link and check Використовувати сервери SimpleX Chat? No comment provided by engineer. + + Use TCP port %@ when no port is specified. + No comment provided by engineer. + Use chat Використовуйте чат @@ -8057,6 +8169,10 @@ To connect, please ask your contact to create another connection link and check Використовуйте додаток однією рукою. No comment provided by engineer. + + Use web port + No comment provided by engineer. + User selection Вибір користувача @@ -8610,6 +8726,10 @@ Repeat connection request? Ви надіслали запрошення до групи No comment provided by engineer. + + You should receive notifications. + token info + You will be connected to group when the group host's device is online, please wait or check later! Ви будете підключені до групи, коли пристрій господаря групи буде в мережі, будь ласка, зачекайте або перевірте пізніше! @@ -9404,11 +9524,6 @@ Repeat connection request? місяців time unit - - mute - приглушити - No comment provided by engineer. - never ніколи @@ -9635,11 +9750,6 @@ last received msg: %2$@ невідомий статус No comment provided by engineer. - - unmute - увімкнути звук - No comment provided by engineer. - unprotected незахищені 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 8ebdfadeea..5be4378abb 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 @@ -529,6 +529,14 @@ <p><a href="%@">通过 SimpleX Chat </a></p>与我联系 email text + + @%@ + No comment provided by engineer. + + + @'%@' + No comment provided by engineer. + A few more things 一些杂项 @@ -626,6 +634,10 @@ 确认错误 No comment provided by engineer. + + Active + token status text + Active connections 活动连接 @@ -1724,6 +1736,10 @@ 确认上传 No comment provided by engineer. + + Confirmed + token status text + Connect 连接 @@ -3062,6 +3078,10 @@ This is your own one-time link! Error changing to incognito! No comment provided by engineer. + + Error checking token status + No comment provided by engineer. + Error connecting to forwarding server %@. Please try later. 连接到转发服务器 %@ 时出错。请稍后尝试。 @@ -3213,6 +3233,10 @@ This is your own one-time link! 重新连接服务器时出错 No comment provided by engineer. + + Error registering for notifications + alert title + Error removing member 删除成员错误 @@ -3314,6 +3338,10 @@ This is your own one-time link! 同步连接错误 No comment provided by engineer. + + Error testing server connection + No comment provided by engineer. + Error updating group link 更新群组链接错误 @@ -3392,6 +3420,10 @@ This is your own one-time link! 展开 chat item action + + Expired + token status text + Export database 导出数据库 @@ -4131,6 +4163,26 @@ More improvements are coming soon! 界面颜色 No comment provided by engineer. + + Invalid + token status text + + + Invalid (bad token) + token status text + + + Invalid (expired) + token status text + + + Invalid (unregistered) + token status text + + + Invalid (wrong topic) + token status text + Invalid QR code 无效的二维码 @@ -4804,7 +4856,11 @@ This is your link for group %@! Mute 静音 - swipe action + notification label action + + + Mute all + notification label action Muted when inactive! @@ -4854,6 +4910,10 @@ This is your link for group %@! 网络状态 No comment provided by engineer. + + New + token status text + New Passcode 新密码 @@ -5049,6 +5109,10 @@ This is your link for group %@! No servers to send files. servers error + + No token! + alert title + No unread chats No comment provided by engineer. @@ -5086,10 +5150,18 @@ This is your link for group %@! 通知被禁用! No comment provided by engineer. + + Notifications error + alert title + Notifications privacy No comment provided by engineer. + + Notifications status + alert title + Now admins can: - delete members' messages. @@ -5509,6 +5581,18 @@ Error: %@ 请安全地保存密码,如果您丢失了密码,您将无法更改它。 No comment provided by engineer. + + Please try to disable and re-enable notfications. + token info + + + Please wait for token activation to complete. + token info + + + Please wait for token to be registered. + token info + Polish interface 波兰语界面 @@ -5897,6 +5981,18 @@ Enable in *Network & servers* settings. 减少电池使用量 No comment provided by engineer. + + Register + No comment provided by engineer. + + + Register notification token? + token info + + + Registered + token status text + Reject 拒绝 @@ -7125,6 +7221,10 @@ Enable in *Network & servers* settings. TCP 连接超时 No comment provided by engineer. + + TCP port for messaging + No comment provided by engineer. + TCP_KEEPCNT TCP_KEEPCNT @@ -7198,6 +7298,10 @@ Enable in *Network & servers* settings. 在步骤 %@ 上测试失败。 server test failure + + Test notifications + No comment provided by engineer. + Test server 测试服务器 @@ -7556,6 +7660,10 @@ You will be prompted to complete authentication before this feature is enabled.< 在连接时切换隐身模式。 No comment provided by engineer. + + Token status: %@. + token status + Toolbar opacity 工具栏不透明度 @@ -7720,7 +7828,7 @@ To connect, please ask your contact to create another connection link and check Unmute 取消静音 - swipe action + notification label action Unread @@ -7810,6 +7918,10 @@ To connect, please ask your contact to create another connection link and check 使用 SimpleX Chat 服务器? No comment provided by engineer. + + Use TCP port %@ when no port is specified. + No comment provided by engineer. + Use chat 使用聊天 @@ -7882,6 +7994,10 @@ To connect, please ask your contact to create another connection link and check 用一只手使用应用程序。 No comment provided by engineer. + + Use web port + No comment provided by engineer. + User selection 用户选择 @@ -8427,6 +8543,10 @@ Repeat connection request? 您发送了群组邀请 No comment provided by engineer. + + You should receive notifications. + token info + You will be connected to group when the group host's device is online, please wait or check later! 您将在组主设备上线时连接到该群组,请稍等或稍后再检查! @@ -9213,11 +9333,6 @@ Repeat connection request? time unit - - mute - 静音 - No comment provided by engineer. - never 从不 @@ -9443,11 +9558,6 @@ last received msg: %2$@ 未知状态 No comment provided by engineer. - - unmute - 取消静音 - No comment provided by engineer. - unprotected 未受保护 diff --git a/apps/ios/SimpleX NSE/NotificationService.swift b/apps/ios/SimpleX NSE/NotificationService.swift index c553132dd2..ba94463d61 100644 --- a/apps/ios/SimpleX NSE/NotificationService.swift +++ b/apps/ios/SimpleX NSE/NotificationService.swift @@ -790,7 +790,12 @@ func receivedMsgNtf(_ res: ChatResponse) async -> (String, NSENotificationData)? cItem = autoReceiveFile(file) ?? cItem } let ntf: NSENotificationData = (cInfo.ntfsEnabled(chatItem: cItem) && cItem.showNotification) ? .messageReceived(user, cInfo, cItem) : .noNtf - return (chatItem.chatId, ntf) + let chatIdOrMemberId = if case let .groupRcv(groupMember) = chatItem.chatItem.chatDir { + groupMember.id + } else { + chatItem.chatInfo.id + } + return (chatIdOrMemberId, ntf) } else { return nil } diff --git a/apps/ios/SimpleX.xcodeproj/project.pbxproj b/apps/ios/SimpleX.xcodeproj/project.pbxproj index 29476eb4fd..d94d874d80 100644 --- a/apps/ios/SimpleX.xcodeproj/project.pbxproj +++ b/apps/ios/SimpleX.xcodeproj/project.pbxproj @@ -171,17 +171,17 @@ 647F090E288EA27B00644C40 /* GroupMemberInfoView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 647F090D288EA27B00644C40 /* GroupMemberInfoView.swift */; }; 648010AB281ADD15009009B9 /* CIFileView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 648010AA281ADD15009009B9 /* CIFileView.swift */; }; 648679AB2BC96A74006456E7 /* ChatItemForwardingView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 648679AA2BC96A74006456E7 /* ChatItemForwardingView.swift */; }; - 649B28DD2CFE07CF00536B68 /* libffi.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 649B28D82CFE07CF00536B68 /* libffi.a */; }; - 649B28DE2CFE07CF00536B68 /* libHSsimplex-chat-6.3.0.2-Dof9ekfAaNQ8X3suD73WcH-ghc9.6.3.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 649B28D92CFE07CF00536B68 /* libHSsimplex-chat-6.3.0.2-Dof9ekfAaNQ8X3suD73WcH-ghc9.6.3.a */; }; - 649B28DF2CFE07CF00536B68 /* libgmpxx.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 649B28DA2CFE07CF00536B68 /* libgmpxx.a */; }; - 649B28E02CFE07CF00536B68 /* libHSsimplex-chat-6.3.0.2-Dof9ekfAaNQ8X3suD73WcH.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 649B28DB2CFE07CF00536B68 /* libHSsimplex-chat-6.3.0.2-Dof9ekfAaNQ8X3suD73WcH.a */; }; - 649B28E12CFE07CF00536B68 /* libgmp.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 649B28DC2CFE07CF00536B68 /* libgmp.a */; }; 649BCDA0280460FD00C3A862 /* ComposeImageView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 649BCD9F280460FD00C3A862 /* ComposeImageView.swift */; }; 649BCDA22805D6EF00C3A862 /* CIImageView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 649BCDA12805D6EF00C3A862 /* CIImageView.swift */; }; 64AA1C6927EE10C800AC7277 /* ContextItemView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 64AA1C6827EE10C800AC7277 /* ContextItemView.swift */; }; 64AA1C6C27F3537400AC7277 /* DeletedItemView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 64AA1C6B27F3537400AC7277 /* DeletedItemView.swift */; }; 64C06EB52A0A4A7C00792D4D /* ChatItemInfoView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 64C06EB42A0A4A7C00792D4D /* ChatItemInfoView.swift */; }; 64C3B0212A0D359700E19930 /* CustomTimePicker.swift in Sources */ = {isa = PBXBuildFile; fileRef = 64C3B0202A0D359700E19930 /* CustomTimePicker.swift */; }; + 64C8299D2D54AEEE006B9E89 /* libgmp.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 64C829982D54AEED006B9E89 /* libgmp.a */; }; + 64C8299E2D54AEEE006B9E89 /* libffi.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 64C829992D54AEEE006B9E89 /* libffi.a */; }; + 64C8299F2D54AEEE006B9E89 /* libHSsimplex-chat-6.3.0.3-2g9X994zhsoKwinyJQVzkZ-ghc9.6.3.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 64C8299A2D54AEEE006B9E89 /* libHSsimplex-chat-6.3.0.3-2g9X994zhsoKwinyJQVzkZ-ghc9.6.3.a */; }; + 64C829A02D54AEEE006B9E89 /* libHSsimplex-chat-6.3.0.3-2g9X994zhsoKwinyJQVzkZ.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 64C8299B2D54AEEE006B9E89 /* libHSsimplex-chat-6.3.0.3-2g9X994zhsoKwinyJQVzkZ.a */; }; + 64C829A12D54AEEE006B9E89 /* libgmpxx.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 64C8299C2D54AEEE006B9E89 /* libgmpxx.a */; }; 64D0C2C029F9688300B38D5F /* UserAddressView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 64D0C2BF29F9688300B38D5F /* UserAddressView.swift */; }; 64D0C2C229FA57AB00B38D5F /* UserAddressLearnMore.swift in Sources */ = {isa = PBXBuildFile; fileRef = 64D0C2C129FA57AB00B38D5F /* UserAddressLearnMore.swift */; }; 64D0C2C629FAC1EC00B38D5F /* AddContactLearnMore.swift in Sources */ = {isa = PBXBuildFile; fileRef = 64D0C2C529FAC1EC00B38D5F /* AddContactLearnMore.swift */; }; @@ -529,17 +529,17 @@ 648010AA281ADD15009009B9 /* CIFileView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CIFileView.swift; sourceTree = ""; }; 648679AA2BC96A74006456E7 /* ChatItemForwardingView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ChatItemForwardingView.swift; sourceTree = ""; }; 6493D667280ED77F007A76FB /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/Localizable.strings; sourceTree = ""; }; - 649B28D82CFE07CF00536B68 /* libffi.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = libffi.a; sourceTree = ""; }; - 649B28D92CFE07CF00536B68 /* libHSsimplex-chat-6.3.0.2-Dof9ekfAaNQ8X3suD73WcH-ghc9.6.3.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = "libHSsimplex-chat-6.3.0.2-Dof9ekfAaNQ8X3suD73WcH-ghc9.6.3.a"; sourceTree = ""; }; - 649B28DA2CFE07CF00536B68 /* libgmpxx.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = libgmpxx.a; sourceTree = ""; }; - 649B28DB2CFE07CF00536B68 /* libHSsimplex-chat-6.3.0.2-Dof9ekfAaNQ8X3suD73WcH.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = "libHSsimplex-chat-6.3.0.2-Dof9ekfAaNQ8X3suD73WcH.a"; sourceTree = ""; }; - 649B28DC2CFE07CF00536B68 /* libgmp.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = libgmp.a; sourceTree = ""; }; 649BCD9F280460FD00C3A862 /* ComposeImageView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ComposeImageView.swift; sourceTree = ""; }; 649BCDA12805D6EF00C3A862 /* CIImageView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CIImageView.swift; sourceTree = ""; }; 64AA1C6827EE10C800AC7277 /* ContextItemView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ContextItemView.swift; sourceTree = ""; }; 64AA1C6B27F3537400AC7277 /* DeletedItemView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DeletedItemView.swift; sourceTree = ""; }; 64C06EB42A0A4A7C00792D4D /* ChatItemInfoView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ChatItemInfoView.swift; sourceTree = ""; }; 64C3B0202A0D359700E19930 /* CustomTimePicker.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CustomTimePicker.swift; sourceTree = ""; }; + 64C829982D54AEED006B9E89 /* libgmp.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = libgmp.a; sourceTree = ""; }; + 64C829992D54AEEE006B9E89 /* libffi.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = libffi.a; sourceTree = ""; }; + 64C8299A2D54AEEE006B9E89 /* libHSsimplex-chat-6.3.0.3-2g9X994zhsoKwinyJQVzkZ-ghc9.6.3.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = "libHSsimplex-chat-6.3.0.3-2g9X994zhsoKwinyJQVzkZ-ghc9.6.3.a"; sourceTree = ""; }; + 64C8299B2D54AEEE006B9E89 /* libHSsimplex-chat-6.3.0.3-2g9X994zhsoKwinyJQVzkZ.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = "libHSsimplex-chat-6.3.0.3-2g9X994zhsoKwinyJQVzkZ.a"; sourceTree = ""; }; + 64C8299C2D54AEEE006B9E89 /* libgmpxx.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = libgmpxx.a; sourceTree = ""; }; 64D0C2BF29F9688300B38D5F /* UserAddressView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UserAddressView.swift; sourceTree = ""; }; 64D0C2C129FA57AB00B38D5F /* UserAddressLearnMore.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UserAddressLearnMore.swift; sourceTree = ""; }; 64D0C2C529FAC1EC00B38D5F /* AddContactLearnMore.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AddContactLearnMore.swift; sourceTree = ""; }; @@ -685,14 +685,14 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 649B28DF2CFE07CF00536B68 /* libgmpxx.a in Frameworks */, 5CE2BA93284534B000EC33A6 /* libiconv.tbd in Frameworks */, - 649B28E12CFE07CF00536B68 /* libgmp.a in Frameworks */, 5CE2BA94284534BB00EC33A6 /* libz.tbd in Frameworks */, - 649B28E02CFE07CF00536B68 /* libHSsimplex-chat-6.3.0.2-Dof9ekfAaNQ8X3suD73WcH.a in Frameworks */, + 64C8299D2D54AEEE006B9E89 /* libgmp.a in Frameworks */, + 64C8299E2D54AEEE006B9E89 /* libffi.a in Frameworks */, + 64C829A12D54AEEE006B9E89 /* libgmpxx.a in Frameworks */, + 64C8299F2D54AEEE006B9E89 /* libHSsimplex-chat-6.3.0.3-2g9X994zhsoKwinyJQVzkZ-ghc9.6.3.a in Frameworks */, + 64C829A02D54AEEE006B9E89 /* libHSsimplex-chat-6.3.0.3-2g9X994zhsoKwinyJQVzkZ.a in Frameworks */, CE38A29C2C3FCD72005ED185 /* SwiftyGif in Frameworks */, - 649B28DE2CFE07CF00536B68 /* libHSsimplex-chat-6.3.0.2-Dof9ekfAaNQ8X3suD73WcH-ghc9.6.3.a in Frameworks */, - 649B28DD2CFE07CF00536B68 /* libffi.a in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -769,11 +769,11 @@ 5C764E5C279C70B7000C6508 /* Libraries */ = { isa = PBXGroup; children = ( - 649B28D82CFE07CF00536B68 /* libffi.a */, - 649B28DC2CFE07CF00536B68 /* libgmp.a */, - 649B28DA2CFE07CF00536B68 /* libgmpxx.a */, - 649B28D92CFE07CF00536B68 /* libHSsimplex-chat-6.3.0.2-Dof9ekfAaNQ8X3suD73WcH-ghc9.6.3.a */, - 649B28DB2CFE07CF00536B68 /* libHSsimplex-chat-6.3.0.2-Dof9ekfAaNQ8X3suD73WcH.a */, + 64C829992D54AEEE006B9E89 /* libffi.a */, + 64C829982D54AEED006B9E89 /* libgmp.a */, + 64C8299C2D54AEEE006B9E89 /* libgmpxx.a */, + 64C8299A2D54AEEE006B9E89 /* libHSsimplex-chat-6.3.0.3-2g9X994zhsoKwinyJQVzkZ-ghc9.6.3.a */, + 64C8299B2D54AEEE006B9E89 /* libHSsimplex-chat-6.3.0.3-2g9X994zhsoKwinyJQVzkZ.a */, ); path = Libraries; sourceTree = ""; @@ -1957,7 +1957,7 @@ CLANG_TIDY_MISC_REDUNDANT_EXPRESSION = YES; CODE_SIGN_ENTITLEMENTS = "SimpleX (iOS).entitlements"; CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 261; + CURRENT_PROJECT_VERSION = 262; DEAD_CODE_STRIPPING = YES; DEVELOPMENT_TEAM = 5NN7GUYB6T; ENABLE_BITCODE = NO; @@ -2006,7 +2006,7 @@ CLANG_TIDY_MISC_REDUNDANT_EXPRESSION = YES; CODE_SIGN_ENTITLEMENTS = "SimpleX (iOS).entitlements"; CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 261; + CURRENT_PROJECT_VERSION = 262; DEAD_CODE_STRIPPING = YES; DEVELOPMENT_TEAM = 5NN7GUYB6T; ENABLE_BITCODE = NO; @@ -2047,7 +2047,7 @@ buildSettings = { ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 261; + CURRENT_PROJECT_VERSION = 262; DEVELOPMENT_TEAM = 5NN7GUYB6T; GENERATE_INFOPLIST_FILE = YES; IPHONEOS_DEPLOYMENT_TARGET = 15.0; @@ -2067,7 +2067,7 @@ buildSettings = { ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 261; + CURRENT_PROJECT_VERSION = 262; DEVELOPMENT_TEAM = 5NN7GUYB6T; GENERATE_INFOPLIST_FILE = YES; IPHONEOS_DEPLOYMENT_TARGET = 15.0; @@ -2092,7 +2092,7 @@ CODE_SIGN_ENTITLEMENTS = "SimpleX NSE/SimpleX NSE.entitlements"; CODE_SIGN_IDENTITY = "Apple Development"; CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 261; + CURRENT_PROJECT_VERSION = 262; DEVELOPMENT_TEAM = 5NN7GUYB6T; ENABLE_BITCODE = NO; GCC_OPTIMIZATION_LEVEL = s; @@ -2129,7 +2129,7 @@ CODE_SIGN_ENTITLEMENTS = "SimpleX NSE/SimpleX NSE.entitlements"; CODE_SIGN_IDENTITY = "Apple Development"; CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 261; + CURRENT_PROJECT_VERSION = 262; DEVELOPMENT_TEAM = 5NN7GUYB6T; ENABLE_BITCODE = NO; ENABLE_CODE_COVERAGE = NO; @@ -2166,7 +2166,7 @@ CLANG_TIDY_BUGPRONE_REDUNDANT_BRANCH_CONDITION = YES; CLANG_TIDY_MISC_REDUNDANT_EXPRESSION = YES; CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 261; + CURRENT_PROJECT_VERSION = 262; DEFINES_MODULE = YES; DEVELOPMENT_TEAM = 5NN7GUYB6T; DYLIB_COMPATIBILITY_VERSION = 1; @@ -2217,7 +2217,7 @@ CLANG_TIDY_BUGPRONE_REDUNDANT_BRANCH_CONDITION = YES; CLANG_TIDY_MISC_REDUNDANT_EXPRESSION = YES; CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 261; + CURRENT_PROJECT_VERSION = 262; DEFINES_MODULE = YES; DEVELOPMENT_TEAM = 5NN7GUYB6T; DYLIB_COMPATIBILITY_VERSION = 1; @@ -2268,7 +2268,7 @@ CLANG_CXX_LANGUAGE_STANDARD = "gnu++20"; CODE_SIGN_ENTITLEMENTS = "SimpleX SE/SimpleX SE.entitlements"; CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 261; + CURRENT_PROJECT_VERSION = 262; DEVELOPMENT_TEAM = 5NN7GUYB6T; ENABLE_USER_SCRIPT_SANDBOXING = YES; GCC_C_LANGUAGE_STANDARD = gnu17; @@ -2302,7 +2302,7 @@ CLANG_CXX_LANGUAGE_STANDARD = "gnu++20"; CODE_SIGN_ENTITLEMENTS = "SimpleX SE/SimpleX SE.entitlements"; CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 261; + CURRENT_PROJECT_VERSION = 262; DEVELOPMENT_TEAM = 5NN7GUYB6T; ENABLE_USER_SCRIPT_SANDBOXING = YES; GCC_C_LANGUAGE_STANDARD = gnu17; diff --git a/apps/ios/SimpleXChat/APITypes.swift b/apps/ios/SimpleXChat/APITypes.swift index 3a5f9ec995..bd022165f0 100644 --- a/apps/ios/SimpleXChat/APITypes.swift +++ b/apps/ios/SimpleXChat/APITypes.swift @@ -55,6 +55,8 @@ public enum ChatCommand { case apiUpdateChatItem(type: ChatType, id: Int64, itemId: Int64, updatedMessage: UpdatedMessage, live: Bool) case apiDeleteChatItem(type: ChatType, id: Int64, itemIds: [Int64], mode: CIDeleteMode) case apiDeleteMemberChatItem(groupId: Int64, itemIds: [Int64]) + case apiArchiveReceivedReports(groupId: Int64) + case apiDeleteReceivedReports(groupId: Int64, itemIds: [Int64], mode: CIDeleteMode) case apiChatItemReaction(type: ChatType, id: Int64, itemId: Int64, add: Bool, reaction: MsgReaction) case apiGetReactionMembers(userId: Int64, groupId: Int64, itemId: Int64, reaction: MsgReaction) case apiPlanForwardChatItems(toChatType: ChatType, toChatId: Int64, itemIds: [Int64]) @@ -62,6 +64,7 @@ public enum ChatCommand { case apiGetNtfToken case apiRegisterToken(token: DeviceToken, notificationMode: NotificationsMode) case apiVerifyToken(token: DeviceToken, nonce: String, code: String) + case apiCheckToken(token: DeviceToken) case apiDeleteToken(token: DeviceToken) case apiGetNtfConns(nonce: String, encNtfInfo: String) case apiGetConnNtfMessages(connIds: [String]) @@ -229,6 +232,8 @@ public enum ChatCommand { case let .apiUpdateChatItem(type, id, itemId, um, live): return "/_update item \(ref(type, id)) \(itemId) live=\(onOff(live)) \(um.cmdString)" case let .apiDeleteChatItem(type, id, itemIds, mode): return "/_delete item \(ref(type, id)) \(itemIds.map({ "\($0)" }).joined(separator: ",")) \(mode.rawValue)" case let .apiDeleteMemberChatItem(groupId, itemIds): return "/_delete member item #\(groupId) \(itemIds.map({ "\($0)" }).joined(separator: ","))" + case let .apiArchiveReceivedReports(groupId): return "/_archive reports #\(groupId)" + case let .apiDeleteReceivedReports(groupId, itemIds, mode): return "/_delete reports #\(groupId) \(itemIds.map({ "\($0)" }).joined(separator: ",")) \(mode.rawValue)" case let .apiChatItemReaction(type, id, itemId, add, reaction): return "/_reaction \(ref(type, id)) \(itemId) \(onOff(add)) \(encodeJSON(reaction))" case let .apiGetReactionMembers(userId, groupId, itemId, reaction): return "/_reaction members \(userId) #\(groupId) \(itemId) \(encodeJSON(reaction))" case let .apiPlanForwardChatItems(type, id, itemIds): return "/_forward plan \(ref(type, id)) \(itemIds.map({ "\($0)" }).joined(separator: ","))" @@ -238,6 +243,7 @@ public enum ChatCommand { case .apiGetNtfToken: return "/_ntf get " case let .apiRegisterToken(token, notificationMode): return "/_ntf register \(token.cmdString) \(notificationMode.rawValue)" case let .apiVerifyToken(token, nonce, code): return "/_ntf verify \(token.cmdString) \(nonce) \(code)" + case let .apiCheckToken(token): return "/_ntf check \(token.cmdString)" case let .apiDeleteToken(token): return "/_ntf delete \(token.cmdString)" case let .apiGetNtfConns(nonce, encNtfInfo): return "/_ntf conns \(nonce) \(encNtfInfo)" case let .apiGetConnNtfMessages(connIds): return "/_ntf conn messages \(connIds.joined(separator: ","))" @@ -402,6 +408,8 @@ public enum ChatCommand { case .apiDeleteChatItem: return "apiDeleteChatItem" case .apiConnectContactViaAddress: return "apiConnectContactViaAddress" case .apiDeleteMemberChatItem: return "apiDeleteMemberChatItem" + case .apiArchiveReceivedReports: return "apiArchiveReceivedReports" + case .apiDeleteReceivedReports: return "apiDeleteReceivedReports" case .apiChatItemReaction: return "apiChatItemReaction" case .apiGetReactionMembers: return "apiGetReactionMembers" case .apiPlanForwardChatItems: return "apiPlanForwardChatItems" @@ -409,6 +417,7 @@ public enum ChatCommand { case .apiGetNtfToken: return "apiGetNtfToken" case .apiRegisterToken: return "apiRegisterToken" case .apiVerifyToken: return "apiVerifyToken" + case .apiCheckToken: return "apiCheckToken" case .apiDeleteToken: return "apiDeleteToken" case .apiGetNtfConns: return "apiGetNtfConns" case .apiGetConnNtfMessages: return "apiGetConnNtfMessages" diff --git a/apps/ios/SimpleXChat/ChatTypes.swift b/apps/ios/SimpleXChat/ChatTypes.swift index dba26198c1..58bbfdbfd8 100644 --- a/apps/ios/SimpleXChat/ChatTypes.swift +++ b/apps/ios/SimpleXChat/ChatTypes.swift @@ -711,6 +711,7 @@ public enum GroupFeature: String, Decodable, Feature, Hashable { case voice case files case simplexLinks + case reports case history public var id: Self { self } @@ -731,6 +732,7 @@ public enum GroupFeature: String, Decodable, Feature, Hashable { case .voice: true case .files: true case .simplexLinks: true + case .reports: false case .history: false } } @@ -744,6 +746,7 @@ public enum GroupFeature: String, Decodable, Feature, Hashable { case .voice: return NSLocalizedString("Voice messages", comment: "chat feature") case .files: return NSLocalizedString("Files and media", comment: "chat feature") case .simplexLinks: return NSLocalizedString("SimpleX links", comment: "chat feature") + case .reports: return NSLocalizedString("Member reports", comment: "chat feature") case .history: return NSLocalizedString("Visible history", comment: "chat feature") } } @@ -757,6 +760,7 @@ public enum GroupFeature: String, Decodable, Feature, Hashable { case .voice: return "mic" case .files: return "doc" case .simplexLinks: return "link.circle" + case .reports: return "flag" case .history: return "clock" } } @@ -770,6 +774,7 @@ public enum GroupFeature: String, Decodable, Feature, Hashable { case .voice: return "mic.fill" case .files: return "doc.fill" case .simplexLinks: return "link.circle.fill" + case .reports: return "flag.fill" case .history: return "clock.fill" } } @@ -819,6 +824,11 @@ public enum GroupFeature: String, Decodable, Feature, Hashable { case .on: return "Allow to send SimpleX links." case .off: return "Prohibit sending SimpleX links." } + case .reports: + switch enabled { + case .on: return "Allow to report messsages to moderators." + case .off: return "Prohibit reporting messages to moderators." + } case .history: switch enabled { case .on: return "Send up to 100 last messages to new members." @@ -862,6 +872,11 @@ public enum GroupFeature: String, Decodable, Feature, Hashable { case .on: return "Members can send SimpleX links." case .off: return "SimpleX links are prohibited." } + case .reports: + switch enabled { + case .on: return "Members can report messsages to moderators." + case .off: return "Reporting messages to moderators is prohibited." + } case .history: switch enabled { case .on: return "Up to 100 last messages are sent to new members." @@ -1007,6 +1022,7 @@ public struct FullGroupPreferences: Decodable, Equatable, Hashable { public var voice: RoleGroupPreference public var files: RoleGroupPreference public var simplexLinks: RoleGroupPreference + public var reports: GroupPreference public var history: GroupPreference public init( @@ -1017,6 +1033,7 @@ public struct FullGroupPreferences: Decodable, Equatable, Hashable { voice: RoleGroupPreference, files: RoleGroupPreference, simplexLinks: RoleGroupPreference, + reports: GroupPreference, history: GroupPreference ) { self.timedMessages = timedMessages @@ -1026,6 +1043,7 @@ public struct FullGroupPreferences: Decodable, Equatable, Hashable { self.voice = voice self.files = files self.simplexLinks = simplexLinks + self.reports = reports self.history = history } @@ -1037,6 +1055,7 @@ public struct FullGroupPreferences: Decodable, Equatable, Hashable { voice: RoleGroupPreference(enable: .on, role: nil), files: RoleGroupPreference(enable: .on, role: nil), simplexLinks: RoleGroupPreference(enable: .on, role: nil), + reports: GroupPreference(enable: .on), history: GroupPreference(enable: .on) ) } @@ -1049,6 +1068,7 @@ public struct GroupPreferences: Codable, Hashable { public var voice: RoleGroupPreference? public var files: RoleGroupPreference? public var simplexLinks: RoleGroupPreference? + public var reports: GroupPreference? public var history: GroupPreference? public init( @@ -1059,6 +1079,7 @@ public struct GroupPreferences: Codable, Hashable { voice: RoleGroupPreference? = nil, files: RoleGroupPreference? = nil, simplexLinks: RoleGroupPreference? = nil, + reports: GroupPreference? = nil, history: GroupPreference? = nil ) { self.timedMessages = timedMessages @@ -1068,6 +1089,7 @@ public struct GroupPreferences: Codable, Hashable { self.voice = voice self.files = files self.simplexLinks = simplexLinks + self.reports = reports self.history = history } @@ -1079,6 +1101,7 @@ public struct GroupPreferences: Codable, Hashable { voice: RoleGroupPreference(enable: .on, role: nil), files: RoleGroupPreference(enable: .on, role: nil), simplexLinks: RoleGroupPreference(enable: .on, role: nil), + reports: GroupPreference(enable: .on), history: GroupPreference(enable: .on) ) } @@ -1092,6 +1115,7 @@ public func toGroupPreferences(_ fullPreferences: FullGroupPreferences) -> Group voice: fullPreferences.voice, files: fullPreferences.files, simplexLinks: fullPreferences.simplexLinks, + reports: fullPreferences.reports, history: fullPreferences.history ) } @@ -2411,13 +2435,6 @@ public struct ChatItemDeletion: Decodable, Hashable { public struct AChatItem: Decodable, Hashable { public var chatInfo: ChatInfo public var chatItem: ChatItem - - public var chatId: String { - if case let .groupRcv(groupMember) = chatItem.chatDir { - return groupMember.id - } - return chatInfo.id - } } public struct CIMentionMember: Decodable, Hashable { @@ -4124,9 +4141,61 @@ public enum NtfTknStatus: String, Decodable, Hashable { case new = "NEW" case registered = "REGISTERED" case invalid = "INVALID" + case invalidBad = "INVALID,BAD" + case invalidTopic = "INVALID,TOPIC" + case invalidExpired = "INVALID,EXPIRED" + case invalidUnregistered = "INVALID,UNREGISTERED" case confirmed = "CONFIRMED" case active = "ACTIVE" case expired = "EXPIRED" + + public var workingToken: Bool { + switch self { + case .new: true + case .registered: true + case .invalid: false + case .invalidBad: false + case .invalidTopic: false + case .invalidExpired: false + case .invalidUnregistered: false + case .confirmed: true + case .active: true + case .expired: false + } + } + + public var text: String { + switch self { + case .new: NSLocalizedString("New", comment: "token status text") + case .registered: NSLocalizedString("Registered", comment: "token status text") + case .invalid: NSLocalizedString("Invalid", comment: "token status text") + case .invalidBad: NSLocalizedString("Invalid (bad token)", comment: "token status text") + case .invalidTopic: NSLocalizedString("Invalid (wrong topic)", comment: "token status text") + case .invalidExpired: NSLocalizedString("Invalid (expired)", comment: "token status text") + case .invalidUnregistered: NSLocalizedString("Invalid (unregistered)", comment: "token status text") + case .confirmed: NSLocalizedString("Confirmed", comment: "token status text") + case .active: NSLocalizedString("Active", comment: "token status text") + case .expired: NSLocalizedString("Expired", comment: "token status text") + } + } + + public func info(register: Bool) -> String { + switch self { + case .new: return NSLocalizedString("Please wait for token to be registered.", comment: "token info") + case .registered: fallthrough + case .confirmed: return NSLocalizedString("Please wait for token activation to complete.", comment: "token info") + case .active: return NSLocalizedString("You should receive notifications.", comment: "token info") + case .invalid: fallthrough + case .invalidBad: fallthrough + case .invalidTopic: fallthrough + case .invalidExpired: fallthrough + case .invalidUnregistered: fallthrough + case .expired: + return register + ? NSLocalizedString("Register notification token?", comment: "token info") + : NSLocalizedString("Please try to disable and re-enable notfications.", comment: "token info") + } + } } public struct SndFileTransfer: Decodable, Hashable { diff --git a/apps/ios/SimpleXChat/ChatUtils.swift b/apps/ios/SimpleXChat/ChatUtils.swift index 2bf861f437..6cbc76ec98 100644 --- a/apps/ios/SimpleXChat/ChatUtils.swift +++ b/apps/ios/SimpleXChat/ChatUtils.swift @@ -27,6 +27,7 @@ extension ChatLike { case .files: p.files.on(for: groupInfo.membership) case .simplexLinks: p.simplexLinks.on(for: groupInfo.membership) case .history: p.history.on + case .reports: p.reports.on } } else { return true diff --git a/apps/ios/SimpleXChat/Notifications.swift b/apps/ios/SimpleXChat/Notifications.swift index a922e3a816..97cc633115 100644 --- a/apps/ios/SimpleXChat/Notifications.swift +++ b/apps/ios/SimpleXChat/Notifications.swift @@ -203,6 +203,11 @@ func hideSecrets(_ cItem: ChatItem) -> String { } return res } else { - return cItem.text + let mc = cItem.content.msgContent + if case let .report(text, reason) = mc { + return NSLocalizedString("Report: \(text.isEmpty ? reason.text : text)", comment: "report in notification") + } else { + return cItem.text + } } } diff --git a/apps/ios/bg.lproj/Localizable.strings b/apps/ios/bg.lproj/Localizable.strings index bfc4b50f5d..b697b58222 100644 --- a/apps/ios/bg.lproj/Localizable.strings +++ b/apps/ios/bg.lproj/Localizable.strings @@ -1135,16 +1135,19 @@ "Correct name to %@?" = "Поправи име на %@?"; /* No comment provided by engineer. */ -"Create" = "Създай"; +"Create" = "Създаване"; /* No comment provided by engineer. */ -"Create a group using a random profile." = "Създай група с автоматично генериран профилл."; +"Create 1-time link" = "Създаване на еднократна препратка"; + +/* No comment provided by engineer. */ +"Create a group using a random profile." = "Създаване група с автоматично създаден профил."; /* server test step */ -"Create file" = "Създай файл"; +"Create file" = "Създаване на файл"; /* No comment provided by engineer. */ -"Create group" = "Създай група"; +"Create group" = "Създаване на група"; /* No comment provided by engineer. */ "Create group link" = "Създай групов линк"; @@ -1165,7 +1168,7 @@ "Create secret group" = "Създай тайна група"; /* No comment provided by engineer. */ -"Create SimpleX address" = "Създай SimpleX адрес"; +"Create SimpleX address" = "Създаване на адрес в SimpleX"; /* No comment provided by engineer. */ "Create your profile" = "Създай своя профил"; @@ -2637,7 +2640,7 @@ /* No comment provided by engineer. */ "Multiple chat profiles" = "Множество профили за чат"; -/* swipe action */ +/* notification label action */ "Mute" = "Без звук"; /* No comment provided by engineer. */ @@ -3980,7 +3983,7 @@ /* authentication reason */ "Unlock app" = "Отключи приложението"; -/* swipe action */ +/* notification label action */ "Unmute" = "Уведомявай"; /* swipe action */ @@ -4479,7 +4482,7 @@ "Your settings" = "Вашите настройки"; /* No comment provided by engineer. */ -"Your SimpleX address" = "Вашият SimpleX адрес"; +"Your SimpleX address" = "Вашият адрес в SimpleX"; /* No comment provided by engineer. */ "Your SMP servers" = "Вашите SMP сървъри"; diff --git a/apps/ios/cs.lproj/Localizable.strings b/apps/ios/cs.lproj/Localizable.strings index 478311cef1..eef7930c6f 100644 --- a/apps/ios/cs.lproj/Localizable.strings +++ b/apps/ios/cs.lproj/Localizable.strings @@ -2036,7 +2036,7 @@ /* No comment provided by engineer. */ "Multiple chat profiles" = "Více chatovacích profilů"; -/* swipe action */ +/* notification label action */ "Mute" = "Ztlumit"; /* No comment provided by engineer. */ @@ -3124,7 +3124,7 @@ /* authentication reason */ "Unlock app" = "Odemknout aplikaci"; -/* swipe action */ +/* notification label action */ "Unmute" = "Zrušit ztlumení"; /* swipe action */ diff --git a/apps/ios/de.lproj/Localizable.strings b/apps/ios/de.lproj/Localizable.strings index 13c07528a7..874d8c9c88 100644 --- a/apps/ios/de.lproj/Localizable.strings +++ b/apps/ios/de.lproj/Localizable.strings @@ -1,6 +1,9 @@ /* No comment provided by engineer. */ "\n" = "\n"; +/* No comment provided by engineer. */ +" " = " "; + /* No comment provided by engineer. */ " (" = " ("; @@ -199,6 +202,9 @@ /* time interval */ "%d sec" = "%d s"; +/* delete after time */ +"%d seconds(s)" = "%d Sekunde(n)"; + /* integrity error chat item */ "%d skipped message(s)" = "%d übersprungene Nachricht(en)"; @@ -288,7 +294,7 @@ /* delete after time time interval */ -"1 day" = "täglich"; +"1 day" = "Älter als ein Tag"; /* time interval */ "1 hour" = "1 Stunde"; @@ -298,11 +304,14 @@ /* delete after time time interval */ -"1 month" = "monatlich"; +"1 month" = "Älter als einen Monat"; /* delete after time time interval */ -"1 week" = "wöchentlich"; +"1 week" = "Älter als eine Woche"; + +/* delete after time */ +"1 year" = "Älter als ein Jahr"; /* No comment provided by engineer. */ "1-time link" = "Einmal-Link"; @@ -397,6 +406,9 @@ /* No comment provided by engineer. */ "Add friends" = "Freunde aufnehmen"; +/* No comment provided by engineer. */ +"Add list" = "Liste hinzufügen"; + /* No comment provided by engineer. */ "Add profile" = "Profil hinzufügen"; @@ -412,6 +424,9 @@ /* No comment provided by engineer. */ "Add to another device" = "Einem anderen Gerät hinzufügen"; +/* No comment provided by engineer. */ +"Add to list" = "Zur Liste hinzufügen"; + /* No comment provided by engineer. */ "Add welcome message" = "Begrüßungsmeldung hinzufügen"; @@ -469,12 +484,18 @@ /* chat item text */ "agreeing encryption…" = "Verschlüsselung zustimmen…"; +/* No comment provided by engineer. */ +"All" = "Alle"; + /* No comment provided by engineer. */ "All app data is deleted." = "Werden die App-Daten komplett gelöscht."; /* No comment provided by engineer. */ "All chats and messages will be deleted - this cannot be undone!" = "Es werden alle Chats und Nachrichten gelöscht. Dies kann nicht rückgängig gemacht werden!"; +/* alert message */ +"All chats will be removed from the list (text), and the list deleted." = "Alle Chats werden von der Liste (text) entfernt und danach wird die Liste gelöscht."; + /* No comment provided by engineer. */ "All data is erased when it is entered." = "Alle Daten werden gelöscht, sobald dieser eingegeben wird."; @@ -601,6 +622,9 @@ /* No comment provided by engineer. */ "and %lld other events" = "und %lld weitere Ereignisse"; +/* report reason */ +"Another reason" = "Anderer Grund"; + /* No comment provided by engineer. */ "Answer call" = "Anruf annehmen"; @@ -616,6 +640,9 @@ /* No comment provided by engineer. */ "App encrypts new local files (except videos)." = "Neue lokale Dateien (außer Video-Dateien) werden von der App verschlüsselt."; +/* No comment provided by engineer. */ +"App group:" = "App-Gruppe:"; + /* No comment provided by engineer. */ "App icon" = "App-Icon"; @@ -643,18 +670,33 @@ /* No comment provided by engineer. */ "Apply to" = "Anwenden auf"; +/* No comment provided by engineer. */ +"Archive" = "Archiv"; + /* No comment provided by engineer. */ "Archive and upload" = "Archivieren und Hochladen"; /* No comment provided by engineer. */ "Archive contacts to chat later." = "Kontakte für spätere Chats archivieren."; +/* No comment provided by engineer. */ +"Archive report" = "Meldung archivieren"; + +/* No comment provided by engineer. */ +"Archive report?" = "Meldung archivieren?"; + /* No comment provided by engineer. */ "Archived contacts" = "Archivierte Kontakte"; +/* No comment provided by engineer. */ +"archived report" = "Archivierte Meldung"; + /* No comment provided by engineer. */ "Archiving database" = "Datenbank wird archiviert"; +/* No comment provided by engineer. */ +"Ask" = "Fragen"; + /* No comment provided by engineer. */ "Attach" = "Anhängen"; @@ -814,6 +856,9 @@ /* No comment provided by engineer. */ "Business chats" = "Geschäftliche Chats"; +/* No comment provided by engineer. */ +"Businesses" = "Unternehmen"; + /* No comment provided by engineer. */ "By chat profile (default) or [by connection](https://simplex.chat/blog/20230204-simplex-chat-v4-5-user-chat-profiles.html#transport-isolation) (BETA)." = "Per Chat-Profil (Voreinstellung) oder [per Verbindung](https://simplex.chat/blog/20230204-simplex-chat-v4-5-user-chat-profiles.html#transport-isolation) (BETA)."; @@ -884,6 +929,9 @@ /* No comment provided by engineer. */ "Change" = "Ändern"; +/* alert title */ +"Change automatic message deletion?" = "Automatisches Löschen von Nachrichten ändern?"; + /* authentication reason */ "Change chat profiles" = "Chat-Profile wechseln"; @@ -1032,6 +1080,9 @@ /* No comment provided by engineer. */ "Clear conversation?" = "Chat-Inhalte entfernen?"; +/* No comment provided by engineer. */ +"Clear or delete group?" = "Gruppe entfernen oder löschen?"; + /* No comment provided by engineer. */ "Clear private notes?" = "Private Notizen entfernen?"; @@ -1047,6 +1098,9 @@ /* No comment provided by engineer. */ "colored" = "farbig"; +/* report reason */ +"Community guidelines violation" = "Verstoß gegen die Gemeinschaftsrichtlinien"; + /* server test step */ "Compare file" = "Datei vergleichen"; @@ -1218,6 +1272,9 @@ /* No comment provided by engineer. */ "Connection and servers status." = "Verbindungs- und Server-Status."; +/* No comment provided by engineer. */ +"Connection blocked" = "Verbindung blockiert"; + /* No comment provided by engineer. */ "Connection error" = "Verbindungsfehler"; @@ -1227,12 +1284,21 @@ /* chat list item title (it should not be shown */ "connection established" = "Verbindung hergestellt"; +/* No comment provided by engineer. */ +"Connection is blocked by server operator:\n%@" = "Die Verbindung wurde vom Server-Betreiber blockiert:\n%@"; + +/* No comment provided by engineer. */ +"Connection not ready." = "Verbindung noch nicht bereit."; + /* No comment provided by engineer. */ "Connection notifications" = "Verbindungsbenachrichtigungen"; /* No comment provided by engineer. */ "Connection request sent!" = "Verbindungsanfrage wurde gesendet!"; +/* No comment provided by engineer. */ +"Connection requires encryption renegotiation." = "Die Verbindung erfordert eine Neuverhandlung der Verschlüsselung."; + /* No comment provided by engineer. */ "Connection security" = "Verbindungs-Sicherheit"; @@ -1293,6 +1359,9 @@ /* No comment provided by engineer. */ "Contacts can mark messages for deletion; you will be able to view them." = "Ihre Kontakte können Nachrichten zum Löschen markieren. Sie können diese Nachrichten trotzdem anschauen."; +/* blocking reason */ +"Content violates conditions of use" = "Inhalt verletzt Nutzungsbedingungen"; + /* No comment provided by engineer. */ "Continue" = "Weiter"; @@ -1335,6 +1404,9 @@ /* No comment provided by engineer. */ "Create link" = "Link erzeugen"; +/* No comment provided by engineer. */ +"Create list" = "Liste erstellen"; + /* No comment provided by engineer. */ "Create new profile in [desktop app](https://simplex.chat/downloads/). 💻" = "Neues Profil in der [Desktop-App] erstellen (https://simplex.chat/downloads/). 💻"; @@ -1514,6 +1586,9 @@ /* No comment provided by engineer. */ "Delete chat" = "Chat löschen"; +/* No comment provided by engineer. */ +"Delete chat messages from your device." = "Chat-Nachrichten von Ihrem Gerät löschen."; + /* No comment provided by engineer. */ "Delete chat profile" = "Chat-Profil löschen"; @@ -1568,6 +1643,9 @@ /* No comment provided by engineer. */ "Delete link?" = "Link löschen?"; +/* alert title */ +"Delete list?" = "Liste löschen?"; + /* No comment provided by engineer. */ "Delete member message?" = "Nachricht des Mitglieds löschen?"; @@ -1598,6 +1676,9 @@ /* server test step */ "Delete queue" = "Lösche Warteschlange"; +/* No comment provided by engineer. */ +"Delete report" = "Meldung löschen"; + /* No comment provided by engineer. */ "Delete up to 20 messages at once." = "Löschen Sie bis zu 20 Nachrichten auf einmal."; @@ -1706,6 +1787,12 @@ /* No comment provided by engineer. */ "Disable (keep overrides)" = "Deaktivieren (vorgenommene Einstellungen bleiben erhalten)"; +/* alert title */ +"Disable automatic message deletion?" = "Automatisches Löschen von Nachrichten deaktivieren?"; + +/* alert button */ +"Disable delete messages" = "Löschen von Nachrichten deaktivieren"; + /* No comment provided by engineer. */ "Disable for all" = "Für Alle deaktivieren"; @@ -1766,6 +1853,9 @@ /* No comment provided by engineer. */ "Do NOT use SimpleX for emergency calls." = "SimpleX NICHT für Notrufe nutzen."; +/* No comment provided by engineer. */ +"Documents:" = "Dokumente:"; + /* No comment provided by engineer. */ "Don't create address" = "Keine Adresse erstellt"; @@ -1775,6 +1865,9 @@ /* No comment provided by engineer. */ "Don't show again" = "Nicht nochmals anzeigen"; +/* No comment provided by engineer. */ +"Done" = "Fertig"; + /* No comment provided by engineer. */ "Downgrade and open chat" = "Datenbank herabstufen und den Chat öffnen"; @@ -1956,6 +2049,9 @@ /* chat item text */ "encryption re-negotiation required for %@" = "Neuaushandlung der Verschlüsselung von %@ notwendig"; +/* No comment provided by engineer. */ +"Encryption renegotiation in progress." = "Die Neuverhandlung der Verschlüsselung läuft."; + /* No comment provided by engineer. */ "ended" = "beendet"; @@ -2043,6 +2139,9 @@ /* No comment provided by engineer. */ "Error creating group link" = "Fehler beim Erzeugen des Gruppen-Links"; +/* alert title */ +"Error creating list" = "Fehler beim Erstellen der Liste"; + /* No comment provided by engineer. */ "Error creating member contact" = "Fehler beim Anlegen eines Mitglied-Kontaktes"; @@ -2052,6 +2151,9 @@ /* No comment provided by engineer. */ "Error creating profile!" = "Fehler beim Erstellen des Profils!"; +/* No comment provided by engineer. */ +"Error creating report" = "Fehler beim Erstellen der Meldung"; + /* No comment provided by engineer. */ "Error decrypting file" = "Fehler beim Entschlüsseln der Datei"; @@ -2121,9 +2223,15 @@ /* No comment provided by engineer. */ "Error removing member" = "Fehler beim Entfernen des Mitglieds"; +/* alert title */ +"Error reordering lists" = "Fehler beim Umsortieren der Listen"; + /* No comment provided by engineer. */ "Error resetting statistics" = "Fehler beim Zurücksetzen der Statistiken"; +/* alert title */ +"Error saving chat list" = "Fehler beim Speichern der Chat-Liste"; + /* No comment provided by engineer. */ "Error saving group profile" = "Fehler beim Speichern des Gruppenprofils"; @@ -2259,12 +2367,18 @@ /* swipe action */ "Favorite" = "Favorit"; +/* No comment provided by engineer. */ +"Favorites" = "Favoriten"; + /* file error alert title */ "File error" = "Datei-Fehler"; /* alert message */ "File errors:\n%@" = "Datei-Fehler:\n%@"; +/* file error text */ +"File is blocked by server operator:\n(info.reason.text)." = "Datei wurde vom Server-Betreiber blockiert:\n(info.reason.text)."; + /* file error text */ "File not found - most likely file was deleted or cancelled." = "Datei nicht gefunden - höchstwahrscheinlich wurde die Datei gelöscht oder der Transfer abgebrochen."; @@ -2496,6 +2610,9 @@ /* No comment provided by engineer. */ "Group will be deleted for you - this cannot be undone!" = "Die Gruppe wird nur bei Ihnen gelöscht. Dies kann nicht rückgängig gemacht werden!"; +/* No comment provided by engineer. */ +"Groups" = "Gruppen"; + /* No comment provided by engineer. */ "Help" = "Hilfe"; @@ -2535,6 +2652,9 @@ /* No comment provided by engineer. */ "How it helps privacy" = "Wie es die Privatsphäre schützt"; +/* alert button */ +"How it works" = "Wie es funktioniert"; + /* No comment provided by engineer. */ "How SimpleX works" = "Wie SimpleX funktioniert"; @@ -2622,6 +2742,12 @@ /* No comment provided by engineer. */ "inactive" = "Inaktiv"; +/* report reason */ +"Inappropriate content" = "Unangemessener Inhalt"; + +/* report reason */ +"Inappropriate profile" = "Unangemessenes Profil"; + /* No comment provided by engineer. */ "Incognito" = "Inkognito"; @@ -2889,6 +3015,15 @@ /* No comment provided by engineer. */ "Linked desktops" = "Verknüpfte Desktops"; +/* swipe action */ +"List" = "Liste"; + +/* No comment provided by engineer. */ +"List name and emoji should be different for all lists." = "Der Listenname und das Emoji sollen für alle Listen unterschiedlich sein."; + +/* No comment provided by engineer. */ +"List name..." = "Listenname..."; + /* No comment provided by engineer. */ "LIVE" = "LIVE"; @@ -3066,6 +3201,9 @@ /* No comment provided by engineer. */ "Messages from %@ will be shown!" = "Die Nachrichten von %@ werden angezeigt!"; +/* alert message */ +"Messages in this chat will never be deleted." = "Nachrichten in diesem Chat werden nie gelöscht."; + /* No comment provided by engineer. */ "Messages received" = "Empfangene Nachrichten"; @@ -3138,9 +3276,15 @@ /* marked deleted chat item preview text */ "moderated by %@" = "Von %@ moderiert"; +/* member role */ +"moderator" = "Moderator"; + /* time unit */ "months" = "Monate"; +/* swipe action */ +"More" = "Mehr"; + /* No comment provided by engineer. */ "More improvements are coming soon!" = "Weitere Verbesserungen sind bald verfügbar!"; @@ -3156,10 +3300,7 @@ /* No comment provided by engineer. */ "Multiple chat profiles" = "Mehrere Chat-Profile"; -/* No comment provided by engineer. */ -"mute" = "Stummschalten"; - -/* swipe action */ +/* notification label action */ "Mute" = "Stummschalten"; /* No comment provided by engineer. */ @@ -3255,6 +3396,15 @@ /* Authentication unavailable */ "No app password" = "Kein App-Passwort"; +/* No comment provided by engineer. */ +"No chats" = "Keine Chats"; + +/* No comment provided by engineer. */ +"No chats found" = "Keine Chats gefunden"; + +/* No comment provided by engineer. */ +"No chats in list %@" = "Keine Chats in der Liste %@"; + /* No comment provided by engineer. */ "No contacts selected" = "Keine Kontakte ausgewählt"; @@ -3324,12 +3474,18 @@ /* copied message info in history */ "no text" = "Kein Text"; +/* No comment provided by engineer. */ +"No unread chats" = "Keine ungelesenen Chats"; + /* No comment provided by engineer. */ "No user identifiers." = "Keine Benutzerkennungen."; /* No comment provided by engineer. */ "Not compatible!" = "Nicht kompatibel!"; +/* No comment provided by engineer. */ +"Notes" = "Anmerkungen"; + /* No comment provided by engineer. */ "Nothing selected" = "Nichts ausgewählt"; @@ -3407,6 +3563,12 @@ /* No comment provided by engineer. */ "Only group owners can enable voice messages." = "Sprachnachrichten können nur von Gruppen-Eigentümern aktiviert werden."; +/* No comment provided by engineer. */ +"Only sender and moderators see it" = "Nur Absender und Moderatoren sehen es"; + +/* No comment provided by engineer. */ +"Only you and moderators see it" = "Nur Sie und Moderatoren sehen es"; + /* No comment provided by engineer. */ "Only you can add message reactions." = "Nur Sie können Reaktionen auf Nachrichten geben."; @@ -3455,12 +3617,21 @@ /* No comment provided by engineer. */ "Open group" = "Gruppe öffnen"; +/* No comment provided by engineer. */ +"Open link" = "Web-Link öffnen"; + +/* No comment provided by engineer. */ +"Open links from chat list" = "Web-Links aus der Chat-Liste öffnen"; + /* authentication reason */ "Open migration to another device" = "Migration auf ein anderes Gerät öffnen"; /* No comment provided by engineer. */ "Open Settings" = "Geräte-Einstellungen öffnen"; +/* No comment provided by engineer. */ +"Open web link?" = "Web-Link öffnen?"; + /* No comment provided by engineer. */ "Opening app…" = "App wird geöffnet…"; @@ -3936,6 +4107,30 @@ /* chat item action */ "Reply" = "Antwort"; +/* chat item action */ +"Report" = "Melden"; + +/* report reason */ +"Report content: only group moderators will see it." = "Inhalt melden: Nur Gruppenmoderatoren werden es sehen."; + +/* report reason */ +"Report member profile: only group moderators will see it." = "Mitgliederprofil melden: Nur Gruppenmoderatoren werden es sehen."; + +/* report reason */ +"Report other: only group moderators will see it." = "Anderes melden: Nur Gruppenmoderatoren werden es sehen."; + +/* No comment provided by engineer. */ +"Report reason?" = "Grund der Meldung?"; + +/* report reason */ +"Report spam: only group moderators will see it." = "Spam melden: Nur Gruppenmoderatoren werden es sehen."; + +/* report reason */ +"Report violation: only group moderators will see it." = "Verstoß melden: Nur Gruppenmoderatoren werden es sehen."; + +/* No comment provided by engineer. */ +"Reports" = "Meldungen"; + /* chat list item title */ "requested to connect" = "Zur Verbindung aufgefordert"; @@ -4039,6 +4234,9 @@ /* No comment provided by engineer. */ "Save group profile" = "Gruppenprofil speichern"; +/* No comment provided by engineer. */ +"Save list" = "Liste speichern"; + /* No comment provided by engineer. */ "Save passphrase and open chat" = "Passwort speichern und Chat öffnen"; @@ -4339,6 +4537,9 @@ /* No comment provided by engineer. */ "Set 1 day" = "Einen Tag festlegen"; +/* No comment provided by engineer. */ +"Set chat name…" = "Chat-Name festlegen…"; + /* No comment provided by engineer. */ "Set contact name…" = "Kontaktname festlegen…"; @@ -4547,6 +4748,10 @@ /* notification title */ "Somebody" = "Jemand"; +/* blocking reason + report reason */ +"Spam" = "Spam"; + /* No comment provided by engineer. */ "Square, circle, or anything in between." = "Quadratisch, kreisförmig oder irgendetwas dazwischen."; @@ -4604,6 +4809,9 @@ /* No comment provided by engineer. */ "Stopping chat" = "Chat wird beendet"; +/* No comment provided by engineer. */ +"Storage" = "Ablage"; + /* No comment provided by engineer. */ "strike" = "durchstreichen"; @@ -4763,6 +4971,9 @@ /* No comment provided by engineer. */ "The profile is only shared with your contacts." = "Das Profil wird nur mit Ihren Kontakten geteilt."; +/* No comment provided by engineer. */ +"The report will be archived for you." = "Die Meldung wird für Sie archiviert."; + /* No comment provided by engineer. */ "The same conditions will apply to operator **%@**." = "Dieselben Nutzungsbedingungen gelten auch für den Betreiber **%@**."; @@ -4808,6 +5019,9 @@ /* No comment provided by engineer. */ "This action cannot be undone - the messages sent and received earlier than selected will be deleted. It may take several minutes." = "Es werden alle empfangenen und gesendeten Nachrichten, die über den ausgewählten Zeitraum hinaus gehen, gelöscht. Dieser Vorgang kann mehrere Minuten dauern. Diese Aktion kann nicht rückgängig gemacht werden!"; +/* alert message */ +"This action cannot be undone - the messages sent and received in this chat earlier than selected will be deleted." = "Die älteren als die ausgewählten gesendeten und empfangenen Nachrichten in diesem Chat werden gelöscht. Diese Aktion kann nicht rückgängig gemacht werden!"; + /* No comment provided by engineer. */ "This action cannot be undone - your profile, contacts, messages and files will be irreversibly lost." = "Ihr Profil und Ihre Kontakte, Nachrichten und Dateien gehen unwiderruflich verloren. Diese Aktion kann nicht rückgängig gemacht werden!"; @@ -5015,10 +5229,7 @@ /* authentication reason */ "Unlock app" = "App entsperren"; -/* No comment provided by engineer. */ -"unmute" = "Stummschaltung aufheben"; - -/* swipe action */ +/* notification label action */ "Unmute" = "Stummschaltung aufheben"; /* No comment provided by engineer. */ @@ -5339,6 +5550,9 @@ /* pref value */ "yes" = "Ja"; +/* No comment provided by engineer. */ +"Yes" = "Ja"; + /* No comment provided by engineer. */ "you" = "Profil"; diff --git a/apps/ios/es.lproj/Localizable.strings b/apps/ios/es.lproj/Localizable.strings index 39496a182f..2004e192c1 100644 --- a/apps/ios/es.lproj/Localizable.strings +++ b/apps/ios/es.lproj/Localizable.strings @@ -1,6 +1,9 @@ /* No comment provided by engineer. */ "\n" = "\n"; +/* No comment provided by engineer. */ +" " = " "; + /* No comment provided by engineer. */ " (" = " ("; @@ -199,6 +202,9 @@ /* time interval */ "%d sec" = "%d segundo(s)"; +/* delete after time */ +"%d seconds(s)" = "%d segundos"; + /* integrity error chat item */ "%d skipped message(s)" = "%d mensaje(s) omitido(s)"; @@ -304,6 +310,9 @@ time interval */ "1 week" = "una semana"; +/* delete after time */ +"1 year" = "Un año"; + /* No comment provided by engineer. */ "1-time link" = "Enlace de un uso"; @@ -397,6 +406,9 @@ /* No comment provided by engineer. */ "Add friends" = "Añadir amigos"; +/* No comment provided by engineer. */ +"Add list" = "Añadir lista"; + /* No comment provided by engineer. */ "Add profile" = "Añadir perfil"; @@ -412,6 +424,9 @@ /* No comment provided by engineer. */ "Add to another device" = "Añadir a otro dispositivo"; +/* No comment provided by engineer. */ +"Add to list" = "Añadir a la lista"; + /* No comment provided by engineer. */ "Add welcome message" = "Añadir mensaje de bienvenida"; @@ -469,12 +484,18 @@ /* chat item text */ "agreeing encryption…" = "acordando cifrado…"; +/* No comment provided by engineer. */ +"All" = "Todo"; + /* No comment provided by engineer. */ "All app data is deleted." = "Todos los datos de la aplicación se eliminarán."; /* No comment provided by engineer. */ "All chats and messages will be deleted - this cannot be undone!" = "Se eliminarán todos los chats y mensajes. ¡No podrá deshacerse!"; +/* alert message */ +"All chats will be removed from the list (text), and the list deleted." = "Todos los chats serán quitados de la lista (text) y esta será eliminada."; + /* No comment provided by engineer. */ "All data is erased when it is entered." = "Al introducirlo todos los datos son eliminados."; @@ -601,6 +622,9 @@ /* No comment provided by engineer. */ "and %lld other events" = "y %lld evento(s) más"; +/* report reason */ +"Another reason" = "Otro motivo"; + /* No comment provided by engineer. */ "Answer call" = "Responder llamada"; @@ -616,6 +640,9 @@ /* No comment provided by engineer. */ "App encrypts new local files (except videos)." = "Cifrado de los nuevos archivos locales (excepto vídeos)."; +/* No comment provided by engineer. */ +"App group:" = "Grupo app:"; + /* No comment provided by engineer. */ "App icon" = "Icono aplicación"; @@ -643,18 +670,33 @@ /* No comment provided by engineer. */ "Apply to" = "Aplicar a"; +/* No comment provided by engineer. */ +"Archive" = "Archivar"; + /* No comment provided by engineer. */ "Archive and upload" = "Archivar y subir"; /* No comment provided by engineer. */ "Archive contacts to chat later." = "Archiva contactos para charlar más tarde."; +/* No comment provided by engineer. */ +"Archive report" = "Archivar informe"; + +/* No comment provided by engineer. */ +"Archive report?" = "¿Archivar informe?"; + /* No comment provided by engineer. */ "Archived contacts" = "Contactos archivados"; +/* No comment provided by engineer. */ +"archived report" = "informes archivados"; + /* No comment provided by engineer. */ "Archiving database" = "Archivando base de datos"; +/* No comment provided by engineer. */ +"Ask" = "Preguntar"; + /* No comment provided by engineer. */ "Attach" = "Adjuntar"; @@ -775,7 +817,7 @@ /* rcv group event chat item */ "blocked %@" = "ha bloqueado a %@"; -/* marked deleted chat item preview text */ +/* blocked chat item */ "blocked by admin" = "bloqueado por administrador"; /* No comment provided by engineer. */ @@ -814,6 +856,9 @@ /* No comment provided by engineer. */ "Business chats" = "Chats empresariales"; +/* No comment provided by engineer. */ +"Businesses" = "Empresas"; + /* No comment provided by engineer. */ "By chat profile (default) or [by connection](https://simplex.chat/blog/20230204-simplex-chat-v4-5-user-chat-profiles.html#transport-isolation) (BETA)." = "Mediante perfil (predeterminado) o [por conexión](https://simplex.chat/blog/20230204-simplex-chat-v4-5-user-chat-profiles.html#transport-isolation) (BETA)."; @@ -884,6 +929,9 @@ /* No comment provided by engineer. */ "Change" = "Cambiar"; +/* alert title */ +"Change automatic message deletion?" = "¿Modificar la eliminación automática de mensajes?"; + /* authentication reason */ "Change chat profiles" = "Cambiar perfil de usuario"; @@ -1032,6 +1080,9 @@ /* No comment provided by engineer. */ "Clear conversation?" = "¿Vaciar conversación?"; +/* No comment provided by engineer. */ +"Clear or delete group?" = "¿Vaciar o eliminar grupo?"; + /* No comment provided by engineer. */ "Clear private notes?" = "¿Eliminar notas privadas?"; @@ -1047,6 +1098,9 @@ /* No comment provided by engineer. */ "colored" = "coloreado"; +/* report reason */ +"Community guidelines violation" = "Violación de las normas de la comunidad"; + /* server test step */ "Compare file" = "Comparar archivo"; @@ -1218,6 +1272,9 @@ /* No comment provided by engineer. */ "Connection and servers status." = "Estado de tu conexión y servidores."; +/* No comment provided by engineer. */ +"Connection blocked" = "Conexión bloqueada"; + /* No comment provided by engineer. */ "Connection error" = "Error conexión"; @@ -1227,12 +1284,21 @@ /* chat list item title (it should not be shown */ "connection established" = "conexión establecida"; +/* No comment provided by engineer. */ +"Connection is blocked by server operator:\n%@" = "Conexión bloqueada por el operador del servidor:\n%@"; + +/* No comment provided by engineer. */ +"Connection not ready." = "Conexión no establecida."; + /* No comment provided by engineer. */ "Connection notifications" = "Notificaciones de conexión"; /* No comment provided by engineer. */ "Connection request sent!" = "¡Solicitud de conexión enviada!"; +/* No comment provided by engineer. */ +"Connection requires encryption renegotiation." = "La conexión requiere renegociar el cifrado."; + /* No comment provided by engineer. */ "Connection security" = "Seguridad de conexión"; @@ -1293,6 +1359,9 @@ /* No comment provided by engineer. */ "Contacts can mark messages for deletion; you will be able to view them." = "Tus contactos sólo pueden marcar los mensajes para eliminar. Tu podrás verlos."; +/* blocking reason */ +"Content violates conditions of use" = "El contenido viola las condiciones de uso"; + /* No comment provided by engineer. */ "Continue" = "Continuar"; @@ -1335,6 +1404,9 @@ /* No comment provided by engineer. */ "Create link" = "Crear enlace"; +/* No comment provided by engineer. */ +"Create list" = "Crear lista"; + /* No comment provided by engineer. */ "Create new profile in [desktop app](https://simplex.chat/downloads/). 💻" = "Crea perfil nuevo en la [aplicación para PC](https://simplex.Descargas/de chat/). 💻"; @@ -1514,6 +1586,9 @@ /* No comment provided by engineer. */ "Delete chat" = "Eliminar chat"; +/* No comment provided by engineer. */ +"Delete chat messages from your device." = "Elimina los mensajes del dispositivo."; + /* No comment provided by engineer. */ "Delete chat profile" = "Eliminar perfil"; @@ -1568,6 +1643,9 @@ /* No comment provided by engineer. */ "Delete link?" = "¿Eliminar enlace?"; +/* alert title */ +"Delete list?" = "¿Eliminar lista?"; + /* No comment provided by engineer. */ "Delete member message?" = "¿Eliminar el mensaje de miembro?"; @@ -1575,7 +1653,7 @@ "Delete message?" = "¿Eliminar mensaje?"; /* alert button */ -"Delete messages" = "Eliminar mensaje"; +"Delete messages" = "Eliminar mensajes"; /* No comment provided by engineer. */ "Delete messages after" = "Eliminar en"; @@ -1598,6 +1676,9 @@ /* server test step */ "Delete queue" = "Eliminar cola"; +/* No comment provided by engineer. */ +"Delete report" = "Borrar informe"; + /* No comment provided by engineer. */ "Delete up to 20 messages at once." = "Elimina hasta 20 mensajes a la vez."; @@ -1706,6 +1787,12 @@ /* No comment provided by engineer. */ "Disable (keep overrides)" = "Desactivar (conservando anulaciones)"; +/* alert title */ +"Disable automatic message deletion?" = "¿Desactivar la eliminación automática de mensajes?"; + +/* alert button */ +"Disable delete messages" = "Desactivar"; + /* No comment provided by engineer. */ "Disable for all" = "Desactivar para todos"; @@ -1766,6 +1853,9 @@ /* No comment provided by engineer. */ "Do NOT use SimpleX for emergency calls." = "NO uses SimpleX para llamadas de emergencia."; +/* No comment provided by engineer. */ +"Documents:" = "Documentos:"; + /* No comment provided by engineer. */ "Don't create address" = "No crear dirección SimpleX"; @@ -1775,6 +1865,9 @@ /* No comment provided by engineer. */ "Don't show again" = "No volver a mostrar"; +/* No comment provided by engineer. */ +"Done" = "Hecho"; + /* No comment provided by engineer. */ "Downgrade and open chat" = "Degradar y abrir Chat"; @@ -1956,6 +2049,9 @@ /* chat item text */ "encryption re-negotiation required for %@" = "se requiere renegociar el cifrado para %@"; +/* No comment provided by engineer. */ +"Encryption renegotiation in progress." = "Renegociación de cifrado en curso."; + /* No comment provided by engineer. */ "ended" = "finalizado"; @@ -2043,6 +2139,9 @@ /* No comment provided by engineer. */ "Error creating group link" = "Error al crear enlace de grupo"; +/* alert title */ +"Error creating list" = "Error al crear lista"; + /* No comment provided by engineer. */ "Error creating member contact" = "Error al establecer contacto con el miembro"; @@ -2052,6 +2151,9 @@ /* No comment provided by engineer. */ "Error creating profile!" = "¡Error al crear perfil!"; +/* No comment provided by engineer. */ +"Error creating report" = "Error al crear informe"; + /* No comment provided by engineer. */ "Error decrypting file" = "Error al descifrar el archivo"; @@ -2121,9 +2223,15 @@ /* No comment provided by engineer. */ "Error removing member" = "Error al eliminar miembro"; +/* alert title */ +"Error reordering lists" = "Error al reorganizar listas"; + /* No comment provided by engineer. */ "Error resetting statistics" = "Error al restablecer las estadísticas"; +/* alert title */ +"Error saving chat list" = "Error al guardar listas"; + /* No comment provided by engineer. */ "Error saving group profile" = "Error al guardar perfil de grupo"; @@ -2199,7 +2307,8 @@ /* No comment provided by engineer. */ "Error: " = "Error: "; -/* alert message */ +/* file error text + snd error text */ "Error: %@" = "Error: %@"; /* No comment provided by engineer. */ @@ -2259,12 +2368,18 @@ /* swipe action */ "Favorite" = "Favoritos"; +/* No comment provided by engineer. */ +"Favorites" = "Favoritos"; + /* file error alert title */ "File error" = "Error de archivo"; /* alert message */ "File errors:\n%@" = "Error(es) de archivo\n%@"; +/* file error text */ +"File is blocked by server operator:\n(info.reason.text)." = "Archivo bloqueado por el operador del servidor\n(info.reason.text)."; + /* file error text */ "File not found - most likely file was deleted or cancelled." = "Archivo no encontrado, probablemente haya sido borrado o cancelado."; @@ -2496,6 +2611,9 @@ /* No comment provided by engineer. */ "Group will be deleted for you - this cannot be undone!" = "El grupo será eliminado para tí. ¡No podrá deshacerse!"; +/* No comment provided by engineer. */ +"Groups" = "Grupos"; + /* No comment provided by engineer. */ "Help" = "Ayuda"; @@ -2535,6 +2653,9 @@ /* No comment provided by engineer. */ "How it helps privacy" = "Cómo ayuda a la privacidad"; +/* alert button */ +"How it works" = "Cómo funciona"; + /* No comment provided by engineer. */ "How SimpleX works" = "Cómo funciona SimpleX"; @@ -2622,6 +2743,12 @@ /* No comment provided by engineer. */ "inactive" = "inactivo"; +/* report reason */ +"Inappropriate content" = "Contenido inapropiado"; + +/* report reason */ +"Inappropriate profile" = "Perfil inapropiado"; + /* No comment provided by engineer. */ "Incognito" = "Incógnito"; @@ -2889,6 +3016,15 @@ /* No comment provided by engineer. */ "Linked desktops" = "Ordenadores enlazados"; +/* swipe action */ +"List" = "Lista"; + +/* No comment provided by engineer. */ +"List name and emoji should be different for all lists." = "El nombre y el emoji deben ser diferentes en todas las listas."; + +/* No comment provided by engineer. */ +"List name..." = "Nombre de la lista..."; + /* No comment provided by engineer. */ "LIVE" = "EN VIVO"; @@ -3066,6 +3202,9 @@ /* No comment provided by engineer. */ "Messages from %@ will be shown!" = "¡Los mensajes de %@ serán mostrados!"; +/* alert message */ +"Messages in this chat will never be deleted." = "Los mensajes de esta conversación nunca se borran."; + /* No comment provided by engineer. */ "Messages received" = "Mensajes recibidos"; @@ -3138,9 +3277,15 @@ /* marked deleted chat item preview text */ "moderated by %@" = "moderado por %@"; +/* member role */ +"moderator" = "moderador"; + /* time unit */ "months" = "meses"; +/* swipe action */ +"More" = "Más"; + /* No comment provided by engineer. */ "More improvements are coming soon!" = "¡Pronto habrá más mejoras!"; @@ -3156,10 +3301,7 @@ /* No comment provided by engineer. */ "Multiple chat profiles" = "Múltiples perfiles"; -/* No comment provided by engineer. */ -"mute" = "silenciar"; - -/* swipe action */ +/* notification label action */ "Mute" = "Silenciar"; /* No comment provided by engineer. */ @@ -3255,6 +3397,15 @@ /* Authentication unavailable */ "No app password" = "Sin contraseña de la aplicación"; +/* No comment provided by engineer. */ +"No chats" = "Sin chats"; + +/* No comment provided by engineer. */ +"No chats found" = "Ningún chat encontrado"; + +/* No comment provided by engineer. */ +"No chats in list %@" = "Sin chats en la lista %@"; + /* No comment provided by engineer. */ "No contacts selected" = "Ningún contacto seleccionado"; @@ -3324,12 +3475,18 @@ /* copied message info in history */ "no text" = "sin texto"; +/* No comment provided by engineer. */ +"No unread chats" = "Ningún chat sin leer"; + /* No comment provided by engineer. */ "No user identifiers." = "Sin identificadores de usuario."; /* No comment provided by engineer. */ "Not compatible!" = "¡No compatible!"; +/* No comment provided by engineer. */ +"Notes" = "Notas"; + /* No comment provided by engineer. */ "Nothing selected" = "Nada seleccionado"; @@ -3407,6 +3564,12 @@ /* No comment provided by engineer. */ "Only group owners can enable voice messages." = "Sólo los propietarios del grupo pueden activar los mensajes de voz."; +/* No comment provided by engineer. */ +"Only sender and moderators see it" = "Solo el remitente y el moderador pueden verlo"; + +/* No comment provided by engineer. */ +"Only you and moderators see it" = "Solo tú y los moderadores podéis verlo"; + /* No comment provided by engineer. */ "Only you can add message reactions." = "Sólo tú puedes añadir reacciones a los mensajes."; @@ -3455,12 +3618,21 @@ /* No comment provided by engineer. */ "Open group" = "Grupo abierto"; +/* No comment provided by engineer. */ +"Open link" = "Abrir enlace"; + +/* No comment provided by engineer. */ +"Open links from chat list" = "Abrir enlaces desde listado de chats"; + /* authentication reason */ "Open migration to another device" = "Abrir menú migración a otro dispositivo"; /* No comment provided by engineer. */ "Open Settings" = "Abrir Configuración"; +/* No comment provided by engineer. */ +"Open web link?" = "¿Abrir enlace web?"; + /* No comment provided by engineer. */ "Opening app…" = "Iniciando aplicación…"; @@ -3711,7 +3883,7 @@ "Prohibit sending voice messages." = "No se permiten mensajes de voz."; /* No comment provided by engineer. */ -"Protect app screen" = "Proteger la pantalla de la aplicación"; +"Protect app screen" = "Proteger la pantalla"; /* No comment provided by engineer. */ "Protect IP address" = "Proteger dirección IP"; @@ -3936,6 +4108,30 @@ /* chat item action */ "Reply" = "Responder"; +/* chat item action */ +"Report" = "Informe"; + +/* report reason */ +"Report content: only group moderators will see it." = "Informar de contenido: sólo los moderadores del grupo lo verán."; + +/* report reason */ +"Report member profile: only group moderators will see it." = "Informar del perfil de un miembro: sólo los moderadores del grupo lo verán."; + +/* report reason */ +"Report other: only group moderators will see it." = "Informar de otros: sólo los moderadores del grupo lo verán."; + +/* No comment provided by engineer. */ +"Report reason?" = "¿Motivo del informe?"; + +/* report reason */ +"Report spam: only group moderators will see it." = "Informar de spam: sólo los moderadores del grupo lo verán."; + +/* report reason */ +"Report violation: only group moderators will see it." = "Informar de violación: sólo los moderadores del grupo lo verán."; + +/* No comment provided by engineer. */ +"Reports" = "Informes"; + /* chat list item title */ "requested to connect" = "solicitado para conectar"; @@ -4039,6 +4235,9 @@ /* No comment provided by engineer. */ "Save group profile" = "Guardar perfil de grupo"; +/* No comment provided by engineer. */ +"Save list" = "Guardar lista"; + /* No comment provided by engineer. */ "Save passphrase and open chat" = "Guardar contraseña y abrir el chat"; @@ -4339,6 +4538,9 @@ /* No comment provided by engineer. */ "Set 1 day" = "Establecer 1 día"; +/* No comment provided by engineer. */ +"Set chat name…" = "Nombre para el chat…"; + /* No comment provided by engineer. */ "Set contact name…" = "Escribe el nombre del contacto…"; @@ -4518,7 +4720,7 @@ "Skipped messages" = "Mensajes omitidos"; /* No comment provided by engineer. */ -"Small groups (max 20)" = "Grupos pequeños (máx. 20)"; +"Small groups (max 20)" = "Grupos pequeños (max. 20)"; /* No comment provided by engineer. */ "SMP server" = "Servidor SMP"; @@ -4547,6 +4749,10 @@ /* notification title */ "Somebody" = "Alguien"; +/* blocking reason + report reason */ +"Spam" = "Spam"; + /* No comment provided by engineer. */ "Square, circle, or anything in between." = "Cuadrada, circular o cualquier forma intermedia."; @@ -4604,6 +4810,9 @@ /* No comment provided by engineer. */ "Stopping chat" = "Parando chat"; +/* No comment provided by engineer. */ +"Storage" = "Almacenamiento"; + /* No comment provided by engineer. */ "strike" = "tachado"; @@ -4763,6 +4972,9 @@ /* No comment provided by engineer. */ "The profile is only shared with your contacts." = "El perfil sólo se comparte con tus contactos."; +/* No comment provided by engineer. */ +"The report will be archived for you." = "El informe será archivado para ti."; + /* No comment provided by engineer. */ "The same conditions will apply to operator **%@**." = "Las mismas condiciones se aplicarán al operador **%@**."; @@ -4782,7 +4994,7 @@ "The servers for new connections of your current chat profile **%@**." = "Servidores para conexiones nuevas en tu perfil **%@**."; /* No comment provided by engineer. */ -"The servers for new files of your current chat profile **%@**." = "Servidores para archivos nuevos en tu perfil **%@**."; +"The servers for new files of your current chat profile **%@**." = "Servidores para enviar archivos en tu perfil **%@**."; /* No comment provided by engineer. */ "The text you pasted is not a SimpleX link." = "El texto pegado no es un enlace SimpleX."; @@ -4808,6 +5020,9 @@ /* No comment provided by engineer. */ "This action cannot be undone - the messages sent and received earlier than selected will be deleted. It may take several minutes." = "Esta acción es irreversible. Se eliminarán los mensajes enviados y recibidos anteriores a la selección. Podría tardar varios minutos."; +/* alert message */ +"This action cannot be undone - the messages sent and received in this chat earlier than selected will be deleted." = "Todos los mensajes previos a la selección serán eliminados del chat. ¡No podrá deshacerse!"; + /* No comment provided by engineer. */ "This action cannot be undone - your profile, contacts, messages and files will be irreversibly lost." = "Esta acción es irreversible. Tu perfil, contactos, mensajes y archivos se perderán irreversiblemente."; @@ -5015,10 +5230,7 @@ /* authentication reason */ "Unlock app" = "Desbloquear aplicación"; -/* No comment provided by engineer. */ -"unmute" = "activar sonido"; - -/* swipe action */ +/* notification label action */ "Unmute" = "Activar audio"; /* No comment provided by engineer. */ @@ -5049,7 +5261,7 @@ "updated profile" = "perfil actualizado"; /* No comment provided by engineer. */ -"Updating settings will re-connect the client to all servers." = "Al actualizar la configuración el cliente se reconectará a todos los servidores."; +"Updating settings will re-connect the client to all servers." = "Para actualizar la configuración el cliente se reconectará a todos los servidores."; /* No comment provided by engineer. */ "Upgrade and open chat" = "Actualizar y abrir Chat"; @@ -5339,6 +5551,9 @@ /* pref value */ "yes" = "sí"; +/* No comment provided by engineer. */ +"Yes" = "Si"; + /* No comment provided by engineer. */ "you" = "tu"; diff --git a/apps/ios/fi.lproj/Localizable.strings b/apps/ios/fi.lproj/Localizable.strings index 05198685cd..e860e56426 100644 --- a/apps/ios/fi.lproj/Localizable.strings +++ b/apps/ios/fi.lproj/Localizable.strings @@ -1988,7 +1988,7 @@ /* No comment provided by engineer. */ "Multiple chat profiles" = "Useita keskusteluprofiileja"; -/* swipe action */ +/* notification label action */ "Mute" = "Mykistä"; /* No comment provided by engineer. */ @@ -3058,7 +3058,7 @@ /* authentication reason */ "Unlock app" = "Avaa sovellus"; -/* swipe action */ +/* notification label action */ "Unmute" = "Poista mykistys"; /* swipe action */ diff --git a/apps/ios/fr.lproj/Localizable.strings b/apps/ios/fr.lproj/Localizable.strings index c378667a9d..05dcfa9cd3 100644 --- a/apps/ios/fr.lproj/Localizable.strings +++ b/apps/ios/fr.lproj/Localizable.strings @@ -3156,10 +3156,7 @@ /* No comment provided by engineer. */ "Multiple chat profiles" = "Différents profils de chat"; -/* No comment provided by engineer. */ -"mute" = "muet"; - -/* swipe action */ +/* notification label action */ "Mute" = "Muet"; /* No comment provided by engineer. */ @@ -5015,10 +5012,7 @@ /* authentication reason */ "Unlock app" = "Déverrouiller l'app"; -/* No comment provided by engineer. */ -"unmute" = "démuter"; - -/* swipe action */ +/* notification label action */ "Unmute" = "Démute"; /* No comment provided by engineer. */ diff --git a/apps/ios/hu.lproj/Localizable.strings b/apps/ios/hu.lproj/Localizable.strings index 1c330a0c1d..f12a39b3b3 100644 --- a/apps/ios/hu.lproj/Localizable.strings +++ b/apps/ios/hu.lproj/Localizable.strings @@ -1,6 +1,9 @@ /* No comment provided by engineer. */ "\n" = "\n"; +/* No comment provided by engineer. */ +" " = " "; + /* No comment provided by engineer. */ " (" = " ("; @@ -20,7 +23,7 @@ "- optionally notify deleted contacts.\n- profile names with spaces.\n- and more!" = "- értesíti az ismerősöket a törlésről (nem kötelező)\n- profil nevek szóközökkel\n- és még sok más!"; /* No comment provided by engineer. */ -"- voice messages up to 5 minutes.\n- custom time to disappear.\n- editing history." = "- 5 perc hosszúságú hangüzenetek.\n- egyedi üzenet-eltűnési időkorlát.\n- előzmények szerkesztése."; +"- voice messages up to 5 minutes.\n- custom time to disappear.\n- editing history." = "- legfeljebb 5 perc hosszúságú hangüzenetek.\n- egyedi üzenet-eltűnési időkorlát.\n- előzmények szerkesztése."; /* No comment provided by engineer. */ ", " = ", "; @@ -199,6 +202,9 @@ /* time interval */ "%d sec" = "%d mp"; +/* delete after time */ +"%d seconds(s)" = "%d másodperc"; + /* integrity error chat item */ "%d skipped message(s)" = "%d üzenet kihagyva"; @@ -304,6 +310,9 @@ time interval */ "1 week" = "1 hét"; +/* delete after time */ +"1 year" = "1 év"; + /* No comment provided by engineer. */ "1-time link" = "Egyszer használható meghívó-hivatkozás"; @@ -397,6 +406,9 @@ /* No comment provided by engineer. */ "Add friends" = "Barátok hozzáadása"; +/* No comment provided by engineer. */ +"Add list" = "Lista hozzáadása"; + /* No comment provided by engineer. */ "Add profile" = "Profil hozzáadása"; @@ -412,6 +424,9 @@ /* No comment provided by engineer. */ "Add to another device" = "Hozzáadás egy másik eszközhöz"; +/* No comment provided by engineer. */ +"Add to list" = "Hozzáadás listához"; + /* No comment provided by engineer. */ "Add welcome message" = "Üdvözlőüzenet hozzáadása"; @@ -469,12 +484,18 @@ /* chat item text */ "agreeing encryption…" = "titkosítás elfogadása…"; +/* No comment provided by engineer. */ +"All" = "Összes"; + /* No comment provided by engineer. */ "All app data is deleted." = "Az összes alkalmazásadat törölve."; /* No comment provided by engineer. */ "All chats and messages will be deleted - this cannot be undone!" = "Az összes csevegés és üzenet törölve lesz – ez a művelet nem vonható vissza!"; +/* alert message */ +"All chats will be removed from the list (text), and the list deleted." = "Az összes csevegés el lesz távolítva a(z) (text) nevű listáról, és a lista is törölve lesz."; + /* No comment provided by engineer. */ "All data is erased when it is entered." = "A jelkód megadása után az összes adat törölve lesz."; @@ -601,6 +622,9 @@ /* No comment provided by engineer. */ "and %lld other events" = "és további %lld esemény"; +/* report reason */ +"Another reason" = "Egyéb indoklás"; + /* No comment provided by engineer. */ "Answer call" = "Hívás fogadása"; @@ -616,6 +640,9 @@ /* No comment provided by engineer. */ "App encrypts new local files (except videos)." = "Az alkalmazás titkosítja a helyi fájlokat (a videók kivételével)."; +/* No comment provided by engineer. */ +"App group:" = "Alkalmazáscsoport:"; + /* No comment provided by engineer. */ "App icon" = "Alkalmazásikon"; @@ -629,10 +656,10 @@ "App session" = "Alkalmazás munkamenete"; /* No comment provided by engineer. */ -"App version" = "Alkalmazás verzió"; +"App version" = "Az alkalmazás verziója"; /* No comment provided by engineer. */ -"App version: v%@" = "Alkalmazás verzió: v%@"; +"App version: v%@" = "Az alkalmazás verziója: v%@"; /* No comment provided by engineer. */ "Appearance" = "Megjelenés"; @@ -643,18 +670,33 @@ /* No comment provided by engineer. */ "Apply to" = "Alkalmazás erre"; +/* No comment provided by engineer. */ +"Archive" = "Archívum"; + /* No comment provided by engineer. */ "Archive and upload" = "Archiválás és feltöltés"; /* No comment provided by engineer. */ "Archive contacts to chat later." = "Az ismerősök archiválása a későbbi csevegéshez."; +/* No comment provided by engineer. */ +"Archive report" = "Jelentés archiválása"; + +/* No comment provided by engineer. */ +"Archive report?" = "Jelentés archiválása?"; + /* No comment provided by engineer. */ "Archived contacts" = "Archivált ismerősök"; +/* No comment provided by engineer. */ +"archived report" = "archivált jelentés"; + /* No comment provided by engineer. */ "Archiving database" = "Adatbázis archiválása"; +/* No comment provided by engineer. */ +"Ask" = "Mindig kérdezzen rá"; + /* No comment provided by engineer. */ "Attach" = "Csatolás"; @@ -713,10 +755,10 @@ "Bad desktop address" = "Érvénytelen számítógépcím"; /* integrity error chat item */ -"bad message hash" = "érvénytelen az üzenet hasító-értéke"; +"bad message hash" = "érvénytelen az üzenet hasítóértéke"; /* No comment provided by engineer. */ -"Bad message hash" = "Érvénytelen az üzenet hasító-értéke"; +"Bad message hash" = "Érvénytelen az üzenet hasítóértéke"; /* integrity error chat item */ "bad message ID" = "téves üzenet ID"; @@ -814,6 +856,9 @@ /* No comment provided by engineer. */ "Business chats" = "Üzleti csevegések"; +/* No comment provided by engineer. */ +"Businesses" = "Üzleti"; + /* No comment provided by engineer. */ "By chat profile (default) or [by connection](https://simplex.chat/blog/20230204-simplex-chat-v4-5-user-chat-profiles.html#transport-isolation) (BETA)." = "A csevegési profillal (alapértelmezett), vagy a [kapcsolattal] (https://simplex.chat/blog/20230204-simplex-chat-v4-5-user-chat-profiles.html#transport-isolation) (BÉTA)."; @@ -884,6 +929,9 @@ /* No comment provided by engineer. */ "Change" = "Megváltoztatás"; +/* alert title */ +"Change automatic message deletion?" = "Automatikus üzenettörlés módosítása?"; + /* authentication reason */ "Change chat profiles" = "Csevegési profilok megváltoztatása"; @@ -1032,6 +1080,9 @@ /* No comment provided by engineer. */ "Clear conversation?" = "Üzenetek kiürítése?"; +/* No comment provided by engineer. */ +"Clear or delete group?" = "Csoport kiürítése vagy törlése?"; + /* No comment provided by engineer. */ "Clear private notes?" = "Privát jegyzetek kiürítése?"; @@ -1047,6 +1098,9 @@ /* No comment provided by engineer. */ "colored" = "színes"; +/* report reason */ +"Community guidelines violation" = "Közösségi irányelvek megsértése"; + /* server test step */ "Compare file" = "Fájl összehasonlítás"; @@ -1218,6 +1272,9 @@ /* No comment provided by engineer. */ "Connection and servers status." = "Kapcsolatok- és kiszolgálók állapotának megjelenítése."; +/* No comment provided by engineer. */ +"Connection blocked" = "A kapcsolat le van tiltva"; + /* No comment provided by engineer. */ "Connection error" = "Kapcsolódási hiba"; @@ -1227,12 +1284,21 @@ /* chat list item title (it should not be shown */ "connection established" = "kapcsolat létrehozva"; +/* No comment provided by engineer. */ +"Connection is blocked by server operator:\n%@" = "A kiszolgáló üzemeltetője letiltotta a kapcsolatot:\n%@"; + +/* No comment provided by engineer. */ +"Connection not ready." = "A kapcsolat nem áll készen."; + /* No comment provided by engineer. */ "Connection notifications" = "Kapcsolódási értesítések"; /* No comment provided by engineer. */ "Connection request sent!" = "Kapcsolatkérés elküldve!"; +/* No comment provided by engineer. */ +"Connection requires encryption renegotiation." = "A kapcsolat titkosítása újraegyeztetést igényel."; + /* No comment provided by engineer. */ "Connection security" = "Kapcsolatbiztonság"; @@ -1282,7 +1348,7 @@ "Contact name" = "Csak név"; /* No comment provided by engineer. */ -"Contact preferences" = "Ismerős beállításai"; +"Contact preferences" = "Ismerős-beállítások"; /* No comment provided by engineer. */ "Contact will be deleted - this cannot be undone!" = "Az ismerős törölve lesz – ez a művelet nem vonható vissza!"; @@ -1293,6 +1359,9 @@ /* No comment provided by engineer. */ "Contacts can mark messages for deletion; you will be able to view them." = "Az ismerősei törlésre jelölhetnek üzeneteket; Ön majd meg tudja nézni azokat."; +/* blocking reason */ +"Content violates conditions of use" = "A tartalom sérti a használati feltételeket"; + /* No comment provided by engineer. */ "Continue" = "Folytatás"; @@ -1335,6 +1404,9 @@ /* No comment provided by engineer. */ "Create link" = "Hivatkozás létrehozása"; +/* No comment provided by engineer. */ +"Create list" = "Lista létrehozása"; + /* No comment provided by engineer. */ "Create new profile in [desktop app](https://simplex.chat/downloads/). 💻" = "Új profil létrehozása a [számítógép-alkalmazásban](https://simplex.chat/downloads/). 💻"; @@ -1450,7 +1522,7 @@ "Database upgrade" = "Adatbázis fejlesztése"; /* No comment provided by engineer. */ -"database version is newer than the app, but no down migration for: %@" = "az adatbázis verziója újabb, mint az alkalmazásé, de nincs visszafelé átköltöztetés a következőhöz: %@"; +"database version is newer than the app, but no down migration for: %@" = "az adatbázis verziója újabb, mint az alkalmazásé, de a visszafelé történő átköltöztetés viszont nem lehetséges a következőhöz: %@"; /* No comment provided by engineer. */ "Database will be encrypted and the passphrase stored in the keychain.\n" = "Az adatbázis titkosítva lesz, a jelmondat pedig a kulcstartóban lesz tárolva.\n"; @@ -1514,6 +1586,9 @@ /* No comment provided by engineer. */ "Delete chat" = "Csevegés törlése"; +/* No comment provided by engineer. */ +"Delete chat messages from your device." = "Csevegési üzenetek törlése az Ön eszközéről."; + /* No comment provided by engineer. */ "Delete chat profile" = "Csevegési profil törlése"; @@ -1568,6 +1643,9 @@ /* No comment provided by engineer. */ "Delete link?" = "Hivatkozás törlése?"; +/* alert title */ +"Delete list?" = "Lista törlése?"; + /* No comment provided by engineer. */ "Delete member message?" = "Csoporttag üzenetének törlése?"; @@ -1598,6 +1676,9 @@ /* server test step */ "Delete queue" = "Sorbaállítás törlése"; +/* No comment provided by engineer. */ +"Delete report" = "Jelentés törlése"; + /* No comment provided by engineer. */ "Delete up to 20 messages at once." = "Legfeljebb 20 üzenet egyszerre való törlése."; @@ -1706,6 +1787,12 @@ /* No comment provided by engineer. */ "Disable (keep overrides)" = "Letiltás (felülírások megtartásával)"; +/* alert title */ +"Disable automatic message deletion?" = "Automatikus üzenettörlés letiltása?"; + +/* alert button */ +"Disable delete messages" = "Üzenetek törlésének letiltása"; + /* No comment provided by engineer. */ "Disable for all" = "Letiltás az összes tag számára"; @@ -1766,6 +1853,9 @@ /* No comment provided by engineer. */ "Do NOT use SimpleX for emergency calls." = "NE használja a SimpleX-et segélyhívásokhoz."; +/* No comment provided by engineer. */ +"Documents:" = "Dokumentumok:"; + /* No comment provided by engineer. */ "Don't create address" = "Ne hozzon létre címet"; @@ -1775,6 +1865,9 @@ /* No comment provided by engineer. */ "Don't show again" = "Ne mutasd újra"; +/* No comment provided by engineer. */ +"Done" = "Kész"; + /* No comment provided by engineer. */ "Downgrade and open chat" = "Visszafejlesztés és a csevegés megnyitása"; @@ -1956,6 +2049,9 @@ /* chat item text */ "encryption re-negotiation required for %@" = "a titkosítás újraegyeztetése szükséges %@ számára"; +/* No comment provided by engineer. */ +"Encryption renegotiation in progress." = "A titkosítás újraegyeztetése folyamatban van."; + /* No comment provided by engineer. */ "ended" = "befejeződött"; @@ -2043,6 +2139,9 @@ /* No comment provided by engineer. */ "Error creating group link" = "Hiba a csoporthivatkozás létrehozásakor"; +/* alert title */ +"Error creating list" = "Hiba a lista létrehozásakor"; + /* No comment provided by engineer. */ "Error creating member contact" = "Hiba az ismerőssel történő kapcsolat létrehozásában"; @@ -2052,6 +2151,9 @@ /* No comment provided by engineer. */ "Error creating profile!" = "Hiba a profil létrehozásakor!"; +/* No comment provided by engineer. */ +"Error creating report" = "Hiba a jelentés létrehozásakor"; + /* No comment provided by engineer. */ "Error decrypting file" = "Hiba a fájl visszafejtésekor"; @@ -2121,9 +2223,15 @@ /* No comment provided by engineer. */ "Error removing member" = "Hiba a tag eltávolításakor"; +/* alert title */ +"Error reordering lists" = "Hiba a listák újrarendezésekor"; + /* No comment provided by engineer. */ "Error resetting statistics" = "Hiba a statisztikák visszaállításakor"; +/* alert title */ +"Error saving chat list" = "Hiba a csevegési lista mentésekor"; + /* No comment provided by engineer. */ "Error saving group profile" = "Hiba a csoportprofil mentésekor"; @@ -2259,12 +2367,18 @@ /* swipe action */ "Favorite" = "Kedvenc"; +/* No comment provided by engineer. */ +"Favorites" = "Kedvencek"; + /* file error alert title */ "File error" = "Fájlhiba"; /* alert message */ "File errors:\n%@" = "Fájlhiba:\n%@"; +/* file error text */ +"File is blocked by server operator:\n(info.reason.text)." = "A kiszolgáló üzemeltetője letiltotta a fájlt:\n(info.reason.text)."; + /* file error text */ "File not found - most likely file was deleted or cancelled." = "A fájl nem található – valószínűleg a fájlt törölték vagy visszavonták."; @@ -2476,7 +2590,7 @@ "Group moderation" = "Csoport moderáció"; /* No comment provided by engineer. */ -"Group preferences" = "Csoportbeállítások"; +"Group preferences" = "Csoport-beállítások"; /* No comment provided by engineer. */ "Group profile" = "Csoportprofil"; @@ -2496,6 +2610,9 @@ /* No comment provided by engineer. */ "Group will be deleted for you - this cannot be undone!" = "A csoport törölve lesz az Ön számára – ez a művelet nem vonható vissza!"; +/* No comment provided by engineer. */ +"Groups" = "Csoportok"; + /* No comment provided by engineer. */ "Help" = "Súgó"; @@ -2535,6 +2652,9 @@ /* No comment provided by engineer. */ "How it helps privacy" = "Hogyan segíti az adatvédelmet"; +/* alert button */ +"How it works" = "Hogyan működik"; + /* No comment provided by engineer. */ "How SimpleX works" = "Hogyan működik a SimpleX"; @@ -2622,6 +2742,12 @@ /* No comment provided by engineer. */ "inactive" = "inaktív"; +/* report reason */ +"Inappropriate content" = "Kifogásolt tartalom"; + +/* report reason */ +"Inappropriate profile" = "Kifogásolt profil"; + /* No comment provided by engineer. */ "Incognito" = "Inkognitó"; @@ -2889,6 +3015,15 @@ /* No comment provided by engineer. */ "Linked desktops" = "Társított számítógépek"; +/* swipe action */ +"List" = "Lista"; + +/* No comment provided by engineer. */ +"List name and emoji should be different for all lists." = "Az összes lista nevének és emodzsiának különbözőnek kell lennie."; + +/* No comment provided by engineer. */ +"List name..." = "Listanév…"; + /* No comment provided by engineer. */ "LIVE" = "ÉLŐ"; @@ -3066,6 +3201,9 @@ /* No comment provided by engineer. */ "Messages from %@ will be shown!" = "A(z) %@ által írt üzenetek megjelennek!"; +/* alert message */ +"Messages in this chat will never be deleted." = "Az ebben a csevegésben lévő üzenetek soha nem lesznek törölve."; + /* No comment provided by engineer. */ "Messages received" = "Fogadott üzenetek"; @@ -3138,9 +3276,15 @@ /* marked deleted chat item preview text */ "moderated by %@" = "moderálva lett %@ által"; +/* member role */ +"moderator" = "moderátor"; + /* time unit */ "months" = "hónap"; +/* swipe action */ +"More" = "Továbbiak"; + /* No comment provided by engineer. */ "More improvements are coming soon!" = "Hamarosan további fejlesztések érkeznek!"; @@ -3156,10 +3300,7 @@ /* No comment provided by engineer. */ "Multiple chat profiles" = "Több csevegőprofil"; -/* No comment provided by engineer. */ -"mute" = "némítás"; - -/* swipe action */ +/* notification label action */ "Mute" = "Némítás"; /* No comment provided by engineer. */ @@ -3256,7 +3397,16 @@ "No app password" = "Nincs alkalmazás jelszó"; /* No comment provided by engineer. */ -"No contacts selected" = "Nincs kijelölve ismerős"; +"No chats" = "Nincsenek csevegések"; + +/* No comment provided by engineer. */ +"No chats found" = "Nem találhatók csevegések"; + +/* No comment provided by engineer. */ +"No chats in list %@" = "Nincsenek csevegések a(z) %@ nevű listában"; + +/* No comment provided by engineer. */ +"No contacts selected" = "Nincs ismerős kijelölve"; /* No comment provided by engineer. */ "No contacts to add" = "Nincs hozzáadandó ismerős"; @@ -3324,6 +3474,9 @@ /* copied message info in history */ "no text" = "nincs szöveg"; +/* No comment provided by engineer. */ +"No unread chats" = "Nincsenek olvasatlan csevegések"; + /* No comment provided by engineer. */ "No user identifiers." = "Nincsenek felhasználó-azonosítók."; @@ -3331,7 +3484,10 @@ "Not compatible!" = "Nem kompatibilis!"; /* No comment provided by engineer. */ -"Nothing selected" = "Nincs kijelölve semmi"; +"Notes" = "Jegyzetek"; + +/* No comment provided by engineer. */ +"Nothing selected" = "Nincs semmi kijelölve"; /* alert title */ "Nothing to forward!" = "Nincs mit továbbítani!"; @@ -3399,13 +3555,19 @@ "Only delete conversation" = "Csak a beszélgetés törlése"; /* No comment provided by engineer. */ -"Only group owners can change group preferences." = "Csak a csoporttulajdonosok változtathatják meg a csoportbeállításokat."; +"Only group owners can change group preferences." = "Csak a csoport-tulajdonosok változtathatják meg a csoport-beállításokat."; /* No comment provided by engineer. */ -"Only group owners can enable files and media." = "Csak a csoporttulajdonosok engedélyezhetik a fájlok- és a médiatartalmak küldését."; +"Only group owners can enable files and media." = "Csak a csoport-tulajdonosok engedélyezhetik a fájlok- és a médiatartalmak küldését."; /* No comment provided by engineer. */ -"Only group owners can enable voice messages." = "Csak a csoporttulajdonosok engedélyezhetik a hangüzenetek küldését."; +"Only group owners can enable voice messages." = "Csak a csoport-tulajdonosok engedélyezhetik a hangüzenetek küldését."; + +/* No comment provided by engineer. */ +"Only sender and moderators see it" = "Csak a küldő és a moderátorok látják"; + +/* No comment provided by engineer. */ +"Only you and moderators see it" = "Csak Ön és a moderátorok látják"; /* No comment provided by engineer. */ "Only you can add message reactions." = "Csak Ön adhat hozzá üzenetreakciókat."; @@ -3447,7 +3609,7 @@ "Open chat" = "Csevegés megnyitása"; /* authentication reason */ -"Open chat console" = "Csevegés konzol megnyitása"; +"Open chat console" = "Csevegési konzol megnyitása"; /* No comment provided by engineer. */ "Open conditions" = "Feltételek megnyitása"; @@ -3455,12 +3617,21 @@ /* No comment provided by engineer. */ "Open group" = "Csoport megnyitása"; +/* No comment provided by engineer. */ +"Open link" = "Hivatkozás megnyitása"; + +/* No comment provided by engineer. */ +"Open links from chat list" = "Hivatkozás megnyitása a csevegési listából"; + /* authentication reason */ "Open migration to another device" = "Átköltöztetés indítása egy másik eszközre"; /* No comment provided by engineer. */ "Open Settings" = "Beállítások megnyitása"; +/* No comment provided by engineer. */ +"Open web link?" = "Webhivatkozás megnyitása?"; + /* No comment provided by engineer. */ "Opening app…" = "Az alkalmazás megnyitása…"; @@ -3720,7 +3891,7 @@ "Protect your chat profiles with a password!" = "Védje meg a csevegési profiljait egy jelszóval!"; /* No comment provided by engineer. */ -"Protect your IP address from the messaging relays chosen by your contacts.\nEnable in *Network & servers* settings." = "Védje IP-címét az ismerősei által kiválasztott üzenet-továbbító-kiszolgálókkal szemben.\nEngedélyezze a „Beállítások -> Hálózat és kiszolgálók” menüben."; +"Protect your IP address from the messaging relays chosen by your contacts.\nEnable in *Network & servers* settings." = "Védje IP-címét az ismerősei által kiválasztott üzenetváltó-továbbító-kiszolgálókkal szemben.\nEngedélyezze a „Beállítások -> Hálózat és kiszolgálók” menüben."; /* No comment provided by engineer. */ "Protocol timeout" = "Protokoll időtúllépése"; @@ -3936,6 +4107,30 @@ /* chat item action */ "Reply" = "Válasz"; +/* chat item action */ +"Report" = "Jelentés"; + +/* report reason */ +"Report content: only group moderators will see it." = "Tartalom jelentése: csak a csoport moderátorai látják."; + +/* report reason */ +"Report member profile: only group moderators will see it." = "Tag profiljának jelentése: csak a csoport moderátorai látják."; + +/* report reason */ +"Report other: only group moderators will see it." = "Egyéb jelentés: csak a csoport moderátorai látják."; + +/* No comment provided by engineer. */ +"Report reason?" = "Jelentés indoklása?"; + +/* report reason */ +"Report spam: only group moderators will see it." = "Kéretlen tartalom jelentése: csak a csoport moderátorai látják."; + +/* report reason */ +"Report violation: only group moderators will see it." = "Szabálysértés jelentése: csak a csoport moderátorai látják."; + +/* No comment provided by engineer. */ +"Reports" = "Jelentések"; + /* chat list item title */ "requested to connect" = "kérelmezve a kapcsolódáshoz"; @@ -4039,6 +4234,9 @@ /* No comment provided by engineer. */ "Save group profile" = "Csoportprofil mentése"; +/* No comment provided by engineer. */ +"Save list" = "Lista mentése"; + /* No comment provided by engineer. */ "Save passphrase and open chat" = "Jelmondat mentése és a csevegés megnyitása"; @@ -4217,7 +4415,7 @@ "Send them from gallery or custom keyboards." = "Küldje el őket galériából vagy egyedi billentyűzetekről."; /* No comment provided by engineer. */ -"Send up to 100 last messages to new members." = "Az utolsó 100 üzenet elküldése az új tagoknak."; +"Send up to 100 last messages to new members." = "Legfeljebb az utolsó 100 üzenet elküldése az új tagok számára."; /* alert message */ "Sender cancelled file transfer." = "A fájl küldője visszavonta az átvitelt."; @@ -4277,7 +4475,7 @@ "Sent total" = "Összes elküldött üzenet"; /* No comment provided by engineer. */ -"Sent via proxy" = "Proxyn keresztül küldve"; +"Sent via proxy" = "Proxyn keresztül küldött"; /* No comment provided by engineer. */ "Server" = "Kiszolgáló"; @@ -4339,6 +4537,9 @@ /* No comment provided by engineer. */ "Set 1 day" = "Beállítva 1 nap"; +/* No comment provided by engineer. */ +"Set chat name…" = "Csevegés nevének beállítása…"; + /* No comment provided by engineer. */ "Set contact name…" = "Ismerős nevének beállítása…"; @@ -4346,7 +4547,7 @@ "Set default theme" = "Alapértelmezett téma beállítása"; /* No comment provided by engineer. */ -"Set group preferences" = "Csoportbeállítások megadása"; +"Set group preferences" = "Csoport-beállítások megadása"; /* No comment provided by engineer. */ "Set it instead of system authentication." = "Rendszerhitelesítés helyetti beállítás."; @@ -4547,6 +4748,10 @@ /* notification title */ "Somebody" = "Valaki"; +/* blocking reason + report reason */ +"Spam" = "Kéretlen tartalom"; + /* No comment provided by engineer. */ "Square, circle, or anything in between." = "Négyzet, kör vagy bármi a kettő között."; @@ -4604,6 +4809,9 @@ /* No comment provided by engineer. */ "Stopping chat" = "Csevegés megállítása folyamatban"; +/* No comment provided by engineer. */ +"Storage" = "Tárhely"; + /* No comment provided by engineer. */ "strike" = "áthúzott"; @@ -4737,10 +4945,10 @@ "The encryption is working and the new encryption agreement is not required. It may result in connection errors!" = "A titkosítás működik, és új titkosítási egyezményre nincs szükség. Ez kapcsolati hibákat eredményezhet!"; /* No comment provided by engineer. */ -"The future of messaging" = "A privát üzenetküldés következő generációja"; +"The future of messaging" = "Az üzenetváltás jövője"; /* No comment provided by engineer. */ -"The hash of the previous message is different." = "Az előző üzenet hasító értéke különbözik."; +"The hash of the previous message is different." = "Az előző üzenet hasítóértéke különbözik."; /* No comment provided by engineer. */ "The ID of the next message is incorrect (less or equal to the previous).\nIt can happen because of some bug or when the connection is compromised." = "A következő üzenet azonosítója érvénytelen (kisebb vagy egyenlő az előzővel).\nEz valamilyen hiba vagy sérült kapcsolat esetén fordulhat elő."; @@ -4763,6 +4971,9 @@ /* No comment provided by engineer. */ "The profile is only shared with your contacts." = "A profilja csak az ismerőseivel van megosztva."; +/* No comment provided by engineer. */ +"The report will be archived for you." = "A jelentés archiválva lesz az Ön számára."; + /* No comment provided by engineer. */ "The same conditions will apply to operator **%@**." = "Ugyanezek a feltételek lesznek elfogadva a következő üzemeltetőre is: **%@**."; @@ -4800,7 +5011,7 @@ "These settings are for your current profile **%@**." = "Ezek a beállítások csak a jelenlegi **%@** nevű csevegő-profiljára vonatkoznak."; /* No comment provided by engineer. */ -"They can be overridden in contact and group settings." = "Ezek felülbírálhatók az ismerős- és csoportbeállításokban."; +"They can be overridden in contact and group settings." = "Ezek felülbírálhatók az ismerős- és csoport-beállításokban."; /* No comment provided by engineer. */ "This action cannot be undone - all received and sent files and media will be deleted. Low resolution pictures will remain." = "Ez a művelet nem vonható vissza – az összes fogadott és küldött fájl a médiatartalmakkal együtt törölve lesznek. Az alacsony felbontású képek viszont megmaradnak."; @@ -4808,6 +5019,9 @@ /* No comment provided by engineer. */ "This action cannot be undone - the messages sent and received earlier than selected will be deleted. It may take several minutes." = "Ez a művelet nem vonható vissza – a kijelöltnél korábban küldött és fogadott üzenetek törölve lesznek. Ez több percet is igénybe vehet."; +/* alert message */ +"This action cannot be undone - the messages sent and received in this chat earlier than selected will be deleted." = "Ez a művelet nem vonható vissza – a kijelölt üzenettől korábban küldött és fogadott üzenetek törölve lesznek a csevegésből."; + /* No comment provided by engineer. */ "This action cannot be undone - your profile, contacts, messages and files will be irreversibly lost." = "Ez a művelet nem vonható vissza – profiljai, ismerősei, üzenetei és fájljai véglegesen törölve lesznek."; @@ -5015,10 +5229,7 @@ /* authentication reason */ "Unlock app" = "Alkalmazás feloldása"; -/* No comment provided by engineer. */ -"unmute" = "némítás megszüntetése"; - -/* swipe action */ +/* notification label action */ "Unmute" = "Némítás megszüntetése"; /* No comment provided by engineer. */ @@ -5079,7 +5290,7 @@ "Use %@" = "%@ használata"; /* No comment provided by engineer. */ -"Use chat" = "Csevegés használata"; +"Use chat" = "Simplex Chat használata"; /* No comment provided by engineer. */ "Use current profile" = "Jelenlegi profil használata"; @@ -5169,7 +5380,7 @@ "Via browser" = "Böngészőn keresztül"; /* chat list item description */ -"via contact address link" = "a kapcsolattartási cím-hivatkozáson keresztül"; +"via contact address link" = "a kapcsolattartási címhivatkozáson keresztül"; /* chat list item description */ "via group link" = "a csoporthivatkozáson keresztül"; @@ -5199,7 +5410,7 @@ "Video will be received when your contact is online, please wait or check later!" = "A videó akkor érkezik meg, amikor a küldője elérhető lesz, várjon, vagy ellenőrizze később!"; /* No comment provided by engineer. */ -"Videos and files up to 1gb" = "Videók és fájlok 1Gb méretig"; +"Videos and files up to 1gb" = "Videók és fájlok legfeljebb 1GB méretig"; /* No comment provided by engineer. */ "View conditions" = "Feltételek megtekintése"; @@ -5339,6 +5550,9 @@ /* pref value */ "yes" = "igen"; +/* No comment provided by engineer. */ +"Yes" = "Igen"; + /* No comment provided by engineer. */ "you" = "Ön"; diff --git a/apps/ios/it.lproj/Localizable.strings b/apps/ios/it.lproj/Localizable.strings index de0b761e4e..b016babfc1 100644 --- a/apps/ios/it.lproj/Localizable.strings +++ b/apps/ios/it.lproj/Localizable.strings @@ -1,6 +1,9 @@ /* No comment provided by engineer. */ "\n" = "\n"; +/* No comment provided by engineer. */ +" " = " "; + /* No comment provided by engineer. */ " (" = " ("; @@ -199,6 +202,9 @@ /* time interval */ "%d sec" = "%d sec"; +/* delete after time */ +"%d seconds(s)" = "%d secondo/i"; + /* integrity error chat item */ "%d skipped message(s)" = "%d messaggio/i saltato/i"; @@ -304,6 +310,9 @@ time interval */ "1 week" = "1 settimana"; +/* delete after time */ +"1 year" = "1 anno"; + /* No comment provided by engineer. */ "1-time link" = "Link una tantum"; @@ -397,6 +406,9 @@ /* No comment provided by engineer. */ "Add friends" = "Aggiungi amici"; +/* No comment provided by engineer. */ +"Add list" = "Aggiungi elenco"; + /* No comment provided by engineer. */ "Add profile" = "Aggiungi profilo"; @@ -412,6 +424,9 @@ /* No comment provided by engineer. */ "Add to another device" = "Aggiungi ad un altro dispositivo"; +/* No comment provided by engineer. */ +"Add to list" = "Aggiungi ad un elenco"; + /* No comment provided by engineer. */ "Add welcome message" = "Aggiungi messaggio di benvenuto"; @@ -469,12 +484,18 @@ /* chat item text */ "agreeing encryption…" = "concordando la crittografia…"; +/* No comment provided by engineer. */ +"All" = "Tutte"; + /* No comment provided by engineer. */ "All app data is deleted." = "Tutti i dati dell'app vengono eliminati."; /* No comment provided by engineer. */ "All chats and messages will be deleted - this cannot be undone!" = "Tutte le chat e i messaggi verranno eliminati. Non è reversibile!"; +/* alert message */ +"All chats will be removed from the list (text), and the list deleted." = "Tutte le chat verranno rimosse dall'elenco (testo) e l'elenco eliminato."; + /* No comment provided by engineer. */ "All data is erased when it is entered." = "Tutti i dati vengono cancellati quando inserito."; @@ -601,6 +622,9 @@ /* No comment provided by engineer. */ "and %lld other events" = "e altri %lld eventi"; +/* report reason */ +"Another reason" = "Altro motivo"; + /* No comment provided by engineer. */ "Answer call" = "Rispondi alla chiamata"; @@ -616,6 +640,9 @@ /* No comment provided by engineer. */ "App encrypts new local files (except videos)." = "L'app cripta i nuovi file locali (eccetto i video)."; +/* No comment provided by engineer. */ +"App group:" = "Gruppo app:"; + /* No comment provided by engineer. */ "App icon" = "Icona app"; @@ -643,18 +670,33 @@ /* No comment provided by engineer. */ "Apply to" = "Applica a"; +/* No comment provided by engineer. */ +"Archive" = "Archivia"; + /* No comment provided by engineer. */ "Archive and upload" = "Archivia e carica"; /* No comment provided by engineer. */ "Archive contacts to chat later." = "Archivia contatti per chattare più tardi."; +/* No comment provided by engineer. */ +"Archive report" = "Archivia la segnalazione"; + +/* No comment provided by engineer. */ +"Archive report?" = "Archiviare la segnalazione?"; + /* No comment provided by engineer. */ "Archived contacts" = "Contatti archiviati"; +/* No comment provided by engineer. */ +"archived report" = "segnalazione archiviata"; + /* No comment provided by engineer. */ "Archiving database" = "Archiviazione del database"; +/* No comment provided by engineer. */ +"Ask" = "Chiedi"; + /* No comment provided by engineer. */ "Attach" = "Allega"; @@ -814,6 +856,9 @@ /* No comment provided by engineer. */ "Business chats" = "Chat di lavoro"; +/* No comment provided by engineer. */ +"Businesses" = "Lavorative"; + /* No comment provided by engineer. */ "By chat profile (default) or [by connection](https://simplex.chat/blog/20230204-simplex-chat-v4-5-user-chat-profiles.html#transport-isolation) (BETA)." = "Per profilo di chat (predefinito) o [per connessione](https://simplex.chat/blog/20230204-simplex-chat-v4-5-user-chat-profiles.html#transport-isolation) (BETA)."; @@ -884,6 +929,9 @@ /* No comment provided by engineer. */ "Change" = "Cambia"; +/* alert title */ +"Change automatic message deletion?" = "Cambiare l'eliminazione automatica dei messaggi?"; + /* authentication reason */ "Change chat profiles" = "Modifica profili utente"; @@ -1032,6 +1080,9 @@ /* No comment provided by engineer. */ "Clear conversation?" = "Svuotare la conversazione?"; +/* No comment provided by engineer. */ +"Clear or delete group?" = "Svuotare o eliminare il gruppo?"; + /* No comment provided by engineer. */ "Clear private notes?" = "Svuotare le note private?"; @@ -1047,6 +1098,9 @@ /* No comment provided by engineer. */ "colored" = "colorato"; +/* report reason */ +"Community guidelines violation" = "Violazione delle linee guida della comunità"; + /* server test step */ "Compare file" = "Confronta file"; @@ -1218,6 +1272,9 @@ /* No comment provided by engineer. */ "Connection and servers status." = "Stato della connessione e dei server."; +/* No comment provided by engineer. */ +"Connection blocked" = "Connessione bloccata"; + /* No comment provided by engineer. */ "Connection error" = "Errore di connessione"; @@ -1227,12 +1284,21 @@ /* chat list item title (it should not be shown */ "connection established" = "connessione stabilita"; +/* No comment provided by engineer. */ +"Connection is blocked by server operator:\n%@" = "La connessione è bloccata dall'operatore del server:\n%@"; + +/* No comment provided by engineer. */ +"Connection not ready." = "Connessione non pronta."; + /* No comment provided by engineer. */ "Connection notifications" = "Notifiche di connessione"; /* No comment provided by engineer. */ "Connection request sent!" = "Richiesta di connessione inviata!"; +/* No comment provided by engineer. */ +"Connection requires encryption renegotiation." = "La connessione richiede la rinegoziazione della crittografia."; + /* No comment provided by engineer. */ "Connection security" = "Sicurezza della connessione"; @@ -1293,6 +1359,9 @@ /* No comment provided by engineer. */ "Contacts can mark messages for deletion; you will be able to view them." = "I contatti possono contrassegnare i messaggi per l'eliminazione; potrai vederli."; +/* blocking reason */ +"Content violates conditions of use" = "Il contenuto viola le condizioni di utilizzo"; + /* No comment provided by engineer. */ "Continue" = "Continua"; @@ -1335,6 +1404,9 @@ /* No comment provided by engineer. */ "Create link" = "Crea link"; +/* No comment provided by engineer. */ +"Create list" = "Crea elenco"; + /* No comment provided by engineer. */ "Create new profile in [desktop app](https://simplex.chat/downloads/). 💻" = "Crea un nuovo profilo nell'[app desktop](https://simplex.chat/downloads/). 💻"; @@ -1514,6 +1586,9 @@ /* No comment provided by engineer. */ "Delete chat" = "Elimina chat"; +/* No comment provided by engineer. */ +"Delete chat messages from your device." = "Elimina i messaggi di chat dal tuo dispositivo."; + /* No comment provided by engineer. */ "Delete chat profile" = "Elimina il profilo di chat"; @@ -1568,6 +1643,9 @@ /* No comment provided by engineer. */ "Delete link?" = "Eliminare il link?"; +/* alert title */ +"Delete list?" = "Eliminare l'elenco?"; + /* No comment provided by engineer. */ "Delete member message?" = "Eliminare il messaggio del membro?"; @@ -1598,6 +1676,9 @@ /* server test step */ "Delete queue" = "Elimina coda"; +/* No comment provided by engineer. */ +"Delete report" = "Elimina la segnalazione"; + /* No comment provided by engineer. */ "Delete up to 20 messages at once." = "Elimina fino a 20 messaggi contemporaneamente."; @@ -1706,6 +1787,12 @@ /* No comment provided by engineer. */ "Disable (keep overrides)" = "Disattiva (mantieni sostituzioni)"; +/* alert title */ +"Disable automatic message deletion?" = "Disattivare l'eliminazione automatica dei messaggi?"; + +/* alert button */ +"Disable delete messages" = "Disattiva eliminazione messaggi"; + /* No comment provided by engineer. */ "Disable for all" = "Disattiva per tutti"; @@ -1766,6 +1853,9 @@ /* No comment provided by engineer. */ "Do NOT use SimpleX for emergency calls." = "NON usare SimpleX per chiamate di emergenza."; +/* No comment provided by engineer. */ +"Documents:" = "Documenti:"; + /* No comment provided by engineer. */ "Don't create address" = "Non creare un indirizzo"; @@ -1775,6 +1865,9 @@ /* No comment provided by engineer. */ "Don't show again" = "Non mostrare più"; +/* No comment provided by engineer. */ +"Done" = "Fatto"; + /* No comment provided by engineer. */ "Downgrade and open chat" = "Esegui downgrade e apri chat"; @@ -1956,6 +2049,9 @@ /* chat item text */ "encryption re-negotiation required for %@" = "richiesta rinegoziazione della crittografia per %@"; +/* No comment provided by engineer. */ +"Encryption renegotiation in progress." = "Rinegoziazione della crittografia in corso."; + /* No comment provided by engineer. */ "ended" = "terminata"; @@ -2043,6 +2139,9 @@ /* No comment provided by engineer. */ "Error creating group link" = "Errore nella creazione del link del gruppo"; +/* alert title */ +"Error creating list" = "Errore nella creazione dell'elenco"; + /* No comment provided by engineer. */ "Error creating member contact" = "Errore di creazione del contatto"; @@ -2052,6 +2151,9 @@ /* No comment provided by engineer. */ "Error creating profile!" = "Errore nella creazione del profilo!"; +/* No comment provided by engineer. */ +"Error creating report" = "Errore nella creazione del resoconto"; + /* No comment provided by engineer. */ "Error decrypting file" = "Errore decifrando il file"; @@ -2121,9 +2223,15 @@ /* No comment provided by engineer. */ "Error removing member" = "Errore nella rimozione del membro"; +/* alert title */ +"Error reordering lists" = "Errore riordinando gli elenchi"; + /* No comment provided by engineer. */ "Error resetting statistics" = "Errore di azzeramento statistiche"; +/* alert title */ +"Error saving chat list" = "Errore nel salvataggio dell'elenco di chat"; + /* No comment provided by engineer. */ "Error saving group profile" = "Errore nel salvataggio del profilo del gruppo"; @@ -2259,12 +2367,18 @@ /* swipe action */ "Favorite" = "Preferito"; +/* No comment provided by engineer. */ +"Favorites" = "Preferite"; + /* file error alert title */ "File error" = "Errore del file"; /* alert message */ "File errors:\n%@" = "Errori di file:\n%@"; +/* file error text */ +"File is blocked by server operator:\n(info.reason.text)." = "Il file è bloccato dall'operatore del server:\n(info.reason.text)."; + /* file error text */ "File not found - most likely file was deleted or cancelled." = "File non trovato - probabilmente è stato eliminato o annullato."; @@ -2496,6 +2610,9 @@ /* No comment provided by engineer. */ "Group will be deleted for you - this cannot be undone!" = "Il gruppo verrà eliminato per te. Non è reversibile!"; +/* No comment provided by engineer. */ +"Groups" = "Gruppi"; + /* No comment provided by engineer. */ "Help" = "Aiuto"; @@ -2535,6 +2652,9 @@ /* No comment provided by engineer. */ "How it helps privacy" = "Come aiuta la privacy"; +/* alert button */ +"How it works" = "Come funziona"; + /* No comment provided by engineer. */ "How SimpleX works" = "Come funziona SimpleX"; @@ -2622,6 +2742,12 @@ /* No comment provided by engineer. */ "inactive" = "inattivo"; +/* report reason */ +"Inappropriate content" = "Contenuto inappropriato"; + +/* report reason */ +"Inappropriate profile" = "Profilo inappropriato"; + /* No comment provided by engineer. */ "Incognito" = "Incognito"; @@ -2889,6 +3015,15 @@ /* No comment provided by engineer. */ "Linked desktops" = "Desktop collegati"; +/* swipe action */ +"List" = "Elenco"; + +/* No comment provided by engineer. */ +"List name and emoji should be different for all lists." = "Il nome dell'elenco e l'emoji dovrebbero essere diversi per tutte le liste."; + +/* No comment provided by engineer. */ +"List name..." = "Nome elenco..."; + /* No comment provided by engineer. */ "LIVE" = "IN DIRETTA"; @@ -3066,6 +3201,9 @@ /* No comment provided by engineer. */ "Messages from %@ will be shown!" = "I messaggi da %@ verranno mostrati!"; +/* alert message */ +"Messages in this chat will never be deleted." = "I messaggi in questa chat non verranno mai eliminati."; + /* No comment provided by engineer. */ "Messages received" = "Messaggi ricevuti"; @@ -3138,9 +3276,15 @@ /* marked deleted chat item preview text */ "moderated by %@" = "moderato da %@"; +/* member role */ +"moderator" = "moderatore"; + /* time unit */ "months" = "mesi"; +/* swipe action */ +"More" = "Altro"; + /* No comment provided by engineer. */ "More improvements are coming soon!" = "Altri miglioramenti sono in arrivo!"; @@ -3156,10 +3300,7 @@ /* No comment provided by engineer. */ "Multiple chat profiles" = "Profili di chat multipli"; -/* No comment provided by engineer. */ -"mute" = "silenzia"; - -/* swipe action */ +/* notification label action */ "Mute" = "Silenzia"; /* No comment provided by engineer. */ @@ -3255,6 +3396,15 @@ /* Authentication unavailable */ "No app password" = "Nessuna password dell'app"; +/* No comment provided by engineer. */ +"No chats" = "Nessuna chat"; + +/* No comment provided by engineer. */ +"No chats found" = "Nessuna chat trovata"; + +/* No comment provided by engineer. */ +"No chats in list %@" = "Nessuna chat nell'elenco %@"; + /* No comment provided by engineer. */ "No contacts selected" = "Nessun contatto selezionato"; @@ -3324,12 +3474,18 @@ /* copied message info in history */ "no text" = "nessun testo"; +/* No comment provided by engineer. */ +"No unread chats" = "Nessuna chat non letta"; + /* No comment provided by engineer. */ "No user identifiers." = "Nessun identificatore utente."; /* No comment provided by engineer. */ "Not compatible!" = "Non compatibile!"; +/* No comment provided by engineer. */ +"Notes" = "Note"; + /* No comment provided by engineer. */ "Nothing selected" = "Nessuna selezione"; @@ -3407,6 +3563,12 @@ /* No comment provided by engineer. */ "Only group owners can enable voice messages." = "Solo i proprietari del gruppo possono attivare i messaggi vocali."; +/* No comment provided by engineer. */ +"Only sender and moderators see it" = "Solo il mittente e i moderatori lo vedono"; + +/* No comment provided by engineer. */ +"Only you and moderators see it" = "Solo tu e i moderatori lo vedete"; + /* No comment provided by engineer. */ "Only you can add message reactions." = "Solo tu puoi aggiungere reazioni ai messaggi."; @@ -3455,12 +3617,21 @@ /* No comment provided by engineer. */ "Open group" = "Apri gruppo"; +/* No comment provided by engineer. */ +"Open link" = "Apri link"; + +/* No comment provided by engineer. */ +"Open links from chat list" = "Apri i link dall'elenco delle chat"; + /* authentication reason */ "Open migration to another device" = "Apri migrazione ad un altro dispositivo"; /* No comment provided by engineer. */ "Open Settings" = "Apri le impostazioni"; +/* No comment provided by engineer. */ +"Open web link?" = "Aprire il link?"; + /* No comment provided by engineer. */ "Opening app…" = "Apertura dell'app…"; @@ -3936,6 +4107,30 @@ /* chat item action */ "Reply" = "Rispondi"; +/* chat item action */ +"Report" = "Segnala"; + +/* report reason */ +"Report content: only group moderators will see it." = "Segnala contenuto: solo i moderatori del gruppo lo vedranno."; + +/* report reason */ +"Report member profile: only group moderators will see it." = "Segnala profilo: solo i moderatori del gruppo lo vedranno."; + +/* report reason */ +"Report other: only group moderators will see it." = "Segnala altro: solo i moderatori del gruppo lo vedranno."; + +/* No comment provided by engineer. */ +"Report reason?" = "Motivo della segnalazione?"; + +/* report reason */ +"Report spam: only group moderators will see it." = "Segnala spam: solo i moderatori del gruppo lo vedranno."; + +/* report reason */ +"Report violation: only group moderators will see it." = "Segnala violazione: solo i moderatori del gruppo lo vedranno."; + +/* No comment provided by engineer. */ +"Reports" = "Segnalazioni"; + /* chat list item title */ "requested to connect" = "richiesto di connettersi"; @@ -4039,6 +4234,9 @@ /* No comment provided by engineer. */ "Save group profile" = "Salva il profilo del gruppo"; +/* No comment provided by engineer. */ +"Save list" = "Salva elenco"; + /* No comment provided by engineer. */ "Save passphrase and open chat" = "Salva la password e apri la chat"; @@ -4339,6 +4537,9 @@ /* No comment provided by engineer. */ "Set 1 day" = "Imposta 1 giorno"; +/* No comment provided by engineer. */ +"Set chat name…" = "Imposta il nome della chat…"; + /* No comment provided by engineer. */ "Set contact name…" = "Imposta nome del contatto…"; @@ -4547,6 +4748,10 @@ /* notification title */ "Somebody" = "Qualcuno"; +/* blocking reason + report reason */ +"Spam" = "Spam"; + /* No comment provided by engineer. */ "Square, circle, or anything in between." = "Quadrata, circolare o qualsiasi forma tra le due."; @@ -4604,6 +4809,9 @@ /* No comment provided by engineer. */ "Stopping chat" = "Arresto della chat"; +/* No comment provided by engineer. */ +"Storage" = "Archiviazione"; + /* No comment provided by engineer. */ "strike" = "barrato"; @@ -4763,6 +4971,9 @@ /* No comment provided by engineer. */ "The profile is only shared with your contacts." = "Il profilo è condiviso solo con i tuoi contatti."; +/* No comment provided by engineer. */ +"The report will be archived for you." = "La segnalazione verrà archiviata per te."; + /* No comment provided by engineer. */ "The same conditions will apply to operator **%@**." = "Le stesse condizioni si applicheranno all'operatore **%@**."; @@ -4808,6 +5019,9 @@ /* No comment provided by engineer. */ "This action cannot be undone - the messages sent and received earlier than selected will be deleted. It may take several minutes." = "Questa azione non può essere annullata: i messaggi inviati e ricevuti prima di quanto selezionato verranno eliminati. Potrebbe richiedere diversi minuti."; +/* alert message */ +"This action cannot be undone - the messages sent and received in this chat earlier than selected will be deleted." = "Questa azione non è reversibile: i messaggi inviati e ricevuti in questa chat prima della selezione verranno eliminati."; + /* No comment provided by engineer. */ "This action cannot be undone - your profile, contacts, messages and files will be irreversibly lost." = "Questa azione non può essere annullata: il tuo profilo, i contatti, i messaggi e i file andranno persi in modo irreversibile."; @@ -5015,10 +5229,7 @@ /* authentication reason */ "Unlock app" = "Sblocca l'app"; -/* No comment provided by engineer. */ -"unmute" = "riattiva notifiche"; - -/* swipe action */ +/* notification label action */ "Unmute" = "Riattiva notifiche"; /* No comment provided by engineer. */ @@ -5339,6 +5550,9 @@ /* pref value */ "yes" = "sì"; +/* No comment provided by engineer. */ +"Yes" = "Sì"; + /* No comment provided by engineer. */ "you" = "tu"; diff --git a/apps/ios/ja.lproj/Localizable.strings b/apps/ios/ja.lproj/Localizable.strings index 39b455f8d1..b97da471b2 100644 --- a/apps/ios/ja.lproj/Localizable.strings +++ b/apps/ios/ja.lproj/Localizable.strings @@ -2201,7 +2201,7 @@ /* No comment provided by engineer. */ "Multiple chat profiles" = "複数チャットのプロフィール"; -/* swipe action */ +/* notification label action */ "Mute" = "ミュート"; /* No comment provided by engineer. */ @@ -3256,7 +3256,7 @@ /* authentication reason */ "Unlock app" = "アプリのロック解除"; -/* swipe action */ +/* notification label action */ "Unmute" = "ミュート解除"; /* swipe action */ diff --git a/apps/ios/nl.lproj/Localizable.strings b/apps/ios/nl.lproj/Localizable.strings index 4ec93e1188..0f03f40496 100644 --- a/apps/ios/nl.lproj/Localizable.strings +++ b/apps/ios/nl.lproj/Localizable.strings @@ -1,6 +1,9 @@ /* No comment provided by engineer. */ "\n" = "\n"; +/* No comment provided by engineer. */ +" " = " "; + /* No comment provided by engineer. */ " (" = " ("; @@ -199,6 +202,9 @@ /* time interval */ "%d sec" = "%d sec"; +/* delete after time */ +"%d seconds(s)" = "%d seconden"; + /* integrity error chat item */ "%d skipped message(s)" = "%d overgeslagen bericht(en)"; @@ -304,6 +310,9 @@ time interval */ "1 week" = "1 week"; +/* delete after time */ +"1 year" = "1 jaar"; + /* No comment provided by engineer. */ "1-time link" = "Eenmalige link"; @@ -397,6 +406,9 @@ /* No comment provided by engineer. */ "Add friends" = "Vrienden toevoegen"; +/* No comment provided by engineer. */ +"Add list" = "Lijst toevoegen"; + /* No comment provided by engineer. */ "Add profile" = "Profiel toevoegen"; @@ -412,6 +424,9 @@ /* No comment provided by engineer. */ "Add to another device" = "Toevoegen aan een ander apparaat"; +/* No comment provided by engineer. */ +"Add to list" = "Toevoegen aan lijst"; + /* No comment provided by engineer. */ "Add welcome message" = "Welkom bericht toevoegen"; @@ -469,12 +484,18 @@ /* chat item text */ "agreeing encryption…" = "versleuteling overeenkomen…"; +/* No comment provided by engineer. */ +"All" = "alle"; + /* No comment provided by engineer. */ "All app data is deleted." = "Alle app-gegevens worden verwijderd."; /* No comment provided by engineer. */ "All chats and messages will be deleted - this cannot be undone!" = "Alle chats en berichten worden verwijderd, dit kan niet ongedaan worden gemaakt!"; +/* alert message */ +"All chats will be removed from the list (text), and the list deleted." = "Alle chats worden uit de lijst (tekst) verwijderd en de lijst wordt verwijderd."; + /* No comment provided by engineer. */ "All data is erased when it is entered." = "Alle gegevens worden bij het invoeren gewist."; @@ -601,6 +622,9 @@ /* No comment provided by engineer. */ "and %lld other events" = "en %lld andere gebeurtenissen"; +/* report reason */ +"Another reason" = "Een andere reden"; + /* No comment provided by engineer. */ "Answer call" = "Beantwoord oproep"; @@ -616,6 +640,9 @@ /* No comment provided by engineer. */ "App encrypts new local files (except videos)." = "App versleutelt nieuwe lokale bestanden (behalve video's)."; +/* No comment provided by engineer. */ +"App group:" = "App-groep:"; + /* No comment provided by engineer. */ "App icon" = "App icon"; @@ -643,18 +670,33 @@ /* No comment provided by engineer. */ "Apply to" = "Toepassen op"; +/* No comment provided by engineer. */ +"Archive" = "Archief"; + /* No comment provided by engineer. */ "Archive and upload" = "Archiveren en uploaden"; /* No comment provided by engineer. */ "Archive contacts to chat later." = "Archiveer contacten om later te chatten."; +/* No comment provided by engineer. */ +"Archive report" = "Rapport archiveren"; + +/* No comment provided by engineer. */ +"Archive report?" = "Rapport archiveren?"; + /* No comment provided by engineer. */ "Archived contacts" = "Gearchiveerde contacten"; +/* No comment provided by engineer. */ +"archived report" = "gearchiveerd rapport"; + /* No comment provided by engineer. */ "Archiving database" = "Database archiveren"; +/* No comment provided by engineer. */ +"Ask" = "Vragen"; + /* No comment provided by engineer. */ "Attach" = "Bijvoegen"; @@ -814,6 +856,9 @@ /* No comment provided by engineer. */ "Business chats" = "Zakelijke chats"; +/* No comment provided by engineer. */ +"Businesses" = "bedrijven"; + /* No comment provided by engineer. */ "By chat profile (default) or [by connection](https://simplex.chat/blog/20230204-simplex-chat-v4-5-user-chat-profiles.html#transport-isolation) (BETA)." = "Via chatprofiel (standaard) of [via verbinding](https://simplex.chat/blog/20230204-simplex-chat-v4-5-user-chat-profiles.html#transport-isolation) (BETA)."; @@ -884,6 +929,9 @@ /* No comment provided by engineer. */ "Change" = "Veranderen"; +/* alert title */ +"Change automatic message deletion?" = "Automatisch verwijderen van berichten wijzigen?"; + /* authentication reason */ "Change chat profiles" = "Gebruikersprofielen wijzigen"; @@ -1032,6 +1080,9 @@ /* No comment provided by engineer. */ "Clear conversation?" = "Gesprek wissen?"; +/* No comment provided by engineer. */ +"Clear or delete group?" = "Groep wissen of verwijderen?"; + /* No comment provided by engineer. */ "Clear private notes?" = "Privénotities verwijderen?"; @@ -1047,6 +1098,9 @@ /* No comment provided by engineer. */ "colored" = "gekleurd"; +/* report reason */ +"Community guidelines violation" = "Schending van de communityrichtlijnen"; + /* server test step */ "Compare file" = "Bestand vergelijken"; @@ -1218,6 +1272,9 @@ /* No comment provided by engineer. */ "Connection and servers status." = "Verbindings- en serverstatus."; +/* No comment provided by engineer. */ +"Connection blocked" = "Verbinding geblokkeerd"; + /* No comment provided by engineer. */ "Connection error" = "Verbindingsfout"; @@ -1227,12 +1284,21 @@ /* chat list item title (it should not be shown */ "connection established" = "verbinding gemaakt"; +/* No comment provided by engineer. */ +"Connection is blocked by server operator:\n%@" = "Verbinding is geblokkeerd door serveroperator:\n%@"; + +/* No comment provided by engineer. */ +"Connection not ready." = "Verbinding nog niet klaar."; + /* No comment provided by engineer. */ "Connection notifications" = "Verbindingsmeldingen"; /* No comment provided by engineer. */ "Connection request sent!" = "Verbindingsverzoek verzonden!"; +/* No comment provided by engineer. */ +"Connection requires encryption renegotiation." = "Verbinding vereist heronderhandeling over encryptie."; + /* No comment provided by engineer. */ "Connection security" = "Beveiliging van de verbinding"; @@ -1293,6 +1359,9 @@ /* No comment provided by engineer. */ "Contacts can mark messages for deletion; you will be able to view them." = "Contact personen kunnen berichten markeren voor verwijdering; u kunt ze wel bekijken."; +/* blocking reason */ +"Content violates conditions of use" = "Inhoud schendt de gebruiksvoorwaarden"; + /* No comment provided by engineer. */ "Continue" = "Doorgaan"; @@ -1335,6 +1404,9 @@ /* No comment provided by engineer. */ "Create link" = "Maak link"; +/* No comment provided by engineer. */ +"Create list" = "Maak een lijst"; + /* No comment provided by engineer. */ "Create new profile in [desktop app](https://simplex.chat/downloads/). 💻" = "Maak een nieuw profiel aan in [desktop-app](https://simplex.chat/downloads/). 💻"; @@ -1514,6 +1586,9 @@ /* No comment provided by engineer. */ "Delete chat" = "Chat verwijderen"; +/* No comment provided by engineer. */ +"Delete chat messages from your device." = "Verwijder chatberichten van uw apparaat."; + /* No comment provided by engineer. */ "Delete chat profile" = "Chatprofiel verwijderen"; @@ -1568,6 +1643,9 @@ /* No comment provided by engineer. */ "Delete link?" = "Link verwijderen?"; +/* alert title */ +"Delete list?" = "Lijst verwijderen?"; + /* No comment provided by engineer. */ "Delete member message?" = "Bericht van lid verwijderen?"; @@ -1598,6 +1676,9 @@ /* server test step */ "Delete queue" = "Wachtrij verwijderen"; +/* No comment provided by engineer. */ +"Delete report" = "Rapport verwijderen"; + /* No comment provided by engineer. */ "Delete up to 20 messages at once." = "Verwijder maximaal 20 berichten tegelijk."; @@ -1706,6 +1787,12 @@ /* No comment provided by engineer. */ "Disable (keep overrides)" = "Uitschakelen (overschrijvingen behouden)"; +/* alert title */ +"Disable automatic message deletion?" = "Automatisch verwijderen van berichten uitschakelen?"; + +/* alert button */ +"Disable delete messages" = "Berichten verwijderen uitschakelen"; + /* No comment provided by engineer. */ "Disable for all" = "Uitschakelen voor iedereen"; @@ -1766,6 +1853,9 @@ /* No comment provided by engineer. */ "Do NOT use SimpleX for emergency calls." = "Gebruik SimpleX NIET voor noodoproepen."; +/* No comment provided by engineer. */ +"Documents:" = "Documenten:"; + /* No comment provided by engineer. */ "Don't create address" = "Maak geen adres aan"; @@ -1775,6 +1865,9 @@ /* No comment provided by engineer. */ "Don't show again" = "Niet meer weergeven"; +/* No comment provided by engineer. */ +"Done" = "Klaar"; + /* No comment provided by engineer. */ "Downgrade and open chat" = "Downgraden en chat openen"; @@ -1956,6 +2049,9 @@ /* chat item text */ "encryption re-negotiation required for %@" = "heronderhandeling van versleuteling vereist voor % @"; +/* No comment provided by engineer. */ +"Encryption renegotiation in progress." = "Er wordt opnieuw onderhandeld over de encryptie."; + /* No comment provided by engineer. */ "ended" = "geëindigd"; @@ -2043,6 +2139,9 @@ /* No comment provided by engineer. */ "Error creating group link" = "Fout bij maken van groep link"; +/* alert title */ +"Error creating list" = "Fout bij het aanmaken van de lijst"; + /* No comment provided by engineer. */ "Error creating member contact" = "Fout bij aanmaken contact"; @@ -2052,6 +2151,9 @@ /* No comment provided by engineer. */ "Error creating profile!" = "Fout bij aanmaken van profiel!"; +/* No comment provided by engineer. */ +"Error creating report" = "Fout bij maken van rapport"; + /* No comment provided by engineer. */ "Error decrypting file" = "Fout bij het ontsleutelen van bestand"; @@ -2121,9 +2223,15 @@ /* No comment provided by engineer. */ "Error removing member" = "Fout bij verwijderen van lid"; +/* alert title */ +"Error reordering lists" = "Fout bij het opnieuw ordenen van lijsten"; + /* No comment provided by engineer. */ "Error resetting statistics" = "Fout bij het resetten van statistieken"; +/* alert title */ +"Error saving chat list" = "Fout bij het opslaan van chatlijst"; + /* No comment provided by engineer. */ "Error saving group profile" = "Fout bij opslaan van groep profiel"; @@ -2259,12 +2367,18 @@ /* swipe action */ "Favorite" = "Favoriet"; +/* No comment provided by engineer. */ +"Favorites" = "Favorieten"; + /* file error alert title */ "File error" = "Bestandsfout"; /* alert message */ "File errors:\n%@" = "Bestandsfouten:\n%@"; +/* file error text */ +"File is blocked by server operator:\n(info.reason.text)." = "Bestand is geblokkeerd door serveroperator:\n(info.reason.text)."; + /* file error text */ "File not found - most likely file was deleted or cancelled." = "Bestand niet gevonden - hoogstwaarschijnlijk is het bestand verwijderd of geannuleerd."; @@ -2496,6 +2610,9 @@ /* No comment provided by engineer. */ "Group will be deleted for you - this cannot be undone!" = "De groep wordt voor u verwijderd, dit kan niet ongedaan worden gemaakt!"; +/* No comment provided by engineer. */ +"Groups" = "Groepen"; + /* No comment provided by engineer. */ "Help" = "Help"; @@ -2535,6 +2652,9 @@ /* No comment provided by engineer. */ "How it helps privacy" = "Hoe het de privacy helpt"; +/* alert button */ +"How it works" = "Hoe het werkt"; + /* No comment provided by engineer. */ "How SimpleX works" = "Hoe SimpleX werkt"; @@ -2622,6 +2742,12 @@ /* No comment provided by engineer. */ "inactive" = "inactief"; +/* report reason */ +"Inappropriate content" = "Ongepaste inhoud"; + +/* report reason */ +"Inappropriate profile" = "Ongepast profiel"; + /* No comment provided by engineer. */ "Incognito" = "Incognito"; @@ -2889,6 +3015,15 @@ /* No comment provided by engineer. */ "Linked desktops" = "Gelinkte desktops"; +/* swipe action */ +"List" = "Lijst"; + +/* No comment provided by engineer. */ +"List name and emoji should be different for all lists." = "De naam en emoji van de lijst moeten voor alle lijsten verschillend zijn."; + +/* No comment provided by engineer. */ +"List name..." = "Naam van lijst..."; + /* No comment provided by engineer. */ "LIVE" = "LIVE"; @@ -3066,6 +3201,9 @@ /* No comment provided by engineer. */ "Messages from %@ will be shown!" = "Berichten van %@ worden getoond!"; +/* alert message */ +"Messages in this chat will never be deleted." = "Berichten in deze chat zullen nooit worden verwijderd."; + /* No comment provided by engineer. */ "Messages received" = "Berichten ontvangen"; @@ -3138,9 +3276,15 @@ /* marked deleted chat item preview text */ "moderated by %@" = "gemodereerd door %@"; +/* member role */ +"moderator" = "moderator"; + /* time unit */ "months" = "maanden"; +/* swipe action */ +"More" = "Meer"; + /* No comment provided by engineer. */ "More improvements are coming soon!" = "Meer verbeteringen volgen snel!"; @@ -3156,10 +3300,7 @@ /* No comment provided by engineer. */ "Multiple chat profiles" = "Meerdere chatprofielen"; -/* No comment provided by engineer. */ -"mute" = "dempen"; - -/* swipe action */ +/* notification label action */ "Mute" = "Dempen"; /* No comment provided by engineer. */ @@ -3255,6 +3396,15 @@ /* Authentication unavailable */ "No app password" = "Geen app wachtwoord"; +/* No comment provided by engineer. */ +"No chats" = "Geen chats"; + +/* No comment provided by engineer. */ +"No chats found" = "Geen chats gevonden"; + +/* No comment provided by engineer. */ +"No chats in list %@" = "Geen chats in lijst %@"; + /* No comment provided by engineer. */ "No contacts selected" = "Geen contacten geselecteerd"; @@ -3324,12 +3474,18 @@ /* copied message info in history */ "no text" = "geen tekst"; +/* No comment provided by engineer. */ +"No unread chats" = "Geen ongelezen chats"; + /* No comment provided by engineer. */ "No user identifiers." = "Geen gebruikers-ID's."; /* No comment provided by engineer. */ "Not compatible!" = "Niet compatibel!"; +/* No comment provided by engineer. */ +"Notes" = "Notities"; + /* No comment provided by engineer. */ "Nothing selected" = "Niets geselecteerd"; @@ -3407,6 +3563,12 @@ /* No comment provided by engineer. */ "Only group owners can enable voice messages." = "Alleen groep eigenaren kunnen spraak berichten inschakelen."; +/* No comment provided by engineer. */ +"Only sender and moderators see it" = "Alleen de verzender en moderators zien het"; + +/* No comment provided by engineer. */ +"Only you and moderators see it" = "Alleen jij en moderators zien het"; + /* No comment provided by engineer. */ "Only you can add message reactions." = "Alleen jij kunt bericht reacties toevoegen."; @@ -3455,12 +3617,21 @@ /* No comment provided by engineer. */ "Open group" = "Open groep"; +/* No comment provided by engineer. */ +"Open link" = "Link openen"; + +/* No comment provided by engineer. */ +"Open links from chat list" = "Open links van chatlijst"; + /* authentication reason */ "Open migration to another device" = "Open de migratie naar een ander apparaat"; /* No comment provided by engineer. */ "Open Settings" = "Open instellingen"; +/* No comment provided by engineer. */ +"Open web link?" = "Weblink openen?"; + /* No comment provided by engineer. */ "Opening app…" = "App openen…"; @@ -3936,6 +4107,30 @@ /* chat item action */ "Reply" = "Antwoord"; +/* chat item action */ +"Report" = "Rapport"; + +/* report reason */ +"Report content: only group moderators will see it." = "Inhoud melden: alleen groepsmoderators kunnen dit zien."; + +/* report reason */ +"Report member profile: only group moderators will see it." = "Rapporteer ledenprofiel: alleen groepsmoderators kunnen dit zien."; + +/* report reason */ +"Report other: only group moderators will see it." = "Anders melden: alleen groepsmoderators kunnen het zien."; + +/* No comment provided by engineer. */ +"Report reason?" = "Reden melding?"; + +/* report reason */ +"Report spam: only group moderators will see it." = "Spam melden: alleen groepsmoderators kunnen het zien."; + +/* report reason */ +"Report violation: only group moderators will see it." = "Rapporteer overtreding: alleen groepsmoderators kunnen dit zien."; + +/* No comment provided by engineer. */ +"Reports" = "Rapporten"; + /* chat list item title */ "requested to connect" = "verzocht om verbinding te maken"; @@ -4039,6 +4234,9 @@ /* No comment provided by engineer. */ "Save group profile" = "Groep profiel opslaan"; +/* No comment provided by engineer. */ +"Save list" = "Lijst opslaan"; + /* No comment provided by engineer. */ "Save passphrase and open chat" = "Wachtwoord opslaan en open je chats"; @@ -4339,6 +4537,9 @@ /* No comment provided by engineer. */ "Set 1 day" = "Stel 1 dag in"; +/* No comment provided by engineer. */ +"Set chat name…" = "Stel chatnaam in…"; + /* No comment provided by engineer. */ "Set contact name…" = "Contactnaam instellen…"; @@ -4547,6 +4748,10 @@ /* notification title */ "Somebody" = "Iemand"; +/* blocking reason + report reason */ +"Spam" = "Spam"; + /* No comment provided by engineer. */ "Square, circle, or anything in between." = "Vierkant, cirkel of iets daartussenin."; @@ -4604,6 +4809,9 @@ /* No comment provided by engineer. */ "Stopping chat" = "Chat stoppen"; +/* No comment provided by engineer. */ +"Storage" = "Opslag"; + /* No comment provided by engineer. */ "strike" = "staking"; @@ -4763,6 +4971,9 @@ /* No comment provided by engineer. */ "The profile is only shared with your contacts." = "Het profiel wordt alleen gedeeld met uw contacten."; +/* No comment provided by engineer. */ +"The report will be archived for you." = "Het rapport wordt voor u gearchiveerd."; + /* No comment provided by engineer. */ "The same conditions will apply to operator **%@**." = "Dezelfde voorwaarden gelden voor operator **%@**."; @@ -4808,6 +5019,9 @@ /* No comment provided by engineer. */ "This action cannot be undone - the messages sent and received earlier than selected will be deleted. It may take several minutes." = "Deze actie kan niet ongedaan worden gemaakt, de berichten die eerder zijn verzonden en ontvangen dan geselecteerd, worden verwijderd. Het kan enkele minuten duren."; +/* alert message */ +"This action cannot be undone - the messages sent and received in this chat earlier than selected will be deleted." = "Deze actie kan niet ongedaan worden gemaakt. De berichten die eerder in deze chat zijn verzonden en ontvangen dan geselecteerd, worden verwijderd."; + /* No comment provided by engineer. */ "This action cannot be undone - your profile, contacts, messages and files will be irreversibly lost." = "Deze actie kan niet ongedaan worden gemaakt. Uw profiel, contacten, berichten en bestanden gaan definitief verloren."; @@ -5015,10 +5229,7 @@ /* authentication reason */ "Unlock app" = "Ontgrendel app"; -/* No comment provided by engineer. */ -"unmute" = "dempen opheffen"; - -/* swipe action */ +/* notification label action */ "Unmute" = "Dempen opheffen"; /* No comment provided by engineer. */ @@ -5339,6 +5550,9 @@ /* pref value */ "yes" = "Ja"; +/* No comment provided by engineer. */ +"Yes" = "Ja"; + /* No comment provided by engineer. */ "you" = "jij"; diff --git a/apps/ios/pl.lproj/Localizable.strings b/apps/ios/pl.lproj/Localizable.strings index b32a9e37d4..592194f19a 100644 --- a/apps/ios/pl.lproj/Localizable.strings +++ b/apps/ios/pl.lproj/Localizable.strings @@ -199,6 +199,9 @@ /* time interval */ "%d sec" = "%d sek"; +/* delete after time */ +"%d seconds(s)" = "%d sekundach"; + /* integrity error chat item */ "%d skipped message(s)" = "%d pominięte wiadomość(i)"; @@ -304,6 +307,9 @@ time interval */ "1 week" = "1 tydzień"; +/* delete after time */ +"1 year" = "1 roku"; + /* No comment provided by engineer. */ "1-time link" = "link jednorazowy"; @@ -394,6 +400,9 @@ /* No comment provided by engineer. */ "Add friends" = "Dodaj znajomych"; +/* No comment provided by engineer. */ +"Add list" = "Dodaj listę"; + /* No comment provided by engineer. */ "Add profile" = "Dodaj profil"; @@ -409,6 +418,9 @@ /* No comment provided by engineer. */ "Add to another device" = "Dodaj do innego urządzenia"; +/* No comment provided by engineer. */ +"Add to list" = "Dodaj do listy"; + /* No comment provided by engineer. */ "Add welcome message" = "Dodaj wiadomość powitalną"; @@ -466,12 +478,18 @@ /* chat item text */ "agreeing encryption…" = "uzgadnianie szyfrowania…"; +/* No comment provided by engineer. */ +"All" = "Wszystko"; + /* No comment provided by engineer. */ "All app data is deleted." = "Wszystkie dane aplikacji są usunięte."; /* No comment provided by engineer. */ "All chats and messages will be deleted - this cannot be undone!" = "Wszystkie czaty i wiadomości zostaną usunięte - nie można tego cofnąć!"; +/* alert message */ +"All chats will be removed from the list (text), and the list deleted." = "Wszystkie rozmowy zostaną usunięte z listy (text), a lista usunięta."; + /* No comment provided by engineer. */ "All data is erased when it is entered." = "Wszystkie dane są usuwane po jego wprowadzeniu."; @@ -808,6 +826,9 @@ /* No comment provided by engineer. */ "Business chats" = "Czaty biznesowe"; +/* No comment provided by engineer. */ +"Businesses" = "Firmy"; + /* No comment provided by engineer. */ "By chat profile (default) or [by connection](https://simplex.chat/blog/20230204-simplex-chat-v4-5-user-chat-profiles.html#transport-isolation) (BETA)." = "Według profilu czatu (domyślnie) lub [według połączenia](https://simplex.chat/blog/20230204-simplex-chat-v4-5-user-chat-profiles.html#transport-isolation) (BETA)."; @@ -3042,10 +3063,7 @@ /* No comment provided by engineer. */ "Multiple chat profiles" = "Wiele profili czatu"; -/* No comment provided by engineer. */ -"mute" = "wycisz"; - -/* swipe action */ +/* notification label action */ "Mute" = "Wycisz"; /* No comment provided by engineer. */ @@ -4751,10 +4769,7 @@ /* authentication reason */ "Unlock app" = "Odblokuj aplikację"; -/* No comment provided by engineer. */ -"unmute" = "wyłącz wyciszenie"; - -/* swipe action */ +/* notification label action */ "Unmute" = "Wyłącz wyciszenie"; /* No comment provided by engineer. */ diff --git a/apps/ios/ru.lproj/Localizable.strings b/apps/ios/ru.lproj/Localizable.strings index b43c46f208..5d78aaa35b 100644 --- a/apps/ios/ru.lproj/Localizable.strings +++ b/apps/ios/ru.lproj/Localizable.strings @@ -199,6 +199,9 @@ /* time interval */ "%d sec" = "%d сек"; +/* delete after time */ +"%d seconds(s)" = "%d секунд"; + /* integrity error chat item */ "%d skipped message(s)" = "%d пропущенных сообщение(й)"; @@ -304,6 +307,9 @@ time interval */ "1 week" = "1 неделю"; +/* delete after time */ +"1 year" = "1 год"; + /* No comment provided by engineer. */ "1-time link" = "Одноразовая ссылка"; @@ -397,6 +403,9 @@ /* No comment provided by engineer. */ "Add friends" = "Добавить друзей"; +/* No comment provided by engineer. */ +"Add list" = "Добавить список"; + /* No comment provided by engineer. */ "Add profile" = "Добавить профиль"; @@ -412,6 +421,9 @@ /* No comment provided by engineer. */ "Add to another device" = "Добавить на другое устройство"; +/* No comment provided by engineer. */ +"Add to list" = "Добавить в список"; + /* No comment provided by engineer. */ "Add welcome message" = "Добавить приветственное сообщение"; @@ -469,6 +481,9 @@ /* chat item text */ "agreeing encryption…" = "шифрование согласовывается…"; +/* No comment provided by engineer. */ +"All" = "Все"; + /* No comment provided by engineer. */ "All app data is deleted." = "Все данные приложения будут удалены."; @@ -601,6 +616,9 @@ /* No comment provided by engineer. */ "and %lld other events" = "и %lld других событий"; +/* report reason */ +"Another reason" = "Другая причина"; + /* No comment provided by engineer. */ "Answer call" = "Принять звонок"; @@ -643,12 +661,21 @@ /* No comment provided by engineer. */ "Apply to" = "Применить к"; +/* No comment provided by engineer. */ +"Archive" = "Архивировать"; + /* No comment provided by engineer. */ "Archive and upload" = "Архивировать и загрузить"; /* No comment provided by engineer. */ "Archive contacts to chat later." = "Архивируйте контакты чтобы продолжить переписку."; +/* No comment provided by engineer. */ +"Archive report" = "Архивировать отчет"; + +/* No comment provided by engineer. */ +"Archive report?" = "Архивировать отчет?"; + /* No comment provided by engineer. */ "Archived contacts" = "Архивированные контакты"; @@ -3156,10 +3183,7 @@ /* No comment provided by engineer. */ "Multiple chat profiles" = "Много профилей чата"; -/* No comment provided by engineer. */ -"mute" = "без звука"; - -/* swipe action */ +/* notification label action */ "Mute" = "Без звука"; /* No comment provided by engineer. */ @@ -5015,10 +5039,7 @@ /* authentication reason */ "Unlock app" = "Разблокировать"; -/* No comment provided by engineer. */ -"unmute" = "уведомлять"; - -/* swipe action */ +/* notification label action */ "Unmute" = "Уведомлять"; /* No comment provided by engineer. */ diff --git a/apps/ios/th.lproj/Localizable.strings b/apps/ios/th.lproj/Localizable.strings index a959e29f08..0a3564fe91 100644 --- a/apps/ios/th.lproj/Localizable.strings +++ b/apps/ios/th.lproj/Localizable.strings @@ -1928,7 +1928,7 @@ /* No comment provided by engineer. */ "Multiple chat profiles" = "โปรไฟล์การแชทหลายรายการ"; -/* swipe action */ +/* notification label action */ "Mute" = "ปิดเสียง"; /* No comment provided by engineer. */ @@ -2971,7 +2971,7 @@ /* authentication reason */ "Unlock app" = "ปลดล็อคแอป"; -/* swipe action */ +/* notification label action */ "Unmute" = "เปิดเสียง"; /* swipe action */ diff --git a/apps/ios/tr.lproj/Localizable.strings b/apps/ios/tr.lproj/Localizable.strings index 0da95054aa..dd0d7c6217 100644 --- a/apps/ios/tr.lproj/Localizable.strings +++ b/apps/ios/tr.lproj/Localizable.strings @@ -3141,10 +3141,7 @@ /* No comment provided by engineer. */ "Multiple chat profiles" = "Çoklu sohbet profili"; -/* No comment provided by engineer. */ -"mute" = "Sessiz"; - -/* swipe action */ +/* notification label action */ "Mute" = "Sustur"; /* No comment provided by engineer. */ @@ -4859,10 +4856,7 @@ /* authentication reason */ "Unlock app" = "Uygulama kilidini aç"; -/* No comment provided by engineer. */ -"unmute" = "susturmayı kaldır"; - -/* swipe action */ +/* notification label action */ "Unmute" = "Susturmayı kaldır"; /* No comment provided by engineer. */ diff --git a/apps/ios/uk.lproj/Localizable.strings b/apps/ios/uk.lproj/Localizable.strings index 9b4a1d0980..f750d1ac8b 100644 --- a/apps/ios/uk.lproj/Localizable.strings +++ b/apps/ios/uk.lproj/Localizable.strings @@ -3156,10 +3156,7 @@ /* No comment provided by engineer. */ "Multiple chat profiles" = "Кілька профілів чату"; -/* No comment provided by engineer. */ -"mute" = "приглушити"; - -/* swipe action */ +/* notification label action */ "Mute" = "Вимкнути звук"; /* No comment provided by engineer. */ @@ -5015,10 +5012,7 @@ /* authentication reason */ "Unlock app" = "Розблокувати додаток"; -/* No comment provided by engineer. */ -"unmute" = "увімкнути звук"; - -/* swipe action */ +/* notification label action */ "Unmute" = "Увімкнути звук"; /* No comment provided by engineer. */ diff --git a/apps/ios/zh-Hans.lproj/Localizable.strings b/apps/ios/zh-Hans.lproj/Localizable.strings index f7ab7f7994..68ca7a839f 100644 --- a/apps/ios/zh-Hans.lproj/Localizable.strings +++ b/apps/ios/zh-Hans.lproj/Localizable.strings @@ -2865,10 +2865,7 @@ /* No comment provided by engineer. */ "Multiple chat profiles" = "多个聊天资料"; -/* No comment provided by engineer. */ -"mute" = "静音"; - -/* swipe action */ +/* notification label action */ "Mute" = "静音"; /* No comment provided by engineer. */ @@ -4508,10 +4505,7 @@ /* authentication reason */ "Unlock app" = "解锁应用程序"; -/* No comment provided by engineer. */ -"unmute" = "取消静音"; - -/* swipe action */ +/* notification label action */ "Unmute" = "取消静音"; /* No comment provided by engineer. */ diff --git a/apps/multiplatform/android/src/main/AndroidManifest.xml b/apps/multiplatform/android/src/main/AndroidManifest.xml index bb6a6f8f8a..48dfba11cc 100644 --- a/apps/multiplatform/android/src/main/AndroidManifest.xml +++ b/apps/multiplatform/android/src/main/AndroidManifest.xml @@ -179,5 +179,16 @@ android:name=".SimplexService$AutoRestartReceiver" android:enabled="true" android:exported="false" /> + + + + + + + + diff --git a/apps/multiplatform/android/src/main/java/chat/simplex/app/SimplexApp.kt b/apps/multiplatform/android/src/main/java/chat/simplex/app/SimplexApp.kt index ee259a98d0..1c8209334d 100644 --- a/apps/multiplatform/android/src/main/java/chat/simplex/app/SimplexApp.kt +++ b/apps/multiplatform/android/src/main/java/chat/simplex/app/SimplexApp.kt @@ -71,6 +71,7 @@ class SimplexApp: Application(), LifecycleEventObserver { context = this initHaskell(packageName) initMultiplatform() + reconfigureBroadcastReceivers() runMigrations() tmpDir.deleteRecursively() tmpDir.mkdir() @@ -216,6 +217,7 @@ class SimplexApp: Application(), LifecycleEventObserver { appPrefs.backgroundServiceNoticeShown.set(false) } SimplexService.StartReceiver.toggleReceiver(mode == NotificationsMode.SERVICE) + SimplexService.AppUpdateReceiver.toggleReceiver(mode == NotificationsMode.SERVICE) CoroutineScope(Dispatchers.Default).launch { if (mode == NotificationsMode.SERVICE) { SimplexService.start() @@ -371,4 +373,10 @@ class SimplexApp: Application(), LifecycleEventObserver { override val androidApiLevel: Int get() = Build.VERSION.SDK_INT } } + + // Make sure that receivers enabled state is in actual state (same as in prefs) + private fun reconfigureBroadcastReceivers() { + val mode = appPrefs.notificationsMode.get() + SimplexService.StartReceiver.toggleReceiver(mode == NotificationsMode.SERVICE) + SimplexService.AppUpdateReceiver.toggleReceiver(mode == NotificationsMode.SERVICE)} } 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 6ca8dd43a0..ad86759ba9 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 @@ -249,6 +249,29 @@ class SimplexService: Service() { } } + // restart on app update + class AppUpdateReceiver: BroadcastReceiver() { + override fun onReceive(context: Context, intent: Intent) { + // If notification service is enabled and battery optimization is disabled, restart the service on app update + if (SimplexApp.context.allowToStartServiceAfterAppExit()) { + Log.d(TAG, "AppUpdateReceiver: onReceive called") + scheduleStart(context) + } + } + + companion object { + fun toggleReceiver(enable: Boolean) { + Log.d(TAG, "AppUpdateReceiver: toggleReceiver enabled: $enable") + val component = ComponentName(BuildConfig.APPLICATION_ID, AppUpdateReceiver::class.java.name) + SimplexApp.context.packageManager.setComponentEnabledSetting( + component, + if (enable) PackageManager.COMPONENT_ENABLED_STATE_ENABLED else PackageManager.COMPONENT_ENABLED_STATE_DISABLED, + PackageManager.DONT_KILL_APP + ) + } + } + } + class ServiceStartWorker(private val context: Context, params: WorkerParameters): CoroutineWorker(context, params) { override suspend fun doWork(): Result { val id = this.id @@ -694,6 +717,7 @@ class SimplexService: Service() { } ChatController.appPrefs.notificationsMode.set(NotificationsMode.OFF) StartReceiver.toggleReceiver(false) + AppUpdateReceiver.toggleReceiver(false) androidAppContext.getWorkManagerInstance().cancelUniqueWork(SimplexService.SERVICE_START_WORKER_WORK_NAME_PERIODIC) MessagesFetcherWorker.cancelAll() safeStopService() diff --git a/apps/multiplatform/common/build.gradle.kts b/apps/multiplatform/common/build.gradle.kts index 5b7f89f2df..345a75b1e7 100644 --- a/apps/multiplatform/common/build.gradle.kts +++ b/apps/multiplatform/common/build.gradle.kts @@ -154,6 +154,7 @@ buildConfig { buildConfigField("int", "ANDROID_VERSION_CODE", "${extra["android.version_code"]}") buildConfigField("String", "DESKTOP_VERSION_NAME", "\"${extra["desktop.version_name"]}\"") buildConfigField("int", "DESKTOP_VERSION_CODE", "${extra["desktop.version_code"]}") + buildConfigField("String", "DATABASE_BACKEND", "\"${extra["database.backend"]}\"") } } diff --git a/apps/multiplatform/common/src/androidMain/kotlin/chat/simplex/common/platform/PlatformTextField.android.kt b/apps/multiplatform/common/src/androidMain/kotlin/chat/simplex/common/platform/PlatformTextField.android.kt index 64937b5ccc..54e437afb1 100644 --- a/apps/multiplatform/common/src/androidMain/kotlin/chat/simplex/common/platform/PlatformTextField.android.kt +++ b/apps/multiplatform/common/src/androidMain/kotlin/chat/simplex/common/platform/PlatformTextField.android.kt @@ -122,8 +122,10 @@ actual fun PlatformTextField( } override fun onSelectionChanged(selStart: Int, selEnd: Int) { - onMessageChange(ComposeMessage(text.toString(), TextRange(minOf(selStart, selEnd), maxOf(selStart, selEnd)))) - super.onSelectionChanged(selStart, selEnd) + val start = minOf(text.length, minOf(selStart, selEnd)) + val end = minOf(text.length, maxOf(selStart, selEnd)) + onMessageChange(ComposeMessage(text.toString(), TextRange(start, end))) + super.onSelectionChanged(start, end) } } editText.layoutParams = ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT) 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 a148392572..51c27b21de 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 @@ -851,8 +851,8 @@ object ChatModel { changeGroupReportsCounter(rhId, chatId, 1) } - fun decreaseGroupReportsCounter(rhId: Long?, chatId: ChatId) { - changeGroupReportsCounter(rhId, chatId, -1) + fun decreaseGroupReportsCounter(rhId: Long?, chatId: ChatId, by: Int = 1) { + changeGroupReportsCounter(rhId, chatId, -by) } private fun changeGroupReportsCounter(rhId: Long?, chatId: ChatId, by: Int = 0) { @@ -1225,18 +1225,7 @@ data class Chat( fun groupFeatureEnabled(feature: GroupFeature): Boolean = if (chatInfo is ChatInfo.Group) { - val groupInfo = chatInfo.groupInfo - val p = groupInfo.fullGroupPreferences - when (feature) { - GroupFeature.TimedMessages -> p.timedMessages.on - GroupFeature.DirectMessages -> p.directMessages.on(groupInfo.membership) - GroupFeature.FullDelete -> p.fullDelete.on - GroupFeature.Reactions -> p.reactions.on - GroupFeature.Voice -> p.voice.on(groupInfo.membership) - GroupFeature.Files -> p.files.on(groupInfo.membership) - GroupFeature.SimplexLinks -> p.simplexLinks.on(groupInfo.membership) - GroupFeature.History -> p.history.on - } + chatInfo.groupInfo.groupFeatureEnabled(feature) } else { true } @@ -1780,6 +1769,21 @@ data class GroupInfo ( val canModerate: Boolean get() = membership.memberRole >= GroupMemberRole.Moderator && membership.memberActive + fun groupFeatureEnabled(feature: GroupFeature): Boolean { + val p = fullGroupPreferences + return when (feature) { + GroupFeature.TimedMessages -> p.timedMessages.on + GroupFeature.DirectMessages -> p.directMessages.on(membership) + GroupFeature.FullDelete -> p.fullDelete.on + GroupFeature.Reactions -> p.reactions.on + GroupFeature.Voice -> p.voice.on(membership) + GroupFeature.Files -> p.files.on(membership) + GroupFeature.SimplexLinks -> p.simplexLinks.on(membership) + GroupFeature.Reports -> p.reports.on + GroupFeature.History -> p.history.on + } + } + companion object { val sampleData = GroupInfo( groupId = 1, 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 6021d48b0a..7205bcc89b 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 @@ -1071,6 +1071,20 @@ object ChatController { return null } + suspend fun apiArchiveReceivedReports(rh: Long?, groupId: Long): CR.GroupChatItemsDeleted? { + val r = sendCmd(rh, CC.ApiArchiveReceivedReports(groupId)) + if (r is CR.GroupChatItemsDeleted) return r + Log.e(TAG, "apiArchiveReceivedReports bad response: ${r.responseType} ${r.details}") + return null + } + + suspend fun apiDeleteReceivedReports(rh: Long?, groupId: Long, itemIds: List, mode: CIDeleteMode): List? { + val r = sendCmd(rh, CC.ApiDeleteReceivedReports(groupId, itemIds, mode)) + if (r is CR.ChatItemsDeleted) return r.chatItemDeletions + Log.e(TAG, "apiDeleteReceivedReports bad response: ${r.responseType} ${r.details}") + return null + } + suspend fun testProtoServer(rh: Long?, server: String): ProtocolTestFailure? { val userId = currentUserId("testProtoServer") val r = sendCmd(rh, CC.APITestProtoServer(userId, server)) @@ -2606,6 +2620,9 @@ object ChatController { } else { upsertChatItem(rhId, cInfo, toChatItem.chatItem) } + if (cItem.isActiveReport) { + decreaseGroupReportsCounter(rhId, cInfo.id) + } } withReportsChatsIfOpen { if (cItem.isReport) { @@ -2619,54 +2636,7 @@ object ChatController { } } is CR.GroupChatItemsDeleted -> { - if (!active(r.user)) { - val users = chatController.listUsers(rhId) - chatModel.users.clear() - chatModel.users.addAll(users) - return - } - val cInfo = ChatInfo.Group(r.groupInfo) - withChats { - r.chatItemIDs.forEach { itemId -> - decreaseGroupReportsCounter(rhId, cInfo.id) - val cItem = chatItems.value.lastOrNull { it.id == itemId } ?: return@forEach - if (chatModel.chatId.value != null) { - // Stop voice playback only inside a chat, allow to play in a chat list - AudioPlayer.stop(cItem) - } - val isLastChatItem = getChat(cInfo.id)?.chatItems?.lastOrNull()?.id == cItem.id - if (isLastChatItem && ntfManager.hasNotificationsForChat(cInfo.id)) { - ntfManager.cancelNotificationsForChat(cInfo.id) - ntfManager.displayNotification( - r.user, - cInfo.id, - cInfo.displayName, - generalGetString(MR.strings.marked_deleted_description) - ) - } - val deleted = if (r.member_ != null && (cItem.chatDir as CIDirection.GroupRcv?)?.groupMember?.groupMemberId != r.member_.groupMemberId) { - CIDeleted.Moderated(Clock.System.now(), r.member_) - } else { - CIDeleted.Deleted(Clock.System.now()) - } - upsertChatItem(rhId, cInfo, cItem.copy(meta = cItem.meta.copy(itemDeleted = deleted))) - } - } - withReportsChatsIfOpen { - r.chatItemIDs.forEach { itemId -> - val cItem = chatItems.value.lastOrNull { it.id == itemId } ?: return@forEach - if (chatModel.chatId.value != null) { - // Stop voice playback only inside a chat, allow to play in a chat list - AudioPlayer.stop(cItem) - } - val deleted = if (r.member_ != null && (cItem.chatDir as CIDirection.GroupRcv?)?.groupMember?.groupMemberId != r.member_.groupMemberId) { - CIDeleted.Moderated(Clock.System.now(), r.member_) - } else { - CIDeleted.Deleted(Clock.System.now()) - } - upsertChatItem(rhId, cInfo, cItem.copy(meta = cItem.meta.copy(itemDeleted = deleted))) - } - } + groupChatItemsDeleted(rhId, r) } is CR.ReceivedGroupInvitation -> { if (active(r.user)) { @@ -3150,6 +3120,57 @@ object ChatController { } } + suspend fun groupChatItemsDeleted(rhId: Long?, r: CR.GroupChatItemsDeleted) { + if (!activeUser(rhId, r.user)) { + val users = chatController.listUsers(rhId) + chatModel.users.clear() + chatModel.users.addAll(users) + return + } + val cInfo = ChatInfo.Group(r.groupInfo) + withChats { + r.chatItemIDs.forEach { itemId -> + decreaseGroupReportsCounter(rhId, cInfo.id) + val cItem = chatItems.value.lastOrNull { it.id == itemId } ?: return@forEach + if (chatModel.chatId.value != null) { + // Stop voice playback only inside a chat, allow to play in a chat list + AudioPlayer.stop(cItem) + } + val isLastChatItem = getChat(cInfo.id)?.chatItems?.lastOrNull()?.id == cItem.id + if (isLastChatItem && ntfManager.hasNotificationsForChat(cInfo.id)) { + ntfManager.cancelNotificationsForChat(cInfo.id) + ntfManager.displayNotification( + r.user, + cInfo.id, + cInfo.displayName, + generalGetString(MR.strings.marked_deleted_description) + ) + } + val deleted = if (r.member_ != null && (cItem.chatDir as CIDirection.GroupRcv?)?.groupMember?.groupMemberId != r.member_.groupMemberId) { + CIDeleted.Moderated(Clock.System.now(), r.member_) + } else { + CIDeleted.Deleted(Clock.System.now()) + } + upsertChatItem(rhId, cInfo, cItem.copy(meta = cItem.meta.copy(itemDeleted = deleted))) + } + } + withReportsChatsIfOpen { + r.chatItemIDs.forEach { itemId -> + val cItem = chatItems.value.lastOrNull { it.id == itemId } ?: return@forEach + if (chatModel.chatId.value != null) { + // Stop voice playback only inside a chat, allow to play in a chat list + AudioPlayer.stop(cItem) + } + val deleted = if (r.member_ != null && (cItem.chatDir as CIDirection.GroupRcv?)?.groupMember?.groupMemberId != r.member_.groupMemberId) { + CIDeleted.Moderated(Clock.System.now(), r.member_) + } else { + CIDeleted.Deleted(Clock.System.now()) + } + upsertChatItem(rhId, cInfo, cItem.copy(meta = cItem.meta.copy(itemDeleted = deleted))) + } + } + } + private suspend fun chatItemUpdateNotify(rh: Long?, user: UserLike, aChatItem: AChatItem) { val cInfo = aChatItem.chatInfo val cItem = aChatItem.chatItem @@ -3375,6 +3396,8 @@ sealed class CC { class ApiUpdateChatItem(val type: ChatType, val id: Long, val itemId: Long, val updatedMessage: UpdatedMessage, val live: Boolean): CC() class ApiDeleteChatItem(val type: ChatType, val id: Long, val itemIds: List, val mode: CIDeleteMode): CC() class ApiDeleteMemberChatItem(val groupId: Long, val itemIds: List): CC() + class ApiArchiveReceivedReports(val groupId: Long): CC() + class ApiDeleteReceivedReports(val groupId: Long, val itemIds: List, val mode: CIDeleteMode): CC() class ApiChatItemReaction(val type: ChatType, val id: Long, val itemId: Long, val add: Boolean, val reaction: MsgReaction): CC() class ApiGetReactionMembers(val userId: Long, val groupId: Long, val itemId: Long, val reaction: MsgReaction): CC() class ApiPlanForwardChatItems(val fromChatType: ChatType, val fromChatId: Long, val chatItemIds: List): CC() @@ -3553,6 +3576,8 @@ sealed class CC { is ApiUpdateChatItem -> "/_update item ${chatRef(type, id)} $itemId live=${onOff(live)} ${updatedMessage.cmdString}" is ApiDeleteChatItem -> "/_delete item ${chatRef(type, id)} ${itemIds.joinToString(",")} ${mode.deleteMode}" is ApiDeleteMemberChatItem -> "/_delete member item #$groupId ${itemIds.joinToString(",")}" + is ApiArchiveReceivedReports -> "/_archive reports #$groupId" + is ApiDeleteReceivedReports -> "/_delete reports #$groupId ${itemIds.joinToString(",")} ${mode.deleteMode}" is ApiChatItemReaction -> "/_reaction ${chatRef(type, id)} $itemId ${onOff(add)} ${json.encodeToString(reaction)}" is ApiGetReactionMembers -> "/_reaction members $userId #$groupId $itemId ${json.encodeToString(reaction)}" is ApiForwardChatItems -> { @@ -3719,6 +3744,8 @@ sealed class CC { is ApiUpdateChatItem -> "apiUpdateChatItem" is ApiDeleteChatItem -> "apiDeleteChatItem" is ApiDeleteMemberChatItem -> "apiDeleteMemberChatItem" + is ApiArchiveReceivedReports -> "apiArchiveReceivedReports" + is ApiDeleteReceivedReports -> "apiDeleteReceivedReports" is ApiChatItemReaction -> "apiChatItemReaction" is ApiGetReactionMembers -> "apiGetReactionMembers" is ApiForwardChatItems -> "apiForwardChatItems" @@ -5160,6 +5187,7 @@ enum class GroupFeature: Feature { @SerialName("voice") Voice, @SerialName("files") Files, @SerialName("simplexLinks") SimplexLinks, + @SerialName("reports") Reports, @SerialName("history") History; override val hasParam: Boolean get() = when(this) { @@ -5176,6 +5204,7 @@ enum class GroupFeature: Feature { Voice -> true Files -> true SimplexLinks -> true + Reports -> false History -> false } @@ -5188,6 +5217,7 @@ enum class GroupFeature: Feature { Voice -> generalGetString(MR.strings.voice_messages) Files -> generalGetString(MR.strings.files_and_media) SimplexLinks -> generalGetString(MR.strings.simplex_links) + Reports -> generalGetString(MR.strings.group_reports_member_reports) History -> generalGetString(MR.strings.recent_history) } @@ -5200,6 +5230,7 @@ enum class GroupFeature: Feature { Voice -> painterResource(MR.images.ic_keyboard_voice) Files -> painterResource(MR.images.ic_draft) SimplexLinks -> painterResource(MR.images.ic_link) + Reports -> painterResource(MR.images.ic_flag) History -> painterResource(MR.images.ic_schedule) } @@ -5212,6 +5243,7 @@ enum class GroupFeature: Feature { Voice -> painterResource(MR.images.ic_keyboard_voice_filled) Files -> painterResource(MR.images.ic_draft_filled) SimplexLinks -> painterResource(MR.images.ic_link) + Reports -> painterResource(MR.images.ic_flag_filled) History -> painterResource(MR.images.ic_schedule_filled) } @@ -5246,6 +5278,10 @@ enum class GroupFeature: Feature { GroupFeatureEnabled.ON -> generalGetString(MR.strings.allow_to_send_simplex_links) GroupFeatureEnabled.OFF -> generalGetString(MR.strings.prohibit_sending_simplex_links) } + Reports -> when(enabled) { + GroupFeatureEnabled.ON -> generalGetString(MR.strings.enable_sending_member_reports) + GroupFeatureEnabled.OFF -> generalGetString(MR.strings.disable_sending_member_reports) + } History -> when(enabled) { GroupFeatureEnabled.ON -> generalGetString(MR.strings.enable_sending_recent_history) GroupFeatureEnabled.OFF -> generalGetString(MR.strings.disable_sending_recent_history) @@ -5281,6 +5317,10 @@ enum class GroupFeature: Feature { GroupFeatureEnabled.ON -> generalGetString(MR.strings.group_members_can_send_simplex_links) GroupFeatureEnabled.OFF -> generalGetString(MR.strings.simplex_links_are_prohibited_in_group) } + Reports -> when(enabled) { + GroupFeatureEnabled.ON -> generalGetString(MR.strings.group_members_can_send_reports) + GroupFeatureEnabled.OFF -> generalGetString(MR.strings.member_reports_are_prohibited) + } History -> when(enabled) { GroupFeatureEnabled.ON -> generalGetString(MR.strings.recent_history_is_sent_to_new_members) GroupFeatureEnabled.OFF -> generalGetString(MR.strings.recent_history_is_not_sent_to_new_members) @@ -5400,6 +5440,7 @@ data class FullGroupPreferences( val voice: RoleGroupPreference, val files: RoleGroupPreference, val simplexLinks: RoleGroupPreference, + val reports: GroupPreference, val history: GroupPreference, ) { fun toGroupPreferences(): GroupPreferences = @@ -5411,7 +5452,8 @@ data class FullGroupPreferences( voice = voice, files = files, simplexLinks = simplexLinks, - history = history + reports = reports, + history = history, ) companion object { @@ -5423,6 +5465,7 @@ data class FullGroupPreferences( voice = RoleGroupPreference(GroupFeatureEnabled.ON, role = null), files = RoleGroupPreference(GroupFeatureEnabled.ON, role = null), simplexLinks = RoleGroupPreference(GroupFeatureEnabled.ON, role = null), + reports = GroupPreference(GroupFeatureEnabled.ON), history = GroupPreference(GroupFeatureEnabled.ON), ) } @@ -5437,6 +5480,7 @@ data class GroupPreferences( val voice: RoleGroupPreference? = null, val files: RoleGroupPreference? = null, val simplexLinks: RoleGroupPreference? = null, + val reports: GroupPreference? = null, val history: GroupPreference? = null, ) { companion object { @@ -5448,6 +5492,7 @@ data class GroupPreferences( voice = RoleGroupPreference(GroupFeatureEnabled.ON, role = null), files = RoleGroupPreference(GroupFeatureEnabled.ON, role = null), simplexLinks = RoleGroupPreference(GroupFeatureEnabled.ON, role = null), + reports = GroupPreference(GroupFeatureEnabled.ON), history = GroupPreference(GroupFeatureEnabled.ON), ) } diff --git a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/platform/AppCommon.kt b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/platform/AppCommon.kt index 60a65eaac6..780f8c25b4 100644 --- a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/platform/AppCommon.kt +++ b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/platform/AppCommon.kt @@ -28,6 +28,8 @@ val appVersionInfo: Pair = if (appPlatform == AppPlatform.ANDROID) else BuildConfigCommon.DESKTOP_VERSION_NAME to BuildConfigCommon.DESKTOP_VERSION_CODE +val databaseBackend: String = if (appPlatform == AppPlatform.ANDROID) "sqlite" else BuildConfigCommon.DATABASE_BACKEND + class FifoQueue(private var capacity: Int) : LinkedList() { override fun add(element: E): Boolean { if(size > capacity) removeFirst() diff --git a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/platform/Core.kt b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/platform/Core.kt index 5262714099..276d3e3909 100644 --- a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/platform/Core.kt +++ b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/platform/Core.kt @@ -63,7 +63,11 @@ suspend fun initChatController(useKey: String? = null, confirmMigrations: Migrat } val dbKey = useKey ?: DatabaseUtils.useDatabaseKey() val confirm = confirmMigrations ?: if (appPreferences.developerTools.get() && appPreferences.confirmDBUpgrades.get()) MigrationConfirmation.Error else MigrationConfirmation.YesUp - var migrated: Array = chatMigrateInit(dbAbsolutePrefixPath, dbKey, MigrationConfirmation.Error.value) + var migrated: Array = if (databaseBackend == "postgres") { + chatMigrateInit("simplex_v1", "postgresql://simplex@/simplex_v1", MigrationConfirmation.Error.value) + } else { + chatMigrateInit(dbAbsolutePrefixPath, dbKey, MigrationConfirmation.Error.value) + } var res: DBMigrationResult = runCatching { json.decodeFromString(migrated[0] as String) }.getOrElse { DBMigrationResult.Unknown(migrated[0] as String) } 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 43ea0a499e..5efd3747a3 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 @@ -134,7 +134,12 @@ abstract class NtfManager { } res } else { - cItem.text + val mc = cItem.content.msgContent + if (mc is MsgContent.MCReport) { + generalGetString(MR.strings.notification_group_report).format(cItem.text.ifEmpty { mc.reason.text }) + } else { + cItem.text + } } } } 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 51dc568e24..8b94f36d75 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 @@ -196,6 +196,7 @@ fun ChatView( ) } }, + archiveItems = { archiveItems(chatRh, chatInfo, selectedChatItems) }, moderateItems = { if (chatInfo is ChatInfo.Group) { val itemIds = selectedChatItems.value @@ -397,6 +398,7 @@ fun ChatView( } }, deleteMessages = { itemIds -> deleteMessages(chatRh, chatInfo, itemIds, false, moderate = false) }, + archiveReports = { itemIds, forAll -> archiveReports(chatRh, chatInfo, itemIds, forAll) }, receiveFile = { fileId -> withBGApi { chatModel.controller.receiveFile(chatRh, user, fileId) } }, @@ -673,6 +675,7 @@ fun ChatLayout( loadMessages: suspend (ChatId, ChatPagination, visibleItemIndexesNonReversed: () -> IntRange) -> Unit, deleteMessage: (Long, CIDeleteMode) -> Unit, deleteMessages: (List) -> Unit, + archiveReports: (List, Boolean) -> Unit, receiveFile: (Long) -> Unit, cancelFile: (Long) -> Unit, joinGroup: (Long, () -> Unit) -> Unit, @@ -745,7 +748,7 @@ fun ChatLayout( }) { ChatItemsList( remoteHostId, chatInfo, unreadCount, composeState, composeViewHeight, searchValue, - useLinkPreviews, linkMode, scrollToItemId, selectedChatItems, showMemberInfo, showChatInfo = info, loadMessages, deleteMessage, deleteMessages, + useLinkPreviews, linkMode, scrollToItemId, selectedChatItems, showMemberInfo, showChatInfo = info, loadMessages, deleteMessage, deleteMessages, archiveReports, receiveFile, cancelFile, joinGroup, acceptCall, acceptFeature, openDirectChat, forwardItem, updateContactStats, updateMemberStats, syncContactConnection, syncMemberConnection, findModelChat, findModelMember, setReaction, showItemDetails, markItemsRead, markChatRead, remember { { onComposed(it) } }, developerTools, showViaProxy, @@ -792,6 +795,7 @@ fun ChatLayout( }) } }, + archiveItems = { archiveItems(remoteHostId, chatInfo, selectedChatItems) }, moderateItems = {}, forwardItems = {} ) @@ -1138,6 +1142,7 @@ fun BoxScope.ChatItemsList( loadMessages: suspend (ChatId, ChatPagination, visibleItemIndexesNonReversed: () -> IntRange) -> Unit, deleteMessage: (Long, CIDeleteMode) -> Unit, deleteMessages: (List) -> Unit, + archiveReports: (List, Boolean) -> Unit, receiveFile: (Long) -> Unit, cancelFile: (Long) -> Unit, joinGroup: (Long, () -> Unit) -> Unit, @@ -1291,7 +1296,7 @@ fun BoxScope.ChatItemsList( highlightedItems.value = setOf() } } - ChatItemView(remoteHostId, chatInfo, cItem, composeState, provider, useLinkPreviews = useLinkPreviews, linkMode = linkMode, revealed = revealed, highlighted = highlighted, range = range, fillMaxWidth = fillMaxWidth, selectedChatItems = selectedChatItems, selectChatItem = { selectUnselectChatItem(true, cItem, revealed, selectedChatItems, reversedChatItems) }, deleteMessage = deleteMessage, deleteMessages = deleteMessages, receiveFile = receiveFile, cancelFile = cancelFile, joinGroup = joinGroup, acceptCall = acceptCall, acceptFeature = acceptFeature, openDirectChat = openDirectChat, forwardItem = forwardItem, updateContactStats = updateContactStats, updateMemberStats = updateMemberStats, syncContactConnection = syncContactConnection, syncMemberConnection = syncMemberConnection, findModelChat = findModelChat, findModelMember = findModelMember, scrollToItem = scrollToItem, scrollToQuotedItemFromItem = scrollToQuotedItemFromItem, setReaction = setReaction, showItemDetails = showItemDetails, reveal = reveal, showMemberInfo = showMemberInfo, showChatInfo = showChatInfo, developerTools = developerTools, showViaProxy = showViaProxy, itemSeparation = itemSeparation, showTimestamp = itemSeparation.timestamp) + ChatItemView(remoteHostId, chatInfo, cItem, composeState, provider, useLinkPreviews = useLinkPreviews, linkMode = linkMode, revealed = revealed, highlighted = highlighted, range = range, fillMaxWidth = fillMaxWidth, selectedChatItems = selectedChatItems, selectChatItem = { selectUnselectChatItem(true, cItem, revealed, selectedChatItems, reversedChatItems) }, deleteMessage = deleteMessage, deleteMessages = deleteMessages, archiveReports = archiveReports, receiveFile = receiveFile, cancelFile = cancelFile, joinGroup = joinGroup, acceptCall = acceptCall, acceptFeature = acceptFeature, openDirectChat = openDirectChat, forwardItem = forwardItem, updateContactStats = updateContactStats, updateMemberStats = updateMemberStats, syncContactConnection = syncContactConnection, syncMemberConnection = syncMemberConnection, findModelChat = findModelChat, findModelMember = findModelMember, scrollToItem = scrollToItem, scrollToQuotedItemFromItem = scrollToQuotedItemFromItem, setReaction = setReaction, showItemDetails = showItemDetails, reveal = reveal, showMemberInfo = showMemberInfo, showChatInfo = showChatInfo, developerTools = developerTools, showViaProxy = showViaProxy, itemSeparation = itemSeparation, showTimestamp = itemSeparation.timestamp) } } @@ -2368,6 +2373,59 @@ private fun deleteMessages(chatRh: Long?, chatInfo: ChatInfo, itemIds: List, forAll: Boolean, onSuccess: () -> Unit = {}) { + if (itemIds.isNotEmpty()) { + withBGApi { + val deleted = chatModel.controller.apiDeleteReceivedReports( + chatRh, + groupId = chatInfo.apiId, + itemIds = itemIds, + mode = if (forAll) CIDeleteMode.cidmBroadcast else CIDeleteMode.cidmInternalMark + ) + if (deleted != null) { + withChats { + for (di in deleted) { + val toChatItem = di.toChatItem?.chatItem + if (toChatItem != null) { + upsertChatItem(chatRh, chatInfo, toChatItem) + } else { + removeChatItem(chatRh, chatInfo, di.deletedChatItem.chatItem) + } + val deletedItem = di.deletedChatItem.chatItem + if (deletedItem.isActiveReport) { + decreaseGroupReportsCounter(chatRh, chatInfo.id) + } + } + } + withReportsChatsIfOpen { + for (di in deleted) { + if (di.deletedChatItem.chatItem.isReport) { + val toChatItem = di.toChatItem?.chatItem + if (toChatItem != null) { + upsertChatItem(chatRh, chatInfo, toChatItem) + } else { + removeChatItem(chatRh, chatInfo, di.deletedChatItem.chatItem) + } + } + } + } + onSuccess() + } + } + } +} + +private fun archiveItems(rhId: Long?, chatInfo: ChatInfo, selectedChatItems: MutableState?>) { + val itemIds = selectedChatItems.value + if (itemIds != null) { + showArchiveReportsAlert(itemIds.sorted(), chatInfo is ChatInfo.Group && chatInfo.groupInfo.membership.memberActive, archiveReports = { ids, forAll -> + archiveReports(rhId, chatInfo, ids, forAll) { + selectedChatItems.value = null + } + }) + } +} + private fun markUnreadChatAsRead(chatId: String) { val chat = chatModel.chats.value.firstOrNull { it.id == chatId } if (chat?.chatStats?.unreadChat != true) return @@ -2716,6 +2774,7 @@ fun PreviewChatLayout() { loadMessages = { _, _, _ -> }, deleteMessage = { _, _ -> }, deleteMessages = { _ -> }, + archiveReports = { _, _ -> }, receiveFile = { _ -> }, cancelFile = {}, joinGroup = { _, _ -> }, @@ -2791,6 +2850,7 @@ fun PreviewGroupChatLayout() { loadMessages = { _, _, _ -> }, deleteMessage = { _, _ -> }, deleteMessages = {}, + archiveReports = { _, _ -> }, receiveFile = { _ -> }, cancelFile = {}, joinGroup = { _, _ -> }, diff --git a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/SelectableChatItemToolbars.kt b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/SelectableChatItemToolbars.kt index 457f8f1e40..85e3f3936e 100644 --- a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/SelectableChatItemToolbars.kt +++ b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/SelectableChatItemToolbars.kt @@ -53,11 +53,13 @@ fun SelectedItemsBottomToolbar( contentTag: MsgContentTag?, selectedChatItems: MutableState?>, deleteItems: (Boolean) -> Unit, // Boolean - delete for everyone is possible + archiveItems: () -> Unit, moderateItems: () -> Unit, forwardItems: () -> Unit, ) { val deleteEnabled = remember { mutableStateOf(false) } val deleteForEveryoneEnabled = remember { mutableStateOf(false) } + val canArchiveReports = remember { mutableStateOf(false) } val canModerate = remember { mutableStateOf(false) } val moderateEnabled = remember { mutableStateOf(false) } val forwardEnabled = remember { mutableStateOf(false) } @@ -80,7 +82,7 @@ fun SelectedItemsBottomToolbar( horizontalArrangement = Arrangement.SpaceBetween, verticalAlignment = Alignment.CenterVertically ) { - IconButton({ deleteItems(deleteForEveryoneEnabled.value) }, enabled = deleteEnabled.value && !deleteCountProhibited.value) { + IconButton({ if (canArchiveReports.value) archiveItems() else deleteItems(deleteForEveryoneEnabled.value) }, enabled = deleteEnabled.value && !deleteCountProhibited.value) { Icon( painterResource(MR.images.ic_delete), null, @@ -111,7 +113,7 @@ fun SelectedItemsBottomToolbar( } val chatItems = remember { derivedStateOf { chatModel.chatItemsForContent(contentTag).value } } LaunchedEffect(chatInfo, chatItems.value, selectedChatItems.value) { - recheckItems(chatInfo, chatItems.value, selectedChatItems, deleteEnabled, deleteForEveryoneEnabled, canModerate, moderateEnabled, forwardEnabled, deleteCountProhibited, forwardCountProhibited) + recheckItems(chatInfo, chatItems.value, selectedChatItems, deleteEnabled, deleteForEveryoneEnabled, canArchiveReports, canModerate, moderateEnabled, forwardEnabled, deleteCountProhibited, forwardCountProhibited) } } @@ -120,6 +122,7 @@ private fun recheckItems(chatInfo: ChatInfo, selectedChatItems: MutableState?>, deleteEnabled: MutableState, deleteForEveryoneEnabled: MutableState, + canArchiveReports: MutableState, canModerate: MutableState, moderateEnabled: MutableState, forwardEnabled: MutableState, @@ -133,6 +136,7 @@ private fun recheckItems(chatInfo: ChatInfo, val selected = selectedChatItems.value ?: return var rDeleteEnabled = true var rDeleteForEveryoneEnabled = true + var rCanArchiveReports = true var rModerateEnabled = true var rOnlyOwnGroupItems = true var rForwardEnabled = true @@ -141,6 +145,7 @@ private fun recheckItems(chatInfo: ChatInfo, if (selected.contains(ci.id)) { rDeleteEnabled = rDeleteEnabled && ci.canBeDeletedForSelf rDeleteForEveryoneEnabled = rDeleteForEveryoneEnabled && ci.meta.deletable && !ci.localNote && !ci.isReport + rCanArchiveReports = rCanArchiveReports && ci.isActiveReport && ci.chatDir !is CIDirection.GroupSnd && chatInfo is ChatInfo.Group && chatInfo.groupInfo.membership.memberRole >= GroupMemberRole.Moderator rOnlyOwnGroupItems = rOnlyOwnGroupItems && ci.chatDir is CIDirection.GroupSnd && !ci.isReport rModerateEnabled = rModerateEnabled && ci.content.msgContent != null && ci.memberToModerate(chatInfo) != null && !ci.isReport rForwardEnabled = rForwardEnabled && ci.content.msgContent != null && ci.meta.itemDeleted == null && !ci.isLiveDummy && !ci.isReport @@ -150,6 +155,7 @@ private fun recheckItems(chatInfo: ChatInfo, rModerateEnabled = rModerateEnabled && !rOnlyOwnGroupItems deleteEnabled.value = rDeleteEnabled deleteForEveryoneEnabled.value = rDeleteForEveryoneEnabled + canArchiveReports.value = rCanArchiveReports moderateEnabled.value = rModerateEnabled forwardEnabled.value = rForwardEnabled selectedChatItems.value = rSelectedChatItems diff --git a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/group/GroupPreferences.kt b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/group/GroupPreferences.kt index 3d9f42f929..64195322c2 100644 --- a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/group/GroupPreferences.kt +++ b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/group/GroupPreferences.kt @@ -132,6 +132,11 @@ private fun GroupPreferencesLayout( applyPrefs(preferences.copy(simplexLinks = RoleGroupPreference(enable = enable, role))) } + SectionDividerSpaced(true, maxBottomPadding = false) + val enableReports = remember(preferences) { mutableStateOf(preferences.reports.enable) } + FeatureSection(GroupFeature.Reports, enableReports, null, groupInfo, preferences, onTTLUpdated) { enable, _ -> + applyPrefs(preferences.copy(reports = GroupPreference(enable = enable))) + } SectionDividerSpaced(true, maxBottomPadding = false) val enableHistory = remember(preferences) { mutableStateOf(preferences.history.enable) } FeatureSection(GroupFeature.History, enableHistory, null, groupInfo, preferences, onTTLUpdated) { enable, _ -> @@ -169,6 +174,7 @@ private fun FeatureSection( feature.text, icon, iconTint, + disabled = feature == GroupFeature.Reports, // remove in 6.4 checked = enableFeature.value == GroupFeatureEnabled.ON, ) { checked -> onSelected(if (checked) GroupFeatureEnabled.ON else GroupFeatureEnabled.OFF, enableForRole?.value) 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 e0650e1d80..8c053ad1d2 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 @@ -77,6 +77,7 @@ fun ChatItemView( selectChatItem: () -> Unit, deleteMessage: (Long, CIDeleteMode) -> Unit, deleteMessages: (List) -> Unit, + archiveReports: (List, Boolean) -> Unit, receiveFile: (Long) -> Unit, cancelFile: (Long) -> Unit, joinGroup: (Long, () -> Unit) -> Unit, @@ -301,7 +302,7 @@ fun ChatItemView( cItem.isReport && cItem.meta.itemDeleted == null && cInfo is ChatInfo.Group -> { DefaultDropdownMenu(showMenu) { if (cItem.chatDir !is CIDirection.GroupSnd && cInfo.groupInfo.membership.memberRole >= GroupMemberRole.Moderator) { - ArchiveReportItemAction(cItem, showMenu, deleteMessage) + ArchiveReportItemAction(cItem.id, cInfo.groupInfo.membership.memberActive, showMenu, archiveReports) } DeleteItemAction(cItem, revealed, showMenu, questionText = deleteMessageQuestionText(), deleteMessage, deleteMessages, buttonText = stringResource(MR.strings.delete_report)) Divider() @@ -400,7 +401,7 @@ fun ChatItemView( val groupInfo = cItem.memberToModerate(cInfo)?.first if (groupInfo != null) { ModerateItemAction(cItem, questionText = moderateMessageQuestionText(cInfo.featureEnabled(ChatFeature.FullDelete), 1), showMenu, deleteMessage) - } else if (cItem.meta.itemDeleted == null && cInfo is ChatInfo.Group && cInfo.groupInfo.membership.memberRole == GroupMemberRole.Member && !live) { + } else if (cItem.meta.itemDeleted == null && cInfo is ChatInfo.Group && cInfo.groupInfo.groupFeatureEnabled(GroupFeature.Reports) && cInfo.groupInfo.membership.memberRole == GroupMemberRole.Member && !live) { ReportItemAction(cItem, composeState, showMenu) } } @@ -914,23 +915,53 @@ private fun ReportItemAction( } @Composable -private fun ArchiveReportItemAction(cItem: ChatItem, showMenu: MutableState, deleteMessage: (Long, CIDeleteMode) -> Unit) { +private fun ArchiveReportItemAction(id: Long, allowForAll: Boolean, showMenu: MutableState, archiveReports: (List, Boolean) -> Unit) { ItemAction( stringResource(MR.strings.archive_report), painterResource(MR.images.ic_inventory_2), onClick = { - AlertManager.shared.showAlertDialog( - title = generalGetString(MR.strings.report_archive_alert_title), - text = generalGetString(MR.strings.report_archive_alert_desc), - onConfirm = { - deleteMessage(cItem.id, CIDeleteMode.cidmInternalMark) - }, - destructive = true, - confirmText = generalGetString(MR.strings.archive_verb), - ) + showArchiveReportsAlert(listOf(id), allowForAll, archiveReports) showMenu.value = false + } + ) +} + +fun showArchiveReportsAlert(ids: List, allowForAll: Boolean, archiveReports: (List, Boolean) -> Unit) { + AlertManager.shared.showAlertDialogButtonsColumn( + title = if (ids.size == 1) { + generalGetString(MR.strings.report_archive_alert_title) + } else { + generalGetString(MR.strings.report_archive_alert_title_nth).format(ids.size) }, - color = Color.Red + text = null, + buttons = { + // Archive for me + SectionItemView({ + AlertManager.shared.hideAlert() + archiveReports(ids, false) + }) { + Text( + generalGetString(MR.strings.report_archive_for_me), + Modifier.fillMaxWidth(), + textAlign = TextAlign.Center, + color = MaterialTheme.colors.error + ) + } + if (allowForAll) { + // Archive for all moderators + SectionItemView({ + AlertManager.shared.hideAlert() + archiveReports(ids, true) + }) { + Text( + stringResource(MR.strings.report_archive_for_all_moderators), + Modifier.fillMaxWidth(), + textAlign = TextAlign.Center, + color = MaterialTheme.colors.error + ) + } + } + } ) } @@ -1310,6 +1341,7 @@ fun PreviewChatItemView( selectChatItem = {}, deleteMessage = { _, _ -> }, deleteMessages = { _ -> }, + archiveReports = { _, _ -> }, receiveFile = { _ -> }, cancelFile = {}, joinGroup = { _, _ -> }, @@ -1356,6 +1388,7 @@ fun PreviewChatItemViewDeletedContent() { selectChatItem = {}, deleteMessage = { _, _ -> }, deleteMessages = { _ -> }, + archiveReports = { _, _ -> }, receiveFile = { _ -> }, cancelFile = {}, joinGroup = { _, _ -> }, 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 8e01c2b4bb..4cdd4b5c05 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 @@ -19,6 +19,7 @@ import androidx.compose.ui.text.style.TextAlign 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.model.ChatModel.withChats import chat.simplex.common.model.ChatModel.withReportsChatsIfOpen import chat.simplex.common.platform.* @@ -299,6 +300,11 @@ fun GroupMenuItems( ToggleFavoritesChatAction(chat, chatModel, chat.chatInfo.chatSettings?.favorite == true, showMenu) ToggleNotificationsChatAction(chat, chatModel, groupInfo.chatSettings.enableNtfs.nextMode(true), showMenu) TagListAction(chat, showMenu) + if (chat.chatStats.reportsCount > 0 && groupInfo.membership.memberRole >= GroupMemberRole.Moderator) { + ArchiveAllReportsItemAction(showMenu) { + archiveAllReportsForMe(chat.remoteHostId, chat.chatInfo.apiId) + } + } ClearChatAction(chat, showMenu) if (groupInfo.membership.memberCurrent) { LeaveGroupAction(chat.remoteHostId, groupInfo, chatModel, showMenu) @@ -563,6 +569,18 @@ private fun InvalidDataView() { } } +@Composable +private fun ArchiveAllReportsItemAction(showMenu: MutableState, archiveReports: () -> Unit) { + ItemAction( + stringResource(MR.strings.archive_reports), + painterResource(MR.images.ic_inventory_2), + onClick = { + showArchiveAllReportsForMeAlert(archiveReports) + showMenu.value = false + } + ) +} + fun markChatRead(c: Chat) { var chat = c withApi { @@ -886,6 +904,25 @@ fun updateChatSettings(remoteHostId: Long?, chatInfo: ChatInfo, chatSettings: Ch } } +private fun showArchiveAllReportsForMeAlert(archiveReports: () -> Unit) { + AlertManager.shared.showAlertDialog( + title = generalGetString(MR.strings.report_archive_alert_title_all), + text = generalGetString(MR.strings.report_archive_alert_desc_all), + onConfirm = archiveReports, + destructive = true, + confirmText = generalGetString(MR.strings.archive_verb), + ) +} + +private fun archiveAllReportsForMe(chatRh: Long?, apiId: Long) { + withBGApi { + val r = chatModel.controller.apiArchiveReceivedReports(chatRh, apiId) + if (r != null) { + controller.groupChatItemsDeleted(chatRh, r) + } + } +} + @Composable expect fun ChatListNavLinkLayout( chatLinkPreview: @Composable () -> Unit, diff --git a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/usersettings/networkAndServers/AdvancedNetworkSettings.kt b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/usersettings/networkAndServers/AdvancedNetworkSettings.kt index 79314fa26f..e85d88c5f8 100644 --- a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/usersettings/networkAndServers/AdvancedNetworkSettings.kt +++ b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/usersettings/networkAndServers/AdvancedNetworkSettings.kt @@ -230,7 +230,7 @@ fun ModalData.AdvancedNetworkSettingsView(showModal: (ModalData.() -> Unit) -> U smpWebPort.value = it } } - SectionTextFooter(stringResource(MR.strings.private_routing_explanation)) + SectionTextFooter(String.format(stringResource(MR.strings.network_smp_web_port_footer), if (smpWebPort.value) "443" else "5223")) SectionDividerSpaced(maxTopPadding = true) SectionView(stringResource(MR.strings.network_option_tcp_connection).uppercase()) { 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 417f6a717a..7075b9b185 100644 --- a/apps/multiplatform/common/src/commonMain/resources/MR/ar/strings.xml +++ b/apps/multiplatform/common/src/commonMain/resources/MR/ar/strings.xml @@ -1207,7 +1207,7 @@ سيتم استلام الفيديو عندما تكون جهة اتصالك متصلة بالإنترنت، يُرجى الانتظار أو التحقق لاحقًا! يمكنك مشاركة هذا العنوان مع جهات اتصالك للسماح لهم بالاتصال بـ%s. أُزيلت %1$s - تحديث + حدّث قاعدة بيانات الدردشة الخاصة بك غير مُعمّاة - عيّن عبارة مرور لحمايتها. عبارة مرور قاعدة بيانات خاطئة سيتم إرسال ملف تعريف الدردشة الخاص بك إلى أعضاء المجموعة @@ -1844,7 +1844,7 @@ لا يمكن إرسال الرسالة تفضيلات الدردشة المحدّدة تحظر هذه الرسالة. التفاصيل - بدءًا من %s.\nجميع البيانات خاصة على جهازك.. + بدءًا من %s.\nجميع البيانات خاصة على جهازك. أرسلت الإجمالي الحجم الملفات المرفوعة @@ -2318,4 +2318,10 @@ عيّن اسم الدردشة… لا يمكن التراجع عن هذا الإجراء - سيتم حذف الرسائل المُرسلة والمُستلمة في هذه الدردشة قبل التاريخ المحدّد. تغيير حذف الرسائل التلقائي؟ + استخدم منفذ TCP %1$s عندما لا يتم تحديد أي منفذ. + استخدم منفذ الويب + منفذ TCP للمُراسلة + اكتم الكل + ذّكورات غير مقروءة + يمكنك ذكر ما يصل إلى %1$s من الأعضاء في الرسالة الواحدة! 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 5441f0816a..eb4012255c 100644 --- a/apps/multiplatform/common/src/commonMain/resources/MR/base/strings.xml +++ b/apps/multiplatform/common/src/commonMain/resources/MR/base/strings.xml @@ -312,7 +312,12 @@ This message was deleted or not received yet. Report reason? Archive report? + Archive %d reports? + Archive all reports? The report will be archived for you. + All reports will be archived for you. + For me + For all moderators Error: %1$s @@ -341,6 +346,7 @@ Search Archive Archive report + Archive reports Delete report Sent message Received message @@ -447,6 +453,7 @@ Businesses Notes Reports + Report: %s All Add list 1 report @@ -2064,6 +2071,8 @@ Prohibit sending SimpleX links Send up to 100 last messages to new members. Do not send history to new members. + Allow to report messsages to moderators. + Prohibit reporting messages to moderators. Members can send disappearing messages. Disappearing messages are prohibited. Members can send direct messages. @@ -2082,6 +2091,8 @@ SimpleX links are prohibited. Up to 100 last messages are sent to new members. History is not sent to new members. + Members can report messsages to moderators. + Reporting messages is prohibited in this group. Delete after %d sec %ds 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 ca95b77827..c37d4e6924 100644 --- a/apps/multiplatform/common/src/commonMain/resources/MR/bg/strings.xml +++ b/apps/multiplatform/common/src/commonMain/resources/MR/bg/strings.xml @@ -1202,7 +1202,7 @@ Ще бъдете свързани, когато устройството на вашия контакт е онлайн, моля, изчакайте или проверете по-късно! Няма да загубите контактите си, ако по-късно изтриете адреса си. Вашите настройки - Вашият SimpleX адрес + Вашият адрес в SimpleX Използвай за нови връзки Вашите XFTP сървъри Използвай сървърите на SimpleX Chat\? @@ -1443,7 +1443,7 @@ Несъвместим! Изчаква се мобилното устройство да се свърже: Изтрий %d съобщения? - Свържи мобилно устройство + Свързване на мобилно устройство Свързване с %1$s? Премахни член Блокирай @@ -2269,4 +2269,5 @@ Как помага за поверителността Ще спрете да получавате съобщения от този чат. Историята на чата ще бъде запазена. Добави членове на екипа + Заглушаване на всички diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/ca/strings.xml b/apps/multiplatform/common/src/commonMain/resources/MR/ca/strings.xml index 53d1dbabfa..dd2f9a764c 100644 --- a/apps/multiplatform/common/src/commonMain/resources/MR/ca/strings.xml +++ b/apps/multiplatform/common/src/commonMain/resources/MR/ca/strings.xml @@ -2294,4 +2294,7 @@ Desactivar la supressió automàtica de missatges? Aquesta acció no es pot desfer; els missatges enviats i rebuts en aquest xat abans del seleccionat se suprimiran. Els missatges d\'aquest xat no se suprimiran mai. + Port TCP per a missatgeria + Emprar port web + Emprar el port TCP %1$s quan no se n\'especifica cap. 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 a3fddd820c..fc4c421e3b 100644 --- a/apps/multiplatform/common/src/commonMain/resources/MR/de/strings.xml +++ b/apps/multiplatform/common/src/commonMain/resources/MR/de/strings.xml @@ -601,9 +601,9 @@ Keine empfangenen oder gesendeten Dateien %d Datei(en) mit einem Gesamtspeicherverbrauch von %s nie - täglich - wöchentlich - monatlich + Älter als ein Tag + Älter als eine Woche + Älter als einen Monat %s Sekunde(n) Löschen der Nachrichten Automatisches Löschen von Nachrichten aktivieren? @@ -2395,12 +2395,18 @@ Web-Link öffnen? Ja Chat-Name festlegen… - Die älteren als die ausgewählten gesendeten und empfangenen Nachrichten in diesem Chat werden gelöscht. Dies kann nicht rückgängig gemacht werden! + Die älteren als die ausgewählten gesendeten und empfangenen Nachrichten in diesem Chat werden gelöscht. Diese Aktion kann nicht rückgängig gemacht werden! Automatisches Löschen von Nachrichten ändern? Chat-Nachrichten von Ihrem Gerät löschen Automatisches Löschen von Nachrichten deaktivieren? Löschen von Nachrichten deaktivieren - 1 Jahr + Älter als ein Jahr Voreinstellung (%s) - Die Nachrichten in diesem Chat werden nie gelöscht. + Nachrichten in diesem Chat werden nie gelöscht. + Solange kein Port konfiguriert ist, wird der TCP-Port %1$s genutzt. + Web-Port nutzen + TCP-Port für die Nachrichtenübermittlung + Sie können bis zu %1$s Mitglieder pro Nachricht erwähnen! + Alle stummschalten + Ungelesene Erwähnungen 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 fec6e52948..48d9969d06 100644 --- a/apps/multiplatform/common/src/commonMain/resources/MR/es/strings.xml +++ b/apps/multiplatform/common/src/commonMain/resources/MR/es/strings.xml @@ -110,7 +110,7 @@ mensaje duplicado Herramientas desarrollo Eliminar los archivos de todos los perfiles - Eliminar mensaje + Eliminar mensajes ¡Base de datos cifrada! La base de datos está cifrada con una contraseña aleatoria, puedes cambiarla. Error en base de datos @@ -605,7 +605,7 @@ Notificaciones privadas imagen del perfil No se permiten mensajes de voz. - Proteger la pantalla de la aplicación + Proteger la pantalla repositorio GitHub .]]> Grabar mensaje de voz ha expulsado a %1$s @@ -748,7 +748,7 @@ Para proteger tu privacidad, SimpleX dispone de identificadores para las colas de mensajes, independientes para cada uno de tus contactos. Para proteger tu información, activa el Bloqueo SimpleX. \nSe te pedirá que completes la autenticación antes de activar esta función. - Al actualizar la configuración el cliente se reconectará a todos los servidores. + Para actualizar la configuración el cliente se reconectará a todos los servidores. ¿Usar servidores SimpleX Chat\? Enlace de grupo SimpleX Invitación única SimpleX @@ -1319,7 +1319,7 @@ ¿Permitir confirmaciones para grupos\? Las confirmaciones están deshabilitadas para los grupos %d Las confirmaciones están activadas para %d grupos - Grupos pequeños (máx. 20) + Grupos pequeños (max. 20) Activar para todos los grupos %s: %s desactivado @@ -2196,7 +2196,7 @@ %s.]]> %s.]]> %s, debes aceptar las condiciones de uso.]]> - Servidores para archivos nuevos en tu perfil + Servidores para enviar archivos en tu perfil ¡Segundo operador predefinido! Puedes configurar los servidores a través de su configuración. Para protegerte contra una sustitución del enlace, puedes comparar los códigos de seguridad con tu contacto. @@ -2272,10 +2272,10 @@ Todos los chats serán quitados de la lista %s y esta será eliminada Crear lista Eliminar - Eliminar lista? + ¿Eliminar lista? Editar - Nombre de lista... - El nombre de lista y el emoji deben ser differentes en todas las listas. + Nombre de la lista... + El nombre y el emoji deben ser diferentes en todas las listas. Guardar lista Ningún chat sin leer Error al crear lista de chat @@ -2314,9 +2314,9 @@ Contenido inapropiado Perfil inapropiado Solo el remitente y el moderador pueden verlo - Solo tú y el moderador podéis verlo + Solo tú y los moderadores podéis verlo Spam - Abrir enlace desde la lista de chat + Abrir enlaces desde listado de chats Si No ¿Abrir enlace web? @@ -2324,11 +2324,17 @@ Abrir enlace Nombre para el chat… ¿Desactivar la eliminación automática de mensajes? - Desactivar la eliminación de mensajes + Desactivar ¿Modificar la eliminación automática de mensajes? - Eliminar todos los mensajes del dispositivo - Los mensajes nunca se borran en esta conversación - Todos los mensajes previos a la selección serán eliminados de este chat. ¡No podrá deshacerse! + Elimina los mensajes del dispositivo + Los mensajes de esta conversación nunca se borran. + Todos los mensajes previos a la selección serán eliminados del chat. ¡No podrá deshacerse! Un año predefinido (%s) + Puerto TCP para mensajes + Usar puerto TCP %1$s cuando no se especifica. + Usar puerto web + Silenciar todo + Menciones sin leer + ¡Puedes mencionar hasta %1$s miembros por mensaje! diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/hr/strings.xml b/apps/multiplatform/common/src/commonMain/resources/MR/hr/strings.xml index fffe525e0f..7f5b73a1d2 100644 --- a/apps/multiplatform/common/src/commonMain/resources/MR/hr/strings.xml +++ b/apps/multiplatform/common/src/commonMain/resources/MR/hr/strings.xml @@ -5,11 +5,11 @@ Prekini Prosledi do 20 poruka odjednom. Sakriti kontakt i poruku - %1$d dokument greska(e):\n%2$s - %1$d dokument(a) se i dalje preuzima. - %1$d dokument(a) neuspešno preuzet. - %1$d dokument(a) su odstranjena. - %1$d dokument(a) nije preuzet. + %1$d greska(e) datoteka:\n%2$s + %1$d datoteka se i dalje preuzima. + %1$d datoteka neuspešno preuzeta. + %1$d odstranjene datoteke. + %1$d datoteka nije preuzeta. završen %1$s želi da se poveže sa tobom putem Prihvatiti @@ -21,7 +21,7 @@ Sakriti 5 minuta Ceo Link - Prosledi poruke… + Proslediti poruke… Prekini menjanje adrese? Ako se ne možeš sastati, pokaži QR kod u video pozivu ili podeli link. Sakriti profil @@ -30,7 +30,7 @@ Dodeliti dozvolu Slušalice POMOĆ - Grupa će biti obrisana za tebe – ovo ne može da se poništi! + Grupa će biti obrisana za Vas – ovo ne može da se poništi! Akcenat Grupni linkovi Madjarski i Turski UI @@ -54,7 +54,7 @@ 30 sekundi Sakriti: Sakriti - Prosledi poruke bez dokumenata? + Prosledi poruke bez datoteka? Kako da Prihvatiti %1$d poruke preskočene. @@ -86,7 +86,7 @@ Grupa Ako izabereš da odbiješ pošiljalac NEĆE biti obavešten. Skriveni razgovori - Grupa će biti obrisana za sve članove – ovo ne može da se poništi! + Grupa će biti obrisana za sve članove – ovo se ne može poništiti! Domaćin Kako utiče na bateriju Kako pomaže privatnosti @@ -117,7 +117,7 @@ Poslano u: %s Ažuriraj Šifra profila - Administratori mogu da blokiraju + Administratori mogu da blokiraju. Greška Napravi jednokratnu poveznicu Nalepiti @@ -127,7 +127,7 @@ Odstranjeno odstranjeno Napraviti - PORUKE I DOKUMENTA + PORUKE I DATOTEKE Poruka SERVERI Odstraniti profil razgovora @@ -139,7 +139,7 @@ Odstraniti Podešavanje Ažuriraj - Odstraniti sve dokumente + Odstraniti sve datoteke Odstraniti profil razgovora? Poruke administrator @@ -167,7 +167,7 @@ poslano Odstraniti profil razgovora za Prihvati anonimno - Podeli + Podeliti Dodaj na listu Pristup na servere pomoću SOCKS proxy na portu %d? Proxy mora da bude uključen pre omogućavanja ove opcije. Prihvaćeni uslovi @@ -213,7 +213,7 @@ povezivanje… Kamera %d mesec - Dokument nije pronađen + Datoteka nije pronađena %d poruke blokirane administratorom %d izvještaji poziv @@ -221,9 +221,9 @@ pozivanje… %d min %d sec - Preuzeti dokumenti + Preuzeti datoteke blokirano administratorom - vi + Vi nepoznat status Poveži se anonimno greška u pozivu @@ -244,12 +244,12 @@ POZIVI Blokiraj članove grupe Nepoznati serveri! - Dokument - Dokument + Datoteka + Datoteka Uključiti zvuk Kamera i mikrofon vi: %1$s - Povezan na telefon + Povezano sa telefonom blokirano %d poruka blokirano povezivanje @@ -296,7 +296,7 @@ %d minut(a) Proveri ažuriranje Stabilno - DOKUMENTA + DATOTEKE %s otpremljeno Onemogućiti obavještenja %s nije verifikovan @@ -304,9 +304,9 @@ Profil razgovora Onemogućiti %d nedelja - - opcionalno obavestiti o obrisanim kontaktima.\n- imena profila sa razmacima.\n- i još mnogo toga!\" + - neobavezno obavestiti o obrisanim kontaktima.\n- imena profila sa razmacima.\n- i još mnogo toga!\" Uvoženje arhive - Dokumenta + Datoteke Otpremljeno %s je verifikovan Konzola razgovora @@ -316,11 +316,11 @@ BAZA PODATAKA RAZGOVORA onemogućeno Greška pri uvoženju teme - Dokumenta i medijski sadržaji su zabranjeni. + Datoteke i medijski sadržaji su zabranjeni. Ili nalepiti link arhive Onemogućeno za sve grupe Nestaje u - Dokumenta i medijski sadržaji + Datoteke i medijski sadržaji svi članovi Poruke koje nestaju onemogućeno @@ -330,10 +330,10 @@ Onemogućeno Aplikacija RAZGOVORI - Dokumenta i medijski sadržaji su zabranjeni! + Datoteke i medijski sadržaji su zabranjeni! Poruke koje nestaju su zabranjene u ovom razgovoru. Razgovor je zaustavljen - Dokument sačuvan + Datoteka sačuvana Verzija aplikacije Verzija aplikacije: v%s Tema razgovora @@ -344,7 +344,7 @@ Poruke koje nestaju Poruke koje nestaju su zabranjene. Adresa servera - Dokumenta i medijski sadržaji nisu dozvoljeni + Datoteke i medijski sadržaji nisu dozvoljeni Dozvoliti Razgovor sa kreatorima Razgovori @@ -383,7 +383,7 @@ Uvesti Boje razgovora %s: %s - Ili uvesti arhivirani dokument + Ili uvesti arhiviranu datoteku Razgovor će biti odstranjen za sve članove - ovo se ne može vratiti! Direktne poruke između članova su zabranjene u ovim porukama. Prekinuti @@ -435,7 +435,7 @@ Kontakti Isključeno Zahvaljujući korisnicima – doprinesi pomoću Weblate! - Omogući + Omogućiti Vaši serveri Sačuvati sek @@ -633,7 +633,7 @@ Adresa računara Pristupiti Vašoj grupi? Trenutna obaveštenja su onemogućena! - Zaustaviti dokument + Zaustaviti datoteku pristupiti kao %s Informacije Odgovoriti @@ -732,12 +732,12 @@ Pozvati u razgovor Odblokirati Italijanski interfejs - Dokument: %s + Datoteka: %s Pristupiti anonimno Napustiti grupu? Uređaji Izabrati - Poslati priznanice + Poslati potvrde Popraviti vezu? Napustiti Napustiti razgovor @@ -746,7 +746,7 @@ Ukloniti člana? Ponoviti Veličina teksta - Videa i dokumenta do 1gb + Videa i datoteke do 1gb Nekompatibilna verzija Ponoviti preuzimanje Zaustaviti razgovor? @@ -771,8 +771,8 @@ Kontrolisanje vaše mreže Kopirano Poruka je prevelika - Otpremiti dokument - Napraviti dokument + Otpremiti datoteku + Napraviti datoteku Napraviti tajnu grupu kreator Otkriti @@ -831,7 +831,7 @@ Završeno Proširiti Prikazati QR kod - Preuzeti dokument + Preuzeti datoteku Napraviti grupni link Biznisi Bolje korisničko iskustvo @@ -849,4 +849,362 @@ završiti Proširiti selekciju uloga Otvaranje baze podataka… + Obnoviti + Zvučnik isključen + obojen + Podeli vezu + Spam + Zvučnik + Spam + Razgovori nisu pronađeni + Zvučnik uključen + Bezbednije grupe + Odbiti + Odbiti + Razgovori nisu u listi %s. + Previše slika! + autor + Izvesti temu + Žive poruke + Website + dani + Prosleđivanje %1$s poruka + Kada je dostupno + Proslediti i sačuvati poruke + Prosleđeno + Server za prosleđivanje: %1$s\nGreška: %2$s + Označiti da je pročitano + Server za prosleđivanje : %1$s\nGreška odredišnog servera: %2$s + Verifikovati veze + Primeniti na + Zaustavljanje razgovora + Nalepiti link koji ste primili + Oceniti aplikaciju + Nema nepročitanih razgovora + Izveštaj će biti arhiviran za Vas. + Sačuvati neiskorišćenu pozivnicu? + Glasovna poruka… + Koristiti trenutni profil + Nalepiti link + Nalepiti link za povezivanje! + ŽIVO + Zvezdica na GitHubu + Razmera + Verifikovati bezbednost veze + Trenutni profil + Odstraniti grupu + prosleđeno + Tekst poruke + Prosleđeno od + Učitavanje razgovora… + Proslediti %1$s poruku(e)? + Bezbednost veze + Kada je aplikacija pokrenuta + Proslediti + Velika datoteka! + Primeniti + Poruka će biti odstranjena - ovo se ne može poništiti! + Poruka je prevelika! + Učitavanje datoteke + Glasovna poruka + Glasovna poruka (%1$s) + Naučiti više + Označiti da je verifikovano + Koristiti razgovor + Označiti da nije pročitano + Verifikovati vezu + zahtev za povezivanje + Dodirnuti za skeniranje + Nepoznata greška u bazi podataka: %s + Primljene poruke + duplikati + da + Migracija završena + Da + Omogućiti flux + Greška: %s + Greška u zaustavljanju razgovora + Doprinesite + upravio %s + Trenutan Pin kod + Čekanje na video + Čekanje na dokument + Neophodno + Uvek + Preuzimanje %s (%s) + Ignorisati + Novi Pin kod + Pin kod aplikacije + Omogućiti pin kod za samouništenje + Pin kod za samouništenje + Isključiti + Upravljen u + Vidljiva istorija + Prekinuta veza iz razloga: %s + Mobilna + Poruke poslane + Za sve + Omogući evidenciju + Odmah + greška u slanju + Odstraniti server + blokirali ste %s + Kvantno otporno šifrovanje + Ne praviti adresu + Omogućiti svim grupama + Ne prikazivati ponovo + minuti + meseci + Pregled + Uneti Pin kod + Sesija aplikacije + Prikazati samo kontakt + nepoznato + Promeniti redosled + promena adrese za %s… + Greška u promeni profila! + Koristiti novi anoniman profil + veza uspostavljena + Promeniti listu + Slušalica + Isključiti? + Ovaj uređaj + Omogućiti samouništenje + Uvek uključeno + Odstraniti izveštaj + Poslana slika + Potvrditi + Još nekoliko stvari + Povezati pomoću jednokratne veze? + Pin kod + Vi i Vaš kontakt, možete da šaljete poruke koje nestaju. + Zvukovi u pozivu + standardno od kraja-do-kraja šifrovanje + moderator + uvek + Smanjiti upotrebu baterije + Proxied(posrednički) serveri + Novi server + Prikazati procente + Napustiti bez čuvanja + POKRENUTI RAZGOVOR + Odblokirati člana za sve? + Priprema za preuzimanje + Proxied(posredovan) + Greška u dešifrovanju + Prikazati pregled + Migracije: %s + Ova grupa više ne postoji. + promenili ste ulogu %s u %s + posmatrač + Status poruke + Status datoteke + podrazumevano (%s) + Persijski UI + Statistika servera ce biti obnovljena - ovo se ne može poništiti! + Promeniti pin kod + Čekanje na sliku + Čekanje na sliku + Čekanje na video + Za početak novog razgovora + Omogućiti svima + Greška u pokretanju razgovora + uloga promenjena iz %s u %s + Promeniti ulogu grupe? + Odstraniti datoteku + SimpleX Tim + upravljen + Operator servera blokira vezu:\n%1$s. + Promeniti ulogu + Ime ovog uređaja + Dodirnuti za početak novog razgovora + pozvani ste u grupu + Slika sačuvana u Galeriji + vaša uloga je promenjena u %s + promenili ste adresu + Kontakt je odstranjen. + Japanski i Portugalski UI + Pin kod za samouništenje + Pronađite i pristupite grupama + Odstraniti za mene + Greška u dekodiranju + Prekinuta veza + Potvrditi brisanje kontakta? + Greška u promeni profila + Pin kod za samouništenje promenjen! + Pin kod za samouništenje omogućen! + Uvesti bazu podataka razgovora? + Odblokirati člana + Odblokirati člana? + Poslati greške + Promeniti + Čekanje na računar… + Ne dozvoliti + omogućeno + Vaš nasumičan profil + Molimo pokušajte kasnije. + Pošaljite nam email + Upravljen u: %s + Potvrditi otpremanje + Popuniti + Greške u dešifrovanju + Ukupno + Potvrditi unapređenje baze podataka + Pozvani ste u grupu + promenili ste vašu ulogu na %s + Potvrda je onemogućena + Imunitet na spam + duplikat poruke + Da + Greška u bazi podataka + podrazumevano (%s) + 1 godina + uklonili ste %1$s + napustili ste + promenili ste adresu za %s + Odblokirati za sve + Status poruke: %s + Status datoteke: %s + TCP veza тајм-аут + Poslana poruka + Omogućeno za kontakt + Omogućeno za Vas + Vi i Vaš kontakt, možete da šaljete glasovne poruke. + Omogućeno za + Nadograditi aplikaciju automatski + Litvanski UI + Prikazati informacije za + WiFi + Uskoro! + istekao + Vi i Vaš kontakt, možete da obavljate pozive. + Kontakt već postoji + Pogledati bezbednostni kod + Podeliti jednokratnu veza + Proslediti poruku… + Adresa ili jednokratna veza? + Omogućiti pristup kameri + Nevažeći QR kod + Jednokratna pozivnica + Uneti poruku dobrodošlice… + Čuvanje %1$s poruka + Prenosna izolacija + Uneti poruku dobrodošlice… (neobavezno) + Koncept poruke + Neispravan pin kod + čeka se potvrda… + Uneti server ručno + kontakt nema e2e šifrovanje + Kontakt odstranjen! + Nevažeći QR kod + Procena bezbednosti + Uporediti datoteku + Kontakt i sve poruke biće odstranjene - ovo ne može biti vraćeno! + Datoteka će biti odstranjena sa servera. + Opozvati + Poništiti pregled slike + %s u %s + Poništiti živu poruku + Jednokratna pozivnica + Nevažeća adresa server! + Sačuvani WebRTC ICE biće uklonjeni. + Unos pin koda + Prosleđena poruka + Ništa za prosleđivanje + Pregledati kasnije + kontakt ima e2e šifrovanje + Zaključati nakon + Skriven kontakt: + Poništiti pregled datoteke + Omogućiti potvrde? + Omogućiti potvrde za grupe? + Transparentnost + Pregled uslova + Poništiti migraciju + Opozvati datoteku + Opozvati datoteku? + Živa poruka! + Greške u preuzimanju + Sačuvati poruku dobrodošlice? + Nekompatibilno! + Pripremanje otpremanja + Sačuvati šifru profila + WebRTC ICE serveri + Pregled obaveštenja + povezivanje poziva… + Pin kod nije promenjen! + Izvesti bazu podataka + Istekla pozivnica! + pozivnica u grupu %1$s + Nekompatibilna verzija baze podataka + Status mreže + Za slanje + Koncept poruke + Prenosna izolacija + Uneti ime ovog uređaja… + Prenosne sesije + Neuspešno preuzimanje + Zaustaviti deljenje adrese? + Greška u primanju datoteke + Greška u čuvanju datoteke + Podeliti profil + Zaustaviti deljenje + Prikazati poslednje poruke + Odstraniti do 20 poruka odjednom. + %s prekinuta veza]]> + Ovo je Vaša vlastita SimpleX adresa! + Očistiti verifikaciju + Greška u otvaranju pretraživača + Nema razgovora + Povezati se sa %1$s? + želi da se poveze sa Vama! + Prikazati status poruke + Veza nije spremna. + Povežite se brže sa svojim prijateljima. + %s prekinuta veza]]> + Datoteka je odstranjena ill je link neispravan + Ukupno poslano + Za društvene mreže + %s nedostaje]]> + Preuzimanje arhive + Ukupno primljeno + %s je neaktivan]]> + Ime kontakta + Greška u isporuci poruke + Poruke će biti označene za odstranjivanje. Primaoci će moći da otkriju te poruke. + Odstraniti datoteke i medijski sadržaj? + Primanje datoteke biće zaustavljeno. + Datoteka će biti primljena kada vaš kontakt bude na mreži, molimo sačekajte ili proverite kasnije! + Izabrati datoteku + Migriranje + Migriraj uređaj + Zaustaviti slanje datoteke? + Nije izabran nijedan razgovor + promena adrese… + %s je zauzet]]> + promena adrese… + Do 100 poslednjih poruka se šalje novim članovima. + Bolje poruke + Poruke će biti odstranjene - ovo se ne može poništiti! + Slanje datoteke biće zaustavljeno. + Zaustaviti primanje datoteke? + Greška u datoteci + Odstraniti bez obaveštenja + Greška u otpremanju + Ukupno grešaka + Detaljna statistika + Greška prilikom odstranjivanja + Ponoviti otpremanje + Koristiti sa računara + Povezati sa računarom + Povezano sa računarom + Dozvoliti glasovne poruke? + Promeniti prijemnu adresu? + Reakcije na poruku + Dozvoliti reakcije na poruku. + Reakcije na poruku + Promeniti prijemnu adresu + Nema poruka + Nema istorije + Reakcije na poruku su zabranjene. 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 abf13f2142..5cfb9fb8da 100644 --- a/apps/multiplatform/common/src/commonMain/resources/MR/hu/strings.xml +++ b/apps/multiplatform/common/src/commonMain/resources/MR/hu/strings.xml @@ -43,7 +43,7 @@ Az összes csevegési profiljához az alkalmazásban külön TCP-kapcsolat (és SOCKS-hitelesítőadat) lesz használva.]]> Mindkét fél küldhet eltűnő üzeneteket. 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. - Érvénytelen az üzenet hasító-értéke + Érvénytelen az üzenet hasítóértéke Háttér Megjegyzés: az üzenet- és fájltovábbító-kiszolgálók SOCKS-proxyn keresztül kapcsolódnak. A hívások és a hivatkozások előnézetének elküldése közvetlen kapcsolatot használnak.]]> Alkalmazásadatok biztonsági mentése @@ -63,7 +63,7 @@ Kapcsolódás folyamatban! Nem lehet fogadni a fájlt Hitelesítés elérhetetlen - Alkalmazás verzió + Az alkalmazás verziója Üdvözlőüzenet hozzáadása titkosítás elfogadása %s számára… \nElérhető az v5.1-es kiadásban @@ -122,7 +122,7 @@ Élő csevegési üzenet visszavonása Az üzenetek végleges törlése csak abban az esetben van engedélyezve, ha az ismerőse is engedélyezi. (24 óra) Hang- és videóhívások - érvénytelen az üzenet hasító-értéke + érvénytelen az üzenet hasítóértéke Mindig fut Az Android Keystore biztonságosan fogja tárolni a jelmondatot az alkalmazás újraindítása, vagy a jelmondat megváltoztatása után – lehetővé teszi az értesítések fogadását. Az összes alkalmazásadat törölve. @@ -161,7 +161,7 @@ Mindkét fél tud hívásokat kezdeményezni. Sikertelen hitelesítés Az összes %s által írt új üzenet el lesz rejtve! - Alkalmazás verzió: v%s + Az alkalmazás verziója: v%s A hívások kezdeményezése csak abban az esetben van engedélyezve, ha az ismerőse is engedélyezi. Kiszolgáló hozzáadása Hang bekapcsolva @@ -220,7 +220,7 @@ Időtúllépés kapcsolódáskor Kapcsolódás a következővel: %1$s? Létrehozás - Ismerős beállításai + Ismerős-beállítások Kapcsolat Kapcsolat megszakítva kapcsolat létrehozva @@ -233,7 +233,7 @@ Ismerősök Kapcsolódási hiba Az ismerős még nem kapcsolódott! - - kapcsolódás könyvtár szolgáltatáshoz (BÉTA)!\n- kézbesítési jelentések (20 tagig).\n- gyorsabb és stabilabb. + - kapcsolódás könyvtár szolgáltatáshoz (BÉTA)!\n- kézbesítési jelentések (legfeljebb 20 tagig).\n- gyorsabb és stabilabb. Hozzájárulás kapcsolódás (bemutatkozó meghívó) SimpleX-cím létrehozása @@ -425,7 +425,7 @@ Az adatbázis titkosítva lesz, a jelmondat pedig a Keystore-ban lesz tárolva. Automatikus üzenet törlés engedélyezése? Törlés - az adatbázis verziója újabb, mint az alkalmazásé, visszafelé átköltöztetés nem lehetséges a következőhöz: %s + az adatbázis verziója újabb, mint az alkalmazásé, de a visszafelé történő átköltöztetés viszont nem lehetséges a következőhöz: %s Leírás %d óra %dp @@ -600,7 +600,7 @@ Teljes hivatkozás Hiba a cím megváltoztatásakor A tagok küldhetnek hangüzeneteket. - Csoportbeállítások + Csoport-beállítások Hiba: %s Eltűnő üzenetek SimpleX-zár bekapcsolása @@ -665,7 +665,7 @@ Ha az alkalmazás megnyitásakor megadja ezt a jelkódot, az összes alkalmazásadat véglegesen el lesz távolítva! Ha nem tud személyesen találkozni, mutassa meg a QR-kódot egy videohívás közben, vagy ossza meg a hivatkozást. mutassa meg a QR-kódot a videohívásban, vagy ossza meg a hivatkozást.]]> - Megerősítés esetén az üzenetküldő-kiszolgálók látni fogják az IP-címét és a szolgáltatóját – azt, hogy mely kiszolgálókhoz kapcsolódik. + Megerősítés esetén az üzenetváltó-kiszolgálók látni fogják az IP-címét és a szolgáltatóját – azt, hogy mely kiszolgálókhoz kapcsolódik. A kép akkor érkezik meg, amikor a küldője befejezte annak feltöltését. QR-kód beolvasásával.]]> A kapott SimpleX Chat-meghívó-hivatkozását megnyithatja a böngészőjében: @@ -695,7 +695,7 @@ moderált A tag eltávolítása a csoportból – ez a művelet nem vonható vissza! Győződjön meg arról, hogy az XFTP-kiszolgáló címei megfelelő formátumúak, sorszeparáltak és nincsenek duplikálva. - Nincs kijelölve ismerős + Nincs ismerős kijelölve Nincsenek fogadott, vagy küldött fájlok Megnyitás hordozható eszköz-alkalmazásban, majd koppintson a Kapcsolódás gombra az alkalmazásban.]]> Markdown az üzenetekben @@ -774,7 +774,7 @@ Nincsenek szűrt csevegések érvénytelen adat Győződjön meg arról, hogy a WebRTC ICE-kiszolgáló címei megfelelő formátumúak, sorszeparáltak és nincsenek duplikálva. - Csak a csoporttulajdonosok engedélyezhetik a fájlok- és a médiatartalmak küldését. + Csak a csoport-tulajdonosok engedélyezhetik a fájlok- és a médiatartalmak küldését. A fájl betöltése… Nincs hozzáadandó ismerős Üzenetvázlat @@ -791,10 +791,10 @@ Némítás Hordozható eszköz társítása Értesítési szolgáltatás - Csak a csoporttulajdonosok engedélyezhetik a hangüzenetek küldését. + Csak a csoport-tulajdonosok engedélyezhetik a hangüzenetek küldését. A felhasználói profilok, ismerősök, csoportok és üzenetek csak az eszközön vannak tárolva a kliensen belül. Érvénytelen átköltöztetési visszaigazolás - Csak a csoporttulajdonosok változtathatják meg a csoportbeállításokat. + Csak a csoport-tulajdonosok változtathatják meg a csoport-beállításokat. Nincsenek előzmények Érvénytelen QR-kód Megjelölés olvasottként @@ -818,7 +818,7 @@ Menük és figyelmeztetések Tagok meghívása csatlakozás mint %s - Nincs kijelölve csevegés + Nincs csevegés kijelölve Csak helyi profiladatok inkognitó egy egyszer használható hivatkozáson keresztül Moderálva lett ekkor: %s @@ -874,7 +874,7 @@ Kapcsolatkérés megismétlése? Véglegesen csak Ön törölhet üzeneteket (ismerőse csak törlésre jelölheti őket ). (24 óra) Szerepkör - SimpleX-kapcsolattartási-cím + SimpleX kapcsolattartási cím Megállítás Előre beállított kiszolgáló Új csevegés indítása @@ -913,7 +913,7 @@ Csökkentett akkumulátor-használat Mentés és az ismerősök értesítése Előnézet - Csevegés használata + Simplex Chat használata Megosztás Fogadott üzenet Üdvözlőüzenet @@ -1091,7 +1091,7 @@ Jelkód Ismeretlen hiba Saját SMP-kiszolgálójának címe - Csevegés konzol megnyitása + Csevegési konzol megnyitása Eltávolítás Adatbázis-jelmondat beállítása Biztonsági kód megtekintése @@ -1102,7 +1102,7 @@ A kézbesítési jelentések le vannak tiltva Adatbázismappa megnyitása egy egyszer használható meghívó-hivatkozáson keresztül - Csoportbeállítások megadása + Csoport-beállítások megadása a következőn keresztül: %1$s igen Hangüzenet @@ -1261,7 +1261,7 @@ SimpleX Chat-kiszolgálók használatban. SimpleX Chat-kiszolgálók használata? Csevegési profil felfedése - Videók és fájlok 1Gb méretig + Videók és fájlok legfeljebb 1GB méretig TCP kapcsolat időtúllépése A(z) %1$s nevű profiljának SimpleX-címe meg lesz osztva. Ön már kapcsolódott a következőhöz: %1$s. @@ -1270,7 +1270,7 @@ Figyelmeztetés: néhány adat elveszhet! Koppintson ide az új csevegés indításához Várakozás a számítógépre… - Az üzenetküldés jövője + Az üzenetváltás jövője Hálózati beállítások megváltoztatása? Várakozás a hordozható eszköz társítására: Biztonságos kapcsolat hitelesítése @@ -1284,7 +1284,7 @@ Alkalmazás új kapcsolatokhoz Az új üzeneteket az alkalmazás rendszeresen lekéri – naponta néhány százalékot használ az akkumulátorból. Az alkalmazás nem használ push-értesítéseket – az eszközről származó adatok nem lesznek elküldve a kiszolgálóknak. Számítógép címének beillesztése - a kapcsolattartási cím-hivatkozáson keresztül + a kapcsolattartási címhivatkozáson keresztül a SimpleX a háttérben fut a push értesítések használata helyett.]]> Az ismerősének online kell lennie ahhoz, hogy a kapcsolat létrejöjjön.\nVisszavonhatja ezt az ismerőskérelmet és eltávolíthatja az ismerőst (ezt később ismét megpróbálhatja egy új hivatkozással). A jelszó nem található a Keystore-ban, ezért kézzel szükséges megadni. Ez akkor történhetett meg, ha visszaállította az alkalmazás adatait egy biztonságimentési eszközzel. Ha nem így történt, akkor lépjen kapcsolatba a fejlesztőkkel. @@ -1350,7 +1350,7 @@ A hangüzenetek küldése le van tiltva. Alkalmazás akkumulátor-használata / Korlátlan módot az alkalmazás beállításaiban.]]> Biztonságos kvantumálló-protokollon keresztül. - - 5 perc hosszúságú hangüzenetek.\n- egyéni üzenet-eltűnési időkorlát.\n- előzmények szerkesztése. + - legfeljebb 5 perc hosszúságú hangüzenetek.\n- egyéni üzenet-eltűnési időkorlát.\n- előzmények szerkesztése. Társítás számítógéppel menüt a hordozható eszköz alkalmazásban és olvassa be a QR-kódot.]]> %s ekkor: %s Akkor lesz kapcsolódva, amikor az ismerősének eszköze online lesz, várjon, vagy ellenőrizze később! @@ -1427,7 +1427,7 @@ Ez a funkció még nem támogatott. Próbálja meg a következő kiadásban. A bejegyzés frissítve: %s Tagok meghívásának kihagyása - Ezek felülbírálhatók az ismerős- és csoportbeállításokban. + Ezek felülbírálhatók az ismerős- és csoport-beállításokban. Az ismerőse, akivel megosztotta ezt a hivatkozást, NEM fog tudni kapcsolódni! A véletlenszerű jelmondat egyszerű szövegként van tárolva a beállításokban.\nEzt később megváltoztathatja. Koppintson ide az inkognitóban való kapcsolódáshoz @@ -1450,7 +1450,7 @@ A kézbesítési jelentések engedélyezve vannak %d csoportban A szerepkör meg fog változni a következőre: %s. A csoport tagjai értesítést fognak kapni. Profil és kiszolgálókapcsolatok - Egy üzenetküldő- és alkalmazásplatform, amely védi az adatait és biztonságát. + Egy üzenetváltó- és alkalmazásplatform, amely védi az adatait és biztonságát. A profil aktiválásához koppintson az ikonra. A kézbesítési jelentések le vannak tiltva %d ismerősnél Munkamenet kód @@ -1475,7 +1475,7 @@ Használati útmutatóban olvasható.]]> A jelmondat a beállításokban egyszerű szövegként van tárolva. Konzol megjelenítése új ablakban - Az előző üzenet hasító értéke különbözik. + Az előző üzenet hasítóértéke különbözik. Ezek a beállítások csak a jelenlegi csevegő-profiljára vonatkoznak Várjon, amíg a fájl betöltődik a társított hordozható eszközről GitHub tárolónkban.]]> @@ -1498,7 +1498,7 @@ Az előzmények nem lesznek elküldve az új tagok számára. Újrapróbálkozás A kamera nem elérhető - Az utolsó 100 üzenet elküldése az új tagok számára. + Legfeljebb az utolsó 100 üzenet elküldése az új tagok számára. Az előzmények ne legyenek elküldve az új tagok számára. Vagy mutassa meg ezt a kódot Kamera hozzáférés engedélyezése @@ -1788,7 +1788,7 @@ További kiemelés 2 Alkalmazás téma Perzsa kezelőfelület - Védje IP-címét az ismerősei által kiválasztott üzenet-továbbító-kiszolgálókkal szemben.\nEngedélyezze a *Hálózat és kiszolgálók* menüben. + Védje IP-címét az ismerősei által kiválasztott üzenetváltó-továbbító-kiszolgálókkal szemben.\nEngedélyezze a *Hálózat és kiszolgálók* menüben. Ismeretlen kiszolgálókról származó fájlok megerősítése. Javított üzenetkézbesítés Alkalmazás témájának visszaállítása @@ -1856,7 +1856,7 @@ Üzenetküldési hibák Közvetlenül küldött Összes elküldött üzenet - Proxyn keresztül küldve + Proxyn keresztül küldött SMP-kiszolgáló Statisztikagyűjtés kezdete: %s. Feltöltve @@ -1978,7 +1978,7 @@ Üzenet… Kijelölés Az üzenetek az összes tag számára moderáltként lesznek megjelölve. - Nincs kijelölve semmi + Nincs semmi kijelölve Az üzenetek törlésre lesznek jelölve. A címzett(ek) képes(ek) lesz(nek) felfedni ezt az üzenetet. Törli a tagok %d üzenetét? %d kijelölve @@ -2286,7 +2286,7 @@ Hivatkozás megnyitása a csevegési listából Nem Webhivatkozás megnyitása? - Csevegési név beállítása… + Csevegés nevének beállítása… Automatikus üzenettörlés letiltása? Üzenetek törlésének letiltása Az ebben a csevegésben lévő üzenetek soha nem lesznek törölve. @@ -2295,4 +2295,10 @@ Csevegési üzenetek törlése az Ön eszközéről. Automatikus üzenettörlés módosítása? Ez a művelet nem vonható vissza – a kijelölt üzenettől korábban küldött és fogadott üzenetek törölve lesznek a csevegésből. + A(z) %1$s port használata, amikor nincs port megadva. + TCP-port az üzenetváltáshoz + Webport használata + Olvasatlan megemlítések + Összes némítása + Legfeljebb %1$s tagot említhet meg egy üzenetben! diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/in/strings.xml b/apps/multiplatform/common/src/commonMain/resources/MR/in/strings.xml index 840ca777ce..fca0124b30 100644 --- a/apps/multiplatform/common/src/commonMain/resources/MR/in/strings.xml +++ b/apps/multiplatform/common/src/commonMain/resources/MR/in/strings.xml @@ -2285,4 +2285,25 @@ Hanya pengirim dan moderator dapat melihat Hanya Anda dan moderator dapat melihat Spam + Setel nama obrolan… + Buka tautan peramban? + Buka tautan + Ubah hapus pesan otomatis? + Matikan hapus pesan otomatis? + Pesan dalam obrolan ini tidak akan pernah dihapus. + Hapus pesan obrolan dari perangkat Anda. + Matikan hapus pesan + Tindakan tak dapat dibatalkan - pesan yang dikirim dan diterima dalam obrolan ini sebelum yang dipilih akan dihapus. + Tanya + Tidak + Buka tautan dari daftar obrolan + Ya + 1 tahun + bawaan (%s) + Bisukan semua + Sebutan belum terbaca + Port TCP untuk pesan + Gunakan port TCP %1$s jika tidak ada port yang ditentukan. + Gunakan port peramban + Anda dapat menyebut hingga %1$s anggota per pesan! 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 63307330cc..efbcb1d77a 100644 --- a/apps/multiplatform/common/src/commonMain/resources/MR/it/strings.xml +++ b/apps/multiplatform/common/src/commonMain/resources/MR/it/strings.xml @@ -2332,4 +2332,10 @@ Elimina i messaggi di chat dal tuo dispositivo. I messaggi in questa chat non verranno mai eliminati. predefinito (%s) + Usa la porta TCP %1$s quando nessuna porta è specificata. + Porta TCP per i messaggi + Usa porta web + Silenzia tutto + Menzioni non lette + Puoi menzionare fino a %1$s membri per messaggio! 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 b915586b90..410c65b2de 100644 --- a/apps/multiplatform/common/src/commonMain/resources/MR/ko/strings.xml +++ b/apps/multiplatform/common/src/commonMain/resources/MR/ko/strings.xml @@ -1491,4 +1491,14 @@ 연결에 암호화 재협상이 필요합니다. 암호화 재협상이 진행 중입니다. 팀 멤버를 대화에 추가하세요. - \ No newline at end of file + 다른 이유 + 보관 + 1 보고서 + 리스트 추가 + 전부 + 보관된 멤버 리포트 + 목록 %s의 모든 차트가 제거되었고, 목록도 삭제되었습니다. + 1 년 + 리스트에 추가하기 + 보관된 보고서 + 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 867638621b..71613f2d8a 100644 --- a/apps/multiplatform/common/src/commonMain/resources/MR/nl/strings.xml +++ b/apps/multiplatform/common/src/commonMain/resources/MR/nl/strings.xml @@ -1059,7 +1059,7 @@ Toegangscode ingesteld! Systeem Decodering fout - De hash van het vorige bericht is anders. + De hash van het vorige bericht is anders.\" %1$d berichten overgeslagen. Het kan gebeuren wanneer u of de ander een oude database back-up gebruikt. Meld het alsjeblieft aan de ontwikkelaars. @@ -1832,7 +1832,7 @@ Systeem Wallpaper achtergrond Stel het standaard thema in - Toon chatlijst in nieuw venster + Toon chat-lijst in nieuw venster geen Foutopsporing bezorging Informatie over berichtenwachtrij @@ -1872,7 +1872,7 @@ Details Berichten ontvangen Bericht ontvangst - Beginnend vanaf %s. \nAlle gegevens zijn privé op uw apparaat. + Vanaf %s.\nAlle gegevens blijven privé op uw apparaat. Verbonden servers In behandeling Eerder verbonden servers @@ -2039,11 +2039,11 @@ Verwijder maximaal 20 berichten tegelijk. Sommige bestanden zijn niet geëxporteerd Alle hints resetten - Chatlijst wisselen: + Chat-lijst wisselen: U kunt dit wijzigen in de instellingen onder uiterlijk Creëren Vervagen voor betere privacy. - Afspelen via de chatlijst. + Afspelen via de chat-lijst. Download nieuwe versies van GitHub. Vergroot het lettertype. App automatisch upgraden @@ -2253,7 +2253,7 @@ Verbinding herstellen? Herstel Verbinding nog niet klaar - Fout bij het bijwerken van de chatlijst + Fout bij het bijwerken van de chat-lijst Geen chats in lijst %s. Favorieten Groepen @@ -2270,12 +2270,12 @@ De naam en emoji van de lijst moeten voor alle lijsten verschillend zijn. Lijst opslaan Lijst - Fout bij het laden van chatlijsten + Fout bij het laden van chat-lijsten Alle chats worden verwijderd uit de lijst %s, en de lijst wordt verwijderd Toevoegen aan lijst bedrijven Contacten - Fout bij het aanmaken van chatlijst + Fout bij het aanmaken van chat-lijst Geen ongelezen chats Notities Lijst wijzigen @@ -2314,7 +2314,7 @@ Bestand is geblokkeerd door server operator:\n%1$s. Nee Link openen - Open links van chatlijst + Open links vIn de chat-lijst Vragen Rapporten Spam @@ -2329,4 +2329,10 @@ Verwijder chatberichten van uw apparaat. Berichten verwijderen uitschakelen standaard (%s) + TCP-poort voor berichtenuitwisseling + Gebruik een webpoort + Gebruik TCP-poort %1$s wanneer er geen poort is opgegeven. + Alles dempen + Ongelezen vermeldingen + Je kunt maximaal %1$s leden per bericht vermelden! 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 1ebaf99ea8..8d31873b2d 100644 --- a/apps/multiplatform/common/src/commonMain/resources/MR/pl/strings.xml +++ b/apps/multiplatform/common/src/commonMain/resources/MR/pl/strings.xml @@ -418,7 +418,7 @@ odrzucone połączenie sekret uruchamianie… - strajk + przekreślenie Brak identyfikatorów użytkownika. Następna generacja \nprywatnych wiadomości oczekiwanie na odpowiedź… 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 b592fec10c..000517d28c 100644 --- a/apps/multiplatform/common/src/commonMain/resources/MR/uk/strings.xml +++ b/apps/multiplatform/common/src/commonMain/resources/MR/uk/strings.xml @@ -2329,4 +2329,7 @@ типово (%s) Змінити автоматичне видалення повідомлень? Цю дію не можна скасувати — повідомлення, надіслані та отримані в цьому чаті раніше за обраний час, будуть видалені. + TCP-порт для повідомлень + Використовувати TCP-порт %1$s, якщо порт не вказано. + Використовувати веб-порт diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/vi/strings.xml b/apps/multiplatform/common/src/commonMain/resources/MR/vi/strings.xml index 638c94b012..b7954bcea8 100644 --- a/apps/multiplatform/common/src/commonMain/resources/MR/vi/strings.xml +++ b/apps/multiplatform/common/src/commonMain/resources/MR/vi/strings.xml @@ -7,7 +7,7 @@ Địa chỉ Hủy bỏ Chấp nhận - liên kết dùng một lần + đường dẫn dùng 1 lần Thêm liên hệ Thông tin về SimpleX Chat Thêm máy chủ @@ -41,7 +41,7 @@ 1 tháng 1 tuần Hủy bỏ việc đổi địa chỉ - Các quản trị viên có thể tạo liên kết để tham gia nhóm. + Các quản trị viên có thể tạo đường dẫn để tham gia nhóm. Một ngày Biến thể của màu thứ cấp Tất cả các thành viên trong nhóm vẫn sẽ được giữ kết nối. @@ -74,7 +74,7 @@ Cho phép gửi tin nhắn tự xóa. Cho phép gửi tin nhắn thoại. Cho phép thả biểu tượng cảm xúc. - Cho phép gửi các tập tin, ảnh và video. + Cho phép gửi các tệp và đa phương tiện. Luôn luôn bật Tất cả liên hệ của bạn vẫn sẽ được giữ kết nối. Tất cả liên hệ của bạn vẫn sẽ được giữ kết nối. Bản cập nhật hồ sơ sẽ được gửi tới các liên hệ của bạn. @@ -122,7 +122,7 @@ Các cuộc gọi thoại/video tất cả các thành viên Các cuộc gọi thoại/video bị cấm. - Cho phép gửi liên kết SimpleX. + Cho phép gửi đường dẫn SimpleX. quản trị viên tác giả Quá trình xác thực đã bị hủy bỏ @@ -136,7 +136,7 @@ Dịch vụ nền luôn luôn chạy - thông báo sẽ được hiển thị ngay khi nhận được tin nhắn. Tự động chấp nhận yêu cầu liên hệ Địa chỉ máy tính xấu - Thêm liên hệ: để tạo liên kết mời mới, hoặc kết nối qua liên kết bạn nhận được.]]> + Thêm liên hệ: để tạo đường dẫn mời mới, hoặc kết nối qua đường dẫn bạn nhận được.]]> hàm băm tin nhắn xấu " \nCó sẵn ở v5.1" @@ -169,7 +169,7 @@ in đậm Cả bạn và liên hệ của bạn đều có thể gửi tin nhắn tự xóa. Cả bạn và liên hệ của bạn đều có thể thả cảm xúc tin nhắn. - Xin lưu ý: relay tin nhắn và tệp được kết nối thông qua SOCKS proxy. Các cuộc gọi và bản xem trước liên kết sử dụng kết nối trực tiếp.]]> + Xin lưu ý: relay tin nhắn và tệp được kết nối thông qua SOCKS proxy. Các cuộc gọi và bản xem trước đường dẫn sử dụng kết nối trực tiếp.]]> Tốt cho pin. Ứng dụng kiểm tra tin nhắn 10 phút một lần. Bạn có thể bỏ lỡ các cuộc gọi hoặc tin nhắn khẩn cấp.]]> Luôn luôn đang gọi… @@ -200,7 +200,7 @@ Camera và mic Không thể mời liên hệ! Không thể truy cập Keystore để lưu mật khẩu cơ sở dữ liệu - hủy bỏ xem trước liên kết + hủy bỏ xem trước đường dẫn Hủy bỏ di chuyển Chủ đề ứng dụng Không thể nhận tệp @@ -302,10 +302,10 @@ đang kết nối (lời mời giới thiệu) Kết nối tới máy tính đang ở trong tình trạng không tốt Kết nối đã bị ngắt - Kết nối thông qua liên kết / mã QR + Kết nối thông qua đường dẫn / mã QR Kết nối tới chính bạn? Yêu cầu kết nối đã được gửi! - Kết nối thông qua liên kết + Kết nối thông qua đường dẫn Đang kết nối cuộc gọi Kết nối đã bị ngắt Đang kết nối tới máy tính @@ -318,7 +318,7 @@ Thời gian chờ kết nối Lỗi kết nối Kết nối - Kết nối thông qua liên kết? + Kết nối thông qua đường dẫn? kết nối %1$d kết nối đã được tạo lập Kết nối với %1$s? @@ -326,7 +326,7 @@ Kết nối đang kết nối cuộc gọi… Kết nối thông qua địa chỉ liên lạc? - Kết nối thông qua liên kết dùng một lần? + Kết nối thông qua đường dẫn dùng một lần? Liên hệ đã được kiểm tra Các liên hệ Liên hệ có cho phép @@ -354,8 +354,8 @@ Không thể gửi tin nhắn Tạo tệp Tạo một địa chỉ để cho mọi người kết nối với bạn. - Tạo liên kết nhóm - Tạo liên kết + Tạo đường dẫn nhóm + Tạo đường dẫn Được tạo ra tại Tạo địa chỉ Được tạo ra tại: %s @@ -370,8 +370,8 @@ Các màu chế độ tối Tối Lỗi nghiêm trọng - Tạo liên kết lời mời dùng một lần - Đang tạo liên kết… + Tạo đường dẫn lời mời dùng một lần + Đang tạo đường dẫn… Tạo hồ sơ Tùy chỉnh và chia sẻ các chủ đề màu sắc. Các chủ đề tùy chỉnh @@ -388,7 +388,7 @@ Tạo địa chỉ SimpleX Tạo hồ sơ Tạo hàng đợi - Tạo liên kết lưu trữ + Tạo đường dẫn lưu trữ tùy chỉnh Chủ đề tối Hạ cấp cơ sở dữ liệu @@ -447,10 +447,10 @@ Xóa nhóm Xóa kết nối đang chờ? Xóa tệp cho tất cả các hồ sơ trò chuyện - Xóa liên kết? + Xóa đường dẫn? Xóa hồ sơ Xóa cho mọi người - Xóa liên kết + Xóa đường dẫn Xóa ảnh Xóa các tin nhắn Xóa nhóm? @@ -535,12 +535,12 @@ Đã bị tắt Tắt đã bị tắt - Tin nhắn tự xóa bị cấm trong nhóm này. + Tin nhắn tự xóa bị cấm. gọi kết nối Liên hệ sẽ bị xóa - điều này không thể hoàn tác! Cuộc trò chuyện đã bị xóa! - Làm mờ phương tiện truyền thông + Làm mờ đa phương tiện Không thể gọi liên hệ Cho phép thực hiện cuộc gọi? Cuộc gọi bị cấm! @@ -597,13 +597,13 @@ Không bật Đã tải về Đang tải về bản cập nhật ứng dụng, đừng đóng ứng dụng - Các tập tin đã tải về + Các tệp đã tải về Lỗi tải về mã hóa đầu cuối Tải xuống các phiên bản mới từ GitHub. %d giây %ds - Đang tải xuống chi tiết liên kết + Đang tải xuống chi tiết đường dẫn Tên hiển thị trùng lặp! %d tuần %d tuần @@ -637,7 +637,7 @@ cho phép tái đàm phán mã hóa với %s cần tái đàm phán mã hóa cho %s Bật chỉ báo đã nhận? - Mã hóa các tệp và phương tiện được lưu trữ + Mã hóa các tệp và đa phương tiện được lưu trữ Lỗi Kết thúc cuộc gọi Bật trong cuộc trò chuyện trực tiếp (BETA)! @@ -685,12 +685,12 @@ Lỗi xóa cơ sở dữ liệu SimpleX Chat Lỗi tạo liên hệ thành viên Lỗi hủy bỏ thay đổi địa chỉ - Lỗi tạo liên kết nhóm + Lỗi tạo đường dẫn nhóm Lỗi thay đổi chức vụ Lỗi kết nối đến máy chủ chuyển tiếp %1$s. Vui lòng thử lại sau. Lỗi xóa liên hệ Lỗi xóa nhóm - Lỗi xóa liên kết nhóm + Lỗi xóa đường dẫn nhóm Lỗi xóa yêu cầu liên hệ Lỗi xóa cơ sở dữ liệu Lỗi xóa kết nối liên hệ đang chờ xử lý @@ -718,7 +718,7 @@ Lỗi kết nối lại máy chủ Lỗi Lỗi khôi phục thống kê - Lỗi cập nhật liên kết nhóm + Lỗi cập nhật đường dẫn nhóm lỗi hiển thị tin nhắn lỗi hiển thị nội dung Lỗi lưu máy chủ ICE @@ -750,13 +750,13 @@ Tập tin đã xuất không tồn tại TẬP TIN Không thể tải tin nhắn - Không tìm thấy tập tin - có thể tập tin đã bị xóa và hủy bỏ. - Lỗi tập tin + Không tìm thấy tệp - có thể tập tin đã bị xóa và hủy bỏ. + Lỗi tệp Xuất chủ đề Không thể tải tin nhắn Tập tin Nhanh chóng và không cần phải đợi người gửi hoạt động! - Không tìm thấy tập tin + Không tìm thấy tệp Tập tin: %s Tham gia nhanh chóng hơn và xử lý tin nhắn ổn định hơn. Tập tin @@ -764,14 +764,14 @@ Tập tin Lỗi máy chủ tệp: %1$s Trạng thái tệp - Tệp và phương tiện truyền thông không được cho phép - Tệp và phương tiện truyền thông bị cấm trong nhóm này. + Tệp và đa phương tiện không được cho phép + Tệp và đa phương tiện bị cấm. Tệp sẽ bị xóa khỏi máy chủ. - Tệp & phương tiện truyền thông - Tệp và phương tiện truyền thông bị cấm! + Tệp & đa phương tiện + Tệp và đa phương tiện bị cấm! Tệp sẽ được nhận khi liên hệ của bạn hoàn tất quá trình tải lên. - Tệp và phương tiện truyền thông - Tệp đã bị xóa hoặc liên kết không hợp lệ + Tệp và đa phương tiện + Tệp đã bị xóa hoặc đường dẫn không hợp lệ Tệp đã được lưu Tệp sẽ được nhận khi liên hệ của bạn hoạt động, vui lòng chờ hoặc kiểm tra lại sau! Trạng thái tệp: %s @@ -828,26 +828,26 @@ Chào buổi chiều! Giao diện tiếng Pháp Đã tìm thấy máy tính - Liên kết đầy đủ + Đầy đủ đường dẫn Từ Thư viện Tên đầy đủ: Tuyệt đối phi tập trung - chỉ hiển thị cho thành viên. Chào buổi sáng! nhóm đã bị xóa - Các thành viên nhóm có thể thả cảm xúc tin nhắn. - Các thành viên nhóm có thể xóa theo cách không thể hồi phục các tin nhắn đã gửi. (24 giờ) - Các thành viên trong nhóm có thể gửi tin nhắn thoại. + Các thành viên có thể thả cảm xúc tin nhắn. + Các thành viên có thể xóa các tin nhắn đã gửi mà không thể phục hồi lại. (24 giờ) + Các thành viên có thể gửi tin nhắn thoại. Cấp quyền - Liên kết nhóm + Đường dẫn nhóm Nhóm Tên đầy đủ nhóm: - Các thành viên trong nhóm có thể gửi tin nhắn tự xóa. - Các thành viên trong nhóm có thể gửi tệp và phương tiện truyền thông. - Các thành viên trong nhóm có thể gửi liên kết SimpleX. + Các thành viên có thể gửi tin nhắn tự xóa. + Các thành viên có thể gửi tệp và đa phương tiện. + Các thành viên có thể gửi đường dẫn SimpleX. Nhóm không hoạt động Nhóm đã tồn tại rồi! - Các thành viên trong nhóm có thể gửi tin nhắn trực tiếp. - Liên kết nhóm + Các thành viên có thể gửi tin nhắn trực tiếp. + Đường dẫn nhóm Lời mời nhóm đã hết hạn Lời mới nhóm không còn có hiệu lực, nó đã bị xóa bởi người gửi. Cho phép thực hiện cuộc gọi @@ -907,15 +907,15 @@ Ngay lập tức Hình ảnh sẽ được nhận khi liên hệ của bạn hoàn thành việc tải lên. Hình ảnh - Nếu bạn không thể gặp mặt trực tiếp, cho liên hệ của bạn xem mã QR trong một cuộc gọi video, hoặc chia sẻ liên kết. + Nếu bạn không thể gặp mặt trực tiếp, cho liên hệ của bạn xem mã QR trong một cuộc gọi video, hoặc chia sẻ đường dẫn. Hình ảnh đã được gửi Hình ảnh Hình ảnh đã được lưu vào Thư viện - Nếu bạn nhận được liên kết mời SimpleX Chat, bạn có thể mở nó trong trình duyệt của mình: - quét mã QR trong cuộc gọi video, hoặc liên hệ của bạn có thể chia sẻ một liên kết mời.]]> + Nếu bạn nhận được đường dẫn mời SimpleX Chat, bạn có thể mở nó trong trình duyệt của mình: + quét mã QR trong cuộc gọi video, hoặc liên hệ của bạn có thể chia sẻ một đường dẫn mời.]]> Nếu bạn xác nhận, các máy chủ truyền tin nhắn sẽ có thể biết địa chỉ IP, và nhà cung cấp của bạn - máy chủ nào mà bạn đang kết nối. Nếu bạn chọn từ chối người gửi sẽ KHÔNG được thông báo. - cho liên hệ của bạn xem mã QR trong cuộc gọi video, hoặc chia sẻ liên kết.]]> + cho liên hệ của bạn xem mã QR trong cuộc gọi video, hoặc chia sẻ đường dẫn.]]> Nhập Bỏ qua không hoạt động @@ -933,15 +933,15 @@ Nhập cơ sở dữ liệu Âm thanh trong cuộc gọi Nâng cao bảo mật và sự riêng tư - ẩn danh qua liên kết dùng một lần + ẩn danh qua đường dẫn dùng một lần Thông tin gián tiếp (%1$s) - Để tiếp tục, hãy ngắt kết nối tới các máy chủ dùng để truyền dẫn tin nhắn. + Để tiếp tục, hãy ngắt kết nối trò chuyện. Cài đặt SimpleX Chat cho cửa sổ câu lệnh - ẩn danh qua liên kết địa chỉ liên lạc + ẩn danh qua đường dẫn địa chỉ liên lạc Cuộc gọi thoại đến Chức vụ ban đầu - ẩn danh qua liên kết nhóm + ẩn danh qua đường dẫn nhóm Mã bảo mật không đúng! Trả lời đến Phiên bản cơ sở dữ liệu không tương thích @@ -955,16 +955,16 @@ Phiên bản không tương thích MÀU SẮC GIAO DIỆN đã được mời - Liên kết không hợp lệ + Đường dẫn không hợp lệ tác vụ trò chuyện không hợp lệ dữ liệu không hợp lệ định dạng tin nhắn không hợp lệ Mời Lời mời đã hết hạn! - Liên kết không hợp lệ! - Liên kết không hợp lệ + Đường dẫn không hợp lệ! + Đường dẫn không hợp lệ Tên hiển thị không hợp lệ! - Liên kết kết nối không hợp lệ + Đường dẫn kết nối không hợp lệ Thông báo tức thời! Mã QR không hợp lệ Thông báo tức thời @@ -1023,7 +1023,7 @@ Chế độ khóa Giao diện tiếng Ý thiết bị này v%s)]]> - Biểu đạt cảm xúc tin nhắn bị cấm trong nhóm này. + Thả biểu tượng cảm xúc tin nhắn bị cấm. đã được mời để kết nối Tìm hiểu thêm Giữ @@ -1047,17 +1047,17 @@ Trung bình Tin nhắn động Giữ lại cuộc trò chuyện - Hình ảnh xem trước của liên kết + Hình ảnh xem trước của đường dẫn Thành viên sẽ bị xóa khỏi nhóm - việc này không thể được hoàn tác! Chế độ sáng UI tiếng Litva TIN NHẮN VÀ TỆP - Việc xóa tin nhắn mà không thể phục hồi bị cấm trong nhóm này. + Việc xóa tin nhắn mà không thể phục hồi là bị cấm. Tham gia vào các cuộc trò chuyện nhóm Chế độ định tuyến tin nhắn Hãy trò chuyện trên SimpleX Chat in nghiêng - Nó có thể được thay đổi sau trong phần cài đặt. + Nó ảnh hưởng đến pin như thế nào Việc xóa tin nhắn mà không thể phục hồi bị cấm trong cuộc trò chuyện này. Biểu đạt cảm xúc tin nhắn bị cấm trong cuộc trò chuyện này. Bản nháp tin nhắn @@ -1066,7 +1066,7 @@ Tin nhắn Lỗi keychain đã rời - đã được mời thông qua liên kết nhóm của bạn + đã được mời thông qua đường dẫn nhóm của bạn thành viên đã rời Nó cho phép việc có các kết nối ẩn danh mà không có bất kỳ dữ liệu chung nào giữa chúng trong một hồ sơ trò chuyện @@ -1081,7 +1081,7 @@ Xóa tin nhắn mà không thể phục hồi Tin nhắn Máy chủ tin nhắn - Máy chủ tệp và phương tiện + Máy chủ tệp và đa phương tiện Nội dung tin nhắn Tin nhắn đã bị xóa sau khi bạn chọn chúng. Tin nhắn từ %s sẽ được hiển thị! @@ -1147,7 +1147,7 @@ Chức vụ thành viên mới Nhiều cải tiến hơn nữa sắp ra mắt! %s có một phiên bản không được hỗ trợ. Xin vui lòng đảm bảo rằng bạn dùng cùng một phiên bản trên cả hai thiết bị.]]> - Các tùy chọn phương tiện mới + Các tùy chọn đa phương tiện mới Cuộc gọi nhỡ Nhiều cải tiến hơn nữa sắp ra mắt! Di chuyển sang một thiết bị khác qua mã QR. @@ -1178,13 +1178,13 @@ Không có gì để chuyển tiếp! Thông báo sẽ dừng hoạt động cho đến khi bạn khởi động lại ứng dụng Không có thông tin định danh người dùng. - không có nội dung + không có văn bản tắt tắt` Chỉ bạn mới có thể thực hiện cuộc gọi. Chỉ liên hệ của bạn mới có thể thả cảm xúc tin nhắn. Chỉ có thể gửi 10 video cùng một lúc - Liên kết lời mời dùng một lần + Đường dẫn lời mời dùng một lần (chỉ được lưu trữ bởi thành viên nhóm) Xem trước thông báo Dịch vụ thông báo @@ -1192,7 +1192,7 @@ Không có tệp nào được gửi hay được nhận quan sát viên Không có kết nối mạng - Chỉ chủ nhóm mới có thể bật tính năng cho phép gửi tệp và phương tiện. + Chỉ chủ nhóm mới có thể bật tính năng cho phép gửi tệp và đa phương tiện. Chỉ có thể gửi 10 hình ảnh cùng một lúc Chỉ một thiết bị mới có thể hoạt động cùng một lúc Không tương thích! @@ -1200,10 +1200,10 @@ OK Chỉ xóa cuộc trò chuyện Chỉ bạn mới có thể gửi tin nhắn thoại. - bảo mật đầu cuối 2 lớp.]]> + Chỉ thiết bị cuối mới lưu trữ các hồ sơ người dùng, liên hệ, nhóm, và tin nhắn Chỉ chủ nhóm mới có thể bật tính năng tin nhắn thoại. Chỉ bạn mới có thể gửi tin nhắn tự xóa. - Liên kết lời mời dùng một lần + Đường dẫn lời mời dùng một lần Chỉ có bạn mới có thể thả cảm xúc tin nhắn. Thông báo sẽ chỉ được gửi cho đến khi ứng dụng dừng! Chỉ bạn mới có thể xóa tin nhắn mà không thể phục hồi (liên hệ của bạn có thể đánh dấu chúng để xóa). (24 giờ) @@ -1212,7 +1212,7 @@ được đề nghị %s: %2s Tắt Chỉ chủ nhóm mới có thể điều chỉnh các tùy chọn nhóm. - Giờ thì quản trị viên có thể:\n- xóa tin nhắn của thành viên\n- vô hiệu hóa thành viên (quyền hạn quan sát viên) + Giờ thì quản trị viên có thể:\n- xóa tin nhắn của thành viên\n- vô hiệu hóa thành viên (chức vụ quan sát viên) Không có cuộc trò chuyện nào được chọn Không có gì được chọn Mở @@ -1228,7 +1228,7 @@ Chỉ liên hệ của bạn mới có thể gửi tin nhắn thoại. chủ sở hữu Mở cài đặt máy chủ - Mở liên kết trong trình duyệt có thể làm giảm sự riêng tư và bảo mật của kết nối. Liên kết SimpleX không đáng tin cậy sẽ được đánh dấu màu đỏ. + Mở đường dẫn trong trình duyệt có thể làm giảm sự riêng tư và bảo mật của kết nối. Đường dẫn SimpleX không đáng tin cậy sẽ được đánh dấu màu đỏ. Chỉ liên hệ của bạn mới có thể xóa tin nhắn mà không thể phục hồi (bạn có thể đánh dấu chúng để xóa). (24 giờ) Mở cài đặt ứng dụng Mục mã truy cập @@ -1244,7 +1244,7 @@ Mở SimpleX Chat để chấp nhận cuộc gọi Mở Cài đặt Safari / Trang Web / Mic, rồi chọn Cho phép với localhost. Mã truy cập - Mở cuộc hội thoại + Mở kết nối trò chuyện Mở vị trí tệp Sử dụng từ máy tính trong ứng dụng di động và quét mã QR.]]> Hoặc dán đường dẫn lưu trữ @@ -1256,7 +1256,7 @@ các lỗi khác Các máy chủ SMP khác Các máy chủ XFTP khác - Dán đường dẫn mà bạn nhận được để kết nối với liên hệ hệ của bạn… + Dán đường dẫn mà bạn nhận được để kết nối với liên hệ của bạn… Dán đường dẫn Mật khẩu Định kỳ @@ -1285,7 +1285,7 @@ Xin vui lòng nhập đúng mật khẩu hiện tại. Mở từ danh sách cuộc trò chuyện. Cuộc gọi hình trong hình - Xin vui lòng báo cáo với các nhà phát triển:\n%s + Xin vui lòng báo cáo với các nhà phát triển: \n%s Thông báo định kỳ đã bị tắt! Xin vui lòng kiểm tra rằng thiết bị di động và máy tính kết nối tới cùng một mạng cục bộ, và tường lửa của máy tính cho phép kết nối.\nHãy chia sẻ bất kỳ vấn đề nào khác với nhà phát triển. Xin vui lòng kiểm tra rằng bạn đã dùng đúng đường dẫn hoặc yêu cầu liên hệ của bạn gửi cho bạn một đường dẫn khác. @@ -1296,12 +1296,12 @@ Xin vui lòng nhập mật khẩu trước đó sau khi khôi phục bản sao lưu cơ sở dữ liệu. Việc này không thể được hoàn tác. Xin vui lòng liên lạc với quản trị viên nhóm. Xin vui lòng báo cáo với các nhà phát triển. - Xin vui lòng báo cáo tới các nhà phát triển:\n%s\n\nGợi ý rằng bạn nên khởi động lại ứng dụng. + Xin vui lòng báo cáo với các nhà phát triển: \n%s\n\nGợi ý rằng bạn nên khởi động lại ứng dụng. Có lẽ vân tay chứng chỉ trong địa chỉ máy chủ là không chính xác Đang chuẩn bị tải lên Cổng cổng %d - Xin vui lòng lưu trữ mật khẩu một cách an toàn, bạn sẽ KHÔNG thể trò chuyện nếu bạn làm mất nó. + Xin vui lòng lưu trữ mật khẩu một cách an toàn, bạn sẽ KHÔNG thể try cập kết nối trò chuyện nếu bạn làm mất nó. Xin vui lòng chờ trong khi tệp đang được tải từ thiết bị được liên kết Địa chỉ máy chủ cài sẵn Lưu lại bản nháp tin nhắn cuối cùng, với các tệp đính kèm. @@ -1345,12 +1345,12 @@ Thời gian chờ giao thức Cấm gửi tin nhắn tự xóa. Bảo vệ màn hình ứng dụng - Cấm gửi tệp và phương tiện truyền thông. + Cấm gửi tệp và đa phương tiện. Cấm gửi tin nhắn thoại. Cấm gửi tin nhắn tự xóa. Cấm gửi đường dẫn SimpleX Được proxy - Địa chỉ hay đường dẫn dùng một lần? + Địa chỉ hay đường dẫn dùng 1 lần? với chỉ một liên hệ - chia sẻ trực tiếp hoặc thông qua bất kỳ ứng dụng tin nhắn nào.]]> Cài đặt máy chủ .onion thành Không nếu proxy SOCKS không hỗ trợ chúng.]]> %s.]]> @@ -1360,7 +1360,7 @@ Thanh công cụ ứng dụng Làm mờ Chấp nhận điều kiện - Đã thêm các máy chủ truyền tệp & phương tiện + Đã thêm các máy chủ truyền tệp & đa phương tiện Đã chấp nhận điều kiện Cài đặt địa chỉ %s.]]> @@ -1381,7 +1381,7 @@ %1$s!]]> %1$s rồi.]]> Mở trong ứng dụng di động.]]> - Chọn nhà cung cấp + Các bên vận hành máy chủ kết nối với các nhà phát triển SimpleX Chat để hỏi bất kỳ câu hỏi nào và nhận thông tin cập nhật.]]> không được sử dụng cùng một cơ sở dữ liệu trên hai thiết .]]> Lỗi chấp nhận điều kiện @@ -1476,7 +1476,7 @@ Không có máy chủ để gửi tệp. Không có dịch vụ nền Máy chủ mới - Không có máy chủ tệp và phương tiện. + Không có máy chủ tệp và đa phương tiện. Thanh công cụ trò chuyện trong tầm Ngẫu nhiên Các máy chủ cài sẵn @@ -1488,7 +1488,7 @@ Mã hóa kháng lượng tử Sự riêng tư cho các khách hàng của bạn. Xin vui lòng giảm kích thước tin nhắn và gửi lại. - Xin vui lòng giảm kích thước tin nhắn hoặc xóa phương tiện và gửi lại. + Xin vui lòng giảm kích thước tin nhắn hoặc xóa đa phương tiện và gửi lại. Xác thực proxy Mã QR Mở bằng %s @@ -1601,7 +1601,7 @@ Quét mã QR từ máy tính Đã được bảo mật Thanh tìm kiếm chấp nhận đường dẫn lời mời. - Củng cố hàng đợi + Rào hàng đợi Gửi lỗi Lưu Chọn @@ -1758,7 +1758,7 @@ Chia sẻ với các liên hệ Chia sẻ tệp… Chia sẻ địa chỉ - Chia sẻ nội dung đa phương tiện… + Chia sẻ đa phương tiện… Chia sẻ hồ sơ Hiển thị tùy chọn cho nhà phát triển Tạo khuôn ảnh đại diện @@ -1869,10 +1869,10 @@ 1 báo cáo %d báo cáo Các báo cáo của thành viên - Đã lưu trữ các báo cáo của thành viên + Các báo cáo thành viên đã được lưu trữ Lỗi đăng ký dài hạn Các báo cáo - Bắt đầu từ %s.\nTất cả dữ liệu được lưu trữ một cách riêng tư trên thiết bị của bạn.. + Bắt đầu từ %s.\nTất cả dữ liệu được lưu trữ một cách riêng tư trên thiết bị của bạn. Hỗ trợ bluetooth và nhiều cải tiến khác. Các đăng ký dài hạn bị bỏ qua Dừng nhận tệp? @@ -1909,7 +1909,7 @@ Nhấn để tham gia một cách ẩn danh Hệ thống Chuyển đổi âm thanh và video trong lúc gọi. - Chuyển đổi hồ sơ trò chuyện cho các lời mời dùng một lần. + Chuyển đổi hồ sơ trò chuyện cho các lời mời dùng 1 lần. Kiểm tra thất bại tại bước %s. Xác thực hệ thống Nhấn để quét @@ -1943,7 +1943,7 @@ Ứng dụng bảo vệ sự riêng tư của bạn bằng cách sử dụng các bên vận hành khác nhau trong mỗi cuộc trò chuyện. Ứng dụng có thể bị đóng sau 1 phút chạy trong nền. Ứng dụng tìm nhận tin nhắn mới một cách định kỳ - nó tiêu tốn một vài phần trăm pin mỗi ngày. Ứng dụng không sử dụng thông báo đẩy - dữ liệu ở thiết bị của bạn không được gửi đi tới máy chủ nào. - Mã mà bạn đã quét không phải là một mã QR liên kết SimpleX. + Mã mà bạn đã quét không phải là một mã QR dẫn SimpleX. Chủ đề Mã băm của tin nhắn trước có sự khác biệt.\" ID của tin nhắn tiếp theo là không chính xác (nhỏ hơn hoặc bằng với cái trước).\nViệc này có thể xảy ra do một vài lỗi hoặc khi kết nối bị xâm phạm. @@ -1958,7 +1958,7 @@ Video không thể được giải mã. Xin vui lòng thử với một video khác hoặc liên lạc với các nhà phát triển. Tin nhắn sẽ bị đánh dấu là đã được kiểm duyệt cho tất cả các thành viên. Tin nhắn sẽ bị xóa cho tất cả các thành viên. - Việc này không thể được hoàn tác - tất cả các nội dung đa phương tiện và tệp đã được gửi và nhận sẽ bị xóa. Những hình ảnh chất lượng thấp sẽ được giữ lại. + Việc này không thể được hoàn tác - tất cả các đa phương tiện và tệp đã được gửi và nhận sẽ bị xóa. Những hình ảnh chất lượng thấp sẽ được giữ lại. Việc này không thể được hoàn tác - các tin nhắn đã được gửi và nhận sớm hơn so với thời gian được chọn sẽ bị xóa. Có thể mất vài phút để hoàn thành. Nhóm này không còn tồn tại. Nhóm này có trên %1$d thành viên, chỉ báo đã nhận không được gửi. @@ -1978,7 +1978,7 @@ Các cài đặt này là cho hồ sơ trò chuyện hiện tại của bạn Chức vụ sẽ được đổi thành %s. Tất cả mọi người trong nhóm sẽ được thông báo. Bản lưu trữ cơ sở dữ liệu đã được tải lên sẽ bị xóa vĩnh viễn khỏi các máy chủ. - Việc này không thể được hoàn tác - hồ sơ, các liên hệ, tin nhắn và tệp của bạn sẽ biến mất mà không thể không thể khôi phục. + Việc này không thể được hoàn tác - hồ sơ, các liên hệ, tin nhắn và tệp của bạn sẽ biến mất mà không thể khôi phục. Những máy chủ cho các kết nối mới của hồ sơ trò chuyện hiện tại của bạn Báo cáo sẽ được lưu trữ cho bạn. Tin nhắn này đã bị xóa hoặc vẫn chưa được nhận. @@ -2093,7 +2093,7 @@ Sử dụng hồ sơ ẩn danh mới thông qua %1$s Sử dụng proxy SOCKS - Sử dụng trò chuyện + Sử dụng SimpleX Chat Sử dụng cho các kết nối mới Sử dụng máy chủ Sử dụng proxy SOCKS? @@ -2185,7 +2185,7 @@ Không có Tor hoặc VPN, địa chỉ IP của bạn sẽ bị lộ ra cho các relay XFTP sau đây:\n%1$s. Các máy chủ XFTP Khi có nhiều hơn một bên vận hành được kích hoạt, không ai trong số họ có siêu dữ liệu để biết được ai trò chuyện với ai. - Với các tệp và nội dung đa phương tiện được mã hóa. + Với các tệp và đa phương tiện được mã hóa. Mức sử dụng pin đã được giảm xuống. Mức sử dụng pin đã được giảm xuống. Với lời chào tùy chọn. @@ -2224,4 +2224,89 @@ Bạn đã chấp nhận kết nối bạn bạn được mời vào nhóm + Các cuộc gọi của bạn + Bạn có thể bật Khóa SimpleX thông qua Cài đặt. + Bạn không có cuộc trò chuyện nào + Bạn vẫn có thể xem cuộc hội thoại với %1$s trong danh sách các cuộc trò chuyện. + Bạn đã tham gia nhóm này + Bạn đã tham gia nhóm này. Đang kết nối tới thành viên nhóm đi mời. + Bạn đã không thể được xác minh; xin vui lòng thử lại. + bạn đã thay đổi chức vụ của mình thành %s + Bạn có thể lưu bản lưu trữ đã được xuất. + Cơ sở dữ liệu trò chuyện của bạn không được mã hóa - đặt mật khẩu để bảo vệ nó. + Bạn phải nhập mật khẩu mỗi lần ứng dụng khởi chạy - nó không được lưu trên thiết bị của bạn. + bạn đã rời + Bạn cần cho phép liên hệ của mình thực hiện cuộc gọi để có thể gọi cho họ. + bạn đã thay đổi chức vụ của %s thành %s + bạn đã thay đổi địa chỉ + Bạn đã yêu cầu kết nối thông qua địa chỉ này rồi! + Bạn đã mời một liên hệ + Bạn có thể chia sẻ địa chỉ của mình dưới dạng một đường dẫn hoặc mã QR - bất kỳ ai cũng có thể kết nối với bạn. + Bạn có thể xem đường dẫn mời lần nữa trong chi tiết kết nối. + Bạn kiểm soát cuộc trò chuyện của mình! + Bạn không thể gửi tin nhắn! + Bạn có thể chia sẻ địa chỉ này với các liên hệ của mình để họ kết nối với %s. + Bạn cần cho phép liên hệ của mình gửi tin nhắn thoại để có thể gửi cho họ. + Bạn có thể di chuyển cơ sở dữ liệu đã được xuất. + Bạn CHỈ nên sử dụng phiên bản gần nhất của cơ sở dữ liệu trò chuyện của mình trên một thiết bị mà thôi, nếu không thì bạn có thể dừng nhận tin nhắn từ một vài liên hệ. + bạn đã thay đổi địa chỉ cho %s + Bạn có thể sử dụng markdown để định dạng tin nhắn: + Bạn có thể bắt đầu kết nối trò chuyện thông qua phần Cài đặt / Cơ sở dữ liệu ở trên ứng dụng hoặc bằng cách khởi động lại ứng dụng. + Bạn quyết định ai có thể kết nối tới. + Cơ sở dữ liệu trò chuyện của bạn + Sự riêng tư của bạn + Cơ sở dữ liệu trò chuyện hiện tại của bạn sẽ bị XÓA và THAY THẾ bằng cái được nhập vào.\nViệc này không thể được hoàn tác - hồ sơ, các liên hệ, tin nhắn và tệp của bạn sẽ biến mất mà không thể khôi phục. + bạn đã xóa %1$s + Các liên hệ của bạn vẫn sẽ được kết nối. + Hồ sơ, các liên hệ và những tin nhắn đã được gửi của bạn được lưu trữ trên thiết bị bạn dùng. + Các liên hệ của bạn có thể cho phép xóa tin nhắn hoàn toàn. + Thu phóng + Các máy chủ SMP của bạn + Bạn đã chia sẻ đường dẫn dùng một lần + Hồ sơ trò chuyện của bạn sẽ được gửi tới các thành viên nhóm + Hồ sơ hiện tại của bạn + Bạn đang dùng một hồ sơ ẩn danh cho nhóm này - để tránh khỏi chia sẻ hồ sơ chính của mình với các liên hệ đi mời mà không được cho phép + Các tùy chọn của bạn + Hồ sơ ngẫu nhiên của bạn + Bạn đã gửi lời mời nhóm + Bạn đã từ chối lời mời nhóm + bạn đã bỏ chặn %s + Hồ sơ trò chuyện của bạn sẽ được gửi\ntới liên hệ của bạn + bạn đã chia sẻ đường dẫn ẩn danh dùng một lần + Địa chỉ SimpleX của bạn + Liên hệ của bạn cần phải trực tuyến để cho kết nối hoàn thành.\nBạn có thể hủy kết nối này và xóa liên hệ (và thử lại sau với một đường dẫn mới). + Các máy chủ ICE của bạn + Bạn đang cố mời liên hệ mà bạn đã chia sẻ một hồ sơ ẩn danh với để tham gia nhóm mà bạn đang dùng hồ sơ chính của mình + Hồ sơ trò chuyện của bạn sẽ được gửi tới các thành viên có liên lạc + Bạn sẽ được kết nối khi yêu cầu kết nối của bạn được chấp nhận, xin vui lòng đợi hoặc kiểm tra sau! + Hồ sơ %1$s sẽ được chia sẻ. + Các máy chủ XFTP của bạn + Hồ sơ của bạn sẽ được gửi tới liên hệ mà bạn đã nhận từ người đó đường dẫn này. + Bạn sẽ kết nối với tất cả các thành viên nhóm. + Bạn đã chia sẻ một đường dẫn tệp không hợp lệ. Báo cáo vấn đề tới các nhà phát triển ứng dụng. + Các máy chủ của bạn + Bạn vẫn sẽ nhận các cuộc gọi và thông báo từ các hồ sơ đã bị tắt thông báo khi chúng hoạt động. + Yêu cầu kết nối sẽ được gửi tới thành viên nhóm này. + Bạn sẽ dừng nhận tin nhắn từ cuộc hội thoại này. Lịch sử trò chuyện sẽ được giữ lại. + Bạn sẽ dừng nhận tin nhắn từ nhóm này. Lịch sử trò chuyện sẽ được giữ lại. + Liên hệ của bạn đã gửi một tệp có kích thước lớn hơn so với kích thước tối đa hiện đang được hỗ trợ (%1$s). + Bạn sẽ không mất các liên hệ của mình nếu bạn sau đó xóa địa chỉ của mình đi. + Các liên hệ của bạn + Các hồ sơ trò chuyện của bạn + Cài đặt của bạn + Máy chủ của bạn + Địa chỉ máy chủ của bạn + Các máy chủ ICE của bạn + Thông tin định danh của bạn có thể bị gửi mà không được mã hóa. + Hồ sơ của bạn được lưu trên thiết bị bạn dùng và chỉ được chia sẻ với các liên hệ bạn có. Các máy chủ SimpleX không thể xem hồ sơ của bạn. + Kết nối của bạn đã bị chuyển tới %s nhưng một lỗi không mong muốn đã xảy ra trong khi chuyển hướng bạn đến hồ sơ. + Bạn sẽ được kết nối tới nhóm khi thiết bị của chủ nhóm trực tuyến, xin vui lòng đợi hoặc kiểm tra sau! + Bạn sẽ được kết nối khi thiết bị của liên hệ bạn trực tuyến, xin vui lòng đợi hoặc kiểm tra sau! + Bạn sẽ được yêu cầu xác thực khi bạn khởi động hoặc tiếp tục ứng dụng sau 30 giây trong nền. + Cổng TCP để nhắn tin + Sử dụng cổng TCP %1$s khi không có cổng nào được chỉ định. + Sử dụng cổng web + Bạn có thể nhắc đến tối đa là %1$s thành viên trong một tin nhắn! + Tắt thông báo tất cả + Những lời nhắc chưa đọc 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 a7938d97d4..8c9d0429d2 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 @@ -1917,7 +1917,7 @@ 重置 服务器地址不兼容网络设置:%1$s。 起始自 %s。 - 自 %s 起 \n所有数据均私密地保存在你的设备上.. + 自 %s 起 \n所有数据均私密地保存在你的设备上. 已订阅 已认可 服务器版本不兼容你的应用:%1$s. @@ -2316,4 +2316,10 @@ 此操作无法撤销 —— 比此聊天中所选消息更早发出并收到的消息将被删除。 此聊天中的消息永远不会被删除。 更改消息自动删除设置? + 用于消息收发的 TCP 端口 + 未指定端口时,使用 TCP 端口 %1$s。 + 使用 web 端口 + 全部静音 + 取消提及的已读状态 + 每条消息最多提及 %1$s 名成员! diff --git a/apps/multiplatform/gradle.properties b/apps/multiplatform/gradle.properties index 9fa745c88f..276bb8127f 100644 --- a/apps/multiplatform/gradle.properties +++ b/apps/multiplatform/gradle.properties @@ -24,12 +24,15 @@ android.nonTransitiveRClass=true kotlin.mpp.androidSourceSetLayoutVersion=2 kotlin.jvm.target=11 -android.version_name=6.3-beta.2 -android.version_code=271 +android.version_name=6.3-beta.3 +android.version_code=272 -desktop.version_name=6.3-beta.2 -desktop.version_code=89 +desktop.version_name=6.3-beta.3 +desktop.version_code=90 kotlin.version=1.9.23 gradle.plugin.version=8.2.0 compose.version=1.7.0 + +# Choose sqlite or postgres backend +database.backend=sqlite diff --git a/cabal.project b/cabal.project index 0c4923940d..dcd465c658 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: 45373e7f1f755ac3dfaa3f8efa03d8dc7b2d69ce + tag: bd97cb04495b90412c1300fd1a4862f488db85cb source-repository-package type: git diff --git a/scripts/db/README.md b/scripts/db/README.md index 067aa35400..68d4f74ac7 100644 --- a/scripts/db/README.md +++ b/scripts/db/README.md @@ -17,13 +17,21 @@ 2. Prepare Postgres database. - Build `simplex-chat` executable with `client_postgres` flag and run it to initialize new Postgres chat database. + - Create Postgres database. In shell: - This should create `simplex_v1` database with `simplex_v1_agent_schema` and `simplex_v1_chat_schema` schemas, and `migrations` tables populated. Some tables would have initialization data - it will be truncated via pgloader command in next step. + ```sh + createdb -O simplex simplex_v1 + ``` + + Or via query. + + - Build `simplex-chat` executable with `client_postgres` flag and run it to initialize new chat database. + + This should create `simplex_v1_agent_schema` and `simplex_v1_chat_schema` schemas in `simplex_v1` database, with `migrations` tables populated. Some tables would have initialization data - it will be truncated via pgloader command in next step. 3. Load data from decrypted SQLite databases to Postgres database via pgloader. - Install pgloader and add it to PATH. + Install pgloader and add it to PATH. Run in shell (substitute paths): ```sh SQLITE_DBPATH='simplex_v1_agent.db' POSTGRES_CONN='postgres://simplex@/simplex_v1' POSTGRES_SCHEMA='simplex_v1_agent_schema' pgloader --on-error-stop sqlite.load @@ -61,7 +69,7 @@ Repeat for `simplex_v1_chat_schema`. -5. Compare number of rows between Postgres and SQLite tables. +5. \* Compare number of rows between Postgres and SQLite tables. To check number of rows for all tables in Postgres database schema run: @@ -83,3 +91,15 @@ ``` Repeat for `simplex_v1_chat_schema`. + +6. Build and run desktop app with Postgres backend. + + Run in shell (paths are from project root): + + ```sh + ./scripts/desktop/build-lib-mac.sh arm64 postgres + + ./gradlew runDistributable -Pdatabase.backend=postgres + # or + ./gradlew packageDmg -Pdatabase.backend=postgres + ``` diff --git a/scripts/desktop/build-lib-mac.sh b/scripts/desktop/build-lib-mac.sh index 412fc4efbe..06fad69613 100755 --- a/scripts/desktop/build-lib-mac.sh +++ b/scripts/desktop/build-lib-mac.sh @@ -6,6 +6,7 @@ OS=mac ARCH="${1:-`uname -a | rev | cut -d' ' -f1 | rev`}" COMPOSE_ARCH=$ARCH GHC_VERSION=8.10.7 +DATABASE_BACKEND="${2:-sqlite}" if [ "$ARCH" == "arm64" ]; then ARCH=aarch64 @@ -23,7 +24,14 @@ for elem in "${exports[@]}"; do count=$(grep -R "$elem$" libsimplex.dll.def | wc for elem in "${exports[@]}"; do count=$(grep -R "\"$elem\"" flake.nix | wc -l); if [ $count -ne 2 ]; then echo Wrong exports in flake.nix. Add \"$elem\" in two places of the file; exit 1; fi ; done rm -rf $BUILD_DIR -cabal build lib:simplex-chat lib:simplex-chat --ghc-options="-optl-Wl,-rpath,@loader_path -optl-Wl,-L$GHC_LIBS_DIR/rts -optl-lHSrts_thr-ghc8.10.7 -optl-lffi" --constraint 'simplexmq +client_library' + +if [[ "$DATABASE_BACKEND" == "postgres" ]]; then + echo "Building with postgres backend..." + cabal build -f client_postgres lib:simplex-chat lib:simplex-chat --ghc-options="-optl-Wl,-rpath,@loader_path -optl-Wl,-L$GHC_LIBS_DIR/rts -optl-lHSrts_thr-ghc8.10.7 -optl-lffi" --constraint 'simplexmq +client_library' +else + echo "Building with sqlite backend..." + cabal build lib:simplex-chat lib:simplex-chat --ghc-options="-optl-Wl,-rpath,@loader_path -optl-Wl,-L$GHC_LIBS_DIR/rts -optl-lHSrts_thr-ghc8.10.7 -optl-lffi" --constraint 'simplexmq +client_library' +fi cd $BUILD_DIR/build mkdir deps 2> /dev/null || true @@ -83,8 +91,8 @@ cp $BUILD_DIR/build/libHSsimplex-chat-*-inplace-ghc*.$LIB_EXT apps/multiplatform cd apps/multiplatform/common/src/commonMain/cpp/desktop/libs/$OS-$ARCH/ -LIBCRYPTO_PATH=$(otool -l libHSdrct-*.$LIB_EXT | grep libcrypto | cut -d' ' -f11) -install_name_tool -change $LIBCRYPTO_PATH @rpath/libcrypto.3.0.$LIB_EXT libHSdrct-*.$LIB_EXT +LIBCRYPTO_PATH=$(otool -l libHSsmplxmq-*.$LIB_EXT | grep libcrypto | cut -d' ' -f11) +install_name_tool -change $LIBCRYPTO_PATH @rpath/libcrypto.3.0.$LIB_EXT libHSsmplxmq-*.$LIB_EXT cp $LIBCRYPTO_PATH libcrypto.3.0.$LIB_EXT chmod 755 libcrypto.3.0.$LIB_EXT install_name_tool -id "libcrypto.3.0.$LIB_EXT" libcrypto.3.0.$LIB_EXT @@ -95,14 +103,18 @@ if [ -n "$LIBCRYPTO_PATH" ]; then install_name_tool -change $LIBCRYPTO_PATH @rpath/libcrypto.3.0.$LIB_EXT $LIB fi -LIBCRYPTO_PATH=$(otool -l libHSsmplxmq*.$LIB_EXT | grep libcrypto | cut -d' ' -f11) -if [ -n "$LIBCRYPTO_PATH" ]; then - install_name_tool -change $LIBCRYPTO_PATH @rpath/libcrypto.3.0.$LIB_EXT libHSsmplxmq*.$LIB_EXT -fi +# We could change libpq and libHSpstgrsql for postgres (?), remove sqlite condition for exit below. +# Unnecessary for now as app with postgres backend is not for distribution. +if [[ "$DATABASE_BACKEND" == "sqlite" ]]; then + LIBCRYPTO_PATH=$(otool -l libHSdrct-*.$LIB_EXT | grep libcrypto | cut -d' ' -f11) + if [ -n "$LIBCRYPTO_PATH" ]; then + install_name_tool -change $LIBCRYPTO_PATH @rpath/libcrypto.3.0.$LIB_EXT libHSdrct-*.$LIB_EXT + fi -LIBCRYPTO_PATH=$(otool -l libHSsqlcphr-*.$LIB_EXT | grep libcrypto | cut -d' ' -f11) -if [ -n "$LIBCRYPTO_PATH" ]; then - install_name_tool -change $LIBCRYPTO_PATH @rpath/libcrypto.3.0.$LIB_EXT libHSsqlcphr-*.$LIB_EXT + LIBCRYPTO_PATH=$(otool -l libHSsqlcphr-*.$LIB_EXT | grep libcrypto | cut -d' ' -f11) + if [ -n "$LIBCRYPTO_PATH" ]; then + install_name_tool -change $LIBCRYPTO_PATH @rpath/libcrypto.3.0.$LIB_EXT libHSsqlcphr-*.$LIB_EXT + fi fi for lib in $(find . -type f -name "*.$LIB_EXT"); do @@ -116,7 +128,9 @@ LOCAL_DIRS=`for lib in $(find . -type f -name "*.$LIB_EXT"); do otool -l $lib | if [ -n "$LOCAL_DIRS" ]; then echo These libs still point to local directories: echo $LOCAL_DIRS - exit 1 + if [[ "$DATABASE_BACKEND" == "sqlite" ]]; then + exit 1 + fi fi cd - diff --git a/scripts/nix/sha256map.nix b/scripts/nix/sha256map.nix index d064aa098b..d440afb61f 100644 --- a/scripts/nix/sha256map.nix +++ b/scripts/nix/sha256map.nix @@ -1,5 +1,5 @@ { - "https://github.com/simplex-chat/simplexmq.git"."45373e7f1f755ac3dfaa3f8efa03d8dc7b2d69ce" = "0rz1n3hl59b6khnhrvwhlwdrmrb9fm291i3h03ddlqkrpg1x36m6"; + "https://github.com/simplex-chat/simplexmq.git"."bd97cb04495b90412c1300fd1a4862f488db85cb" = "19i0r2b4kfkq2zlbmq134a0hk0vszhm6wdlfyp58d35zqrc0xadf"; "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 55b3f11e96..7fbe800025 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: 6.3.0.3 +version: 6.3.0.4 category: Web, System, Services, Cryptography homepage: https://github.com/simplex-chat/simplex-chat#readme author: simplex.chat diff --git a/src/Simplex/Chat/Controller.hs b/src/Simplex/Chat/Controller.hs index a7a73eea0a..31f158e780 100644 --- a/src/Simplex/Chat/Controller.hs +++ b/src/Simplex/Chat/Controller.hs @@ -317,6 +317,8 @@ data ChatCommand | APIUpdateChatItem {chatRef :: ChatRef, chatItemId :: ChatItemId, liveMessage :: Bool, updatedMessage :: UpdatedMessage} | APIDeleteChatItem ChatRef (NonEmpty ChatItemId) CIDeleteMode | APIDeleteMemberChatItem GroupId (NonEmpty ChatItemId) + | APIArchiveReceivedReports GroupId + | APIDeleteReceivedReports GroupId (NonEmpty ChatItemId) CIDeleteMode | APIChatItemReaction {chatRef :: ChatRef, chatItemId :: ChatItemId, add :: Bool, reaction :: MsgReaction} | APIGetReactionMembers UserId GroupId ChatItemId MsgReaction | APIPlanForwardChatItems {fromChatRef :: ChatRef, chatItemIds :: NonEmpty ChatItemId} @@ -350,6 +352,7 @@ data ChatCommand | APIGetNtfToken | APIRegisterToken DeviceToken NotificationsMode | APIVerifyToken DeviceToken C.CbNonce ByteString + | APICheckToken DeviceToken | APIDeleteToken DeviceToken | APIGetNtfConns {nonce :: C.CbNonce, encNtfInfo :: ByteString} | ApiGetConnNtfMessages {connIds :: NonEmpty AgentConnId} diff --git a/src/Simplex/Chat/Library/Commands.hs b/src/Simplex/Chat/Library/Commands.hs index 22cf9ac68c..4c5beb9cee 100644 --- a/src/Simplex/Chat/Library/Commands.hs +++ b/src/Simplex/Chat/Library/Commands.hs @@ -89,7 +89,7 @@ import Simplex.Messaging.Agent.Protocol import Simplex.Messaging.Agent.Store.Interface (execSQL) import Simplex.Messaging.Agent.Store.Shared (upMigration) import qualified Simplex.Messaging.Agent.Store.DB as DB -import qualified Simplex.Messaging.Agent.Store.Migrations as Migrations +import Simplex.Messaging.Agent.Store.Interface (getCurrentMigrations) import Simplex.Messaging.Client (NetworkConfig (..), SocksMode (SMAlways), textToHostMode) import qualified Simplex.Messaging.Crypto as C import Simplex.Messaging.Crypto.File (CryptoFile (..), CryptoFileArgs (..)) @@ -678,11 +678,11 @@ processChatCommand' vr = \case else markDirectCIsDeleted user ct items True =<< liftIO getCurrentTime CTGroup -> withGroupLock "deleteChatItem" chatId $ do (gInfo, items) <- getCommandGroupChatItems user chatId itemIds - ms <- withFastStore' $ \db -> getGroupMembers db vr user gInfo case mode of CIDMInternal -> deleteGroupCIs user gInfo items True False Nothing =<< liftIO getCurrentTime CIDMInternalMark -> markGroupCIsDeleted user gInfo items True Nothing =<< liftIO getCurrentTime CIDMBroadcast -> do + ms <- withFastStore' $ \db -> getGroupMembers db vr user gInfo assertDeletable items assertUserGroupRole gInfo GRObserver -- can still delete messages sent earlier let msgIds = itemsMsgIds items @@ -711,30 +711,25 @@ processChatCommand' vr = \case APIDeleteMemberChatItem gId itemIds -> withUser $ \user -> withGroupLock "deleteChatItem" gId $ do (gInfo, items) <- getCommandGroupChatItems user gId itemIds ms <- withFastStore' $ \db -> getGroupMembers db vr user gInfo - assertDeletable gInfo items - assertUserGroupRole gInfo GRAdmin -- TODO GRModerator when most users migrate - let msgMemIds = itemsMsgMemIds gInfo items - events = L.nonEmpty $ map (\(msgId, memId) -> XMsgDel msgId (Just memId)) msgMemIds - mapM_ (sendGroupMessages user gInfo ms) events - delGroupChatItems user gInfo items True + delGroupChatItemsForMembers user gInfo ms items + APIArchiveReceivedReports gId -> withUser $ \user -> withFastStore $ \db -> do + g <- getGroupInfo db vr user gId + deleteTs <- liftIO getCurrentTime + ciIds <- liftIO $ markReceivedGroupReportsDeleted db user g deleteTs + pure $ CRGroupChatItemsDeleted user g ciIds True (Just $ membership g) + APIDeleteReceivedReports gId itemIds mode -> withUser $ \user -> withGroupLock "deleteReports" gId $ do + (gInfo, items) <- getCommandGroupChatItems user gId itemIds + unless (all isRcvReport items) $ throwChatError $ CECommandError "some items are not received reports" + case mode of + CIDMInternal -> deleteGroupCIs user gInfo items True False Nothing =<< liftIO getCurrentTime + CIDMInternalMark -> markGroupCIsDeleted user gInfo items True Nothing =<< liftIO getCurrentTime + CIDMBroadcast -> do + ms <- withFastStore' $ \db -> getGroupModerators db vr user gInfo + delGroupChatItemsForMembers user gInfo ms items where - assertDeletable :: GroupInfo -> [CChatItem 'CTGroup] -> CM () - assertDeletable GroupInfo {membership = GroupMember {memberRole = membershipMemRole}} items = - unless (all itemDeletable items) $ throwChatError CEInvalidChatItemDelete - where - itemDeletable :: CChatItem 'CTGroup -> Bool - itemDeletable (CChatItem _ ChatItem {chatDir, meta = CIMeta {itemSharedMsgId}}) = - case chatDir of - CIGroupRcv GroupMember {memberRole} -> membershipMemRole >= memberRole && isJust itemSharedMsgId - CIGroupSnd -> isJust itemSharedMsgId - itemsMsgMemIds :: GroupInfo -> [CChatItem 'CTGroup] -> [(SharedMsgId, MemberId)] - itemsMsgMemIds GroupInfo {membership = GroupMember {memberId = membershipMemId}} = mapMaybe itemMsgMemIds - where - itemMsgMemIds :: CChatItem 'CTGroup -> Maybe (SharedMsgId, MemberId) - itemMsgMemIds (CChatItem _ ChatItem {chatDir, meta = CIMeta {itemSharedMsgId}}) = - join <$> forM itemSharedMsgId $ \msgId -> Just $ case chatDir of - CIGroupRcv GroupMember {memberId} -> (msgId, memberId) - CIGroupSnd -> (msgId, membershipMemId) + isRcvReport = \case + CChatItem _ ChatItem {content = CIRcvMsgContent (MCReport {})} -> True + _ -> False APIChatItemReaction (ChatRef cType chatId) itemId add reaction -> withUser $ \user -> case cType of CTDirect -> withContactLock "chatItemReaction" chatId $ @@ -756,9 +751,12 @@ processChatCommand' vr = \case pure $ CRChatItemReaction user add r _ -> throwChatError $ CECommandError "reaction not possible - no shared item ID" CTGroup -> - withGroupLock "chatItemReaction" chatId $ - withFastStore (\db -> (,) <$> getGroup db vr user chatId <*> getGroupChatItem db user chatId itemId) >>= \case - (Group g@GroupInfo {membership} ms, CChatItem md ci@ChatItem {meta = CIMeta {itemSharedMsgId = Just itemSharedMId}}) -> do + withGroupLock "chatItemReaction" chatId $ do + (Group g@GroupInfo {membership} ms, CChatItem md ci) <- withFastStore $ \db -> do + gr@(Group g _) <- getGroup db vr user chatId + (gr,) <$> getGroupCIWithReactions db user g itemId + case ci of + ChatItem {meta = CIMeta {itemSharedMsgId = Just itemSharedMId}} -> do unless (groupFeatureAllowed SGFReactions g) $ throwChatError (CECommandError $ "feature not allowed " <> T.unpack (chatFeatureNameText CFReactions)) unless (ciReactionAllowed ci) $ @@ -1288,6 +1286,8 @@ processChatCommand' vr = \case APIRegisterToken token mode -> withUser $ \_ -> CRNtfTokenStatus <$> withAgent (\a -> registerNtfToken a token mode) APIVerifyToken token nonce code -> withUser $ \_ -> withAgent (\a -> verifyNtfToken a token nonce code) >> ok_ + APICheckToken token -> withUser $ \_ -> + CRNtfTokenStatus <$> withAgent (`checkNtfToken` token) APIDeleteToken token -> withUser $ \_ -> withAgent (`deleteNtfToken` token) >> ok_ APIGetNtfConns nonce encNtfInfo -> withUser $ \user -> do ntfInfos <- withAgent $ \a -> getNotificationConns a nonce encNtfInfo @@ -2406,7 +2406,7 @@ processChatCommand' vr = \case ShowVersion -> do -- simplexmqCommitQ makes iOS builds crash m( let versionInfo = coreVersionInfo "" - chatMigrations <- map upMigration <$> withFastStore' Migrations.getCurrent + chatMigrations <- map upMigration <$> withFastStore' getCurrentMigrations agentMigrations <- withAgent getAgentMigrations pure $ CRVersionInfo {versionInfo, chatMigrations, agentMigrations} DebugLocks -> lift $ do @@ -2713,12 +2713,39 @@ processChatCommand' vr = \case when (memberStatus membership == GSMemInvited) $ throwChatError (CEGroupNotJoined g) when (memberRemoved membership) $ throwChatError CEGroupMemberUserRemoved unless (memberActive membership) $ throwChatError CEGroupMemberNotActive + delGroupChatItemsForMembers :: User -> GroupInfo -> [GroupMember] -> [CChatItem CTGroup] -> CM ChatResponse + delGroupChatItemsForMembers user gInfo ms items = do + assertDeletable gInfo items + assertUserGroupRole gInfo GRAdmin -- TODO GRModerator when most users migrate + let msgMemIds = itemsMsgMemIds gInfo items + events = L.nonEmpty $ map (\(msgId, memId) -> XMsgDel msgId (Just memId)) msgMemIds + mapM_ (sendGroupMessages user gInfo ms) events + delGroupChatItems user gInfo items True + where + assertDeletable :: GroupInfo -> [CChatItem 'CTGroup] -> CM () + assertDeletable GroupInfo {membership = GroupMember {memberRole = membershipMemRole}} items = + unless (all itemDeletable items) $ throwChatError CEInvalidChatItemDelete + where + itemDeletable :: CChatItem 'CTGroup -> Bool + itemDeletable (CChatItem _ ChatItem {chatDir, meta = CIMeta {itemSharedMsgId}}) = + case chatDir of + CIGroupRcv GroupMember {memberRole} -> membershipMemRole >= memberRole && isJust itemSharedMsgId + CIGroupSnd -> isJust itemSharedMsgId + itemsMsgMemIds :: GroupInfo -> [CChatItem 'CTGroup] -> [(SharedMsgId, MemberId)] + itemsMsgMemIds GroupInfo {membership = GroupMember {memberId = membershipMemId}} = mapMaybe itemMsgMemIds + where + itemMsgMemIds :: CChatItem 'CTGroup -> Maybe (SharedMsgId, MemberId) + itemMsgMemIds (CChatItem _ ChatItem {chatDir, meta = CIMeta {itemSharedMsgId}}) = + join <$> forM itemSharedMsgId $ \msgId -> Just $ case chatDir of + CIGroupRcv GroupMember {memberId} -> (msgId, memberId) + CIGroupSnd -> (msgId, membershipMemId) + delGroupChatItems :: User -> GroupInfo -> [CChatItem 'CTGroup] -> Bool -> CM ChatResponse delGroupChatItems user gInfo@GroupInfo {membership} items moderation = do deletedTs <- liftIO getCurrentTime when moderation $ do ciIds <- concat <$> withStore' (\db -> forM items $ \(CChatItem _ ci) -> markMessageReportsDeleted db user gInfo ci membership deletedTs) - unless (null ciIds) $ toView $ CRGroupChatItemsDeleted user gInfo ciIds False (Just membership) + unless (null ciIds) $ toView $ CRGroupChatItemsDeleted user gInfo ciIds True (Just membership) let m = if moderation then Just membership else Nothing if groupFeatureMemberAllowed SGFFullDelete membership gInfo then deleteGroupCIs user gInfo items True False m deletedTs @@ -3039,7 +3066,7 @@ processChatCommand' vr = \case findProhibited :: [ComposedMessageReq] -> Maybe GroupFeature findProhibited = foldr' - (\(ComposedMessage {fileSource, msgContent = mc}, _, (_, ft), _) acc -> prohibitedGroupContent gInfo membership mc ft fileSource <|> acc) + (\(ComposedMessage {fileSource, msgContent = mc}, _, (_, ft), _) acc -> prohibitedGroupContent gInfo membership mc ft fileSource True <|> acc) Nothing processComposedMessages :: CM ChatResponse processComposedMessages = do @@ -3713,6 +3740,8 @@ chatCommandP = "/_update item " *> (APIUpdateChatItem <$> chatRefP <* A.space <*> A.decimal <*> liveMessageP <*> (" json" *> jsonP <|> " text " *> updatedMessagesTextP)), "/_delete item " *> (APIDeleteChatItem <$> chatRefP <*> _strP <*> _strP), "/_delete member item #" *> (APIDeleteMemberChatItem <$> A.decimal <*> _strP), + "/_archive reports #" *> (APIArchiveReceivedReports <$> A.decimal), + "/_delete reports #" *> (APIDeleteReceivedReports <$> A.decimal <*> _strP <*> _strP), "/_reaction " *> (APIChatItemReaction <$> chatRefP <* A.space <*> A.decimal <* A.space <*> onOffP <* A.space <*> jsonP), "/_reaction members " *> (APIGetReactionMembers <$> A.decimal <* " #" <*> A.decimal <* A.space <*> A.decimal <* A.space <*> jsonP), "/_forward plan " *> (APIPlanForwardChatItems <$> chatRefP <*> _strP), @@ -3746,6 +3775,7 @@ chatCommandP = "/_ntf get" $> APIGetNtfToken, "/_ntf register " *> (APIRegisterToken <$> strP_ <*> strP), "/_ntf verify " *> (APIVerifyToken <$> strP <* A.space <*> strP <* A.space <*> strP), + "/_ntf check " *> (APICheckToken <$> strP), "/_ntf delete " *> (APIDeleteToken <$> strP), "/_ntf conns " *> (APIGetNtfConns <$> strP <* A.space <*> strP), "/_ntf conn messages " *> (ApiGetConnNtfMessages <$> strP), @@ -3944,6 +3974,7 @@ chatCommandP = "/set disappear #" *> (SetGroupTimedMessages <$> displayNameP <*> (A.space *> timedTTLOnOffP)), "/set disappear @" *> (SetContactTimedMessages <$> displayNameP <*> optional (A.space *> timedMessagesEnabledP)), "/set disappear " *> (SetUserTimedMessages <$> (("yes" $> True) <|> ("no" $> False))), + "/set reports #" *> (SetGroupFeature (AGFNR SGFReports) <$> displayNameP <*> _strP), "/set links #" *> (SetGroupFeatureRole (AGFR SGFSimplexLinks) <$> displayNameP <*> _strP <*> optional memberRole), ("/incognito" <* optional (A.space *> onOffP)) $> ChatHelp HSIncognito, "/set device name " *> (SetLocalDeviceName <$> textP), diff --git a/src/Simplex/Chat/Library/Internal.hs b/src/Simplex/Chat/Library/Internal.hs index faf503eb83..ea838206fe 100644 --- a/src/Simplex/Chat/Library/Internal.hs +++ b/src/Simplex/Chat/Library/Internal.hs @@ -320,12 +320,18 @@ quoteContent mc qmc ciFile_ qFileName = maybe qText (T.pack . getFileName) ciFile_ qTextOrFile = if T.null qText then qFileName else qText -prohibitedGroupContent :: GroupInfo -> GroupMember -> MsgContent -> Maybe MarkdownList -> Maybe f -> Maybe GroupFeature -prohibitedGroupContent gInfo m mc ft file_ +prohibitedGroupContent :: GroupInfo -> GroupMember -> MsgContent -> Maybe MarkdownList -> Maybe f -> Bool -> Maybe GroupFeature +prohibitedGroupContent gInfo@GroupInfo {membership = GroupMember {memberRole = userRole}} m mc ft file_ sent | isVoice mc && not (groupFeatureMemberAllowed SGFVoice m gInfo) = Just GFVoice | not (isVoice mc) && isJust file_ && not (groupFeatureMemberAllowed SGFFiles m gInfo) = Just GFFiles + | isReport mc && (badReportUser || not (groupFeatureAllowed SGFReports gInfo)) = Just GFReports | prohibitedSimplexLinks gInfo m ft = Just GFSimplexLinks | otherwise = Nothing + where + -- admins cannot send reports, non-admins cannot receive reports + badReportUser + | sent = userRole >= GRModerator + | otherwise = userRole < GRModerator prohibitedSimplexLinks :: GroupInfo -> GroupMember -> Maybe MarkdownList -> Bool prohibitedSimplexLinks gInfo m ft = diff --git a/src/Simplex/Chat/Library/Subscriber.hs b/src/Simplex/Chat/Library/Subscriber.hs index e929c4f325..902c19ed63 100644 --- a/src/Simplex/Chat/Library/Subscriber.hs +++ b/src/Simplex/Chat/Library/Subscriber.hs @@ -1688,7 +1688,7 @@ processAgentMessageConn vr user@User {userId} corrId agentConnId agentMessage = mapM_ toView cr_ groupMsgReaction :: GroupInfo -> GroupMember -> SharedMsgId -> MemberId -> MsgReaction -> Bool -> RcvMessage -> UTCTime -> CM () - groupMsgReaction g@GroupInfo {groupId} m sharedMsgId itemMemberId reaction add RcvMessage {msgId} brokerTs = do + groupMsgReaction g m sharedMsgId itemMemberId reaction add RcvMessage {msgId} brokerTs = do when (groupFeatureAllowed SGFReactions g) $ do rs <- withStore' $ \db -> getGroupReactions db g m itemMemberId sharedMsgId False when (reactionAllowed add reaction rs) $ do @@ -1697,7 +1697,7 @@ processAgentMessageConn vr user@User {userId} corrId agentConnId agentMessage = where updateChatItemReaction = do cr_ <- withStore $ \db -> do - CChatItem md ci <- getGroupMemberCIBySharedMsgId db user groupId itemMemberId sharedMsgId + CChatItem md ci <- getGroupMemberCIBySharedMsgId db user g itemMemberId sharedMsgId if ciReactionAllowed ci then liftIO $ do setGroupReaction db g m itemMemberId sharedMsgId False reaction add msgId brokerTs @@ -1720,7 +1720,7 @@ processAgentMessageConn vr user@User {userId} corrId agentConnId agentMessage = newGroupContentMessage :: GroupInfo -> GroupMember -> MsgContainer -> RcvMessage -> UTCTime -> Bool -> CM () newGroupContentMessage gInfo m@GroupMember {memberId, memberRole} mc msg@RcvMessage {sharedMsgId_} brokerTs forwarded | blockedByAdmin m = createBlockedByAdmin - | otherwise = case prohibitedGroupContent gInfo m content ft_ fInv_ of + | otherwise = case prohibitedGroupContent gInfo m content ft_ fInv_ False of Just f -> rejected f Nothing -> withStore' (\db -> getCIModeration db vr user gInfo memberId sharedMsgId_) >>= \case @@ -1729,7 +1729,7 @@ processAgentMessageConn vr user@User {userId} corrId agentConnId agentMessage = withStore' $ \db -> deleteCIModeration db gInfo memberId sharedMsgId_ Nothing -> createContentItem where - rejected f = void $ newChatItem (ciContentNoParse $ CIRcvGroupFeatureRejected f) Nothing Nothing False + rejected f = newChatItem (ciContentNoParse $ CIRcvGroupFeatureRejected f) Nothing Nothing False timed' = if forwarded then rcvCITimed_ (Just Nothing) itemTTL else rcvGroupCITimed gInfo itemTTL live' = fromMaybe False live_ ExtMsgContent content mentions fInv_ itemTTL live_ = mcExtMsgContent mc @@ -1816,9 +1816,9 @@ processAgentMessageConn vr user@User {userId} corrId agentConnId agentMessage = _ -> messageError "x.msg.update: group member attempted invalid message update" groupMessageDelete :: GroupInfo -> GroupMember -> SharedMsgId -> Maybe MemberId -> RcvMessage -> UTCTime -> CM () - groupMessageDelete gInfo@GroupInfo {groupId, membership} m@GroupMember {memberId, memberRole = senderRole} sharedMsgId sndMemberId_ RcvMessage {msgId} brokerTs = do + groupMessageDelete gInfo@GroupInfo {membership} m@GroupMember {memberId, memberRole = senderRole} sharedMsgId sndMemberId_ RcvMessage {msgId} brokerTs = do let msgMemberId = fromMaybe memberId sndMemberId_ - withStore' (\db -> runExceptT $ getGroupMemberCIBySharedMsgId db user groupId msgMemberId sharedMsgId) >>= \case + withStore' (\db -> runExceptT $ getGroupMemberCIBySharedMsgId db user gInfo msgMemberId sharedMsgId) >>= \case Right cci@(CChatItem _ ci@ChatItem {chatDir}) -> case chatDir of CIGroupRcv mem -> case sndMemberId_ of -- regular deletion diff --git a/src/Simplex/Chat/Protocol.hs b/src/Simplex/Chat/Protocol.hs index b366cc3979..1e5815bab3 100644 --- a/src/Simplex/Chat/Protocol.hs +++ b/src/Simplex/Chat/Protocol.hs @@ -410,8 +410,8 @@ forwardedToGroupMembers ms forwardedMsgs = XGrpMemRestrict mId _ -> Just mId _ -> Nothing _ -> Nothing - hasReport = any isReport forwardedMsgs - isReport ChatMessage {chatMsgEvent} = case encoding @e of + hasReport = any isReportEvent forwardedMsgs + isReportEvent ChatMessage {chatMsgEvent} = case encoding @e of SJson -> case chatMsgEvent of XMsgNew mc -> case mcExtMsgContent mc of ExtMsgContent {content = MCReport {}} -> True @@ -600,6 +600,11 @@ isVoice = \case MCVoice {} -> True _ -> False +isReport :: MsgContent -> Bool +isReport = \case + MCReport {} -> True + _ -> False + msgContentTag :: MsgContent -> MsgContentTag msgContentTag = \case MCText _ -> MCText_ diff --git a/src/Simplex/Chat/Remote.hs b/src/Simplex/Chat/Remote.hs index 2402795aad..5a6ef3b847 100644 --- a/src/Simplex/Chat/Remote.hs +++ b/src/Simplex/Chat/Remote.hs @@ -75,11 +75,11 @@ remoteFilesFolder = "simplex_v1_files" -- when acting as host minRemoteCtrlVersion :: AppVersion -minRemoteCtrlVersion = AppVersion [6, 3, 0, 2] +minRemoteCtrlVersion = AppVersion [6, 3, 0, 4] -- when acting as controller minRemoteHostVersion :: AppVersion -minRemoteHostVersion = AppVersion [6, 3, 0, 2] +minRemoteHostVersion = AppVersion [6, 3, 0, 4] currentAppVersion :: AppVersion currentAppVersion = AppVersion SC.version diff --git a/src/Simplex/Chat/Store/Messages.hs b/src/Simplex/Chat/Store/Messages.hs index 038186652e..f37201c487 100644 --- a/src/Simplex/Chat/Store/Messages.hs +++ b/src/Simplex/Chat/Store/Messages.hs @@ -62,6 +62,7 @@ module Simplex.Chat.Store.Messages markGroupChatItemBlocked, markGroupCIBlockedByAdmin, markMessageReportsDeleted, + markReceivedGroupReportsDeleted, deleteLocalChatItem, updateDirectChatItemsRead, getDirectUnreadTimedItems, @@ -2438,10 +2439,24 @@ markMessageReportsDeleted db User {userId} GroupInfo {groupId} ChatItem {meta = [sql| UPDATE chat_items SET item_deleted = ?, item_deleted_ts = ?, item_deleted_by_group_member_id = ?, updated_at = ? - WHERE user_id = ? AND group_id = ? AND msg_content_tag = ? AND quoted_shared_msg_id = ? + WHERE user_id = ? AND group_id = ? AND msg_content_tag = ? AND quoted_shared_msg_id = ? AND item_deleted = ? RETURNING chat_item_id; |] - (DBCIDeleted, deletedTs, groupMemberId, currentTs, userId, groupId, MCReport_, itemSharedMsgId) + (DBCIDeleted, deletedTs, groupMemberId, currentTs, userId, groupId, MCReport_, itemSharedMsgId, DBCINotDeleted) + +markReceivedGroupReportsDeleted :: DB.Connection -> User -> GroupInfo -> UTCTime -> IO [ChatItemId] +markReceivedGroupReportsDeleted db User {userId} GroupInfo {groupId, membership} deletedTs = do + currentTs <- liftIO getCurrentTime + map fromOnly + <$> DB.query + db + [sql| + UPDATE chat_items + SET item_deleted = ?, item_deleted_ts = ?, item_deleted_by_group_member_id = ?, updated_at = ? + WHERE user_id = ? AND group_id = ? AND msg_content_tag = ? AND item_deleted = ? AND item_sent = 0 + RETURNING chat_item_id + |] + (DBCIDeleted, deletedTs, groupMemberId' membership, currentTs, userId, groupId, MCReport_, DBCINotDeleted) getGroupChatItemBySharedMsgId :: DB.Connection -> User -> GroupInfo -> GroupMemberId -> SharedMsgId -> ExceptT StoreError IO (CChatItem 'CTGroup) getGroupChatItemBySharedMsgId db user@User {userId} g@GroupInfo {groupId} groupMemberId sharedMsgId = do @@ -2459,8 +2474,8 @@ getGroupChatItemBySharedMsgId db user@User {userId} g@GroupInfo {groupId} groupM (userId, groupId, groupMemberId, sharedMsgId) getGroupCIWithReactions db user g itemId -getGroupMemberCIBySharedMsgId :: DB.Connection -> User -> GroupId -> MemberId -> SharedMsgId -> ExceptT StoreError IO (CChatItem 'CTGroup) -getGroupMemberCIBySharedMsgId db user@User {userId} groupId memberId sharedMsgId = do +getGroupMemberCIBySharedMsgId :: DB.Connection -> User -> GroupInfo -> MemberId -> SharedMsgId -> ExceptT StoreError IO (CChatItem 'CTGroup) +getGroupMemberCIBySharedMsgId db user@User {userId} g@GroupInfo {groupId} memberId sharedMsgId = do itemId <- ExceptT . firstRow fromOnly (SEChatItemSharedMsgIdNotFound sharedMsgId) $ DB.query @@ -2476,7 +2491,7 @@ getGroupMemberCIBySharedMsgId db user@User {userId} groupId memberId sharedMsgId LIMIT 1 |] (GCUserMember, userId, groupId, memberId, sharedMsgId) - getGroupChatItem db user groupId itemId + getGroupCIWithReactions db user g itemId getGroupChatItemsByAgentMsgId :: DB.Connection -> User -> GroupId -> Int64 -> AgentMsgId -> IO [CChatItem 'CTGroup] getGroupChatItemsByAgentMsgId db user groupId connId msgId = do diff --git a/src/Simplex/Chat/Store/SQLite/Migrations/chat_query_plans.txt b/src/Simplex/Chat/Store/SQLite/Migrations/chat_query_plans.txt index a94da2dbe6..041adbec1d 100644 --- a/src/Simplex/Chat/Store/SQLite/Migrations/chat_query_plans.txt +++ b/src/Simplex/Chat/Store/SQLite/Migrations/chat_query_plans.txt @@ -3325,11 +3325,20 @@ SEARCH chat_items USING INTEGER PRIMARY KEY (rowid=?) Query: UPDATE chat_items SET item_deleted = ?, item_deleted_ts = ?, item_deleted_by_group_member_id = ?, updated_at = ? - WHERE user_id = ? AND group_id = ? AND msg_content_tag = ? AND quoted_shared_msg_id = ? + WHERE user_id = ? AND group_id = ? AND msg_content_tag = ? AND item_deleted = ? AND item_sent = 0 + RETURNING chat_item_id + +Plan: +SEARCH chat_items USING COVERING INDEX idx_chat_items_groups_msg_content_tag_deleted (user_id=? AND group_id=? AND msg_content_tag=? AND item_deleted=? AND item_sent=?) + +Query: + UPDATE chat_items + SET item_deleted = ?, item_deleted_ts = ?, item_deleted_by_group_member_id = ?, updated_at = ? + WHERE user_id = ? AND group_id = ? AND msg_content_tag = ? AND quoted_shared_msg_id = ? AND item_deleted = ? RETURNING chat_item_id; Plan: -SEARCH chat_items USING INDEX idx_chat_items_groups_msg_content_tag_deleted (user_id=? AND group_id=? AND msg_content_tag=?) +SEARCH chat_items USING INDEX idx_chat_items_groups_msg_content_tag_deleted (user_id=? AND group_id=? AND msg_content_tag=? AND item_deleted=?) Query: UPDATE chat_items diff --git a/src/Simplex/Chat/Types/Preferences.hs b/src/Simplex/Chat/Types/Preferences.hs index 001dd27172..2e704c5cf5 100644 --- a/src/Simplex/Chat/Types/Preferences.hs +++ b/src/Simplex/Chat/Types/Preferences.hs @@ -149,6 +149,7 @@ data GroupFeature | GFVoice | GFFiles | GFSimplexLinks + | GFReports | GFHistory deriving (Show) @@ -160,6 +161,7 @@ data SGroupFeature (f :: GroupFeature) where SGFVoice :: SGroupFeature 'GFVoice SGFFiles :: SGroupFeature 'GFFiles SGFSimplexLinks :: SGroupFeature 'GFSimplexLinks + SGFReports :: SGroupFeature 'GFReports SGFHistory :: SGroupFeature 'GFHistory deriving instance Show (SGroupFeature f) @@ -185,6 +187,7 @@ groupFeatureNameText = \case GFVoice -> "Voice messages" GFFiles -> "Files and media" GFSimplexLinks -> "SimpleX links" + GFReports -> "Member reports" GFHistory -> "Recent history" groupFeatureNameText' :: SGroupFeature f -> Text @@ -208,11 +211,12 @@ allGroupFeatures = AGF SGFVoice, AGF SGFFiles, AGF SGFSimplexLinks, + AGF SGFReports, AGF SGFHistory ] groupPrefSel :: SGroupFeature f -> GroupPreferences -> Maybe (GroupFeaturePreference f) -groupPrefSel f GroupPreferences {timedMessages, directMessages, fullDelete, reactions, voice, files, simplexLinks, history} = case f of +groupPrefSel f GroupPreferences {timedMessages, directMessages, fullDelete, reactions, voice, files, simplexLinks, reports, history} = case f of SGFTimedMessages -> timedMessages SGFDirectMessages -> directMessages SGFFullDelete -> fullDelete @@ -220,6 +224,7 @@ groupPrefSel f GroupPreferences {timedMessages, directMessages, fullDelete, reac SGFVoice -> voice SGFFiles -> files SGFSimplexLinks -> simplexLinks + SGFReports -> reports SGFHistory -> history toGroupFeature :: SGroupFeature f -> GroupFeature @@ -231,6 +236,7 @@ toGroupFeature = \case SGFVoice -> GFVoice SGFFiles -> GFFiles SGFSimplexLinks -> GFSimplexLinks + SGFReports -> GFReports SGFHistory -> GFHistory class GroupPreferenceI p where @@ -243,7 +249,7 @@ instance GroupPreferenceI (Maybe GroupPreferences) where getGroupPreference pt prefs = fromMaybe (getGroupPreference pt defaultGroupPrefs) (groupPrefSel pt =<< prefs) instance GroupPreferenceI FullGroupPreferences where - getGroupPreference f FullGroupPreferences {timedMessages, directMessages, fullDelete, reactions, voice, files, simplexLinks, history} = case f of + getGroupPreference f FullGroupPreferences {timedMessages, directMessages, fullDelete, reactions, voice, files, simplexLinks, reports, history} = case f of SGFTimedMessages -> timedMessages SGFDirectMessages -> directMessages SGFFullDelete -> fullDelete @@ -251,6 +257,7 @@ instance GroupPreferenceI FullGroupPreferences where SGFVoice -> voice SGFFiles -> files SGFSimplexLinks -> simplexLinks + SGFReports -> reports SGFHistory -> history {-# INLINE getGroupPreference #-} @@ -263,6 +270,7 @@ data GroupPreferences = GroupPreferences voice :: Maybe VoiceGroupPreference, files :: Maybe FilesGroupPreference, simplexLinks :: Maybe SimplexLinksGroupPreference, + reports :: Maybe ReportsGroupPreference, history :: Maybe HistoryGroupPreference } deriving (Eq, Show) @@ -296,6 +304,7 @@ setGroupPreference_ f pref prefs = SGFVoice -> prefs {voice = pref} SGFFiles -> prefs {files = pref} SGFSimplexLinks -> prefs {simplexLinks = pref} + SGFReports -> prefs {reports = pref} SGFHistory -> prefs {history = pref} setGroupTimedMessagesPreference :: TimedMessagesGroupPreference -> Maybe GroupPreferences -> GroupPreferences @@ -325,6 +334,7 @@ data FullGroupPreferences = FullGroupPreferences voice :: VoiceGroupPreference, files :: FilesGroupPreference, simplexLinks :: SimplexLinksGroupPreference, + reports :: ReportsGroupPreference, history :: HistoryGroupPreference } deriving (Eq, Show) @@ -377,22 +387,23 @@ defaultGroupPrefs = FullGroupPreferences { timedMessages = TimedMessagesGroupPreference {enable = FEOff, ttl = Just 86400}, directMessages = DirectMessagesGroupPreference {enable = FEOff, role = Nothing}, - fullDelete = FullDeleteGroupPreference {enable = FEOn, role = Just GRModerator}, + fullDelete = FullDeleteGroupPreference {enable = FEOff, role = Nothing}, reactions = ReactionsGroupPreference {enable = FEOn}, voice = VoiceGroupPreference {enable = FEOn, role = Nothing}, files = FilesGroupPreference {enable = FEOn, role = Nothing}, simplexLinks = SimplexLinksGroupPreference {enable = FEOn, role = Nothing}, + reports = ReportsGroupPreference {enable = FEOn}, history = HistoryGroupPreference {enable = FEOff} } emptyGroupPrefs :: GroupPreferences -emptyGroupPrefs = GroupPreferences Nothing Nothing Nothing Nothing Nothing Nothing Nothing Nothing +emptyGroupPrefs = GroupPreferences Nothing Nothing Nothing Nothing Nothing Nothing Nothing Nothing Nothing businessGroupPrefs :: Preferences -> GroupPreferences businessGroupPrefs Preferences {timedMessages, fullDelete, reactions, voice} = defaultBusinessGroupPrefs { timedMessages = Just TimedMessagesGroupPreference {enable = maybe FEOff enableFeature timedMessages, ttl = maybe Nothing prefParam timedMessages}, - fullDelete = Just FullDeleteGroupPreference {enable = maybe FEOff enableFeature fullDelete, role = Just GRModerator}, + fullDelete = Just FullDeleteGroupPreference {enable = maybe FEOff enableFeature fullDelete, role = Nothing}, reactions = Just ReactionsGroupPreference {enable = maybe FEOn enableFeature reactions}, voice = Just VoiceGroupPreference {enable = maybe FEOff enableFeature voice, role = Nothing} } @@ -412,6 +423,7 @@ defaultBusinessGroupPrefs = voice = Just $ VoiceGroupPreference FEOff Nothing, files = Just $ FilesGroupPreference FEOn Nothing, simplexLinks = Just $ SimplexLinksGroupPreference FEOn Nothing, + reports = Just $ ReportsGroupPreference FEOff, history = Just $ HistoryGroupPreference FEOn } @@ -512,6 +524,10 @@ data SimplexLinksGroupPreference = SimplexLinksGroupPreference {enable :: GroupFeatureEnabled, role :: Maybe GroupMemberRole} deriving (Eq, Show) +data ReportsGroupPreference = ReportsGroupPreference + {enable :: GroupFeatureEnabled} + deriving (Eq, Show) + data HistoryGroupPreference = HistoryGroupPreference {enable :: GroupFeatureEnabled} deriving (Eq, Show) @@ -550,6 +566,9 @@ instance HasField "enable" FilesGroupPreference GroupFeatureEnabled where instance HasField "enable" SimplexLinksGroupPreference GroupFeatureEnabled where hasField p@SimplexLinksGroupPreference {enable} = (\e -> p {enable = e}, enable) +instance HasField "enable" ReportsGroupPreference GroupFeatureEnabled where + hasField p@ReportsGroupPreference {enable} = (\e -> p {enable = e}, enable) + instance HasField "enable" HistoryGroupPreference GroupFeatureEnabled where hasField p@HistoryGroupPreference {enable} = (\e -> p {enable = e}, enable) @@ -595,6 +614,12 @@ instance GroupFeatureI 'GFSimplexLinks where groupPrefParam _ = Nothing groupPrefRole SimplexLinksGroupPreference {role} = role +instance GroupFeatureI 'GFReports where + type GroupFeaturePreference 'GFReports = ReportsGroupPreference + sGroupFeature = SGFReports + groupPrefParam _ = Nothing + groupPrefRole _ = Nothing + instance GroupFeatureI 'GFHistory where type GroupFeaturePreference 'GFHistory = HistoryGroupPreference sGroupFeature = SGFHistory @@ -607,6 +632,8 @@ instance GroupFeatureNoRoleI 'GFFullDelete instance GroupFeatureNoRoleI 'GFReactions +instance GroupFeatureNoRoleI 'GFReports + instance GroupFeatureNoRoleI 'GFHistory instance HasField "role" DirectMessagesGroupPreference (Maybe GroupMemberRole) where @@ -761,6 +788,7 @@ mergeGroupPreferences groupPreferences = voice = pref SGFVoice, files = pref SGFFiles, simplexLinks = pref SGFSimplexLinks, + reports = pref SGFReports, history = pref SGFHistory } where @@ -777,6 +805,7 @@ toGroupPreferences groupPreferences = voice = pref SGFVoice, files = pref SGFFiles, simplexLinks = pref SGFSimplexLinks, + reports = pref SGFReports, history = pref SGFHistory } where @@ -885,6 +914,8 @@ $(J.deriveJSON defaultJSON ''FilesGroupPreference) $(J.deriveJSON defaultJSON ''SimplexLinksGroupPreference) +$(J.deriveJSON defaultJSON ''ReportsGroupPreference) + $(J.deriveJSON defaultJSON ''HistoryGroupPreference) $(J.deriveJSON defaultJSON ''GroupPreferences) diff --git a/tests/ChatTests/Groups.hs b/tests/ChatTests/Groups.hs index 0c5a6bef36..ca74e5e1bc 100644 --- a/tests/ChatTests/Groups.hs +++ b/tests/ChatTests/Groups.hs @@ -559,7 +559,7 @@ testGroup2 = ] dan <##> alice -- show last messages - alice ##> "/t #club 17" + alice ##> "/t #club 18" alice -- these strings are expected in any order because of sorting by time and rounding of time for sent <##? ( map (ConsoleString . ("#club " <> )) groupFeatureStrs @@ -1226,7 +1226,7 @@ testGroupMessageDelete = testChat3 aliceProfile bobProfile cathProfile $ \alice bob cath -> do createGroup3 "team" alice bob cath - disableFullDeletion3 "team" alice bob cath + -- disableFullDeletion3 "team" alice bob cath threadDelay 1000000 -- alice, bob: msg id 5, cath: msg id 4 (after group invitations & group events) alice #> "#team hello!" @@ -1238,7 +1238,7 @@ testGroupMessageDelete = msgItemId1 <- lastItemId alice alice #$> ("/_delete item #1 " <> msgItemId1 <> " internal", id, "message deleted") - alice #$> ("/_get chat #1 count=2", chat, [(0, "connected"), (1, "Full deletion: off")]) + alice #$> ("/_get chat #1 count=2", chat, [(0, "connected"), (0, "connected")]) bob #$> ("/_get chat #1 count=1", chat, [(0, "hello!")]) cath #$> ("/_get chat #1 count=1", chat, [(0, "hello!")]) @@ -1264,7 +1264,7 @@ testGroupMessageDelete = msgItemId2 <- lastItemId alice alice #$> ("/_delete item #1 " <> msgItemId2 <> " internal", id, "message deleted") - alice #$> ("/_get chat #1 count=2", chat', [((0, "connected"), Nothing), ((1, "Full deletion: off"), Nothing)]) + alice #$> ("/_get chat #1 count=2", chat', [((0, "connected"), Nothing), ((0, "connected"), Nothing)]) bob #$> ("/_get chat #1 count=2", chat', [((0, "hello!"), Nothing), ((1, "hi alic"), Just (0, "hello!"))]) cath #$> ("/_get chat #1 count=2", chat', [((0, "hello!"), Nothing), ((0, "hi alic"), Just (0, "hello!"))]) @@ -1311,7 +1311,7 @@ testGroupMessageDeleteMultiple = testChat3 aliceProfile bobProfile cathProfile $ \alice bob cath -> do createGroup3 "team" alice bob cath - disableFullDeletion3 "team" alice bob cath + -- disableFullDeletion3 "team" alice bob cath threadDelay 1000000 alice #> "#team hello" @@ -1348,7 +1348,7 @@ testGroupMessageDeleteMultipleManyBatches = testChat3 aliceProfile bobProfile cathProfile $ \alice bob cath -> do createGroup3 "team" alice bob cath - disableFullDeletion3 "team" alice bob cath + -- disableFullDeletion3 "team" alice bob cath bob ##> "/set receipts all off" bob <## "ok" @@ -1499,9 +1499,9 @@ testGroupDescription = testChat4 aliceProfile bobProfile cathProfile danProfile alice ##> "/g team" alice <## "group #team is created" alice <## "to add members use /a team or /create link #team" - alice ##> "/set delete #team off" - alice <## "updated group preferences:" - alice <## "Full deletion: off" + -- alice ##> "/set delete #team off" + -- alice <## "updated group preferences:" + -- alice <## "Full deletion: off" addMember "team" alice bob GRAdmin bob ##> "/j team" concurrentlyN_ @@ -1561,6 +1561,7 @@ testGroupDescription = testChat4 aliceProfile bobProfile cathProfile danProfile alice <## "Voice messages: on" alice <## "Files and media: on" alice <## "SimpleX links: on" + alice <## "Member reports: on" alice <## "Recent history: on" bobAddedDan :: HasCallStack => TestCC -> IO () bobAddedDan cc = do @@ -1572,7 +1573,7 @@ testGroupModerate = testChat3 aliceProfile bobProfile cathProfile $ \alice bob cath -> do createGroup3 "team" alice bob cath - disableFullDeletion3 "team" alice bob cath + -- disableFullDeletion3 "team" alice bob cath alice ##> "/mr team cath member" concurrentlyN_ [ alice <## "#team: you changed the role of cath from admin to member", @@ -1604,7 +1605,7 @@ testGroupModerateOwn = testChat2 aliceProfile bobProfile $ \alice bob -> do createGroup2 "team" alice bob - disableFullDeletion2 "team" alice bob + -- disableFullDeletion2 "team" alice bob threadDelay 1000000 alice #> "#team hello" bob <# "#team alice> hello" @@ -1619,7 +1620,7 @@ testGroupModerateMultiple = testChat3 aliceProfile bobProfile cathProfile $ \alice bob cath -> do createGroup3 "team" alice bob cath - disableFullDeletion3 "team" alice bob cath + -- disableFullDeletion3 "team" alice bob cath threadDelay 1000000 alice #> "#team hello" @@ -1655,7 +1656,7 @@ testGroupModerateFullDelete = testChat3 aliceProfile bobProfile cathProfile $ \alice bob cath -> do createGroup3 "team" alice bob cath - disableFullDeletion3 "team" alice bob cath + -- disableFullDeletion3 "team" alice bob cath alice ##> "/mr team cath member" concurrentlyN_ [ alice <## "#team: you changed the role of cath from admin to member", @@ -1694,7 +1695,7 @@ testGroupDelayedModeration ps = do withNewTestChatCfg ps cfg "alice" aliceProfile $ \alice -> do withNewTestChatCfg ps cfg "bob" bobProfile $ \bob -> do createGroup2 "team" alice bob - disableFullDeletion2 "team" alice bob + -- disableFullDeletion2 "team" alice bob withNewTestChatCfg ps cfg "cath" cathProfile $ \cath -> do connectUsers alice cath addMember "team" alice cath GRMember @@ -1742,7 +1743,7 @@ testGroupDelayedModerationFullDelete ps = do withNewTestChatCfg ps cfg "alice" aliceProfile $ \alice -> do withNewTestChatCfg ps cfg "bob" bobProfile $ \bob -> do createGroup2 "team" alice bob - disableFullDeletion2 "team" alice bob + -- disableFullDeletion2 "team" alice bob withNewTestChatCfg ps cfg "cath" cathProfile $ \cath -> do connectUsers alice cath addMember "team" alice cath GRMember @@ -3998,6 +3999,12 @@ testGroupMsgForwardReport = cath <## "#team: alice changed the role of bob from admin to moderator" ] + alice ##> "/mr team cath member" + concurrentlyN_ + [ alice <## "#team: you changed the role of cath from admin to member", + bob <## "#team: alice changed the role of cath from admin to member", + cath <## "#team: alice changed your role from admin to member" + ] cath ##> "/report #team content hi there" cath <# "#team > bob hi there" cath <## " report content" @@ -4127,7 +4134,7 @@ testGroupMsgForwardDeletion = testChat3 aliceProfile bobProfile cathProfile $ \alice bob cath -> do setupGroupForwarding3 "team" alice bob cath - disableFullDeletion3 "team" alice bob cath + -- disableFullDeletion3 "team" alice bob cath bob #> "#team hi there" alice <# "#team bob> hi there" @@ -4845,7 +4852,7 @@ testGroupHistoryDeletedMessage = testChat3 aliceProfile bobProfile cathProfile $ \alice bob cath -> do createGroup2 "team" alice bob - disableFullDeletion2 "team" alice bob + -- disableFullDeletion2 "team" alice bob alice #> "#team hello" bob <# "#team alice> hello" @@ -5535,7 +5542,7 @@ testBlockForAllMarkedBlocked = testChat3 aliceProfile bobProfile cathProfile $ \alice bob cath -> do createGroup3 "team" alice bob cath - disableFullDeletion3 "team" alice bob cath + -- disableFullDeletion3 "team" alice bob cath threadDelay 1000000 @@ -5623,7 +5630,7 @@ testBlockForAllFullDelete = testChat3 aliceProfile bobProfile cathProfile $ \alice bob cath -> do createGroup3 "team" alice bob cath - disableFullDeletion3 "team" alice bob cath + -- disableFullDeletion3 "team" alice bob cath alice ##> "/set delete #team on" alice <## "updated group preferences:" @@ -5704,7 +5711,7 @@ testBlockForAllAnotherAdminUnblocks = testChat3 aliceProfile bobProfile cathProfile $ \alice bob cath -> do createGroup3 "team" alice bob cath - disableFullDeletion3 "team" alice bob cath + -- disableFullDeletion3 "team" alice bob cath bob #> "#team 1" [alice, cath] *<# "#team bob> 1" @@ -5733,7 +5740,7 @@ testBlockForAllBeforeJoining = testChat4 aliceProfile bobProfile cathProfile danProfile $ \alice bob cath dan -> do createGroup3 "team" alice bob cath - disableFullDeletion3 "team" alice bob cath + -- disableFullDeletion3 "team" alice bob cath bob #> "#team 1" [alice, cath] *<# "#team bob> 1" @@ -5802,7 +5809,7 @@ testBlockForAllCantRepeat = testChat3 aliceProfile bobProfile cathProfile $ \alice bob cath -> do createGroup3 "team" alice bob cath - disableFullDeletion3 "team" alice bob cath + -- disableFullDeletion3 "team" alice bob cath alice ##> "/unblock for all #team bob" alice <## "bad chat command: already unblocked" @@ -5919,7 +5926,7 @@ testGroupMemberReports = testChat4 aliceProfile bobProfile cathProfile danProfile $ \alice bob cath dan -> do createGroup3 "jokes" alice bob cath - disableFullDeletion3 "jokes" alice bob cath + -- disableFullDeletion3 "jokes" alice bob cath alice ##> "/mr jokes bob moderator" concurrentlyN_ [ alice <## "#jokes: you changed the role of bob from admin to moderator", @@ -5978,7 +5985,7 @@ testGroupMemberReports = alice ##> "\\\\ #jokes cath inappropriate joke" concurrentlyN_ [ do - alice <## "#jokes: 1 messages deleted by member alice" + alice <## "#jokes: 1 messages deleted by user" alice <## "message marked deleted by you", do bob <# "#jokes cath> [marked deleted by alice] inappropriate joke" @@ -5991,6 +5998,77 @@ testGroupMemberReports = alice #$> ("/_get chat #1 content=report count=100", chat, [(0, "report content [marked deleted by you]")]) bob #$> ("/_get chat #1 content=report count=100", chat, [(0, "report content [marked deleted by alice]")]) dan #$> ("/_get chat #1 content=report count=100", chat, [(1, "report content [marked deleted by alice]")]) + -- delete all reports locally + alice #$> ("/clear #jokes", id, "#jokes: all messages are removed locally ONLY") + bob #$> ("/clear #jokes", id, "#jokes: all messages are removed locally ONLY") + dan #$> ("/clear #jokes", id, "#jokes: all messages are removed locally ONLY") + cath #> "#jokes ok joke" + concurrentlyN_ + [ alice <# "#jokes cath> ok joke", + bob <# "#jokes cath> ok joke", + dan <# "#jokes cath> ok joke" + ] + dan ##> "/report #jokes content ok joke" + dan <# "#jokes > cath ok joke" + dan <## " report content" + dan ##> "/report #jokes spam ok joke" + dan <# "#jokes > cath ok joke" + dan <## " report spam" + concurrentlyN_ + [ do + alice <# "#jokes dan> > cath ok joke" + alice <## " report content" + alice <# "#jokes dan> > cath ok joke" + alice <## " report spam", + do + bob <# "#jokes dan> > cath ok joke" + bob <## " report content" + bob <# "#jokes dan> > cath ok joke" + bob <## " report spam", + (cath ("/_get chat #1 content=report count=100", chat, [(0, "report content"), (0, "report spam")]) + bob #$> ("/_get chat #1 content=report count=100", chat, [(0, "report content"), (0, "report spam")]) + cath #$> ("/_get chat #1 content=report count=100", chat, []) + dan #$> ("/_get chat #1 content=report count=100", chat, [(1, "report content"), (1, "report spam")]) + alice ##> "/_archive reports #1" + alice <## "#jokes: 2 messages deleted by user" + (bob ("/_get chat #1 content=report count=100", chat, [(0, "report content [marked deleted by you]"), (0, "report spam [marked deleted by you]")]) + bob #$> ("/_get chat #1 content=report count=100", chat, [(0, "report content"), (0, "report spam")]) + bob ##> "/_archive reports #1" + bob <## "#jokes: 2 messages deleted by user" + bob #$> ("/_get chat #1 content=report count=100", chat, [(0, "report content [marked deleted by you]"), (0, "report spam [marked deleted by you]")]) + -- delete reports for all admins + alice #$> ("/clear #jokes", id, "#jokes: all messages are removed locally ONLY") + bob #$> ("/clear #jokes", id, "#jokes: all messages are removed locally ONLY") + dan #$> ("/clear #jokes", id, "#jokes: all messages are removed locally ONLY") + cath #> "#jokes ok joke 2" + concurrentlyN_ + [ alice <# "#jokes cath> ok joke 2", + bob <# "#jokes cath> ok joke 2", + dan <# "#jokes cath> ok joke 2" + ] + dan ##> "/report #jokes content ok joke 2" + dan <# "#jokes > cath ok joke 2" + dan <## " report content" + concurrentlyN_ + [ do + alice <# "#jokes dan> > cath ok joke 2" + alice <## " report content", + do + bob <# "#jokes dan> > cath ok joke 2" + bob <## " report content", + (cath "/last_item_id" + i :: ChatItemId <- read <$> getTermLine alice + alice ##> ("/_delete reports #1 " <> show i <> " broadcast") + alice <## "message marked deleted by you" + bob <# "#jokes dan> [marked deleted by alice] report content" + alice #$> ("/_get chat #1 content=report count=100", chat, [(0, "report content [marked deleted by you]")]) + bob #$> ("/_get chat #1 content=report count=100", chat, [(0, "report content [marked deleted by alice]")]) + dan #$> ("/_get chat #1 content=report count=100", chat, [(1, "report content")]) testMemberMention :: HasCallStack => TestParams -> IO () testMemberMention = diff --git a/tests/ChatTests/Utils.hs b/tests/ChatTests/Utils.hs index a6eab378d9..7bb25dbe9b 100644 --- a/tests/ChatTests/Utils.hs +++ b/tests/ChatTests/Utils.hs @@ -300,11 +300,12 @@ groupFeatures'' dir = [ ((dir, e2eeInfoNoPQStr), Nothing, Nothing), ((dir, "Disappearing messages: off"), Nothing, Nothing), ((dir, "Direct messages: on"), Nothing, Nothing), - ((dir, "Full deletion: on for moderators"), Nothing, Nothing), + ((dir, "Full deletion: off"), Nothing, Nothing), ((dir, "Message reactions: on"), Nothing, Nothing), ((dir, "Voice messages: on"), Nothing, Nothing), ((dir, "Files and media: on"), Nothing, Nothing), ((dir, "SimpleX links: on"), Nothing, Nothing), + ((dir, "Member reports: on"), Nothing, Nothing), ((dir, "Recent history: on"), Nothing, Nothing) ] diff --git a/tests/ProtocolTests.hs b/tests/ProtocolTests.hs index 4f191384ae..cb293895a9 100644 --- a/tests/ProtocolTests.hs +++ b/tests/ProtocolTests.hs @@ -101,7 +101,7 @@ testChatPreferences :: Maybe Preferences testChatPreferences = Just Preferences {voice = Just VoicePreference {allow = FAYes}, fullDelete = Nothing, timedMessages = Nothing, calls = Nothing, reactions = Just ReactionsPreference {allow = FAYes}} testGroupPreferences :: Maybe GroupPreferences -testGroupPreferences = Just GroupPreferences {timedMessages = Nothing, directMessages = Nothing, reactions = Just ReactionsGroupPreference {enable = FEOn}, voice = Just VoiceGroupPreference {enable = FEOn, role = Nothing}, files = Nothing, fullDelete = Nothing, simplexLinks = Nothing, history = Nothing} +testGroupPreferences = Just GroupPreferences {timedMessages = Nothing, directMessages = Nothing, reactions = Just ReactionsGroupPreference {enable = FEOn}, voice = Just VoiceGroupPreference {enable = FEOn, role = Nothing}, files = Nothing, fullDelete = Nothing, simplexLinks = Nothing, history = Nothing, reports = Nothing} testProfile :: Profile testProfile = Profile {displayName = "alice", fullName = "Alice", image = Just (ImageData "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAgAAAAIAQMAAAD+wSzIAAAABlBMVEX///+/v7+jQ3Y5AAAADklEQVQI12P4AIX8EAgALgAD/aNpbtEAAAAASUVORK5CYII="), contactLink = Nothing, preferences = testChatPreferences} diff --git a/website/src/finneyforum.html b/website/src/finneyforum.html deleted file mode 100644 index 06229e4b5d..0000000000 --- a/website/src/finneyforum.html +++ /dev/null @@ -1,8 +0,0 @@ ---- -layout: layouts/group_link.html -title: "SimpleX Chat - Finney Forum group" -description: "Join the group of attendees of Finney Forum 2024" -groupLink: "https://simplex.chat/contact#/?v=1-4&smp=smp%3A%2F%2Fhpq7_4gGJiilmz5Rf-CswuU5kZGkm_zOIooSw6yALRg%3D%40smp5.simplex.im%2FTlom_0qzRaEWo_4cweE_hzj6KBmqXC8R%23%2F%3Fv%3D1-2%26dh%3DMCowBQYDK2VuAyEAZzyx3sm1tpGsYjXAOR2LxXD0ty1hlAR7Hg0fbCxEoig%253D%26srv%3Djjbyvoemxysm7qxap7m5d5m35jzv5qq6gnlv7s4rsn7tdwwmuqciwpid.onion&data=%7B%22type%22%3A%22group%22%2C%22groupLinkId%22%3A%22IfdftVGf9odVOQImmz1I9A%3D%3D%22%7D" -groupLinkText: Open Finney Forum group link -templateEngineOverride: njk ---- diff --git a/website/src/livestream.html b/website/src/livestream.html new file mode 100644 index 0000000000..ee7a96ab30 --- /dev/null +++ b/website/src/livestream.html @@ -0,0 +1,8 @@ +--- +layout: layouts/group_link.html +title: "SimpleX Chat: Power to the People" +description: "Join the group for livestream Q&A" +groupLink: "https://simplex.chat/contact#/?v=2-7&smp=smp%3A%2F%2FSkIkI6EPd2D63F4xFKfHk7I1UGZVNn6k1QWZ5rcyr6w%3D%40smp9.simplex.im%2FoVQ-kg2rjMRituleO6t26DhQDPW6OjLL%23%2F%3Fv%3D1-3%26dh%3DMCowBQYDK2VuAyEATIRrsU4GwjpF6SeMWa6Li20Rkibgu4ozZMADZfdAZzE%253D%26srv%3Djssqzccmrcws6bhmn77vgmhfjmhwlyr3u7puw4erkyoosywgl67slqqd.onion" +groupLinkText: Open Livestream Q&A group link +templateEngineOverride: njk +--- \ No newline at end of file diff --git a/website/src/monerokon.html b/website/src/monerokon.html deleted file mode 100644 index 060c6883bb..0000000000 --- a/website/src/monerokon.html +++ /dev/null @@ -1,8 +0,0 @@ ---- -layout: layouts/group_link.html -title: "SimpleX Chat - MoneroKon group" -description: "Join the group of attendees of Monero Konferenco 3 - Praha 2023" -groupLink: "https://simplex.chat/contact/#/?v=1-4&smp=smp%3A%2F%2Fhpq7_4gGJiilmz5Rf-CswuU5kZGkm_zOIooSw6yALRg%3D%40smp5.simplex.im%2FIE3ZKT3daRLKdQg1nSXK4U1cUK4A81XQ%23%2F%3Fv%3D1-2%26dh%3DMCowBQYDK2VuAyEAN2vLBKKQiTG58nokhiBIpqvLTyfeyey6UbaFGy4cYH8%253D%26srv%3Djjbyvoemxysm7qxap7m5d5m35jzv5qq6gnlv7s4rsn7tdwwmuqciwpid.onion&data=%7B%22type%22%3A%22group%22%2C%22groupLinkId%22%3A%227LTn4BEWw4bD9Gs8snVEJA%3D%3D%22%7D" -groupLinkText: Open MoneroKon group link -templateEngineOverride: njk ---- \ No newline at end of file diff --git a/website/src/rightscon.html b/website/src/rightscon.html deleted file mode 100644 index 8cf9c9b484..0000000000 --- a/website/src/rightscon.html +++ /dev/null @@ -1,8 +0,0 @@ ---- -layout: layouts/group_link.html -title: "SimpleX Chat - RightsCon group" -description: "Join the group of attendees of RightsCon 2023" -groupLink: "https://simplex.chat/contact#/?v=1-2&smp=smp%3A%2F%2Fhpq7_4gGJiilmz5Rf-CswuU5kZGkm_zOIooSw6yALRg%3D%40smp5.simplex.im%2FyHKMxr06RLUiKent0IREl1rwUtsc1MKs%23%2F%3Fv%3D1-2%26dh%3DMCowBQYDK2VuAyEAwxplfiUKydkqy7Rbl-YQCWUSnrV_ADSd5fWvH17BvEs%253D%26srv%3Djjbyvoemxysm7qxap7m5d5m35jzv5qq6gnlv7s4rsn7tdwwmuqciwpid.onion&data=%7B%22type%22%3A%22group%22%2C%22groupLinkId%22%3A%22B3dC9QiKk4AEpGWaLUuPxw%3D%3D%22%7D" -groupLinkText: Open RightsCon group link -templateEngineOverride: njk ----