ui: operator information (#5343)

* ios: operator information

* android, desktop: operator information

* move texts, simplify navigation
This commit is contained in:
Evgeny 2024-12-07 14:41:54 +00:00 committed by GitHub
parent cbb3da8f83
commit fe0d811bf7
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
43 changed files with 254 additions and 273 deletions

View file

@ -62,7 +62,6 @@ struct ChooseServerOperators: View {
var onboarding: Bool var onboarding: Bool
@State private var serverOperators: [ServerOperator] = [] @State private var serverOperators: [ServerOperator] = []
@State private var selectedOperatorIds = Set<Int64>() @State private var selectedOperatorIds = Set<Int64>()
@State private var reviewConditionsNavLinkActive = false
@State private var sheetItem: ChooseServerOperatorsSheet? = nil @State private var sheetItem: ChooseServerOperatorsSheet? = nil
@State private var notificationsModeNavLinkActive = false @State private var notificationsModeNavLinkActive = false
@State private var justOpened = true @State private var justOpened = true
@ -79,7 +78,7 @@ struct ChooseServerOperators: View {
.frame(maxWidth: .infinity, alignment: .center) .frame(maxWidth: .infinity, alignment: .center)
if onboarding { if onboarding {
title.padding(.top, 50) title.padding(.top, 25)
} else { } else {
title title
} }
@ -92,11 +91,14 @@ struct ChooseServerOperators: View {
ForEach(serverOperators) { srvOperator in ForEach(serverOperators) { srvOperator in
operatorCheckView(srvOperator) operatorCheckView(srvOperator)
} }
Text("You can configure servers via settings.") VStack {
.font(.footnote) Text("SimpleX Chat and Flux made an agreement to include Flux-operated servers into the app.").padding(.bottom, 8)
.multilineTextAlignment(.center) Text("You can configure servers via settings.")
.frame(maxWidth: .infinity, alignment: .center) }
.padding(.horizontal, 32) .font(.footnote)
.multilineTextAlignment(.center)
.frame(maxWidth: .infinity, alignment: .center)
.padding(.horizontal, 16)
Spacer() Spacer()
@ -166,8 +168,9 @@ struct ChooseServerOperators: View {
.modifier(ThemedBackground(grouped: true)) .modifier(ThemedBackground(grouped: true))
} }
} }
.frame(maxHeight: .infinity, alignment: .top)
} }
.frame(maxHeight: .infinity) .frame(maxHeight: .infinity, alignment: .top)
.padding(onboarding ? 25 : 16) .padding(onboarding ? 25 : 16)
} }
@ -214,23 +217,15 @@ struct ChooseServerOperators: View {
} }
private func reviewConditionsButton() -> some View { private func reviewConditionsButton() -> some View {
ZStack { NavigationLink("Review conditions") {
Button { reviewConditionsView()
reviewConditionsNavLinkActive = true .navigationTitle("Conditions of use")
} label: { .navigationBarTitleDisplayMode(.large)
Text("Review conditions") .toolbar { ToolbarItem(placement: .navigationBarTrailing, content: conditionsLinkButton) }
} .modifier(ThemedBackground(grouped: true))
.buttonStyle(OnboardingButtonStyle(isDisabled: selectedOperatorIds.isEmpty))
.disabled(selectedOperatorIds.isEmpty)
NavigationLink(isActive: $reviewConditionsNavLinkActive) {
reviewConditionsDestinationView()
} label: {
EmptyView()
}
.frame(width: 1, height: 1)
.hidden()
} }
.buttonStyle(OnboardingButtonStyle(isDisabled: selectedOperatorIds.isEmpty))
.disabled(selectedOperatorIds.isEmpty)
} }
private func setOperatorsButton() -> some View { private func setOperatorsButton() -> some View {
@ -309,20 +304,12 @@ struct ChooseServerOperators: View {
.modifier(ThemedBackground()) .modifier(ThemedBackground())
} }
private func reviewConditionsDestinationView() -> some View {
reviewConditionsView()
.navigationTitle("Conditions of use")
.navigationBarTitleDisplayMode(.large)
.toolbar { ToolbarItem(placement: .navigationBarTrailing, content: conditionsLinkButton) }
.modifier(ThemedBackground(grouped: true))
}
@ViewBuilder private func reviewConditionsView() -> some View { @ViewBuilder private func reviewConditionsView() -> some View {
let operatorsWithConditionsAccepted = ChatModel.shared.conditions.serverOperators.filter { $0.conditionsAcceptance.conditionsAccepted } let operatorsWithConditionsAccepted = ChatModel.shared.conditions.serverOperators.filter { $0.conditionsAcceptance.conditionsAccepted }
let acceptForOperators = selectedOperators.filter { !$0.conditionsAcceptance.conditionsAccepted } let acceptForOperators = selectedOperators.filter { !$0.conditionsAcceptance.conditionsAccepted }
VStack(alignment: .leading, spacing: 20) { VStack(alignment: .leading, spacing: 20) {
if !operatorsWithConditionsAccepted.isEmpty { if !operatorsWithConditionsAccepted.isEmpty {
Text("Conditions are already accepted for following operator(s): **\(operatorsWithConditionsAccepted.map { $0.legalName_ }.joined(separator: ", "))**.") Text("Conditions are already accepted for these operator(s): **\(operatorsWithConditionsAccepted.map { $0.legalName_ }.joined(separator: ", "))**.")
Text("The same conditions will apply to operator(s): **\(acceptForOperators.map { $0.legalName_ }.joined(separator: ", "))**.") Text("The same conditions will apply to operator(s): **\(acceptForOperators.map { $0.legalName_ }.joined(separator: ", "))**.")
} else { } else {
Text("Conditions will be accepted for operator(s): **\(acceptForOperators.map { $0.legalName_ }.joined(separator: ", "))**.") Text("Conditions will be accepted for operator(s): **\(acceptForOperators.map { $0.legalName_ }.joined(separator: ", "))**.")
@ -415,13 +402,12 @@ struct ChooseServerOperatorsInfoView: View {
var body: some View { var body: some View {
NavigationView { NavigationView {
List { List {
VStack(alignment: .leading) { VStack(alignment: .leading, spacing: 12) {
Text("The app protects your privacy by using different operators in each conversation.") Text("The app protects your privacy by using different operators in each conversation.")
.padding(.bottom)
Text("When more than one operator is enabled, none of them has metadata to learn who communicates with whom.") Text("When more than one operator is enabled, none of them has metadata to learn who communicates with whom.")
.padding(.bottom)
Text("For example, if your contact receives messages via a SimpleX Chat server, your app will deliver them via a Flux server.") Text("For example, if your contact receives messages via a SimpleX Chat server, your app will deliver them via a Flux server.")
} }
.fixedSize(horizontal: false, vertical: true)
.listRowBackground(Color.clear) .listRowBackground(Color.clear)
.listRowSeparator(.hidden) .listRowSeparator(.hidden)
.listRowInsets(EdgeInsets(top: 0, leading: 0, bottom: 0, trailing: 0)) .listRowInsets(EdgeInsets(top: 0, leading: 0, bottom: 0, trailing: 0))

View file

@ -136,7 +136,6 @@ struct CreateFirstProfile: View {
.multilineTextAlignment(.center) .multilineTextAlignment(.center)
} }
.frame(maxWidth: .infinity) // Ensures it takes up the full width .frame(maxWidth: .infinity) // Ensures it takes up the full width
.padding(.top, 25)
.padding(.horizontal, 10) .padding(.horizontal, 10)
HStack { HStack {

View file

@ -22,7 +22,7 @@ struct SetNotificationsMode: View {
Text("Push notifications") Text("Push notifications")
.font(.largeTitle) .font(.largeTitle)
.bold() .bold()
.padding(.top, 50) .padding(.top, 25)
infoText() infoText()

View file

@ -331,9 +331,12 @@ struct OperatorInfoView: View {
Text(d) Text(d)
} }
} }
Link(serverOperator.info.website.absoluteString, destination: serverOperator.info.website)
} }
Section { if let selfhost = serverOperator.info.selfhost {
Link("\(serverOperator.info.website)", destination: URL(string: serverOperator.info.website)!) Section {
Link(selfhost.text, destination: selfhost.link)
}
} }
} }
} }
@ -421,7 +424,6 @@ struct SingleOperatorUsageConditionsView: View {
@Binding var userServers: [UserOperatorServers] @Binding var userServers: [UserOperatorServers]
@Binding var serverErrors: [UserServersError] @Binding var serverErrors: [UserServersError]
var operatorIndex: Int var operatorIndex: Int
@State private var usageConditionsNavLinkActive: Bool = false
var body: some View { var body: some View {
viewBody() viewBody()
@ -433,52 +435,45 @@ struct SingleOperatorUsageConditionsView: View {
// In current UI implementation this branch doesn't get shown - as conditions can't be opened from inside operator once accepted // In current UI implementation this branch doesn't get shown - as conditions can't be opened from inside operator once accepted
VStack(alignment: .leading, spacing: 20) { VStack(alignment: .leading, spacing: 20) {
Group { viewHeader()
viewHeader() ConditionsTextView()
ConditionsTextView()
.padding(.bottom)
.padding(.bottom)
}
.padding(.horizontal)
} }
.padding(.bottom)
.padding(.bottom)
.padding(.horizontal)
.frame(maxHeight: .infinity) .frame(maxHeight: .infinity)
} else if !operatorsWithConditionsAccepted.isEmpty { } else if !operatorsWithConditionsAccepted.isEmpty {
NavigationView { NavigationView {
VStack(alignment: .leading, spacing: 20) { VStack(alignment: .leading, spacing: 20) {
Group { viewHeader()
viewHeader() Text("Conditions are already accepted for these operator(s): **\(operatorsWithConditionsAccepted.map { $0.legalName_ }.joined(separator: ", "))**.")
Text("Conditions are already accepted for following operator(s): **\(operatorsWithConditionsAccepted.map { $0.legalName_ }.joined(separator: ", "))**.") Text("The same conditions will apply to operator **\(userServers[operatorIndex].operator_.legalName_)**.")
Text("The same conditions will apply to operator **\(userServers[operatorIndex].operator_.legalName_)**.") conditionsAppliedToOtherOperatorsText()
conditionsAppliedToOtherOperatorsText() Spacer()
usageConditionsNavLinkButton()
Spacer() acceptConditionsButton()
usageConditionsNavLinkButton()
acceptConditionsButton()
.padding(.bottom)
.padding(.bottom)
}
.padding(.horizontal)
} }
.padding(.bottom)
.padding(.bottom)
.padding(.horizontal)
.frame(maxHeight: .infinity) .frame(maxHeight: .infinity)
} }
} else { } else {
VStack(alignment: .leading, spacing: 20) { VStack(alignment: .leading, spacing: 20) {
Group { viewHeader()
viewHeader() Text("To use the servers of **\(userServers[operatorIndex].operator_.legalName_)**, accept conditions of use.")
Text("To use the servers of **\(userServers[operatorIndex].operator_.legalName_)**, accept conditions of use.") conditionsAppliedToOtherOperatorsText()
conditionsAppliedToOtherOperatorsText() ConditionsTextView()
ConditionsTextView() acceptConditionsButton()
acceptConditionsButton() .padding(.bottom)
.padding(.bottom) .padding(.bottom)
.padding(.bottom)
}
.padding(.horizontal)
} }
.padding(.horizontal)
.frame(maxHeight: .infinity) .frame(maxHeight: .infinity)
} }
@ -545,31 +540,16 @@ struct SingleOperatorUsageConditionsView: View {
} }
private func usageConditionsNavLinkButton() -> some View { private func usageConditionsNavLinkButton() -> some View {
ZStack { NavigationLink("View conditions") {
Button { ConditionsTextView()
usageConditionsNavLinkActive = true .padding()
} label: { .navigationTitle("Conditions of use")
Text("View conditions") .navigationBarTitleDisplayMode(.large)
} .toolbar { ToolbarItem(placement: .navigationBarTrailing, content: conditionsLinkButton) }
.modifier(ThemedBackground(grouped: true))
NavigationLink(isActive: $usageConditionsNavLinkActive) {
usageConditionsDestinationView()
} label: {
EmptyView()
}
.frame(width: 1, height: 1)
.hidden()
} }
} .font(.callout)
.frame(maxWidth: .infinity, alignment: .center)
private func usageConditionsDestinationView() -> some View {
ConditionsTextView()
.padding()
.padding(.bottom)
.navigationTitle("Conditions of use")
.navigationBarTitleDisplayMode(.large)
.toolbar { ToolbarItem(placement: .navigationBarTrailing, content: conditionsLinkButton) }
.modifier(ThemedBackground(grouped: true))
} }
} }

View file

@ -1537,8 +1537,8 @@
<source>Conditions are accepted for the operator(s): **%@**.</source> <source>Conditions are accepted for the operator(s): **%@**.</source>
<note>No comment provided by engineer.</note> <note>No comment provided by engineer.</note>
</trans-unit> </trans-unit>
<trans-unit id="Conditions are already accepted for following operator(s): **%@**." xml:space="preserve"> <trans-unit id="Conditions are already accepted for these operator(s): **%@**." xml:space="preserve">
<source>Conditions are already accepted for following operator(s): **%@**.</source> <source>Conditions are already accepted for these operator(s): **%@**.</source>
<note>No comment provided by engineer.</note> <note>No comment provided by engineer.</note>
</trans-unit> </trans-unit>
<trans-unit id="Conditions of use" xml:space="preserve"> <trans-unit id="Conditions of use" xml:space="preserve">
@ -5766,7 +5766,7 @@ Enable in *Network &amp; servers* settings.</source>
<trans-unit id="Save and notify contact" xml:space="preserve"> <trans-unit id="Save and notify contact" xml:space="preserve">
<source>Save and notify contact</source> <source>Save and notify contact</source>
<target>Запази и уведоми контакта</target> <target>Запази и уведоми контакта</target>
<note>No comment provided by engineer.</note> <note>alert button</note>
</trans-unit> </trans-unit>
<trans-unit id="Save and notify group members" xml:space="preserve"> <trans-unit id="Save and notify group members" xml:space="preserve">
<source>Save and notify group members</source> <source>Save and notify group members</source>
@ -6380,6 +6380,10 @@ Enable in *Network &amp; servers* settings.</source>
<target>SimpleX Адрес</target> <target>SimpleX Адрес</target>
<note>No comment provided by engineer.</note> <note>No comment provided by engineer.</note>
</trans-unit> </trans-unit>
<trans-unit id="SimpleX Chat and Flux made an agreement to include Flux-operated servers into the app." xml:space="preserve">
<source>SimpleX Chat and Flux made an agreement to include Flux-operated servers into the app.</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="SimpleX Chat security was audited by Trail of Bits." xml:space="preserve"> <trans-unit id="SimpleX Chat security was audited by Trail of Bits." xml:space="preserve">
<source>SimpleX Chat security was audited by Trail of Bits.</source> <source>SimpleX Chat security was audited by Trail of Bits.</source>
<target>Сигурността на SimpleX Chat беше одитирана от Trail of Bits.</target> <target>Сигурността на SimpleX Chat беше одитирана от Trail of Bits.</target>

View file

@ -1492,8 +1492,8 @@
<source>Conditions are accepted for the operator(s): **%@**.</source> <source>Conditions are accepted for the operator(s): **%@**.</source>
<note>No comment provided by engineer.</note> <note>No comment provided by engineer.</note>
</trans-unit> </trans-unit>
<trans-unit id="Conditions are already accepted for following operator(s): **%@**." xml:space="preserve"> <trans-unit id="Conditions are already accepted for these operator(s): **%@**." xml:space="preserve">
<source>Conditions are already accepted for following operator(s): **%@**.</source> <source>Conditions are already accepted for these operator(s): **%@**.</source>
<note>No comment provided by engineer.</note> <note>No comment provided by engineer.</note>
</trans-unit> </trans-unit>
<trans-unit id="Conditions of use" xml:space="preserve"> <trans-unit id="Conditions of use" xml:space="preserve">
@ -5576,7 +5576,7 @@ Enable in *Network &amp; servers* settings.</source>
<trans-unit id="Save and notify contact" xml:space="preserve"> <trans-unit id="Save and notify contact" xml:space="preserve">
<source>Save and notify contact</source> <source>Save and notify contact</source>
<target>Uložit a upozornit kontakt</target> <target>Uložit a upozornit kontakt</target>
<note>No comment provided by engineer.</note> <note>alert button</note>
</trans-unit> </trans-unit>
<trans-unit id="Save and notify group members" xml:space="preserve"> <trans-unit id="Save and notify group members" xml:space="preserve">
<source>Save and notify group members</source> <source>Save and notify group members</source>
@ -6178,6 +6178,10 @@ Enable in *Network &amp; servers* settings.</source>
<target>SimpleX Adresa</target> <target>SimpleX Adresa</target>
<note>No comment provided by engineer.</note> <note>No comment provided by engineer.</note>
</trans-unit> </trans-unit>
<trans-unit id="SimpleX Chat and Flux made an agreement to include Flux-operated servers into the app." xml:space="preserve">
<source>SimpleX Chat and Flux made an agreement to include Flux-operated servers into the app.</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="SimpleX Chat security was audited by Trail of Bits." xml:space="preserve"> <trans-unit id="SimpleX Chat security was audited by Trail of Bits." xml:space="preserve">
<source>SimpleX Chat security was audited by Trail of Bits.</source> <source>SimpleX Chat security was audited by Trail of Bits.</source>
<target>Zabezpečení SimpleX chatu bylo auditováno společností Trail of Bits.</target> <target>Zabezpečení SimpleX chatu bylo auditováno společností Trail of Bits.</target>

View file

@ -1606,8 +1606,8 @@
<target>Die Nutzungsbedingungen der/des Betreiber(s) werden akzeptiert: **%@**.</target> <target>Die Nutzungsbedingungen der/des Betreiber(s) werden akzeptiert: **%@**.</target>
<note>No comment provided by engineer.</note> <note>No comment provided by engineer.</note>
</trans-unit> </trans-unit>
<trans-unit id="Conditions are already accepted for following operator(s): **%@**." xml:space="preserve"> <trans-unit id="Conditions are already accepted for these operator(s): **%@**." xml:space="preserve">
<source>Conditions are already accepted for following operator(s): **%@**.</source> <source>Conditions are already accepted for these operator(s): **%@**.</source>
<target>Die Nutzungsbedingungen der/des folgenden Betreiber(s) wurden schon akzeptiert: **%@**.</target> <target>Die Nutzungsbedingungen der/des folgenden Betreiber(s) wurden schon akzeptiert: **%@**.</target>
<note>No comment provided by engineer.</note> <note>No comment provided by engineer.</note>
</trans-unit> </trans-unit>
@ -6034,7 +6034,7 @@ Aktivieren Sie es in den *Netzwerk &amp; Server* Einstellungen.</target>
<trans-unit id="Save and notify contact" xml:space="preserve"> <trans-unit id="Save and notify contact" xml:space="preserve">
<source>Save and notify contact</source> <source>Save and notify contact</source>
<target>Speichern und Kontakt benachrichtigen</target> <target>Speichern und Kontakt benachrichtigen</target>
<note>No comment provided by engineer.</note> <note>alert button</note>
</trans-unit> </trans-unit>
<trans-unit id="Save and notify group members" xml:space="preserve"> <trans-unit id="Save and notify group members" xml:space="preserve">
<source>Save and notify group members</source> <source>Save and notify group members</source>
@ -6692,6 +6692,11 @@ Aktivieren Sie es in den *Netzwerk &amp; Server* Einstellungen.</target>
<target>SimpleX-Adresse</target> <target>SimpleX-Adresse</target>
<note>No comment provided by engineer.</note> <note>No comment provided by engineer.</note>
</trans-unit> </trans-unit>
<trans-unit id="SimpleX Chat and Flux made an agreement to include Flux-operated servers into the app." xml:space="preserve">
<source>SimpleX Chat and Flux made an agreement to include Flux-operated servers into the app.</source>
<target>SimpleX-Chat und Flux haben vereinbart, die von Flux betriebenen Server in die App aufzunehmen.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="SimpleX Chat security was audited by Trail of Bits." xml:space="preserve"> <trans-unit id="SimpleX Chat security was audited by Trail of Bits." xml:space="preserve">
<source>SimpleX Chat security was audited by Trail of Bits.</source> <source>SimpleX Chat security was audited by Trail of Bits.</source>
<target>Die Sicherheit von SimpleX Chat wurde von Trail of Bits überprüft.</target> <target>Die Sicherheit von SimpleX Chat wurde von Trail of Bits überprüft.</target>

View file

@ -1617,9 +1617,9 @@
<target>Conditions are accepted for the operator(s): **%@**.</target> <target>Conditions are accepted for the operator(s): **%@**.</target>
<note>No comment provided by engineer.</note> <note>No comment provided by engineer.</note>
</trans-unit> </trans-unit>
<trans-unit id="Conditions are already accepted for following operator(s): **%@**." xml:space="preserve"> <trans-unit id="Conditions are already accepted for these operator(s): **%@**." xml:space="preserve">
<source>Conditions are already accepted for following operator(s): **%@**.</source> <source>Conditions are already accepted for these operator(s): **%@**.</source>
<target>Conditions are already accepted for following operator(s): **%@**.</target> <target>Conditions are already accepted for these operator(s): **%@**.</target>
<note>No comment provided by engineer.</note> <note>No comment provided by engineer.</note>
</trans-unit> </trans-unit>
<trans-unit id="Conditions of use" xml:space="preserve"> <trans-unit id="Conditions of use" xml:space="preserve">
@ -6056,7 +6056,7 @@ Enable in *Network &amp; servers* settings.</target>
<trans-unit id="Save and notify contact" xml:space="preserve"> <trans-unit id="Save and notify contact" xml:space="preserve">
<source>Save and notify contact</source> <source>Save and notify contact</source>
<target>Save and notify contact</target> <target>Save and notify contact</target>
<note>No comment provided by engineer.</note> <note>alert button</note>
</trans-unit> </trans-unit>
<trans-unit id="Save and notify group members" xml:space="preserve"> <trans-unit id="Save and notify group members" xml:space="preserve">
<source>Save and notify group members</source> <source>Save and notify group members</source>
@ -6714,6 +6714,11 @@ Enable in *Network &amp; servers* settings.</target>
<target>SimpleX Address</target> <target>SimpleX Address</target>
<note>No comment provided by engineer.</note> <note>No comment provided by engineer.</note>
</trans-unit> </trans-unit>
<trans-unit id="SimpleX Chat and Flux made an agreement to include Flux-operated servers into the app." xml:space="preserve">
<source>SimpleX Chat and Flux made an agreement to include Flux-operated servers into the app.</source>
<target>SimpleX Chat and Flux made an agreement to include Flux-operated servers into the app.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="SimpleX Chat security was audited by Trail of Bits." xml:space="preserve"> <trans-unit id="SimpleX Chat security was audited by Trail of Bits." xml:space="preserve">
<source>SimpleX Chat security was audited by Trail of Bits.</source> <source>SimpleX Chat security was audited by Trail of Bits.</source>
<target>SimpleX Chat security was audited by Trail of Bits.</target> <target>SimpleX Chat security was audited by Trail of Bits.</target>

View file

@ -1606,8 +1606,8 @@
<target>Las condiciones se han aceptado para el(los) operador(s): **%@**.</target> <target>Las condiciones se han aceptado para el(los) operador(s): **%@**.</target>
<note>No comment provided by engineer.</note> <note>No comment provided by engineer.</note>
</trans-unit> </trans-unit>
<trans-unit id="Conditions are already accepted for following operator(s): **%@**." xml:space="preserve"> <trans-unit id="Conditions are already accepted for these operator(s): **%@**." xml:space="preserve">
<source>Conditions are already accepted for following operator(s): **%@**.</source> <source>Conditions are already accepted for these operator(s): **%@**.</source>
<target>Las condiciones ya se han aceptado para el/los siguiente(s) operador(s): **%@**.</target> <target>Las condiciones ya se han aceptado para el/los siguiente(s) operador(s): **%@**.</target>
<note>No comment provided by engineer.</note> <note>No comment provided by engineer.</note>
</trans-unit> </trans-unit>
@ -6034,7 +6034,7 @@ Actívalo en ajustes de *Servidores y Redes*.</target>
<trans-unit id="Save and notify contact" xml:space="preserve"> <trans-unit id="Save and notify contact" xml:space="preserve">
<source>Save and notify contact</source> <source>Save and notify contact</source>
<target>Guardar y notificar contacto</target> <target>Guardar y notificar contacto</target>
<note>No comment provided by engineer.</note> <note>alert button</note>
</trans-unit> </trans-unit>
<trans-unit id="Save and notify group members" xml:space="preserve"> <trans-unit id="Save and notify group members" xml:space="preserve">
<source>Save and notify group members</source> <source>Save and notify group members</source>
@ -6692,6 +6692,11 @@ Actívalo en ajustes de *Servidores y Redes*.</target>
<target>Dirección SimpleX</target> <target>Dirección SimpleX</target>
<note>No comment provided by engineer.</note> <note>No comment provided by engineer.</note>
</trans-unit> </trans-unit>
<trans-unit id="SimpleX Chat and Flux made an agreement to include Flux-operated servers into the app." xml:space="preserve">
<source>SimpleX Chat and Flux made an agreement to include Flux-operated servers into the app.</source>
<target>Simplex Chat y Flux han acordado incluir servidores operados por Flux en la aplicación</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="SimpleX Chat security was audited by Trail of Bits." xml:space="preserve"> <trans-unit id="SimpleX Chat security was audited by Trail of Bits." xml:space="preserve">
<source>SimpleX Chat security was audited by Trail of Bits.</source> <source>SimpleX Chat security was audited by Trail of Bits.</source>
<target>La seguridad de SimpleX Chat ha sido auditada por Trail of Bits.</target> <target>La seguridad de SimpleX Chat ha sido auditada por Trail of Bits.</target>

View file

@ -1485,8 +1485,8 @@
<source>Conditions are accepted for the operator(s): **%@**.</source> <source>Conditions are accepted for the operator(s): **%@**.</source>
<note>No comment provided by engineer.</note> <note>No comment provided by engineer.</note>
</trans-unit> </trans-unit>
<trans-unit id="Conditions are already accepted for following operator(s): **%@**." xml:space="preserve"> <trans-unit id="Conditions are already accepted for these operator(s): **%@**." xml:space="preserve">
<source>Conditions are already accepted for following operator(s): **%@**.</source> <source>Conditions are already accepted for these operator(s): **%@**.</source>
<note>No comment provided by engineer.</note> <note>No comment provided by engineer.</note>
</trans-unit> </trans-unit>
<trans-unit id="Conditions of use" xml:space="preserve"> <trans-unit id="Conditions of use" xml:space="preserve">
@ -5564,7 +5564,7 @@ Enable in *Network &amp; servers* settings.</source>
<trans-unit id="Save and notify contact" xml:space="preserve"> <trans-unit id="Save and notify contact" xml:space="preserve">
<source>Save and notify contact</source> <source>Save and notify contact</source>
<target>Tallenna ja ilmoita kontaktille</target> <target>Tallenna ja ilmoita kontaktille</target>
<note>No comment provided by engineer.</note> <note>alert button</note>
</trans-unit> </trans-unit>
<trans-unit id="Save and notify group members" xml:space="preserve"> <trans-unit id="Save and notify group members" xml:space="preserve">
<source>Save and notify group members</source> <source>Save and notify group members</source>
@ -6165,6 +6165,10 @@ Enable in *Network &amp; servers* settings.</source>
<target>SimpleX-osoite</target> <target>SimpleX-osoite</target>
<note>No comment provided by engineer.</note> <note>No comment provided by engineer.</note>
</trans-unit> </trans-unit>
<trans-unit id="SimpleX Chat and Flux made an agreement to include Flux-operated servers into the app." xml:space="preserve">
<source>SimpleX Chat and Flux made an agreement to include Flux-operated servers into the app.</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="SimpleX Chat security was audited by Trail of Bits." xml:space="preserve"> <trans-unit id="SimpleX Chat security was audited by Trail of Bits." xml:space="preserve">
<source>SimpleX Chat security was audited by Trail of Bits.</source> <source>SimpleX Chat security was audited by Trail of Bits.</source>
<target>Trail of Bits on tarkastanut SimpleX Chatin tietoturvan.</target> <target>Trail of Bits on tarkastanut SimpleX Chatin tietoturvan.</target>

View file

@ -1589,8 +1589,8 @@
<source>Conditions are accepted for the operator(s): **%@**.</source> <source>Conditions are accepted for the operator(s): **%@**.</source>
<note>No comment provided by engineer.</note> <note>No comment provided by engineer.</note>
</trans-unit> </trans-unit>
<trans-unit id="Conditions are already accepted for following operator(s): **%@**." xml:space="preserve"> <trans-unit id="Conditions are already accepted for these operator(s): **%@**." xml:space="preserve">
<source>Conditions are already accepted for following operator(s): **%@**.</source> <source>Conditions are already accepted for these operator(s): **%@**.</source>
<note>No comment provided by engineer.</note> <note>No comment provided by engineer.</note>
</trans-unit> </trans-unit>
<trans-unit id="Conditions of use" xml:space="preserve"> <trans-unit id="Conditions of use" xml:space="preserve">
@ -5972,7 +5972,7 @@ Activez-le dans les paramètres *Réseau et serveurs*.</target>
<trans-unit id="Save and notify contact" xml:space="preserve"> <trans-unit id="Save and notify contact" xml:space="preserve">
<source>Save and notify contact</source> <source>Save and notify contact</source>
<target>Enregistrer et en informer le contact</target> <target>Enregistrer et en informer le contact</target>
<note>No comment provided by engineer.</note> <note>alert button</note>
</trans-unit> </trans-unit>
<trans-unit id="Save and notify group members" xml:space="preserve"> <trans-unit id="Save and notify group members" xml:space="preserve">
<source>Save and notify group members</source> <source>Save and notify group members</source>
@ -6623,6 +6623,10 @@ Activez-le dans les paramètres *Réseau et serveurs*.</target>
<target>Adresse SimpleX</target> <target>Adresse SimpleX</target>
<note>No comment provided by engineer.</note> <note>No comment provided by engineer.</note>
</trans-unit> </trans-unit>
<trans-unit id="SimpleX Chat and Flux made an agreement to include Flux-operated servers into the app." xml:space="preserve">
<source>SimpleX Chat and Flux made an agreement to include Flux-operated servers into the app.</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="SimpleX Chat security was audited by Trail of Bits." xml:space="preserve"> <trans-unit id="SimpleX Chat security was audited by Trail of Bits." xml:space="preserve">
<source>SimpleX Chat security was audited by Trail of Bits.</source> <source>SimpleX Chat security was audited by Trail of Bits.</source>
<target>La sécurité de SimpleX Chat a été auditée par Trail of Bits.</target> <target>La sécurité de SimpleX Chat a été auditée par Trail of Bits.</target>

View file

@ -1616,8 +1616,8 @@
<target>A következő üzemeltető(k) számára elfogadott feltételek: **%@**.</target> <target>A következő üzemeltető(k) számára elfogadott feltételek: **%@**.</target>
<note>No comment provided by engineer.</note> <note>No comment provided by engineer.</note>
</trans-unit> </trans-unit>
<trans-unit id="Conditions are already accepted for following operator(s): **%@**." xml:space="preserve"> <trans-unit id="Conditions are already accepted for these operator(s): **%@**." xml:space="preserve">
<source>Conditions are already accepted for following operator(s): **%@**.</source> <source>Conditions are already accepted for these operator(s): **%@**.</source>
<target>A feltételek már el lettek fogadva a következő üzemeltető(k) számára: **%@**.</target> <target>A feltételek már el lettek fogadva a következő üzemeltető(k) számára: **%@**.</target>
<note>No comment provided by engineer.</note> <note>No comment provided by engineer.</note>
</trans-unit> </trans-unit>
@ -6055,7 +6055,7 @@ Engedélyezze a „Beállítások -&gt; Hálózat és kiszolgálók” menüben.
<trans-unit id="Save and notify contact" xml:space="preserve"> <trans-unit id="Save and notify contact" xml:space="preserve">
<source>Save and notify contact</source> <source>Save and notify contact</source>
<target>Mentés és az ismerős értesítése</target> <target>Mentés és az ismerős értesítése</target>
<note>No comment provided by engineer.</note> <note>alert button</note>
</trans-unit> </trans-unit>
<trans-unit id="Save and notify group members" xml:space="preserve"> <trans-unit id="Save and notify group members" xml:space="preserve">
<source>Save and notify group members</source> <source>Save and notify group members</source>
@ -6713,6 +6713,10 @@ Engedélyezze a „Beállítások -&gt; Hálózat és kiszolgálók” menüben.
<target>SimpleX-cím</target> <target>SimpleX-cím</target>
<note>No comment provided by engineer.</note> <note>No comment provided by engineer.</note>
</trans-unit> </trans-unit>
<trans-unit id="SimpleX Chat and Flux made an agreement to include Flux-operated servers into the app." xml:space="preserve">
<source>SimpleX Chat and Flux made an agreement to include Flux-operated servers into the app.</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="SimpleX Chat security was audited by Trail of Bits." xml:space="preserve"> <trans-unit id="SimpleX Chat security was audited by Trail of Bits." xml:space="preserve">
<source>SimpleX Chat security was audited by Trail of Bits.</source> <source>SimpleX Chat security was audited by Trail of Bits.</source>
<target>A SimpleX Chat biztonsága a Trail of Bits által lett auditálva.</target> <target>A SimpleX Chat biztonsága a Trail of Bits által lett auditálva.</target>

View file

@ -1616,8 +1616,8 @@
<target>Le condizioni sono state accettate per gli operatori: **%@**.</target> <target>Le condizioni sono state accettate per gli operatori: **%@**.</target>
<note>No comment provided by engineer.</note> <note>No comment provided by engineer.</note>
</trans-unit> </trans-unit>
<trans-unit id="Conditions are already accepted for following operator(s): **%@**." xml:space="preserve"> <trans-unit id="Conditions are already accepted for these operator(s): **%@**." xml:space="preserve">
<source>Conditions are already accepted for following operator(s): **%@**.</source> <source>Conditions are already accepted for these operator(s): **%@**.</source>
<target>Le condizioni sono già state accettate per i seguenti operatori: **%@**.</target> <target>Le condizioni sono già state accettate per i seguenti operatori: **%@**.</target>
<note>No comment provided by engineer.</note> <note>No comment provided by engineer.</note>
</trans-unit> </trans-unit>
@ -6055,7 +6055,7 @@ Attivalo nelle impostazioni *Rete e server*.</target>
<trans-unit id="Save and notify contact" xml:space="preserve"> <trans-unit id="Save and notify contact" xml:space="preserve">
<source>Save and notify contact</source> <source>Save and notify contact</source>
<target>Salva e avvisa il contatto</target> <target>Salva e avvisa il contatto</target>
<note>No comment provided by engineer.</note> <note>alert button</note>
</trans-unit> </trans-unit>
<trans-unit id="Save and notify group members" xml:space="preserve"> <trans-unit id="Save and notify group members" xml:space="preserve">
<source>Save and notify group members</source> <source>Save and notify group members</source>
@ -6713,6 +6713,10 @@ Attivalo nelle impostazioni *Rete e server*.</target>
<target>Indirizzo SimpleX</target> <target>Indirizzo SimpleX</target>
<note>No comment provided by engineer.</note> <note>No comment provided by engineer.</note>
</trans-unit> </trans-unit>
<trans-unit id="SimpleX Chat and Flux made an agreement to include Flux-operated servers into the app." xml:space="preserve">
<source>SimpleX Chat and Flux made an agreement to include Flux-operated servers into the app.</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="SimpleX Chat security was audited by Trail of Bits." xml:space="preserve"> <trans-unit id="SimpleX Chat security was audited by Trail of Bits." xml:space="preserve">
<source>SimpleX Chat security was audited by Trail of Bits.</source> <source>SimpleX Chat security was audited by Trail of Bits.</source>
<target>La sicurezza di SimpleX Chat è stata verificata da Trail of Bits.</target> <target>La sicurezza di SimpleX Chat è stata verificata da Trail of Bits.</target>

View file

@ -1515,8 +1515,8 @@
<source>Conditions are accepted for the operator(s): **%@**.</source> <source>Conditions are accepted for the operator(s): **%@**.</source>
<note>No comment provided by engineer.</note> <note>No comment provided by engineer.</note>
</trans-unit> </trans-unit>
<trans-unit id="Conditions are already accepted for following operator(s): **%@**." xml:space="preserve"> <trans-unit id="Conditions are already accepted for these operator(s): **%@**." xml:space="preserve">
<source>Conditions are already accepted for following operator(s): **%@**.</source> <source>Conditions are already accepted for these operator(s): **%@**.</source>
<note>No comment provided by engineer.</note> <note>No comment provided by engineer.</note>
</trans-unit> </trans-unit>
<trans-unit id="Conditions of use" xml:space="preserve"> <trans-unit id="Conditions of use" xml:space="preserve">
@ -5613,7 +5613,7 @@ Enable in *Network &amp; servers* settings.</source>
<trans-unit id="Save and notify contact" xml:space="preserve"> <trans-unit id="Save and notify contact" xml:space="preserve">
<source>Save and notify contact</source> <source>Save and notify contact</source>
<target>保存して、連絡先にに知らせる</target> <target>保存して、連絡先にに知らせる</target>
<note>No comment provided by engineer.</note> <note>alert button</note>
</trans-unit> </trans-unit>
<trans-unit id="Save and notify group members" xml:space="preserve"> <trans-unit id="Save and notify group members" xml:space="preserve">
<source>Save and notify group members</source> <source>Save and notify group members</source>
@ -6207,6 +6207,10 @@ Enable in *Network &amp; servers* settings.</source>
<target>SimpleXアドレス</target> <target>SimpleXアドレス</target>
<note>No comment provided by engineer.</note> <note>No comment provided by engineer.</note>
</trans-unit> </trans-unit>
<trans-unit id="SimpleX Chat and Flux made an agreement to include Flux-operated servers into the app." xml:space="preserve">
<source>SimpleX Chat and Flux made an agreement to include Flux-operated servers into the app.</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="SimpleX Chat security was audited by Trail of Bits." xml:space="preserve"> <trans-unit id="SimpleX Chat security was audited by Trail of Bits." xml:space="preserve">
<source>SimpleX Chat security was audited by Trail of Bits.</source> <source>SimpleX Chat security was audited by Trail of Bits.</source>
<target>SimpleX Chat のセキュリティは Trail of Bits によって監査されました。</target> <target>SimpleX Chat のセキュリティは Trail of Bits によって監査されました。</target>

View file

@ -1616,8 +1616,8 @@
<target>Voorwaarden worden geaccepteerd voor de operator(s): **%@**.</target> <target>Voorwaarden worden geaccepteerd voor de operator(s): **%@**.</target>
<note>No comment provided by engineer.</note> <note>No comment provided by engineer.</note>
</trans-unit> </trans-unit>
<trans-unit id="Conditions are already accepted for following operator(s): **%@**." xml:space="preserve"> <trans-unit id="Conditions are already accepted for these operator(s): **%@**." xml:space="preserve">
<source>Conditions are already accepted for following operator(s): **%@**.</source> <source>Conditions are already accepted for these operator(s): **%@**.</source>
<target>Voorwaarden zijn reeds geaccepteerd voor de volgende operator(s): **%@**.</target> <target>Voorwaarden zijn reeds geaccepteerd voor de volgende operator(s): **%@**.</target>
<note>No comment provided by engineer.</note> <note>No comment provided by engineer.</note>
</trans-unit> </trans-unit>
@ -6055,7 +6055,7 @@ Schakel dit in in *Netwerk en servers*-instellingen.</target>
<trans-unit id="Save and notify contact" xml:space="preserve"> <trans-unit id="Save and notify contact" xml:space="preserve">
<source>Save and notify contact</source> <source>Save and notify contact</source>
<target>Opslaan en Contact melden</target> <target>Opslaan en Contact melden</target>
<note>No comment provided by engineer.</note> <note>alert button</note>
</trans-unit> </trans-unit>
<trans-unit id="Save and notify group members" xml:space="preserve"> <trans-unit id="Save and notify group members" xml:space="preserve">
<source>Save and notify group members</source> <source>Save and notify group members</source>
@ -6713,6 +6713,11 @@ Schakel dit in in *Netwerk en servers*-instellingen.</target>
<target>SimpleX adres</target> <target>SimpleX adres</target>
<note>No comment provided by engineer.</note> <note>No comment provided by engineer.</note>
</trans-unit> </trans-unit>
<trans-unit id="SimpleX Chat and Flux made an agreement to include Flux-operated servers into the app." xml:space="preserve">
<source>SimpleX Chat and Flux made an agreement to include Flux-operated servers into the app.</source>
<target>Simplex-chat en flux hebben een overeenkomst gemaakt om door flux geëxploiteerde servers in de app op te nemen.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="SimpleX Chat security was audited by Trail of Bits." xml:space="preserve"> <trans-unit id="SimpleX Chat security was audited by Trail of Bits." xml:space="preserve">
<source>SimpleX Chat security was audited by Trail of Bits.</source> <source>SimpleX Chat security was audited by Trail of Bits.</source>
<target>De beveiliging van SimpleX Chat is gecontroleerd door Trail of Bits.</target> <target>De beveiliging van SimpleX Chat is gecontroleerd door Trail of Bits.</target>

View file

@ -1584,8 +1584,8 @@
<source>Conditions are accepted for the operator(s): **%@**.</source> <source>Conditions are accepted for the operator(s): **%@**.</source>
<note>No comment provided by engineer.</note> <note>No comment provided by engineer.</note>
</trans-unit> </trans-unit>
<trans-unit id="Conditions are already accepted for following operator(s): **%@**." xml:space="preserve"> <trans-unit id="Conditions are already accepted for these operator(s): **%@**." xml:space="preserve">
<source>Conditions are already accepted for following operator(s): **%@**.</source> <source>Conditions are already accepted for these operator(s): **%@**.</source>
<note>No comment provided by engineer.</note> <note>No comment provided by engineer.</note>
</trans-unit> </trans-unit>
<trans-unit id="Conditions of use" xml:space="preserve"> <trans-unit id="Conditions of use" xml:space="preserve">
@ -5962,7 +5962,7 @@ Włącz w ustawianiach *Sieć i serwery* .</target>
<trans-unit id="Save and notify contact" xml:space="preserve"> <trans-unit id="Save and notify contact" xml:space="preserve">
<source>Save and notify contact</source> <source>Save and notify contact</source>
<target>Zapisz i powiadom kontakt</target> <target>Zapisz i powiadom kontakt</target>
<note>No comment provided by engineer.</note> <note>alert button</note>
</trans-unit> </trans-unit>
<trans-unit id="Save and notify group members" xml:space="preserve"> <trans-unit id="Save and notify group members" xml:space="preserve">
<source>Save and notify group members</source> <source>Save and notify group members</source>
@ -6613,6 +6613,10 @@ Włącz w ustawianiach *Sieć i serwery* .</target>
<target>Adres SimpleX</target> <target>Adres SimpleX</target>
<note>No comment provided by engineer.</note> <note>No comment provided by engineer.</note>
</trans-unit> </trans-unit>
<trans-unit id="SimpleX Chat and Flux made an agreement to include Flux-operated servers into the app." xml:space="preserve">
<source>SimpleX Chat and Flux made an agreement to include Flux-operated servers into the app.</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="SimpleX Chat security was audited by Trail of Bits." xml:space="preserve"> <trans-unit id="SimpleX Chat security was audited by Trail of Bits." xml:space="preserve">
<source>SimpleX Chat security was audited by Trail of Bits.</source> <source>SimpleX Chat security was audited by Trail of Bits.</source>
<target>Bezpieczeństwo SimpleX Chat zostało zaudytowane przez Trail of Bits.</target> <target>Bezpieczeństwo SimpleX Chat zostało zaudytowane przez Trail of Bits.</target>

View file

@ -1617,8 +1617,8 @@
<target>Условия приняты для оператора(ов): **%@**.</target> <target>Условия приняты для оператора(ов): **%@**.</target>
<note>No comment provided by engineer.</note> <note>No comment provided by engineer.</note>
</trans-unit> </trans-unit>
<trans-unit id="Conditions are already accepted for following operator(s): **%@**." xml:space="preserve"> <trans-unit id="Conditions are already accepted for these operator(s): **%@**." xml:space="preserve">
<source>Conditions are already accepted for following operator(s): **%@**.</source> <source>Conditions are already accepted for these operator(s): **%@**.</source>
<target>Условия уже приняты для следующих оператора(ов): **%@**.</target> <target>Условия уже приняты для следующих оператора(ов): **%@**.</target>
<note>No comment provided by engineer.</note> <note>No comment provided by engineer.</note>
</trans-unit> </trans-unit>
@ -6055,7 +6055,7 @@ Enable in *Network &amp; servers* settings.</source>
<trans-unit id="Save and notify contact" xml:space="preserve"> <trans-unit id="Save and notify contact" xml:space="preserve">
<source>Save and notify contact</source> <source>Save and notify contact</source>
<target>Сохранить и уведомить контакт</target> <target>Сохранить и уведомить контакт</target>
<note>No comment provided by engineer.</note> <note>alert button</note>
</trans-unit> </trans-unit>
<trans-unit id="Save and notify group members" xml:space="preserve"> <trans-unit id="Save and notify group members" xml:space="preserve">
<source>Save and notify group members</source> <source>Save and notify group members</source>
@ -6713,6 +6713,11 @@ Enable in *Network &amp; servers* settings.</source>
<target>Адрес SimpleX</target> <target>Адрес SimpleX</target>
<note>No comment provided by engineer.</note> <note>No comment provided by engineer.</note>
</trans-unit> </trans-unit>
<trans-unit id="SimpleX Chat and Flux made an agreement to include Flux-operated servers into the app." xml:space="preserve">
<source>SimpleX Chat and Flux made an agreement to include Flux-operated servers into the app.</source>
<target>SimpleX Chat и Flux заключили соглашение добавить серверы под управлением Flux в приложение.</target>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="SimpleX Chat security was audited by Trail of Bits." xml:space="preserve"> <trans-unit id="SimpleX Chat security was audited by Trail of Bits." xml:space="preserve">
<source>SimpleX Chat security was audited by Trail of Bits.</source> <source>SimpleX Chat security was audited by Trail of Bits.</source>
<target>Безопасность SimpleX Chat была проверена Trail of Bits.</target> <target>Безопасность SimpleX Chat была проверена Trail of Bits.</target>

View file

@ -1477,8 +1477,8 @@
<source>Conditions are accepted for the operator(s): **%@**.</source> <source>Conditions are accepted for the operator(s): **%@**.</source>
<note>No comment provided by engineer.</note> <note>No comment provided by engineer.</note>
</trans-unit> </trans-unit>
<trans-unit id="Conditions are already accepted for following operator(s): **%@**." xml:space="preserve"> <trans-unit id="Conditions are already accepted for these operator(s): **%@**." xml:space="preserve">
<source>Conditions are already accepted for following operator(s): **%@**.</source> <source>Conditions are already accepted for these operator(s): **%@**.</source>
<note>No comment provided by engineer.</note> <note>No comment provided by engineer.</note>
</trans-unit> </trans-unit>
<trans-unit id="Conditions of use" xml:space="preserve"> <trans-unit id="Conditions of use" xml:space="preserve">
@ -5541,7 +5541,7 @@ Enable in *Network &amp; servers* settings.</source>
<trans-unit id="Save and notify contact" xml:space="preserve"> <trans-unit id="Save and notify contact" xml:space="preserve">
<source>Save and notify contact</source> <source>Save and notify contact</source>
<target>บันทึกและแจ้งผู้ติดต่อ</target> <target>บันทึกและแจ้งผู้ติดต่อ</target>
<note>No comment provided by engineer.</note> <note>alert button</note>
</trans-unit> </trans-unit>
<trans-unit id="Save and notify group members" xml:space="preserve"> <trans-unit id="Save and notify group members" xml:space="preserve">
<source>Save and notify group members</source> <source>Save and notify group members</source>
@ -6139,6 +6139,10 @@ Enable in *Network &amp; servers* settings.</source>
<target>ที่อยู่ SimpleX</target> <target>ที่อยู่ SimpleX</target>
<note>No comment provided by engineer.</note> <note>No comment provided by engineer.</note>
</trans-unit> </trans-unit>
<trans-unit id="SimpleX Chat and Flux made an agreement to include Flux-operated servers into the app." xml:space="preserve">
<source>SimpleX Chat and Flux made an agreement to include Flux-operated servers into the app.</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="SimpleX Chat security was audited by Trail of Bits." xml:space="preserve"> <trans-unit id="SimpleX Chat security was audited by Trail of Bits." xml:space="preserve">
<source>SimpleX Chat security was audited by Trail of Bits.</source> <source>SimpleX Chat security was audited by Trail of Bits.</source>
<target>ความปลอดภัยของ SimpleX Chat ได้รับการตรวจสอบโดย Trail of Bits</target> <target>ความปลอดภัยของ SimpleX Chat ได้รับการตรวจสอบโดย Trail of Bits</target>

View file

@ -1589,8 +1589,8 @@
<source>Conditions are accepted for the operator(s): **%@**.</source> <source>Conditions are accepted for the operator(s): **%@**.</source>
<note>No comment provided by engineer.</note> <note>No comment provided by engineer.</note>
</trans-unit> </trans-unit>
<trans-unit id="Conditions are already accepted for following operator(s): **%@**." xml:space="preserve"> <trans-unit id="Conditions are already accepted for these operator(s): **%@**." xml:space="preserve">
<source>Conditions are already accepted for following operator(s): **%@**.</source> <source>Conditions are already accepted for these operator(s): **%@**.</source>
<note>No comment provided by engineer.</note> <note>No comment provided by engineer.</note>
</trans-unit> </trans-unit>
<trans-unit id="Conditions of use" xml:space="preserve"> <trans-unit id="Conditions of use" xml:space="preserve">
@ -5972,7 +5972,7 @@ Enable in *Network &amp; servers* settings.</source>
<trans-unit id="Save and notify contact" xml:space="preserve"> <trans-unit id="Save and notify contact" xml:space="preserve">
<source>Save and notify contact</source> <source>Save and notify contact</source>
<target>Kaydet ve kişilere bildir</target> <target>Kaydet ve kişilere bildir</target>
<note>No comment provided by engineer.</note> <note>alert button</note>
</trans-unit> </trans-unit>
<trans-unit id="Save and notify group members" xml:space="preserve"> <trans-unit id="Save and notify group members" xml:space="preserve">
<source>Save and notify group members</source> <source>Save and notify group members</source>
@ -6623,6 +6623,10 @@ Enable in *Network &amp; servers* settings.</source>
<target>SimpleX Adresi</target> <target>SimpleX Adresi</target>
<note>No comment provided by engineer.</note> <note>No comment provided by engineer.</note>
</trans-unit> </trans-unit>
<trans-unit id="SimpleX Chat and Flux made an agreement to include Flux-operated servers into the app." xml:space="preserve">
<source>SimpleX Chat and Flux made an agreement to include Flux-operated servers into the app.</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="SimpleX Chat security was audited by Trail of Bits." xml:space="preserve"> <trans-unit id="SimpleX Chat security was audited by Trail of Bits." xml:space="preserve">
<source>SimpleX Chat security was audited by Trail of Bits.</source> <source>SimpleX Chat security was audited by Trail of Bits.</source>
<target>SimpleX Chat güvenliği Trails of Bits tarafından denetlenmiştir.</target> <target>SimpleX Chat güvenliği Trails of Bits tarafından denetlenmiştir.</target>

View file

@ -1606,8 +1606,8 @@
<target>Для оператора(ів) приймаються умови: **%@**.</target> <target>Для оператора(ів) приймаються умови: **%@**.</target>
<note>No comment provided by engineer.</note> <note>No comment provided by engineer.</note>
</trans-unit> </trans-unit>
<trans-unit id="Conditions are already accepted for following operator(s): **%@**." xml:space="preserve"> <trans-unit id="Conditions are already accepted for these operator(s): **%@**." xml:space="preserve">
<source>Conditions are already accepted for following operator(s): **%@**.</source> <source>Conditions are already accepted for these operator(s): **%@**.</source>
<target>Умови вже прийняті для наступних операторів: **%@**.</target> <target>Умови вже прийняті для наступних операторів: **%@**.</target>
<note>No comment provided by engineer.</note> <note>No comment provided by engineer.</note>
</trans-unit> </trans-unit>
@ -6034,7 +6034,7 @@ Enable in *Network &amp; servers* settings.</source>
<trans-unit id="Save and notify contact" xml:space="preserve"> <trans-unit id="Save and notify contact" xml:space="preserve">
<source>Save and notify contact</source> <source>Save and notify contact</source>
<target>Зберегти та повідомити контакт</target> <target>Зберегти та повідомити контакт</target>
<note>No comment provided by engineer.</note> <note>alert button</note>
</trans-unit> </trans-unit>
<trans-unit id="Save and notify group members" xml:space="preserve"> <trans-unit id="Save and notify group members" xml:space="preserve">
<source>Save and notify group members</source> <source>Save and notify group members</source>
@ -6692,6 +6692,10 @@ Enable in *Network &amp; servers* settings.</source>
<target>Адреса SimpleX</target> <target>Адреса SimpleX</target>
<note>No comment provided by engineer.</note> <note>No comment provided by engineer.</note>
</trans-unit> </trans-unit>
<trans-unit id="SimpleX Chat and Flux made an agreement to include Flux-operated servers into the app." xml:space="preserve">
<source>SimpleX Chat and Flux made an agreement to include Flux-operated servers into the app.</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="SimpleX Chat security was audited by Trail of Bits." xml:space="preserve"> <trans-unit id="SimpleX Chat security was audited by Trail of Bits." xml:space="preserve">
<source>SimpleX Chat security was audited by Trail of Bits.</source> <source>SimpleX Chat security was audited by Trail of Bits.</source>
<target>Безпека SimpleX Chat була перевірена компанією Trail of Bits.</target> <target>Безпека SimpleX Chat була перевірена компанією Trail of Bits.</target>

View file

@ -1575,8 +1575,8 @@
<source>Conditions are accepted for the operator(s): **%@**.</source> <source>Conditions are accepted for the operator(s): **%@**.</source>
<note>No comment provided by engineer.</note> <note>No comment provided by engineer.</note>
</trans-unit> </trans-unit>
<trans-unit id="Conditions are already accepted for following operator(s): **%@**." xml:space="preserve"> <trans-unit id="Conditions are already accepted for these operator(s): **%@**." xml:space="preserve">
<source>Conditions are already accepted for following operator(s): **%@**.</source> <source>Conditions are already accepted for these operator(s): **%@**.</source>
<note>No comment provided by engineer.</note> <note>No comment provided by engineer.</note>
</trans-unit> </trans-unit>
<trans-unit id="Conditions of use" xml:space="preserve"> <trans-unit id="Conditions of use" xml:space="preserve">
@ -5925,7 +5925,7 @@ Enable in *Network &amp; servers* settings.</source>
<trans-unit id="Save and notify contact" xml:space="preserve"> <trans-unit id="Save and notify contact" xml:space="preserve">
<source>Save and notify contact</source> <source>Save and notify contact</source>
<target>保存并通知联系人</target> <target>保存并通知联系人</target>
<note>No comment provided by engineer.</note> <note>alert button</note>
</trans-unit> </trans-unit>
<trans-unit id="Save and notify group members" xml:space="preserve"> <trans-unit id="Save and notify group members" xml:space="preserve">
<source>Save and notify group members</source> <source>Save and notify group members</source>
@ -6570,6 +6570,10 @@ Enable in *Network &amp; servers* settings.</source>
<target>SimpleX 地址</target> <target>SimpleX 地址</target>
<note>No comment provided by engineer.</note> <note>No comment provided by engineer.</note>
</trans-unit> </trans-unit>
<trans-unit id="SimpleX Chat and Flux made an agreement to include Flux-operated servers into the app." xml:space="preserve">
<source>SimpleX Chat and Flux made an agreement to include Flux-operated servers into the app.</source>
<note>No comment provided by engineer.</note>
</trans-unit>
<trans-unit id="SimpleX Chat security was audited by Trail of Bits." xml:space="preserve"> <trans-unit id="SimpleX Chat security was audited by Trail of Bits." xml:space="preserve">
<source>SimpleX Chat security was audited by Trail of Bits.</source> <source>SimpleX Chat security was audited by Trail of Bits.</source>
<target>SimpleX Chat 的安全性 由 Trail of Bits 审核。</target> <target>SimpleX Chat 的安全性 由 Trail of Bits 审核。</target>

View file

@ -1212,13 +1212,12 @@ public enum ServerProtocol: String, Decodable {
public enum OperatorTag: String, Codable { public enum OperatorTag: String, Codable {
case simplex = "simplex" case simplex = "simplex"
case flux = "flux" case flux = "flux"
case xyz = "xyz"
case demo = "demo"
} }
public struct ServerOperatorInfo: Decodable { public struct ServerOperatorInfo {
public var description: [String] public var description: [String]
public var website: String public var website: URL
public var selfhost: (text: String, link: URL)? = nil
public var logo: String public var logo: String
public var largeLogo: String public var largeLogo: String
public var logoDarkMode: String public var logoDarkMode: String
@ -1228,10 +1227,10 @@ public struct ServerOperatorInfo: Decodable {
public let operatorsInfo: Dictionary<OperatorTag, ServerOperatorInfo> = [ public let operatorsInfo: Dictionary<OperatorTag, ServerOperatorInfo> = [
.simplex: ServerOperatorInfo( .simplex: ServerOperatorInfo(
description: [ description: [
"SimpleX Chat is the first communication network that has no user profile IDs of any kind, not even random numbers or keys that identify the users.", "SimpleX Chat is the first communication network that has no user profile IDs of any kind, not even random numbers or identity keys.",
"SimpleX Chat Ltd develops the communication software for SimpleX network." "SimpleX Chat Ltd develops the communication software for SimpleX network."
], ],
website: "https://simplex.chat", website: URL(string: "https://simplex.chat")!,
logo: "decentralized", logo: "decentralized",
largeLogo: "logo", largeLogo: "logo",
logoDarkMode: "decentralized-light", logoDarkMode: "decentralized-light",
@ -1239,31 +1238,17 @@ public let operatorsInfo: Dictionary<OperatorTag, ServerOperatorInfo> = [
), ),
.flux: ServerOperatorInfo( .flux: ServerOperatorInfo(
description: [ description: [
"Flux is the largest decentralized cloud infrastructure, leveraging a global network of user-operated computational nodes.", "Flux is the largest decentralized cloud, based on a global network of user-operated nodes.",
"Flux offers a powerful, scalable, and affordable platform designed to support individuals, businesses, and cutting-edge technologies like AI. With high uptime and worldwide distribution, Flux ensures reliable, accessible cloud computing for all." "Flux offers a powerful, scalable, and affordable cutting edge technology platform for all.",
"Flux operates servers in SimpleX network to improve its privacy and decentralization."
], ],
website: "https://runonflux.com", website: URL(string: "https://runonflux.com")!,
selfhost: (text: "Self-host SimpleX servers on Flux", link: URL(string: "https://home.runonflux.io/apps/marketplace?q=simplex")!),
logo: "flux_logo_symbol", logo: "flux_logo_symbol",
largeLogo: "flux_logo", largeLogo: "flux_logo",
logoDarkMode: "flux_logo_symbol", logoDarkMode: "flux_logo_symbol",
largeLogoDarkMode: "flux_logo-light" largeLogoDarkMode: "flux_logo-light"
), ),
.xyz: ServerOperatorInfo(
description: ["XYZ servers"],
website: "XYZ website",
logo: "shield",
largeLogo: "logo",
logoDarkMode: "shield",
largeLogoDarkMode: "logo-light"
),
.demo: ServerOperatorInfo(
description: ["Demo operator"],
website: "Demo website",
logo: "decentralized",
largeLogo: "logo",
logoDarkMode: "decentralized-light",
largeLogoDarkMode: "logo-light"
)
] ]
public struct UsageConditions: Decodable { public struct UsageConditions: Decodable {
@ -1358,7 +1343,7 @@ public struct ServerOperator: Identifiable, Equatable, Codable {
public static let dummyOperatorInfo = ServerOperatorInfo( public static let dummyOperatorInfo = ServerOperatorInfo(
description: ["Default"], description: ["Default"],
website: "Default", website: URL(string: "https://simplex.chat")!,
logo: "decentralized", logo: "decentralized",
largeLogo: "logo", largeLogo: "logo",
logoDarkMode: "decentralized-light", logoDarkMode: "decentralized-light",
@ -1384,30 +1369,6 @@ public struct ServerOperator: Identifiable, Equatable, Codable {
smpRoles: ServerRoles(storage: true, proxy: true), smpRoles: ServerRoles(storage: true, proxy: true),
xftpRoles: ServerRoles(storage: true, proxy: true) xftpRoles: ServerRoles(storage: true, proxy: true)
) )
public static var sampleData2 = ServerOperator(
operatorId: 2,
operatorTag: .xyz,
tradeName: "XYZ",
legalName: nil,
serverDomains: ["xyz.com"],
conditionsAcceptance: .required(deadline: nil),
enabled: false,
smpRoles: ServerRoles(storage: false, proxy: true),
xftpRoles: ServerRoles(storage: false, proxy: true)
)
public static var sampleData3 = ServerOperator(
operatorId: 3,
operatorTag: .demo,
tradeName: "Demo",
legalName: nil,
serverDomains: ["demo.com"],
conditionsAcceptance: .required(deadline: nil),
enabled: false,
smpRoles: ServerRoles(storage: true, proxy: false),
xftpRoles: ServerRoles(storage: true, proxy: false)
)
} }
public struct ServerRoles: Equatable, Codable { public struct ServerRoles: Equatable, Codable {

View file

@ -3139,7 +3139,7 @@
/* alert button */ /* alert button */
"Save (and notify contacts)" = "Запази (и уведоми контактите)"; "Save (and notify contacts)" = "Запази (и уведоми контактите)";
/* No comment provided by engineer. */ /* alert button */
"Save and notify contact" = "Запази и уведоми контакта"; "Save and notify contact" = "Запази и уведоми контакта";
/* No comment provided by engineer. */ /* No comment provided by engineer. */

View file

@ -2538,7 +2538,7 @@
/* alert button */ /* alert button */
"Save (and notify contacts)" = "Uložit (a informovat kontakty)"; "Save (and notify contacts)" = "Uložit (a informovat kontakty)";
/* No comment provided by engineer. */ /* alert button */
"Save and notify contact" = "Uložit a upozornit kontakt"; "Save and notify contact" = "Uložit a upozornit kontakt";
/* No comment provided by engineer. */ /* No comment provided by engineer. */

View file

@ -1030,7 +1030,7 @@
"Conditions are accepted for the operator(s): **%@**." = "Die Nutzungsbedingungen der/des Betreiber(s) werden akzeptiert: **%@**."; "Conditions are accepted for the operator(s): **%@**." = "Die Nutzungsbedingungen der/des Betreiber(s) werden akzeptiert: **%@**.";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Conditions are already accepted for following operator(s): **%@**." = "Die Nutzungsbedingungen der/des folgenden Betreiber(s) wurden schon akzeptiert: **%@**."; "Conditions are already accepted for these operator(s): **%@**." = "Die Nutzungsbedingungen der/des folgenden Betreiber(s) wurden schon akzeptiert: **%@**.";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Conditions of use" = "Nutzungsbedingungen"; "Conditions of use" = "Nutzungsbedingungen";
@ -3952,7 +3952,7 @@
/* alert button */ /* alert button */
"Save (and notify contacts)" = "Speichern (und Kontakte benachrichtigen)"; "Save (and notify contacts)" = "Speichern (und Kontakte benachrichtigen)";
/* No comment provided by engineer. */ /* alert button */
"Save and notify contact" = "Speichern und Kontakt benachrichtigen"; "Save and notify contact" = "Speichern und Kontakt benachrichtigen";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
@ -4391,6 +4391,9 @@
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"SimpleX address or 1-time link?" = "SimpleX-Adresse oder Einmal-Link?"; "SimpleX address or 1-time link?" = "SimpleX-Adresse oder Einmal-Link?";
/* No comment provided by engineer. */
"SimpleX Chat and Flux made an agreement to include Flux-operated servers into the app." = "SimpleX-Chat und Flux haben vereinbart, die von Flux betriebenen Server in die App aufzunehmen.";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"SimpleX Chat security was audited by Trail of Bits." = "Die Sicherheit von SimpleX Chat wurde von Trail of Bits überprüft."; "SimpleX Chat security was audited by Trail of Bits." = "Die Sicherheit von SimpleX Chat wurde von Trail of Bits überprüft.";

View file

@ -1030,7 +1030,7 @@
"Conditions are accepted for the operator(s): **%@**." = "Las condiciones se han aceptado para el(los) operador(s): **%@**."; "Conditions are accepted for the operator(s): **%@**." = "Las condiciones se han aceptado para el(los) operador(s): **%@**.";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Conditions are already accepted for following operator(s): **%@**." = "Las condiciones ya se han aceptado para el/los siguiente(s) operador(s): **%@**."; "Conditions are already accepted for these operator(s): **%@**." = "Las condiciones ya se han aceptado para el/los siguiente(s) operador(s): **%@**.";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Conditions of use" = "Condiciones de uso"; "Conditions of use" = "Condiciones de uso";
@ -3952,7 +3952,7 @@
/* alert button */ /* alert button */
"Save (and notify contacts)" = "Guardar (y notificar contactos)"; "Save (and notify contacts)" = "Guardar (y notificar contactos)";
/* No comment provided by engineer. */ /* alert button */
"Save and notify contact" = "Guardar y notificar contacto"; "Save and notify contact" = "Guardar y notificar contacto";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
@ -4391,6 +4391,9 @@
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"SimpleX address or 1-time link?" = "Dirección SimpleX o enlace de un uso?"; "SimpleX address or 1-time link?" = "Dirección SimpleX o enlace de un uso?";
/* No comment provided by engineer. */
"SimpleX Chat and Flux made an agreement to include Flux-operated servers into the app." = "Simplex Chat y Flux han acordado incluir servidores operados por Flux en la aplicación";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"SimpleX Chat security was audited by Trail of Bits." = "La seguridad de SimpleX Chat ha sido auditada por Trail of Bits."; "SimpleX Chat security was audited by Trail of Bits." = "La seguridad de SimpleX Chat ha sido auditada por Trail of Bits.";

View file

@ -2508,7 +2508,7 @@
/* alert button */ /* alert button */
"Save (and notify contacts)" = "Tallenna (ja ilmoita kontakteille)"; "Save (and notify contacts)" = "Tallenna (ja ilmoita kontakteille)";
/* No comment provided by engineer. */ /* alert button */
"Save and notify contact" = "Tallenna ja ilmoita kontaktille"; "Save and notify contact" = "Tallenna ja ilmoita kontaktille";
/* No comment provided by engineer. */ /* No comment provided by engineer. */

View file

@ -3763,7 +3763,7 @@
/* alert button */ /* alert button */
"Save (and notify contacts)" = "Enregistrer (et en informer les contacts)"; "Save (and notify contacts)" = "Enregistrer (et en informer les contacts)";
/* No comment provided by engineer. */ /* alert button */
"Save and notify contact" = "Enregistrer et en informer le contact"; "Save and notify contact" = "Enregistrer et en informer le contact";
/* No comment provided by engineer. */ /* No comment provided by engineer. */

View file

@ -1060,7 +1060,7 @@
"Conditions are accepted for the operator(s): **%@**." = "A következő üzemeltető(k) számára elfogadott feltételek: **%@**."; "Conditions are accepted for the operator(s): **%@**." = "A következő üzemeltető(k) számára elfogadott feltételek: **%@**.";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Conditions are already accepted for following operator(s): **%@**." = "A feltételek már el lettek fogadva a következő üzemeltető(k) számára: **%@**."; "Conditions are already accepted for these operator(s): **%@**." = "A feltételek már el lettek fogadva a következő üzemeltető(k) számára: **%@**.";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Conditions of use" = "Használati feltételek"; "Conditions of use" = "Használati feltételek";
@ -4015,7 +4015,7 @@
/* alert button */ /* alert button */
"Save (and notify contacts)" = "Mentés és az ismerősök értesítése"; "Save (and notify contacts)" = "Mentés és az ismerősök értesítése";
/* No comment provided by engineer. */ /* alert button */
"Save and notify contact" = "Mentés és az ismerős értesítése"; "Save and notify contact" = "Mentés és az ismerős értesítése";
/* No comment provided by engineer. */ /* No comment provided by engineer. */

View file

@ -1060,7 +1060,7 @@
"Conditions are accepted for the operator(s): **%@**." = "Le condizioni sono state accettate per gli operatori: **%@**."; "Conditions are accepted for the operator(s): **%@**." = "Le condizioni sono state accettate per gli operatori: **%@**.";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Conditions are already accepted for following operator(s): **%@**." = "Le condizioni sono già state accettate per i seguenti operatori: **%@**."; "Conditions are already accepted for these operator(s): **%@**." = "Le condizioni sono già state accettate per i seguenti operatori: **%@**.";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Conditions of use" = "Condizioni d'uso"; "Conditions of use" = "Condizioni d'uso";
@ -4015,7 +4015,7 @@
/* alert button */ /* alert button */
"Save (and notify contacts)" = "Salva (e avvisa i contatti)"; "Save (and notify contacts)" = "Salva (e avvisa i contatti)";
/* No comment provided by engineer. */ /* alert button */
"Save and notify contact" = "Salva e avvisa il contatto"; "Save and notify contact" = "Salva e avvisa il contatto";
/* No comment provided by engineer. */ /* No comment provided by engineer. */

View file

@ -2655,7 +2655,7 @@
/* alert button */ /* alert button */
"Save (and notify contacts)" = "保存(連絡先に通知)"; "Save (and notify contacts)" = "保存(連絡先に通知)";
/* No comment provided by engineer. */ /* alert button */
"Save and notify contact" = "保存して、連絡先にに知らせる"; "Save and notify contact" = "保存して、連絡先にに知らせる";
/* No comment provided by engineer. */ /* No comment provided by engineer. */

View file

@ -1060,7 +1060,7 @@
"Conditions are accepted for the operator(s): **%@**." = "Voorwaarden worden geaccepteerd voor de operator(s): **%@**."; "Conditions are accepted for the operator(s): **%@**." = "Voorwaarden worden geaccepteerd voor de operator(s): **%@**.";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Conditions are already accepted for following operator(s): **%@**." = "Voorwaarden zijn reeds geaccepteerd voor de volgende operator(s): **%@**."; "Conditions are already accepted for these operator(s): **%@**." = "Voorwaarden zijn reeds geaccepteerd voor de volgende operator(s): **%@**.";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Conditions of use" = "Gebruiksvoorwaarden"; "Conditions of use" = "Gebruiksvoorwaarden";
@ -4015,7 +4015,7 @@
/* alert button */ /* alert button */
"Save (and notify contacts)" = "Bewaar (en informeer contacten)"; "Save (and notify contacts)" = "Bewaar (en informeer contacten)";
/* No comment provided by engineer. */ /* alert button */
"Save and notify contact" = "Opslaan en Contact melden"; "Save and notify contact" = "Opslaan en Contact melden";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
@ -4454,6 +4454,9 @@
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"SimpleX address or 1-time link?" = "SimpleX adres of eenmalige link?"; "SimpleX address or 1-time link?" = "SimpleX adres of eenmalige link?";
/* No comment provided by engineer. */
"SimpleX Chat and Flux made an agreement to include Flux-operated servers into the app." = "Simplex-chat en flux hebben een overeenkomst gemaakt om door flux geëxploiteerde servers in de app op te nemen.";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"SimpleX Chat security was audited by Trail of Bits." = "De beveiliging van SimpleX Chat is gecontroleerd door Trail of Bits."; "SimpleX Chat security was audited by Trail of Bits." = "De beveiliging van SimpleX Chat is gecontroleerd door Trail of Bits.";

View file

@ -3736,7 +3736,7 @@
/* alert button */ /* alert button */
"Save (and notify contacts)" = "Zapisz (i powiadom kontakty)"; "Save (and notify contacts)" = "Zapisz (i powiadom kontakty)";
/* No comment provided by engineer. */ /* alert button */
"Save and notify contact" = "Zapisz i powiadom kontakt"; "Save and notify contact" = "Zapisz i powiadom kontakt";
/* No comment provided by engineer. */ /* No comment provided by engineer. */

View file

@ -1066,7 +1066,7 @@
"Conditions are accepted for the operator(s): **%@**." = "Условия приняты для оператора(ов): **%@**."; "Conditions are accepted for the operator(s): **%@**." = "Условия приняты для оператора(ов): **%@**.";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Conditions are already accepted for following operator(s): **%@**." = "Условия уже приняты для следующих оператора(ов): **%@**."; "Conditions are already accepted for these operator(s): **%@**." = "Условия уже приняты для следующих оператора(ов): **%@**.";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Conditions of use" = "Условия использования"; "Conditions of use" = "Условия использования";
@ -4024,7 +4024,7 @@
/* alert button */ /* alert button */
"Save (and notify contacts)" = "Сохранить (и уведомить контакты)"; "Save (and notify contacts)" = "Сохранить (и уведомить контакты)";
/* No comment provided by engineer. */ /* alert button */
"Save and notify contact" = "Сохранить и уведомить контакт"; "Save and notify contact" = "Сохранить и уведомить контакт";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
@ -4463,6 +4463,9 @@
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"SimpleX address or 1-time link?" = "Адрес SimpleX или одноразовая ссылка?"; "SimpleX address or 1-time link?" = "Адрес SimpleX или одноразовая ссылка?";
/* No comment provided by engineer. */
"SimpleX Chat and Flux made an agreement to include Flux-operated servers into the app." = "SimpleX Chat и Flux заключили соглашение добавить серверы под управлением Flux в приложение.";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"SimpleX Chat security was audited by Trail of Bits." = "Безопасность SimpleX Chat была проверена Trail of Bits."; "SimpleX Chat security was audited by Trail of Bits." = "Безопасность SimpleX Chat была проверена Trail of Bits.";

View file

@ -2439,7 +2439,7 @@
/* alert button */ /* alert button */
"Save (and notify contacts)" = "บันทึก (และแจ้งผู้ติดต่อ)"; "Save (and notify contacts)" = "บันทึก (และแจ้งผู้ติดต่อ)";
/* No comment provided by engineer. */ /* alert button */
"Save and notify contact" = "บันทึกและแจ้งผู้ติดต่อ"; "Save and notify contact" = "บันทึกและแจ้งผู้ติดต่อ";
/* No comment provided by engineer. */ /* No comment provided by engineer. */

View file

@ -3763,7 +3763,7 @@
/* alert button */ /* alert button */
"Save (and notify contacts)" = "Kaydet (ve kişilere bildir)"; "Save (and notify contacts)" = "Kaydet (ve kişilere bildir)";
/* No comment provided by engineer. */ /* alert button */
"Save and notify contact" = "Kaydet ve kişilere bildir"; "Save and notify contact" = "Kaydet ve kişilere bildir";
/* No comment provided by engineer. */ /* No comment provided by engineer. */

View file

@ -1030,7 +1030,7 @@
"Conditions are accepted for the operator(s): **%@**." = "Для оператора(ів) приймаються умови: **%@**."; "Conditions are accepted for the operator(s): **%@**." = "Для оператора(ів) приймаються умови: **%@**.";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Conditions are already accepted for following operator(s): **%@**." = "Умови вже прийняті для наступних операторів: **%@**."; "Conditions are already accepted for these operator(s): **%@**." = "Умови вже прийняті для наступних операторів: **%@**.";
/* No comment provided by engineer. */ /* No comment provided by engineer. */
"Conditions of use" = "Умови використання"; "Conditions of use" = "Умови використання";
@ -3952,7 +3952,7 @@
/* alert button */ /* alert button */
"Save (and notify contacts)" = "Зберегти (і повідомити контактам)"; "Save (and notify contacts)" = "Зберегти (і повідомити контактам)";
/* No comment provided by engineer. */ /* alert button */
"Save and notify contact" = "Зберегти та повідомити контакт"; "Save and notify contact" = "Зберегти та повідомити контакт";
/* No comment provided by engineer. */ /* No comment provided by engineer. */

View file

@ -3634,7 +3634,7 @@
/* alert button */ /* alert button */
"Save (and notify contacts)" = "保存(并通知联系人)"; "Save (and notify contacts)" = "保存(并通知联系人)";
/* No comment provided by engineer. */ /* alert button */
"Save and notify contact" = "保存并通知联系人"; "Save and notify contact" = "保存并通知联系人";
/* No comment provided by engineer. */ /* No comment provided by engineer. */

View file

@ -3669,14 +3669,13 @@ enum class ServerProtocol {
@Serializable @Serializable
enum class OperatorTag { enum class OperatorTag {
@SerialName("simplex") SimpleX, @SerialName("simplex") SimpleX,
@SerialName("flux") Flux, @SerialName("flux") Flux
@SerialName("xyz") XYZ,
@SerialName("demo") Demo
} }
data class ServerOperatorInfo( data class ServerOperatorInfo(
val description: List<String>, val description: List<String>,
val website: String, val website: String,
val selfhost: Pair<String, String>? = null,
val logo: ImageResource, val logo: ImageResource,
val largeLogo: ImageResource, val largeLogo: ImageResource,
val logoDarkMode: ImageResource, val logoDarkMode: ImageResource,
@ -3696,31 +3695,17 @@ val operatorsInfo: Map<OperatorTag, ServerOperatorInfo> = mapOf(
), ),
OperatorTag.Flux to ServerOperatorInfo( OperatorTag.Flux to ServerOperatorInfo(
description = listOf( description = listOf(
"Flux is the largest decentralized cloud infrastructure, leveraging a global network of user-operated computational nodes.", "Flux is the largest decentralized cloud, based on a global network of user-operated nodes.",
"Flux offers a powerful, scalable, and affordable platform designed to support individuals, businesses, and cutting-edge technologies like AI. With high uptime and worldwide distribution, Flux ensures reliable, accessible cloud computing for all." "Flux offers a powerful, scalable, and affordable cutting edge technology platform for all.",
"Flux operates servers in SimpleX network to improve its privacy and decentralization."
), ),
website = "https://runonflux.com", website = "https://runonflux.com",
selfhost = "Self-host SimpleX servers on Flux" to "https://home.runonflux.io/apps/marketplace?q=simplex",
logo = MR.images.flux_logo_symbol, logo = MR.images.flux_logo_symbol,
largeLogo = MR.images.flux_logo, largeLogo = MR.images.flux_logo,
logoDarkMode = MR.images.flux_logo_symbol, logoDarkMode = MR.images.flux_logo_symbol,
largeLogoDarkMode = MR.images.flux_logo_light largeLogoDarkMode = MR.images.flux_logo_light
), ),
OperatorTag.XYZ to ServerOperatorInfo(
description = listOf("XYZ servers"),
website = "XYZ website",
logo = MR.images.shield,
largeLogo = MR.images.logo,
logoDarkMode = MR.images.shield,
largeLogoDarkMode = MR.images.logo_light
),
OperatorTag.Demo to ServerOperatorInfo(
description = listOf("Demo operator"),
website = "Demo website",
logo = MR.images.decentralized,
largeLogo = MR.images.logo,
logoDarkMode = MR.images.decentralized_light,
largeLogoDarkMode = MR.images.logo_light
)
) )
@Serializable @Serializable
@ -3800,7 +3785,7 @@ data class ServerOperator(
companion object { companion object {
val dummyOperatorInfo = ServerOperatorInfo( val dummyOperatorInfo = ServerOperatorInfo(
description = listOf("Default"), description = listOf("Default"),
website = "Default", website = "https://simplex.chat",
logo = MR.images.decentralized, logo = MR.images.decentralized,
largeLogo = MR.images.logo, largeLogo = MR.images.logo,
logoDarkMode = MR.images.decentralized_light, logoDarkMode = MR.images.decentralized_light,
@ -3818,30 +3803,6 @@ data class ServerOperator(
smpRoles = ServerRoles(storage = true, proxy = true), smpRoles = ServerRoles(storage = true, proxy = true),
xftpRoles = ServerRoles(storage = true, proxy = true) xftpRoles = ServerRoles(storage = true, proxy = true)
) )
val sampleData2 = ServerOperator(
operatorId = 2,
operatorTag = OperatorTag.XYZ,
tradeName = "XYZ",
legalName = null,
serverDomains = listOf("xyz.com"),
conditionsAcceptance = ConditionsAcceptance.Required(deadline = null),
enabled = false,
smpRoles = ServerRoles(storage = false, proxy = true),
xftpRoles = ServerRoles(storage = false, proxy = true)
)
val sampleData3 = ServerOperator(
operatorId = 3,
operatorTag = OperatorTag.Demo,
tradeName = "Demo",
legalName = null,
serverDomains = listOf("demo.com"),
conditionsAcceptance = ConditionsAcceptance.Required(deadline = null),
enabled = false,
smpRoles = ServerRoles(storage = true, proxy = false),
xftpRoles = ServerRoles(storage = true, proxy = false)
)
} }
val id: Long val id: Long

View file

@ -14,8 +14,10 @@ import androidx.compose.runtime.*
import androidx.compose.ui.Alignment import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier import androidx.compose.ui.Modifier
import androidx.compose.ui.text.AnnotatedString import androidx.compose.ui.text.AnnotatedString
import androidx.compose.ui.text.font.FontWeight
import androidx.compose.ui.text.style.TextAlign import androidx.compose.ui.text.style.TextAlign
import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.dp
import androidx.compose.ui.unit.sp
import chat.simplex.common.model.* import chat.simplex.common.model.*
import chat.simplex.common.model.ChatController.appPrefs import chat.simplex.common.model.ChatController.appPrefs
import chat.simplex.common.platform.* import chat.simplex.common.platform.*
@ -72,6 +74,7 @@ fun ModalData.ChooseServerOperators(
} }
Spacer(Modifier.height(DEFAULT_PADDING_HALF)) Spacer(Modifier.height(DEFAULT_PADDING_HALF))
SectionTextFooter(annotatedStringResource(MR.strings.onboarding_network_operators_simplex_flux_agreement), textAlign = TextAlign.Center)
SectionTextFooter(annotatedStringResource(MR.strings.onboarding_network_operators_configure_via_settings), textAlign = TextAlign.Center) SectionTextFooter(annotatedStringResource(MR.strings.onboarding_network_operators_configure_via_settings), textAlign = TextAlign.Center)
} }
Spacer(Modifier.weight(1f)) Spacer(Modifier.weight(1f))

View file

@ -427,23 +427,27 @@ fun OperatorInfoView(serverOperator: ServerOperator) {
SectionDividerSpaced(maxBottomPadding = false) SectionDividerSpaced(maxBottomPadding = false)
val uriHandler = LocalUriHandler.current
SectionView { SectionView {
SectionItemView { SectionItemView {
Column(verticalArrangement = Arrangement.spacedBy(10.dp)) { Column(verticalArrangement = Arrangement.spacedBy(10.dp)) {
serverOperator.info.description.forEach { d -> serverOperator.info.description.forEach { d ->
Text(d) Text(d)
} }
val website = serverOperator.info.website
Text(website, color = MaterialTheme.colors.primary, modifier = Modifier.clickable { uriHandler.openUriCatching(website) })
} }
} }
} }
SectionDividerSpaced() val selfhost = serverOperator.info.selfhost
if (selfhost != null) {
SectionView(generalGetString(MR.strings.operator_website).uppercase()) { SectionDividerSpaced(maxBottomPadding = false)
SectionItemView { SectionView {
val website = serverOperator.info.website SectionItemView {
val uriHandler = LocalUriHandler.current val (text, link) = selfhost
Text(website, color = MaterialTheme.colors.primary, modifier = Modifier.clickable { uriHandler.openUriCatching(website) }) Text(text, color = MaterialTheme.colors.primary, modifier = Modifier.clickable { uriHandler.openUriCatching(link) })
}
} }
} }
} }

View file

@ -1077,6 +1077,7 @@
<!-- ChooseServerOperators.kt --> <!-- ChooseServerOperators.kt -->
<string name="onboarding_choose_server_operators">Server operators</string> <string name="onboarding_choose_server_operators">Server operators</string>
<string name="onboarding_network_operators">Network operators</string> <string name="onboarding_network_operators">Network operators</string>
<string name="onboarding_network_operators_simplex_flux_agreement">SimpleX Chat and Flux made an agreement to include Flux-operated servers into the app.</string>
<string name="onboarding_network_operators_app_will_use_different_operators">The app protects your privacy by using different operators in each conversation.</string> <string name="onboarding_network_operators_app_will_use_different_operators">The app protects your privacy by using different operators in each conversation.</string>
<string name="onboarding_network_operators_cant_see_who_talks_to_whom">When more than one operator is enabled, none of them has metadata to learn who communicates with whom.</string> <string name="onboarding_network_operators_cant_see_who_talks_to_whom">When more than one operator is enabled, none of them has metadata to learn who communicates with whom.</string>
<string name="onboarding_network_operators_app_will_use_for_routing">For example, if your contact receives messages via a SimpleX Chat server, your app will deliver them via a Flux server.</string> <string name="onboarding_network_operators_app_will_use_for_routing">For example, if your contact receives messages via a SimpleX Chat server, your app will deliver them via a Flux server.</string>

View file

@ -2320,6 +2320,7 @@
<string name="one_time_link_can_be_used_with_one_contact_only"><![CDATA[Одноразовая ссылка может быть использована <i>только с одним контактом</i> - поделитесь при встрече или через любой мессенджер.]]></string> <string name="one_time_link_can_be_used_with_one_contact_only"><![CDATA[Одноразовая ссылка может быть использована <i>только с одним контактом</i> - поделитесь при встрече или через любой мессенджер.]]></string>
<string name="no_message_servers_configured_for_private_routing">Нет серверов для доставки сообщений.</string> <string name="no_message_servers_configured_for_private_routing">Нет серверов для доставки сообщений.</string>
<string name="onboarding_network_operators_configure_via_settings">Вы можете настроить серверы позже.</string> <string name="onboarding_network_operators_configure_via_settings">Вы можете настроить серверы позже.</string>
<string name="onboarding_network_operators_simplex_flux_agreement">SimpleX Chat и Flux заключили соглашение добавить серверы под управлением Flux в приложение.</string>
<string name="onboarding_network_operators_app_will_use_different_operators">Приложение улучшает конфиденциальность используя разных операторов в каждом разговоре.</string> <string name="onboarding_network_operators_app_will_use_different_operators">Приложение улучшает конфиденциальность используя разных операторов в каждом разговоре.</string>
<string name="onboarding_network_operators_cant_see_who_talks_to_whom">Когда больше чем один оператор включен, ни один из них не видит метаданные, чтобы определить, кто соединен с кем.</string> <string name="onboarding_network_operators_cant_see_who_talks_to_whom">Когда больше чем один оператор включен, ни один из них не видит метаданные, чтобы определить, кто соединен с кем.</string>
<string name="failed_to_save_servers">Ошибка сохранения серверов</string> <string name="failed_to_save_servers">Ошибка сохранения серверов</string>