mirror of
https://github.com/simplex-chat/simplex-chat.git
synced 2026-03-30 22:55:48 +00:00
ios: change member role (#1164)
* ios: change member role * chat item types, error alerts * update alert * translations * update messages * translation Co-authored-by: JRoberts <8711996+jr-simplex@users.noreply.github.com> * translation Co-authored-by: JRoberts <8711996+jr-simplex@users.noreply.github.com> * translation Co-authored-by: JRoberts <8711996+jr-simplex@users.noreply.github.com> * update translations Co-authored-by: JRoberts <8711996+jr-simplex@users.noreply.github.com>
This commit is contained in:
committed by
GitHub
parent
cd6cad9a96
commit
f9c691cab1
@@ -702,6 +702,12 @@ func apiRemoveMember(_ groupId: Int64, _ memberId: Int64) async throws -> GroupM
|
||||
throw r
|
||||
}
|
||||
|
||||
func apiMemberRole(_ groupId: Int64, _ memberId: Int64, _ memberRole: GroupMemberRole) async throws -> GroupMember {
|
||||
let r = await chatSendCmd(.apiMemberRole(groupId: groupId, memberId: memberId, memberRole: memberRole), bgTask: false)
|
||||
if case let .memberRoleUser(_, member, _, _) = r { return member }
|
||||
throw r
|
||||
}
|
||||
|
||||
func leaveGroup(_ groupId: Int64) async {
|
||||
do {
|
||||
let groupInfo = try await apiLeaveGroup(groupId)
|
||||
|
||||
@@ -130,9 +130,9 @@ struct AddGroupMembersView: View {
|
||||
} catch {
|
||||
switch error as? ChatResponse {
|
||||
case .chatCmdError(.errorAgent(.BROKER(.TIMEOUT))):
|
||||
alert = .error(title: "Connection timeout", error: "Please check your network connection and try again.")
|
||||
alert = .error(title: "Connection timeout", error: NSLocalizedString("Please check your network connection and try again.", comment: "alert message"))
|
||||
case .chatCmdError(.errorAgent(.BROKER(.NETWORK))):
|
||||
alert = .error(title: "Connection error", error: "Please check your network connection and try again.")
|
||||
alert = .error(title: "Connection error", error: NSLocalizedString("Please check your network connection and try again.", comment: "alert message"))
|
||||
default:
|
||||
alert = .error(title: "Error adding member(s)", error: responseError(error))
|
||||
}
|
||||
|
||||
@@ -13,15 +13,24 @@ struct GroupMemberInfoView: View {
|
||||
@EnvironmentObject var chatModel: ChatModel
|
||||
@Environment(\.dismiss) var dismiss: DismissAction
|
||||
var groupInfo: GroupInfo
|
||||
var member: GroupMember
|
||||
@State var member: GroupMember
|
||||
var connectionStats: ConnectionStats?
|
||||
@State private var newRole: GroupMemberRole = .member
|
||||
@State private var alert: GroupMemberInfoViewAlert?
|
||||
@AppStorage(DEFAULT_DEVELOPER_TOOLS) private var developerTools = false
|
||||
|
||||
enum GroupMemberInfoViewAlert: Identifiable {
|
||||
case removeMemberAlert
|
||||
case changeMemberRoleAlert(role: GroupMemberRole)
|
||||
case error(title: LocalizedStringKey, error: String)
|
||||
|
||||
var id: GroupMemberInfoViewAlert { get { self } }
|
||||
var id: String {
|
||||
switch self {
|
||||
case .removeMemberAlert: return "removeMemberAlert"
|
||||
case let .changeMemberRoleAlert(role): return "changeMemberRoleAlert \(role.rawValue)"
|
||||
case let .error(title, _): return "error \(title)"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
var body: some View {
|
||||
@@ -38,8 +47,29 @@ struct GroupMemberInfoView: View {
|
||||
|
||||
Section("Member") {
|
||||
infoRow("Group", groupInfo.displayName)
|
||||
// TODO change role
|
||||
// localizedInfoRow("Role", member.memberRole.text)
|
||||
|
||||
HStack {
|
||||
if let roles = member.canChangeRoleTo(groupInfo: groupInfo) {
|
||||
Picker("Change role", selection: $newRole) {
|
||||
ForEach(roles) { role in
|
||||
Text(role.text)
|
||||
.foregroundStyle(.secondary)
|
||||
}
|
||||
}
|
||||
} else {
|
||||
Text("Role")
|
||||
Spacer()
|
||||
Text(member.memberRole.text)
|
||||
.foregroundStyle(.secondary)
|
||||
}
|
||||
}
|
||||
.onAppear { newRole = member.memberRole }
|
||||
.onChange(of: newRole) { _ in
|
||||
if newRole != member.memberRole {
|
||||
alert = .changeMemberRoleAlert(role: newRole)
|
||||
}
|
||||
}
|
||||
|
||||
// TODO invited by - need to get contact by contact id
|
||||
if let conn = member.activeConn {
|
||||
let connLevelDesc = conn.connLevel == 0 ? NSLocalizedString("direct", comment: "connection level description") : String.localizedStringWithFormat(NSLocalizedString("indirect (%d)", comment: "connection level description"), conn.connLevel)
|
||||
@@ -55,7 +85,7 @@ struct GroupMemberInfoView: View {
|
||||
}
|
||||
}
|
||||
|
||||
if member.canBeRemoved(membership: groupInfo.membership) {
|
||||
if member.canBeRemoved(groupInfo: groupInfo) {
|
||||
Section {
|
||||
removeMemberButton()
|
||||
}
|
||||
@@ -74,6 +104,8 @@ struct GroupMemberInfoView: View {
|
||||
.alert(item: $alert) { alertItem in
|
||||
switch(alertItem) {
|
||||
case .removeMemberAlert: return removeMemberAlert()
|
||||
case .changeMemberRoleAlert: return changeMemberRoleAlert()
|
||||
case let .error(title, error): return Alert(title: Text(title), message: Text(error))
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -139,17 +171,54 @@ struct GroupMemberInfoView: View {
|
||||
do {
|
||||
let member = try await apiRemoveMember(groupInfo.groupId, member.groupMemberId)
|
||||
await MainActor.run {
|
||||
_ = ChatModel.shared.upsertGroupMember(groupInfo, member)
|
||||
_ = chatModel.upsertGroupMember(groupInfo, member)
|
||||
dismiss()
|
||||
}
|
||||
} catch let error {
|
||||
logger.error("apiRemoveMember error: \(responseError(error))")
|
||||
alert = errorAlert(error, "Error removing member")
|
||||
}
|
||||
}
|
||||
},
|
||||
secondaryButton: .cancel()
|
||||
)
|
||||
}
|
||||
|
||||
private func changeMemberRoleAlert() -> Alert {
|
||||
Alert(
|
||||
title: Text("Change member role?"),
|
||||
message: member.memberCurrent ? Text("Member role will be changed to \"\(newRole.text)\". All group members will be notified.") : Text("Member role will be changed to \"\(newRole.text)\". The member will receive a new invitation."),
|
||||
primaryButton: .default(Text("Change")) {
|
||||
Task {
|
||||
do {
|
||||
let mem = try await apiMemberRole(groupInfo.groupId, member.groupMemberId, newRole)
|
||||
await MainActor.run {
|
||||
member = mem
|
||||
_ = chatModel.upsertGroupMember(groupInfo, mem)
|
||||
}
|
||||
} catch let error {
|
||||
newRole = member.memberRole
|
||||
logger.error("apiMemberRole error: \(responseError(error))")
|
||||
alert = errorAlert(error, "Error changing role")
|
||||
}
|
||||
}
|
||||
},
|
||||
secondaryButton: .cancel {
|
||||
newRole = member.memberRole
|
||||
}
|
||||
)
|
||||
}
|
||||
|
||||
private func errorAlert(_ error: Error, _ title: LocalizedStringKey) -> GroupMemberInfoViewAlert {
|
||||
switch error as? ChatResponse {
|
||||
case .chatCmdError(.errorAgent(.BROKER(.TIMEOUT))):
|
||||
return .error(title: "Connection timeout", error: NSLocalizedString("Please check your network connection and try again.", comment: "alert message"))
|
||||
case .chatCmdError(.errorAgent(.BROKER(.NETWORK))):
|
||||
return .error(title: "Connection error", error: NSLocalizedString("Please check your network connection and try again.", comment: "alert message"))
|
||||
default:
|
||||
return .error(title: title, error: responseError(error))
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
struct GroupMemberInfoView_Previews: PreviewProvider {
|
||||
|
||||
@@ -278,7 +278,7 @@ struct DatabaseView: View {
|
||||
case let .setChatItemTTL(ttl):
|
||||
return Alert(
|
||||
title: Text("Enable automatic message deletion?"),
|
||||
message: Text("This action cannot be undone - once you confirm, messages older than specified age will start to get deleted. It may take up to several minutes to delete old messages initially after changing this setting."),
|
||||
message: Text("This action cannot be undone - the messages sent and received earlier than selected will be deleted. It may take several minutes."),
|
||||
primaryButton: .destructive(Text("Delete messages")) {
|
||||
setCiTTL(ttl)
|
||||
},
|
||||
@@ -435,7 +435,7 @@ struct DatabaseView: View {
|
||||
}
|
||||
} catch {
|
||||
await MainActor.run {
|
||||
alert = .error(title: "Error changing automatic message deletion", error: responseError(error))
|
||||
alert = .error(title: "Error changing setting", error: responseError(error))
|
||||
chatItemTTL = currentChatItemTTL
|
||||
progressIndicator = false
|
||||
appFilesCountAndSize = directoryFileCountAndSize(getAppFilesDirectory())
|
||||
|
||||
@@ -92,6 +92,11 @@
|
||||
<target>%lld Mitglieder</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="%lld second(s)" xml:space="preserve">
|
||||
<source>%lld second(s)</source>
|
||||
<target>*** %lld second(s)</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="%lldk" xml:space="preserve">
|
||||
<source>%lldk</source>
|
||||
<target>%lldk</target>
|
||||
@@ -172,6 +177,21 @@
|
||||
<target>, </target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="1 day" xml:space="preserve">
|
||||
<source>1 day</source>
|
||||
<target>*** 1 day</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="1 month" xml:space="preserve">
|
||||
<source>1 month</source>
|
||||
<target>*** 1 month</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="1 week" xml:space="preserve">
|
||||
<source>1 week</source>
|
||||
<target>*** 1 week</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="6" xml:space="preserve">
|
||||
<source>6</source>
|
||||
<target>6</target>
|
||||
@@ -333,11 +353,26 @@
|
||||
<target>Datei kann nicht empfangen werden</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Change" xml:space="preserve">
|
||||
<source>Change</source>
|
||||
<target>*** Change</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Change database passphrase?" xml:space="preserve">
|
||||
<source>Change database passphrase?</source>
|
||||
<target>Datenbank-Passwort ändern?</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Change member role?" xml:space="preserve">
|
||||
<source>Change member role?</source>
|
||||
<target>*** Change member role?</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Change role" xml:space="preserve">
|
||||
<source>Change role</source>
|
||||
<target>*** Change role</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Chat archive" xml:space="preserve">
|
||||
<source>Chat archive</source>
|
||||
<target>Datenbank Archiv</target>
|
||||
@@ -588,6 +623,11 @@
|
||||
<target>Dunkel</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Data" xml:space="preserve">
|
||||
<source>Data</source>
|
||||
<target>*** Data</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Database ID" xml:space="preserve">
|
||||
<source>Database ID</source>
|
||||
<target>Datenbank-ID</target>
|
||||
@@ -761,6 +801,16 @@
|
||||
<target>Nachricht löschen?</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Delete messages" xml:space="preserve">
|
||||
<source>Delete messages</source>
|
||||
<target>*** Delete messages</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Delete messages after" xml:space="preserve">
|
||||
<source>Delete messages after</source>
|
||||
<target>*** Delete messages after</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Delete old database" xml:space="preserve">
|
||||
<source>Delete old database</source>
|
||||
<target>Alte Datenbank löschen</target>
|
||||
@@ -856,6 +906,11 @@
|
||||
<target>TCP-Keep-alive aktivieren</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Enable automatic message deletion?" xml:space="preserve">
|
||||
<source>Enable automatic message deletion?</source>
|
||||
<target>*** Enable automatic message deletion?</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Enable instant notifications?" xml:space="preserve">
|
||||
<source>Enable instant notifications?</source>
|
||||
<target>Sofortige Benachrichtigungen aktivieren?</target>
|
||||
@@ -936,6 +991,16 @@
|
||||
<target>Fehler beim Hinzufügen von Mitgliedern</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Error changing role" xml:space="preserve">
|
||||
<source>Error changing role</source>
|
||||
<target>*** Error changing role</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Error changing setting" xml:space="preserve">
|
||||
<source>Error changing setting</source>
|
||||
<target>*** Error changing setting</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Error creating address" xml:space="preserve">
|
||||
<source>Error creating address</source>
|
||||
<target>Fehler beim Erstellen der Adresse</target>
|
||||
@@ -1001,6 +1066,11 @@
|
||||
<target>Fehler beim Empfangen der Datei</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Error removing member" xml:space="preserve">
|
||||
<source>Error removing member</source>
|
||||
<target>*** Error removing member</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Error saving ICE servers" xml:space="preserve">
|
||||
<source>Error saving ICE servers</source>
|
||||
<target>Fehler beim Speichern der ICE-Server</target>
|
||||
@@ -1443,6 +1513,16 @@ Wir werden Serverredundanzen hinzufügen, um verloren gegangene Nachrichten zu v
|
||||
<target>Mitglied</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Member role will be changed to "%@". All group members will be notified." xml:space="preserve">
|
||||
<source>Member role will be changed to "%@". All group members will be notified.</source>
|
||||
<target>*** Member role will be changed to "%@". All group members will be notified.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Member role will be changed to "%@". The member will receive a new invitation." xml:space="preserve">
|
||||
<source>Member role will be changed to "%@". The member will receive a new invitation.</source>
|
||||
<target>*** Member role will be changed to "%@". The member will receive a new invitation.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Member will be removed from group - this cannot be undone!" xml:space="preserve">
|
||||
<source>Member will be removed from group - this cannot be undone!</source>
|
||||
<target>Das Mitglied wird aus der Gruppe entfernt - dies kann nicht rückgängig gemacht werden!</target>
|
||||
@@ -1686,7 +1766,7 @@ Wir werden Serverredundanzen hinzufügen, um verloren gegangene Nachrichten zu v
|
||||
<trans-unit id="Please check your network connection and try again." xml:space="preserve">
|
||||
<source>Please check your network connection and try again.</source>
|
||||
<target>Bitte überprüfen Sie Ihre Netzwerkverbindung und versuchen Sie es erneut.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
<note>alert message</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Please enter correct current passphrase." xml:space="preserve">
|
||||
<source>Please enter correct current passphrase.</source>
|
||||
@@ -1863,6 +1943,11 @@ Wir werden Serverredundanzen hinzufügen, um verloren gegangene Nachrichten zu v
|
||||
<target>Zurückkehren</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Role" xml:space="preserve">
|
||||
<source>Role</source>
|
||||
<target>*** Role</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Run chat" xml:space="preserve">
|
||||
<source>Run chat</source>
|
||||
<target>Chat starten</target>
|
||||
@@ -2013,6 +2098,11 @@ Wir werden Serverredundanzen hinzufügen, um verloren gegangene Nachrichten zu v
|
||||
<target>Einmal-Einladungslink teilen</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Shared one-time link" xml:space="preserve">
|
||||
<source>Shared one-time link</source>
|
||||
<target>*** Shared one-time link</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Show preview" xml:space="preserve">
|
||||
<source>Show preview</source>
|
||||
<target>Vorschau anzeigen</target>
|
||||
@@ -2213,6 +2303,11 @@ Wir werden Serverredundanzen hinzufügen, um verloren gegangene Nachrichten zu v
|
||||
<target>Diese Aktion kann nicht rückgängig gemacht werden - Alle empfangenen und gesendeten Dateien und Medien werden gelöscht. Bilder mit niedriger Auflösung bleiben erhalten.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="This action cannot be undone - the messages sent and received earlier than selected will be deleted. It may take several minutes." xml:space="preserve">
|
||||
<source>This action cannot be undone - the messages sent and received earlier than selected will be deleted. It may take several minutes.</source>
|
||||
<target>*** This action cannot be undone - the messages sent and received earlier than selected will be deleted. It may take several minutes.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="This action cannot be undone - your profile, contacts, messages and files will be irreversibly lost." xml:space="preserve">
|
||||
<source>This action cannot be undone - your profile, contacts, messages and files will be irreversibly lost.</source>
|
||||
<target>Diese Aktion kann nicht rückgängig gemacht werden - Ihr Profil und Ihre Kontakte, Nachrichten und Dateien gehen unwiderruflich verloren.</target>
|
||||
@@ -2694,7 +2789,7 @@ SimpleX-Server können Ihr Profil nicht einsehen.</target>
|
||||
<trans-unit id="admin" xml:space="preserve">
|
||||
<source>admin</source>
|
||||
<target>Admin</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
<note>member role</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="audio call (not e2e encrypted)" xml:space="preserve">
|
||||
<source>audio call (not e2e encrypted)</source>
|
||||
@@ -2924,7 +3019,13 @@ SimpleX-Server können Ihr Profil nicht einsehen.</target>
|
||||
<trans-unit id="member" xml:space="preserve">
|
||||
<source>member</source>
|
||||
<target>Mitglied</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
<note>member role</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="member %@ role: %@" xml:space="preserve">
|
||||
<source>member %1$@ role: %2$@</source>
|
||||
<target>*** member %1$@ role: %2$@</target>
|
||||
<note>rcv group event chat item
|
||||
snd group event chat item</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="member connected" xml:space="preserve">
|
||||
<source>connected</source>
|
||||
@@ -2946,6 +3047,11 @@ SimpleX-Server können Ihr Profil nicht einsehen.</target>
|
||||
<target>Neue Nachricht</target>
|
||||
<note>notification</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="no" xml:space="preserve">
|
||||
<source>no</source>
|
||||
<target>*** nein</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="no e2e encryption" xml:space="preserve">
|
||||
<source>no e2e encryption</source>
|
||||
<target>Keine E2E-Verschlüsselung</target>
|
||||
@@ -2959,7 +3065,7 @@ SimpleX-Server können Ihr Profil nicht einsehen.</target>
|
||||
<trans-unit id="owner" xml:space="preserve">
|
||||
<source>owner</source>
|
||||
<target>Eigentümer</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
<note>member role</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="peer-to-peer" xml:space="preserve">
|
||||
<source>peer-to-peer</source>
|
||||
@@ -3101,6 +3207,12 @@ SimpleX-Server können Ihr Profil nicht einsehen.</target>
|
||||
<target>Sie: </target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="your role: %@" xml:space="preserve">
|
||||
<source>your role: %@</source>
|
||||
<target>*** your role: %@</target>
|
||||
<note>rcv group event chat item
|
||||
snd group event chat item</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="~strike~" xml:space="preserve">
|
||||
<source>\~strike~</source>
|
||||
<target>\~durchstreichen~</target>
|
||||
|
||||
@@ -92,6 +92,11 @@
|
||||
<target>%lld members</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="%lld second(s)" xml:space="preserve">
|
||||
<source>%lld second(s)</source>
|
||||
<target>%lld second(s)</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="%lldk" xml:space="preserve">
|
||||
<source>%lldk</source>
|
||||
<target>%lldk</target>
|
||||
@@ -172,6 +177,21 @@
|
||||
<target>, </target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="1 day" xml:space="preserve">
|
||||
<source>1 day</source>
|
||||
<target>1 day</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="1 month" xml:space="preserve">
|
||||
<source>1 month</source>
|
||||
<target>1 month</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="1 week" xml:space="preserve">
|
||||
<source>1 week</source>
|
||||
<target>1 week</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="6" xml:space="preserve">
|
||||
<source>6</source>
|
||||
<target>6</target>
|
||||
@@ -333,11 +353,26 @@
|
||||
<target>Cannot receive file</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Change" xml:space="preserve">
|
||||
<source>Change</source>
|
||||
<target>Change</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Change database passphrase?" xml:space="preserve">
|
||||
<source>Change database passphrase?</source>
|
||||
<target>Change database passphrase?</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Change member role?" xml:space="preserve">
|
||||
<source>Change member role?</source>
|
||||
<target>Change member role?</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Change role" xml:space="preserve">
|
||||
<source>Change role</source>
|
||||
<target>Change role</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Chat archive" xml:space="preserve">
|
||||
<source>Chat archive</source>
|
||||
<target>Chat archive</target>
|
||||
@@ -588,6 +623,11 @@
|
||||
<target>Dark</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Data" xml:space="preserve">
|
||||
<source>Data</source>
|
||||
<target>Data</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Database ID" xml:space="preserve">
|
||||
<source>Database ID</source>
|
||||
<target>Database ID</target>
|
||||
@@ -761,6 +801,16 @@
|
||||
<target>Delete message?</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Delete messages" xml:space="preserve">
|
||||
<source>Delete messages</source>
|
||||
<target>Delete messages</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Delete messages after" xml:space="preserve">
|
||||
<source>Delete messages after</source>
|
||||
<target>Delete messages after</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Delete old database" xml:space="preserve">
|
||||
<source>Delete old database</source>
|
||||
<target>Delete old database</target>
|
||||
@@ -856,6 +906,11 @@
|
||||
<target>Enable TCP keep-alive</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Enable automatic message deletion?" xml:space="preserve">
|
||||
<source>Enable automatic message deletion?</source>
|
||||
<target>Enable automatic message deletion?</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Enable instant notifications?" xml:space="preserve">
|
||||
<source>Enable instant notifications?</source>
|
||||
<target>Enable instant notifications?</target>
|
||||
@@ -936,6 +991,16 @@
|
||||
<target>Error adding member(s)</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Error changing role" xml:space="preserve">
|
||||
<source>Error changing role</source>
|
||||
<target>Error changing role</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Error changing setting" xml:space="preserve">
|
||||
<source>Error changing setting</source>
|
||||
<target>Error changing setting</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Error creating address" xml:space="preserve">
|
||||
<source>Error creating address</source>
|
||||
<target>Error creating address</target>
|
||||
@@ -1001,6 +1066,11 @@
|
||||
<target>Error receiving file</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Error removing member" xml:space="preserve">
|
||||
<source>Error removing member</source>
|
||||
<target>Error removing member</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Error saving ICE servers" xml:space="preserve">
|
||||
<source>Error saving ICE servers</source>
|
||||
<target>Error saving ICE servers</target>
|
||||
@@ -1443,6 +1513,16 @@ We will be adding server redundancy to prevent lost messages.</target>
|
||||
<target>Member</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Member role will be changed to "%@". All group members will be notified." xml:space="preserve">
|
||||
<source>Member role will be changed to "%@". All group members will be notified.</source>
|
||||
<target>Member role will be changed to "%@". All group members will be notified.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Member role will be changed to "%@". The member will receive a new invitation." xml:space="preserve">
|
||||
<source>Member role will be changed to "%@". The member will receive a new invitation.</source>
|
||||
<target>Member role will be changed to "%@". The member will receive a new invitation.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Member will be removed from group - this cannot be undone!" xml:space="preserve">
|
||||
<source>Member will be removed from group - this cannot be undone!</source>
|
||||
<target>Member will be removed from group - this cannot be undone!</target>
|
||||
@@ -1686,7 +1766,7 @@ We will be adding server redundancy to prevent lost messages.</target>
|
||||
<trans-unit id="Please check your network connection and try again." xml:space="preserve">
|
||||
<source>Please check your network connection and try again.</source>
|
||||
<target>Please check your network connection and try again.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
<note>alert message</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Please enter correct current passphrase." xml:space="preserve">
|
||||
<source>Please enter correct current passphrase.</source>
|
||||
@@ -1863,6 +1943,11 @@ We will be adding server redundancy to prevent lost messages.</target>
|
||||
<target>Revert</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Role" xml:space="preserve">
|
||||
<source>Role</source>
|
||||
<target>Role</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Run chat" xml:space="preserve">
|
||||
<source>Run chat</source>
|
||||
<target>Run chat</target>
|
||||
@@ -2013,6 +2098,11 @@ We will be adding server redundancy to prevent lost messages.</target>
|
||||
<target>Share one-time invitation link</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Shared one-time link" xml:space="preserve">
|
||||
<source>Shared one-time link</source>
|
||||
<target>Shared one-time link</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Show preview" xml:space="preserve">
|
||||
<source>Show preview</source>
|
||||
<target>Show preview</target>
|
||||
@@ -2213,6 +2303,11 @@ We will be adding server redundancy to prevent lost messages.</target>
|
||||
<target>This action cannot be undone - all received and sent files and media will be deleted. Low resolution pictures will remain.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="This action cannot be undone - the messages sent and received earlier than selected will be deleted. It may take several minutes." xml:space="preserve">
|
||||
<source>This action cannot be undone - the messages sent and received earlier than selected will be deleted. It may take several minutes.</source>
|
||||
<target>This action cannot be undone - the messages sent and received earlier than selected will be deleted. It may take several minutes.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="This action cannot be undone - your profile, contacts, messages and files will be irreversibly lost." xml:space="preserve">
|
||||
<source>This action cannot be undone - your profile, contacts, messages and files will be irreversibly lost.</source>
|
||||
<target>This action cannot be undone - your profile, contacts, messages and files will be irreversibly lost.</target>
|
||||
@@ -2694,7 +2789,7 @@ SimpleX servers cannot see your profile.</target>
|
||||
<trans-unit id="admin" xml:space="preserve">
|
||||
<source>admin</source>
|
||||
<target>admin</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
<note>member role</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="audio call (not e2e encrypted)" xml:space="preserve">
|
||||
<source>audio call (not e2e encrypted)</source>
|
||||
@@ -2924,7 +3019,13 @@ SimpleX servers cannot see your profile.</target>
|
||||
<trans-unit id="member" xml:space="preserve">
|
||||
<source>member</source>
|
||||
<target>member</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
<note>member role</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="member %@ role: %@" xml:space="preserve">
|
||||
<source>member %1$@ role: %2$@</source>
|
||||
<target>member %1$@ role: %2$@</target>
|
||||
<note>rcv group event chat item
|
||||
snd group event chat item</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="member connected" xml:space="preserve">
|
||||
<source>connected</source>
|
||||
@@ -2946,6 +3047,11 @@ SimpleX servers cannot see your profile.</target>
|
||||
<target>new message</target>
|
||||
<note>notification</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="no" xml:space="preserve">
|
||||
<source>no</source>
|
||||
<target>no</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="no e2e encryption" xml:space="preserve">
|
||||
<source>no e2e encryption</source>
|
||||
<target>no e2e encryption</target>
|
||||
@@ -2959,7 +3065,7 @@ SimpleX servers cannot see your profile.</target>
|
||||
<trans-unit id="owner" xml:space="preserve">
|
||||
<source>owner</source>
|
||||
<target>owner</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
<note>member role</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="peer-to-peer" xml:space="preserve">
|
||||
<source>peer-to-peer</source>
|
||||
@@ -3101,6 +3207,12 @@ SimpleX servers cannot see your profile.</target>
|
||||
<target>you: </target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="your role: %@" xml:space="preserve">
|
||||
<source>your role: %@</source>
|
||||
<target>your role: %@</target>
|
||||
<note>rcv group event chat item
|
||||
snd group event chat item</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="~strike~" xml:space="preserve">
|
||||
<source>\~strike~</source>
|
||||
<target>\~strike~</target>
|
||||
|
||||
@@ -92,6 +92,11 @@
|
||||
<target>Членов группы: %lld</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="%lld second(s)" xml:space="preserve">
|
||||
<source>%lld second(s)</source>
|
||||
<target>%lld секунд</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="%lldk" xml:space="preserve">
|
||||
<source>%lldk</source>
|
||||
<target>%lldk</target>
|
||||
@@ -172,6 +177,21 @@
|
||||
<target>, </target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="1 day" xml:space="preserve">
|
||||
<source>1 day</source>
|
||||
<target>1 день</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="1 month" xml:space="preserve">
|
||||
<source>1 month</source>
|
||||
<target>1 месяц</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="1 week" xml:space="preserve">
|
||||
<source>1 week</source>
|
||||
<target>1 неделю</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="6" xml:space="preserve">
|
||||
<source>6</source>
|
||||
<target>6</target>
|
||||
@@ -333,11 +353,26 @@
|
||||
<target>Невозможно получить файл</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Change" xml:space="preserve">
|
||||
<source>Change</source>
|
||||
<target>Поменять</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Change database passphrase?" xml:space="preserve">
|
||||
<source>Change database passphrase?</source>
|
||||
<target>Поменять пароль базы данных?</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Change member role?" xml:space="preserve">
|
||||
<source>Change member role?</source>
|
||||
<target>Поменять роль члена группы?</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Change role" xml:space="preserve">
|
||||
<source>Change role</source>
|
||||
<target>Поменять роль</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Chat archive" xml:space="preserve">
|
||||
<source>Chat archive</source>
|
||||
<target>Архив чата</target>
|
||||
@@ -588,6 +623,11 @@
|
||||
<target>Тёмная</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Data" xml:space="preserve">
|
||||
<source>Data</source>
|
||||
<target>Данные</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Database ID" xml:space="preserve">
|
||||
<source>Database ID</source>
|
||||
<target>ID базы данных</target>
|
||||
@@ -761,6 +801,16 @@
|
||||
<target>Удалить сообщение?</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Delete messages" xml:space="preserve">
|
||||
<source>Delete messages</source>
|
||||
<target>Удалить сообщения</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Delete messages after" xml:space="preserve">
|
||||
<source>Delete messages after</source>
|
||||
<target>Удалять сообщения через</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Delete old database" xml:space="preserve">
|
||||
<source>Delete old database</source>
|
||||
<target>Удалить предыдущую версию данных</target>
|
||||
@@ -856,6 +906,11 @@
|
||||
<target>Включить TCP keep-alive</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Enable automatic message deletion?" xml:space="preserve">
|
||||
<source>Enable automatic message deletion?</source>
|
||||
<target>Включить автоматическое удаление сообщений?</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Enable instant notifications?" xml:space="preserve">
|
||||
<source>Enable instant notifications?</source>
|
||||
<target>Включить мгновенные уведомления?</target>
|
||||
@@ -936,6 +991,16 @@
|
||||
<target>Ошибка при добавлении членов группы</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Error changing role" xml:space="preserve">
|
||||
<source>Error changing role</source>
|
||||
<target>Ошибка при изменении роли</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Error changing setting" xml:space="preserve">
|
||||
<source>Error changing setting</source>
|
||||
<target>Ошибка при изменении настройки</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Error creating address" xml:space="preserve">
|
||||
<source>Error creating address</source>
|
||||
<target>Ошибка при создании адреса</target>
|
||||
@@ -1001,6 +1066,11 @@
|
||||
<target>Ошибка при получении файла</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Error removing member" xml:space="preserve">
|
||||
<source>Error removing member</source>
|
||||
<target>Ошибка при удалении члена группы</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Error saving ICE servers" xml:space="preserve">
|
||||
<source>Error saving ICE servers</source>
|
||||
<target>Ошибка при сохранении ICE серверов</target>
|
||||
@@ -1443,6 +1513,16 @@ We will be adding server redundancy to prevent lost messages.</source>
|
||||
<target>Член группы</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Member role will be changed to "%@". All group members will be notified." xml:space="preserve">
|
||||
<source>Member role will be changed to "%@". All group members will be notified.</source>
|
||||
<target>Роль члена группы будет изменена на "%@". Все члены группы получат сообщение.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Member role will be changed to "%@". The member will receive a new invitation." xml:space="preserve">
|
||||
<source>Member role will be changed to "%@". The member will receive a new invitation.</source>
|
||||
<target>Роль члена группы будет изменена на "%@". Будет отправлено новое приглашение.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Member will be removed from group - this cannot be undone!" xml:space="preserve">
|
||||
<source>Member will be removed from group - this cannot be undone!</source>
|
||||
<target>Член группы будет удален - это действие нельзя отменить!</target>
|
||||
@@ -1686,7 +1766,7 @@ We will be adding server redundancy to prevent lost messages.</source>
|
||||
<trans-unit id="Please check your network connection and try again." xml:space="preserve">
|
||||
<source>Please check your network connection and try again.</source>
|
||||
<target>Пожалуйста, проверьте ваше соединение с сетью и попробуйте еще раз.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
<note>alert message</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Please enter correct current passphrase." xml:space="preserve">
|
||||
<source>Please enter correct current passphrase.</source>
|
||||
@@ -1863,6 +1943,11 @@ We will be adding server redundancy to prevent lost messages.</source>
|
||||
<target>Отменить изменения</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Role" xml:space="preserve">
|
||||
<source>Role</source>
|
||||
<target>Роль</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Run chat" xml:space="preserve">
|
||||
<source>Run chat</source>
|
||||
<target>Запустить chat</target>
|
||||
@@ -2013,6 +2098,11 @@ We will be adding server redundancy to prevent lost messages.</source>
|
||||
<target>Поделиться ссылкой-приглашением</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Shared one-time link" xml:space="preserve">
|
||||
<source>Shared one-time link</source>
|
||||
<target>Одноразовая ссылка-приглашение</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Show preview" xml:space="preserve">
|
||||
<source>Show preview</source>
|
||||
<target>Показывать уведомления</target>
|
||||
@@ -2213,6 +2303,11 @@ We will be adding server redundancy to prevent lost messages.</source>
|
||||
<target>Это действие нельзя отменить — все полученные и отправленные файлы будут удалены. Изображения останутся в низком разрешении.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="This action cannot be undone - the messages sent and received earlier than selected will be deleted. It may take several minutes." xml:space="preserve">
|
||||
<source>This action cannot be undone - the messages sent and received earlier than selected will be deleted. It may take several minutes.</source>
|
||||
<target>Это действие нельзя отменить — все сообщения, отправленные или полученные раньше чем выбрано, будут удалены. Это может занять несколько минут.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="This action cannot be undone - your profile, contacts, messages and files will be irreversibly lost." xml:space="preserve">
|
||||
<source>This action cannot be undone - your profile, contacts, messages and files will be irreversibly lost.</source>
|
||||
<target>Это действие нельзя отменить — ваш профиль, контакты, сообщения и файлы будут безвозвратно утеряны.</target>
|
||||
@@ -2694,7 +2789,7 @@ SimpleX серверы не могут получить доступ к ваше
|
||||
<trans-unit id="admin" xml:space="preserve">
|
||||
<source>admin</source>
|
||||
<target>админ</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
<note>member role</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="audio call (not e2e encrypted)" xml:space="preserve">
|
||||
<source>audio call (not e2e encrypted)</source>
|
||||
@@ -2924,7 +3019,13 @@ SimpleX серверы не могут получить доступ к ваше
|
||||
<trans-unit id="member" xml:space="preserve">
|
||||
<source>member</source>
|
||||
<target>член группы</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
<note>member role</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="member %@ role: %@" xml:space="preserve">
|
||||
<source>member %1$@ role: %2$@</source>
|
||||
<target>роль %1$@: %2$@</target>
|
||||
<note>rcv group event chat item
|
||||
snd group event chat item</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="member connected" xml:space="preserve">
|
||||
<source>connected</source>
|
||||
@@ -2946,6 +3047,11 @@ SimpleX серверы не могут получить доступ к ваше
|
||||
<target>новое сообщение</target>
|
||||
<note>notification</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="no" xml:space="preserve">
|
||||
<source>no</source>
|
||||
<target>нет</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="no e2e encryption" xml:space="preserve">
|
||||
<source>no e2e encryption</source>
|
||||
<target>нет e2e шифрования</target>
|
||||
@@ -2959,7 +3065,7 @@ SimpleX серверы не могут получить доступ к ваше
|
||||
<trans-unit id="owner" xml:space="preserve">
|
||||
<source>owner</source>
|
||||
<target>владелец</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
<note>member role</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="peer-to-peer" xml:space="preserve">
|
||||
<source>peer-to-peer</source>
|
||||
@@ -3101,6 +3207,12 @@ SimpleX серверы не могут получить доступ к ваше
|
||||
<target>вы: </target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="your role: %@" xml:space="preserve">
|
||||
<source>your role: %@</source>
|
||||
<target>ваша роль: %@</target>
|
||||
<note>rcv group event chat item
|
||||
snd group event chat item</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="~strike~" xml:space="preserve">
|
||||
<source>\~strike~</source>
|
||||
<target>\~зачеркнуть~</target>
|
||||
|
||||
@@ -38,7 +38,7 @@ public enum ChatCommand {
|
||||
case newGroup(groupProfile: GroupProfile)
|
||||
case apiAddMember(groupId: Int64, contactId: Int64, memberRole: GroupMemberRole)
|
||||
case apiJoinGroup(groupId: Int64)
|
||||
// case apiMemberRole(groupId: Int64, memberId: Int64, memberRole: GroupMemberRole)
|
||||
case apiMemberRole(groupId: Int64, memberId: Int64, memberRole: GroupMemberRole)
|
||||
case apiRemoveMember(groupId: Int64, memberId: Int64)
|
||||
case apiLeaveGroup(groupId: Int64)
|
||||
case apiListMembers(groupId: Int64)
|
||||
@@ -109,6 +109,7 @@ public enum ChatCommand {
|
||||
case let .newGroup(groupProfile): return "/_group \(encodeJSON(groupProfile))"
|
||||
case let .apiAddMember(groupId, contactId, memberRole): return "/_add #\(groupId) \(contactId) \(memberRole)"
|
||||
case let .apiJoinGroup(groupId): return "/_join #\(groupId)"
|
||||
case let .apiMemberRole(groupId, memberId, memberRole): return "/_member role #\(groupId) \(memberId) \(memberRole.rawValue)"
|
||||
case let .apiRemoveMember(groupId, memberId): return "/_remove #\(groupId) \(memberId)"
|
||||
case let .apiLeaveGroup(groupId): return "/_leave #\(groupId)"
|
||||
case let .apiListMembers(groupId): return "/_members #\(groupId)"
|
||||
@@ -178,6 +179,7 @@ public enum ChatCommand {
|
||||
case .newGroup: return "newGroup"
|
||||
case .apiAddMember: return "apiAddMember"
|
||||
case .apiJoinGroup: return "apiJoinGroup"
|
||||
case .apiMemberRole: return "apiMemberRole"
|
||||
case .apiRemoveMember: return "apiRemoveMember"
|
||||
case .apiLeaveGroup: return "apiLeaveGroup"
|
||||
case .apiListMembers: return "apiListMembers"
|
||||
@@ -312,6 +314,8 @@ public enum ChatResponse: Decodable, Error {
|
||||
case receivedGroupInvitation(groupInfo: GroupInfo, contact: Contact, memberRole: GroupMemberRole)
|
||||
case groupDeletedUser(groupInfo: GroupInfo)
|
||||
case joinedGroupMemberConnecting(groupInfo: GroupInfo, hostMember: GroupMember, member: GroupMember)
|
||||
case memberRole(groupInfo: GroupInfo, byMember: GroupMember, member: GroupMember, fromRole: GroupMemberRole, toRole: GroupMemberRole)
|
||||
case memberRoleUser(groupInfo: GroupInfo, member: GroupMember, fromRole: GroupMemberRole, toRole: GroupMemberRole)
|
||||
case deletedMemberUser(groupInfo: GroupInfo, member: GroupMember)
|
||||
case deletedMember(groupInfo: GroupInfo, byMember: GroupMember, deletedMember: GroupMember)
|
||||
case leftMember(groupInfo: GroupInfo, member: GroupMember)
|
||||
@@ -406,6 +410,8 @@ public enum ChatResponse: Decodable, Error {
|
||||
case .receivedGroupInvitation: return "receivedGroupInvitation"
|
||||
case .groupDeletedUser: return "groupDeletedUser"
|
||||
case .joinedGroupMemberConnecting: return "joinedGroupMemberConnecting"
|
||||
case .memberRole: return "memberRole"
|
||||
case .memberRoleUser: return "memberRoleUser"
|
||||
case .deletedMemberUser: return "deletedMemberUser"
|
||||
case .deletedMember: return "deletedMember"
|
||||
case .leftMember: return "leftMember"
|
||||
@@ -501,6 +507,8 @@ public enum ChatResponse: Decodable, Error {
|
||||
case let .receivedGroupInvitation(groupInfo, contact, memberRole): return "groupInfo: \(groupInfo)\ncontact: \(contact)\nmemberRole: \(memberRole)"
|
||||
case let .groupDeletedUser(groupInfo): return String(describing: groupInfo)
|
||||
case let .joinedGroupMemberConnecting(groupInfo, hostMember, member): return "groupInfo: \(groupInfo)\nhostMember: \(hostMember)\nmember: \(member)"
|
||||
case let .memberRole(groupInfo, byMember, member, fromRole, toRole): return "groupInfo: \(groupInfo)\nbyMember: \(byMember)\nmember: \(member)\nfromRole: \(fromRole)\ntoRole: \(toRole)"
|
||||
case let .memberRoleUser(groupInfo, member, fromRole, toRole): return "groupInfo: \(groupInfo)\nmember: \(member)\nfromRole: \(fromRole)\ntoRole: \(toRole)"
|
||||
case let .deletedMemberUser(groupInfo, member): return "groupInfo: \(groupInfo)\nmember: \(member)"
|
||||
case let .deletedMember(groupInfo, byMember, deletedMember): return "groupInfo: \(groupInfo)\nbyMember: \(byMember)\ndeletedMember: \(deletedMember)"
|
||||
case let .leftMember(groupInfo, member): return "groupInfo: \(groupInfo)\nmember: \(member)"
|
||||
|
||||
@@ -669,10 +669,16 @@ public struct GroupMember: Identifiable, Decodable {
|
||||
}
|
||||
}
|
||||
|
||||
public func canBeRemoved(membership: GroupMember) -> Bool {
|
||||
let userRole = membership.memberRole
|
||||
public func canBeRemoved(groupInfo: GroupInfo) -> Bool {
|
||||
let userRole = groupInfo.membership.memberRole
|
||||
return memberStatus != .memRemoved && memberStatus != .memLeft
|
||||
&& userRole >= .admin && userRole >= memberRole && membership.memberCurrent
|
||||
&& userRole >= .admin && userRole >= memberRole && groupInfo.membership.memberCurrent
|
||||
}
|
||||
|
||||
public func canChangeRoleTo(groupInfo: GroupInfo) -> [GroupMemberRole]? {
|
||||
if !canBeRemoved(groupInfo: groupInfo) { return nil }
|
||||
let userRole = groupInfo.membership.memberRole
|
||||
return GroupMemberRole.allCases.filter { $0 <= userRole }
|
||||
}
|
||||
|
||||
public var memberIncognito: Bool {
|
||||
@@ -702,11 +708,11 @@ public enum GroupMemberRole: String, Identifiable, CaseIterable, Comparable, Dec
|
||||
|
||||
public var id: Self { self }
|
||||
|
||||
public var text: LocalizedStringKey {
|
||||
public var text: String {
|
||||
switch self {
|
||||
case .member: return "member"
|
||||
case .admin: return "admin"
|
||||
case .owner: return "owner"
|
||||
case .member: return NSLocalizedString("member", comment: "member role")
|
||||
case .admin: return NSLocalizedString("admin", comment: "member role")
|
||||
case .owner: return NSLocalizedString("owner", comment: "member role")
|
||||
}
|
||||
}
|
||||
|
||||
@@ -898,6 +904,8 @@ public struct ChatItem: Identifiable, Decodable {
|
||||
switch event {
|
||||
case .groupUpdated: return true
|
||||
case .memberConnected: return true
|
||||
case .memberRole: return true
|
||||
case .userRole: return false
|
||||
case .userDeleted: return false
|
||||
case .groupDeleted: return false
|
||||
case .memberAdded: return false
|
||||
@@ -1430,6 +1438,8 @@ public enum RcvGroupEvent: Decodable {
|
||||
case memberAdded(groupMemberId: Int64, profile: Profile)
|
||||
case memberConnected
|
||||
case memberLeft
|
||||
case memberRole(groupMemberId: Int64, profile: Profile, role: GroupMemberRole)
|
||||
case userRole(role: GroupMemberRole)
|
||||
case memberDeleted(groupMemberId: Int64, profile: Profile)
|
||||
case userDeleted
|
||||
case groupDeleted
|
||||
@@ -1441,6 +1451,10 @@ public enum RcvGroupEvent: Decodable {
|
||||
return String.localizedStringWithFormat(NSLocalizedString("invited %@", comment: "rcv group event chat item"), profile.profileViewName)
|
||||
case .memberConnected: return NSLocalizedString("member connected", comment: "rcv group event chat item")
|
||||
case .memberLeft: return NSLocalizedString("left", comment: "rcv group event chat item")
|
||||
case let .memberRole(_, profile, role):
|
||||
return String.localizedStringWithFormat(NSLocalizedString("member %@ role: %@", comment: "rcv group event chat item"), profile.profileViewName, role.text)
|
||||
case let .userRole(role):
|
||||
return String.localizedStringWithFormat(NSLocalizedString("your role: %@", comment: "rcv group event chat item"), role.text)
|
||||
case let .memberDeleted(_, profile):
|
||||
return String.localizedStringWithFormat(NSLocalizedString("removed %@", comment: "rcv group event chat item"), profile.profileViewName)
|
||||
case .userDeleted: return NSLocalizedString("removed you", comment: "rcv group event chat item")
|
||||
@@ -1451,12 +1465,18 @@ public enum RcvGroupEvent: Decodable {
|
||||
}
|
||||
|
||||
public enum SndGroupEvent: Decodable {
|
||||
case memberRole(groupMemberId: Int64, profile: Profile, role: GroupMemberRole)
|
||||
case userRole(role: GroupMemberRole)
|
||||
case memberDeleted(groupMemberId: Int64, profile: Profile)
|
||||
case userLeft
|
||||
case groupUpdated(groupProfile: GroupProfile)
|
||||
|
||||
var text: String {
|
||||
switch self {
|
||||
case let .memberRole(_, profile, role):
|
||||
return String.localizedStringWithFormat(NSLocalizedString("member %@ role: %@", comment: "snd group event chat item"), profile.profileViewName, role.text)
|
||||
case let .userRole(role):
|
||||
return String.localizedStringWithFormat(NSLocalizedString("your role: %@", comment: "snd group event chat item"), role.text)
|
||||
case let .memberDeleted(_, profile):
|
||||
return String.localizedStringWithFormat(NSLocalizedString("you removed %@", comment: "snd group event chat item"), profile.profileViewName)
|
||||
case .userLeft: return NSLocalizedString("you left", comment: "snd group event chat item")
|
||||
|
||||
@@ -103,6 +103,9 @@
|
||||
/* No comment provided by engineer. */
|
||||
"%lld members" = "%lld Mitglieder";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"%lld second(s)" = "*** %lld second(s)";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"%lldk" = "%lldk";
|
||||
|
||||
@@ -112,6 +115,15 @@
|
||||
/* No comment provided by engineer. */
|
||||
"~strike~" = "\\~durchstreichen~";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"1 day" = "*** 1 day";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"1 month" = "*** 1 month";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"1 week" = "*** 1 week";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"6" = "6";
|
||||
|
||||
@@ -152,7 +164,7 @@
|
||||
/* call status */
|
||||
"accepted call" = "Anruf angenommen";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
/* member role */
|
||||
"admin" = "Admin";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
@@ -236,9 +248,18 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Cannot receive file" = "Datei kann nicht empfangen werden";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Change" = "*** Change";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Change database passphrase?" = "Datenbank-Passwort ändern?";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Change member role?" = "*** Change member role?";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Change role" = "*** Change role";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Chat archive" = "Datenbank Archiv";
|
||||
|
||||
@@ -437,6 +458,9 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Dark" = "Dunkel";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Data" = "*** Data";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Database encrypted!" = "Datenbank verschlüsselt!";
|
||||
|
||||
@@ -536,6 +560,12 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Delete message?" = "Nachricht löschen?";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Delete messages" = "*** Delete messages";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Delete messages after" = "*** Delete messages after";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Delete old database" = "Alte Datenbank löschen";
|
||||
|
||||
@@ -602,6 +632,9 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Enable" = "Aktivieren";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Enable automatic message deletion?" = "*** Enable automatic message deletion?";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Enable instant notifications?" = "Sofortige Benachrichtigungen aktivieren?";
|
||||
|
||||
@@ -665,6 +698,12 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Error adding member(s)" = "Fehler beim Hinzufügen von Mitgliedern";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Error changing role" = "*** Error changing role";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Error changing setting" = "*** Error changing setting";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Error creating address" = "Fehler beim Erstellen der Adresse";
|
||||
|
||||
@@ -704,6 +743,9 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Error receiving file" = "Fehler beim Empfangen der Datei";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Error removing member" = "*** Error removing member";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Error saving group profile" = "Fehler beim Speichern des Gruppenprofils";
|
||||
|
||||
@@ -1001,15 +1043,25 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Markdown in messages" = "Markdowns in Nachrichten";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
/* member role */
|
||||
"member" = "Mitglied";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Member" = "Mitglied";
|
||||
|
||||
/* rcv group event chat item
|
||||
snd group event chat item */
|
||||
"member %@ role: %@" = "*** member %1$@ role: %2$@";
|
||||
|
||||
/* rcv group event chat item */
|
||||
"member connected" = "verbunden";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Member role will be changed to \"%@\". All group members will be notified." = "*** Member role will be changed to \"%@\". All group members will be notified.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Member role will be changed to \"%@\". The member will receive a new invitation." = "*** Member role will be changed to \"%@\". The member will receive a new invitation.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Member will be removed from group - this cannot be undone!" = "Das Mitglied wird aus der Gruppe entfernt - dies kann nicht rückgängig gemacht werden!";
|
||||
|
||||
@@ -1076,6 +1128,9 @@
|
||||
/* No comment provided by engineer. */
|
||||
"New passphrase…" = "Neues Passwort…";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"no" = "*** nein";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"No" = "Nein";
|
||||
|
||||
@@ -1145,7 +1200,7 @@
|
||||
/* No comment provided by engineer. */
|
||||
"or chat with the developers" = "oder chatten Sie mit den Entwicklern";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
/* member role */
|
||||
"owner" = "Eigentümer";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
@@ -1175,7 +1230,7 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Please check that you used the correct link or ask your contact to send you another one." = "Überprüfen Sie bitte, ob Sie den richtigen Link genutzt haben oder bitten Sie Ihren Kontakt nochmal darum, Ihnen einen Link zuzusenden.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
/* alert message */
|
||||
"Please check your network connection and try again." = "Bitte überprüfen Sie Ihre Netzwerkverbindung und versuchen Sie es erneut.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
@@ -1301,6 +1356,9 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Revert" = "Zurückkehren";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Role" = "*** Role";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Run chat" = "Chat starten";
|
||||
|
||||
@@ -1391,6 +1449,9 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Share one-time invitation link" = "Einmal-Einladungslink teilen";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Shared one-time link" = "*** Shared one-time link";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Show preview" = "Vorschau anzeigen";
|
||||
|
||||
@@ -1523,6 +1584,9 @@
|
||||
/* 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." = "Diese Aktion kann nicht rückgängig gemacht werden - Alle empfangenen und gesendeten Dateien und Medien werden gelöscht. Bilder mit niedriger Auflösung bleiben erhalten.";
|
||||
|
||||
/* 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." = "*** This action cannot be undone - the messages sent and received earlier than selected will be deleted. It may take several minutes.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"This action cannot be undone - your profile, contacts, messages and files will be irreversibly lost." = "Diese Aktion kann nicht rückgängig gemacht werden - Ihr Profil und Ihre Kontakte, Nachrichten und Dateien gehen unwiderruflich verloren.";
|
||||
|
||||
@@ -1832,6 +1896,10 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Your random profile" = "Ihr Zufallsprofil";
|
||||
|
||||
/* rcv group event chat item
|
||||
snd group event chat item */
|
||||
"your role: %@" = "*** your role: %@";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Your settings" = "Ihre Einstellungen";
|
||||
|
||||
|
||||
@@ -103,6 +103,9 @@
|
||||
/* No comment provided by engineer. */
|
||||
"%lld members" = "Членов группы: %lld";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"%lld second(s)" = "%lld секунд";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"%lldk" = "%lldk";
|
||||
|
||||
@@ -112,6 +115,15 @@
|
||||
/* No comment provided by engineer. */
|
||||
"~strike~" = "\\~зачеркнуть~";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"1 day" = "1 день";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"1 month" = "1 месяц";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"1 week" = "1 неделю";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"6" = "6";
|
||||
|
||||
@@ -152,7 +164,7 @@
|
||||
/* call status */
|
||||
"accepted call" = " принятый звонок";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
/* member role */
|
||||
"admin" = "админ";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
@@ -236,9 +248,18 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Cannot receive file" = "Невозможно получить файл";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Change" = "Поменять";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Change database passphrase?" = "Поменять пароль базы данных?";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Change member role?" = "Поменять роль члена группы?";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Change role" = "Поменять роль";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Chat archive" = "Архив чата";
|
||||
|
||||
@@ -437,6 +458,9 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Dark" = "Тёмная";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Data" = "Данные";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Database encrypted!" = "База данных зашифрована!";
|
||||
|
||||
@@ -536,6 +560,12 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Delete message?" = "Удалить сообщение?";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Delete messages" = "Удалить сообщения";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Delete messages after" = "Удалять сообщения через";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Delete old database" = "Удалить предыдущую версию данных";
|
||||
|
||||
@@ -602,6 +632,9 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Enable" = "Включить";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Enable automatic message deletion?" = "Включить автоматическое удаление сообщений?";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Enable instant notifications?" = "Включить мгновенные уведомления?";
|
||||
|
||||
@@ -665,6 +698,12 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Error adding member(s)" = "Ошибка при добавлении членов группы";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Error changing role" = "Ошибка при изменении роли";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Error changing setting" = "Ошибка при изменении настройки";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Error creating address" = "Ошибка при создании адреса";
|
||||
|
||||
@@ -704,6 +743,9 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Error receiving file" = "Ошибка при получении файла";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Error removing member" = "Ошибка при удалении члена группы";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Error saving group profile" = "Ошибка при сохранении профиля группы";
|
||||
|
||||
@@ -1001,15 +1043,25 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Markdown in messages" = "Форматирование сообщений";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
/* member role */
|
||||
"member" = "член группы";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Member" = "Член группы";
|
||||
|
||||
/* rcv group event chat item
|
||||
snd group event chat item */
|
||||
"member %@ role: %@" = "роль %1$@: %2$@";
|
||||
|
||||
/* rcv group event chat item */
|
||||
"member connected" = "соединен(а)";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Member role will be changed to \"%@\". All group members will be notified." = "Роль члена группы будет изменена на \"%@\". Все члены группы получат сообщение.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Member role will be changed to \"%@\". The member will receive a new invitation." = "Роль члена группы будет изменена на \"%@\". Будет отправлено новое приглашение.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Member will be removed from group - this cannot be undone!" = "Член группы будет удален - это действие нельзя отменить!";
|
||||
|
||||
@@ -1076,6 +1128,9 @@
|
||||
/* No comment provided by engineer. */
|
||||
"New passphrase…" = "Новый пароль…";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"no" = "нет";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"No" = "Нет";
|
||||
|
||||
@@ -1145,7 +1200,7 @@
|
||||
/* No comment provided by engineer. */
|
||||
"or chat with the developers" = "или соединитесь с разработчиками";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
/* member role */
|
||||
"owner" = "владелец";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
@@ -1175,7 +1230,7 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Please check that you used the correct link or ask your contact to send you another one." = "Пожалуйста, проверьте, что вы использовали правильную ссылку или попросите, чтобы ваш контакт отправил вам другую ссылку.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
/* alert message */
|
||||
"Please check your network connection and try again." = "Пожалуйста, проверьте ваше соединение с сетью и попробуйте еще раз.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
@@ -1301,6 +1356,9 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Revert" = "Отменить изменения";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Role" = "Роль";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Run chat" = "Запустить chat";
|
||||
|
||||
@@ -1391,6 +1449,9 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Share one-time invitation link" = "Поделиться ссылкой-приглашением";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Shared one-time link" = "Одноразовая ссылка-приглашение";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Show preview" = "Показывать уведомления";
|
||||
|
||||
@@ -1523,6 +1584,9 @@
|
||||
/* 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." = "Это действие нельзя отменить — все полученные и отправленные файлы будут удалены. Изображения останутся в низком разрешении.";
|
||||
|
||||
/* 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." = "Это действие нельзя отменить — все сообщения, отправленные или полученные раньше чем выбрано, будут удалены. Это может занять несколько минут.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"This action cannot be undone - your profile, contacts, messages and files will be irreversibly lost." = "Это действие нельзя отменить — ваш профиль, контакты, сообщения и файлы будут безвозвратно утеряны.";
|
||||
|
||||
@@ -1832,6 +1896,10 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Your random profile" = "Ваш случайный профиль";
|
||||
|
||||
/* rcv group event chat item
|
||||
snd group event chat item */
|
||||
"your role: %@" = "ваша роль: %@";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Your settings" = "Настройки";
|
||||
|
||||
|
||||
@@ -35,7 +35,7 @@ import Simplex.Chat.Types
|
||||
import Simplex.Chat.Util (safeDecodeUtf8)
|
||||
import Simplex.Messaging.Agent.Protocol (AgentErrorType, AgentMsgId, MsgErrorType (..), MsgMeta (..))
|
||||
import Simplex.Messaging.Encoding.String
|
||||
import Simplex.Messaging.Parsers (dropPrefix, enumJSON, fromTextField_, singleFieldJSON, sumTypeJSON, fstToLower)
|
||||
import Simplex.Messaging.Parsers (dropPrefix, enumJSON, fromTextField_, fstToLower, singleFieldJSON, sumTypeJSON)
|
||||
import Simplex.Messaging.Protocol (MsgBody)
|
||||
import Simplex.Messaging.Util (eitherToMaybe, (<$?>))
|
||||
|
||||
|
||||
Reference in New Issue
Block a user