diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 6c588f1f7a..fcf9455ea5 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -675,7 +675,7 @@ jobs: export PATH=$PATH:/c/ghcup/bin:$(echo /c/tools/ghc-*/bin || echo) scripts/desktop/build-lib-windows.sh cd apps/multiplatform - ./gradlew packageMsi + ./gradlew -Psimplex.assets.dir=../../assets packageMsi rm -rf dist-newstyle/src/direct-sq* path=$(echo $PWD/release/main/msi/*imple*.msi | sed 's#/\([a-z]\)#\1:#' | sed 's#/#\\#g') echo "package_path=$path" >> $GITHUB_OUTPUT diff --git a/README.md b/README.md index 818ed7142f..252fc95708 100644 --- a/README.md +++ b/README.md @@ -425,9 +425,9 @@ Please do NOT report security vulnerabilities via GitHub issues. ## License -This software is licensed under the GNU Affero General Public License version 3 (AGPLv3). See the [LICENSE](./LICENSE) file for details. The SimpleX and SimpleX Chat name, logo, and associated branding materials are not covered by this license and are subject to the terms outlined in the [TRADEMARK](./docs/TRADEMARK.md) file. +This software is licensed under the GNU Affero General Public License version 3 (AGPLv3). See the [LICENSE](./LICENSE) file for details. The SimpleX and SimpleX Chat name, logo, associated branding materials, and application and website graphic assets (illustrations, images, visual designs, etc.) are not covered by this license and are subject to the terms outlined in the [TRADEMARK](./docs/TRADEMARK.md) and [ASSETS_LICENSE](./assets/ASSETS_LICENSE.md) files respectively. -Graphic designs, artworks and layouts are not licensed for re-use. If you want to use them in your publications, please ask for permission. Texts can be used as direct quotes, referencing the source. +If you want to use any graphic assets in your publications, please ask for permission. Texts can be used as direct quotes, referencing the source. [iOS app](https://apps.apple.com/us/app/simplex-chat/id1605771084)   diff --git a/apps/ios/Shared/Model/SimpleXAPI.swift b/apps/ios/Shared/Model/SimpleXAPI.swift index 20653ab9db..85bb8a30b4 100644 --- a/apps/ios/Shared/Model/SimpleXAPI.swift +++ b/apps/ios/Shared/Model/SimpleXAPI.swift @@ -2183,7 +2183,7 @@ func startChat(refreshInvitations: Bool = true, onboarding: Bool = false) throws withAnimation { let savedOnboardingStage = onboardingStageDefault.get() m.onboardingStage = [.step1_SimpleXInfo, .step2_CreateProfile].contains(savedOnboardingStage) && m.users.count == 1 - ? .step3_ChooseServerOperators + ? .step4_NetworkCommitments : savedOnboardingStage if m.onboardingStage == .onboardingComplete && !privacyDeliveryReceiptsSet.get() { m.setDeliveryReceipts = true diff --git a/apps/ios/Shared/Views/Database/MigrateToAppGroupView.swift b/apps/ios/Shared/Views/Database/MigrateToAppGroupView.swift index 76bdc898d5..56e343588d 100644 --- a/apps/ios/Shared/Views/Database/MigrateToAppGroupView.swift +++ b/apps/ios/Shared/Views/Database/MigrateToAppGroupView.swift @@ -110,8 +110,8 @@ struct MigrateToAppGroupView: View { do { resetChatCtrl() try initializeChat(start: true) - onboardingStageDefault.set(.step4_SetNotificationsMode) - chatModel.onboardingStage = .step4_SetNotificationsMode + onboardingStageDefault.set(.step4_NetworkCommitments) + chatModel.onboardingStage = .step4_NetworkCommitments setV3DBMigration(.ready) } catch let error { dbContainerGroupDefault.set(.documents) diff --git a/apps/ios/Shared/Views/Helpers/DetermineWidth.swift b/apps/ios/Shared/Views/Helpers/DetermineWidth.swift index b05ab17089..54e9fe0e80 100644 --- a/apps/ios/Shared/Views/Helpers/DetermineWidth.swift +++ b/apps/ios/Shared/Views/Helpers/DetermineWidth.swift @@ -21,6 +21,19 @@ struct DetermineWidth: View { } } +struct DetermineHeight: View { + typealias Key = MaximumHeightPreferenceKey + var body: some View { + GeometryReader { proxy in + Color.clear + .preference( + key: MaximumHeightPreferenceKey.self, + value: proxy.size.height + ) + } + } +} + struct DetermineWidthImageVideoItem: View { typealias Key = MaximumWidthImageVideoPreferenceKey var body: some View { @@ -41,6 +54,13 @@ struct MaximumWidthPreferenceKey: PreferenceKey { } } +struct MaximumHeightPreferenceKey: PreferenceKey { + static var defaultValue: CGFloat = 0 + static func reduce(value: inout CGFloat, nextValue: () -> CGFloat) { + value = max(value, nextValue()) + } +} + struct MaximumWidthImageVideoPreferenceKey: PreferenceKey { static var defaultValue: CGFloat = 0 static func reduce(value: inout CGFloat, nextValue: () -> CGFloat) { diff --git a/apps/ios/Shared/Views/Onboarding/ChooseServerOperators.swift b/apps/ios/Shared/Views/Onboarding/ChooseServerOperators.swift index b5598c1f85..b61b81a46b 100644 --- a/apps/ios/Shared/Views/Onboarding/ChooseServerOperators.swift +++ b/apps/ios/Shared/Views/Onboarding/ChooseServerOperators.swift @@ -44,160 +44,147 @@ struct OnboardingButtonStyle: ButtonStyle { } } -private enum OnboardingConditionsViewSheet: Identifiable { - case showConditions - case configureOperators - - var id: String { - switch self { - case .showConditions: return "showConditions" - case .configureOperators: return "configureOperators" - } - } -} - struct OnboardingConditionsView: View { @EnvironmentObject var theme: AppTheme - @State private var serverOperators: [ServerOperator] = [] - @State private var selectedOperatorIds = Set() - @State private var sheetItem: OnboardingConditionsViewSheet? = nil - @State private var notificationsModeNavLinkActive = false - @State private var justOpened = true + @Environment(\.colorScheme) var colorScheme: ColorScheme + @State private var showConditionsSheet = false + var selectedOperatorIds: Set var body: some View { GeometryReader { g in - let v = ScrollView { - VStack(alignment: .leading, spacing: 20) { - Text("Conditions of use") - .font(.largeTitle) - .bold() - .frame(maxWidth: .infinity, alignment: .center) - .padding(.top, 25) + VStack(alignment: .leading, spacing: 10) { + Spacer(minLength: 0) - Spacer() + heroImage().frame(maxWidth: .infinity, minHeight: 80) - VStack(alignment: .leading, spacing: 20) { - Text("Private chats, groups and your contacts are not accessible to server operators.") - .lineSpacing(2) - .frame(maxWidth: .infinity, alignment: .leading) - Text(""" - By using SimpleX Chat you agree to: - - send only legal content in public groups. - - respect other users – no spam. - """) - .lineSpacing(2) - .frame(maxWidth: .infinity, alignment: .leading) + Text("Network commitments") + .font(.largeTitle) + .bold() + .multilineTextAlignment(.center) + .frame(maxWidth: .infinity, alignment: .center) + .fixedSize(horizontal: false, vertical: true) - Button("Privacy policy and conditions of use.") { - sheetItem = .showConditions - } - .frame(maxWidth: .infinity, alignment: .leading) - } - .padding(.horizontal, 4) + Text("Operators commit to:\n- Be independent\n- Minimize metadata usage\n- Run verified open-source code") + .font(.callout) + .lineSpacing(2) + .frame(maxWidth: .infinity, alignment: .leading) + .padding(.leading, 4) + .padding(.top, 10) + .fixedSize(horizontal: false, vertical: true) - Spacer() + Text("You commit to:\n- Only legal content in public groups\n- Respect other users - no spam") + .font(.callout) + .lineSpacing(2) + .frame(maxWidth: .infinity, alignment: .leading) + .padding(.leading, 4) + .padding(.top, 10) + .fixedSize(horizontal: false, vertical: true) - VStack(spacing: 12) { - acceptConditionsButton() - - Button("Configure server operators") { - sheetItem = .configureOperators - } - .frame(minHeight: 40) - } + Button { + showConditionsSheet = true + } label: { + Text("Privacy policy and conditions of use.") + .fontWeight(.medium) + .fixedSize(horizontal: false, vertical: true) } - .padding(25) - .frame(minHeight: g.size.height) + .frame(maxWidth: .infinity, alignment: .leading) + .padding(.leading, 4) + .padding(.top, 10) + .padding(.bottom, 15) + + Spacer(minLength: 0) + + acceptButton() + .padding(.bottom, g.safeAreaInsets.bottom == 0 ? 20 : 0) } - .onAppear { - if justOpened { - serverOperators = ChatModel.shared.conditions.serverOperators - selectedOperatorIds = Set(serverOperators.filter { $0.enabled }.map { $0.operatorId }) - justOpened = false + .padding(.horizontal, 25) + .padding(.top, 25) + .padding(.bottom, 25) + .frame(minHeight: g.size.height) + } + .frame(maxHeight: .infinity) + .navigationBarHidden(true) + .sheet(isPresented: $showConditionsSheet) { + NavigationView { + VStack { + ConditionsTextView() + .padding() + acceptButton() + .padding(.horizontal, 25) + .padding(.bottom, 20) } - } - .sheet(item: $sheetItem) { item in - switch item { - case .showConditions: - SimpleConditionsView() - .modifier(ThemedBackground(grouped: true)) - case .configureOperators: - ChooseServerOperators(serverOperators: serverOperators, selectedOperatorIds: $selectedOperatorIds) - .modifier(ThemedBackground()) - } - } - .frame(maxHeight: .infinity, alignment: .top) - if #available(iOS 16.4, *) { - v.scrollBounceBehavior(.basedOnSize) - } else { - v + .navigationTitle("Conditions of use") + .navigationBarTitleDisplayMode(.large) + .toolbar { ToolbarItem(placement: .navigationBarTrailing, content: conditionsLinkButton) } + .modifier(ThemedBackground(grouped: true)) } } - .frame(maxHeight: .infinity, alignment: .top) - .navigationBarHidden(true) // necessary on iOS 15 } - private func continueToNextStep() { - onboardingStageDefault.set(.step4_SetNotificationsMode) - notificationsModeNavLinkActive = true - } - - func notificationsModeNavLinkButton(_ button: @escaping (() -> some View)) -> some View { + @ViewBuilder + private func heroImage() -> some View { + #if SIMPLEX_ASSETS + Image(colorScheme == .light ? "network-commitments" : "network-commitments-light") + .resizable() + .scaledToFit() + #else ZStack { - button() - - NavigationLink(isActive: $notificationsModeNavLinkActive) { - notificationsModeDestinationView() - } label: { - EmptyView() - } - .frame(width: 1, height: 1) - .hidden() + let gp = OnboardingCardView.gradientPoints(aspectRatio: 1.5, scale: colorScheme == .light ? 1.2 : 1.5) + LinearGradient( + stops: colorScheme == .light ? OnboardingCardView.lightStops : OnboardingCardView.darkStops, + startPoint: gp.start, + endPoint: gp.end + ) + Image(systemName: "checkmark.shield") + .font(.system(size: 72)) + .foregroundColor(theme.colors.primary) } + .aspectRatio(1.5, contentMode: .fit) + .clipShape(RoundedRectangle(cornerRadius: 24)) + .padding(.horizontal, 25) + #endif } - private func notificationsModeDestinationView() -> some View { - SetNotificationsMode() - .navigationBarBackButtonHidden(true) - .modifier(ThemedBackground()) - } - - private func acceptConditionsButton() -> some View { - notificationsModeNavLinkButton { - Button { - Task { - do { - let conditionsId = ChatModel.shared.conditions.currentConditions.conditionsId - let r = try await acceptConditions(conditionsId: conditionsId, operatorIds: Array(selectedOperatorIds)) + private func acceptButton() -> some View { + Button { + Task { + do { + let conditionsId = ChatModel.shared.conditions.currentConditions.conditionsId + let r = try await acceptConditions(conditionsId: conditionsId, operatorIds: Array(selectedOperatorIds)) + await MainActor.run { + ChatModel.shared.conditions = r + } + if let enabledOps = enabledOperators(r.serverOperators) { + let r2 = try await setServerOperators(operators: enabledOps) await MainActor.run { - ChatModel.shared.conditions = r + ChatModel.shared.conditions = r2 + completeOnboarding() } - if let enabledOperators = enabledOperators(r.serverOperators) { - let r2 = try await setServerOperators(operators: enabledOperators) - await MainActor.run { - ChatModel.shared.conditions = r2 - continueToNextStep() - } - } else { - await MainActor.run { - continueToNextStep() - } - } - } catch let error { + } else { await MainActor.run { - showAlert( - NSLocalizedString("Error accepting conditions", comment: "alert title"), - message: responseError(error) - ) + completeOnboarding() } } + } catch let error { + await MainActor.run { + showAlert( + NSLocalizedString("Error accepting conditions", comment: "alert title"), + message: responseError(error) + ) + } } - } label: { - Text("Accept") } - .buttonStyle(OnboardingButtonStyle(isDisabled: selectedOperatorIds.isEmpty)) - .disabled(selectedOperatorIds.isEmpty) + } label: { + Text("Accept") } + .buttonStyle(OnboardingButtonStyle(isDisabled: selectedOperatorIds.isEmpty)) + .disabled(selectedOperatorIds.isEmpty) + } + + private func completeOnboarding() { + let m = ChatModel.shared + onboardingStageDefault.set(.onboardingComplete) + m.onboardingStage = .onboardingComplete } private func enabledOperators(_ operators: [ServerOperator]) -> [ServerOperator]? { @@ -222,7 +209,7 @@ struct OnboardingConditionsView: View { if !haveXFTPProxy { op.xftpRoles.proxy = true } ops[firstEnabledIndex] = op return ops - } else { // Shouldn't happen - view doesn't let to proceed if no operators are enabled + } else { return nil } } else { @@ -405,5 +392,5 @@ struct ChooseServerOperatorsInfoView: View { } #Preview { - OnboardingConditionsView() + OnboardingConditionsView(selectedOperatorIds: []) } diff --git a/apps/ios/Shared/Views/Onboarding/CreateProfile.swift b/apps/ios/Shared/Views/Onboarding/CreateProfile.swift index 7301c0421d..35820fdbe0 100644 --- a/apps/ios/Shared/Views/Onboarding/CreateProfile.swift +++ b/apps/ios/Shared/Views/Onboarding/CreateProfile.swift @@ -133,61 +133,115 @@ struct CreateProfile: View { struct CreateFirstProfile: View { @EnvironmentObject var m: ChatModel @EnvironmentObject var theme: AppTheme - @Environment(\.dismiss) var dismiss + @Environment(\.colorScheme) var colorScheme: ColorScheme @State private var displayName: String = "" @FocusState private var focusDisplayName @State private var nextStepNavLinkActive = false + @State private var showMigrateSheet = false + @State private var fixedContentHeight: CGFloat = 300 var body: some View { - let v = VStack(alignment: .leading, spacing: 16) { - VStack(alignment: .center, spacing: 16) { - Text("Create profile") - .font(.largeTitle) - .bold() - .multilineTextAlignment(.center) - - Text("Your profile is stored on your device and only shared with your contacts.") - .font(.callout) - .foregroundColor(theme.colors.secondary) - .multilineTextAlignment(.center) - } - .fixedSize(horizontal: false, vertical: true) - .frame(maxWidth: .infinity) // Ensures it takes up the full width - .padding(.horizontal, 10) - .onTapGesture { focusDisplayName = false } - - HStack { - let name = displayName.trimmingCharacters(in: .whitespaces) - let validName = mkValidName(name) - ZStack(alignment: .trailing) { - TextField("Enter your name…", text: $displayName) - .focused($focusDisplayName) - .padding(.horizontal) - .padding(.trailing, 20) - .padding(.vertical, 10) - .background( - RoundedRectangle(cornerRadius: 10, style: .continuous) - .fill(Color(uiColor: .tertiarySystemFill)) + let spacing: CGFloat = 10 + let minImageHeight: CGFloat = 80 + let topPadding: CGFloat = 8 + let padding: CGFloat = 25 + GeometryReader { g in + let v = ScrollView { + VStack(alignment: .center, spacing: spacing) { + #if SIMPLEX_ASSETS + Image(colorScheme == .light ? "your-profile" : "your-profile-light") + .resizable() + .scaledToFit() + .frame(maxWidth: .infinity, minHeight: minImageHeight) + .layoutPriority(1) + #else + ZStack { + let gp = OnboardingCardView.gradientPoints(aspectRatio: 1.0, scale: colorScheme == .light ? 1.2 : 1.5) + LinearGradient( + stops: colorScheme == .light ? OnboardingCardView.lightStops : OnboardingCardView.darkStops, + startPoint: gp.start, + endPoint: gp.end ) - if name != validName { - Button { - showAlert(.invalidNameError(validName: validName)) - } label: { - Image(systemName: "exclamationmark.circle") - .foregroundColor(.red) - .padding(.horizontal, 10) - } + Image(systemName: "person.crop.rectangle") + .font(.system(size: 72)) + .foregroundColor(theme.colors.primary) } + .aspectRatio(1.0, contentMode: .fit) + .clipShape(RoundedRectangle(cornerRadius: 24)) + .padding(.horizontal, 25) + .frame(maxWidth: .infinity, minHeight: minImageHeight) + .layoutPriority(1) + #endif + + VStack(alignment: .center, spacing: spacing) { + Text("Your profile") + .font(.largeTitle) + .bold() + .multilineTextAlignment(.center) + .fixedSize(horizontal: false, vertical: true) + + Text("On your phone, not on any server.") + .font(.title3) + .fontWeight(.medium) + .foregroundColor(theme.colors.secondary) + .multilineTextAlignment(.center) + .fixedSize(horizontal: false, vertical: true) + + Text("No account. No phone. No email. No ID.\nThe most secure encryption.") + .font(.footnote) + .foregroundColor(theme.colors.secondary) + .multilineTextAlignment(.center) + .fixedSize(horizontal: false, vertical: true) + + profileNameField() + .padding(.top) + .padding(.bottom, 5) + + Spacer(minLength: 0) + + createProfileButton() + .padding(.bottom, g.safeAreaInsets.bottom == 0 ? 20 : 0) + } + .overlay(DetermineHeight()) + .onPreferenceChange(DetermineHeight.Key.self) { fixedContentHeight = $0 } + } + .padding(.horizontal, padding) + .padding(.top, topPadding) + .padding(.bottom, padding) + .frame( + minHeight: g.size.height, + idealHeight: max(g.size.height, fixedContentHeight + minImageHeight + spacing + topPadding + padding) + ) + } + .onTapGesture { focusDisplayName = false } + .sheet(isPresented: $showMigrateSheet, onDismiss: { m.migrationState = nil }) { + NavigationView { + MigrateToDevice(migrationState: $m.migrationState) + .navigationTitle("Migrate here") + .modifier(ThemedBackground(grouped: true)) } } - .padding(.top) - - Spacer() - - VStack(spacing: 10) { - createProfileButton() - if !focusDisplayName { - onboardingButtonPlaceholder() + if #available(iOS 17, *) { + v.scrollBounceBehavior(.basedOnSize).defaultScrollAnchor(.bottom) + } else if #available(iOS 16.4.0, *) { + v.scrollBounceBehavior(.basedOnSize) + } else { + v + } + } + .toolbar { + ToolbarItem(placement: .navigationBarTrailing) { + Button { + if m.migrationState == nil { + m.migrationState = .pasteOrScanLink + } + showMigrateSheet = true + } label: { + HStack(spacing: 4) { + Image(systemName: "tray.and.arrow.down") + Text("Migrate") + .fontWeight(.medium) + } } } } @@ -195,23 +249,40 @@ struct CreateFirstProfile: View { if #available(iOS 16, *) { focusDisplayName = true } else { - // it does not work before animation completes on iOS 15 DispatchQueue.main.asyncAfter(deadline: .now() + 0.5) { focusDisplayName = true } } } - .padding(.horizontal, 25) - .padding(.bottom, 25) - .frame(maxWidth: .infinity, alignment: .leading) - if #available(iOS 16, *) { - return v.padding(.top, 10) - } else { - return v.padding(.top, 75).ignoresSafeArea(.all, edges: .top) + .frame(maxHeight: .infinity) + } + + private func profileNameField() -> some View { + let name = displayName.trimmingCharacters(in: .whitespaces) + let validName = mkValidName(name) + return ZStack(alignment: .trailing) { + TextField("Enter profile name...", text: $displayName) + .focused($focusDisplayName) + .padding(.horizontal) + .padding(.trailing, name != validName ? 20 : 0) + .padding(.vertical, 10) + .background( + RoundedRectangle(cornerRadius: 10, style: .continuous) + .fill(Color(uiColor: .tertiarySystemFill)) + ) + if name != validName { + Button { + showAlert(.invalidNameError(validName: validName)) + } label: { + Image(systemName: "exclamationmark.circle") + .foregroundColor(.red) + .padding(.horizontal, 10) + } + } } } - func createProfileButton() -> some View { + private func createProfileButton() -> some View { ZStack { Button { createProfile() @@ -236,7 +307,7 @@ struct CreateFirstProfile: View { } private func nextStepDestinationView() -> some View { - OnboardingConditionsView() + YourNetworkView() .navigationBarBackButtonHidden(true) .modifier(ThemedBackground()) } diff --git a/apps/ios/Shared/Views/Onboarding/HowItWorks.swift b/apps/ios/Shared/Views/Onboarding/HowItWorks.swift index c881146ef5..e9b9c6b970 100644 --- a/apps/ios/Shared/Views/Onboarding/HowItWorks.swift +++ b/apps/ios/Shared/Views/Onboarding/HowItWorks.swift @@ -9,7 +9,7 @@ import SwiftUI -struct HowItWorks: View { +struct OldHowItWorks: View { @Environment(\.dismiss) var dismiss: DismissAction @EnvironmentObject var m: ChatModel var onboarding: Bool @@ -61,9 +61,57 @@ struct HowItWorks: View { } } -struct HowItWorks_Previews: PreviewProvider { +struct WhySimpleX: View { + @Environment(\.dismiss) var dismiss: DismissAction + @EnvironmentObject var m: ChatModel + var onboarding: Bool + @Binding var createProfileNavLinkActive: Bool + + var body: some View { + VStack(alignment: .leading) { + ScrollView { + VStack(alignment: .leading, spacing: 16) { + Text("You were born without an account") + .font(.title) + .bold() + .padding(.top) + Text("Nobody tracked your conversations. No one drew a map of where you'd been. Privacy was never a feature - it was the way of life.") + Text("Then we moved online, and every platform asked for a piece of you - your name, your number, your friends. We accepted that the price of talking to others is letting someone know who we talk to. Every generation, people and tech, had it this way - telephone, email, messengers, social media. It seemed the only way possible.") + Text("There is another way. A network with no phone numbers. No usernames. No accounts. No user identities of any kind. A network that connects people and carries encrypted messages without knowing who is connected.") + Text("Not a better lock on someone else's door. Not a nicer landlord that respects your privacy, but still keeps the record of all visitors. You are not a guest. You are home. No king can enter it - you are sovereign.") + Text("Your conversations belong to you, as it had always been before the Internet. The network is not a place you visit. It is a place you create and own. And nobody can take it from you, whether you make it private or public.") + Text("The oldest human freedom - to speak to another person without being watched - built on infrastructure that cannot betray it.") + Text("Because we destroyed the power to know who you are. So that your power can never be taken.") + Text("Be free in your network.") + } + } + .padding(.bottom, 16) + + Spacer() + + if onboarding { + createFirstProfileButton() + } + } + .padding(onboarding ? 25 : 16) + .frame(maxHeight: .infinity, alignment: .top) + .modifier(ThemedBackground()) + } + + private func createFirstProfileButton() -> some View { + Button { + dismiss() + createProfileNavLinkActive = true + } label: { + Text("Get started") + } + .buttonStyle(OnboardingButtonStyle(isDisabled: false)) + } +} + +struct WhySimpleX_Previews: PreviewProvider { static var previews: some View { - HowItWorks( + WhySimpleX( onboarding: true, createProfileNavLinkActive: Binding.constant(false) ) diff --git a/apps/ios/Shared/Views/Onboarding/OnboardingView.swift b/apps/ios/Shared/Views/Onboarding/OnboardingView.swift index daef95fbc6..39ccabce04 100644 --- a/apps/ios/Shared/Views/Onboarding/OnboardingView.swift +++ b/apps/ios/Shared/Views/Onboarding/OnboardingView.swift @@ -19,17 +19,18 @@ struct OnboardingView: View { case .step1_SimpleXInfo: SimpleXInfo(onboarding: true) .modifier(ThemedBackground()) - case .step2_CreateProfile: // deprecated + case .step2_CreateProfile: CreateFirstProfile() .modifier(ThemedBackground()) case .step3_CreateSimpleXAddress: // deprecated CreateSimpleXAddress() - case .step3_ChooseServerOperators: - OnboardingConditionsView() + case .step3_ChooseServerOperators, + .step4_SetNotificationsMode: // deprecated + YourNetworkView() .navigationBarBackButtonHidden(true) .modifier(ThemedBackground()) - case .step4_SetNotificationsMode: - SetNotificationsMode() + case .step4_NetworkCommitments: + OnboardingConditionsView(selectedOperatorIds: Set(ChatModel.shared.conditions.serverOperators.filter { $0.enabled }.map { $0.operatorId })) .navigationBarBackButtonHidden(true) .modifier(ThemedBackground()) case .onboardingComplete: EmptyView() @@ -45,10 +46,11 @@ func onboardingButtonPlaceholder() -> some View { // Spec: spec/client/navigation.md#onboardingStage enum OnboardingStage: String, Identifiable { case step1_SimpleXInfo - case step2_CreateProfile // deprecated + case step2_CreateProfile case step3_CreateSimpleXAddress // deprecated - case step3_ChooseServerOperators // changed to simplified conditions - case step4_SetNotificationsMode + case step3_ChooseServerOperators + case step4_SetNotificationsMode // deprecated + case step4_NetworkCommitments case onboardingComplete public var id: Self { self } diff --git a/apps/ios/Shared/Views/Onboarding/SetNotificationsMode.swift b/apps/ios/Shared/Views/Onboarding/SetNotificationsMode.swift index 717405b03b..1a1f1bb68c 100644 --- a/apps/ios/Shared/Views/Onboarding/SetNotificationsMode.swift +++ b/apps/ios/Shared/Views/Onboarding/SetNotificationsMode.swift @@ -11,45 +11,39 @@ import SwiftUI import SimpleXChat struct SetNotificationsMode: View { - @EnvironmentObject var m: ChatModel - @State private var notificationMode = NotificationsMode.instant - @State private var showAlert: NotificationAlert? - @State private var showInfo: Bool = false + @Environment(\.dismiss) var dismiss + @Binding var notificationMode: NotificationsMode + @State private var showInfo = false var body: some View { GeometryReader { g in - let v = ScrollView { + ScrollView { VStack(alignment: .center, spacing: 20) { Text("Push notifications") .font(.largeTitle) .bold() .padding(.top, 25) - - infoText() - + + Button { + showInfo = true + } label: { + Label("How it affects privacy", systemImage: "info.circle") + .font(.headline) + } + Spacer() ForEach(NotificationsMode.values) { mode in NtfModeSelector(mode: mode, selection: $notificationMode) } - + Spacer() - + VStack(spacing: 10) { Button { - if let token = m.deviceToken { - setNotificationsMode(token, notificationMode) - } else { - AlertManager.shared.showAlertMsg(title: "No device token!") - } - onboardingStageDefault.set(.onboardingComplete) - m.onboardingStage = .onboardingComplete + dismiss() } label: { - if case .off = notificationMode { - Text("Use chat") - } else { - Text("Enable notifications") - } + Text("OK") } .buttonStyle(OnboardingButtonStyle()) onboardingButtonPlaceholder() @@ -58,50 +52,11 @@ struct SetNotificationsMode: View { .padding(25) .frame(minHeight: g.size.height) } - if #available(iOS 16.4, *) { - v.scrollBounceBehavior(.basedOnSize) - } else { - v - } } .frame(maxHeight: .infinity) .sheet(isPresented: $showInfo) { NotificationsInfoView() } - .navigationBarHidden(true) // necessary on iOS 15 - } - - private func setNotificationsMode(_ token: DeviceToken, _ mode: NotificationsMode) { - switch mode { - case .off: - m.tokenStatus = .new - m.notificationMode = .off - default: - Task { - do { - let status = try await apiRegisterToken(token: token, notificationMode: mode) - await MainActor.run { - m.tokenStatus = status - m.notificationMode = mode - } - } catch let error { - let a = getErrorAlert(error, "Error enabling notifications") - AlertManager.shared.showAlertMsg( - title: a.title, - message: a.message - ) - } - } - } - } - - private func infoText() -> some View { - Button { - showInfo = true - } label: { - Label("How it affects privacy", systemImage: "info.circle") - .font(.headline) - } } } @@ -180,6 +135,6 @@ struct NotificationsInfoView: View { struct NotificationsModeView_Previews: PreviewProvider { static var previews: some View { - SetNotificationsMode() + SetNotificationsMode(notificationMode: .constant(.instant)) } } diff --git a/apps/ios/Shared/Views/Onboarding/SimpleXInfo.swift b/apps/ios/Shared/Views/Onboarding/SimpleXInfo.swift index 80f35c1190..15b8e05b5e 100644 --- a/apps/ios/Shared/Views/Onboarding/SimpleXInfo.swift +++ b/apps/ios/Shared/Views/Onboarding/SimpleXInfo.swift @@ -12,68 +12,84 @@ import SimpleXChat struct SimpleXInfo: View { @EnvironmentObject var m: ChatModel + @EnvironmentObject var theme: AppTheme @Environment(\.colorScheme) var colorScheme: ColorScheme - @State private var showHowItWorks = false + @State private var showWhyBuilt = false @State private var createProfileNavLinkActive = false var onboarding: Bool var body: some View { GeometryReader { g in - let v = ScrollView { - VStack(alignment: .leading) { - VStack(alignment: .center, spacing: 10) { - Image(colorScheme == .light ? "logo" : "logo-light") - .resizable() - .aspectRatio(contentMode: .fit) - .frame(width: g.size.width * 0.67) - .padding(.bottom, 8) - .padding(.leading, 4) - .frame(maxWidth: .infinity, minHeight: 48, alignment: .top) - - Button { - showHowItWorks = true - } label: { - Label("The future of messaging", systemImage: "info.circle") - .font(.headline) - } - } + VStack(alignment: .center, spacing: 10) { + Image(colorScheme == .light ? "logo" : "logo-light") + .resizable() + .aspectRatio(contentMode: .fit) + .frame(width: (g.size.width - 50) * 0.55) + .padding(.leading, 4) + .frame(maxWidth: .infinity, minHeight: 48, alignment: .top) - Spacer() + #if SIMPLEX_ASSETS + Image(colorScheme == .light ? "intro" : "intro-light") + .resizable() + .scaledToFit() + .frame(maxWidth: .infinity) + #else + ZStack { + let gp = OnboardingCardView.gradientPoints(aspectRatio: 1.0, scale: colorScheme == .light ? 1.2 : 1.5) + LinearGradient( + stops: colorScheme == .light ? OnboardingCardView.lightStops : OnboardingCardView.darkStops, + startPoint: gp.start, + endPoint: gp.end + ) + Image(systemName: "bubble.left.and.bubble.right") + .font(.system(size: 72)) + .foregroundColor(theme.colors.primary) + } + .aspectRatio(1.0, contentMode: .fit) + .clipShape(RoundedRectangle(cornerRadius: 24)) + .padding(.horizontal, 25) + .frame(maxWidth: .infinity) + #endif - VStack(alignment: .leading) { - onboardingInfoRow("privacy", "Privacy redefined", - "No user identifiers.", width: 48) - onboardingInfoRow("shield", "Immune to spam", - "You decide who can connect.", width: 46) - onboardingInfoRow(colorScheme == .light ? "decentralized" : "decentralized-light", "Decentralized", - "Anybody can host servers.", width: 46) - } - .padding(.leading, 16) + Text("Be free\nin your network") + .font(.largeTitle) + .bold() + .multilineTextAlignment(.center) + .fixedSize(horizontal: false, vertical: true) - Spacer() + Text("Private and secure messaging.") + .font(.title3) + .fontWeight(.medium) + .foregroundColor(theme.colors.secondary) + .multilineTextAlignment(.center) + .fixedSize(horizontal: false, vertical: true) - if onboarding { - VStack(spacing: 10) { - createFirstProfileButton() + Text("The first network where you own\nyour contacts and groups.") + .font(.footnote) + .foregroundColor(theme.colors.secondary) + .multilineTextAlignment(.center) + .fixedSize(horizontal: false, vertical: true) - Button { - m.migrationState = .pasteOrScanLink - } label: { - Label("Migrate from another device", systemImage: "tray.and.arrow.down") - .font(.system(size: 17, weight: .semibold)) - .frame(minHeight: 40) - } - .frame(maxWidth: .infinity) - } + if onboarding { + Spacer(minLength: 0) + + createFirstProfileButton() + .padding(.vertical, 10) + + Button { + showWhyBuilt = true + } label: { + Label("Why SimpleX is built.", systemImage: "info.circle") + .font(.headline) } } - .padding(.horizontal, 25) - .padding(.top, 75) - .padding(.bottom, 25) - .frame(minHeight: g.size.height) } + .padding(.horizontal, 25) + .padding(.top, 28) + .padding(.bottom, 20) + .frame(minHeight: g.size.height) .sheet(isPresented: Binding( - get: { m.migrationState != nil }, + get: { m.migrationState != nil && !createProfileNavLinkActive }, set: { _ in m.migrationState = nil MigrationToDeviceState.save(nil) } @@ -86,17 +102,12 @@ struct SimpleXInfo: View { .modifier(ThemedBackground(grouped: true)) } } - .sheet(isPresented: $showHowItWorks) { - HowItWorks( + .sheet(isPresented: $showWhyBuilt) { + WhySimpleX( onboarding: onboarding, createProfileNavLinkActive: $createProfileNavLinkActive ) } - if #available(iOS 16.4, *) { - v.scrollBounceBehavior(.basedOnSize) - } else { - v - } } .onAppear() { setLastVersionDefault() @@ -105,32 +116,12 @@ struct SimpleXInfo: View { .navigationBarHidden(true) // necessary on iOS 15 } - private func onboardingInfoRow(_ image: String, _ title: LocalizedStringKey, _ text: LocalizedStringKey, width: CGFloat) -> some View { - HStack(alignment: .top) { - Image(image) - .resizable() - .scaledToFit() - .frame(width: width, height: 54) - .frame(width: 54) - .padding(.trailing, 10) - VStack(alignment: .leading, spacing: 4) { - Text(title).font(.headline) - Text(text).frame(minHeight: 40, alignment: .top) - .font(.callout) - .lineLimit(3) - .fixedSize(horizontal: false, vertical: true) - } - .padding(.top, 4) - } - .padding(.bottom, 12) - } - private func createFirstProfileButton() -> some View { ZStack { Button { createProfileNavLinkActive = true } label: { - Text("Create your profile") + Text("Get started") } .buttonStyle(OnboardingButtonStyle(isDisabled: false)) diff --git a/apps/ios/Shared/Views/Onboarding/YourNetwork.swift b/apps/ios/Shared/Views/Onboarding/YourNetwork.swift new file mode 100644 index 0000000000..d3727e196e --- /dev/null +++ b/apps/ios/Shared/Views/Onboarding/YourNetwork.swift @@ -0,0 +1,193 @@ +// +// YourNetwork.swift +// SimpleX (iOS) +// +// Created by Evgeny on 22/04/2026. +// Copyright © 2026 SimpleX Chat. All rights reserved. +// + +import SwiftUI +import SimpleXChat + +private enum YourNetworkSheet: Identifiable { + case configureOperators + case configureNotifications + + var id: String { + switch self { + case .configureOperators: return "configureOperators" + case .configureNotifications: return "configureNotifications" + } + } +} + +struct YourNetworkView: View { + @EnvironmentObject var theme: AppTheme + @Environment(\.colorScheme) var colorScheme: ColorScheme + @State private var serverOperators: [ServerOperator] = [] + @State private var selectedOperatorIds = Set() + @State private var notificationMode: NotificationsMode = .instant + @State private var sheetItem: YourNetworkSheet? = nil + @State private var nextStepNavLinkActive = false + @State private var justOpened = true + + var body: some View { + GeometryReader { g in + VStack(alignment: .center, spacing: 10) { + Spacer(minLength: 0) + + #if SIMPLEX_ASSETS + Image(colorScheme == .light ? "your-network" : "your-network-light") + .resizable() + .scaledToFit() + .frame(maxWidth: .infinity) + #else + ZStack { + let gp = OnboardingCardView.gradientPoints(aspectRatio: 1.0, scale: colorScheme == .light ? 1.2 : 1.5) + LinearGradient( + stops: colorScheme == .light ? OnboardingCardView.lightStops : OnboardingCardView.darkStops, + startPoint: gp.start, + endPoint: gp.end + ) + Image(systemName: "network") + .font(.system(size: 72)) + .foregroundColor(theme.colors.primary) + } + .aspectRatio(1.0, contentMode: .fit) + .clipShape(RoundedRectangle(cornerRadius: 24)) + .padding(.horizontal, 25) + .frame(maxWidth: .infinity) + #endif + + Text("Your network") + .font(.largeTitle) + .bold() + .multilineTextAlignment(.center) + .fixedSize(horizontal: false, vertical: true) + .padding(.top, 15) + + Text("Network routers cannot know\nwho talks to whom") + .font(.title3) + .fontWeight(.medium) + .foregroundColor(theme.colors.secondary) + .multilineTextAlignment(.center) + .fixedSize(horizontal: false, vertical: true) + + VStack(alignment: .leading, spacing: 20) { + configureRoutersButton() + configureNotificationsButton() + } + .padding(.top, 15) + .padding(.bottom, 15) + + Spacer(minLength: 0) + + continueButton() + .padding(.bottom, g.safeAreaInsets.bottom == 0 ? 20 : 0) + } + .padding(.horizontal, 25) + .padding(.top, 8) + .padding(.bottom, 20) + .frame(minHeight: g.size.height) + } + .onAppear { + if justOpened { + serverOperators = ChatModel.shared.conditions.serverOperators + selectedOperatorIds = Set(serverOperators.filter { $0.enabled }.map { $0.operatorId }) + justOpened = false + } + } + .sheet(item: $sheetItem) { item in + switch item { + case .configureOperators: + ChooseServerOperators(serverOperators: serverOperators, selectedOperatorIds: $selectedOperatorIds) + .modifier(ThemedBackground()) + case .configureNotifications: + SetNotificationsMode(notificationMode: $notificationMode) + .modifier(ThemedBackground()) + } + } + .frame(maxHeight: .infinity) + .navigationBarHidden(true) + } + + private func configureRoutersButton() -> some View { + Button { + sheetItem = .configureOperators + } label: { + HStack(spacing: 6) { + Text("Setup routers") + .fontWeight(.medium) + ForEach(serverOperators.reversed()) { op in + Image(op.logo(colorScheme)) + .resizable() + .scaledToFit() + .frame(width: 22, height: 22) + .grayscale(selectedOperatorIds.contains(op.operatorId) ? 0.0 : 1.0) + } + } + } + } + + private func configureNotificationsButton() -> some View { + Button { + sheetItem = .configureNotifications + } label: { + HStack(spacing: 4) { + Text("Setup notifications") + .fontWeight(.medium) + Image(systemName: notificationMode.icon) + } + } + } + + private func continueButton() -> some View { + ZStack { + Button { + applyNotificationMode() + onboardingStageDefault.set(.step4_NetworkCommitments) + nextStepNavLinkActive = true + } label: { + Text("Continue") + } + .buttonStyle(OnboardingButtonStyle()) + + NavigationLink(isActive: $nextStepNavLinkActive) { + OnboardingConditionsView(selectedOperatorIds: selectedOperatorIds) + .navigationBarBackButtonHidden(true) + .modifier(ThemedBackground()) + } label: { + EmptyView() + } + .frame(width: 1, height: 1) + .hidden() + } + } + + private func applyNotificationMode() { + let m = ChatModel.shared + if let token = m.deviceToken { + switch notificationMode { + case .off: + m.tokenStatus = .new + m.notificationMode = .off + default: + Task { + do { + let status = try await apiRegisterToken(token: token, notificationMode: notificationMode) + await MainActor.run { + m.tokenStatus = status + m.notificationMode = notificationMode + } + } catch let error { + let a = getErrorAlert(error, "Error enabling notifications") + AlertManager.shared.showAlertMsg( + title: a.title, + message: a.message + ) + } + } + } + } + } +} diff --git a/apps/ios/Shared/Views/UserSettings/NetworkAndServers/NetworkAndServers.swift b/apps/ios/Shared/Views/UserSettings/NetworkAndServers/NetworkAndServers.swift index c1f2470669..f10b945dc0 100644 --- a/apps/ios/Shared/Views/UserSettings/NetworkAndServers/NetworkAndServers.swift +++ b/apps/ios/Shared/Views/UserSettings/NetworkAndServers/NetworkAndServers.swift @@ -351,21 +351,6 @@ private func regularConditionsHeader() -> some View { } } -struct SimpleConditionsView: View { - - var body: some View { - VStack(alignment: .leading, spacing: 20) { - regularConditionsHeader() - .padding(.top) - .padding(.top) - ConditionsTextView() - .padding(.bottom) - .padding(.bottom) - } - .padding(.horizontal, 25) - .frame(maxHeight: .infinity) - } -} func validateServers_( _ userServers: Binding<[UserOperatorServers]>, diff --git a/apps/ios/SimpleX Localizations/bg.xcloc/Localized Contents/bg.xliff b/apps/ios/SimpleX Localizations/bg.xcloc/Localized Contents/bg.xliff index c8c564ada7..ce993ecb02 100644 --- a/apps/ios/SimpleX Localizations/bg.xcloc/Localized Contents/bg.xliff +++ b/apps/ios/SimpleX Localizations/bg.xcloc/Localized Contents/bg.xliff @@ -1117,11 +1117,6 @@ swipe action Отговор на повикване No comment provided by engineer. - - Anybody can host servers. - Протокол и код с отворен код – всеки може да оперира собствени сървъри. - No comment provided by engineer. - App build: %@ Компилация на приложението: %@ @@ -1326,6 +1321,19 @@ swipe action Лош хеш на съобщението No comment provided by engineer. + + Be free +in your network + No comment provided by engineer. + + + Be free in your network. + No comment provided by engineer. + + + Because we destroyed the power to know who you are. So that your power can never be taken. + No comment provided by engineer. + Better calls По-добри обаждания @@ -1509,15 +1517,6 @@ swipe action Чрез чат профил (по подразбиране) или [чрез връзка](https://simplex.chat/blog/20230204-simplex-chat-v4-5-user-chat-profiles.html#transport-isolation) (БЕТА). No comment provided by engineer. - - By using SimpleX Chat you agree to: -- send only legal content in public groups. -- respect other users – no spam. - С използването на SimpleX Chat вие се съгласявате със: -- изпращане само на легално съдържание в публични групи. -- уважение към другите потребители – без спам. - No comment provided by engineer. - Call already ended! Разговорът вече приключи! @@ -2048,11 +2047,6 @@ chat toolbar Configure relays No comment provided by engineer. - - Configure server operators - Конфигуриране на сървърни оператори - No comment provided by engineer. - Confirm Потвърди @@ -2650,11 +2644,6 @@ This is your own one-time link! Debug delivery No comment provided by engineer. - - Decentralized - Децентрализиран - No comment provided by engineer. - Decode link relay test step @@ -3461,6 +3450,10 @@ chat item action Въведете парола по-горе, за да се покаже! No comment provided by engineer. + + Enter profile name... + No comment provided by engineer. + Enter relay name… No comment provided by engineer. @@ -4297,6 +4290,10 @@ Error: %2$@ Get notified when mentioned. No comment provided by engineer. + + Get started + No comment provided by engineer. + Good afternoon! message preview @@ -4560,11 +4557,6 @@ Error: %2$@ Веднага No comment provided by engineer. - - Immune to spam - Защитен от спам и злоупотреби - No comment provided by engineer. - Import Импортиране @@ -5402,16 +5394,15 @@ This is your link for group %@! Съобщенията, файловете и разговорите са защитени чрез **квантово устойчиво e2e криптиране** с перфектна секретност при препращане, правдоподобно опровержение и възстановяване при взлом. No comment provided by engineer. + + Migrate + No comment provided by engineer. + Migrate device Мигрирай устройството No comment provided by engineer. - - Migrate from another device - Мигриране от друго устройство - No comment provided by engineer. - Migrate here Мигрирай тук @@ -5524,6 +5515,11 @@ This is your link for group %@! Име swipe action + + Network +commitments + No comment provided by engineer. + Network & servers Мрежа и сървъри @@ -5555,6 +5551,11 @@ This is your link for group %@! Network operator No comment provided by engineer. + + Network routers cannot know +who talks to whom + No comment provided by engineer. + Network settings Мрежови настройки @@ -5664,6 +5665,11 @@ This is your link for group %@! Не No comment provided by engineer. + + No account. No phone. No email. No ID. +The most secure encryption. + No comment provided by engineer. + No active relays No comment provided by engineer. @@ -5808,15 +5814,18 @@ This is your link for group %@! No unread chats No comment provided by engineer. - - No user identifiers. - Първата платформа без никакви потребителски идентификатори – поверителна по дизайн. + + Nobody tracked your conversations. No one drew a map of where you'd been. Privacy was never a feature - it was the way of life. No comment provided by engineer. Non-profit governance No comment provided by engineer. + + Not a better lock on someone else's door. Not a nicer landlord that respects your privacy, but still keeps the record of all visitors. You are not a guest. You are home. No king can enter it - you are sovereign. + No comment provided by engineer. + Not all relays connected alert title @@ -5891,6 +5900,10 @@ new chat action Стара база данни No comment provided by engineer. + + On your phone, not on any server. + No comment provided by engineer. + One-time invitation link Линк за еднократна покана @@ -6117,6 +6130,13 @@ alert button Operator server alert title + + Operators commit to: +- Be independent +- Minimize metadata usage +- Run verified open-source code + No comment provided by engineer. + Or import archive file No comment provided by engineer. @@ -6420,17 +6440,12 @@ Error: %@ Privacy policy and conditions of use. No comment provided by engineer. - - Privacy redefined - Поверителността преосмислена - No comment provided by engineer. - Privacy: for owners and subscribers. No comment provided by engineer. - - Private chats, groups and your contacts are not accessible to server operators. + + Private and secure messaging. No comment provided by engineer. @@ -7720,6 +7735,14 @@ chat item action Settings were changed. alert message + + Setup notifications + No comment provided by engineer. + + + Setup routers + No comment provided by engineer. + Shape profile images Променете формата на профилните изображения @@ -8435,9 +8458,9 @@ It can happen because of some bug or when the connection is compromised.Криптирането работи и новото споразумение за криптиране не е необходимо. Това може да доведе до грешки при свързване! No comment provided by engineer. - - The future of messaging - Ново поколение поверителни съобщения + + The first network where you own +your contacts and groups. No comment provided by engineer. @@ -8472,6 +8495,10 @@ It can happen because of some bug or when the connection is compromised.Старата база данни не бе премахната по време на миграцията, тя може да бъде изтрита. No comment provided by engineer. + + The oldest human freedom - to speak to another person without being watched - built on infrastructure that cannot betray it. + No comment provided by engineer. + The same conditions will apply to operator **%@**. No comment provided by engineer. @@ -8512,6 +8539,14 @@ It can happen because of some bug or when the connection is compromised.Themes No comment provided by engineer. + + Then we moved online, and every platform asked for a piece of you - your name, your number, your friends. We accepted that the price of talking to others is letting someone know who we talk to. Every generation, people and tech, had it this way - telephone, email, messengers, social media. It seemed the only way possible. + No comment provided by engineer. + + + There is another way. A network with no phone numbers. No usernames. No accounts. No user identities of any kind. A network that connects people and carries encrypted messages without knowing who is connected. + No comment provided by engineer. + These conditions will also apply for: **%@**. No comment provided by engineer. @@ -9335,6 +9370,10 @@ To connect, please ask your contact to create another connection link and check Когато споделяте инкогнито профил с някого, този профил ще се използва за групите, в които той ви кани. No comment provided by engineer. + + Why SimpleX is built. + No comment provided by engineer. + WiFi WiFi @@ -9581,6 +9620,12 @@ Repeat join request? Не може да изпращате съобщения! alert title + + You commit to: +- Only legal content in public groups +- Respect other users - no spam + No comment provided by engineer. + You connected to the channel via this relay link. No comment provided by engineer. @@ -9590,11 +9635,6 @@ Repeat join request? Не можахте да бъдете потвърдени; Моля, опитайте отново. No comment provided by engineer. - - You decide who can connect. - Хората могат да се свържат с вас само чрез ликовете, които споделяте. - No comment provided by engineer. - You have already requested connection! Repeat connection request? @@ -9658,6 +9698,10 @@ Repeat connection request? You should receive notifications. token info + + You were born without an account + No comment provided by engineer. + You will be able to send messages **only after your request is accepted**. No comment provided by engineer. @@ -9789,6 +9833,10 @@ Repeat connection request? Вашите контакти ще останат свързани. No comment provided by engineer. + + Your conversations belong to you, as it had always been before the Internet. The network is not a place you visit. It is a place you create and own. And nobody can take it from you, whether you make it private or public. + No comment provided by engineer. + Your credentials may be sent unencrypted. No comment provided by engineer. @@ -9807,6 +9855,10 @@ Repeat connection request? Your group No comment provided by engineer. + + Your network + No comment provided by engineer. + Your preferences Вашите настройки diff --git a/apps/ios/SimpleX Localizations/cs.xcloc/Localized Contents/cs.xliff b/apps/ios/SimpleX Localizations/cs.xcloc/Localized Contents/cs.xliff index 1a0a53b884..2f2059edd3 100644 --- a/apps/ios/SimpleX Localizations/cs.xcloc/Localized Contents/cs.xliff +++ b/apps/ios/SimpleX Localizations/cs.xcloc/Localized Contents/cs.xliff @@ -1102,11 +1102,6 @@ swipe action Přijmout hovor No comment provided by engineer. - - Anybody can host servers. - Servery může provozovat kdokoli. - No comment provided by engineer. - App build: %@ Sestavení aplikace: %@ @@ -1301,6 +1296,21 @@ swipe action Špatný hash zprávy No comment provided by engineer. + + Be free +in your network + No comment provided by engineer. + + + Be free in your network. + Buďte svobodní ve své síti. + No comment provided by engineer. + + + Because we destroyed the power to know who you are. So that your power can never be taken. + Protože jsme zničili sílu vědět, kdo jste. Aby vám vaši moc nikdo nemohl vzít. + No comment provided by engineer. + Better calls Lepší volání @@ -1471,12 +1481,6 @@ swipe action Podle profilu chatu (výchozí) nebo [podle připojení](https://simplex.chat/blog/20230204-simplex-chat-v4-5-user-chat-profiles.html#transport-isolation) (BETA). No comment provided by engineer. - - By using SimpleX Chat you agree to: -- send only legal content in public groups. -- respect other users – no spam. - No comment provided by engineer. - Call already ended! Hovor již skončil! @@ -1974,10 +1978,6 @@ chat toolbar Configure relays No comment provided by engineer. - - Configure server operators - No comment provided by engineer. - Confirm Potvrdit @@ -2540,11 +2540,6 @@ Toto je váš vlastní jednorázový odkaz! Debug delivery No comment provided by engineer. - - Decentralized - Decentralizované - No comment provided by engineer. - Decode link relay test step @@ -3330,6 +3325,10 @@ chat item action Zadejte heslo do hledání! No comment provided by engineer. + + Enter profile name... + No comment provided by engineer. + Enter relay name… No comment provided by engineer. @@ -4145,6 +4144,10 @@ Error: %2$@ Get notified when mentioned. No comment provided by engineer. + + Get started + No comment provided by engineer. + Good afternoon! message preview @@ -4404,11 +4407,6 @@ Error: %2$@ Ihned No comment provided by engineer. - - Immune to spam - Odolná vůči spamu a zneužití - No comment provided by engineer. - Import Import @@ -5218,12 +5216,12 @@ This is your link for group %@! Messages, files and calls are protected by **quantum resistant e2e encryption** with perfect forward secrecy, repudiation and break-in recovery. No comment provided by engineer. - - Migrate device + + Migrate No comment provided by engineer. - - Migrate from another device + + Migrate device No comment provided by engineer. @@ -5332,6 +5330,11 @@ This is your link for group %@! Jméno swipe action + + Network +commitments + No comment provided by engineer. + Network & servers Síť a servery @@ -5361,6 +5364,11 @@ This is your link for group %@! Network operator No comment provided by engineer. + + Network routers cannot know +who talks to whom + No comment provided by engineer. + Network settings Nastavení sítě @@ -5469,6 +5477,11 @@ This is your link for group %@! Ne No comment provided by engineer. + + No account. No phone. No email. No ID. +The most secure encryption. + No comment provided by engineer. + No active relays No comment provided by engineer. @@ -5612,15 +5625,20 @@ This is your link for group %@! No unread chats No comment provided by engineer. - - No user identifiers. - Bez uživatelských identifikátorů. + + Nobody tracked your conversations. No one drew a map of where you'd been. Privacy was never a feature - it was the way of life. + Nikdo nesledoval vaše konverzace. Nikdo nevytvořil mapu, kde jste byli. Soukromí nikdy nebylo funkcí - byl to způsob života. No comment provided by engineer. Non-profit governance No comment provided by engineer. + + Not a better lock on someone else's door. Not a nicer landlord that respects your privacy, but still keeps the record of all visitors. You are not a guest. You are home. No king can enter it - you are sovereign. + Nejde o to mít lepší zámek na dveřích někoho jiného. Ani o to mít nájemce, který respektuje vaše soukromí, ale vede evidenci všech vašich návštěvníků. Nejste host. Jste doma. Ani král k vám nemůže vstoupit - jste suverén. + No comment provided by engineer. + Not all relays connected alert title @@ -5693,6 +5711,10 @@ new chat action Stará databáze No comment provided by engineer. + + On your phone, not on any server. + No comment provided by engineer. + One-time invitation link Jednorázový zvací odkaz @@ -5916,6 +5938,13 @@ alert button Operator server alert title + + Operators commit to: +- Be independent +- Minimize metadata usage +- Run verified open-source code + No comment provided by engineer. + Or import archive file No comment provided by engineer. @@ -6207,17 +6236,12 @@ Error: %@ Privacy policy and conditions of use. No comment provided by engineer. - - Privacy redefined - Nové vymezení soukromí - No comment provided by engineer. - Privacy: for owners and subscribers. No comment provided by engineer. - - Private chats, groups and your contacts are not accessible to server operators. + + Private and secure messaging. No comment provided by engineer. @@ -7486,6 +7510,14 @@ chat item action Settings were changed. alert message + + Setup notifications + No comment provided by engineer. + + + Setup routers + No comment provided by engineer. + Shape profile images No comment provided by engineer. @@ -8187,9 +8219,9 @@ Může se to stát kvůli nějaké chybě, nebo pokud je spojení kompromitován Šifrování funguje a nové povolení šifrování není vyžadováno. To může vyvolat chybu v připojení! No comment provided by engineer. - - The future of messaging - Nová generace soukromých zpráv + + The first network where you own +your contacts and groups. No comment provided by engineer. @@ -8224,6 +8256,11 @@ Může se to stát kvůli nějaké chybě, nebo pokud je spojení kompromitován Stará databáze nebyla během přenášení odstraněna, lze ji smazat. No comment provided by engineer. + + The oldest human freedom - to speak to another person without being watched - built on infrastructure that cannot betray it. + Nejstarší lidská svoboda - mluvit s druhým člověkem, aniž by byl sledován - postavena na infrastruktuře, která ji nemůže zradit. + No comment provided by engineer. + The same conditions will apply to operator **%@**. No comment provided by engineer. @@ -8263,6 +8300,16 @@ Může se to stát kvůli nějaké chybě, nebo pokud je spojení kompromitován Themes No comment provided by engineer. + + Then we moved online, and every platform asked for a piece of you - your name, your number, your friends. We accepted that the price of talking to others is letting someone know who we talk to. Every generation, people and tech, had it this way - telephone, email, messengers, social media. It seemed the only way possible. + Pak jsme se přesunuli na internet a každá platforma chtěla o vás něco vědět - vaše jméno, vaše číslo, vaše přátele. Smířili jsme se s tím, že cenou za komunikaci s ostatními je dát někomu vědět, s kým mluvíme. Každá generace, lidská i technická, to tak měla - telefon, e-mail, komunikátory, sociální sítě. Zdálo se, že je to jediný možný způsob. + No comment provided by engineer. + + + There is another way. A network with no phone numbers. No usernames. No accounts. No user identities of any kind. A network that connects people and carries encrypted messages without knowing who is connected. + Existuje i jiný způsob. Síť bez telefonních čísel. Bez uživatelských jmen. Bez účtů. Bez jakékoli uživatelské identity. Síť, která spojuje lidi a přenáší šifrované zprávy, aniž by bylo známo, kdo je připojen. + No comment provided by engineer. + These conditions will also apply for: **%@**. No comment provided by engineer. @@ -9055,6 +9102,10 @@ Chcete-li se připojit, požádejte svůj kontakt o vytvoření dalšího odkazu Pokud s někým sdílíte inkognito profil, bude tento profil použit pro skupiny, do kterých vás pozve. No comment provided by engineer. + + Why SimpleX is built. + No comment provided by engineer. + WiFi No comment provided by engineer. @@ -9285,6 +9336,12 @@ Repeat join request? Nemůžete posílat zprávy! alert title + + You commit to: +- Only legal content in public groups +- Respect other users - no spam + No comment provided by engineer. + You connected to the channel via this relay link. No comment provided by engineer. @@ -9294,11 +9351,6 @@ Repeat join request? Nemohli jste být ověřeni; Zkuste to prosím znovu. No comment provided by engineer. - - You decide who can connect. - Lidé se s vámi mohou spojit pouze prostřednictvím odkazu, který sdílíte. - No comment provided by engineer. - You have already requested connection! Repeat connection request? @@ -9360,6 +9412,11 @@ Repeat connection request? You should receive notifications. token info + + You were born without an account + Narodili jste se bez účtu. + No comment provided by engineer. + You will be able to send messages **only after your request is accepted**. No comment provided by engineer. @@ -9490,6 +9547,11 @@ Repeat connection request? Vaše kontakty zůstanou připojeny. No comment provided by engineer. + + Your conversations belong to you, as it had always been before the Internet. The network is not a place you visit. It is a place you create and own. And nobody can take it from you, whether you make it private or public. + Vaše konverzace patří vám, jako tomu bylo vždy před internetem. Síť není místo, které navštěvujete. Je to místo, které vytváříte a vlastníte. A nikdo vám ho nemůže vzít, ať už je soukromé, nebo veřejné. + No comment provided by engineer. + Your credentials may be sent unencrypted. No comment provided by engineer. @@ -9508,6 +9570,10 @@ Repeat connection request? Your group No comment provided by engineer. + + Your network + No comment provided by engineer. + Your preferences Vaše preference diff --git a/apps/ios/SimpleX Localizations/de.xcloc/Localized Contents/de.xliff b/apps/ios/SimpleX Localizations/de.xcloc/Localized Contents/de.xliff index 6a603c8254..8755323ace 100644 --- a/apps/ios/SimpleX Localizations/de.xcloc/Localized Contents/de.xliff +++ b/apps/ios/SimpleX Localizations/de.xcloc/Localized Contents/de.xliff @@ -1127,11 +1127,6 @@ swipe action Anruf annehmen No comment provided by engineer. - - Anybody can host servers. - Jeder kann seine eigenen Server aufsetzen. - No comment provided by engineer. - App build: %@ App Build: %@ @@ -1337,6 +1332,21 @@ swipe action Ungültiger Nachrichten-Hash No comment provided by engineer. + + Be free +in your network + No comment provided by engineer. + + + Be free in your network. + Genießen Sie die Freiheit in Ihrem Netzwerk. + No comment provided by engineer. + + + Because we destroyed the power to know who you are. So that your power can never be taken. + Weil wir die Macht zerstört haben, zu wissen, wer Sie sind. Damit Ihnen Ihre Macht niemals genommen werden kann. + No comment provided by engineer. + Better calls Verbesserte Anrufe @@ -1522,15 +1532,6 @@ swipe action Per Chat-Profil (Voreinstellung) oder [per Verbindung](https://simplex.chat/blog/20230204-simplex-chat-v4-5-user-chat-profiles.html#transport-isolation) (BETA). No comment provided by engineer. - - By using SimpleX Chat you agree to: -- send only legal content in public groups. -- respect other users – no spam. - Durch die Nutzung von SimpleX Chat erklären Sie sich damit einverstanden: -- nur legale Inhalte in öffentlichen Gruppen zu versenden. -- andere Nutzer zu respektieren - kein Spam. - No comment provided by engineer. - Call already ended! Anruf ist bereits beendet! @@ -2079,11 +2080,6 @@ chat toolbar Relais konfigurieren No comment provided by engineer. - - Configure server operators - Server-Betreiber konfigurieren - No comment provided by engineer. - Confirm Bestätigen @@ -2705,11 +2701,6 @@ Das ist Ihr eigener Einmal-Link! Debugging-Zustellung No comment provided by engineer. - - Decentralized - Dezentral - No comment provided by engineer. - Decode link Link dekodieren @@ -3569,6 +3560,10 @@ chat item action Für die Anzeige das Passwort im Suchfeld eingeben! No comment provided by engineer. + + Enter profile name... + No comment provided by engineer. + Enter relay name… Relais-Name eingeben… @@ -4480,6 +4475,10 @@ Fehler: %2$@ Bei Erwähnung benachrichtigt werden. No comment provided by engineer. + + Get started + No comment provided by engineer. + Good afternoon! Guten Nachmittag! @@ -4755,11 +4754,6 @@ Fehler: %2$@ Sofort No comment provided by engineer. - - Immune to spam - Immun gegen Spam und Missbrauch - No comment provided by engineer. - Import Importieren @@ -5656,16 +5650,15 @@ Das ist Ihr Link für die Gruppe %@! Nachrichten, Dateien und Anrufe sind durch **Quantum-resistente E2E-Verschlüsselung** mit Perfect Forward Secrecy, Abstreitbarkeit und Wiederherstellung nach einer Kompromittierung geschützt. No comment provided by engineer. + + Migrate + No comment provided by engineer. + Migrate device Gerät migrieren No comment provided by engineer. - - Migrate from another device - Von einem anderen Gerät migrieren - No comment provided by engineer. - Migrate here Hierher migrieren @@ -5781,6 +5774,11 @@ Das ist Ihr Link für die Gruppe %@! Name swipe action + + Network +commitments + No comment provided by engineer. + Network & servers Netzwerk & Server @@ -5815,6 +5813,11 @@ Das ist Ihr Link für die Gruppe %@! Netzwerk-Betreiber No comment provided by engineer. + + Network routers cannot know +who talks to whom + No comment provided by engineer. + Network settings Netzwerkeinstellungen @@ -5934,6 +5937,11 @@ Das ist Ihr Link für die Gruppe %@! Nein No comment provided by engineer. + + No account. No phone. No email. No ID. +The most secure encryption. + No comment provided by engineer. + No active relays No comment provided by engineer. @@ -6098,15 +6106,20 @@ Das ist Ihr Link für die Gruppe %@! Keine ungelesenen Chats No comment provided by engineer. - - No user identifiers. - Keine Benutzerkennungen. + + Nobody tracked your conversations. No one drew a map of where you'd been. Privacy was never a feature - it was the way of life. + Niemand verfolgte Ihre Gespräche. Niemand erstellte eine Karte, wo Sie sich aufgehalten haben. Privatsphäre war nie ein Feature - sie war selbstverständlich. No comment provided by engineer. Non-profit governance No comment provided by engineer. + + Not a better lock on someone else's door. Not a nicer landlord that respects your privacy, but still keeps the record of all visitors. You are not a guest. You are home. No king can enter it - you are sovereign. + Nicht ein besseres Schloss an der Tür eines Anderen. Kein freundlicher Vermieter, der Ihre Privatsphäre respektiert, aber dennoch jeden Besucher registriert. Sie sind kein Gast. Sie sind zu Hause. Kein Vermieter, kein Fremder kann es betreten - Sie sind souverän. + No comment provided by engineer. + Not all relays connected Es sind nicht alle Relais verbunden @@ -6188,6 +6201,10 @@ new chat action Alte Datenbank No comment provided by engineer. + + On your phone, not on any server. + No comment provided by engineer. + One-time invitation link Einmal-Einladungslink @@ -6435,6 +6452,13 @@ alert button Betreiber-Server alert title + + Operators commit to: +- Be independent +- Minimize metadata usage +- Run verified open-source code + No comment provided by engineer. + Or import archive file Oder importieren Sie eine Archiv-Datei @@ -6762,18 +6786,12 @@ Fehler: %@ Datenschutz- und Nutzungsbedingungen. No comment provided by engineer. - - Privacy redefined - Datenschutz neu definiert - No comment provided by engineer. - Privacy: for owners and subscribers. No comment provided by engineer. - - Private chats, groups and your contacts are not accessible to server operators. - Private Chats, Gruppen und Ihre Kontakte sind für Server-Betreiber nicht zugänglich. + + Private and secure messaging. No comment provided by engineer. @@ -8186,6 +8204,14 @@ chat item action Die Einstellungen wurden geändert. alert message + + Setup notifications + No comment provided by engineer. + + + Setup routers + No comment provided by engineer. + Shape profile images Form der Profil-Bilder @@ -8972,9 +8998,9 @@ Dies kann passieren, wenn es einen Fehler gegeben hat oder die Verbindung kompro Die Verschlüsselung funktioniert und ein neues Verschlüsselungsabkommen ist nicht erforderlich. Es kann zu Verbindungsfehlern kommen! No comment provided by engineer. - - The future of messaging - Die nächste Generation von privatem Messaging + + The first network where you own +your contacts and groups. No comment provided by engineer. @@ -9012,6 +9038,11 @@ Dies kann passieren, wenn es einen Fehler gegeben hat oder die Verbindung kompro Die alte Datenbank wurde während der Migration nicht entfernt. Sie kann gelöscht werden. No comment provided by engineer. + + The oldest human freedom - to speak to another person without being watched - built on infrastructure that cannot betray it. + Die älteste Freiheit des Menschen - mit einem anderen Menschen sprechen zu können, ohne beobachtet zu werden - gestützt auf einer Infrastruktur, die Sie nicht verraten kann. + No comment provided by engineer. + The same conditions will apply to operator **%@**. Dieselben Nutzungsbedingungen gelten auch für den Betreiber **%@**. @@ -9057,6 +9088,16 @@ Dies kann passieren, wenn es einen Fehler gegeben hat oder die Verbindung kompro Design No comment provided by engineer. + + Then we moved online, and every platform asked for a piece of you - your name, your number, your friends. We accepted that the price of talking to others is letting someone know who we talk to. Every generation, people and tech, had it this way - telephone, email, messengers, social media. It seemed the only way possible. + Dann sind wir online gegangen, und jede Plattform wollte Etwas von Ihnen - Ihren Namen, Ihre Nummer, Ihre Freunde. Wir akzeptierten, dass es der Preis mit Anderen zu kommunizieren ist, Jemandem preiszugeben, mit wem und wie wir miteinander kommunizieren. Jede Generation, Menschen und Technologien, kannten es nur so - Telefon, E-Mail, Messenger, soziale Medien. Es schien der einzig mögliche Weg zu sein. + No comment provided by engineer. + + + There is another way. A network with no phone numbers. No usernames. No accounts. No user identities of any kind. A network that connects people and carries encrypted messages without knowing who is connected. + Es gibt einen anderen Weg. Ein Netzwerk ohne Telefonnummern, ohne Benutzernamen, ohne Benutzerkennungen und ohne jegliche Benutzeridentität. Ein Netzwerk, welches Menschen verbindet und verschlüsselte Nachrichten überträgt, ohne zu wissen, wer mit wem verbunden ist. + No comment provided by engineer. + These conditions will also apply for: **%@**. Diese Nutzungsbedingungen gelten auch für: **%@**. @@ -9947,6 +9988,10 @@ Bitten Sie Ihren Kontakt darum einen weiteren Verbindungs-Link zu erzeugen, um s Wenn Sie ein Inkognito-Profil mit Jemandem teilen, wird dieses Profil auch für die Gruppen verwendet, für die Sie von diesem Kontakt eingeladen werden. No comment provided by engineer. + + Why SimpleX is built. + No comment provided by engineer. + WiFi WiFi @@ -10209,6 +10254,12 @@ Verbindungsanfrage wiederholen? Sie können keine Nachrichten versenden! alert title + + You commit to: +- Only legal content in public groups +- Respect other users - no spam + No comment provided by engineer. + You connected to the channel via this relay link. Sie haben sich über diesen Relais‑Link mit dem Kanal verbunden. @@ -10219,11 +10270,6 @@ Verbindungsanfrage wiederholen? Sie konnten nicht überprüft werden; bitte versuchen Sie es erneut. No comment provided by engineer. - - You decide who can connect. - Sie entscheiden, wer sich mit Ihnen verbinden kann. - No comment provided by engineer. - You have already requested connection! Repeat connection request? @@ -10291,6 +10337,11 @@ Verbindungsanfrage wiederholen? Sie sollten Benachrichtigungen erhalten. token info + + You were born without an account + Sie wurden ohne eine Benutzerkennung geboren. + No comment provided by engineer. + You will be able to send messages **only after your request is accepted**. Sie können erst dann Nachrichten versenden, **sobald Ihre Anfrage angenommen wurde**. @@ -10431,6 +10482,11 @@ Verbindungsanfrage wiederholen? Ihre Kontakte bleiben weiterhin verbunden. No comment provided by engineer. + + Your conversations belong to you, as it had always been before the Internet. The network is not a place you visit. It is a place you create and own. And nobody can take it from you, whether you make it private or public. + Ihre Kommunikation gehört Ihnen, so wie es immer war, bevor es das Internet gab. Das Netzwerk ist kein Ort, den Sie besuchen. Es ist ein Ort, den Sie erschaffen und besitzen und Niemand kann es Ihnen nehmen, egal ob Sie es privat oder öffentlich machen. + No comment provided by engineer. + Your credentials may be sent unencrypted. Ihre Anmeldeinformationen können unverschlüsselt versendet werden. @@ -10451,6 +10507,10 @@ Verbindungsanfrage wiederholen? Ihre Gruppe No comment provided by engineer. + + Your network + No comment provided by engineer. + Your preferences Ihre Präferenzen diff --git a/apps/ios/SimpleX Localizations/en.xcloc/Localized Contents/en.xliff b/apps/ios/SimpleX Localizations/en.xcloc/Localized Contents/en.xliff index 9ebdad1759..d7941b7981 100644 --- a/apps/ios/SimpleX Localizations/en.xcloc/Localized Contents/en.xliff +++ b/apps/ios/SimpleX Localizations/en.xcloc/Localized Contents/en.xliff @@ -1146,11 +1146,6 @@ swipe action Answer call No comment provided by engineer. - - Anybody can host servers. - Anybody can host servers. - No comment provided by engineer. - App build: %@ App build: %@ @@ -1356,6 +1351,23 @@ swipe action Bad message hash No comment provided by engineer. + + Be free +in your network + Be free +in your network + No comment provided by engineer. + + + Be free in your network. + Be free in your network. + No comment provided by engineer. + + + Because we destroyed the power to know who you are. So that your power can never be taken. + Because we destroyed the power to know who you are. So that your power can never be taken. + No comment provided by engineer. + Better calls Better calls @@ -1541,15 +1553,6 @@ swipe action By chat profile (default) or [by connection](https://simplex.chat/blog/20230204-simplex-chat-v4-5-user-chat-profiles.html#transport-isolation) (BETA). No comment provided by engineer. - - By using SimpleX Chat you agree to: -- send only legal content in public groups. -- respect other users – no spam. - By using SimpleX Chat you agree to: -- send only legal content in public groups. -- respect other users – no spam. - No comment provided by engineer. - Call already ended! Call already ended! @@ -2105,11 +2108,6 @@ chat toolbar Configure relays No comment provided by engineer. - - Configure server operators - Configure server operators - No comment provided by engineer. - Confirm Confirm @@ -2735,11 +2733,6 @@ This is your own one-time link! Debug delivery No comment provided by engineer. - - Decentralized - Decentralized - No comment provided by engineer. - Decode link Decode link @@ -3603,6 +3596,11 @@ chat item action Enter password above to show! No comment provided by engineer. + + Enter profile name... + Enter profile name... + No comment provided by engineer. + Enter relay name… Enter relay name… @@ -4516,6 +4514,11 @@ Error: %2$@ Get notified when mentioned. No comment provided by engineer. + + Get started + Get started + No comment provided by engineer. + Good afternoon! Good afternoon! @@ -4791,11 +4794,6 @@ Error: %2$@ Immediately No comment provided by engineer. - - Immune to spam - Immune to spam - No comment provided by engineer. - Import Import @@ -5698,16 +5696,16 @@ This is your link for group %@! Messages, files and calls are protected by **quantum resistant e2e encryption** with perfect forward secrecy, repudiation and break-in recovery. No comment provided by engineer. + + Migrate + Migrate + No comment provided by engineer. + Migrate device Migrate device No comment provided by engineer. - - Migrate from another device - Migrate from another device - No comment provided by engineer. - Migrate here Migrate here @@ -5823,6 +5821,13 @@ This is your link for group %@! Name swipe action + + Network +commitments + Network +commitments + No comment provided by engineer. + Network & servers Network & servers @@ -5858,6 +5863,13 @@ This is your link for group %@! Network operator No comment provided by engineer. + + Network routers cannot know +who talks to whom + Network routers cannot know +who talks to whom + No comment provided by engineer. + Network settings Network settings @@ -5978,6 +5990,13 @@ This is your link for group %@! No No comment provided by engineer. + + No account. No phone. No email. No ID. +The most secure encryption. + No account. No phone. No email. No ID. +The most secure encryption. + No comment provided by engineer. + No active relays No active relays @@ -6143,9 +6162,9 @@ This is your link for group %@! No unread chats No comment provided by engineer. - - No user identifiers. - No user identifiers. + + Nobody tracked your conversations. No one drew a map of where you'd been. Privacy was never a feature - it was the way of life. + Nobody tracked your conversations. No one drew a map of where you'd been. Privacy was never a feature - it was the way of life. No comment provided by engineer. @@ -6153,6 +6172,11 @@ This is your link for group %@! Non-profit governance No comment provided by engineer. + + Not a better lock on someone else's door. Not a nicer landlord that respects your privacy, but still keeps the record of all visitors. You are not a guest. You are home. No king can enter it - you are sovereign. + Not a better lock on someone else's door. Not a nicer landlord that respects your privacy, but still keeps the record of all visitors. You are not a guest. You are home. No king can enter it - you are sovereign. + No comment provided by engineer. + Not all relays connected Not all relays connected @@ -6234,6 +6258,11 @@ new chat action Old database No comment provided by engineer. + + On your phone, not on any server. + On your phone, not on any server. + No comment provided by engineer. + One-time invitation link One-time invitation link @@ -6484,6 +6513,17 @@ alert button Operator server alert title + + Operators commit to: +- Be independent +- Minimize metadata usage +- Run verified open-source code + Operators commit to: +- Be independent +- Minimize metadata usage +- Run verified open-source code + No comment provided by engineer. + Or import archive file Or import archive file @@ -6815,19 +6855,14 @@ Error: %@ Privacy policy and conditions of use. No comment provided by engineer. - - Privacy redefined - Privacy redefined - No comment provided by engineer. - Privacy: for owners and subscribers. Privacy: for owners and subscribers. No comment provided by engineer. - - Private chats, groups and your contacts are not accessible to server operators. - Private chats, groups and your contacts are not accessible to server operators. + + Private and secure messaging. + Private and secure messaging. No comment provided by engineer. @@ -8250,6 +8285,16 @@ chat item action Settings were changed. alert message + + Setup notifications + Setup notifications + No comment provided by engineer. + + + Setup routers + Setup routers + No comment provided by engineer. + Shape profile images Shape profile images @@ -9044,9 +9089,11 @@ It can happen because of some bug or when the connection is compromised.The encryption is working and the new encryption agreement is not required. It may result in connection errors! No comment provided by engineer. - - The future of messaging - The future of messaging + + The first network where you own +your contacts and groups. + The first network where you own +your contacts and groups. No comment provided by engineer. @@ -9084,6 +9131,11 @@ It can happen because of some bug or when the connection is compromised.The old database was not removed during the migration, it can be deleted. No comment provided by engineer. + + The oldest human freedom - to speak to another person without being watched - built on infrastructure that cannot betray it. + The oldest human freedom - to speak to another person without being watched - built on infrastructure that cannot betray it. + No comment provided by engineer. + The same conditions will apply to operator **%@**. The same conditions will apply to operator **%@**. @@ -9129,6 +9181,16 @@ It can happen because of some bug or when the connection is compromised.Themes No comment provided by engineer. + + Then we moved online, and every platform asked for a piece of you - your name, your number, your friends. We accepted that the price of talking to others is letting someone know who we talk to. Every generation, people and tech, had it this way - telephone, email, messengers, social media. It seemed the only way possible. + Then we moved online, and every platform asked for a piece of you - your name, your number, your friends. We accepted that the price of talking to others is letting someone know who we talk to. Every generation, people and tech, had it this way - telephone, email, messengers, social media. It seemed the only way possible. + No comment provided by engineer. + + + There is another way. A network with no phone numbers. No usernames. No accounts. No user identities of any kind. A network that connects people and carries encrypted messages without knowing who is connected. + There is another way. A network with no phone numbers. No usernames. No accounts. No user identities of any kind. A network that connects people and carries encrypted messages without knowing who is connected. + No comment provided by engineer. + These conditions will also apply for: **%@**. These conditions will also apply for: **%@**. @@ -10023,6 +10085,11 @@ To connect, please ask your contact to create another connection link and check When you share an incognito profile with somebody, this profile will be used for the groups they invite you to. No comment provided by engineer. + + Why SimpleX is built. + Why SimpleX is built. + No comment provided by engineer. + WiFi WiFi @@ -10285,6 +10352,15 @@ Repeat join request? You can't send messages! alert title + + You commit to: +- Only legal content in public groups +- Respect other users - no spam + You commit to: +- Only legal content in public groups +- Respect other users - no spam + No comment provided by engineer. + You connected to the channel via this relay link. You connected to the channel via this relay link. @@ -10295,11 +10371,6 @@ Repeat join request? You could not be verified; please try again. No comment provided by engineer. - - You decide who can connect. - You decide who can connect. - No comment provided by engineer. - You have already requested connection! Repeat connection request? @@ -10367,6 +10438,11 @@ Repeat connection request? You should receive notifications. token info + + You were born without an account + You were born without an account + No comment provided by engineer. + You will be able to send messages **only after your request is accepted**. You will be able to send messages **only after your request is accepted**. @@ -10507,6 +10583,11 @@ Repeat connection request? Your contacts will remain connected. No comment provided by engineer. + + Your conversations belong to you, as it had always been before the Internet. The network is not a place you visit. It is a place you create and own. And nobody can take it from you, whether you make it private or public. + Your conversations belong to you, as it had always been before the Internet. The network is not a place you visit. It is a place you create and own. And nobody can take it from you, whether you make it private or public. + No comment provided by engineer. + Your credentials may be sent unencrypted. Your credentials may be sent unencrypted. @@ -10527,6 +10608,11 @@ Repeat connection request? Your group No comment provided by engineer. + + Your network + Your network + No comment provided by engineer. + Your preferences Your preferences diff --git a/apps/ios/SimpleX Localizations/es.xcloc/Localized Contents/es.xliff b/apps/ios/SimpleX Localizations/es.xcloc/Localized Contents/es.xliff index 07004c5432..acd97f2947 100644 --- a/apps/ios/SimpleX Localizations/es.xcloc/Localized Contents/es.xliff +++ b/apps/ios/SimpleX Localizations/es.xcloc/Localized Contents/es.xliff @@ -1127,11 +1127,6 @@ swipe action Responder llamada No comment provided by engineer. - - Anybody can host servers. - Cualquiera puede alojar servidores. - No comment provided by engineer. - App build: %@ Compilación app: %@ @@ -1337,6 +1332,21 @@ swipe action Hash de mensaje incorrecto No comment provided by engineer. + + Be free +in your network + No comment provided by engineer. + + + Be free in your network. + Se libre en tu red. + No comment provided by engineer. + + + Because we destroyed the power to know who you are. So that your power can never be taken. + Porque hemos destruido el poder de saber quien eres. De manera que tu poder nunca se pueda arrebatar. + No comment provided by engineer. + Better calls Llamadas mejoradas @@ -1522,15 +1532,6 @@ swipe action Mediante perfil (predeterminado) o [por conexión](https://simplex.chat/blog/20230204-simplex-chat-v4-5-user-chat-profiles.html#transport-isolation) (BETA). No comment provided by engineer. - - By using SimpleX Chat you agree to: -- send only legal content in public groups. -- respect other users – no spam. - Al usar SimpleX Chat, aceptas: -- enviar únicamente contenido legal en los grupos públicos. -- respetar a los demás usuarios – spam prohibido. - No comment provided by engineer. - Call already ended! ¡La llamada ha terminado! @@ -2079,11 +2080,6 @@ chat toolbar Configurar servidores No comment provided by engineer. - - Configure server operators - Configurar operadores de servidores - No comment provided by engineer. - Confirm Confirmar @@ -2705,11 +2701,6 @@ This is your own one-time link! Informe debug No comment provided by engineer. - - Decentralized - Descentralizada - No comment provided by engineer. - Decode link Decodificar enlace @@ -3569,6 +3560,10 @@ chat item action ¡Introduce la contraseña arriba para mostrar! No comment provided by engineer. + + Enter profile name... + No comment provided by engineer. + Enter relay name… Introduce el nombre del servidor… @@ -4480,6 +4475,10 @@ Error: %2$@ Las menciones ahora se notifican. No comment provided by engineer. + + Get started + No comment provided by engineer. + Good afternoon! ¡Buenas tardes! @@ -4755,11 +4754,6 @@ Error: %2$@ Inmediatamente No comment provided by engineer. - - Immune to spam - Inmune a spam y abuso - No comment provided by engineer. - Import Importar @@ -5656,16 +5650,15 @@ This is your link for group %@! Los mensajes, archivos y llamadas están protegidos mediante **cifrado de extremo a extremo resistente a tecnología cuántica** con secreto perfecto hacía adelante, repudio y recuperación tras ataque. No comment provided by engineer. + + Migrate + No comment provided by engineer. + Migrate device Migrar dispositivo No comment provided by engineer. - - Migrate from another device - Migrar desde otro dispositivo - No comment provided by engineer. - Migrate here Migrar aquí @@ -5781,6 +5774,11 @@ This is your link for group %@! Nombre swipe action + + Network +commitments + No comment provided by engineer. + Network & servers Servidores y Redes @@ -5815,6 +5813,11 @@ This is your link for group %@! Operador de red No comment provided by engineer. + + Network routers cannot know +who talks to whom + No comment provided by engineer. + Network settings Configuración de red @@ -5934,6 +5937,11 @@ This is your link for group %@! No No comment provided by engineer. + + No account. No phone. No email. No ID. +The most secure encryption. + No comment provided by engineer. + No active relays No comment provided by engineer. @@ -6098,15 +6106,20 @@ This is your link for group %@! Ningún chat sin leer No comment provided by engineer. - - No user identifiers. - Sin identificadores de usuario. + + Nobody tracked your conversations. No one drew a map of where you'd been. Privacy was never a feature - it was the way of life. + Nadie monitorizaba tus conversaciones. Nadie registraba tus ubicaciones. La privacidad nunca fue un lujo, era la manera de vivir. No comment provided by engineer. Non-profit governance No comment provided by engineer. + + Not a better lock on someone else's door. Not a nicer landlord that respects your privacy, but still keeps the record of all visitors. You are not a guest. You are home. No king can enter it - you are sovereign. + No un candado mejorado en la puerta de otro. No un terrateniente que respeta tu privacidad pero sigue guardando un registro de tus visitantes. Tu no eres el invitado. Estás en tu casa y ningún rey podrá entrar. Tu eres el soberano. + No comment provided by engineer. + Not all relays connected Hay servidores no conectados @@ -6188,6 +6201,10 @@ new chat action Base de datos antigua No comment provided by engineer. + + On your phone, not on any server. + No comment provided by engineer. + One-time invitation link Enlace de invitación de un solo uso @@ -6435,6 +6452,13 @@ alert button Servidor del operador alert title + + Operators commit to: +- Be independent +- Minimize metadata usage +- Run verified open-source code + No comment provided by engineer. + Or import archive file O importa desde un archivo @@ -6762,18 +6786,12 @@ Error: %@ Política de privacidad y condiciones de uso. No comment provided by engineer. - - Privacy redefined - Privacidad redefinida - No comment provided by engineer. - Privacy: for owners and subscribers. No comment provided by engineer. - - Private chats, groups and your contacts are not accessible to server operators. - Los chats privados, los grupos y tus contactos no son accesibles para los operadores de servidores. + + Private and secure messaging. No comment provided by engineer. @@ -8186,6 +8204,14 @@ chat item action La configuración ha sido modificada. alert message + + Setup notifications + No comment provided by engineer. + + + Setup routers + No comment provided by engineer. + Shape profile images Dar forma a las imágenes de perfil @@ -8972,9 +8998,9 @@ Puede ocurrir por algún bug o cuando la conexión está comprometida. El cifrado funciona y un cifrado nuevo no es necesario. ¡Podría dar lugar a errores de conexión! No comment provided by engineer. - - The future of messaging - La nueva generación de mensajería privada + + The first network where you own +your contacts and groups. No comment provided by engineer. @@ -9012,6 +9038,11 @@ Puede ocurrir por algún bug o cuando la conexión está comprometida. La base de datos antigua no se eliminó durante la migración, puede eliminarse. No comment provided by engineer. + + The oldest human freedom - to speak to another person without being watched - built on infrastructure that cannot betray it. + La libertad más antigua del ser humano, la de hablar con otra persona sin ser observado, materializada sobre una infraestructura que no puede traicionarla. + No comment provided by engineer. + The same conditions will apply to operator **%@**. Las mismas condiciones se aplicarán al operador **%@**. @@ -9057,6 +9088,16 @@ Puede ocurrir por algún bug o cuando la conexión está comprometida. Temas No comment provided by engineer. + + Then we moved online, and every platform asked for a piece of you - your name, your number, your friends. We accepted that the price of talking to others is letting someone know who we talk to. Every generation, people and tech, had it this way - telephone, email, messengers, social media. It seemed the only way possible. + Después pasamos a internet y cada plataforma pedía una parte de tí: tu nombre, tu número, tus amistades. Aceptamos que el precio de hablar con los demás es informar a alguien de quién es interlocutor. Cada generación, personas y tecnología, ha funcionado así: teléfono, email, mensajería, redes sociales. Parecía el único camino. + No comment provided by engineer. + + + There is another way. A network with no phone numbers. No usernames. No accounts. No user identities of any kind. A network that connects people and carries encrypted messages without knowing who is connected. + Existe otro camino. Una red sin números de teléfono. Sin nombres de usuario. Sin cuentas. Sin identificadores de ningún tipo. Una red que conecta las personas y entrega mensajes cifrados sin saber quien está conectado. + No comment provided by engineer. + These conditions will also apply for: **%@**. Estas condiciones también se aplican para: **%@**. @@ -9947,6 +9988,10 @@ Para conectarte pide a tu contacto que cree otro enlace y comprueba la conexión Cuando compartes un perfil incógnito con alguien, este perfil también se usará para los grupos a los que te inviten. No comment provided by engineer. + + Why SimpleX is built. + No comment provided by engineer. + WiFi WiFi @@ -10209,6 +10254,12 @@ Repeat join request? ¡No puedes enviar mensajes! alert title + + You commit to: +- Only legal content in public groups +- Respect other users - no spam + No comment provided by engineer. + You connected to the channel via this relay link. Te conectaste al canal mediante este enlace de servidor. @@ -10219,11 +10270,6 @@ Repeat join request? No has podido ser autenticado. Inténtalo de nuevo. No comment provided by engineer. - - You decide who can connect. - Tu decides quién se conecta. - No comment provided by engineer. - You have already requested connection! Repeat connection request? @@ -10291,6 +10337,11 @@ Repeat connection request? Deberías recibir notificaciones. token info + + You were born without an account + Naciste sin una cuenta. + No comment provided by engineer. + You will be able to send messages **only after your request is accepted**. Podrás enviar mensajes **después de que tu solicitud sea aceptada**. @@ -10431,6 +10482,11 @@ Repeat connection request? Tus contactos permanecerán conectados. No comment provided by engineer. + + Your conversations belong to you, as it had always been before the Internet. The network is not a place you visit. It is a place you create and own. And nobody can take it from you, whether you make it private or public. + Tus conversaciones te pertenecen, tal como ha sido siempre antes de la llegada de internet. Tu red no es un lugar que visitas. Es un lugar que has creado, te pertenece y nadie te la podrá quitar, ya sea pública o privada. + No comment provided by engineer. + Your credentials may be sent unencrypted. Tus credenciales podrían ser enviadas sin cifrar. @@ -10451,6 +10507,10 @@ Repeat connection request? Mi grupo No comment provided by engineer. + + Your network + No comment provided by engineer. + Your preferences Mis preferencias diff --git a/apps/ios/SimpleX Localizations/fi.xcloc/Localized Contents/fi.xliff b/apps/ios/SimpleX Localizations/fi.xcloc/Localized Contents/fi.xliff index 93e0c2e3a7..89c71ec5ca 100644 --- a/apps/ios/SimpleX Localizations/fi.xcloc/Localized Contents/fi.xliff +++ b/apps/ios/SimpleX Localizations/fi.xcloc/Localized Contents/fi.xliff @@ -1033,11 +1033,6 @@ swipe action Vastaa puheluun No comment provided by engineer. - - Anybody can host servers. - Avoimen lähdekoodin protokolla ja koodi - kuka tahansa voi käyttää palvelimia. - No comment provided by engineer. - App build: %@ Sovellusversio: %@ @@ -1224,6 +1219,19 @@ swipe action Virheellinen viestin tarkiste No comment provided by engineer. + + Be free +in your network + No comment provided by engineer. + + + Be free in your network. + No comment provided by engineer. + + + Because we destroyed the power to know who you are. So that your power can never be taken. + No comment provided by engineer. + Better calls No comment provided by engineer. @@ -1379,12 +1387,6 @@ swipe action Chat-profiilin mukaan (oletus) tai [yhteyden mukaan](https://simplex.chat/blog/20230204-simplex-chat-v4-5-user-chat-profiles.html#transport-isolation) (BETA). No comment provided by engineer. - - By using SimpleX Chat you agree to: -- send only legal content in public groups. -- respect other users – no spam. - No comment provided by engineer. - Call already ended! Puhelu on jo päättynyt! @@ -1867,10 +1869,6 @@ chat toolbar Configure relays No comment provided by engineer. - - Configure server operators - No comment provided by engineer. - Confirm Vahvista @@ -2429,11 +2427,6 @@ This is your own one-time link! Debug delivery No comment provided by engineer. - - Decentralized - Hajautettu - No comment provided by engineer. - Decode link relay test step @@ -3218,6 +3211,10 @@ chat item action Kirjoita yllä oleva salasana näyttääksesi! No comment provided by engineer. + + Enter profile name... + No comment provided by engineer. + Enter relay name… No comment provided by engineer. @@ -4031,6 +4028,10 @@ Error: %2$@ Get notified when mentioned. No comment provided by engineer. + + Get started + No comment provided by engineer. + Good afternoon! message preview @@ -4290,11 +4291,6 @@ Error: %2$@ Heti No comment provided by engineer. - - Immune to spam - Immuuni roskapostille ja väärinkäytöksille - No comment provided by engineer. - Import Tuo @@ -5104,12 +5100,12 @@ This is your link for group %@! Messages, files and calls are protected by **quantum resistant e2e encryption** with perfect forward secrecy, repudiation and break-in recovery. No comment provided by engineer. - - Migrate device + + Migrate No comment provided by engineer. - - Migrate from another device + + Migrate device No comment provided by engineer. @@ -5218,6 +5214,11 @@ This is your link for group %@! Nimi swipe action + + Network +commitments + No comment provided by engineer. + Network & servers Verkko ja palvelimet @@ -5247,6 +5248,11 @@ This is your link for group %@! Network operator No comment provided by engineer. + + Network routers cannot know +who talks to whom + No comment provided by engineer. + Network settings Verkkoasetukset @@ -5354,6 +5360,11 @@ This is your link for group %@! Ei No comment provided by engineer. + + No account. No phone. No email. No ID. +The most secure encryption. + No comment provided by engineer. + No active relays No comment provided by engineer. @@ -5497,15 +5508,18 @@ This is your link for group %@! No unread chats No comment provided by engineer. - - No user identifiers. - Ensimmäinen alusta ilman käyttäjätunnisteita – suunniteltu yksityiseksi. + + Nobody tracked your conversations. No one drew a map of where you'd been. Privacy was never a feature - it was the way of life. No comment provided by engineer. Non-profit governance No comment provided by engineer. + + Not a better lock on someone else's door. Not a nicer landlord that respects your privacy, but still keeps the record of all visitors. You are not a guest. You are home. No king can enter it - you are sovereign. + No comment provided by engineer. + Not all relays connected alert title @@ -5578,6 +5592,10 @@ new chat action Vanha tietokanta No comment provided by engineer. + + On your phone, not on any server. + No comment provided by engineer. + One-time invitation link Kertakutsulinkki @@ -5800,6 +5818,13 @@ alert button Operator server alert title + + Operators commit to: +- Be independent +- Minimize metadata usage +- Run verified open-source code + No comment provided by engineer. + Or import archive file No comment provided by engineer. @@ -6091,17 +6116,12 @@ Error: %@ Privacy policy and conditions of use. No comment provided by engineer. - - Privacy redefined - Yksityisyys uudelleen määritettynä - No comment provided by engineer. - Privacy: for owners and subscribers. No comment provided by engineer. - - Private chats, groups and your contacts are not accessible to server operators. + + Private and secure messaging. No comment provided by engineer. @@ -7369,6 +7389,14 @@ chat item action Settings were changed. alert message + + Setup notifications + No comment provided by engineer. + + + Setup routers + No comment provided by engineer. + Shape profile images No comment provided by engineer. @@ -8069,9 +8097,9 @@ Tämä voi johtua jostain virheestä tai siitä, että yhteys on vaarantunut.Salaus toimii ja uutta salaussopimusta ei tarvita. Tämä voi johtaa yhteysvirheisiin! No comment provided by engineer. - - The future of messaging - Seuraavan sukupolven yksityisviestit + + The first network where you own +your contacts and groups. No comment provided by engineer. @@ -8106,6 +8134,10 @@ Tämä voi johtua jostain virheestä tai siitä, että yhteys on vaarantunut.Vanhaa tietokantaa ei poistettu siirron aikana, se voidaan kuitenkin poistaa. No comment provided by engineer. + + The oldest human freedom - to speak to another person without being watched - built on infrastructure that cannot betray it. + No comment provided by engineer. + The same conditions will apply to operator **%@**. No comment provided by engineer. @@ -8145,6 +8177,14 @@ Tämä voi johtua jostain virheestä tai siitä, että yhteys on vaarantunut.Themes No comment provided by engineer. + + Then we moved online, and every platform asked for a piece of you - your name, your number, your friends. We accepted that the price of talking to others is letting someone know who we talk to. Every generation, people and tech, had it this way - telephone, email, messengers, social media. It seemed the only way possible. + No comment provided by engineer. + + + There is another way. A network with no phone numbers. No usernames. No accounts. No user identities of any kind. A network that connects people and carries encrypted messages without knowing who is connected. + No comment provided by engineer. + These conditions will also apply for: **%@**. No comment provided by engineer. @@ -8936,6 +8976,10 @@ Jos haluat muodostaa yhteyden, pyydä kontaktiasi luomaan toinen yhteyslinkki ja Kun jaat inkognitoprofiilin jonkun kanssa, tätä profiilia käytetään ryhmissä, joihin tämä sinut kutsuu. No comment provided by engineer. + + Why SimpleX is built. + No comment provided by engineer. + WiFi No comment provided by engineer. @@ -9166,6 +9210,12 @@ Repeat join request? Et voi lähettää viestejä! alert title + + You commit to: +- Only legal content in public groups +- Respect other users - no spam + No comment provided by engineer. + You connected to the channel via this relay link. No comment provided by engineer. @@ -9175,11 +9225,6 @@ Repeat join request? Sinua ei voitu todentaa; yritä uudelleen. No comment provided by engineer. - - You decide who can connect. - Kimin bağlanabileceğine siz karar verirsiniz. - No comment provided by engineer. - You have already requested connection! Repeat connection request? @@ -9241,6 +9286,10 @@ Repeat connection request? You should receive notifications. token info + + You were born without an account + No comment provided by engineer. + You will be able to send messages **only after your request is accepted**. No comment provided by engineer. @@ -9371,6 +9420,10 @@ Repeat connection request? Kontaktisi pysyvät yhdistettyinä. No comment provided by engineer. + + Your conversations belong to you, as it had always been before the Internet. The network is not a place you visit. It is a place you create and own. And nobody can take it from you, whether you make it private or public. + No comment provided by engineer. + Your credentials may be sent unencrypted. No comment provided by engineer. @@ -9389,6 +9442,10 @@ Repeat connection request? Your group No comment provided by engineer. + + Your network + No comment provided by engineer. + Your preferences Asetuksesi diff --git a/apps/ios/SimpleX Localizations/fr.xcloc/Localized Contents/fr.xliff b/apps/ios/SimpleX Localizations/fr.xcloc/Localized Contents/fr.xliff index 1de6a95c2b..7d5864718e 100644 --- a/apps/ios/SimpleX Localizations/fr.xcloc/Localized Contents/fr.xliff +++ b/apps/ios/SimpleX Localizations/fr.xcloc/Localized Contents/fr.xliff @@ -1117,11 +1117,6 @@ swipe action Répondre à l'appel No comment provided by engineer. - - Anybody can host servers. - N'importe qui peut heberger un serveur. - No comment provided by engineer. - App build: %@ Build de l'app : %@ @@ -1325,6 +1320,19 @@ swipe action Mauvais hash de message No comment provided by engineer. + + Be free +in your network + No comment provided by engineer. + + + Be free in your network. + No comment provided by engineer. + + + Because we destroyed the power to know who you are. So that your power can never be taken. + No comment provided by engineer. + Better calls Appels améliorés @@ -1503,15 +1511,6 @@ swipe action Par profil de chat (par défaut) ou [par connexion](https://simplex.chat/blog/20230204-simplex-chat-v4-5-user-chat-profiles.html#transport-isolation) (BETA). No comment provided by engineer. - - By using SimpleX Chat you agree to: -- send only legal content in public groups. -- respect other users – no spam. - En utilisant SimpleX Chat, vous acceptez de : -- n'envoyer que du contenu légal dans les groupes publics. -- respecter les autres utilisateurs - pas de spam. - No comment provided by engineer. - Call already ended! Appel déjà terminé ! @@ -2037,11 +2036,6 @@ chat toolbar Configure relays No comment provided by engineer. - - Configure server operators - Configurer les opérateurs de serveur - No comment provided by engineer. - Confirm Confirmer @@ -2656,11 +2650,6 @@ Il s'agit de votre propre lien unique ! Livraison de débogage No comment provided by engineer. - - Decentralized - Décentralisé - No comment provided by engineer. - Decode link relay test step @@ -3504,6 +3493,10 @@ chat item action Entrez ci-dessus le mot de passe pour afficher le profil ! No comment provided by engineer. + + Enter profile name... + No comment provided by engineer. + Enter relay name… No comment provided by engineer. @@ -4394,6 +4387,10 @@ Erreur : %2$@ Get notified when mentioned. No comment provided by engineer. + + Get started + No comment provided by engineer. + Good afternoon! Bonjour ! @@ -4662,11 +4659,6 @@ Erreur : %2$@ Immédiatement No comment provided by engineer. - - Immune to spam - Protégé du spam et des abus - No comment provided by engineer. - Import Importer @@ -5531,16 +5523,15 @@ Voici votre lien pour le groupe %@ ! Les messages, fichiers et appels sont protégés par un chiffrement **e2e résistant post-quantique** avec une confidentialité persistante, une répudiation et une récupération en cas d'effraction. No comment provided by engineer. + + Migrate + No comment provided by engineer. + Migrate device Transférer l'appareil No comment provided by engineer. - - Migrate from another device - Transférer depuis un autre appareil - No comment provided by engineer. - Migrate here Transférer ici @@ -5654,6 +5645,11 @@ Voici votre lien pour le groupe %@ ! Nom swipe action + + Network +commitments + No comment provided by engineer. + Network & servers Réseau et serveurs @@ -5688,6 +5684,11 @@ Voici votre lien pour le groupe %@ ! Opérateur de réseau No comment provided by engineer. + + Network routers cannot know +who talks to whom + No comment provided by engineer. + Network settings Paramètres réseau @@ -5803,6 +5804,11 @@ Voici votre lien pour le groupe %@ ! Non No comment provided by engineer. + + No account. No phone. No email. No ID. +The most secure encryption. + No comment provided by engineer. + No active relays No comment provided by engineer. @@ -5957,15 +5963,18 @@ Voici votre lien pour le groupe %@ ! No unread chats No comment provided by engineer. - - No user identifiers. - Aucun identifiant d'utilisateur. + + Nobody tracked your conversations. No one drew a map of where you'd been. Privacy was never a feature - it was the way of life. No comment provided by engineer. Non-profit governance No comment provided by engineer. + + Not a better lock on someone else's door. Not a nicer landlord that respects your privacy, but still keeps the record of all visitors. You are not a guest. You are home. No king can enter it - you are sovereign. + No comment provided by engineer. + Not all relays connected alert title @@ -6043,6 +6052,10 @@ new chat action Ancienne base de données No comment provided by engineer. + + On your phone, not on any server. + No comment provided by engineer. + One-time invitation link Lien d'invitation unique @@ -6275,6 +6288,13 @@ alert button Serveur de l'opérateur alert title + + Operators commit to: +- Be independent +- Minimize metadata usage +- Run verified open-source code + No comment provided by engineer. + Or import archive file Ou importer un fichier d'archive @@ -6592,17 +6612,12 @@ Erreur : %@ Privacy policy and conditions of use. No comment provided by engineer. - - Privacy redefined - La vie privée redéfinie - No comment provided by engineer. - Privacy: for owners and subscribers. No comment provided by engineer. - - Private chats, groups and your contacts are not accessible to server operators. + + Private and secure messaging. No comment provided by engineer. @@ -7958,6 +7973,14 @@ chat item action Les paramètres ont été modifiés. alert message + + Setup notifications + No comment provided by engineer. + + + Setup routers + No comment provided by engineer. + Shape profile images Images de profil modelable @@ -8708,9 +8731,9 @@ Cela peut se produire en raison d'un bug ou lorsque la connexion est compromise. Le chiffrement fonctionne et le nouvel accord de chiffrement n'est pas nécessaire. Cela peut provoquer des erreurs de connexion ! No comment provided by engineer. - - The future of messaging - La nouvelle génération de messagerie privée + + The first network where you own +your contacts and groups. No comment provided by engineer. @@ -8747,6 +8770,10 @@ Cela peut se produire en raison d'un bug ou lorsque la connexion est compromise. L'ancienne base de données n'a pas été supprimée lors de la migration, elle peut être supprimée. No comment provided by engineer. + + The oldest human freedom - to speak to another person without being watched - built on infrastructure that cannot betray it. + No comment provided by engineer. + The same conditions will apply to operator **%@**. Les mêmes conditions s'appliquent à l'opérateur **%@**. @@ -8792,6 +8819,14 @@ Cela peut se produire en raison d'un bug ou lorsque la connexion est compromise. Thèmes No comment provided by engineer. + + Then we moved online, and every platform asked for a piece of you - your name, your number, your friends. We accepted that the price of talking to others is letting someone know who we talk to. Every generation, people and tech, had it this way - telephone, email, messengers, social media. It seemed the only way possible. + No comment provided by engineer. + + + There is another way. A network with no phone numbers. No usernames. No accounts. No user identities of any kind. A network that connects people and carries encrypted messages without knowing who is connected. + No comment provided by engineer. + These conditions will also apply for: **%@**. Ces conditions s'appliquent également aux : **%@**. @@ -9650,6 +9685,10 @@ Pour vous connecter, veuillez demander à votre contact de créer un autre lien Lorsque vous partagez un profil incognito avec quelqu'un, ce profil sera utilisé pour les groupes auxquels il vous invite. No comment provided by engineer. + + Why SimpleX is built. + No comment provided by engineer. + WiFi WiFi @@ -9908,6 +9947,12 @@ Répéter la demande d'adhésion ? Vous ne pouvez pas envoyer de messages ! alert title + + You commit to: +- Only legal content in public groups +- Respect other users - no spam + No comment provided by engineer. + You connected to the channel via this relay link. No comment provided by engineer. @@ -9917,11 +9962,6 @@ Répéter la demande d'adhésion ? Vous n'avez pas pu être vérifié·e ; veuillez réessayer. No comment provided by engineer. - - You decide who can connect. - Vous choisissez qui peut se connecter. - No comment provided by engineer. - You have already requested connection! Repeat connection request? @@ -9988,6 +10028,10 @@ Répéter la demande de connexion ? You should receive notifications. token info + + You were born without an account + No comment provided by engineer. + You will be able to send messages **only after your request is accepted**. No comment provided by engineer. @@ -10122,6 +10166,10 @@ Répéter la demande de connexion ? Vos contacts resteront connectés. No comment provided by engineer. + + Your conversations belong to you, as it had always been before the Internet. The network is not a place you visit. It is a place you create and own. And nobody can take it from you, whether you make it private or public. + No comment provided by engineer. + Your credentials may be sent unencrypted. Vos informations d'identification peuvent être envoyées non chiffrées. @@ -10141,6 +10189,10 @@ Répéter la demande de connexion ? Your group No comment provided by engineer. + + Your network + No comment provided by engineer. + Your preferences Vos préférences diff --git a/apps/ios/SimpleX Localizations/hu.xcloc/Localized Contents/hu.xliff b/apps/ios/SimpleX Localizations/hu.xcloc/Localized Contents/hu.xliff index 7e52f853f2..44bf045166 100644 --- a/apps/ios/SimpleX Localizations/hu.xcloc/Localized Contents/hu.xliff +++ b/apps/ios/SimpleX Localizations/hu.xcloc/Localized Contents/hu.xliff @@ -1127,11 +1127,6 @@ swipe action Hívás fogadása No comment provided by engineer. - - Anybody can host servers. - Bárki üzemeltethet kiszolgálókat. - No comment provided by engineer. - App build: %@ Alkalmazás összeállítási száma: %@ @@ -1337,6 +1332,21 @@ swipe action Hibás az üzenet kivonata No comment provided by engineer. + + Be free +in your network + No comment provided by engineer. + + + Be free in your network. + Legyen szabad a saját hálózatában. + No comment provided by engineer. + + + Because we destroyed the power to know who you are. So that your power can never be taken. + Mert felszámoltuk a lehetőségét is annak, hogy megtudjuk, Ön kicsoda. Így az önrendelkezése soha nem kerülhet idegen kezekbe. + No comment provided by engineer. + Better calls Továbbfejlesztett hívásélmény @@ -1522,15 +1532,6 @@ swipe action A csevegési profillal (alapértelmezett), vagy a [kapcsolattal] (https://simplex.chat/blog/20230204-simplex-chat-v4-5-user-chat-profiles.html#transport-isolation) (BÉTA). No comment provided by engineer. - - By using SimpleX Chat you agree to: -- send only legal content in public groups. -- respect other users – no spam. - A SimpleX Chat használatával Ön elfogadja, hogy: -- csak elfogadott tartalmakat tesz közzé a nyilvános csoportokban. -- tiszteletben tartja a többi felhasználót, és nem küld kéretlen tartalmat senkinek. - No comment provided by engineer. - Call already ended! A hívás már véget ért! @@ -2079,11 +2080,6 @@ chat toolbar Átjátszók konfigurálása No comment provided by engineer. - - Configure server operators - Kiszolgálóüzemeltetők beállítása - No comment provided by engineer. - Confirm Megerősítés @@ -2705,11 +2701,6 @@ Ez a saját egyszer használható meghívója! Kézbesítési hibák felderítése No comment provided by engineer. - - Decentralized - Decentralizált - No comment provided by engineer. - Decode link Hivatkozás dekódolása @@ -3569,6 +3560,10 @@ chat item action Adja meg a jelszót fentebb a megjelenítéshez! No comment provided by engineer. + + Enter profile name... + No comment provided by engineer. + Enter relay name… Adja meg az átjátszó nevét… @@ -4480,6 +4475,10 @@ Hiba: %2$@ Kapjon értesítést, ha megemlítik. No comment provided by engineer. + + Get started + No comment provided by engineer. + Good afternoon! Jó napot! @@ -4755,11 +4754,6 @@ Hiba: %2$@ Azonnal No comment provided by engineer. - - Immune to spam - Védett a kéretlen tartalmakkal szemben - No comment provided by engineer. - Import Importálás @@ -5656,16 +5650,15 @@ Ez a saját hivatkozása a(z) %@ nevű csoporthoz! Az üzenetek, a fájlok és a hívások **végpontok közötti kvantumbiztos titkosítással**, kompromittálás előtti és utáni titkosságvédelemmel, illetve letagadhatósággal vannak védve. No comment provided by engineer. + + Migrate + No comment provided by engineer. + Migrate device Eszköz átköltöztetése No comment provided by engineer. - - Migrate from another device - Átköltöztetés egy másik eszközről - No comment provided by engineer. - Migrate here Átköltöztetés ide @@ -5781,6 +5774,11 @@ Ez a saját hivatkozása a(z) %@ nevű csoporthoz! Név swipe action + + Network +commitments + No comment provided by engineer. + Network & servers Hálózat és kiszolgálók @@ -5815,6 +5813,11 @@ Ez a saját hivatkozása a(z) %@ nevű csoporthoz! Hálózatüzemeltető No comment provided by engineer. + + Network routers cannot know +who talks to whom + No comment provided by engineer. + Network settings Hálózati beállítások @@ -5934,6 +5937,11 @@ Ez a saját hivatkozása a(z) %@ nevű csoporthoz! Nem No comment provided by engineer. + + No account. No phone. No email. No ID. +The most secure encryption. + No comment provided by engineer. + No active relays No comment provided by engineer. @@ -6098,15 +6106,20 @@ Ez a saját hivatkozása a(z) %@ nevű csoporthoz! Nincsenek olvasatlan csevegések No comment provided by engineer. - - No user identifiers. - Nincsenek felhasználói azonosítók. + + Nobody tracked your conversations. No one drew a map of where you'd been. Privacy was never a feature - it was the way of life. + Senki sem követte nyomon a beszélgetéseinket. Senki sem készített térképet arról, hogy merre jártunk. A magánéletünk nem csak egy funkció volt, hanem az életmódunk. No comment provided by engineer. Non-profit governance No comment provided by engineer. + + Not a better lock on someone else's door. Not a nicer landlord that respects your privacy, but still keeps the record of all visitors. You are not a guest. You are home. No king can enter it - you are sovereign. + Nem egy jobb zár mások ajtaján. Nem egy kedvesebb házmester, aki tiszteletben tartja az Ön magánéletét, de mégis nyilvántartást vezet minden látogatójáról. Ön itt nem csak egy vendég. Ön itt otthon van. Nincs az a hatalom, amely beléphetne ide - Ön itt szuverén. + No comment provided by engineer. + Not all relays connected Nem minden átjátszó kapcsolódott @@ -6188,6 +6201,10 @@ new chat action Régi adatbázis No comment provided by engineer. + + On your phone, not on any server. + No comment provided by engineer. + One-time invitation link Egyszer használható meghívó @@ -6435,6 +6452,13 @@ alert button Kiszolgáló-üzemeltető alert title + + Operators commit to: +- Be independent +- Minimize metadata usage +- Run verified open-source code + No comment provided by engineer. + Or import archive file Vagy archívumfájl importálása @@ -6762,18 +6786,12 @@ Hiba: %@ Adatvédelmi szabályzat és felhasználási feltételek. No comment provided by engineer. - - Privacy redefined - Újraértelmezett adatvédelem - No comment provided by engineer. - Privacy: for owners and subscribers. No comment provided by engineer. - - Private chats, groups and your contacts are not accessible to server operators. - A privát csevegések, a csoportok és a partnerek nem érhetők el a kiszolgálók üzemeltetői számára. + + Private and secure messaging. No comment provided by engineer. @@ -8186,6 +8204,14 @@ chat item action A beállítások módosultak. alert message + + Setup notifications + No comment provided by engineer. + + + Setup routers + No comment provided by engineer. + Shape profile images Profilkép alakzata @@ -8972,9 +8998,9 @@ Ez valamilyen hiba vagy sérült kapcsolat esetén fordulhat elő. A titkosítás működik, és új titkosítási egyezményre nincs szükség. Ez kapcsolati hibákat eredményezhet! No comment provided by engineer. - - The future of messaging - Az üzenetváltás jövője + + The first network where you own +your contacts and groups. No comment provided by engineer. @@ -9012,6 +9038,11 @@ Ez valamilyen hiba vagy sérült kapcsolat esetén fordulhat elő. A régi adatbázis nem lett eltávolítva az átköltöztetéskor, ezért törölhető. No comment provided by engineer. + + The oldest human freedom - to speak to another person without being watched - built on infrastructure that cannot betray it. + A legrégebbi emberi szabadság - beszélgetni az emberekkel, anélkül, hogy mások megfigyelnének - olyan infrastruktúrán alapul, amely nem tudja elárulni. + No comment provided by engineer. + The same conditions will apply to operator **%@**. Ugyanezek a feltételek lesznek elfogadva a következő üzemeltető számára is: **%@**. @@ -9057,6 +9088,16 @@ Ez valamilyen hiba vagy sérült kapcsolat esetén fordulhat elő. Témák No comment provided by engineer. + + Then we moved online, and every platform asked for a piece of you - your name, your number, your friends. We accepted that the price of talking to others is letting someone know who we talk to. Every generation, people and tech, had it this way - telephone, email, messengers, social media. It seemed the only way possible. + Aztán felléptünk az internetre, és minden platform kért belőlünk egy darabot - nevet, telefonszámot, baráti kapcsolatokat. Elfogadtuk, hogy a kommunikáció ára az, hogy mások megtudják, hogy kivel beszélünk. Minden generáció, az emberek és a technológia is eddig így működött - telefon, e-mail, üzenetküldő programok, közösségi média. Úgy tűnt, ez az egyetlen lehetséges mód. + No comment provided by engineer. + + + There is another way. A network with no phone numbers. No usernames. No accounts. No user identities of any kind. A network that connects people and carries encrypted messages without knowing who is connected. + De van egy másik lehetőség is. Egy hálózat, amelyben nincsenek telefonszámok. Nincsenek felhasználónevek. Nincsenek fiókok. Nincsenek semmiféle felhasználói azonosítók. Egy hálózat, amely összeköti az embereket és titkosított üzeneteket továbbít, anélkül, hogy tudná, ki csatlakozik hozzá. + No comment provided by engineer. + These conditions will also apply for: **%@**. Ezek a feltételek lesznek elfogadva a következő számára is: **%@**. @@ -9947,6 +9988,10 @@ A kapcsolódáshoz kérje meg a partnerét, hogy hozzon létre egy másik kapcso Ha egy inkognitóprofilt oszt meg valamelyik partnerével, a rendszer ezt az inkognitóprofilt fogja használni azokban a csoportokban, ahová az adott partnere meghívja Önt. No comment provided by engineer. + + Why SimpleX is built. + No comment provided by engineer. + WiFi Wi-Fi @@ -10209,6 +10254,12 @@ Megismétli a csatlakozási kérést? Ön nem tud üzeneteket küldeni! alert title + + You commit to: +- Only legal content in public groups +- Respect other users - no spam + No comment provided by engineer. + You connected to the channel via this relay link. Ön ezen az átjátszóhivatkozáson keresztül kapcsolódott a csatornához. @@ -10219,11 +10270,6 @@ Megismétli a csatlakozási kérést? Nem sikerült ellenőrizni; próbálja meg újra. No comment provided by engineer. - - You decide who can connect. - Ön dönti el, hogy kivel beszélget. - No comment provided by engineer. - You have already requested connection! Repeat connection request? @@ -10291,6 +10337,11 @@ Megismétli a kapcsolódási kérést? Ön megkapja az értesítéseket. token info + + You were born without an account + Fiók nélkül születtünk. + No comment provided by engineer. + You will be able to send messages **only after your request is accepted**. Csak azután tud üzeneteket küldeni, **miután a kérését elfogadták**. @@ -10431,6 +10482,11 @@ Megismétli a kapcsolódási kérést? A partnereivel továbbra is kapcsolatban marad. No comment provided by engineer. + + Your conversations belong to you, as it had always been before the Internet. The network is not a place you visit. It is a place you create and own. And nobody can take it from you, whether you make it private or public. + A beszélgetései Önhöz tartoznak, ahogy az internet megjelenése előtt is mindig így volt. A hálózat nem egy hely, amelyet meglátogat. Ez egy olyan hely, amelyet Ön hoz létre saját magának. És senki sem veheti el Öntől, függetlenül attól, hogy privát vagy nyilvános. + No comment provided by engineer. + Your credentials may be sent unencrypted. A hitelesítési adatai titkosítatlanul is elküldhetők. @@ -10451,6 +10507,10 @@ Megismétli a kapcsolódási kérést? Saját csoport No comment provided by engineer. + + Your network + No comment provided by engineer. + Your preferences Beállítások diff --git a/apps/ios/SimpleX Localizations/it.xcloc/Localized Contents/it.xliff b/apps/ios/SimpleX Localizations/it.xcloc/Localized Contents/it.xliff index 7cf7b418a8..8b40a78c98 100644 --- a/apps/ios/SimpleX Localizations/it.xcloc/Localized Contents/it.xliff +++ b/apps/ios/SimpleX Localizations/it.xcloc/Localized Contents/it.xliff @@ -1127,11 +1127,6 @@ swipe action Rispondi alla chiamata No comment provided by engineer. - - Anybody can host servers. - Chiunque può installare i server. - No comment provided by engineer. - App build: %@ Build dell'app: %@ @@ -1337,6 +1332,21 @@ swipe action Hash del messaggio errato No comment provided by engineer. + + Be free +in your network + No comment provided by engineer. + + + Be free in your network. + Vivi libero nella tua rete. + No comment provided by engineer. + + + Because we destroyed the power to know who you are. So that your power can never be taken. + Perché abbiamo distrutto il potere di sapere chi sei. In modo che il tuo potere non possa mai esserti sottratto. + No comment provided by engineer. + Better calls Chiamate migliorate @@ -1522,15 +1532,6 @@ swipe action Per profilo di chat (predefinito) o [per connessione](https://simplex.chat/blog/20230204-simplex-chat-v4-5-user-chat-profiles.html#transport-isolation) (BETA). No comment provided by engineer. - - By using SimpleX Chat you agree to: -- send only legal content in public groups. -- respect other users – no spam. - Usando SimpleX Chat accetti di: -- inviare solo contenuto legale nei gruppi pubblici. -- rispettare gli altri utenti - niente spam. - No comment provided by engineer. - Call already ended! Chiamata già terminata! @@ -2079,11 +2080,6 @@ chat toolbar Configura i relay No comment provided by engineer. - - Configure server operators - Configura gli operatori dei server - No comment provided by engineer. - Confirm Conferma @@ -2705,11 +2701,6 @@ Questo è il tuo link una tantum! Debug della consegna No comment provided by engineer. - - Decentralized - Decentralizzato - No comment provided by engineer. - Decode link Decodifica il link @@ -3569,6 +3560,10 @@ chat item action Inserisci la password sopra per mostrare! No comment provided by engineer. + + Enter profile name... + No comment provided by engineer. + Enter relay name… Inserisci il nome del relay… @@ -4480,6 +4475,10 @@ Errore: %2$@ Ricevi una notifica quando menzionato. No comment provided by engineer. + + Get started + No comment provided by engineer. + Good afternoon! Buon pomeriggio! @@ -4755,11 +4754,6 @@ Errore: %2$@ Immediatamente No comment provided by engineer. - - Immune to spam - Immune a spam e abusi - No comment provided by engineer. - Import Importa @@ -5656,16 +5650,15 @@ Questo è il tuo link per il gruppo %@! I messaggi, i file e le chiamate sono protetti da **crittografia e2e resistente alla quantistica** con perfect forward secrecy, ripudio e recupero da intrusione. No comment provided by engineer. + + Migrate + No comment provided by engineer. + Migrate device Migra dispositivo No comment provided by engineer. - - Migrate from another device - Migra da un altro dispositivo - No comment provided by engineer. - Migrate here Migra qui @@ -5781,6 +5774,11 @@ Questo è il tuo link per il gruppo %@! Nome swipe action + + Network +commitments + No comment provided by engineer. + Network & servers Rete e server @@ -5815,6 +5813,11 @@ Questo è il tuo link per il gruppo %@! Operatore di rete No comment provided by engineer. + + Network routers cannot know +who talks to whom + No comment provided by engineer. + Network settings Impostazioni di rete @@ -5934,6 +5937,11 @@ Questo è il tuo link per il gruppo %@! No No comment provided by engineer. + + No account. No phone. No email. No ID. +The most secure encryption. + No comment provided by engineer. + No active relays No comment provided by engineer. @@ -6098,15 +6106,20 @@ Questo è il tuo link per il gruppo %@! Nessuna chat non letta No comment provided by engineer. - - No user identifiers. - Nessun identificatore utente. + + Nobody tracked your conversations. No one drew a map of where you'd been. Privacy was never a feature - it was the way of life. + Nessuno monitorava le tue conversazioni. Nessuno disegnava una mappa delle tue posizioni. La privacy non era mai stata una caratteristica, era uno stile di vita. No comment provided by engineer. Non-profit governance No comment provided by engineer. + + Not a better lock on someone else's door. Not a nicer landlord that respects your privacy, but still keeps the record of all visitors. You are not a guest. You are home. No king can enter it - you are sovereign. + Non una serratura migliore sulla porta di qualcun altro. Non un padrone di casa più gentile che rispetta la tua privacy, ma che continua a tenere traccia di tutti i visitatori. Non sei un ospite. Sei a casa tua. Nessun re può entrarvi: sei tu il sovrano. + No comment provided by engineer. + Not all relays connected Non tutti i relay sono connessi @@ -6188,6 +6201,10 @@ new chat action Database vecchio No comment provided by engineer. + + On your phone, not on any server. + No comment provided by engineer. + One-time invitation link Link di invito una tantum @@ -6435,6 +6452,13 @@ alert button Server dell'operatore alert title + + Operators commit to: +- Be independent +- Minimize metadata usage +- Run verified open-source code + No comment provided by engineer. + Or import archive file O importa file archivio @@ -6762,18 +6786,12 @@ Errore: %@ Informativa sulla privacy e condizioni d'uso. No comment provided by engineer. - - Privacy redefined - Privacy ridefinita - No comment provided by engineer. - Privacy: for owners and subscribers. No comment provided by engineer. - - Private chats, groups and your contacts are not accessible to server operators. - Le chat private, i gruppi e i tuoi contatti non sono accessibili agli operatori dei server. + + Private and secure messaging. No comment provided by engineer. @@ -8186,6 +8204,14 @@ chat item action Le impostazioni sono state cambiate. alert message + + Setup notifications + No comment provided by engineer. + + + Setup routers + No comment provided by engineer. + Shape profile images Forma delle immagini del profilo @@ -8972,9 +8998,9 @@ Può accadere a causa di qualche bug o quando la connessione è compromessa.La crittografia funziona e il nuovo accordo sulla crittografia non è richiesto. Potrebbero verificarsi errori di connessione! No comment provided by engineer. - - The future of messaging - La nuova generazione di messaggistica privata + + The first network where you own +your contacts and groups. No comment provided by engineer. @@ -9012,6 +9038,11 @@ Può accadere a causa di qualche bug o quando la connessione è compromessa.Il database vecchio non è stato rimosso durante la migrazione, può essere eliminato. No comment provided by engineer. + + The oldest human freedom - to speak to another person without being watched - built on infrastructure that cannot betray it. + La più antica libertà umana, parlare con un'altra persona senza essere osservati, si basa su un'infrastruttura che non può tradirla. + No comment provided by engineer. + The same conditions will apply to operator **%@**. Le stesse condizioni si applicheranno all'operatore **%@**. @@ -9057,6 +9088,16 @@ Può accadere a causa di qualche bug o quando la connessione è compromessa.Temi No comment provided by engineer. + + Then we moved online, and every platform asked for a piece of you - your name, your number, your friends. We accepted that the price of talking to others is letting someone know who we talk to. Every generation, people and tech, had it this way - telephone, email, messengers, social media. It seemed the only way possible. + Poi ci siamo trasferiti online e ogni piattaforma ha chiesto un pezzo di noi: il nome, il numero, gli amici. Abbiamo accettato che il prezzo da pagare per comunicare con gli altri fosse quello di far sapere a qualcuno con chi parliamo. Ogni generazione, sia di persone che di tecnologia, ha funzionato così: telefono, email, messenger, social media. Sembrava l'unico modo possibile. + No comment provided by engineer. + + + There is another way. A network with no phone numbers. No usernames. No accounts. No user identities of any kind. A network that connects people and carries encrypted messages without knowing who is connected. + C'è un'altra via. Una rete senza numeri di telefono. Senza nomi utente. Senza account. Senza identificatori utente di alcun tipo. Una rete che connette le persone e trasferisce messaggi crittografati senza sapere chi è connesso. + No comment provided by engineer. + These conditions will also apply for: **%@**. Queste condizioni si applicheranno anche per: **%@**. @@ -9947,6 +9988,10 @@ Per connetterti, chiedi al tuo contatto di creare un altro link di connessione e Quando condividi un profilo in incognito con qualcuno, questo profilo verrà utilizzato per i gruppi a cui ti invitano. No comment provided by engineer. + + Why SimpleX is built. + No comment provided by engineer. + WiFi WiFi @@ -10209,6 +10254,12 @@ Ripetere la richiesta di ingresso? Non puoi inviare messaggi! alert title + + You commit to: +- Only legal content in public groups +- Respect other users - no spam + No comment provided by engineer. + You connected to the channel via this relay link. Ti sei connesso/a al canale attraverso questo link del relay. @@ -10219,11 +10270,6 @@ Ripetere la richiesta di ingresso? Non è stato possibile verificarti, riprova. No comment provided by engineer. - - You decide who can connect. - Sei tu a decidere chi può connettersi. - No comment provided by engineer. - You have already requested connection! Repeat connection request? @@ -10291,6 +10337,11 @@ Ripetere la richiesta di connessione? Dovresti ricevere le notifiche. token info + + You were born without an account + Sei nato senza un account. + No comment provided by engineer. + You will be able to send messages **only after your request is accepted**. Potrai inviare messaggi **solo dopo che la tua richiesta verrà accettata**. @@ -10431,6 +10482,11 @@ Ripetere la richiesta di connessione? I tuoi contatti resteranno connessi. No comment provided by engineer. + + Your conversations belong to you, as it had always been before the Internet. The network is not a place you visit. It is a place you create and own. And nobody can take it from you, whether you make it private or public. + Le tue conversazioni appartengono a te, come è sempre stato prima dell'avvento di internet. La rete non è un luogo che visiti. È un luogo che crei e possiedi. E nessuno può portartelo via, che tu lo renda privato o pubblico. + No comment provided by engineer. + Your credentials may be sent unencrypted. Le credenziali potrebbero essere inviate in chiaro. @@ -10451,6 +10507,10 @@ Ripetere la richiesta di connessione? Il tuo gruppo No comment provided by engineer. + + Your network + No comment provided by engineer. + Your preferences Le tue preferenze diff --git a/apps/ios/SimpleX Localizations/ja.xcloc/Localized Contents/ja.xliff b/apps/ios/SimpleX Localizations/ja.xcloc/Localized Contents/ja.xliff index 3498c8757f..6dcedf7d5b 100644 --- a/apps/ios/SimpleX Localizations/ja.xcloc/Localized Contents/ja.xliff +++ b/apps/ios/SimpleX Localizations/ja.xcloc/Localized Contents/ja.xliff @@ -1097,11 +1097,6 @@ swipe action 通話に応答 No comment provided by engineer. - - Anybody can host servers. - プロトコル技術とコードはオープンソースで、どなたでもご自分のサーバを運用できます。 - No comment provided by engineer. - App build: %@ アプリのビルド: %@ @@ -1295,6 +1290,19 @@ swipe action メッセージのハッシュ値問題 No comment provided by engineer. + + Be free +in your network + No comment provided by engineer. + + + Be free in your network. + No comment provided by engineer. + + + Because we destroyed the power to know who you are. So that your power can never be taken. + No comment provided by engineer. + Better calls No comment provided by engineer. @@ -1451,12 +1459,6 @@ swipe action チャット プロファイル経由 (デフォルト) または [接続経由](https://simplex.chat/blog/20230204-simplex-chat-v4-5-user-chat-profiles.html#transport-isolation) (BETA). No comment provided by engineer. - - By using SimpleX Chat you agree to: -- send only legal content in public groups. -- respect other users – no spam. - No comment provided by engineer. - Call already ended! 通話は既に終了してます! @@ -1951,10 +1953,6 @@ chat toolbar Configure relays No comment provided by engineer. - - Configure server operators - No comment provided by engineer. - Confirm 確認 @@ -2527,11 +2525,6 @@ This is your own one-time link! 配信のデバッグ No comment provided by engineer. - - Decentralized - 分散型 - No comment provided by engineer. - Decode link relay test step @@ -3319,6 +3312,10 @@ chat item action 上にパスワードを入力すると表示されます! No comment provided by engineer. + + Enter profile name... + No comment provided by engineer. + Enter relay name… No comment provided by engineer. @@ -4132,6 +4129,10 @@ Error: %2$@ Get notified when mentioned. No comment provided by engineer. + + Get started + No comment provided by engineer. + Good afternoon! message preview @@ -4391,11 +4392,6 @@ Error: %2$@ 即座に No comment provided by engineer. - - Immune to spam - スパムや悪質送信を防止 - No comment provided by engineer. - Import 読み込む @@ -5206,13 +5202,12 @@ This is your link for group %@! メッセージ、ファイル、通話は、前方秘匿性、否認可能性および侵入復元性を備えた**耐量子E2E暗号化**によって保護されます。 No comment provided by engineer. - - Migrate device + + Migrate No comment provided by engineer. - - Migrate from another device - 別の端末から移行 + + Migrate device No comment provided by engineer. @@ -5321,6 +5316,11 @@ This is your link for group %@! 名前 swipe action + + Network +commitments + No comment provided by engineer. + Network & servers ネットワークとサーバ @@ -5350,6 +5350,11 @@ This is your link for group %@! Network operator No comment provided by engineer. + + Network routers cannot know +who talks to whom + No comment provided by engineer. + Network settings ネットワーク設定 @@ -5458,6 +5463,11 @@ This is your link for group %@! いいえ No comment provided by engineer. + + No account. No phone. No email. No ID. +The most secure encryption. + No comment provided by engineer. + No active relays No comment provided by engineer. @@ -5601,15 +5611,18 @@ This is your link for group %@! No unread chats No comment provided by engineer. - - No user identifiers. - 世界初のユーザーIDのないプラットフォーム|設計も元からプライベート。 + + Nobody tracked your conversations. No one drew a map of where you'd been. Privacy was never a feature - it was the way of life. No comment provided by engineer. Non-profit governance No comment provided by engineer. + + Not a better lock on someone else's door. Not a nicer landlord that respects your privacy, but still keeps the record of all visitors. You are not a guest. You are home. No king can enter it - you are sovereign. + No comment provided by engineer. + Not all relays connected alert title @@ -5682,6 +5695,10 @@ new chat action 古いデータベース No comment provided by engineer. + + On your phone, not on any server. + No comment provided by engineer. + One-time invitation link 使い捨ての招待リンク @@ -5905,6 +5922,13 @@ alert button Operator server alert title + + Operators commit to: +- Be independent +- Minimize metadata usage +- Run verified open-source code + No comment provided by engineer. + Or import archive file No comment provided by engineer. @@ -6196,17 +6220,12 @@ Error: %@ Privacy policy and conditions of use. No comment provided by engineer. - - Privacy redefined - プライバシーの基準を新境地に - No comment provided by engineer. - Privacy: for owners and subscribers. No comment provided by engineer. - - Private chats, groups and your contacts are not accessible to server operators. + + Private and secure messaging. No comment provided by engineer. @@ -7467,6 +7486,14 @@ chat item action Settings were changed. alert message + + Setup notifications + No comment provided by engineer. + + + Setup routers + No comment provided by engineer. + Shape profile images No comment provided by engineer. @@ -8168,9 +8195,9 @@ It can happen because of some bug or when the connection is compromised.暗号化は機能しており、新しい暗号化への同意は必要ありません。接続エラーが発生する可能性があります! No comment provided by engineer. - - The future of messaging - 次世代のプライバシー・メッセンジャー + + The first network where you own +your contacts and groups. No comment provided by engineer. @@ -8205,6 +8232,10 @@ It can happen because of some bug or when the connection is compromised.古いデータベースは移行時に削除されなかったので、削除することができます。 No comment provided by engineer. + + The oldest human freedom - to speak to another person without being watched - built on infrastructure that cannot betray it. + No comment provided by engineer. + The same conditions will apply to operator **%@**. No comment provided by engineer. @@ -8244,6 +8275,14 @@ It can happen because of some bug or when the connection is compromised.Themes No comment provided by engineer. + + Then we moved online, and every platform asked for a piece of you - your name, your number, your friends. We accepted that the price of talking to others is letting someone know who we talk to. Every generation, people and tech, had it this way - telephone, email, messengers, social media. It seemed the only way possible. + No comment provided by engineer. + + + There is another way. A network with no phone numbers. No usernames. No accounts. No user identities of any kind. A network that connects people and carries encrypted messages without knowing who is connected. + No comment provided by engineer. + These conditions will also apply for: **%@**. No comment provided by engineer. @@ -9034,6 +9073,10 @@ To connect, please ask your contact to create another connection link and check 連絡相手にシークレットモードのプロフィールを共有すると、その連絡相手に招待されたグループでも同じプロフィールが使われます。 No comment provided by engineer. + + Why SimpleX is built. + No comment provided by engineer. + WiFi No comment provided by engineer. @@ -9265,6 +9308,12 @@ Repeat join request? メッセージを送信できませんでした! alert title + + You commit to: +- Only legal content in public groups +- Respect other users - no spam + No comment provided by engineer. + You connected to the channel via this relay link. No comment provided by engineer. @@ -9274,11 +9323,6 @@ Repeat join request? 確認できませんでした。 もう一度お試しください。 No comment provided by engineer. - - You decide who can connect. - あなたと繋がることができるのは、あなたからリンクを頂いた方のみです。 - No comment provided by engineer. - You have already requested connection! Repeat connection request? @@ -9340,6 +9384,10 @@ Repeat connection request? You should receive notifications. token info + + You were born without an account + No comment provided by engineer. + You will be able to send messages **only after your request is accepted**. No comment provided by engineer. @@ -9470,6 +9518,10 @@ Repeat connection request? 連絡先は接続されたままになります。 No comment provided by engineer. + + Your conversations belong to you, as it had always been before the Internet. The network is not a place you visit. It is a place you create and own. And nobody can take it from you, whether you make it private or public. + No comment provided by engineer. + Your credentials may be sent unencrypted. No comment provided by engineer. @@ -9488,6 +9540,10 @@ Repeat connection request? Your group No comment provided by engineer. + + Your network + No comment provided by engineer. + Your preferences あなたの設定 diff --git a/apps/ios/SimpleX Localizations/nl.xcloc/Localized Contents/nl.xliff b/apps/ios/SimpleX Localizations/nl.xcloc/Localized Contents/nl.xliff index 6c5316a2b1..426be0eebc 100644 --- a/apps/ios/SimpleX Localizations/nl.xcloc/Localized Contents/nl.xliff +++ b/apps/ios/SimpleX Localizations/nl.xcloc/Localized Contents/nl.xliff @@ -1113,11 +1113,6 @@ swipe action Beantwoord oproep No comment provided by engineer. - - Anybody can host servers. - Iedereen kan servers hosten. - No comment provided by engineer. - App build: %@ App build: %@ @@ -1322,6 +1317,19 @@ swipe action Onjuiste bericht hash No comment provided by engineer. + + Be free +in your network + No comment provided by engineer. + + + Be free in your network. + No comment provided by engineer. + + + Because we destroyed the power to know who you are. So that your power can never be taken. + No comment provided by engineer. + Better calls Betere gesprekken @@ -1500,15 +1508,6 @@ swipe action Via chatprofiel (standaard) of [via verbinding](https://simplex.chat/blog/20230204-simplex-chat-v4-5-user-chat-profiles.html#transport-isolation) (BETA). No comment provided by engineer. - - By using SimpleX Chat you agree to: -- send only legal content in public groups. -- respect other users – no spam. - Door SimpleX Chat te gebruiken, gaat u ermee akkoord: -- alleen legale content te versturen in openbare groepen. -- andere gebruikers te respecteren – geen spam. - No comment provided by engineer. - Call already ended! Oproep al beëindigd! @@ -2037,11 +2036,6 @@ chat toolbar Configure relays No comment provided by engineer. - - Configure server operators - Serveroperators configureren - No comment provided by engineer. - Confirm Bevestigen @@ -2656,11 +2650,6 @@ Dit is uw eigen eenmalige link! Foutopsporing bezorging No comment provided by engineer. - - Decentralized - Gedecentraliseerd - No comment provided by engineer. - Decode link relay test step @@ -3505,6 +3494,10 @@ chat item action Voer hier boven het wachtwoord in om weer te geven! No comment provided by engineer. + + Enter profile name... + No comment provided by engineer. + Enter relay name… No comment provided by engineer. @@ -4400,6 +4393,10 @@ Fout: %2$@ Ontvang een melding als u vermeld wordt. No comment provided by engineer. + + Get started + No comment provided by engineer. + Good afternoon! Goedemiddag! @@ -4671,11 +4668,6 @@ Fout: %2$@ Onmiddellijk No comment provided by engineer. - - Immune to spam - Immuun voor spam en misbruik - No comment provided by engineer. - Import Importeren @@ -5556,16 +5548,15 @@ Dit is jouw link voor groep %@! Berichten, bestanden en oproepen worden beschermd door **kwantumbestendige e2e encryptie** met perfecte voorwaartse geheimhouding, afwijzing en inbraakherstel. No comment provided by engineer. + + Migrate + No comment provided by engineer. + Migrate device Apparaat migreren No comment provided by engineer. - - Migrate from another device - Migreer vanaf een ander apparaat - No comment provided by engineer. - Migrate here Migreer hierheen @@ -5681,6 +5672,11 @@ Dit is jouw link voor groep %@! Naam swipe action + + Network +commitments + No comment provided by engineer. + Network & servers Netwerk & servers @@ -5715,6 +5711,11 @@ Dit is jouw link voor groep %@! Netwerkbeheerder No comment provided by engineer. + + Network routers cannot know +who talks to whom + No comment provided by engineer. + Network settings Netwerk instellingen @@ -5832,6 +5833,11 @@ Dit is jouw link voor groep %@! Nee No comment provided by engineer. + + No account. No phone. No email. No ID. +The most secure encryption. + No comment provided by engineer. + No active relays No comment provided by engineer. @@ -5993,15 +5999,18 @@ Dit is jouw link voor groep %@! Geen ongelezen chats No comment provided by engineer. - - No user identifiers. - Geen gebruikers-ID's. + + Nobody tracked your conversations. No one drew a map of where you'd been. Privacy was never a feature - it was the way of life. No comment provided by engineer. Non-profit governance No comment provided by engineer. + + Not a better lock on someone else's door. Not a nicer landlord that respects your privacy, but still keeps the record of all visitors. You are not a guest. You are home. No king can enter it - you are sovereign. + No comment provided by engineer. + Not all relays connected alert title @@ -6082,6 +6091,10 @@ new chat action Oude database No comment provided by engineer. + + On your phone, not on any server. + No comment provided by engineer. + One-time invitation link Eenmalige uitnodiging link @@ -6317,6 +6330,13 @@ alert button Operatorserver alert title + + Operators commit to: +- Be independent +- Minimize metadata usage +- Run verified open-source code + No comment provided by engineer. + Or import archive file Of importeer archiefbestand @@ -6640,18 +6660,12 @@ Fout: %@ Privacybeleid en gebruiksvoorwaarden. No comment provided by engineer. - - Privacy redefined - Privacy opnieuw gedefinieerd - No comment provided by engineer. - Privacy: for owners and subscribers. No comment provided by engineer. - - Private chats, groups and your contacts are not accessible to server operators. - Privéchats, groepen en uw contacten zijn niet toegankelijk voor serverbeheerders. + + Private and secure messaging. No comment provided by engineer. @@ -8032,6 +8046,14 @@ chat item action Instellingen zijn gewijzigd. alert message + + Setup notifications + No comment provided by engineer. + + + Setup routers + No comment provided by engineer. + Shape profile images Vorm profiel afbeeldingen @@ -8788,9 +8810,9 @@ Het kan gebeuren vanwege een bug of wanneer de verbinding is aangetast. De versleuteling werkt en de nieuwe versleutelingsovereenkomst is niet vereist. Dit kan leiden tot verbindingsfouten! No comment provided by engineer. - - The future of messaging - De volgende generatie privéberichten + + The first network where you own +your contacts and groups. No comment provided by engineer. @@ -8827,6 +8849,10 @@ Het kan gebeuren vanwege een bug of wanneer de verbinding is aangetast. De oude database is niet verwijderd tijdens de migratie, deze kan worden verwijderd. No comment provided by engineer. + + The oldest human freedom - to speak to another person without being watched - built on infrastructure that cannot betray it. + No comment provided by engineer. + The same conditions will apply to operator **%@**. Dezelfde voorwaarden gelden voor operator **%@**. @@ -8872,6 +8898,14 @@ Het kan gebeuren vanwege een bug of wanneer de verbinding is aangetast. Thema's No comment provided by engineer. + + Then we moved online, and every platform asked for a piece of you - your name, your number, your friends. We accepted that the price of talking to others is letting someone know who we talk to. Every generation, people and tech, had it this way - telephone, email, messengers, social media. It seemed the only way possible. + No comment provided by engineer. + + + There is another way. A network with no phone numbers. No usernames. No accounts. No user identities of any kind. A network that connects people and carries encrypted messages without knowing who is connected. + No comment provided by engineer. + These conditions will also apply for: **%@**. Deze voorwaarden zijn ook van toepassing op: **%@**. @@ -9739,6 +9773,10 @@ Om verbinding te maken, vraagt u uw contact om een andere verbinding link te mak Wanneer je een incognito profiel met iemand deelt, wordt dit profiel gebruikt voor de groepen waarvoor ze je uitnodigen. No comment provided by engineer. + + Why SimpleX is built. + No comment provided by engineer. + WiFi Wifi @@ -9998,6 +10036,12 @@ Deelnameverzoek herhalen? Je kunt geen berichten versturen! alert title + + You commit to: +- Only legal content in public groups +- Respect other users - no spam + No comment provided by engineer. + You connected to the channel via this relay link. No comment provided by engineer. @@ -10007,11 +10051,6 @@ Deelnameverzoek herhalen? U kon niet worden geverifieerd; probeer het opnieuw. No comment provided by engineer. - - You decide who can connect. - Jij bepaalt wie er verbinding mag maken. - No comment provided by engineer. - You have already requested connection! Repeat connection request? @@ -10079,6 +10118,10 @@ Verbindingsverzoek herhalen? U zou meldingen moeten ontvangen. token info + + You were born without an account + No comment provided by engineer. + You will be able to send messages **only after your request is accepted**. No comment provided by engineer. @@ -10213,6 +10256,10 @@ Verbindingsverzoek herhalen? Uw contacten blijven verbonden. No comment provided by engineer. + + Your conversations belong to you, as it had always been before the Internet. The network is not a place you visit. It is a place you create and own. And nobody can take it from you, whether you make it private or public. + No comment provided by engineer. + Your credentials may be sent unencrypted. Uw inloggegevens worden mogelijk niet-versleuteld verzonden. @@ -10232,6 +10279,10 @@ Verbindingsverzoek herhalen? Your group No comment provided by engineer. + + Your network + No comment provided by engineer. + Your preferences Jouw voorkeuren diff --git a/apps/ios/SimpleX Localizations/pl.xcloc/Localized Contents/pl.xliff b/apps/ios/SimpleX Localizations/pl.xcloc/Localized Contents/pl.xliff index 65a5c638fe..8aa9d4d9ff 100644 --- a/apps/ios/SimpleX Localizations/pl.xcloc/Localized Contents/pl.xliff +++ b/apps/ios/SimpleX Localizations/pl.xcloc/Localized Contents/pl.xliff @@ -1118,11 +1118,6 @@ swipe action Odbierz połączenie No comment provided by engineer. - - Anybody can host servers. - Każdy może hostować serwery. - No comment provided by engineer. - App build: %@ Kompilacja aplikacji: %@ @@ -1328,6 +1323,21 @@ swipe action Zły hash wiadomości No comment provided by engineer. + + Be free +in your network + No comment provided by engineer. + + + Be free in your network. + Ciesz się swobodą w swojej sieci. + No comment provided by engineer. + + + Because we destroyed the power to know who you are. So that your power can never be taken. + Ponieważ zniszczyliśmy moc pozwalającą poznać, kim jesteś. Więc twoja moc nigdy nie będzie Ci odebrana. + No comment provided by engineer. + Better calls Lepsze połączenia @@ -1511,15 +1521,6 @@ swipe action Według profilu czatu (domyślnie) lub [według połączenia](https://simplex.chat/blog/20230204-simplex-chat-v4-5-user-chat-profiles.html#transport-isolation) (BETA). No comment provided by engineer. - - By using SimpleX Chat you agree to: -- send only legal content in public groups. -- respect other users – no spam. - Korzystając z SimpleX Chat, zgadzasz się: -- wysyłać tylko legalne treści w grupach publicznych. -- szanować innych użytkowników – nie spamować. - No comment provided by engineer. - Call already ended! Połączenie już zakończone! @@ -2050,11 +2051,6 @@ chat toolbar Configure relays No comment provided by engineer. - - Configure server operators - Skonfiguruj operatorów serwerów - No comment provided by engineer. - Confirm Potwierdź @@ -2673,11 +2669,6 @@ To jest twój jednorazowy link! Dostarczenie debugowania No comment provided by engineer. - - Decentralized - Zdecentralizowane - No comment provided by engineer. - Decode link relay test step @@ -3528,6 +3519,10 @@ chat item action Wprowadź hasło powyżej, aby pokazać! No comment provided by engineer. + + Enter profile name... + No comment provided by engineer. + Enter relay name… No comment provided by engineer. @@ -4434,6 +4429,10 @@ Błąd: %2$@ Otrzymuj powiadomienia, gdy ktoś wspomni o Tobie. No comment provided by engineer. + + Get started + No comment provided by engineer. + Good afternoon! Dzień dobry! @@ -4708,11 +4707,6 @@ Błąd: %2$@ Natychmiast No comment provided by engineer. - - Immune to spam - Odporność na spam i nadużycia - No comment provided by engineer. - Import Importuj @@ -5603,16 +5597,15 @@ To jest twój link do grupy %@! Wiadomości, pliki i połączenia są chronione przez **kwantowo odporne szyfrowanie end-to-end** z doskonałym utajnianiem z wyprzedzeniem i odzyskiem po złamaniu. No comment provided by engineer. + + Migrate + No comment provided by engineer. + Migrate device Zmigruj urządzenie No comment provided by engineer. - - Migrate from another device - Zmigruj z innego urządzenia - No comment provided by engineer. - Migrate here Zmigruj tutaj @@ -5728,6 +5721,11 @@ To jest twój link do grupy %@! Nazwa swipe action + + Network +commitments + No comment provided by engineer. + Network & servers Sieć i serwery @@ -5762,6 +5760,11 @@ To jest twój link do grupy %@! Operator sieci No comment provided by engineer. + + Network routers cannot know +who talks to whom + No comment provided by engineer. + Network settings Ustawienia sieci @@ -5880,6 +5883,11 @@ To jest twój link do grupy %@! Nie No comment provided by engineer. + + No account. No phone. No email. No ID. +The most secure encryption. + No comment provided by engineer. + No active relays No comment provided by engineer. @@ -6042,15 +6050,20 @@ To jest twój link do grupy %@! Brak nieprzeczytanych czatów No comment provided by engineer. - - No user identifiers. - Brak identyfikatorów użytkownika. + + Nobody tracked your conversations. No one drew a map of where you'd been. Privacy was never a feature - it was the way of life. + Nikt nie śledził twoich rozmów. Nikt nie rysował mapy miejsc, w których byłeś. Prywatność nigdy nie była funkcją - była sposobem na życie. No comment provided by engineer. Non-profit governance No comment provided by engineer. + + Not a better lock on someone else's door. Not a nicer landlord that respects your privacy, but still keeps the record of all visitors. You are not a guest. You are home. No king can enter it - you are sovereign. + Nie chodzi o lepszy zamek w drzwiach kogoś innego. Nie chodzi o milszego właściciela, który szanuje twoją prywatność, ale nadal prowadzi rejestr wszystkich odwiedzających. Nie jesteś gościem. Jesteś w domu. Żaden król nie może do niego wejść - jesteś suwerenem. + No comment provided by engineer. + Not all relays connected alert title @@ -6131,6 +6144,10 @@ new chat action Stara baza danych No comment provided by engineer. + + On your phone, not on any server. + No comment provided by engineer. + One-time invitation link Jednorazowy link zaproszenia @@ -6376,6 +6393,13 @@ alert button Serwer Operatora alert title + + Operators commit to: +- Be independent +- Minimize metadata usage +- Run verified open-source code + No comment provided by engineer. + Or import archive file Lub zaimportuj plik archiwalny @@ -6699,18 +6723,12 @@ Błąd: %@ Polityka prywatności i warunki korzystania. No comment provided by engineer. - - Privacy redefined - Redefinicja prywatności - No comment provided by engineer. - Privacy: for owners and subscribers. No comment provided by engineer. - - Private chats, groups and your contacts are not accessible to server operators. - Prywatne czaty, grupy i Twoje kontakty nie są dostępne dla operatorów serwerów. + + Private and secure messaging. No comment provided by engineer. @@ -8109,6 +8127,14 @@ chat item action Ustawienia zostały zmienione. alert message + + Setup notifications + No comment provided by engineer. + + + Setup routers + No comment provided by engineer. + Shape profile images Kształtuj obrazy profilowe @@ -8876,9 +8902,9 @@ Może się to zdarzyć z powodu jakiegoś błędu lub gdy połączenie jest skom Szyfrowanie działa, a nowe uzgodnienie szyfrowania nie jest wymagane. Może to spowodować błędy w połączeniu! No comment provided by engineer. - - The future of messaging - Następna generacja prywatnych wiadomości + + The first network where you own +your contacts and groups. No comment provided by engineer. @@ -8916,6 +8942,11 @@ Może się to zdarzyć z powodu jakiegoś błędu lub gdy połączenie jest skom Stara baza danych nie została usunięta podczas migracji, można ją usunąć. No comment provided by engineer. + + The oldest human freedom - to speak to another person without being watched - built on infrastructure that cannot betray it. + Najstarsza ludzka wolność - możliwość rozmowy z inną osobą bez bycia obserwowanym - opiera się na infrastrukturze, która nie może jej zdradzić. + No comment provided by engineer. + The same conditions will apply to operator **%@**. Te same warunki będą miały zastosowanie do operatora **%@**. @@ -8961,6 +8992,16 @@ Może się to zdarzyć z powodu jakiegoś błędu lub gdy połączenie jest skom Motywy No comment provided by engineer. + + Then we moved online, and every platform asked for a piece of you - your name, your number, your friends. We accepted that the price of talking to others is letting someone know who we talk to. Every generation, people and tech, had it this way - telephone, email, messengers, social media. It seemed the only way possible. + Następnie przenieśliśmy się do sieci, a każda platforma prosiła o podanie danych osobowych - imienia i nazwiska, numeru telefonu, znajomych. Zaakceptowaliśmy fakt, że ceną za możliwość komunikowania się z innymi jest ujawnienie komuś, z kim rozmawiamy. Tak było w przypadku każdego pokolenia, ludzi i technologii - telefonu, poczty elektronicznej, komunikatorów, mediów społecznościowych. Wydawało się to jedyną możliwą opcją. + No comment provided by engineer. + + + There is another way. A network with no phone numbers. No usernames. No accounts. No user identities of any kind. A network that connects people and carries encrypted messages without knowing who is connected. + Jest jeszcze inny sposób. Sieć bez numerów telefonów. Bez nazw użytkowników. Bez kont. Bez jakichkolwiek tożsamości użytkowników. Sieć, która łączy ludzi i przesyła zaszyfrowane wiadomości, nie wiedząc, kto jest podłączony. + No comment provided by engineer. + These conditions will also apply for: **%@**. Warunki te będą miały również zastosowanie w przypadku: **%@**. @@ -9842,6 +9883,10 @@ Aby się połączyć, poproś Twój kontakt o utworzenie kolejnego linku połąc Gdy udostępnisz komuś profil incognito, będzie on używany w grupach, do których Cię zaprosi. No comment provided by engineer. + + Why SimpleX is built. + No comment provided by engineer. + WiFi WiFi @@ -10103,6 +10148,12 @@ Powtórzyć prośbę dołączenia? Nie możesz wysyłać wiadomości! alert title + + You commit to: +- Only legal content in public groups +- Respect other users - no spam + No comment provided by engineer. + You connected to the channel via this relay link. No comment provided by engineer. @@ -10112,11 +10163,6 @@ Powtórzyć prośbę dołączenia? Nie można zweryfikować użytkownika; proszę spróbować ponownie. No comment provided by engineer. - - You decide who can connect. - Ty decydujesz, kto może się połączyć. - No comment provided by engineer. - You have already requested connection! Repeat connection request? @@ -10184,6 +10230,11 @@ Powtórzyć prośbę połączenia? Powinieneś otrzymywać powiadomienia. token info + + You were born without an account + Urodziłeś się bez konta. + No comment provided by engineer. + You will be able to send messages **only after your request is accepted**. Będziesz mógł wysyłać wiadomości **dopiero po zaakceptowaniu Twojej prośby**. @@ -10322,6 +10373,11 @@ Powtórzyć prośbę połączenia? Twoje kontakty pozostaną połączone. No comment provided by engineer. + + Your conversations belong to you, as it had always been before the Internet. The network is not a place you visit. It is a place you create and own. And nobody can take it from you, whether you make it private or public. + Twoje rozmowy należą do Ciebie, tak jak zawsze było przed pojawieniem się Internetu. Sieć nie jest miejscem, które odwiedzasz. Jest miejscem, które tworzysz i które należy do Ciebie. Nikt nie może Ci tego odebrać, niezależnie od tego, czy jest to miejsce prywatne, czy publiczne. + No comment provided by engineer. + Your credentials may be sent unencrypted. Twoje poświadczenia mogą zostać wysłane niezaszyfrowane. @@ -10342,6 +10398,10 @@ Powtórzyć prośbę połączenia? Twoja grupa No comment provided by engineer. + + Your network + No comment provided by engineer. + Your preferences Twoje preferencje diff --git a/apps/ios/SimpleX Localizations/ru.xcloc/Localized Contents/ru.xliff b/apps/ios/SimpleX Localizations/ru.xcloc/Localized Contents/ru.xliff index a9f194b609..ae1e9f411a 100644 --- a/apps/ios/SimpleX Localizations/ru.xcloc/Localized Contents/ru.xliff +++ b/apps/ios/SimpleX Localizations/ru.xcloc/Localized Contents/ru.xliff @@ -1117,11 +1117,6 @@ swipe action Принять звонок No comment provided by engineer. - - Anybody can host servers. - Кто угодно может запустить сервер. - No comment provided by engineer. - App build: %@ Сборка приложения: %@ @@ -1326,6 +1321,21 @@ swipe action Ошибка хэш сообщения No comment provided by engineer. + + Be free +in your network + No comment provided by engineer. + + + Be free in your network. + Будь свободен в своей сети. + No comment provided by engineer. + + + Because we destroyed the power to know who you are. So that your power can never be taken. + Потому что мы разрушили саму возможность узнать, кто вы. Чтобы вашу свободу невозможно было отнять. + No comment provided by engineer. + Better calls Улучшенные звонки @@ -1509,15 +1519,6 @@ swipe action По профилю чата или [по соединению](https://simplex.chat/blog/20230204-simplex-chat-v4-5-user-chat-profiles.html#transport-isolation) (БЕТА). No comment provided by engineer. - - By using SimpleX Chat you agree to: -- send only legal content in public groups. -- respect other users – no spam. - Используя SimpleX Chat, Вы согласны: -- отправлять только законные сообщения в публичных группах. -- уважать других пользователей – не отправлять спам. - No comment provided by engineer. - Call already ended! Звонок уже завершен! @@ -2048,11 +2049,6 @@ chat toolbar Configure relays No comment provided by engineer. - - Configure server operators - Настроить операторов серверов - No comment provided by engineer. - Confirm Подтвердить @@ -2670,11 +2666,6 @@ This is your own one-time link! Отладка доставки No comment provided by engineer. - - Decentralized - Децентрализованный - No comment provided by engineer. - Decode link relay test step @@ -3523,6 +3514,10 @@ chat item action Введите пароль выше, чтобы раскрыть! No comment provided by engineer. + + Enter profile name... + No comment provided by engineer. + Enter relay name… No comment provided by engineer. @@ -4428,6 +4423,10 @@ Error: %2$@ Уведомления, когда Вас упомянули. No comment provided by engineer. + + Get started + No comment provided by engineer. + Good afternoon! Добрый день! @@ -4700,11 +4699,6 @@ Error: %2$@ Сразу No comment provided by engineer. - - Immune to spam - Защищен от спама - No comment provided by engineer. - Import Импортировать @@ -5591,16 +5585,15 @@ This is your link for group %@! Сообщения, файлы и звонки защищены **квантово-устойчивым end-to-end шифрованием** с прямой секретностью (PFS), правдоподобным отрицанием и восстановлением от взлома. No comment provided by engineer. + + Migrate + No comment provided by engineer. + Migrate device Мигрировать устройство No comment provided by engineer. - - Migrate from another device - Миграция с другого устройства - No comment provided by engineer. - Migrate here Мигрировать сюда @@ -5716,6 +5709,11 @@ This is your link for group %@! Имя swipe action + + Network +commitments + No comment provided by engineer. + Network & servers Сеть и серверы @@ -5750,6 +5748,11 @@ This is your link for group %@! Оператор сети No comment provided by engineer. + + Network routers cannot know +who talks to whom + No comment provided by engineer. + Network settings Настройки сети @@ -5868,6 +5871,11 @@ This is your link for group %@! Нет No comment provided by engineer. + + No account. No phone. No email. No ID. +The most secure encryption. + No comment provided by engineer. + No active relays No comment provided by engineer. @@ -6030,15 +6038,20 @@ This is your link for group %@! Нет непрочитанных чатов No comment provided by engineer. - - No user identifiers. - Без идентификаторов пользователей. + + Nobody tracked your conversations. No one drew a map of where you'd been. Privacy was never a feature - it was the way of life. + Никто не отслеживал ваши разговоры. Никто не составлял карту ваших перемещений. Конфиденциальность не была функцией - это был образ жизни. No comment provided by engineer. Non-profit governance No comment provided by engineer. + + Not a better lock on someone else's door. Not a nicer landlord that respects your privacy, but still keeps the record of all visitors. You are not a guest. You are home. No king can enter it - you are sovereign. + Не более надёжный замок на чужой двери. Не более вежливый хозяин, который уважает вашу частную жизнь, но всё равно ведёт учёт всех посетителей. Вы не гость. Вы у себя дома. Ни один король не войдёт в ваш дом - вы суверенны. + No comment provided by engineer. + Not all relays connected alert title @@ -6119,6 +6132,10 @@ new chat action Предыдущая версия данных чата No comment provided by engineer. + + On your phone, not on any server. + No comment provided by engineer. + One-time invitation link Одноразовая ссылка @@ -6364,6 +6381,13 @@ alert button Сервер оператора alert title + + Operators commit to: +- Be independent +- Minimize metadata usage +- Run verified open-source code + No comment provided by engineer. + Or import archive file Или импортировать файл архива @@ -6687,18 +6711,12 @@ Error: %@ Политика конфиденциальности и условия использования. No comment provided by engineer. - - Privacy redefined - Более конфиденциальный - No comment provided by engineer. - Privacy: for owners and subscribers. No comment provided by engineer. - - Private chats, groups and your contacts are not accessible to server operators. - Частные разговоры, группы и Ваши контакты недоступны для операторов серверов. + + Private and secure messaging. No comment provided by engineer. @@ -8091,6 +8109,14 @@ chat item action Настройки были изменены. alert message + + Setup notifications + No comment provided by engineer. + + + Setup routers + No comment provided by engineer. + Shape profile images Форма картинок профилей @@ -8858,9 +8884,9 @@ It can happen because of some bug or when the connection is compromised.Шифрование работает, и новое соглашение не требуется. Это может привести к ошибкам соединения! No comment provided by engineer. - - The future of messaging - Будущее коммуникаций + + The first network where you own +your contacts and groups. No comment provided by engineer. @@ -8898,6 +8924,11 @@ It can happen because of some bug or when the connection is compromised.Предыдущая версия данных чата не удалена при перемещении, её можно удалить. No comment provided by engineer. + + The oldest human freedom - to speak to another person without being watched - built on infrastructure that cannot betray it. + Древнейшая человеческая свобода - говорить с другим человеком без слежки - построенная на инфраструктуре, которая не может её предать. + No comment provided by engineer. + The same conditions will apply to operator **%@**. Те же самые условия будут приняты для оператора **%@**. @@ -8943,6 +8974,16 @@ It can happen because of some bug or when the connection is compromised.Темы No comment provided by engineer. + + Then we moved online, and every platform asked for a piece of you - your name, your number, your friends. We accepted that the price of talking to others is letting someone know who we talk to. Every generation, people and tech, had it this way - telephone, email, messengers, social media. It seemed the only way possible. + Потом мы вышли в интернет, и каждая платформа попросила частичку вас - ваше имя, ваш номер, ваших друзей. Мы смирились с тем, что за возможность общаться приходится отдавать информацию о том, с кем мы общаемся. Каждое поколение людей и технологий жило так - телефон, электронная почта, мессенджеры, социальные сети. Казалось, что другого пути нет. + No comment provided by engineer. + + + There is another way. A network with no phone numbers. No usernames. No accounts. No user identities of any kind. A network that connects people and carries encrypted messages without knowing who is connected. + Другой путь есть. Сеть без номеров телефонов. Без имён пользователей. Без аккаунтов. Без каких-либо идентификаторов пользователей. Сеть, которая соединяет людей и передаёт зашифрованные сообщения, не зная, кто с кем связан. + No comment provided by engineer. + These conditions will also apply for: **%@**. Эти условия также будут применены к: **%@**. @@ -9823,6 +9864,10 @@ To connect, please ask your contact to create another connection link and check Когда Вы соединены с контактом инкогнито, тот же самый инкогнито профиль будет использоваться для групп с этим контактом. No comment provided by engineer. + + Why SimpleX is built. + No comment provided by engineer. + WiFi WiFi @@ -10084,6 +10129,12 @@ Repeat join request? Вы не можете отправлять сообщения! alert title + + You commit to: +- Only legal content in public groups +- Respect other users - no spam + No comment provided by engineer. + You connected to the channel via this relay link. No comment provided by engineer. @@ -10093,11 +10144,6 @@ Repeat join request? Верификация не удалась; пожалуйста, попробуйте ещё раз. No comment provided by engineer. - - You decide who can connect. - Вы определяете, кто может соединиться. - No comment provided by engineer. - You have already requested connection! Repeat connection request? @@ -10165,6 +10211,11 @@ Repeat connection request? Вы должны получать уведомления. token info + + You were born without an account + Вы родились без аккаунта. + No comment provided by engineer. + You will be able to send messages **only after your request is accepted**. Вы сможете отправлять сообщения **только после того как Ваш запрос будет принят**. @@ -10303,6 +10354,11 @@ Repeat connection request? Ваши контакты сохранятся. No comment provided by engineer. + + Your conversations belong to you, as it had always been before the Internet. The network is not a place you visit. It is a place you create and own. And nobody can take it from you, whether you make it private or public. + Ваши разговоры принадлежат вам, как это всегда было до интернета. Сеть - это не место, куда вы приходите. Это место, которое вы создаёте и которым владеете. И никто не может это у вас отнять, делаете ли вы его конфиденциальным или публичным. + No comment provided by engineer. + Your credentials may be sent unencrypted. Ваши учетные данные могут быть отправлены в незашифрованном виде. @@ -10323,6 +10379,10 @@ Repeat connection request? Ваша группа No comment provided by engineer. + + Your network + No comment provided by engineer. + Your preferences Ваши предпочтения diff --git a/apps/ios/SimpleX Localizations/th.xcloc/Localized Contents/th.xliff b/apps/ios/SimpleX Localizations/th.xcloc/Localized Contents/th.xliff index 8c45cb3e95..68dfc223c0 100644 --- a/apps/ios/SimpleX Localizations/th.xcloc/Localized Contents/th.xliff +++ b/apps/ios/SimpleX Localizations/th.xcloc/Localized Contents/th.xliff @@ -1025,11 +1025,6 @@ swipe action รับสาย No comment provided by engineer. - - Anybody can host servers. - โปรโตคอลและโค้ดโอเพ่นซอร์ส – ใคร ๆ ก็สามารถเปิดใช้เซิร์ฟเวอร์ได้ - No comment provided by engineer. - App build: %@ รุ่นแอป: %@ @@ -1216,6 +1211,19 @@ swipe action แฮชข้อความไม่ดี No comment provided by engineer. + + Be free +in your network + No comment provided by engineer. + + + Be free in your network. + No comment provided by engineer. + + + Because we destroyed the power to know who you are. So that your power can never be taken. + No comment provided by engineer. + Better calls No comment provided by engineer. @@ -1371,12 +1379,6 @@ swipe action ตามโปรไฟล์แชท (ค่าเริ่มต้น) หรือ [โดยการเชื่อมต่อ](https://simplex.chat/blog/20230204-simplex-chat-v4-5-user-chat-profiles.html#transport-isolation) (เบต้า) No comment provided by engineer. - - By using SimpleX Chat you agree to: -- send only legal content in public groups. -- respect other users – no spam. - No comment provided by engineer. - Call already ended! สิ้นสุดการโทรแล้ว! @@ -1859,10 +1861,6 @@ chat toolbar Configure relays No comment provided by engineer. - - Configure server operators - No comment provided by engineer. - Confirm ยืนยัน @@ -2418,11 +2416,6 @@ This is your own one-time link! Debug delivery No comment provided by engineer. - - Decentralized - กระจายอำนาจแล้ว - No comment provided by engineer. - Decode link relay test step @@ -3204,6 +3197,10 @@ chat item action ใส่รหัสผ่านด้านบนเพื่อแสดง! No comment provided by engineer. + + Enter profile name... + No comment provided by engineer. + Enter relay name… No comment provided by engineer. @@ -4016,6 +4013,10 @@ Error: %2$@ Get notified when mentioned. No comment provided by engineer. + + Get started + No comment provided by engineer. + Good afternoon! message preview @@ -4275,11 +4276,6 @@ Error: %2$@ โดยทันที No comment provided by engineer. - - Immune to spam - มีภูมิคุ้มกันต่อสแปมและการละเมิด - No comment provided by engineer. - Import นำเข้า @@ -5087,12 +5083,12 @@ This is your link for group %@! Messages, files and calls are protected by **quantum resistant e2e encryption** with perfect forward secrecy, repudiation and break-in recovery. No comment provided by engineer. - - Migrate device + + Migrate No comment provided by engineer. - - Migrate from another device + + Migrate device No comment provided by engineer. @@ -5200,6 +5196,11 @@ This is your link for group %@! ชื่อ swipe action + + Network +commitments + No comment provided by engineer. + Network & servers เครือข่ายและเซิร์ฟเวอร์ @@ -5229,6 +5230,11 @@ This is your link for group %@! Network operator No comment provided by engineer. + + Network routers cannot know +who talks to whom + No comment provided by engineer. + Network settings การตั้งค่าเครือข่าย @@ -5336,6 +5342,11 @@ This is your link for group %@! เลขที่ No comment provided by engineer. + + No account. No phone. No email. No ID. +The most secure encryption. + No comment provided by engineer. + No active relays No comment provided by engineer. @@ -5478,15 +5489,18 @@ This is your link for group %@! No unread chats No comment provided by engineer. - - No user identifiers. - แพลตฟอร์มแรกที่ไม่มีตัวระบุผู้ใช้ - ถูกออกแบบให้เป็นส่วนตัว + + Nobody tracked your conversations. No one drew a map of where you'd been. Privacy was never a feature - it was the way of life. No comment provided by engineer. Non-profit governance No comment provided by engineer. + + Not a better lock on someone else's door. Not a nicer landlord that respects your privacy, but still keeps the record of all visitors. You are not a guest. You are home. No king can enter it - you are sovereign. + No comment provided by engineer. + Not all relays connected alert title @@ -5559,6 +5573,10 @@ new chat action ฐานข้อมูลเก่า No comment provided by engineer. + + On your phone, not on any server. + No comment provided by engineer. + One-time invitation link ลิงก์คำเชิญแบบใช้ครั้งเดียว @@ -5779,6 +5797,13 @@ alert button Operator server alert title + + Operators commit to: +- Be independent +- Minimize metadata usage +- Run verified open-source code + No comment provided by engineer. + Or import archive file No comment provided by engineer. @@ -6070,17 +6095,12 @@ Error: %@ Privacy policy and conditions of use. No comment provided by engineer. - - Privacy redefined - นิยามความเป็นส่วนตัวใหม่ - No comment provided by engineer. - Privacy: for owners and subscribers. No comment provided by engineer. - - Private chats, groups and your contacts are not accessible to server operators. + + Private and secure messaging. No comment provided by engineer. @@ -7344,6 +7364,14 @@ chat item action Settings were changed. alert message + + Setup notifications + No comment provided by engineer. + + + Setup routers + No comment provided by engineer. + Shape profile images No comment provided by engineer. @@ -8043,9 +8071,9 @@ It can happen because of some bug or when the connection is compromised.encryption กำลังทำงานและไม่จำเป็นต้องใช้ข้อตกลง encryption ใหม่ อาจทำให้การเชื่อมต่อผิดพลาดได้! No comment provided by engineer. - - The future of messaging - การส่งข้อความส่วนตัวรุ่นต่อไป + + The first network where you own +your contacts and groups. No comment provided by engineer. @@ -8080,6 +8108,10 @@ It can happen because of some bug or when the connection is compromised.ฐานข้อมูลเก่าไม่ได้ถูกลบในระหว่างการย้ายข้อมูล แต่สามารถลบได้ No comment provided by engineer. + + The oldest human freedom - to speak to another person without being watched - built on infrastructure that cannot betray it. + No comment provided by engineer. + The same conditions will apply to operator **%@**. No comment provided by engineer. @@ -8119,6 +8151,14 @@ It can happen because of some bug or when the connection is compromised.Themes No comment provided by engineer. + + Then we moved online, and every platform asked for a piece of you - your name, your number, your friends. We accepted that the price of talking to others is letting someone know who we talk to. Every generation, people and tech, had it this way - telephone, email, messengers, social media. It seemed the only way possible. + No comment provided by engineer. + + + There is another way. A network with no phone numbers. No usernames. No accounts. No user identities of any kind. A network that connects people and carries encrypted messages without knowing who is connected. + No comment provided by engineer. + These conditions will also apply for: **%@**. No comment provided by engineer. @@ -8906,6 +8946,10 @@ To connect, please ask your contact to create another connection link and check เมื่อคุณแชร์โปรไฟล์ที่ไม่ระบุตัวตนกับใครสักคน โปรไฟล์นี้จะใช้สำหรับกลุ่มที่พวกเขาเชิญคุณ No comment provided by engineer. + + Why SimpleX is built. + No comment provided by engineer. + WiFi No comment provided by engineer. @@ -9136,6 +9180,12 @@ Repeat join request? คุณไม่สามารถส่งข้อความได้! alert title + + You commit to: +- Only legal content in public groups +- Respect other users - no spam + No comment provided by engineer. + You connected to the channel via this relay link. No comment provided by engineer. @@ -9145,11 +9195,6 @@ Repeat join request? เราไม่สามารถตรวจสอบคุณได้ กรุณาลองอีกครั้ง. No comment provided by engineer. - - You decide who can connect. - ผู้คนสามารถเชื่อมต่อกับคุณผ่านลิงก์ที่คุณแบ่งปันเท่านั้น - No comment provided by engineer. - You have already requested connection! Repeat connection request? @@ -9210,6 +9255,10 @@ Repeat connection request? You should receive notifications. token info + + You were born without an account + No comment provided by engineer. + You will be able to send messages **only after your request is accepted**. No comment provided by engineer. @@ -9340,6 +9389,10 @@ Repeat connection request? ผู้ติดต่อของคุณจะยังคงเชื่อมต่ออยู่ No comment provided by engineer. + + Your conversations belong to you, as it had always been before the Internet. The network is not a place you visit. It is a place you create and own. And nobody can take it from you, whether you make it private or public. + No comment provided by engineer. + Your credentials may be sent unencrypted. No comment provided by engineer. @@ -9358,6 +9411,10 @@ Repeat connection request? Your group No comment provided by engineer. + + Your network + No comment provided by engineer. + Your preferences การตั้งค่าของคุณ diff --git a/apps/ios/SimpleX Localizations/tr.xcloc/Localized Contents/tr.xliff b/apps/ios/SimpleX Localizations/tr.xcloc/Localized Contents/tr.xliff index ea9291a43a..1724c13c18 100644 --- a/apps/ios/SimpleX Localizations/tr.xcloc/Localized Contents/tr.xliff +++ b/apps/ios/SimpleX Localizations/tr.xcloc/Localized Contents/tr.xliff @@ -1117,11 +1117,6 @@ swipe action Aramayı cevapla No comment provided by engineer. - - Anybody can host servers. - Açık kaynak protokolü ve kodu - herhangi biri sunucuları çalıştırabilir. - No comment provided by engineer. - App build: %@ Uygulama sürümü: %@ @@ -1326,6 +1321,19 @@ swipe action Kötü mesaj karması No comment provided by engineer. + + Be free +in your network + No comment provided by engineer. + + + Be free in your network. + No comment provided by engineer. + + + Because we destroyed the power to know who you are. So that your power can never be taken. + No comment provided by engineer. + Better calls Daha iyi aramalar @@ -1509,15 +1517,6 @@ swipe action Sohbet profiline göre (varsayılan) veya [bağlantıya göre](https://simplex.chat/blog/20230204-simplex-chat-v4-5-user-chat-profiles.html#transport-isolation) (BETA). No comment provided by engineer. - - By using SimpleX Chat you agree to: -- send only legal content in public groups. -- respect other users – no spam. - SimpleX Chat'i kullanarak şunları kabul etmiş olursunuz: -- herkese açık gruplarda yalnızca yasal içerik göndermek. -- diğer kullanıcılara saygı göstermek – spam yapmamak. - No comment provided by engineer. - Call already ended! Arama çoktan bitti! @@ -2048,11 +2047,6 @@ chat toolbar Configure relays No comment provided by engineer. - - Configure server operators - Sunucu operatörlerini yapılandır - No comment provided by engineer. - Confirm Onayla @@ -2670,11 +2664,6 @@ Bu senin kendi tek kullanımlık bağlantın! Hata ayıklama teslimatı No comment provided by engineer. - - Decentralized - Merkezi Olmayan - No comment provided by engineer. - Decode link relay test step @@ -3523,6 +3512,10 @@ chat item action Göstermek için yukarıdaki şifreyi gir! No comment provided by engineer. + + Enter profile name... + No comment provided by engineer. + Enter relay name… No comment provided by engineer. @@ -4423,6 +4416,10 @@ Hata: %2$@ Bahsedildiğinde bildirim alın. No comment provided by engineer. + + Get started + No comment provided by engineer. + Good afternoon! İyi öğlenler! @@ -4695,11 +4692,6 @@ Hata: %2$@ Hemen No comment provided by engineer. - - Immune to spam - Spam ve kötüye kullanıma karşı bağışıklı - No comment provided by engineer. - Import İçe aktar @@ -5587,16 +5579,15 @@ Bu senin grup için bağlantın %@! Mesajlar, dosyalar ve aramalar **kuantum dirençli e2e şifreleme** ile mükemmel ileri gizlilik, inkar ve zorla girme kurtarma ile korunur. No comment provided by engineer. + + Migrate + No comment provided by engineer. + Migrate device Cihazı taşıma No comment provided by engineer. - - Migrate from another device - Başka bir cihazdan geçiş yapın - No comment provided by engineer. - Migrate here Buraya göç edin @@ -5712,6 +5703,11 @@ Bu senin grup için bağlantın %@! İsim swipe action + + Network +commitments + No comment provided by engineer. + Network & servers Ağ & sunucular @@ -5746,6 +5742,11 @@ Bu senin grup için bağlantın %@! Ağ operatörü No comment provided by engineer. + + Network routers cannot know +who talks to whom + No comment provided by engineer. + Network settings Ağ ayarları @@ -5864,6 +5865,11 @@ Bu senin grup için bağlantın %@! Hayır No comment provided by engineer. + + No account. No phone. No email. No ID. +The most secure encryption. + No comment provided by engineer. + No active relays No comment provided by engineer. @@ -6026,15 +6032,18 @@ Bu senin grup için bağlantın %@! Okunmamış sohbet yok No comment provided by engineer. - - No user identifiers. - Herhangi bir kullanıcı tanımlayıcısı yok. + + Nobody tracked your conversations. No one drew a map of where you'd been. Privacy was never a feature - it was the way of life. No comment provided by engineer. Non-profit governance No comment provided by engineer. + + Not a better lock on someone else's door. Not a nicer landlord that respects your privacy, but still keeps the record of all visitors. You are not a guest. You are home. No king can enter it - you are sovereign. + No comment provided by engineer. + Not all relays connected alert title @@ -6115,6 +6124,10 @@ new chat action Eski veritabanı No comment provided by engineer. + + On your phone, not on any server. + No comment provided by engineer. + One-time invitation link Tek zamanlı bağlantı daveti @@ -6360,6 +6373,13 @@ alert button Operatör sunucusu alert title + + Operators commit to: +- Be independent +- Minimize metadata usage +- Run verified open-source code + No comment provided by engineer. + Or import archive file Veya arşiv dosyasını içe aktar @@ -6683,18 +6703,12 @@ Hata: %@ Gizlilik politikası ve kullanım koşulları. No comment provided by engineer. - - Privacy redefined - Gizlilik yeniden tanımlandı - No comment provided by engineer. - Privacy: for owners and subscribers. No comment provided by engineer. - - Private chats, groups and your contacts are not accessible to server operators. - Özel sohbetler, gruplar ve kişilerinize sunucu operatörleri tarafından erişilemez. + + Private and secure messaging. No comment provided by engineer. @@ -8087,6 +8101,14 @@ chat item action Ayarlar değiştirildi. alert message + + Setup notifications + No comment provided by engineer. + + + Setup routers + No comment provided by engineer. + Shape profile images Profil resimlerini şekillendir @@ -8854,9 +8876,9 @@ Bazı hatalar nedeniyle veya bağlantı tehlikeye girdiğinde meydana gelebilir. Şifreleme çalışıyor ve yeni şifreleme anlaşması gerekli değil. Bağlantı hatalarına neden olabilir! No comment provided by engineer. - - The future of messaging - Gizli mesajlaşmanın yeni nesli + + The first network where you own +your contacts and groups. No comment provided by engineer. @@ -8894,6 +8916,10 @@ Bazı hatalar nedeniyle veya bağlantı tehlikeye girdiğinde meydana gelebilir. Eski veritabanı geçiş sırasında kaldırılmadı, silinebilir. No comment provided by engineer. + + The oldest human freedom - to speak to another person without being watched - built on infrastructure that cannot betray it. + No comment provided by engineer. + The same conditions will apply to operator **%@**. Aynı koşullar operatör **%@** için de geçerli olacaktır. @@ -8939,6 +8965,14 @@ Bazı hatalar nedeniyle veya bağlantı tehlikeye girdiğinde meydana gelebilir. Temalar No comment provided by engineer. + + Then we moved online, and every platform asked for a piece of you - your name, your number, your friends. We accepted that the price of talking to others is letting someone know who we talk to. Every generation, people and tech, had it this way - telephone, email, messengers, social media. It seemed the only way possible. + No comment provided by engineer. + + + There is another way. A network with no phone numbers. No usernames. No accounts. No user identities of any kind. A network that connects people and carries encrypted messages without knowing who is connected. + No comment provided by engineer. + These conditions will also apply for: **%@**. Bu koşullar ayrıca şunlar için de geçerli olacaktır: **%@**. @@ -9818,6 +9852,10 @@ Bağlanmak için lütfen kişinizden başka bir bağlantı oluşturmasını iste Biriyle gizli bir profil paylaştığınızda, bu profil sizi davet ettikleri gruplar için kullanılacaktır. No comment provided by engineer. + + Why SimpleX is built. + No comment provided by engineer. + WiFi WiFi @@ -10077,6 +10115,12 @@ Katılma isteği tekrarlansın mı? Mesajlar gönderemezsiniz! alert title + + You commit to: +- Only legal content in public groups +- Respect other users - no spam + No comment provided by engineer. + You connected to the channel via this relay link. No comment provided by engineer. @@ -10086,11 +10130,6 @@ Katılma isteği tekrarlansın mı? Doğrulanamadınız; lütfen tekrar deneyin. No comment provided by engineer. - - You decide who can connect. - Kimin bağlanabileceğine siz karar verirsiniz. - No comment provided by engineer. - You have already requested connection! Repeat connection request? @@ -10158,6 +10197,10 @@ Bağlantı isteği tekrarlansın mı? Bildirim almanız gerekiyor. token info + + You were born without an account + No comment provided by engineer. + You will be able to send messages **only after your request is accepted**. Mesaj gönderebilmek için **isteğinizin kabul edilmesini beklemelisiniz**. @@ -10296,6 +10339,10 @@ Bağlantı isteği tekrarlansın mı? Kişileriniz bağlı kalacaktır. No comment provided by engineer. + + Your conversations belong to you, as it had always been before the Internet. The network is not a place you visit. It is a place you create and own. And nobody can take it from you, whether you make it private or public. + No comment provided by engineer. + Your credentials may be sent unencrypted. Kimlik bilgileriniz şifrelenmeden gönderilebilir. @@ -10316,6 +10363,10 @@ Bağlantı isteği tekrarlansın mı? Grubunuz No comment provided by engineer. + + Your network + No comment provided by engineer. + Your preferences Tercihleriniz diff --git a/apps/ios/SimpleX Localizations/uk.xcloc/Localized Contents/uk.xliff b/apps/ios/SimpleX Localizations/uk.xcloc/Localized Contents/uk.xliff index 1b71eecb96..122884486d 100644 --- a/apps/ios/SimpleX Localizations/uk.xcloc/Localized Contents/uk.xliff +++ b/apps/ios/SimpleX Localizations/uk.xcloc/Localized Contents/uk.xliff @@ -1115,11 +1115,6 @@ swipe action Відповісти на дзвінок No comment provided by engineer. - - Anybody can host servers. - Кожен може хостити сервери. - No comment provided by engineer. - App build: %@ Збірка програми: %@ @@ -1324,6 +1319,19 @@ swipe action Поганий хеш повідомлення No comment provided by engineer. + + Be free +in your network + No comment provided by engineer. + + + Be free in your network. + No comment provided by engineer. + + + Because we destroyed the power to know who you are. So that your power can never be taken. + No comment provided by engineer. + Better calls Кращі дзвінки @@ -1505,15 +1513,6 @@ swipe action Через профіль чату (за замовчуванням) або [за з'єднанням](https://simplex.chat/blog/20230204-simplex-chat-v4-5-user-chat-profiles.html#transport-isolation) (BETA). No comment provided by engineer. - - By using SimpleX Chat you agree to: -- send only legal content in public groups. -- respect other users – no spam. - Використовуючи SimpleX Chat, ви погоджуєтеся: -- надсилати лише легальний контент у публічних групах. -- поважати інших користувачів - без спаму. - No comment provided by engineer. - Call already ended! Дзвінок вже закінчився! @@ -2044,11 +2043,6 @@ chat toolbar Configure relays No comment provided by engineer. - - Configure server operators - Налаштувати операторів сервера - No comment provided by engineer. - Confirm Підтвердити @@ -2665,11 +2659,6 @@ This is your own one-time link! Доставка налагодження No comment provided by engineer. - - Decentralized - Децентралізований - No comment provided by engineer. - Decode link relay test step @@ -3517,6 +3506,10 @@ chat item action Введіть пароль вище, щоб показати! No comment provided by engineer. + + Enter profile name... + No comment provided by engineer. + Enter relay name… No comment provided by engineer. @@ -4415,6 +4408,10 @@ Error: %2$@ Отримуйте сповіщення, коли вас згадують. No comment provided by engineer. + + Get started + No comment provided by engineer. + Good afternoon! Доброго дня! @@ -4687,11 +4684,6 @@ Error: %2$@ Негайно No comment provided by engineer. - - Immune to spam - Імунітет до спаму та зловживань - No comment provided by engineer. - Import Імпорт @@ -5577,16 +5569,15 @@ This is your link for group %@! Повідомлення, файли та дзвінки захищені **квантово-стійким шифруванням e2e** з ідеальною секретністю переадресації, відмовою та відновленням після злому. No comment provided by engineer. + + Migrate + No comment provided by engineer. + Migrate device Перенести пристрій No comment provided by engineer. - - Migrate from another device - Перехід з іншого пристрою - No comment provided by engineer. - Migrate here Мігруйте сюди @@ -5702,6 +5693,11 @@ This is your link for group %@! Ім'я swipe action + + Network +commitments + No comment provided by engineer. + Network & servers Мережа та сервери @@ -5736,6 +5732,11 @@ This is your link for group %@! Мережевий оператор No comment provided by engineer. + + Network routers cannot know +who talks to whom + No comment provided by engineer. + Network settings Налаштування мережі @@ -5854,6 +5855,11 @@ This is your link for group %@! Ні No comment provided by engineer. + + No account. No phone. No email. No ID. +The most secure encryption. + No comment provided by engineer. + No active relays No comment provided by engineer. @@ -6016,15 +6022,18 @@ This is your link for group %@! Немає непрочитаних чатів No comment provided by engineer. - - No user identifiers. - Ніяких ідентифікаторів користувачів. + + Nobody tracked your conversations. No one drew a map of where you'd been. Privacy was never a feature - it was the way of life. No comment provided by engineer. Non-profit governance No comment provided by engineer. + + Not a better lock on someone else's door. Not a nicer landlord that respects your privacy, but still keeps the record of all visitors. You are not a guest. You are home. No king can enter it - you are sovereign. + No comment provided by engineer. + Not all relays connected alert title @@ -6105,6 +6114,10 @@ new chat action Стара база даних No comment provided by engineer. + + On your phone, not on any server. + No comment provided by engineer. + One-time invitation link Посилання на одноразове запрошення @@ -6345,6 +6358,13 @@ alert button Сервер оператора alert title + + Operators commit to: +- Be independent +- Minimize metadata usage +- Run verified open-source code + No comment provided by engineer. + Or import archive file Або імпортуйте архівний файл @@ -6668,18 +6688,12 @@ Error: %@ Політика конфіденційності та умови використання. No comment provided by engineer. - - Privacy redefined - Конфіденційність переглянута - No comment provided by engineer. - Privacy: for owners and subscribers. No comment provided by engineer. - - Private chats, groups and your contacts are not accessible to server operators. - Приватні чати, групи та ваші контакти недоступні для операторів сервера. + + Private and secure messaging. No comment provided by engineer. @@ -8071,6 +8085,14 @@ chat item action Налаштування були змінені. alert message + + Setup notifications + No comment provided by engineer. + + + Setup routers + No comment provided by engineer. + Shape profile images Сформуйте зображення профілю @@ -8837,9 +8859,9 @@ It can happen because of some bug or when the connection is compromised.Шифрування працює і нова угода про шифрування не потрібна. Це може призвести до помилок з'єднання! No comment provided by engineer. - - The future of messaging - Наступне покоління приватних повідомлень + + The first network where you own +your contacts and groups. No comment provided by engineer. @@ -8877,6 +8899,10 @@ It can happen because of some bug or when the connection is compromised.Стара база даних не була видалена під час міграції, її можна видалити. No comment provided by engineer. + + The oldest human freedom - to speak to another person without being watched - built on infrastructure that cannot betray it. + No comment provided by engineer. + The same conditions will apply to operator **%@**. Такі ж умови діятимуть і для оператора **%@**. @@ -8922,6 +8948,14 @@ It can happen because of some bug or when the connection is compromised.Теми No comment provided by engineer. + + Then we moved online, and every platform asked for a piece of you - your name, your number, your friends. We accepted that the price of talking to others is letting someone know who we talk to. Every generation, people and tech, had it this way - telephone, email, messengers, social media. It seemed the only way possible. + No comment provided by engineer. + + + There is another way. A network with no phone numbers. No usernames. No accounts. No user identities of any kind. A network that connects people and carries encrypted messages without knowing who is connected. + No comment provided by engineer. + These conditions will also apply for: **%@**. Ці умови також поширюються на: **%@**. @@ -9799,6 +9833,10 @@ To connect, please ask your contact to create another connection link and check Коли ви ділитеся з кимось своїм профілем інкогніто, цей профіль буде використовуватися для груп, до яких вас запрошують. No comment provided by engineer. + + Why SimpleX is built. + No comment provided by engineer. + WiFi WiFi @@ -10058,6 +10096,12 @@ Repeat join request? Ви не можете надсилати повідомлення! alert title + + You commit to: +- Only legal content in public groups +- Respect other users - no spam + No comment provided by engineer. + You connected to the channel via this relay link. No comment provided by engineer. @@ -10067,11 +10111,6 @@ Repeat join request? Вас не вдалося верифікувати, спробуйте ще раз. No comment provided by engineer. - - You decide who can connect. - Ви вирішуєте, хто може під'єднатися. - No comment provided by engineer. - You have already requested connection! Repeat connection request? @@ -10139,6 +10178,10 @@ Repeat connection request? Ви повинні отримувати сповіщення. token info + + You were born without an account + No comment provided by engineer. + You will be able to send messages **only after your request is accepted**. Ви зможете надсилати повідомлення **тільки після того, як ваш запит буде прийнято**. @@ -10277,6 +10320,10 @@ Repeat connection request? Ваші контакти залишаться на зв'язку. No comment provided by engineer. + + Your conversations belong to you, as it had always been before the Internet. The network is not a place you visit. It is a place you create and own. And nobody can take it from you, whether you make it private or public. + No comment provided by engineer. + Your credentials may be sent unencrypted. Ваші облікові дані можуть бути надіслані незашифрованими. @@ -10297,6 +10344,10 @@ Repeat connection request? Ваша група No comment provided by engineer. + + Your network + No comment provided by engineer. + Your preferences Ваші уподобання diff --git a/apps/ios/SimpleX Localizations/zh-Hans.xcloc/Localized Contents/zh-Hans.xliff b/apps/ios/SimpleX Localizations/zh-Hans.xcloc/Localized Contents/zh-Hans.xliff index 2d3342b15b..1b4771642e 100644 --- a/apps/ios/SimpleX Localizations/zh-Hans.xcloc/Localized Contents/zh-Hans.xliff +++ b/apps/ios/SimpleX Localizations/zh-Hans.xcloc/Localized Contents/zh-Hans.xliff @@ -1118,11 +1118,6 @@ swipe action 接听来电 No comment provided by engineer. - - Anybody can host servers. - 任何人都可以托管服务器。 - No comment provided by engineer. - App build: %@ 应用程序构建:%@ @@ -1328,6 +1323,21 @@ swipe action 错误消息散列 No comment provided by engineer. + + Be free +in your network + No comment provided by engineer. + + + Be free in your network. + 在你的网络中自由畅行。 + No comment provided by engineer. + + + Because we destroyed the power to know who you are. So that your power can never be taken. + 因为我们摧毁了知道你是谁的权力,因而您的权利永远不会被夺走。 + No comment provided by engineer. + Better calls 更佳的通话 @@ -1511,15 +1521,6 @@ swipe action 通过聊天资料(默认)或者[通过连接](https://simplex.chat/blog/20230204-simplex-chat-v4-5-user-chat-profiles.html#transport-isolation) (BETA)。 No comment provided by engineer. - - By using SimpleX Chat you agree to: -- send only legal content in public groups. -- respect other users – no spam. - 使用 SimpleX Chat 代表您同意: -- 在公开群中只发送合法内容 -- 尊重其他用户 – 没有垃圾信息。 - No comment provided by engineer. - Call already ended! 通话已结束! @@ -2050,11 +2051,6 @@ chat toolbar Configure relays No comment provided by engineer. - - Configure server operators - 配置服务器运营方 - No comment provided by engineer. - Confirm 确认 @@ -2671,11 +2667,6 @@ This is your own one-time link! 调试交付 No comment provided by engineer. - - Decentralized - 分散式 - No comment provided by engineer. - Decode link relay test step @@ -3525,6 +3516,10 @@ chat item action 在上面输入密码以显示! No comment provided by engineer. + + Enter profile name... + No comment provided by engineer. + Enter relay name… No comment provided by engineer. @@ -4430,6 +4425,10 @@ Error: %2$@ 被提及时收到通知。 No comment provided by engineer. + + Get started + No comment provided by engineer. + Good afternoon! 下午好! @@ -4703,11 +4702,6 @@ Error: %2$@ 立即 No comment provided by engineer. - - Immune to spam - 不受垃圾和骚扰消息影响 - No comment provided by engineer. - Import 导入 @@ -5597,16 +5591,15 @@ This is your link for group %@! 消息、文件和通话受到 **抗量子 e2e 加密** 的保护,具有完全正向保密、否认和闯入恢复。 No comment provided by engineer. + + Migrate + No comment provided by engineer. + Migrate device 迁移设备 No comment provided by engineer. - - Migrate from another device - 从另一台设备迁移 - No comment provided by engineer. - Migrate here 迁移到此处 @@ -5722,6 +5715,11 @@ This is your link for group %@! 名称 swipe action + + Network +commitments + No comment provided by engineer. + Network & servers 网络和服务器 @@ -5756,6 +5754,11 @@ This is your link for group %@! 网络运营方 No comment provided by engineer. + + Network routers cannot know +who talks to whom + No comment provided by engineer. + Network settings 网络设置 @@ -5874,6 +5877,11 @@ This is your link for group %@! No comment provided by engineer. + + No account. No phone. No email. No ID. +The most secure encryption. + No comment provided by engineer. + No active relays No comment provided by engineer. @@ -6036,15 +6044,20 @@ This is your link for group %@! 没有未读聊天 No comment provided by engineer. - - No user identifiers. - 没有用户标识符。 + + Nobody tracked your conversations. No one drew a map of where you'd been. Privacy was never a feature - it was the way of life. + 没有人追踪你的谈话内容。没有人绘制你去过的地方的地图。隐私从来都不是一项功能--而是一种生活方式。 No comment provided by engineer. Non-profit governance No comment provided by engineer. + + Not a better lock on someone else's door. Not a nicer landlord that respects your privacy, but still keeps the record of all visitors. You are not a guest. You are home. No king can enter it - you are sovereign. + 别人家的门锁再好也比不上这里。房东再好也比不上这里,他既尊重你的隐私,又保留着所有访客的记录。你不是客人,你是家。没有国王能闯入--你是主人。 + No comment provided by engineer. + Not all relays connected alert title @@ -6125,6 +6138,10 @@ new chat action 旧的数据库 No comment provided by engineer. + + On your phone, not on any server. + No comment provided by engineer. + One-time invitation link 一次性邀请链接 @@ -6370,6 +6387,13 @@ alert button 运营方服务器 alert title + + Operators commit to: +- Be independent +- Minimize metadata usage +- Run verified open-source code + No comment provided by engineer. + Or import archive file 或者导入或者导入压缩文件 @@ -6693,18 +6717,12 @@ Error: %@ 隐私政策和使用条款。 No comment provided by engineer. - - Privacy redefined - 重新定义隐私 - No comment provided by engineer. - Privacy: for owners and subscribers. No comment provided by engineer. - - Private chats, groups and your contacts are not accessible to server operators. - 服务器运营方无法访问私密聊天、群组和你的联系人。 + + Private and secure messaging. No comment provided by engineer. @@ -8101,6 +8119,14 @@ chat item action 设置已修改。 alert message + + Setup notifications + No comment provided by engineer. + + + Setup routers + No comment provided by engineer. + Shape profile images 改变个人资料图形状 @@ -8867,9 +8893,9 @@ It can happen because of some bug or when the connection is compromised.加密正在运行,不需要新的加密协议。这可能会导致连接错误! No comment provided by engineer. - - The future of messaging - 下一代私密通讯软件 + + The first network where you own +your contacts and groups. No comment provided by engineer. @@ -8907,6 +8933,11 @@ It can happen because of some bug or when the connection is compromised.旧数据库在迁移过程中没有被移除,可以删除。 No comment provided by engineer. + + The oldest human freedom - to speak to another person without being watched - built on infrastructure that cannot betray it. + 人类最古老的自由--与他人交谈而不被监视--建立在不会背叛它的基础设施之上。 + No comment provided by engineer. + The same conditions will apply to operator **%@**. No comment provided by engineer. @@ -8950,6 +8981,16 @@ It can happen because of some bug or when the connection is compromised.主题 No comment provided by engineer. + + Then we moved online, and every platform asked for a piece of you - your name, your number, your friends. We accepted that the price of talking to others is letting someone know who we talk to. Every generation, people and tech, had it this way - telephone, email, messengers, social media. It seemed the only way possible. + 然后我们转向线上,每个平台都要求你提供一些信息--你的姓名、电话号码、好友列表。我们接受了这样一个事实:与人交流的代价就是让别人知道我们在和谁交流。每一代人,每一代科技,都遵循着这样的模式--电话、电子邮件、即时通讯、社交媒体。这似乎是唯一可行的方式。 + No comment provided by engineer. + + + There is another way. A network with no phone numbers. No usernames. No accounts. No user identities of any kind. A network that connects people and carries encrypted messages without knowing who is connected. + 还有另一种方法。一个没有电话号码、没有用户名、没有账户、没有任何用户身份的网络。一个连接人们并传输加密信息的网络,而无需知道谁连接了。 + No comment provided by engineer. + These conditions will also apply for: **%@**. 这些条件将同样适用于: **%@**。 @@ -9830,6 +9871,10 @@ To connect, please ask your contact to create another connection link and check 当您与某人共享隐身聊天资料时,该资料将用于他们邀请您加入的群组。 No comment provided by engineer. + + Why SimpleX is built. + No comment provided by engineer. + WiFi WiFi @@ -10091,6 +10136,12 @@ Repeat join request? 您无法发送消息! alert title + + You commit to: +- Only legal content in public groups +- Respect other users - no spam + No comment provided by engineer. + You connected to the channel via this relay link. No comment provided by engineer. @@ -10100,11 +10151,6 @@ Repeat join request? 您的身份无法验证,请再试一次。 No comment provided by engineer. - - You decide who can connect. - 你决定谁可以连接。 - No comment provided by engineer. - You have already requested connection! Repeat connection request? @@ -10171,6 +10217,11 @@ Repeat connection request? You should receive notifications. token info + + You were born without an account + 你生来就没有账户。 + No comment provided by engineer. + You will be able to send messages **only after your request is accepted**. **只有在你的请求被接受后**你才能发送消息。 @@ -10307,6 +10358,11 @@ Repeat connection request? 与您的联系人保持连接。 No comment provided by engineer. + + Your conversations belong to you, as it had always been before the Internet. The network is not a place you visit. It is a place you create and own. And nobody can take it from you, whether you make it private or public. + 你的对话内容始终属于你,就像互联网出现之前一样。网络不是一个你访问的地方,而是一个你创建并拥有的地方。无论你将其设为私密还是公开,任何人都无法将其夺走。 + No comment provided by engineer. + Your credentials may be sent unencrypted. 你的凭据可能以未经加密的方式被发送。 @@ -10327,6 +10383,10 @@ Repeat connection request? 你的群 No comment provided by engineer. + + Your network + No comment provided by engineer. + Your preferences 您的偏好设置 diff --git a/apps/ios/SimpleX.xcodeproj/project.pbxproj b/apps/ios/SimpleX.xcodeproj/project.pbxproj index 0de696d430..3c62d4e3c4 100644 --- a/apps/ios/SimpleX.xcodeproj/project.pbxproj +++ b/apps/ios/SimpleX.xcodeproj/project.pbxproj @@ -249,6 +249,7 @@ D7F0E33929964E7E0068AF69 /* LZString in Frameworks */ = {isa = PBXBuildFile; productRef = D7F0E33829964E7E0068AF69 /* LZString */; }; E51CC1E62C62085600DB91FE /* OneHandUICard.swift in Sources */ = {isa = PBXBuildFile; fileRef = E51CC1E52C62085600DB91FE /* OneHandUICard.swift */; }; E559A0A12E3F77EE00B26F74 /* CommandsMenuView.swift in Sources */ = {isa = PBXBuildFile; fileRef = E559A0A02E3F77EE00B26F74 /* CommandsMenuView.swift */; }; + E5A0B0012F960000AAAA0001 /* YourNetwork.swift in Sources */ = {isa = PBXBuildFile; fileRef = E5A0B0022F960000AAAA0001 /* YourNetwork.swift */; }; E5AEC0AB2F91A6EB00270665 /* CIChatLinkHeader.swift in Sources */ = {isa = PBXBuildFile; fileRef = E5AEC0AA2F91A6EA00270665 /* CIChatLinkHeader.swift */; }; E5AEC0AF2F91A73500270665 /* ComposeChatLinkView.swift in Sources */ = {isa = PBXBuildFile; fileRef = E5AEC0AE2F91A73500270665 /* ComposeChatLinkView.swift */; }; E5C0BBE82F82B45500EA7527 /* SimpleXAssets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = E5C0BBE72F82B45500EA7527 /* SimpleXAssets.xcassets */; }; @@ -621,6 +622,7 @@ D7AA2C3429A936B400737B40 /* MediaEncryption.playground */ = {isa = PBXFileReference; lastKnownFileType = file.playground; name = MediaEncryption.playground; path = Shared/MediaEncryption.playground; sourceTree = SOURCE_ROOT; xcLanguageSpecificationIdentifier = xcode.lang.swift; }; E51CC1E52C62085600DB91FE /* OneHandUICard.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = OneHandUICard.swift; sourceTree = ""; }; E559A0A02E3F77EE00B26F74 /* CommandsMenuView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CommandsMenuView.swift; sourceTree = ""; }; + E5A0B0022F960000AAAA0001 /* YourNetwork.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = YourNetwork.swift; sourceTree = ""; }; E5AEC0AA2F91A6EA00270665 /* CIChatLinkHeader.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CIChatLinkHeader.swift; sourceTree = ""; }; E5AEC0AE2F91A73500270665 /* ComposeChatLinkView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ComposeChatLinkView.swift; sourceTree = ""; }; E5C0BBE72F82B45500EA7527 /* SimpleXAssets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = SimpleXAssets.xcassets; sourceTree = ""; }; @@ -957,6 +959,7 @@ 5C9A5BDA2871E05400A5B906 /* SetNotificationsMode.swift */, 5CBD285B29575B8E00EC2CF4 /* WhatsNewView.swift */, 640743602CD360E600158442 /* ChooseServerOperators.swift */, + E5A0B0022F960000AAAA0001 /* YourNetwork.swift */, E5DBF1922F88169800E1D7FD /* ConnectBannerCard.swift */, ); path = Onboarding; @@ -1509,6 +1512,7 @@ 640417CE2B29B8C200CCB412 /* NewChatView.swift in Sources */, 6440CA03288AECA70062C672 /* AddGroupMembersView.swift in Sources */, 640743612CD360E600158442 /* ChooseServerOperators.swift in Sources */, + E5A0B0012F960000AAAA0001 /* YourNetwork.swift in Sources */, 64A779FE2DC3AFF200FDEF2F /* MemberSupportChatToolbar.swift in Sources */, 5C3F1D58284363C400EC8A82 /* PrivacySettings.swift in Sources */, E5E418012F83D2CA00252B9E /* OnboardingCards.swift in Sources */, diff --git a/apps/ios/bg.lproj/Localizable.strings b/apps/ios/bg.lproj/Localizable.strings index f0838bf9df..0391a3ebca 100644 --- a/apps/ios/bg.lproj/Localizable.strings +++ b/apps/ios/bg.lproj/Localizable.strings @@ -626,9 +626,6 @@ swipe action */ /* No comment provided by engineer. */ "Answer call" = "Отговор на повикване"; -/* No comment provided by engineer. */ -"Anybody can host servers." = "Протокол и код с отворен код – всеки може да оперира собствени сървъри."; - /* No comment provided by engineer. */ "App build: %@" = "Компилация на приложението: %@"; @@ -879,9 +876,6 @@ marked deleted chat item preview text */ /* No comment provided by engineer. */ "By chat profile (default) or [by connection](https://simplex.chat/blog/20230204-simplex-chat-v4-5-user-chat-profiles.html#transport-isolation) (BETA)." = "Чрез чат профил (по подразбиране) или [чрез връзка](https://simplex.chat/blog/20230204-simplex-chat-v4-5-user-chat-profiles.html#transport-isolation) (БЕТА)."; -/* No comment provided by engineer. */ -"By using SimpleX Chat you agree to:\n- send only legal content in public groups.\n- respect other users – no spam." = "С използването на SimpleX Chat вие се съгласявате със:\n- изпращане само на легално съдържание в публични групи.\n- уважение към другите потребители – без спам."; - /* No comment provided by engineer. */ "Call already ended!" = "Разговорът вече приключи!"; @@ -1059,7 +1053,8 @@ set passcode view */ /* No comment provided by engineer. */ "Chat will be deleted for you - this cannot be undone!" = "Чатът ще бъде изтрит за вас - това не може да бъде отменено!"; -/* chat toolbar */ +/* chat feature +chat toolbar */ "Chat with admins" = "Чат с администраторите"; /* No comment provided by engineer. */ @@ -1173,9 +1168,6 @@ set passcode view */ /* No comment provided by engineer. */ "Configure ICE servers" = "Конфигурирай ICE сървъри"; -/* No comment provided by engineer. */ -"Configure server operators" = "Конфигуриране на сървърни оператори"; - /* No comment provided by engineer. */ "Confirm" = "Потвърди"; @@ -1513,9 +1505,6 @@ server test step */ /* time unit */ "days" = "дни"; -/* No comment provided by engineer. */ -"Decentralized" = "Децентрализиран"; - /* message decrypt error item */ "Decryption error" = "Грешка при декриптиране"; @@ -2405,9 +2394,6 @@ server test error */ /* No comment provided by engineer. */ "Immediately" = "Веднага"; -/* No comment provided by engineer. */ -"Immune to spam" = "Защитен от спам и злоупотреби"; - /* No comment provided by engineer. */ "Import" = "Импортиране"; @@ -2816,9 +2802,6 @@ server test error */ /* No comment provided by engineer. */ "Migrate device" = "Мигрирай устройството"; -/* No comment provided by engineer. */ -"Migrate from another device" = "Мигриране от друго устройство"; - /* No comment provided by engineer. */ "Migrate here" = "Мигрирай тук"; @@ -2993,9 +2976,6 @@ server test error */ /* copied message info in history */ "no text" = "няма текст"; -/* No comment provided by engineer. */ -"No user identifiers." = "Първата платформа без никакви потребителски идентификатори – поверителна по дизайн."; - /* No comment provided by engineer. */ "Not compatible!" = "Несъвместим!"; @@ -3242,9 +3222,6 @@ alert button */ /* No comment provided by engineer. */ "Privacy & security" = "Поверителност и сигурност"; -/* No comment provided by engineer. */ -"Privacy redefined" = "Поверителността преосмислена"; - /* No comment provided by engineer. */ "Private filenames" = "Поверителни имена на файлове"; @@ -4000,9 +3977,6 @@ server test failure */ /* No comment provided by engineer. */ "The encryption is working and the new encryption agreement is not required. It may result in connection errors!" = "Криптирането работи и новото споразумение за криптиране не е необходимо. Това може да доведе до грешки при свързване!"; -/* No comment provided by engineer. */ -"The future of messaging" = "Ново поколение поверителни съобщения"; - /* No comment provided by engineer. */ "The hash of the previous message is different." = "Хешът на предишното съобщение е различен."; @@ -4537,9 +4511,6 @@ server test failure */ /* No comment provided by engineer. */ "You could not be verified; please try again." = "Не можахте да бъдете потвърдени; Моля, опитайте отново."; -/* No comment provided by engineer. */ -"You decide who can connect." = "Хората могат да се свържат с вас само чрез ликовете, които споделяте."; - /* new chat sheet title */ "You have already requested connection!\nRepeat connection request?" = "Вече сте направили заявката за връзка!\nИзпрати отново заявката за свързване?"; diff --git a/apps/ios/cs.lproj/Localizable.strings b/apps/ios/cs.lproj/Localizable.strings index e63d3c0cc9..7c970a63d0 100644 --- a/apps/ios/cs.lproj/Localizable.strings +++ b/apps/ios/cs.lproj/Localizable.strings @@ -572,9 +572,6 @@ swipe action */ /* No comment provided by engineer. */ "Answer call" = "Přijmout hovor"; -/* No comment provided by engineer. */ -"Anybody can host servers." = "Servery může provozovat kdokoli."; - /* No comment provided by engineer. */ "App build: %@" = "Sestavení aplikace: %@"; @@ -674,6 +671,12 @@ swipe action */ /* No comment provided by engineer. */ "Bad message ID" = "Špatné ID zprávy"; +/* No comment provided by engineer. */ +"Be free in your network." = "Buďte svobodní ve své síti."; + +/* No comment provided by engineer. */ +"Because we destroyed the power to know who you are. So that your power can never be taken." = "Protože jsme zničili sílu vědět, kdo jste. Aby vám vaši moc nikdo nemohl vzít."; + /* No comment provided by engineer. */ "Better calls" = "Lepší volání"; @@ -1170,9 +1173,6 @@ server test step */ /* time unit */ "days" = "dní"; -/* No comment provided by engineer. */ -"Decentralized" = "Decentralizované"; - /* message decrypt error item */ "Decryption error" = "Chyba dešifrování"; @@ -1917,9 +1917,6 @@ server test error */ /* No comment provided by engineer. */ "Immediately" = "Ihned"; -/* No comment provided by engineer. */ -"Immune to spam" = "Odolná vůči spamu a zneužití"; - /* No comment provided by engineer. */ "Import" = "Import"; @@ -2386,7 +2383,10 @@ server test error */ "no text" = "žádný text"; /* No comment provided by engineer. */ -"No user identifiers." = "Bez uživatelských identifikátorů."; +"Nobody tracked your conversations. No one drew a map of where you'd been. Privacy was never a feature - it was the way of life." = "Nikdo nesledoval vaše konverzace. Nikdo nevytvořil mapu, kde jste byli. Soukromí nikdy nebylo funkcí - byl to způsob života."; + +/* No comment provided by engineer. */ +"Not a better lock on someone else's door. Not a nicer landlord that respects your privacy, but still keeps the record of all visitors. You are not a guest. You are home. No king can enter it - you are sovereign." = "Nejde o to mít lepší zámek na dveřích někoho jiného. Ani o to mít nájemce, který respektuje vaše soukromí, ale vede evidenci všech vašich návštěvníků. Nejste host. Jste doma. Ani král k vám nemůže vstoupit - jste suverén."; /* No comment provided by engineer. */ "Notifications" = "Oznámení"; @@ -2583,9 +2583,6 @@ alert button */ /* No comment provided by engineer. */ "Privacy & security" = "Ochrana osobních údajů a zabezpečení"; -/* No comment provided by engineer. */ -"Privacy redefined" = "Nové vymezení soukromí"; - /* No comment provided by engineer. */ "Private filenames" = "Soukromé názvy souborů"; @@ -3212,9 +3209,6 @@ server test failure */ /* No comment provided by engineer. */ "The encryption is working and the new encryption agreement is not required. It may result in connection errors!" = "Šifrování funguje a nové povolení šifrování není vyžadováno. To může vyvolat chybu v připojení!"; -/* No comment provided by engineer. */ -"The future of messaging" = "Nová generace soukromých zpráv"; - /* No comment provided by engineer. */ "The hash of the previous message is different." = "Hash předchozí zprávy se liší."; @@ -3230,6 +3224,9 @@ server test failure */ /* No comment provided by engineer. */ "The old database was not removed during the migration, it can be deleted." = "Stará databáze nebyla během přenášení odstraněna, lze ji smazat."; +/* No comment provided by engineer. */ +"The oldest human freedom - to speak to another person without being watched - built on infrastructure that cannot betray it." = "Nejstarší lidská svoboda - mluvit s druhým člověkem, aniž by byl sledován - postavena na infrastruktuře, která ji nemůže zradit."; + /* No comment provided by engineer. */ "The second tick we missed! ✅" = "Druhé zaškrtnutí jsme přehlédli! ✅"; @@ -3239,6 +3236,12 @@ server test failure */ /* No comment provided by engineer. */ "The servers for new connections of your current chat profile **%@**." = "Servery pro nová připojení vašeho aktuálního profilu chatu **%@**."; +/* No comment provided by engineer. */ +"Then we moved online, and every platform asked for a piece of you - your name, your number, your friends. We accepted that the price of talking to others is letting someone know who we talk to. Every generation, people and tech, had it this way - telephone, email, messengers, social media. It seemed the only way possible." = "Pak jsme se přesunuli na internet a každá platforma chtěla o vás něco vědět - vaše jméno, vaše číslo, vaše přátele. Smířili jsme se s tím, že cenou za komunikaci s ostatními je dát někomu vědět, s kým mluvíme. Každá generace, lidská i technická, to tak měla - telefon, e-mail, komunikátory, sociální sítě. Zdálo se, že je to jediný možný způsob."; + +/* No comment provided by engineer. */ +"There is another way. A network with no phone numbers. No usernames. No accounts. No user identities of any kind. A network that connects people and carries encrypted messages without knowing who is connected." = "Existuje i jiný způsob. Síť bez telefonních čísel. Bez uživatelských jmen. Bez účtů. Bez jakékoli uživatelské identity. Síť, která spojuje lidi a přenáší šifrované zprávy, aniž by bylo známo, kdo je připojen."; + /* No comment provided by engineer. */ "These settings are for your current profile **%@**." = "Toto nastavení je pro váš aktuální profil **%@**."; @@ -3590,9 +3593,6 @@ server test failure */ /* No comment provided by engineer. */ "You could not be verified; please try again." = "Nemohli jste být ověřeni; Zkuste to prosím znovu."; -/* No comment provided by engineer. */ -"You decide who can connect." = "Lidé se s vámi mohou spojit pouze prostřednictvím odkazu, který sdílíte."; - /* No comment provided by engineer. */ "You have to enter passphrase every time the app starts - it is not stored on the device." = "Musíte zadat přístupovou frázi při každém spuštění aplikace - není uložena v zařízení."; @@ -3629,6 +3629,9 @@ server test failure */ /* chat list item description */ "you shared one-time link incognito" = "sdíleli jste jednorázový odkaz inkognito"; +/* No comment provided by engineer. */ +"You were born without an account" = "Narodili jste se bez účtu."; + /* No comment provided by engineer. */ "You will be connected to group when the group host's device is online, please wait or check later!" = "Ke skupině budete připojeni, až bude zařízení hostitele skupiny online, vyčkejte prosím nebo se podívejte později!"; @@ -3680,6 +3683,9 @@ server test failure */ /* No comment provided by engineer. */ "Your contacts will remain connected." = "Vaše kontakty zůstanou připojeny."; +/* No comment provided by engineer. */ +"Your conversations belong to you, as it had always been before the Internet. The network is not a place you visit. It is a place you create and own. And nobody can take it from you, whether you make it private or public." = "Vaše konverzace patří vám, jako tomu bylo vždy před internetem. Síť není místo, které navštěvujete. Je to místo, které vytváříte a vlastníte. A nikdo vám ho nemůže vzít, ať už je soukromé, nebo veřejné."; + /* No comment provided by engineer. */ "Your current chat database will be DELETED and REPLACED with the imported one." = "Vaše aktuální chat databáze bude ODSTRANĚNA a NAHRAZENA importovanou."; diff --git a/apps/ios/de.lproj/Localizable.strings b/apps/ios/de.lproj/Localizable.strings index 739f2e7721..747562f0fc 100644 --- a/apps/ios/de.lproj/Localizable.strings +++ b/apps/ios/de.lproj/Localizable.strings @@ -676,9 +676,6 @@ swipe action */ /* No comment provided by engineer. */ "Answer call" = "Anruf annehmen"; -/* No comment provided by engineer. */ -"Anybody can host servers." = "Jeder kann seine eigenen Server aufsetzen."; - /* No comment provided by engineer. */ "App build: %@" = "App Build: %@"; @@ -820,6 +817,12 @@ swipe action */ /* No comment provided by engineer. */ "Bad message ID" = "Falsche Nachrichten-ID"; +/* No comment provided by engineer. */ +"Be free in your network." = "Genießen Sie die Freiheit in Ihrem Netzwerk."; + +/* No comment provided by engineer. */ +"Because we destroyed the power to know who you are. So that your power can never be taken." = "Weil wir die Macht zerstört haben, zu wissen, wer Sie sind. Damit Ihnen Ihre Macht niemals genommen werden kann."; + /* No comment provided by engineer. */ "Better calls" = "Verbesserte Anrufe"; @@ -944,9 +947,6 @@ marked deleted chat item preview text */ /* No comment provided by engineer. */ "By chat profile (default) or [by connection](https://simplex.chat/blog/20230204-simplex-chat-v4-5-user-chat-profiles.html#transport-isolation) (BETA)." = "Per Chat-Profil (Voreinstellung) oder [per Verbindung](https://simplex.chat/blog/20230204-simplex-chat-v4-5-user-chat-profiles.html#transport-isolation) (BETA)."; -/* No comment provided by engineer. */ -"By using SimpleX Chat you agree to:\n- send only legal content in public groups.\n- respect other users – no spam." = "Durch die Nutzung von SimpleX Chat erklären Sie sich damit einverstanden:\n- nur legale Inhalte in öffentlichen Gruppen zu versenden.\n- andere Nutzer zu respektieren - kein Spam."; - /* No comment provided by engineer. */ "call" = "Anrufen"; @@ -1181,7 +1181,8 @@ set passcode view */ /* No comment provided by engineer. */ "Chat will be deleted for you - this cannot be undone!" = "Der Chat wird für Sie gelöscht. Dies kann nicht rückgängig gemacht werden!"; -/* chat toolbar */ +/* chat feature +chat toolbar */ "Chat with admins" = "Chat mit Administratoren"; /* No comment provided by engineer. */ @@ -1304,9 +1305,6 @@ set passcode view */ /* No comment provided by engineer. */ "Configure relays" = "Relais konfigurieren"; -/* No comment provided by engineer. */ -"Configure server operators" = "Server-Betreiber konfigurieren"; - /* No comment provided by engineer. */ "Confirm" = "Bestätigen"; @@ -1728,9 +1726,6 @@ server test step */ /* No comment provided by engineer. */ "Debug delivery" = "Debugging-Zustellung"; -/* No comment provided by engineer. */ -"Decentralized" = "Dezentral"; - /* relay test step */ "Decode link" = "Link dekodieren"; @@ -3051,9 +3046,6 @@ servers warning */ /* No comment provided by engineer. */ "Immediately" = "Sofort"; -/* No comment provided by engineer. */ -"Immune to spam" = "Immun gegen Spam und Missbrauch"; - /* No comment provided by engineer. */ "Import" = "Importieren"; @@ -3654,9 +3646,6 @@ servers warning */ /* No comment provided by engineer. */ "Migrate device" = "Gerät migrieren"; -/* No comment provided by engineer. */ -"Migrate from another device" = "Von einem anderen Gerät migrieren"; - /* No comment provided by engineer. */ "Migrate here" = "Hierher migrieren"; @@ -3949,7 +3938,10 @@ servers warning */ "No unread chats" = "Keine ungelesenen Chats"; /* No comment provided by engineer. */ -"No user identifiers." = "Keine Benutzerkennungen."; +"Nobody tracked your conversations. No one drew a map of where you'd been. Privacy was never a feature - it was the way of life." = "Niemand verfolgte Ihre Gespräche. Niemand erstellte eine Karte, wo Sie sich aufgehalten haben. Privatsphäre war nie ein Feature - sie war selbstverständlich."; + +/* No comment provided by engineer. */ +"Not a better lock on someone else's door. Not a nicer landlord that respects your privacy, but still keeps the record of all visitors. You are not a guest. You are home. No king can enter it - you are sovereign." = "Nicht ein besseres Schloss an der Tür eines Anderen. Kein freundlicher Vermieter, der Ihre Privatsphäre respektiert, aber dennoch jeden Besucher registriert. Sie sind kein Gast. Sie sind zu Hause. Kein Vermieter, kein Fremder kann es betreten - Sie sind souverän."; /* alert title */ "Not all relays connected" = "Es sind nicht alle Relais verbunden"; @@ -4365,12 +4357,6 @@ alert button */ /* No comment provided by engineer. */ "Privacy policy and conditions of use." = "Datenschutz- und Nutzungsbedingungen."; -/* No comment provided by engineer. */ -"Privacy redefined" = "Datenschutz neu definiert"; - -/* No comment provided by engineer. */ -"Private chats, groups and your contacts are not accessible to server operators." = "Private Chats, Gruppen und Ihre Kontakte sind für Server-Betreiber nicht zugänglich."; - /* No comment provided by engineer. */ "Private filenames" = "Neutrale Dateinamen"; @@ -5739,9 +5725,6 @@ server test failure */ /* No comment provided by engineer. */ "The encryption is working and the new encryption agreement is not required. It may result in connection errors!" = "Die Verschlüsselung funktioniert und ein neues Verschlüsselungsabkommen ist nicht erforderlich. Es kann zu Verbindungsfehlern kommen!"; -/* No comment provided by engineer. */ -"The future of messaging" = "Die nächste Generation von privatem Messaging"; - /* No comment provided by engineer. */ "The hash of the previous message is different." = "Der Hash der vorherigen Nachricht unterscheidet sich."; @@ -5766,6 +5749,9 @@ server test failure */ /* No comment provided by engineer. */ "The old database was not removed during the migration, it can be deleted." = "Die alte Datenbank wurde während der Migration nicht entfernt. Sie kann gelöscht werden."; +/* No comment provided by engineer. */ +"The oldest human freedom - to speak to another person without being watched - built on infrastructure that cannot betray it." = "Die älteste Freiheit des Menschen - mit einem anderen Menschen sprechen zu können, ohne beobachtet zu werden - gestützt auf einer Infrastruktur, die Sie nicht verraten kann."; + /* No comment provided by engineer. */ "The same conditions will apply to operator **%@**." = "Dieselben Nutzungsbedingungen gelten auch für den Betreiber **%@**."; @@ -5793,6 +5779,12 @@ server test failure */ /* No comment provided by engineer. */ "Themes" = "Design"; +/* No comment provided by engineer. */ +"Then we moved online, and every platform asked for a piece of you - your name, your number, your friends. We accepted that the price of talking to others is letting someone know who we talk to. Every generation, people and tech, had it this way - telephone, email, messengers, social media. It seemed the only way possible." = "Dann sind wir online gegangen, und jede Plattform wollte Etwas von Ihnen - Ihren Namen, Ihre Nummer, Ihre Freunde. Wir akzeptierten, dass es der Preis mit Anderen zu kommunizieren ist, Jemandem preiszugeben, mit wem und wie wir miteinander kommunizieren. Jede Generation, Menschen und Technologien, kannten es nur so - Telefon, E-Mail, Messenger, soziale Medien. Es schien der einzig mögliche Weg zu sein."; + +/* No comment provided by engineer. */ +"There is another way. A network with no phone numbers. No usernames. No accounts. No user identities of any kind. A network that connects people and carries encrypted messages without knowing who is connected." = "Es gibt einen anderen Weg. Ein Netzwerk ohne Telefonnummern, ohne Benutzernamen, ohne Benutzerkennungen und ohne jegliche Benutzeridentität. Ein Netzwerk, welches Menschen verbindet und verschlüsselte Nachrichten überträgt, ohne zu wissen, wer mit wem verbunden ist."; + /* No comment provided by engineer. */ "These conditions will also apply for: **%@**." = "Diese Nutzungsbedingungen gelten auch für: **%@**."; @@ -6576,9 +6568,6 @@ server test failure */ /* No comment provided by engineer. */ "You could not be verified; please try again." = "Sie konnten nicht überprüft werden; bitte versuchen Sie es erneut."; -/* No comment provided by engineer. */ -"You decide who can connect." = "Sie entscheiden, wer sich mit Ihnen verbinden kann."; - /* new chat sheet title */ "You have already requested connection!\nRepeat connection request?" = "Sie haben bereits ein Verbindungsanfrage beantragt!\nVerbindungsanfrage wiederholen?"; @@ -6633,6 +6622,9 @@ server test failure */ /* snd group event chat item */ "you unblocked %@" = "Sie haben %@ freigegeben"; +/* No comment provided by engineer. */ +"You were born without an account" = "Sie wurden ohne eine Benutzerkennung geboren."; + /* No comment provided by engineer. */ "You will be able to send messages **only after your request is accepted**." = "Sie können erst dann Nachrichten versenden, **sobald Ihre Anfrage angenommen wurde**."; @@ -6714,6 +6706,9 @@ server test failure */ /* No comment provided by engineer. */ "Your contacts will remain connected." = "Ihre Kontakte bleiben weiterhin verbunden."; +/* No comment provided by engineer. */ +"Your conversations belong to you, as it had always been before the Internet. The network is not a place you visit. It is a place you create and own. And nobody can take it from you, whether you make it private or public." = "Ihre Kommunikation gehört Ihnen, so wie es immer war, bevor es das Internet gab. Das Netzwerk ist kein Ort, den Sie besuchen. Es ist ein Ort, den Sie erschaffen und besitzen und Niemand kann es Ihnen nehmen, egal ob Sie es privat oder öffentlich machen."; + /* No comment provided by engineer. */ "Your credentials may be sent unencrypted." = "Ihre Anmeldeinformationen können unverschlüsselt versendet werden."; diff --git a/apps/ios/es.lproj/Localizable.strings b/apps/ios/es.lproj/Localizable.strings index 865a9472ea..0c2353def6 100644 --- a/apps/ios/es.lproj/Localizable.strings +++ b/apps/ios/es.lproj/Localizable.strings @@ -676,9 +676,6 @@ swipe action */ /* No comment provided by engineer. */ "Answer call" = "Responder llamada"; -/* No comment provided by engineer. */ -"Anybody can host servers." = "Cualquiera puede alojar servidores."; - /* No comment provided by engineer. */ "App build: %@" = "Compilación app: %@"; @@ -820,6 +817,12 @@ swipe action */ /* No comment provided by engineer. */ "Bad message ID" = "ID de mensaje incorrecto"; +/* No comment provided by engineer. */ +"Be free in your network." = "Se libre en tu red."; + +/* No comment provided by engineer. */ +"Because we destroyed the power to know who you are. So that your power can never be taken." = "Porque hemos destruido el poder de saber quien eres. De manera que tu poder nunca se pueda arrebatar."; + /* No comment provided by engineer. */ "Better calls" = "Llamadas mejoradas"; @@ -944,9 +947,6 @@ marked deleted chat item preview text */ /* No comment provided by engineer. */ "By chat profile (default) or [by connection](https://simplex.chat/blog/20230204-simplex-chat-v4-5-user-chat-profiles.html#transport-isolation) (BETA)." = "Mediante perfil (predeterminado) o [por conexión](https://simplex.chat/blog/20230204-simplex-chat-v4-5-user-chat-profiles.html#transport-isolation) (BETA)."; -/* No comment provided by engineer. */ -"By using SimpleX Chat you agree to:\n- send only legal content in public groups.\n- respect other users – no spam." = "Al usar SimpleX Chat, aceptas:\n- enviar únicamente contenido legal en los grupos públicos.\n- respetar a los demás usuarios – spam prohibido."; - /* No comment provided by engineer. */ "call" = "llamada"; @@ -1181,7 +1181,8 @@ set passcode view */ /* No comment provided by engineer. */ "Chat will be deleted for you - this cannot be undone!" = "El chat será eliminado para tí. ¡No puede deshacerse!"; -/* chat toolbar */ +/* chat feature +chat toolbar */ "Chat with admins" = "Chatea con administradores"; /* No comment provided by engineer. */ @@ -1304,9 +1305,6 @@ set passcode view */ /* No comment provided by engineer. */ "Configure relays" = "Configurar servidores"; -/* No comment provided by engineer. */ -"Configure server operators" = "Configurar operadores de servidores"; - /* No comment provided by engineer. */ "Confirm" = "Confirmar"; @@ -1728,9 +1726,6 @@ server test step */ /* No comment provided by engineer. */ "Debug delivery" = "Informe debug"; -/* No comment provided by engineer. */ -"Decentralized" = "Descentralizada"; - /* relay test step */ "Decode link" = "Decodificar enlace"; @@ -3051,9 +3046,6 @@ servers warning */ /* No comment provided by engineer. */ "Immediately" = "Inmediatamente"; -/* No comment provided by engineer. */ -"Immune to spam" = "Inmune a spam y abuso"; - /* No comment provided by engineer. */ "Import" = "Importar"; @@ -3654,9 +3646,6 @@ servers warning */ /* No comment provided by engineer. */ "Migrate device" = "Migrar dispositivo"; -/* No comment provided by engineer. */ -"Migrate from another device" = "Migrar desde otro dispositivo"; - /* No comment provided by engineer. */ "Migrate here" = "Migrar aquí"; @@ -3949,7 +3938,10 @@ servers warning */ "No unread chats" = "Ningún chat sin leer"; /* No comment provided by engineer. */ -"No user identifiers." = "Sin identificadores de usuario."; +"Nobody tracked your conversations. No one drew a map of where you'd been. Privacy was never a feature - it was the way of life." = "Nadie monitorizaba tus conversaciones. Nadie registraba tus ubicaciones. La privacidad nunca fue un lujo, era la manera de vivir."; + +/* No comment provided by engineer. */ +"Not a better lock on someone else's door. Not a nicer landlord that respects your privacy, but still keeps the record of all visitors. You are not a guest. You are home. No king can enter it - you are sovereign." = "No un candado mejorado en la puerta de otro. No un terrateniente que respeta tu privacidad pero sigue guardando un registro de tus visitantes. Tu no eres el invitado. Estás en tu casa y ningún rey podrá entrar. Tu eres el soberano."; /* alert title */ "Not all relays connected" = "Hay servidores no conectados"; @@ -4365,12 +4357,6 @@ alert button */ /* No comment provided by engineer. */ "Privacy policy and conditions of use." = "Política de privacidad y condiciones de uso."; -/* No comment provided by engineer. */ -"Privacy redefined" = "Privacidad redefinida"; - -/* No comment provided by engineer. */ -"Private chats, groups and your contacts are not accessible to server operators." = "Los chats privados, los grupos y tus contactos no son accesibles para los operadores de servidores."; - /* No comment provided by engineer. */ "Private filenames" = "Nombres de archivos privados"; @@ -5739,9 +5725,6 @@ server test failure */ /* No comment provided by engineer. */ "The encryption is working and the new encryption agreement is not required. It may result in connection errors!" = "El cifrado funciona y un cifrado nuevo no es necesario. ¡Podría dar lugar a errores de conexión!"; -/* No comment provided by engineer. */ -"The future of messaging" = "La nueva generación de mensajería privada"; - /* No comment provided by engineer. */ "The hash of the previous message is different." = "El hash del mensaje anterior es diferente."; @@ -5766,6 +5749,9 @@ server test failure */ /* No comment provided by engineer. */ "The old database was not removed during the migration, it can be deleted." = "La base de datos antigua no se eliminó durante la migración, puede eliminarse."; +/* No comment provided by engineer. */ +"The oldest human freedom - to speak to another person without being watched - built on infrastructure that cannot betray it." = "La libertad más antigua del ser humano, la de hablar con otra persona sin ser observado, materializada sobre una infraestructura que no puede traicionarla."; + /* No comment provided by engineer. */ "The same conditions will apply to operator **%@**." = "Las mismas condiciones se aplicarán al operador **%@**."; @@ -5793,6 +5779,12 @@ server test failure */ /* No comment provided by engineer. */ "Themes" = "Temas"; +/* No comment provided by engineer. */ +"Then we moved online, and every platform asked for a piece of you - your name, your number, your friends. We accepted that the price of talking to others is letting someone know who we talk to. Every generation, people and tech, had it this way - telephone, email, messengers, social media. It seemed the only way possible." = "Después pasamos a internet y cada plataforma pedía una parte de tí: tu nombre, tu número, tus amistades. Aceptamos que el precio de hablar con los demás es informar a alguien de quién es interlocutor. Cada generación, personas y tecnología, ha funcionado así: teléfono, email, mensajería, redes sociales. Parecía el único camino."; + +/* No comment provided by engineer. */ +"There is another way. A network with no phone numbers. No usernames. No accounts. No user identities of any kind. A network that connects people and carries encrypted messages without knowing who is connected." = "Existe otro camino. Una red sin números de teléfono. Sin nombres de usuario. Sin cuentas. Sin identificadores de ningún tipo. Una red que conecta las personas y entrega mensajes cifrados sin saber quien está conectado."; + /* No comment provided by engineer. */ "These conditions will also apply for: **%@**." = "Estas condiciones también se aplican para: **%@**."; @@ -6576,9 +6568,6 @@ server test failure */ /* No comment provided by engineer. */ "You could not be verified; please try again." = "No has podido ser autenticado. Inténtalo de nuevo."; -/* No comment provided by engineer. */ -"You decide who can connect." = "Tu decides quién se conecta."; - /* new chat sheet title */ "You have already requested connection!\nRepeat connection request?" = "Ya has solicitado la conexión\n¿Repetir solicitud?"; @@ -6633,6 +6622,9 @@ server test failure */ /* snd group event chat item */ "you unblocked %@" = "has desbloqueado a %@"; +/* No comment provided by engineer. */ +"You were born without an account" = "Naciste sin una cuenta."; + /* No comment provided by engineer. */ "You will be able to send messages **only after your request is accepted**." = "Podrás enviar mensajes **después de que tu solicitud sea aceptada**."; @@ -6714,6 +6706,9 @@ server test failure */ /* No comment provided by engineer. */ "Your contacts will remain connected." = "Tus contactos permanecerán conectados."; +/* No comment provided by engineer. */ +"Your conversations belong to you, as it had always been before the Internet. The network is not a place you visit. It is a place you create and own. And nobody can take it from you, whether you make it private or public." = "Tus conversaciones te pertenecen, tal como ha sido siempre antes de la llegada de internet. Tu red no es un lugar que visitas. Es un lugar que has creado, te pertenece y nadie te la podrá quitar, ya sea pública o privada."; + /* No comment provided by engineer. */ "Your credentials may be sent unencrypted." = "Tus credenciales podrían ser enviadas sin cifrar."; diff --git a/apps/ios/fi.lproj/Localizable.strings b/apps/ios/fi.lproj/Localizable.strings index 4dfb01aae7..6ba1644d54 100644 --- a/apps/ios/fi.lproj/Localizable.strings +++ b/apps/ios/fi.lproj/Localizable.strings @@ -377,9 +377,6 @@ swipe action */ /* No comment provided by engineer. */ "Answer call" = "Vastaa puheluun"; -/* No comment provided by engineer. */ -"Anybody can host servers." = "Avoimen lähdekoodin protokolla ja koodi - kuka tahansa voi käyttää palvelimia."; - /* No comment provided by engineer. */ "App build: %@" = "Sovellusversio: %@"; @@ -852,9 +849,6 @@ server test step */ /* time unit */ "days" = "päivää"; -/* No comment provided by engineer. */ -"Decentralized" = "Hajautettu"; - /* message decrypt error item */ "Decryption error" = "Salauksen purkuvirhe"; @@ -1590,9 +1584,6 @@ server test error */ /* No comment provided by engineer. */ "Immediately" = "Heti"; -/* No comment provided by engineer. */ -"Immune to spam" = "Immuuni roskapostille ja väärinkäytöksille"; - /* No comment provided by engineer. */ "Import" = "Tuo"; @@ -2055,9 +2046,6 @@ server test error */ /* copied message info in history */ "no text" = "ei tekstiä"; -/* No comment provided by engineer. */ -"No user identifiers." = "Ensimmäinen alusta ilman käyttäjätunnisteita – suunniteltu yksityiseksi."; - /* No comment provided by engineer. */ "Notifications" = "Ilmoitukset"; @@ -2249,9 +2237,6 @@ new chat action */ /* No comment provided by engineer. */ "Privacy & security" = "Yksityisyys ja turvallisuus"; -/* No comment provided by engineer. */ -"Privacy redefined" = "Yksityisyys uudelleen määritettynä"; - /* No comment provided by engineer. */ "Private filenames" = "Yksityiset tiedostonimet"; @@ -2872,9 +2857,6 @@ server test failure */ /* No comment provided by engineer. */ "The encryption is working and the new encryption agreement is not required. It may result in connection errors!" = "Salaus toimii ja uutta salaussopimusta ei tarvita. Tämä voi johtaa yhteysvirheisiin!"; -/* No comment provided by engineer. */ -"The future of messaging" = "Seuraavan sukupolven yksityisviestit"; - /* No comment provided by engineer. */ "The hash of the previous message is different." = "Edellisen viestin tarkiste on erilainen."; @@ -3247,9 +3229,6 @@ server test failure */ /* No comment provided by engineer. */ "You could not be verified; please try again." = "Sinua ei voitu todentaa; yritä uudelleen."; -/* No comment provided by engineer. */ -"You decide who can connect." = "Kimin bağlanabileceğine siz karar verirsiniz."; - /* No comment provided by engineer. */ "You have to enter passphrase every time the app starts - it is not stored on the device." = "Sinun on annettava tunnuslause aina, kun sovellus käynnistyy - sitä ei tallenneta laitteeseen."; diff --git a/apps/ios/fr.lproj/Localizable.strings b/apps/ios/fr.lproj/Localizable.strings index 27140ac84c..4283dd349d 100644 --- a/apps/ios/fr.lproj/Localizable.strings +++ b/apps/ios/fr.lproj/Localizable.strings @@ -629,9 +629,6 @@ swipe action */ /* No comment provided by engineer. */ "Answer call" = "Répondre à l'appel"; -/* No comment provided by engineer. */ -"Anybody can host servers." = "N'importe qui peut heberger un serveur."; - /* No comment provided by engineer. */ "App build: %@" = "Build de l'app : %@"; @@ -867,9 +864,6 @@ marked deleted chat item preview text */ /* No comment provided by engineer. */ "By chat profile (default) or [by connection](https://simplex.chat/blog/20230204-simplex-chat-v4-5-user-chat-profiles.html#transport-isolation) (BETA)." = "Par profil de chat (par défaut) ou [par connexion](https://simplex.chat/blog/20230204-simplex-chat-v4-5-user-chat-profiles.html#transport-isolation) (BETA)."; -/* No comment provided by engineer. */ -"By using SimpleX Chat you agree to:\n- send only legal content in public groups.\n- respect other users – no spam." = "En utilisant SimpleX Chat, vous acceptez de :\n- n'envoyer que du contenu légal dans les groupes publics.\n- respecter les autres utilisateurs - pas de spam."; - /* No comment provided by engineer. */ "call" = "appeler"; @@ -1149,9 +1143,6 @@ set passcode view */ /* No comment provided by engineer. */ "Configure ICE servers" = "Configurer les serveurs ICE"; -/* No comment provided by engineer. */ -"Configure server operators" = "Configurer les opérateurs de serveur"; - /* No comment provided by engineer. */ "Confirm" = "Confirmer"; @@ -1540,9 +1531,6 @@ server test step */ /* No comment provided by engineer. */ "Debug delivery" = "Livraison de débogage"; -/* No comment provided by engineer. */ -"Decentralized" = "Décentralisé"; - /* message decrypt error item */ "Decryption error" = "Erreur de déchiffrement"; @@ -2715,9 +2703,6 @@ servers warning */ /* No comment provided by engineer. */ "Immediately" = "Immédiatement"; -/* No comment provided by engineer. */ -"Immune to spam" = "Protégé du spam et des abus"; - /* No comment provided by engineer. */ "Import" = "Importer"; @@ -3216,9 +3201,6 @@ servers warning */ /* No comment provided by engineer. */ "Migrate device" = "Transférer l'appareil"; -/* No comment provided by engineer. */ -"Migrate from another device" = "Transférer depuis un autre appareil"; - /* No comment provided by engineer. */ "Migrate here" = "Transférer ici"; @@ -3453,9 +3435,6 @@ servers warning */ /* copied message info in history */ "no text" = "aucun texte"; -/* No comment provided by engineer. */ -"No user identifiers." = "Aucun identifiant d'utilisateur."; - /* No comment provided by engineer. */ "Not compatible!" = "Non compatible !"; @@ -3771,9 +3750,6 @@ alert button */ /* No comment provided by engineer. */ "Privacy for your customers." = "Respect de la vie privée de vos clients."; -/* No comment provided by engineer. */ -"Privacy redefined" = "La vie privée redéfinie"; - /* No comment provided by engineer. */ "Private filenames" = "Noms de fichiers privés"; @@ -4835,9 +4811,6 @@ server test failure */ /* No comment provided by engineer. */ "The encryption is working and the new encryption agreement is not required. It may result in connection errors!" = "Le chiffrement fonctionne et le nouvel accord de chiffrement n'est pas nécessaire. Cela peut provoquer des erreurs de connexion !"; -/* No comment provided by engineer. */ -"The future of messaging" = "La nouvelle génération de messagerie privée"; - /* No comment provided by engineer. */ "The hash of the previous message is different." = "Le hash du message précédent est différent."; @@ -5546,9 +5519,6 @@ server test failure */ /* No comment provided by engineer. */ "You could not be verified; please try again." = "Vous n'avez pas pu être vérifié·e ; veuillez réessayer."; -/* No comment provided by engineer. */ -"You decide who can connect." = "Vous choisissez qui peut se connecter."; - /* new chat sheet title */ "You have already requested connection!\nRepeat connection request?" = "Vous avez déjà demandé une connexion !\nRépéter la demande de connexion ?"; diff --git a/apps/ios/hu.lproj/Localizable.strings b/apps/ios/hu.lproj/Localizable.strings index d8365a164f..4d3365fa68 100644 --- a/apps/ios/hu.lproj/Localizable.strings +++ b/apps/ios/hu.lproj/Localizable.strings @@ -676,9 +676,6 @@ swipe action */ /* No comment provided by engineer. */ "Answer call" = "Hívás fogadása"; -/* No comment provided by engineer. */ -"Anybody can host servers." = "Bárki üzemeltethet kiszolgálókat."; - /* No comment provided by engineer. */ "App build: %@" = "Alkalmazás összeállítási száma: %@"; @@ -820,6 +817,12 @@ swipe action */ /* No comment provided by engineer. */ "Bad message ID" = "Hibás az üzenet azonosítója"; +/* No comment provided by engineer. */ +"Be free in your network." = "Legyen szabad a saját hálózatában."; + +/* No comment provided by engineer. */ +"Because we destroyed the power to know who you are. So that your power can never be taken." = "Mert felszámoltuk a lehetőségét is annak, hogy megtudjuk, Ön kicsoda. Így az önrendelkezése soha nem kerülhet idegen kezekbe."; + /* No comment provided by engineer. */ "Better calls" = "Továbbfejlesztett hívásélmény"; @@ -944,9 +947,6 @@ marked deleted chat item preview text */ /* No comment provided by engineer. */ "By chat profile (default) or [by connection](https://simplex.chat/blog/20230204-simplex-chat-v4-5-user-chat-profiles.html#transport-isolation) (BETA)." = "A csevegési profillal (alapértelmezett), vagy a [kapcsolattal] (https://simplex.chat/blog/20230204-simplex-chat-v4-5-user-chat-profiles.html#transport-isolation) (BÉTA)."; -/* No comment provided by engineer. */ -"By using SimpleX Chat you agree to:\n- send only legal content in public groups.\n- respect other users – no spam." = "A SimpleX Chat használatával Ön elfogadja, hogy:\n- csak elfogadott tartalmakat tesz közzé a nyilvános csoportokban.\n- tiszteletben tartja a többi felhasználót, és nem küld kéretlen tartalmat senkinek."; - /* No comment provided by engineer. */ "call" = "hívás"; @@ -1181,7 +1181,8 @@ set passcode view */ /* No comment provided by engineer. */ "Chat will be deleted for you - this cannot be undone!" = "A csevegés törölve lesz az Ön számára – ez a művelet nem vonható vissza!"; -/* chat toolbar */ +/* chat feature +chat toolbar */ "Chat with admins" = "Csevegés az adminisztrátorokkal"; /* No comment provided by engineer. */ @@ -1304,9 +1305,6 @@ set passcode view */ /* No comment provided by engineer. */ "Configure relays" = "Átjátszók konfigurálása"; -/* No comment provided by engineer. */ -"Configure server operators" = "Kiszolgálóüzemeltetők beállítása"; - /* No comment provided by engineer. */ "Confirm" = "Megerősítés"; @@ -1728,9 +1726,6 @@ server test step */ /* No comment provided by engineer. */ "Debug delivery" = "Kézbesítési hibák felderítése"; -/* No comment provided by engineer. */ -"Decentralized" = "Decentralizált"; - /* relay test step */ "Decode link" = "Hivatkozás dekódolása"; @@ -3051,9 +3046,6 @@ servers warning */ /* No comment provided by engineer. */ "Immediately" = "Azonnal"; -/* No comment provided by engineer. */ -"Immune to spam" = "Védett a kéretlen tartalmakkal szemben"; - /* No comment provided by engineer. */ "Import" = "Importálás"; @@ -3654,9 +3646,6 @@ servers warning */ /* No comment provided by engineer. */ "Migrate device" = "Eszköz átköltöztetése"; -/* No comment provided by engineer. */ -"Migrate from another device" = "Átköltöztetés egy másik eszközről"; - /* No comment provided by engineer. */ "Migrate here" = "Átköltöztetés ide"; @@ -3949,7 +3938,10 @@ servers warning */ "No unread chats" = "Nincsenek olvasatlan csevegések"; /* No comment provided by engineer. */ -"No user identifiers." = "Nincsenek felhasználói azonosítók."; +"Nobody tracked your conversations. No one drew a map of where you'd been. Privacy was never a feature - it was the way of life." = "Senki sem követte nyomon a beszélgetéseinket. Senki sem készített térképet arról, hogy merre jártunk. A magánéletünk nem csak egy funkció volt, hanem az életmódunk."; + +/* No comment provided by engineer. */ +"Not a better lock on someone else's door. Not a nicer landlord that respects your privacy, but still keeps the record of all visitors. You are not a guest. You are home. No king can enter it - you are sovereign." = "Nem egy jobb zár mások ajtaján. Nem egy kedvesebb házmester, aki tiszteletben tartja az Ön magánéletét, de mégis nyilvántartást vezet minden látogatójáról. Ön itt nem csak egy vendég. Ön itt otthon van. Nincs az a hatalom, amely beléphetne ide - Ön itt szuverén."; /* alert title */ "Not all relays connected" = "Nem minden átjátszó kapcsolódott"; @@ -4365,12 +4357,6 @@ alert button */ /* No comment provided by engineer. */ "Privacy policy and conditions of use." = "Adatvédelmi szabályzat és felhasználási feltételek."; -/* No comment provided by engineer. */ -"Privacy redefined" = "Újraértelmezett adatvédelem"; - -/* No comment provided by engineer. */ -"Private chats, groups and your contacts are not accessible to server operators." = "A privát csevegések, a csoportok és a partnerek nem érhetők el a kiszolgálók üzemeltetői számára."; - /* No comment provided by engineer. */ "Private filenames" = "Privát fájlnevek"; @@ -5739,9 +5725,6 @@ server test failure */ /* No comment provided by engineer. */ "The encryption is working and the new encryption agreement is not required. It may result in connection errors!" = "A titkosítás működik, és új titkosítási egyezményre nincs szükség. Ez kapcsolati hibákat eredményezhet!"; -/* No comment provided by engineer. */ -"The future of messaging" = "Az üzenetváltás jövője"; - /* No comment provided by engineer. */ "The hash of the previous message is different." = "Az előző üzenet kivonata különbözik."; @@ -5766,6 +5749,9 @@ server test failure */ /* No comment provided by engineer. */ "The old database was not removed during the migration, it can be deleted." = "A régi adatbázis nem lett eltávolítva az átköltöztetéskor, ezért törölhető."; +/* No comment provided by engineer. */ +"The oldest human freedom - to speak to another person without being watched - built on infrastructure that cannot betray it." = "A legrégebbi emberi szabadság - beszélgetni az emberekkel, anélkül, hogy mások megfigyelnének - olyan infrastruktúrán alapul, amely nem tudja elárulni."; + /* No comment provided by engineer. */ "The same conditions will apply to operator **%@**." = "Ugyanezek a feltételek lesznek elfogadva a következő üzemeltető számára is: **%@**."; @@ -5793,6 +5779,12 @@ server test failure */ /* No comment provided by engineer. */ "Themes" = "Témák"; +/* No comment provided by engineer. */ +"Then we moved online, and every platform asked for a piece of you - your name, your number, your friends. We accepted that the price of talking to others is letting someone know who we talk to. Every generation, people and tech, had it this way - telephone, email, messengers, social media. It seemed the only way possible." = "Aztán felléptünk az internetre, és minden platform kért belőlünk egy darabot - nevet, telefonszámot, baráti kapcsolatokat. Elfogadtuk, hogy a kommunikáció ára az, hogy mások megtudják, hogy kivel beszélünk. Minden generáció, az emberek és a technológia is eddig így működött - telefon, e-mail, üzenetküldő programok, közösségi média. Úgy tűnt, ez az egyetlen lehetséges mód."; + +/* No comment provided by engineer. */ +"There is another way. A network with no phone numbers. No usernames. No accounts. No user identities of any kind. A network that connects people and carries encrypted messages without knowing who is connected." = "De van egy másik lehetőség is. Egy hálózat, amelyben nincsenek telefonszámok. Nincsenek felhasználónevek. Nincsenek fiókok. Nincsenek semmiféle felhasználói azonosítók. Egy hálózat, amely összeköti az embereket és titkosított üzeneteket továbbít, anélkül, hogy tudná, ki csatlakozik hozzá."; + /* No comment provided by engineer. */ "These conditions will also apply for: **%@**." = "Ezek a feltételek lesznek elfogadva a következő számára is: **%@**."; @@ -6576,9 +6568,6 @@ server test failure */ /* No comment provided by engineer. */ "You could not be verified; please try again." = "Nem sikerült ellenőrizni; próbálja meg újra."; -/* No comment provided by engineer. */ -"You decide who can connect." = "Ön dönti el, hogy kivel beszélget."; - /* new chat sheet title */ "You have already requested connection!\nRepeat connection request?" = "Ön már küldött egy kapcsolódási kérést!\nMegismétli a kapcsolódási kérést?"; @@ -6633,6 +6622,9 @@ server test failure */ /* snd group event chat item */ "you unblocked %@" = "Ön feloldotta %@ letiltását"; +/* No comment provided by engineer. */ +"You were born without an account" = "Fiók nélkül születtünk."; + /* No comment provided by engineer. */ "You will be able to send messages **only after your request is accepted**." = "Csak azután tud üzeneteket küldeni, **miután a kérését elfogadták**."; @@ -6714,6 +6706,9 @@ server test failure */ /* No comment provided by engineer. */ "Your contacts will remain connected." = "A partnereivel továbbra is kapcsolatban marad."; +/* No comment provided by engineer. */ +"Your conversations belong to you, as it had always been before the Internet. The network is not a place you visit. It is a place you create and own. And nobody can take it from you, whether you make it private or public." = "A beszélgetései Önhöz tartoznak, ahogy az internet megjelenése előtt is mindig így volt. A hálózat nem egy hely, amelyet meglátogat. Ez egy olyan hely, amelyet Ön hoz létre saját magának. És senki sem veheti el Öntől, függetlenül attól, hogy privát vagy nyilvános."; + /* No comment provided by engineer. */ "Your credentials may be sent unencrypted." = "A hitelesítési adatai titkosítatlanul is elküldhetők."; diff --git a/apps/ios/it.lproj/Localizable.strings b/apps/ios/it.lproj/Localizable.strings index 2d1161de80..d42a70a114 100644 --- a/apps/ios/it.lproj/Localizable.strings +++ b/apps/ios/it.lproj/Localizable.strings @@ -676,9 +676,6 @@ swipe action */ /* No comment provided by engineer. */ "Answer call" = "Rispondi alla chiamata"; -/* No comment provided by engineer. */ -"Anybody can host servers." = "Chiunque può installare i server."; - /* No comment provided by engineer. */ "App build: %@" = "Build dell'app: %@"; @@ -820,6 +817,12 @@ swipe action */ /* No comment provided by engineer. */ "Bad message ID" = "ID del messaggio errato"; +/* No comment provided by engineer. */ +"Be free in your network." = "Vivi libero nella tua rete."; + +/* No comment provided by engineer. */ +"Because we destroyed the power to know who you are. So that your power can never be taken." = "Perché abbiamo distrutto il potere di sapere chi sei. In modo che il tuo potere non possa mai esserti sottratto."; + /* No comment provided by engineer. */ "Better calls" = "Chiamate migliorate"; @@ -944,9 +947,6 @@ marked deleted chat item preview text */ /* No comment provided by engineer. */ "By chat profile (default) or [by connection](https://simplex.chat/blog/20230204-simplex-chat-v4-5-user-chat-profiles.html#transport-isolation) (BETA)." = "Per profilo di chat (predefinito) o [per connessione](https://simplex.chat/blog/20230204-simplex-chat-v4-5-user-chat-profiles.html#transport-isolation) (BETA)."; -/* No comment provided by engineer. */ -"By using SimpleX Chat you agree to:\n- send only legal content in public groups.\n- respect other users – no spam." = "Usando SimpleX Chat accetti di:\n- inviare solo contenuto legale nei gruppi pubblici.\n- rispettare gli altri utenti - niente spam."; - /* No comment provided by engineer. */ "call" = "chiama"; @@ -1181,7 +1181,8 @@ set passcode view */ /* No comment provided by engineer. */ "Chat will be deleted for you - this cannot be undone!" = "La chat verrà eliminata solo per te, non è reversibile!"; -/* chat toolbar */ +/* chat feature +chat toolbar */ "Chat with admins" = "Chat con amministratori"; /* No comment provided by engineer. */ @@ -1304,9 +1305,6 @@ set passcode view */ /* No comment provided by engineer. */ "Configure relays" = "Configura i relay"; -/* No comment provided by engineer. */ -"Configure server operators" = "Configura gli operatori dei server"; - /* No comment provided by engineer. */ "Confirm" = "Conferma"; @@ -1728,9 +1726,6 @@ server test step */ /* No comment provided by engineer. */ "Debug delivery" = "Debug della consegna"; -/* No comment provided by engineer. */ -"Decentralized" = "Decentralizzato"; - /* relay test step */ "Decode link" = "Decodifica il link"; @@ -3051,9 +3046,6 @@ servers warning */ /* No comment provided by engineer. */ "Immediately" = "Immediatamente"; -/* No comment provided by engineer. */ -"Immune to spam" = "Immune a spam e abusi"; - /* No comment provided by engineer. */ "Import" = "Importa"; @@ -3654,9 +3646,6 @@ servers warning */ /* No comment provided by engineer. */ "Migrate device" = "Migra dispositivo"; -/* No comment provided by engineer. */ -"Migrate from another device" = "Migra da un altro dispositivo"; - /* No comment provided by engineer. */ "Migrate here" = "Migra qui"; @@ -3949,7 +3938,10 @@ servers warning */ "No unread chats" = "Nessuna chat non letta"; /* No comment provided by engineer. */ -"No user identifiers." = "Nessun identificatore utente."; +"Nobody tracked your conversations. No one drew a map of where you'd been. Privacy was never a feature - it was the way of life." = "Nessuno monitorava le tue conversazioni. Nessuno disegnava una mappa delle tue posizioni. La privacy non era mai stata una caratteristica, era uno stile di vita."; + +/* No comment provided by engineer. */ +"Not a better lock on someone else's door. Not a nicer landlord that respects your privacy, but still keeps the record of all visitors. You are not a guest. You are home. No king can enter it - you are sovereign." = "Non una serratura migliore sulla porta di qualcun altro. Non un padrone di casa più gentile che rispetta la tua privacy, ma che continua a tenere traccia di tutti i visitatori. Non sei un ospite. Sei a casa tua. Nessun re può entrarvi: sei tu il sovrano."; /* alert title */ "Not all relays connected" = "Non tutti i relay sono connessi"; @@ -4365,12 +4357,6 @@ alert button */ /* No comment provided by engineer. */ "Privacy policy and conditions of use." = "Informativa sulla privacy e condizioni d'uso."; -/* No comment provided by engineer. */ -"Privacy redefined" = "Privacy ridefinita"; - -/* No comment provided by engineer. */ -"Private chats, groups and your contacts are not accessible to server operators." = "Le chat private, i gruppi e i tuoi contatti non sono accessibili agli operatori dei server."; - /* No comment provided by engineer. */ "Private filenames" = "Nomi di file privati"; @@ -5739,9 +5725,6 @@ server test failure */ /* No comment provided by engineer. */ "The encryption is working and the new encryption agreement is not required. It may result in connection errors!" = "La crittografia funziona e il nuovo accordo sulla crittografia non è richiesto. Potrebbero verificarsi errori di connessione!"; -/* No comment provided by engineer. */ -"The future of messaging" = "La nuova generazione di messaggistica privata"; - /* No comment provided by engineer. */ "The hash of the previous message is different." = "L'hash del messaggio precedente è diverso."; @@ -5766,6 +5749,9 @@ server test failure */ /* No comment provided by engineer. */ "The old database was not removed during the migration, it can be deleted." = "Il database vecchio non è stato rimosso durante la migrazione, può essere eliminato."; +/* No comment provided by engineer. */ +"The oldest human freedom - to speak to another person without being watched - built on infrastructure that cannot betray it." = "La più antica libertà umana, parlare con un'altra persona senza essere osservati, si basa su un'infrastruttura che non può tradirla."; + /* No comment provided by engineer. */ "The same conditions will apply to operator **%@**." = "Le stesse condizioni si applicheranno all'operatore **%@**."; @@ -5793,6 +5779,12 @@ server test failure */ /* No comment provided by engineer. */ "Themes" = "Temi"; +/* No comment provided by engineer. */ +"Then we moved online, and every platform asked for a piece of you - your name, your number, your friends. We accepted that the price of talking to others is letting someone know who we talk to. Every generation, people and tech, had it this way - telephone, email, messengers, social media. It seemed the only way possible." = "Poi ci siamo trasferiti online e ogni piattaforma ha chiesto un pezzo di noi: il nome, il numero, gli amici. Abbiamo accettato che il prezzo da pagare per comunicare con gli altri fosse quello di far sapere a qualcuno con chi parliamo. Ogni generazione, sia di persone che di tecnologia, ha funzionato così: telefono, email, messenger, social media. Sembrava l'unico modo possibile."; + +/* No comment provided by engineer. */ +"There is another way. A network with no phone numbers. No usernames. No accounts. No user identities of any kind. A network that connects people and carries encrypted messages without knowing who is connected." = "C'è un'altra via. Una rete senza numeri di telefono. Senza nomi utente. Senza account. Senza identificatori utente di alcun tipo. Una rete che connette le persone e trasferisce messaggi crittografati senza sapere chi è connesso."; + /* No comment provided by engineer. */ "These conditions will also apply for: **%@**." = "Queste condizioni si applicheranno anche per: **%@**."; @@ -6576,9 +6568,6 @@ server test failure */ /* No comment provided by engineer. */ "You could not be verified; please try again." = "Non è stato possibile verificarti, riprova."; -/* No comment provided by engineer. */ -"You decide who can connect." = "Sei tu a decidere chi può connettersi."; - /* new chat sheet title */ "You have already requested connection!\nRepeat connection request?" = "Hai già richiesto la connessione!\nRipetere la richiesta di connessione?"; @@ -6633,6 +6622,9 @@ server test failure */ /* snd group event chat item */ "you unblocked %@" = "hai sbloccato %@"; +/* No comment provided by engineer. */ +"You were born without an account" = "Sei nato senza un account."; + /* No comment provided by engineer. */ "You will be able to send messages **only after your request is accepted**." = "Potrai inviare messaggi **solo dopo che la tua richiesta verrà accettata**."; @@ -6714,6 +6706,9 @@ server test failure */ /* No comment provided by engineer. */ "Your contacts will remain connected." = "I tuoi contatti resteranno connessi."; +/* No comment provided by engineer. */ +"Your conversations belong to you, as it had always been before the Internet. The network is not a place you visit. It is a place you create and own. And nobody can take it from you, whether you make it private or public." = "Le tue conversazioni appartengono a te, come è sempre stato prima dell'avvento di internet. La rete non è un luogo che visiti. È un luogo che crei e possiedi. E nessuno può portartelo via, che tu lo renda privato o pubblico."; + /* No comment provided by engineer. */ "Your credentials may be sent unencrypted." = "Le credenziali potrebbero essere inviate in chiaro."; diff --git a/apps/ios/ja.lproj/Localizable.strings b/apps/ios/ja.lproj/Localizable.strings index 37dd9d92ba..e095ec2aae 100644 --- a/apps/ios/ja.lproj/Localizable.strings +++ b/apps/ios/ja.lproj/Localizable.strings @@ -557,9 +557,6 @@ swipe action */ /* No comment provided by engineer. */ "Answer call" = "通話に応答"; -/* No comment provided by engineer. */ -"Anybody can host servers." = "プロトコル技術とコードはオープンソースで、どなたでもご自分のサーバを運用できます。"; - /* No comment provided by engineer. */ "App build: %@" = "アプリのビルド: %@"; @@ -1134,9 +1131,6 @@ server test step */ /* No comment provided by engineer. */ "Debug delivery" = "配信のデバッグ"; -/* No comment provided by engineer. */ -"Decentralized" = "分散型"; - /* message decrypt error item */ "Decryption error" = "復号化エラー"; @@ -1881,9 +1875,6 @@ server test error */ /* No comment provided by engineer. */ "Immediately" = "即座に"; -/* No comment provided by engineer. */ -"Immune to spam" = "スパムや悪質送信を防止"; - /* No comment provided by engineer. */ "Import" = "読み込む"; @@ -2208,9 +2199,6 @@ server test error */ /* No comment provided by engineer. */ "Messages, files and calls are protected by **quantum resistant e2e encryption** with perfect forward secrecy, repudiation and break-in recovery." = "メッセージ、ファイル、通話は、前方秘匿性、否認可能性および侵入復元性を備えた**耐量子E2E暗号化**によって保護されます。"; -/* No comment provided by engineer. */ -"Migrate from another device" = "別の端末から移行"; - /* No comment provided by engineer. */ "Migrating database archive…" = "データベースのアーカイブを移行しています…"; @@ -2355,9 +2343,6 @@ server test error */ /* copied message info in history */ "no text" = "テキストなし"; -/* No comment provided by engineer. */ -"No user identifiers." = "世界初のユーザーIDのないプラットフォーム|設計も元からプライベート。"; - /* No comment provided by engineer. */ "Notifications" = "通知"; @@ -2553,9 +2538,6 @@ alert button */ /* No comment provided by engineer. */ "Privacy & security" = "プライバシーとセキュリティ"; -/* No comment provided by engineer. */ -"Privacy redefined" = "プライバシーの基準を新境地に"; - /* No comment provided by engineer. */ "Private filenames" = "プライベートなファイル名"; @@ -3158,9 +3140,6 @@ server test failure */ /* No comment provided by engineer. */ "The encryption is working and the new encryption agreement is not required. It may result in connection errors!" = "暗号化は機能しており、新しい暗号化への同意は必要ありません。接続エラーが発生する可能性があります!"; -/* No comment provided by engineer. */ -"The future of messaging" = "次世代のプライバシー・メッセンジャー"; - /* No comment provided by engineer. */ "The hash of the previous message is different." = "以前のメッセージとハッシュ値が異なります。"; @@ -3533,9 +3512,6 @@ server test failure */ /* No comment provided by engineer. */ "You could not be verified; please try again." = "確認できませんでした。 もう一度お試しください。"; -/* No comment provided by engineer. */ -"You decide who can connect." = "あなたと繋がることができるのは、あなたからリンクを頂いた方のみです。"; - /* No comment provided by engineer. */ "You have to enter passphrase every time the app starts - it is not stored on the device." = "アプリ起動時にパスフレーズを入力しなければなりません。端末に保存されてません。"; diff --git a/apps/ios/nl.lproj/Localizable.strings b/apps/ios/nl.lproj/Localizable.strings index be478b677d..594b0d5f47 100644 --- a/apps/ios/nl.lproj/Localizable.strings +++ b/apps/ios/nl.lproj/Localizable.strings @@ -626,9 +626,6 @@ swipe action */ /* No comment provided by engineer. */ "Answer call" = "Beantwoord oproep"; -/* No comment provided by engineer. */ -"Anybody can host servers." = "Iedereen kan servers hosten."; - /* No comment provided by engineer. */ "App build: %@" = "App build: %@"; @@ -870,9 +867,6 @@ marked deleted chat item preview text */ /* No comment provided by engineer. */ "By chat profile (default) or [by connection](https://simplex.chat/blog/20230204-simplex-chat-v4-5-user-chat-profiles.html#transport-isolation) (BETA)." = "Via chatprofiel (standaard) of [via verbinding](https://simplex.chat/blog/20230204-simplex-chat-v4-5-user-chat-profiles.html#transport-isolation) (BETA)."; -/* No comment provided by engineer. */ -"By using SimpleX Chat you agree to:\n- send only legal content in public groups.\n- respect other users – no spam." = "Door SimpleX Chat te gebruiken, gaat u ermee akkoord:\n- alleen legale content te versturen in openbare groepen.\n- andere gebruikers te respecteren – geen spam."; - /* No comment provided by engineer. */ "call" = "bellen"; @@ -1053,7 +1047,8 @@ set passcode view */ /* No comment provided by engineer. */ "Chat will be deleted for you - this cannot be undone!" = "De chat wordt voor je verwijderd - dit kan niet ongedaan worden gemaakt!"; -/* chat toolbar */ +/* chat feature +chat toolbar */ "Chat with admins" = "Chat met beheerders"; /* No comment provided by engineer. */ @@ -1164,9 +1159,6 @@ set passcode view */ /* No comment provided by engineer. */ "Configure ICE servers" = "ICE servers configureren"; -/* No comment provided by engineer. */ -"Configure server operators" = "Serveroperators configureren"; - /* No comment provided by engineer. */ "Confirm" = "Bevestigen"; @@ -1564,9 +1556,6 @@ server test step */ /* No comment provided by engineer. */ "Debug delivery" = "Foutopsporing bezorging"; -/* No comment provided by engineer. */ -"Decentralized" = "Gedecentraliseerd"; - /* message decrypt error item */ "Decryption error" = "Decodering fout"; @@ -2769,9 +2758,6 @@ servers warning */ /* No comment provided by engineer. */ "Immediately" = "Onmiddellijk"; -/* No comment provided by engineer. */ -"Immune to spam" = "Immuun voor spam en misbruik"; - /* No comment provided by engineer. */ "Import" = "Importeren"; @@ -3321,9 +3307,6 @@ servers warning */ /* No comment provided by engineer. */ "Migrate device" = "Apparaat migreren"; -/* No comment provided by engineer. */ -"Migrate from another device" = "Migreer vanaf een ander apparaat"; - /* No comment provided by engineer. */ "Migrate here" = "Migreer hierheen"; @@ -3594,9 +3577,6 @@ servers warning */ /* No comment provided by engineer. */ "No unread chats" = "Geen ongelezen chats"; -/* No comment provided by engineer. */ -"No user identifiers." = "Geen gebruikers-ID's."; - /* No comment provided by engineer. */ "Not compatible!" = "Niet compatibel!"; @@ -3960,12 +3940,6 @@ alert button */ /* No comment provided by engineer. */ "Privacy policy and conditions of use." = "Privacybeleid en gebruiksvoorwaarden."; -/* No comment provided by engineer. */ -"Privacy redefined" = "Privacy opnieuw gedefinieerd"; - -/* No comment provided by engineer. */ -"Private chats, groups and your contacts are not accessible to server operators." = "Privéchats, groepen en uw contacten zijn niet toegankelijk voor serverbeheerders."; - /* No comment provided by engineer. */ "Private filenames" = "Privé bestandsnamen"; @@ -5136,9 +5110,6 @@ server test failure */ /* No comment provided by engineer. */ "The encryption is working and the new encryption agreement is not required. It may result in connection errors!" = "De versleuteling werkt en de nieuwe versleutelingsovereenkomst is niet vereist. Dit kan leiden tot verbindingsfouten!"; -/* No comment provided by engineer. */ -"The future of messaging" = "De volgende generatie privéberichten"; - /* No comment provided by engineer. */ "The hash of the previous message is different." = "De hash van het vorige bericht is anders."; @@ -5880,9 +5851,6 @@ server test failure */ /* No comment provided by engineer. */ "You could not be verified; please try again." = "U kon niet worden geverifieerd; probeer het opnieuw."; -/* No comment provided by engineer. */ -"You decide who can connect." = "Jij bepaalt wie er verbinding mag maken."; - /* new chat sheet title */ "You have already requested connection!\nRepeat connection request?" = "Je hebt al verbinding aangevraagd!\nVerbindingsverzoek herhalen?"; diff --git a/apps/ios/pl.lproj/Localizable.strings b/apps/ios/pl.lproj/Localizable.strings index 14c57ae7e0..1790291595 100644 --- a/apps/ios/pl.lproj/Localizable.strings +++ b/apps/ios/pl.lproj/Localizable.strings @@ -641,9 +641,6 @@ swipe action */ /* No comment provided by engineer. */ "Answer call" = "Odbierz połączenie"; -/* No comment provided by engineer. */ -"Anybody can host servers." = "Każdy może hostować serwery."; - /* No comment provided by engineer. */ "App build: %@" = "Kompilacja aplikacji: %@"; @@ -785,6 +782,12 @@ swipe action */ /* No comment provided by engineer. */ "Bad message ID" = "Zły identyfikator wiadomości"; +/* No comment provided by engineer. */ +"Be free in your network." = "Ciesz się swobodą w swojej sieci."; + +/* No comment provided by engineer. */ +"Because we destroyed the power to know who you are. So that your power can never be taken." = "Ponieważ zniszczyliśmy moc pozwalającą poznać, kim jesteś. Więc twoja moc nigdy nie będzie Ci odebrana."; + /* No comment provided by engineer. */ "Better calls" = "Lepsze połączenia"; @@ -903,9 +906,6 @@ marked deleted chat item preview text */ /* No comment provided by engineer. */ "By chat profile (default) or [by connection](https://simplex.chat/blog/20230204-simplex-chat-v4-5-user-chat-profiles.html#transport-isolation) (BETA)." = "Według profilu czatu (domyślnie) lub [według połączenia](https://simplex.chat/blog/20230204-simplex-chat-v4-5-user-chat-profiles.html#transport-isolation) (BETA)."; -/* No comment provided by engineer. */ -"By using SimpleX Chat you agree to:\n- send only legal content in public groups.\n- respect other users – no spam." = "Korzystając z SimpleX Chat, zgadzasz się:\n- wysyłać tylko legalne treści w grupach publicznych.\n- szanować innych użytkowników – nie spamować."; - /* No comment provided by engineer. */ "call" = "zadzwoń"; @@ -1089,7 +1089,8 @@ set passcode view */ /* No comment provided by engineer. */ "Chat will be deleted for you - this cannot be undone!" = "Czat zostanie usunięty dla Ciebie – tej operacji nie można cofnąć!"; -/* chat toolbar */ +/* chat feature +chat toolbar */ "Chat with admins" = "Czatuj z administratorami"; /* No comment provided by engineer. */ @@ -1203,9 +1204,6 @@ set passcode view */ /* No comment provided by engineer. */ "Configure ICE servers" = "Skonfiguruj serwery ICE"; -/* No comment provided by engineer. */ -"Configure server operators" = "Skonfiguruj operatorów serwerów"; - /* No comment provided by engineer. */ "Confirm" = "Potwierdź"; @@ -1618,9 +1616,6 @@ server test step */ /* No comment provided by engineer. */ "Debug delivery" = "Dostarczenie debugowania"; -/* No comment provided by engineer. */ -"Decentralized" = "Zdecentralizowane"; - /* message decrypt error item */ "Decryption error" = "Błąd odszyfrowania"; @@ -2890,9 +2885,6 @@ servers warning */ /* No comment provided by engineer. */ "Immediately" = "Natychmiast"; -/* No comment provided by engineer. */ -"Immune to spam" = "Odporność na spam i nadużycia"; - /* No comment provided by engineer. */ "Import" = "Importuj"; @@ -3472,9 +3464,6 @@ servers warning */ /* No comment provided by engineer. */ "Migrate device" = "Zmigruj urządzenie"; -/* No comment provided by engineer. */ -"Migrate from another device" = "Zmigruj z innego urządzenia"; - /* No comment provided by engineer. */ "Migrate here" = "Zmigruj tutaj"; @@ -3755,7 +3744,10 @@ servers warning */ "No unread chats" = "Brak nieprzeczytanych czatów"; /* No comment provided by engineer. */ -"No user identifiers." = "Brak identyfikatorów użytkownika."; +"Nobody tracked your conversations. No one drew a map of where you'd been. Privacy was never a feature - it was the way of life." = "Nikt nie śledził twoich rozmów. Nikt nie rysował mapy miejsc, w których byłeś. Prywatność nigdy nie była funkcją - była sposobem na życie."; + +/* No comment provided by engineer. */ +"Not a better lock on someone else's door. Not a nicer landlord that respects your privacy, but still keeps the record of all visitors. You are not a guest. You are home. No king can enter it - you are sovereign." = "Nie chodzi o lepszy zamek w drzwiach kogoś innego. Nie chodzi o milszego właściciela, który szanuje twoją prywatność, ale nadal prowadzi rejestr wszystkich odwiedzających. Nie jesteś gościem. Jesteś w domu. Żaden król nie może do niego wejść - jesteś suwerenem."; /* No comment provided by engineer. */ "Not compatible!" = "Nie kompatybilny!"; @@ -4150,12 +4142,6 @@ alert button */ /* No comment provided by engineer. */ "Privacy policy and conditions of use." = "Polityka prywatności i warunki korzystania."; -/* No comment provided by engineer. */ -"Privacy redefined" = "Redefinicja prywatności"; - -/* No comment provided by engineer. */ -"Private chats, groups and your contacts are not accessible to server operators." = "Prywatne czaty, grupy i Twoje kontakty nie są dostępne dla operatorów serwerów."; - /* No comment provided by engineer. */ "Private filenames" = "Prywatne nazwy plików"; @@ -5422,9 +5408,6 @@ server test failure */ /* No comment provided by engineer. */ "The encryption is working and the new encryption agreement is not required. It may result in connection errors!" = "Szyfrowanie działa, a nowe uzgodnienie szyfrowania nie jest wymagane. Może to spowodować błędy w połączeniu!"; -/* No comment provided by engineer. */ -"The future of messaging" = "Następna generacja prywatnych wiadomości"; - /* No comment provided by engineer. */ "The hash of the previous message is different." = "Hash poprzedniej wiadomości jest inny."; @@ -5449,6 +5432,9 @@ server test failure */ /* No comment provided by engineer. */ "The old database was not removed during the migration, it can be deleted." = "Stara baza danych nie została usunięta podczas migracji, można ją usunąć."; +/* No comment provided by engineer. */ +"The oldest human freedom - to speak to another person without being watched - built on infrastructure that cannot betray it." = "Najstarsza ludzka wolność - możliwość rozmowy z inną osobą bez bycia obserwowanym - opiera się na infrastrukturze, która nie może jej zdradzić."; + /* No comment provided by engineer. */ "The same conditions will apply to operator **%@**." = "Te same warunki będą miały zastosowanie do operatora **%@**."; @@ -5476,6 +5462,12 @@ server test failure */ /* No comment provided by engineer. */ "Themes" = "Motywy"; +/* No comment provided by engineer. */ +"Then we moved online, and every platform asked for a piece of you - your name, your number, your friends. We accepted that the price of talking to others is letting someone know who we talk to. Every generation, people and tech, had it this way - telephone, email, messengers, social media. It seemed the only way possible." = "Następnie przenieśliśmy się do sieci, a każda platforma prosiła o podanie danych osobowych - imienia i nazwiska, numeru telefonu, znajomych. Zaakceptowaliśmy fakt, że ceną za możliwość komunikowania się z innymi jest ujawnienie komuś, z kim rozmawiamy. Tak było w przypadku każdego pokolenia, ludzi i technologii - telefonu, poczty elektronicznej, komunikatorów, mediów społecznościowych. Wydawało się to jedyną możliwą opcją."; + +/* No comment provided by engineer. */ +"There is another way. A network with no phone numbers. No usernames. No accounts. No user identities of any kind. A network that connects people and carries encrypted messages without knowing who is connected." = "Jest jeszcze inny sposób. Sieć bez numerów telefonów. Bez nazw użytkowników. Bez kont. Bez jakichkolwiek tożsamości użytkowników. Sieć, która łączy ludzi i przesyła zaszyfrowane wiadomości, nie wiedząc, kto jest podłączony."; + /* No comment provided by engineer. */ "These conditions will also apply for: **%@**." = "Warunki te będą miały również zastosowanie w przypadku: **%@**."; @@ -6217,9 +6209,6 @@ server test failure */ /* No comment provided by engineer. */ "You could not be verified; please try again." = "Nie można zweryfikować użytkownika; proszę spróbować ponownie."; -/* No comment provided by engineer. */ -"You decide who can connect." = "Ty decydujesz, kto może się połączyć."; - /* new chat sheet title */ "You have already requested connection!\nRepeat connection request?" = "Już prosiłeś o połączenie!\nPowtórzyć prośbę połączenia?"; @@ -6274,6 +6263,9 @@ server test failure */ /* snd group event chat item */ "you unblocked %@" = "odblokowałeś %@"; +/* No comment provided by engineer. */ +"You were born without an account" = "Urodziłeś się bez konta."; + /* No comment provided by engineer. */ "You will be able to send messages **only after your request is accepted**." = "Będziesz mógł wysyłać wiadomości **dopiero po zaakceptowaniu Twojej prośby**."; @@ -6349,6 +6341,9 @@ server test failure */ /* No comment provided by engineer. */ "Your contacts will remain connected." = "Twoje kontakty pozostaną połączone."; +/* No comment provided by engineer. */ +"Your conversations belong to you, as it had always been before the Internet. The network is not a place you visit. It is a place you create and own. And nobody can take it from you, whether you make it private or public." = "Twoje rozmowy należą do Ciebie, tak jak zawsze było przed pojawieniem się Internetu. Sieć nie jest miejscem, które odwiedzasz. Jest miejscem, które tworzysz i które należy do Ciebie. Nikt nie może Ci tego odebrać, niezależnie od tego, czy jest to miejsce prywatne, czy publiczne."; + /* No comment provided by engineer. */ "Your credentials may be sent unencrypted." = "Twoje poświadczenia mogą zostać wysłane niezaszyfrowane."; diff --git a/apps/ios/ru.lproj/Localizable.strings b/apps/ios/ru.lproj/Localizable.strings index 24f0c358cc..7c91d84f12 100644 --- a/apps/ios/ru.lproj/Localizable.strings +++ b/apps/ios/ru.lproj/Localizable.strings @@ -638,9 +638,6 @@ swipe action */ /* No comment provided by engineer. */ "Answer call" = "Принять звонок"; -/* No comment provided by engineer. */ -"Anybody can host servers." = "Кто угодно может запустить сервер."; - /* No comment provided by engineer. */ "App build: %@" = "Сборка приложения: %@"; @@ -779,6 +776,12 @@ swipe action */ /* No comment provided by engineer. */ "Bad message ID" = "Ошибка ID сообщения"; +/* No comment provided by engineer. */ +"Be free in your network." = "Будь свободен в своей сети."; + +/* No comment provided by engineer. */ +"Because we destroyed the power to know who you are. So that your power can never be taken." = "Потому что мы разрушили саму возможность узнать, кто вы. Чтобы вашу свободу невозможно было отнять."; + /* No comment provided by engineer. */ "Better calls" = "Улучшенные звонки"; @@ -897,9 +900,6 @@ marked deleted chat item preview text */ /* No comment provided by engineer. */ "By chat profile (default) or [by connection](https://simplex.chat/blog/20230204-simplex-chat-v4-5-user-chat-profiles.html#transport-isolation) (BETA)." = "По профилю чата или [по соединению](https://simplex.chat/blog/20230204-simplex-chat-v4-5-user-chat-profiles.html#transport-isolation) (БЕТА)."; -/* No comment provided by engineer. */ -"By using SimpleX Chat you agree to:\n- send only legal content in public groups.\n- respect other users – no spam." = "Используя SimpleX Chat, Вы согласны:\n- отправлять только законные сообщения в публичных группах.\n- уважать других пользователей – не отправлять спам."; - /* No comment provided by engineer. */ "call" = "звонок"; @@ -1083,7 +1083,8 @@ set passcode view */ /* No comment provided by engineer. */ "Chat will be deleted for you - this cannot be undone!" = "Разговор будет удален для Вас - это действие нельзя отменить!"; -/* chat toolbar */ +/* chat feature +chat toolbar */ "Chat with admins" = "Чат с админами"; /* No comment provided by engineer. */ @@ -1197,9 +1198,6 @@ set passcode view */ /* No comment provided by engineer. */ "Configure ICE servers" = "Настройка ICE серверов"; -/* No comment provided by engineer. */ -"Configure server operators" = "Настроить операторов серверов"; - /* No comment provided by engineer. */ "Confirm" = "Подтвердить"; @@ -1609,9 +1607,6 @@ server test step */ /* No comment provided by engineer. */ "Debug delivery" = "Отладка доставки"; -/* No comment provided by engineer. */ -"Decentralized" = "Децентрализованный"; - /* message decrypt error item */ "Decryption error" = "Ошибка расшифровки"; @@ -2863,9 +2858,6 @@ servers warning */ /* No comment provided by engineer. */ "Immediately" = "Сразу"; -/* No comment provided by engineer. */ -"Immune to spam" = "Защищен от спама"; - /* No comment provided by engineer. */ "Import" = "Импортировать"; @@ -3436,9 +3428,6 @@ servers warning */ /* No comment provided by engineer. */ "Migrate device" = "Мигрировать устройство"; -/* No comment provided by engineer. */ -"Migrate from another device" = "Миграция с другого устройства"; - /* No comment provided by engineer. */ "Migrate here" = "Мигрировать сюда"; @@ -3719,7 +3708,10 @@ servers warning */ "No unread chats" = "Нет непрочитанных чатов"; /* No comment provided by engineer. */ -"No user identifiers." = "Без идентификаторов пользователей."; +"Nobody tracked your conversations. No one drew a map of where you'd been. Privacy was never a feature - it was the way of life." = "Никто не отслеживал ваши разговоры. Никто не составлял карту ваших перемещений. Конфиденциальность не была функцией - это был образ жизни."; + +/* No comment provided by engineer. */ +"Not a better lock on someone else's door. Not a nicer landlord that respects your privacy, but still keeps the record of all visitors. You are not a guest. You are home. No king can enter it - you are sovereign." = "Не более надёжный замок на чужой двери. Не более вежливый хозяин, который уважает вашу частную жизнь, но всё равно ведёт учёт всех посетителей. Вы не гость. Вы у себя дома. Ни один король не войдёт в ваш дом - вы суверенны."; /* No comment provided by engineer. */ "Not compatible!" = "Несовместимая версия!"; @@ -4114,12 +4106,6 @@ alert button */ /* No comment provided by engineer. */ "Privacy policy and conditions of use." = "Политика конфиденциальности и условия использования."; -/* No comment provided by engineer. */ -"Privacy redefined" = "Более конфиденциальный"; - -/* No comment provided by engineer. */ -"Private chats, groups and your contacts are not accessible to server operators." = "Частные разговоры, группы и Ваши контакты недоступны для операторов серверов."; - /* No comment provided by engineer. */ "Private filenames" = "Защищенные имена файлов"; @@ -5368,9 +5354,6 @@ server test failure */ /* No comment provided by engineer. */ "The encryption is working and the new encryption agreement is not required. It may result in connection errors!" = "Шифрование работает, и новое соглашение не требуется. Это может привести к ошибкам соединения!"; -/* No comment provided by engineer. */ -"The future of messaging" = "Будущее коммуникаций"; - /* No comment provided by engineer. */ "The hash of the previous message is different." = "Хэш предыдущего сообщения отличается."; @@ -5395,6 +5378,9 @@ server test failure */ /* No comment provided by engineer. */ "The old database was not removed during the migration, it can be deleted." = "Предыдущая версия данных чата не удалена при перемещении, её можно удалить."; +/* No comment provided by engineer. */ +"The oldest human freedom - to speak to another person without being watched - built on infrastructure that cannot betray it." = "Древнейшая человеческая свобода - говорить с другим человеком без слежки - построенная на инфраструктуре, которая не может её предать."; + /* No comment provided by engineer. */ "The same conditions will apply to operator **%@**." = "Те же самые условия будут приняты для оператора **%@**."; @@ -5422,6 +5408,12 @@ server test failure */ /* No comment provided by engineer. */ "Themes" = "Темы"; +/* No comment provided by engineer. */ +"Then we moved online, and every platform asked for a piece of you - your name, your number, your friends. We accepted that the price of talking to others is letting someone know who we talk to. Every generation, people and tech, had it this way - telephone, email, messengers, social media. It seemed the only way possible." = "Потом мы вышли в интернет, и каждая платформа попросила частичку вас - ваше имя, ваш номер, ваших друзей. Мы смирились с тем, что за возможность общаться приходится отдавать информацию о том, с кем мы общаемся. Каждое поколение людей и технологий жило так - телефон, электронная почта, мессенджеры, социальные сети. Казалось, что другого пути нет."; + +/* No comment provided by engineer. */ +"There is another way. A network with no phone numbers. No usernames. No accounts. No user identities of any kind. A network that connects people and carries encrypted messages without knowing who is connected." = "Другой путь есть. Сеть без номеров телефонов. Без имён пользователей. Без аккаунтов. Без каких-либо идентификаторов пользователей. Сеть, которая соединяет людей и передаёт зашифрованные сообщения, не зная, кто с кем связан."; + /* No comment provided by engineer. */ "These conditions will also apply for: **%@**." = "Эти условия также будут применены к: **%@**."; @@ -6160,9 +6152,6 @@ server test failure */ /* No comment provided by engineer. */ "You could not be verified; please try again." = "Верификация не удалась; пожалуйста, попробуйте ещё раз."; -/* No comment provided by engineer. */ -"You decide who can connect." = "Вы определяете, кто может соединиться."; - /* new chat sheet title */ "You have already requested connection!\nRepeat connection request?" = "Вы уже запросили соединение!\nПовторить запрос?"; @@ -6217,6 +6206,9 @@ server test failure */ /* snd group event chat item */ "you unblocked %@" = "Вы разблокировали %@"; +/* No comment provided by engineer. */ +"You were born without an account" = "Вы родились без аккаунта."; + /* No comment provided by engineer. */ "You will be able to send messages **only after your request is accepted**." = "Вы сможете отправлять сообщения **только после того как Ваш запрос будет принят**."; @@ -6292,6 +6284,9 @@ server test failure */ /* No comment provided by engineer. */ "Your contacts will remain connected." = "Ваши контакты сохранятся."; +/* No comment provided by engineer. */ +"Your conversations belong to you, as it had always been before the Internet. The network is not a place you visit. It is a place you create and own. And nobody can take it from you, whether you make it private or public." = "Ваши разговоры принадлежат вам, как это всегда было до интернета. Сеть - это не место, куда вы приходите. Это место, которое вы создаёте и которым владеете. И никто не может это у вас отнять, делаете ли вы его конфиденциальным или публичным."; + /* No comment provided by engineer. */ "Your credentials may be sent unencrypted." = "Ваши учетные данные могут быть отправлены в незашифрованном виде."; diff --git a/apps/ios/th.lproj/Localizable.strings b/apps/ios/th.lproj/Localizable.strings index 827dedd00b..141c14cd00 100644 --- a/apps/ios/th.lproj/Localizable.strings +++ b/apps/ios/th.lproj/Localizable.strings @@ -353,9 +353,6 @@ swipe action */ /* No comment provided by engineer. */ "Answer call" = "รับสาย"; -/* No comment provided by engineer. */ -"Anybody can host servers." = "โปรโตคอลและโค้ดโอเพ่นซอร์ส – ใคร ๆ ก็สามารถเปิดใช้เซิร์ฟเวอร์ได้"; - /* No comment provided by engineer. */ "App build: %@" = "รุ่นแอป: %@"; @@ -819,9 +816,6 @@ server test step */ /* time unit */ "days" = "วัน"; -/* No comment provided by engineer. */ -"Decentralized" = "กระจายอำนาจแล้ว"; - /* message decrypt error item */ "Decryption error" = "ข้อผิดพลาดในการ decrypt"; @@ -1542,9 +1536,6 @@ server test error */ /* No comment provided by engineer. */ "Immediately" = "โดยทันที"; -/* No comment provided by engineer. */ -"Immune to spam" = "มีภูมิคุ้มกันต่อสแปมและการละเมิด"; - /* No comment provided by engineer. */ "Import" = "นำเข้า"; @@ -1995,9 +1986,6 @@ server test error */ /* copied message info in history */ "no text" = "ไม่มีข้อความ"; -/* No comment provided by engineer. */ -"No user identifiers." = "แพลตฟอร์มแรกที่ไม่มีตัวระบุผู้ใช้ - ถูกออกแบบให้เป็นส่วนตัว"; - /* No comment provided by engineer. */ "Notifications" = "การแจ้งเตือน"; @@ -2189,9 +2177,6 @@ new chat action */ /* No comment provided by engineer. */ "Privacy & security" = "ความเป็นส่วนตัวและความปลอดภัย"; -/* No comment provided by engineer. */ -"Privacy redefined" = "นิยามความเป็นส่วนตัวใหม่"; - /* No comment provided by engineer. */ "Private filenames" = "ชื่อไฟล์ส่วนตัว"; @@ -2794,9 +2779,6 @@ server test failure */ /* No comment provided by engineer. */ "The encryption is working and the new encryption agreement is not required. It may result in connection errors!" = "encryption กำลังทำงานและไม่จำเป็นต้องใช้ข้อตกลง encryption ใหม่ อาจทำให้การเชื่อมต่อผิดพลาดได้!"; -/* No comment provided by engineer. */ -"The future of messaging" = "การส่งข้อความส่วนตัวรุ่นต่อไป"; - /* No comment provided by engineer. */ "The hash of the previous message is different." = "แฮชของข้อความก่อนหน้านี้แตกต่างกัน"; @@ -3157,9 +3139,6 @@ server test failure */ /* No comment provided by engineer. */ "You could not be verified; please try again." = "เราไม่สามารถตรวจสอบคุณได้ กรุณาลองอีกครั้ง."; -/* No comment provided by engineer. */ -"You decide who can connect." = "ผู้คนสามารถเชื่อมต่อกับคุณผ่านลิงก์ที่คุณแบ่งปันเท่านั้น"; - /* No comment provided by engineer. */ "You have to enter passphrase every time the app starts - it is not stored on the device." = "คุณต้องใส่รหัสผ่านทุกครั้งที่เริ่มแอป - รหัสผ่านไม่ได้จัดเก็บไว้ในอุปกรณ์"; diff --git a/apps/ios/tr.lproj/Localizable.strings b/apps/ios/tr.lproj/Localizable.strings index 8681e938bf..0fc11f3478 100644 --- a/apps/ios/tr.lproj/Localizable.strings +++ b/apps/ios/tr.lproj/Localizable.strings @@ -638,9 +638,6 @@ swipe action */ /* No comment provided by engineer. */ "Answer call" = "Aramayı cevapla"; -/* No comment provided by engineer. */ -"Anybody can host servers." = "Açık kaynak protokolü ve kodu - herhangi biri sunucuları çalıştırabilir."; - /* No comment provided by engineer. */ "App build: %@" = "Uygulama sürümü: %@"; @@ -897,9 +894,6 @@ marked deleted chat item preview text */ /* No comment provided by engineer. */ "By chat profile (default) or [by connection](https://simplex.chat/blog/20230204-simplex-chat-v4-5-user-chat-profiles.html#transport-isolation) (BETA)." = "Sohbet profiline göre (varsayılan) veya [bağlantıya göre](https://simplex.chat/blog/20230204-simplex-chat-v4-5-user-chat-profiles.html#transport-isolation) (BETA)."; -/* No comment provided by engineer. */ -"By using SimpleX Chat you agree to:\n- send only legal content in public groups.\n- respect other users – no spam." = "SimpleX Chat'i kullanarak şunları kabul etmiş olursunuz:\n- herkese açık gruplarda yalnızca yasal içerik göndermek.\n- diğer kullanıcılara saygı göstermek – spam yapmamak."; - /* No comment provided by engineer. */ "call" = "Ara"; @@ -1083,7 +1077,8 @@ set passcode view */ /* No comment provided by engineer. */ "Chat will be deleted for you - this cannot be undone!" = "Sohbet senden silinecek - bu geri alınamaz!"; -/* chat toolbar */ +/* chat feature +chat toolbar */ "Chat with admins" = "Yöneticilerle sohbet et"; /* No comment provided by engineer. */ @@ -1197,9 +1192,6 @@ set passcode view */ /* No comment provided by engineer. */ "Configure ICE servers" = "ICE sunucularını ayarla"; -/* No comment provided by engineer. */ -"Configure server operators" = "Sunucu operatörlerini yapılandır"; - /* No comment provided by engineer. */ "Confirm" = "Onayla"; @@ -1609,9 +1601,6 @@ server test step */ /* No comment provided by engineer. */ "Debug delivery" = "Hata ayıklama teslimatı"; -/* No comment provided by engineer. */ -"Decentralized" = "Merkezi Olmayan"; - /* message decrypt error item */ "Decryption error" = "Şifre çözme hatası"; @@ -2847,9 +2836,6 @@ servers warning */ /* No comment provided by engineer. */ "Immediately" = "Hemen"; -/* No comment provided by engineer. */ -"Immune to spam" = "Spam ve kötüye kullanıma karşı bağışıklı"; - /* No comment provided by engineer. */ "Import" = "İçe aktar"; @@ -3420,9 +3406,6 @@ servers warning */ /* No comment provided by engineer. */ "Migrate device" = "Cihazı taşıma"; -/* No comment provided by engineer. */ -"Migrate from another device" = "Başka bir cihazdan geçiş yapın"; - /* No comment provided by engineer. */ "Migrate here" = "Buraya göç edin"; @@ -3699,9 +3682,6 @@ servers warning */ /* No comment provided by engineer. */ "No unread chats" = "Okunmamış sohbet yok"; -/* No comment provided by engineer. */ -"No user identifiers." = "Herhangi bir kullanıcı tanımlayıcısı yok."; - /* No comment provided by engineer. */ "Not compatible!" = "Uyumlu değil!"; @@ -4095,12 +4075,6 @@ alert button */ /* No comment provided by engineer. */ "Privacy policy and conditions of use." = "Gizlilik politikası ve kullanım koşulları."; -/* No comment provided by engineer. */ -"Privacy redefined" = "Gizlilik yeniden tanımlandı"; - -/* No comment provided by engineer. */ -"Private chats, groups and your contacts are not accessible to server operators." = "Özel sohbetler, gruplar ve kişilerinize sunucu operatörleri tarafından erişilemez."; - /* No comment provided by engineer. */ "Private filenames" = "Gizli dosya adları"; @@ -5349,9 +5323,6 @@ server test failure */ /* No comment provided by engineer. */ "The encryption is working and the new encryption agreement is not required. It may result in connection errors!" = "Şifreleme çalışıyor ve yeni şifreleme anlaşması gerekli değil. Bağlantı hatalarına neden olabilir!"; -/* No comment provided by engineer. */ -"The future of messaging" = "Gizli mesajlaşmanın yeni nesli"; - /* No comment provided by engineer. */ "The hash of the previous message is different." = "Önceki mesajın hash'i farklı."; @@ -6132,9 +6103,6 @@ server test failure */ /* No comment provided by engineer. */ "You could not be verified; please try again." = "Doğrulanamadınız; lütfen tekrar deneyin."; -/* No comment provided by engineer. */ -"You decide who can connect." = "Kimin bağlanabileceğine siz karar verirsiniz."; - /* new chat sheet title */ "You have already requested connection!\nRepeat connection request?" = "Zaten bağlantı isteğinde bulundunuz!\nBağlantı isteği tekrarlansın mı?"; diff --git a/apps/ios/uk.lproj/Localizable.strings b/apps/ios/uk.lproj/Localizable.strings index 06e7b26dae..d65ba029c7 100644 --- a/apps/ios/uk.lproj/Localizable.strings +++ b/apps/ios/uk.lproj/Localizable.strings @@ -632,9 +632,6 @@ swipe action */ /* No comment provided by engineer. */ "Answer call" = "Відповісти на дзвінок"; -/* No comment provided by engineer. */ -"Anybody can host servers." = "Кожен може хостити сервери."; - /* No comment provided by engineer. */ "App build: %@" = "Збірка програми: %@"; @@ -885,9 +882,6 @@ marked deleted chat item preview text */ /* No comment provided by engineer. */ "By chat profile (default) or [by connection](https://simplex.chat/blog/20230204-simplex-chat-v4-5-user-chat-profiles.html#transport-isolation) (BETA)." = "Через профіль чату (за замовчуванням) або [за з'єднанням](https://simplex.chat/blog/20230204-simplex-chat-v4-5-user-chat-profiles.html#transport-isolation) (BETA)."; -/* No comment provided by engineer. */ -"By using SimpleX Chat you agree to:\n- send only legal content in public groups.\n- respect other users – no spam." = "Використовуючи SimpleX Chat, ви погоджуєтеся:\n- надсилати лише легальний контент у публічних групах.\n- поважати інших користувачів - без спаму."; - /* No comment provided by engineer. */ "call" = "дзвонити"; @@ -1071,7 +1065,8 @@ set passcode view */ /* No comment provided by engineer. */ "Chat will be deleted for you - this cannot be undone!" = "Чат буде видалено для вас - цю дію неможливо скасувати!"; -/* chat toolbar */ +/* chat feature +chat toolbar */ "Chat with admins" = "Чат з адміністраторами"; /* No comment provided by engineer. */ @@ -1185,9 +1180,6 @@ set passcode view */ /* No comment provided by engineer. */ "Configure ICE servers" = "Налаштування серверів ICE"; -/* No comment provided by engineer. */ -"Configure server operators" = "Налаштувати операторів сервера"; - /* No comment provided by engineer. */ "Confirm" = "Підтвердити"; @@ -1594,9 +1586,6 @@ server test step */ /* No comment provided by engineer. */ "Debug delivery" = "Доставка налагодження"; -/* No comment provided by engineer. */ -"Decentralized" = "Децентралізований"; - /* message decrypt error item */ "Decryption error" = "Помилка розшифровки"; @@ -2823,9 +2812,6 @@ servers warning */ /* No comment provided by engineer. */ "Immediately" = "Негайно"; -/* No comment provided by engineer. */ -"Immune to spam" = "Імунітет до спаму та зловживань"; - /* No comment provided by engineer. */ "Import" = "Імпорт"; @@ -3390,9 +3376,6 @@ servers warning */ /* No comment provided by engineer. */ "Migrate device" = "Перенести пристрій"; -/* No comment provided by engineer. */ -"Migrate from another device" = "Перехід з іншого пристрою"; - /* No comment provided by engineer. */ "Migrate here" = "Мігруйте сюди"; @@ -3669,9 +3652,6 @@ servers warning */ /* No comment provided by engineer. */ "No unread chats" = "Немає непрочитаних чатів"; -/* No comment provided by engineer. */ -"No user identifiers." = "Ніяких ідентифікаторів користувачів."; - /* No comment provided by engineer. */ "Not compatible!" = "Не сумісні!"; @@ -4050,12 +4030,6 @@ alert button */ /* No comment provided by engineer. */ "Privacy policy and conditions of use." = "Політика конфіденційності та умови використання."; -/* No comment provided by engineer. */ -"Privacy redefined" = "Конфіденційність переглянута"; - -/* No comment provided by engineer. */ -"Private chats, groups and your contacts are not accessible to server operators." = "Приватні чати, групи та ваші контакти недоступні для операторів сервера."; - /* No comment provided by engineer. */ "Private filenames" = "Приватні імена файлів"; @@ -5292,9 +5266,6 @@ server test failure */ /* No comment provided by engineer. */ "The encryption is working and the new encryption agreement is not required. It may result in connection errors!" = "Шифрування працює і нова угода про шифрування не потрібна. Це може призвести до помилок з'єднання!"; -/* No comment provided by engineer. */ -"The future of messaging" = "Наступне покоління приватних повідомлень"; - /* No comment provided by engineer. */ "The hash of the previous message is different." = "Хеш попереднього повідомлення відрізняється."; @@ -6069,9 +6040,6 @@ server test failure */ /* No comment provided by engineer. */ "You could not be verified; please try again." = "Вас не вдалося верифікувати, спробуйте ще раз."; -/* No comment provided by engineer. */ -"You decide who can connect." = "Ви вирішуєте, хто може під'єднатися."; - /* new chat sheet title */ "You have already requested connection!\nRepeat connection request?" = "Ви вже надіслали запит на підключення!\nПовторити запит на підключення?"; diff --git a/apps/ios/zh-Hans.lproj/Localizable.strings b/apps/ios/zh-Hans.lproj/Localizable.strings index 3297b7dce0..21d51bbcc4 100644 --- a/apps/ios/zh-Hans.lproj/Localizable.strings +++ b/apps/ios/zh-Hans.lproj/Localizable.strings @@ -638,9 +638,6 @@ swipe action */ /* No comment provided by engineer. */ "Answer call" = "接听来电"; -/* No comment provided by engineer. */ -"Anybody can host servers." = "任何人都可以托管服务器。"; - /* No comment provided by engineer. */ "App build: %@" = "应用程序构建:%@"; @@ -782,6 +779,12 @@ swipe action */ /* No comment provided by engineer. */ "Bad message ID" = "错误消息 ID"; +/* No comment provided by engineer. */ +"Be free in your network." = "在你的网络中自由畅行。"; + +/* No comment provided by engineer. */ +"Because we destroyed the power to know who you are. So that your power can never be taken." = "因为我们摧毁了知道你是谁的权力,因而您的权利永远不会被夺走。"; + /* No comment provided by engineer. */ "Better calls" = "更佳的通话"; @@ -900,9 +903,6 @@ marked deleted chat item preview text */ /* No comment provided by engineer. */ "By chat profile (default) or [by connection](https://simplex.chat/blog/20230204-simplex-chat-v4-5-user-chat-profiles.html#transport-isolation) (BETA)." = "通过聊天资料(默认)或者[通过连接](https://simplex.chat/blog/20230204-simplex-chat-v4-5-user-chat-profiles.html#transport-isolation) (BETA)。"; -/* No comment provided by engineer. */ -"By using SimpleX Chat you agree to:\n- send only legal content in public groups.\n- respect other users – no spam." = "使用 SimpleX Chat 代表您同意:\n- 在公开群中只发送合法内容\n- 尊重其他用户 – 没有垃圾信息。"; - /* No comment provided by engineer. */ "call" = "呼叫"; @@ -1086,7 +1086,8 @@ set passcode view */ /* No comment provided by engineer. */ "Chat will be deleted for you - this cannot be undone!" = "将为你删除聊天 - 此操作无法撤销!"; -/* chat toolbar */ +/* chat feature +chat toolbar */ "Chat with admins" = "和管理员聊天"; /* No comment provided by engineer. */ @@ -1200,9 +1201,6 @@ set passcode view */ /* No comment provided by engineer. */ "Configure ICE servers" = "配置 ICE 服务器"; -/* No comment provided by engineer. */ -"Configure server operators" = "配置服务器运营方"; - /* No comment provided by engineer. */ "Confirm" = "确认"; @@ -1612,9 +1610,6 @@ server test step */ /* No comment provided by engineer. */ "Debug delivery" = "调试交付"; -/* No comment provided by engineer. */ -"Decentralized" = "分散式"; - /* message decrypt error item */ "Decryption error" = "解密错误"; @@ -2872,9 +2867,6 @@ servers warning */ /* No comment provided by engineer. */ "Immediately" = "立即"; -/* No comment provided by engineer. */ -"Immune to spam" = "不受垃圾和骚扰消息影响"; - /* No comment provided by engineer. */ "Import" = "导入"; @@ -3451,9 +3443,6 @@ servers warning */ /* No comment provided by engineer. */ "Migrate device" = "迁移设备"; -/* No comment provided by engineer. */ -"Migrate from another device" = "从另一台设备迁移"; - /* No comment provided by engineer. */ "Migrate here" = "迁移到此处"; @@ -3734,7 +3723,10 @@ servers warning */ "No unread chats" = "没有未读聊天"; /* No comment provided by engineer. */ -"No user identifiers." = "没有用户标识符。"; +"Nobody tracked your conversations. No one drew a map of where you'd been. Privacy was never a feature - it was the way of life." = "没有人追踪你的谈话内容。没有人绘制你去过的地方的地图。隐私从来都不是一项功能--而是一种生活方式。"; + +/* No comment provided by engineer. */ +"Not a better lock on someone else's door. Not a nicer landlord that respects your privacy, but still keeps the record of all visitors. You are not a guest. You are home. No king can enter it - you are sovereign." = "别人家的门锁再好也比不上这里。房东再好也比不上这里,他既尊重你的隐私,又保留着所有访客的记录。你不是客人,你是家。没有国王能闯入--你是主人。"; /* No comment provided by engineer. */ "Not compatible!" = "不兼容!"; @@ -4126,12 +4118,6 @@ alert button */ /* No comment provided by engineer. */ "Privacy policy and conditions of use." = "隐私政策和使用条款。"; -/* No comment provided by engineer. */ -"Privacy redefined" = "重新定义隐私"; - -/* No comment provided by engineer. */ -"Private chats, groups and your contacts are not accessible to server operators." = "服务器运营方无法访问私密聊天、群组和你的联系人。"; - /* No comment provided by engineer. */ "Private filenames" = "私密文件名"; @@ -5389,9 +5375,6 @@ server test failure */ /* No comment provided by engineer. */ "The encryption is working and the new encryption agreement is not required. It may result in connection errors!" = "加密正在运行,不需要新的加密协议。这可能会导致连接错误!"; -/* No comment provided by engineer. */ -"The future of messaging" = "下一代私密通讯软件"; - /* No comment provided by engineer. */ "The hash of the previous message is different." = "上一条消息的散列不同。"; @@ -5416,6 +5399,9 @@ server test failure */ /* No comment provided by engineer. */ "The old database was not removed during the migration, it can be deleted." = "旧数据库在迁移过程中没有被移除,可以删除。"; +/* No comment provided by engineer. */ +"The oldest human freedom - to speak to another person without being watched - built on infrastructure that cannot betray it." = "人类最古老的自由--与他人交谈而不被监视--建立在不会背叛它的基础设施之上。"; + /* No comment provided by engineer. */ "The second preset operator in the app!" = "应用中的第二个预设运营方!"; @@ -5437,6 +5423,12 @@ server test failure */ /* No comment provided by engineer. */ "Themes" = "主题"; +/* No comment provided by engineer. */ +"Then we moved online, and every platform asked for a piece of you - your name, your number, your friends. We accepted that the price of talking to others is letting someone know who we talk to. Every generation, people and tech, had it this way - telephone, email, messengers, social media. It seemed the only way possible." = "然后我们转向线上,每个平台都要求你提供一些信息--你的姓名、电话号码、好友列表。我们接受了这样一个事实:与人交流的代价就是让别人知道我们在和谁交流。每一代人,每一代科技,都遵循着这样的模式--电话、电子邮件、即时通讯、社交媒体。这似乎是唯一可行的方式。"; + +/* No comment provided by engineer. */ +"There is another way. A network with no phone numbers. No usernames. No accounts. No user identities of any kind. A network that connects people and carries encrypted messages without knowing who is connected." = "还有另一种方法。一个没有电话号码、没有用户名、没有账户、没有任何用户身份的网络。一个连接人们并传输加密信息的网络,而无需知道谁连接了。"; + /* No comment provided by engineer. */ "These conditions will also apply for: **%@**." = "这些条件将同样适用于: **%@**。"; @@ -6175,9 +6167,6 @@ server test failure */ /* No comment provided by engineer. */ "You could not be verified; please try again." = "您的身份无法验证,请再试一次。"; -/* No comment provided by engineer. */ -"You decide who can connect." = "你决定谁可以连接。"; - /* new chat sheet title */ "You have already requested connection!\nRepeat connection request?" = "您已经请求连接了!\n重复连接请求?"; @@ -6229,6 +6218,9 @@ server test failure */ /* snd group event chat item */ "you unblocked %@" = "您解封了 %@"; +/* No comment provided by engineer. */ +"You were born without an account" = "你生来就没有账户。"; + /* No comment provided by engineer. */ "You will be able to send messages **only after your request is accepted**." = "**只有在你的请求被接受后**你才能发送消息。"; @@ -6298,6 +6290,9 @@ server test failure */ /* No comment provided by engineer. */ "Your contacts will remain connected." = "与您的联系人保持连接。"; +/* No comment provided by engineer. */ +"Your conversations belong to you, as it had always been before the Internet. The network is not a place you visit. It is a place you create and own. And nobody can take it from you, whether you make it private or public." = "你的对话内容始终属于你,就像互联网出现之前一样。网络不是一个你访问的地方,而是一个你创建并拥有的地方。无论你将其设为私密还是公开,任何人都无法将其夺走。"; + /* No comment provided by engineer. */ "Your credentials may be sent unencrypted." = "你的凭据可能以未经加密的方式被发送。"; diff --git a/apps/multiplatform/common/src/androidMain/kotlin/chat/simplex/common/views/onboarding/SimpleXInfo.android.kt b/apps/multiplatform/common/src/androidMain/kotlin/chat/simplex/common/views/onboarding/SimpleXInfo.android.kt index d9d3af7bb7..a4fc74f6d4 100644 --- a/apps/multiplatform/common/src/androidMain/kotlin/chat/simplex/common/views/onboarding/SimpleXInfo.android.kt +++ b/apps/multiplatform/common/src/androidMain/kotlin/chat/simplex/common/views/onboarding/SimpleXInfo.android.kt @@ -10,7 +10,7 @@ import chat.simplex.res.MR @Composable actual fun OnboardingActionButton(user: User?, onboardingStage: SharedPreference, onclick: (() -> Unit)?) { if (user == null) { - OnboardingActionButton(Modifier.fillMaxWidth(), labelId = MR.strings.create_your_profile, onboarding = OnboardingStage.Step2_CreateProfile, onclick = onclick) + OnboardingActionButton(Modifier.fillMaxWidth(), labelId = MR.strings.get_started, onboarding = OnboardingStage.Step2_CreateProfile, onclick = onclick) } else { OnboardingActionButton(Modifier.fillMaxWidth(), labelId = MR.strings.make_private_connection, onboarding = OnboardingStage.OnboardingComplete, onclick = onclick) } diff --git a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/App.kt b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/App.kt index e1696fe37b..7542a0b8c6 100644 --- a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/App.kt +++ b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/App.kt @@ -142,10 +142,8 @@ fun MainScreen() { when { onboarding == OnboardingStage.Step1_SimpleXInfo && chatModel.migrationState.value != null -> { // In migration process. Nothing should interrupt it, that's why it's the first branch in when() - SimpleXInfo(chatModel, onboarding = true) - if (appPlatform.isDesktop) { - ModalManager.fullscreen.showInView() - } + if (appPlatform.isDesktop) DesktopOnboarding(onboarding, chatModel) + else SimpleXInfo(chatModel, onboarding = true) } chatModel.dbMigrationInProgress.value -> DefaultProgressView(stringResource(MR.strings.database_migration_in_progress)) chatModel.chatDbStatus.value == null && showInitializationView -> DefaultProgressView(stringResource(MR.strings.opening_database)) @@ -175,36 +173,31 @@ fun MainScreen() { } } } - else -> AnimatedContent(targetState = onboarding, - transitionSpec = { - if (targetState > initialState) { - fromEndToStartTransition() - } else { - fromStartToEndTransition() - }.using(SizeTransform(clip = false)) - } - ) { state -> - when (state) { - OnboardingStage.OnboardingComplete -> { /* handled out of AnimatedContent block */} - OnboardingStage.Step1_SimpleXInfo -> { - SimpleXInfo(chatModel, onboarding = true) - if (appPlatform.isDesktop) { - ModalManager.fullscreen.showInView() + else -> { + if (appPlatform.isDesktop) { + DesktopOnboarding(onboarding, chatModel) + } else { + AnimatedContent(targetState = onboarding, + transitionSpec = { + if (targetState > initialState) { + fromEndToStartTransition() + } else { + fromStartToEndTransition() + }.using(SizeTransform(clip = false)) + } + ) { state -> + when (state) { + OnboardingStage.OnboardingComplete -> {} + OnboardingStage.Step1_SimpleXInfo -> SimpleXInfo(chatModel, onboarding = true) + OnboardingStage.Step2_CreateProfile -> CreateFirstProfile(chatModel) {} + OnboardingStage.LinkAMobile -> LinkAMobile() + OnboardingStage.Step2_5_SetupDatabasePassphrase -> SetupDatabasePassphrase(chatModel) + OnboardingStage.Step3_ChooseServerOperators, + OnboardingStage.Step3_CreateSimpleXAddress, + OnboardingStage.Step4_SetNotificationsMode -> YourNetworkView(chatModel) + OnboardingStage.Step4_NetworkCommitments -> OnboardingConditionsView(chatModel) } } - OnboardingStage.Step2_CreateProfile -> CreateFirstProfile(chatModel) {} - OnboardingStage.LinkAMobile -> LinkAMobile() - OnboardingStage.Step2_5_SetupDatabasePassphrase -> SetupDatabasePassphrase(chatModel) - OnboardingStage.Step3_ChooseServerOperators -> { - val modalData = remember { ModalData() } - modalData.OnboardingConditionsView() - if (appPlatform.isDesktop) { - ModalManager.fullscreen.showInView() - } - } - // Ensure backwards compatibility with old onboarding stage for address creation, otherwise notification setup would be skipped - OnboardingStage.Step3_CreateSimpleXAddress -> SetNotificationsMode(chatModel) - OnboardingStage.Step4_SetNotificationsMode -> SetNotificationsMode(chatModel) } } } @@ -276,6 +269,27 @@ fun MainScreen() { } } +@Composable +private fun DesktopOnboarding(onboarding: OnboardingStage, chatModel: ChatModel) { + if (onboarding == OnboardingStage.LinkAMobile) { + LinkAMobile() + ModalManager.fullscreen.showInView() + } else { + DesktopOnboardingShell(onboarding) { + when (onboarding) { + OnboardingStage.Step1_SimpleXInfo -> SimpleXInfo(chatModel, onboarding = true) + OnboardingStage.Step2_CreateProfile -> CreateFirstProfile(chatModel) {} + OnboardingStage.Step2_5_SetupDatabasePassphrase -> SetupDatabasePassphrase(chatModel) + OnboardingStage.Step3_ChooseServerOperators, + OnboardingStage.Step3_CreateSimpleXAddress, + OnboardingStage.Step4_SetNotificationsMode -> YourNetworkView(chatModel) + OnboardingStage.Step4_NetworkCommitments -> OnboardingConditionsView(chatModel) + else -> {} + } + } + } +} + val ANDROID_CALL_TOP_PADDING = 40.dp @Composable diff --git a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/model/SimpleXAPI.kt b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/model/SimpleXAPI.kt index 0363c4fc05..4d396c117e 100644 --- a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/model/SimpleXAPI.kt +++ b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/model/SimpleXAPI.kt @@ -213,7 +213,7 @@ class AppPreferences { val shouldImportAppSettings = mkBoolPreference(SHARED_PREFS_SHOULD_IMPORT_APP_SETTINGS, false) val currentTheme = mkStrPreference(SHARED_PREFS_CURRENT_THEME, DefaultTheme.SYSTEM_THEME_NAME) - val systemDarkTheme = mkStrPreference(SHARED_PREFS_SYSTEM_DARK_THEME, DefaultTheme.SIMPLEX.themeName) + val systemDarkTheme = mkStrPreference(SHARED_PREFS_SYSTEM_DARK_THEME, DefaultTheme.DARK.themeName) val currentThemeIds = mkMapPreference(SHARED_PREFS_CURRENT_THEME_IDs, mapOf(), encode = { json.encodeToString(MapSerializer(String.serializer(), String.serializer()), it) }, decode = { diff --git a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/platform/Core.kt b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/platform/Core.kt index 36a7ae1a80..3805a8e8b7 100644 --- a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/platform/Core.kt +++ b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/platform/Core.kt @@ -162,11 +162,7 @@ suspend fun initChatController(useKey: String? = null, confirmMigrations: Migrat } else if (startChat().await()) { val savedOnboardingStage = appPreferences.onboardingStage.get() val newStage = if (listOf(OnboardingStage.Step1_SimpleXInfo, OnboardingStage.Step2_CreateProfile).contains(savedOnboardingStage) && chatModel.users.size == 1) { - if (appPlatform.isAndroid) { - OnboardingStage.Step4_SetNotificationsMode - } else { - OnboardingStage.OnboardingComplete - } + OnboardingStage.Step4_NetworkCommitments } else { savedOnboardingStage } diff --git a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/ui/theme/Type.kt b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/ui/theme/Type.kt index 9acfffb3ac..9b0f89c36d 100644 --- a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/ui/theme/Type.kt +++ b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/ui/theme/Type.kt @@ -10,7 +10,7 @@ val Typography = Typography( h1 = TextStyle( fontFamily = Inter, fontWeight = FontWeight.Bold, - fontSize = 32.sp, + fontSize = 33.5.sp, ), h2 = TextStyle( fontFamily = Inter, diff --git a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/WelcomeView.kt b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/WelcomeView.kt index 6ec124048c..8b3a755d39 100644 --- a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/WelcomeView.kt +++ b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/WelcomeView.kt @@ -4,6 +4,7 @@ import SectionTextFooter import androidx.compose.foundation.* import androidx.compose.foundation.interaction.MutableInteractionSource import androidx.compose.foundation.layout.* +import androidx.compose.foundation.shape.RoundedCornerShape import androidx.compose.foundation.text.BasicTextField import androidx.compose.material.* import androidx.compose.material.MaterialTheme.colors @@ -11,22 +12,35 @@ import androidx.compose.runtime.* import androidx.compose.runtime.saveable.rememberSaveable import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier +import androidx.compose.ui.draw.clip +import androidx.compose.ui.draw.drawBehind import androidx.compose.ui.focus.* +import androidx.compose.ui.platform.LocalFocusManager +import androidx.compose.ui.geometry.Offset +import androidx.compose.ui.graphics.Brush import androidx.compose.ui.graphics.Color import androidx.compose.ui.graphics.SolidColor +import androidx.compose.ui.layout.ContentScale import dev.icerock.moko.resources.compose.painterResource import dev.icerock.moko.resources.compose.stringResource import androidx.compose.ui.text.TextStyle +import androidx.compose.ui.text.font.FontWeight import androidx.compose.ui.text.input.VisualTransformation import androidx.compose.ui.text.style.* import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.sp +import chat.simplex.common.BuildConfigCommon import chat.simplex.common.model.* import chat.simplex.common.model.ChatController.appPrefs import chat.simplex.common.model.ChatModel.controller import chat.simplex.common.platform.* import chat.simplex.common.ui.theme.* import chat.simplex.common.views.helpers.* +import chat.simplex.common.views.migration.MigrateToDeviceView +import chat.simplex.common.views.migration.MigrationToState +import chat.simplex.common.views.newchat.darkStops +import chat.simplex.common.views.newchat.gradientPoints +import chat.simplex.common.views.newchat.lightStops import chat.simplex.common.views.onboarding.* import chat.simplex.common.views.usersettings.SettingsActionItem import chat.simplex.res.MR @@ -127,45 +141,114 @@ fun CreateProfile(chatModel: ChatModel, close: () -> Unit) { @Composable fun CreateFirstProfile(chatModel: ChatModel, close: () -> Unit) { - val scope = rememberCoroutineScope() - val scrollState = rememberScrollState() - val keyboardState by getKeyboardState() - var savedKeyboardState by remember { mutableStateOf(keyboardState) } - CompositionLocalProvider(LocalAppBarHandler provides rememberAppBarHandler()) { - ModalView({ - if (chatModel.users.none { !it.user.hidden }) { - appPrefs.onboardingStage.set(OnboardingStage.Step1_SimpleXInfo) - } else { - close() + if (appPlatform.isDesktop) { + CreateFirstProfileDesktop(chatModel, close) + } else { + CreateFirstProfileMobile(chatModel, close) + } +} + +@Composable +private fun RowScope.MigrateButton(refocusTrigger: MutableState) { + val focusManager = LocalFocusManager.current + TextButton( + onClick = { + focusManager.clearFocus() + if (chatModel.migrationState.value == null) { + chatModel.migrationState.value = MigrationToState.PasteOrScanLink } - }) { - ColumnWithScrollBar { - val displayName = rememberSaveable { mutableStateOf("") } - val focusRequester = remember { FocusRequester() } - Column(if (appPlatform.isAndroid) Modifier.fillMaxSize().padding(start = DEFAULT_ONBOARDING_HORIZONTAL_PADDING * 2, end = DEFAULT_ONBOARDING_HORIZONTAL_PADDING * 2, bottom = DEFAULT_PADDING) else Modifier.widthIn(max = 600.dp).fillMaxHeight().padding(horizontal = DEFAULT_PADDING).align(Alignment.CenterHorizontally), horizontalAlignment = Alignment.CenterHorizontally) { - Box(Modifier.align(Alignment.CenterHorizontally)) { - AppBarTitle(stringResource(MR.strings.create_your_profile), bottomPadding = DEFAULT_PADDING, withPadding = false) - } - ReadableText(MR.strings.your_profile_is_stored_on_your_device, TextAlign.Center, padding = PaddingValues(), style = MaterialTheme.typography.body1.copy(color = MaterialTheme.colors.secondary)) - Spacer(Modifier.height(DEFAULT_PADDING)) - ReadableText(MR.strings.profile_is_only_shared_with_your_contacts, TextAlign.Center, style = MaterialTheme.typography.body1.copy(color = MaterialTheme.colors.secondary)) - Spacer(Modifier.height(DEFAULT_PADDING)) - ProfileNameField(displayName, stringResource(MR.strings.display_name), { it.trim() == mkValidName(it) }, focusRequester) + ModalManager.fullscreen.showCustomModal(animated = false, forceAnimated = appPlatform.isDesktop) { close -> + MigrateToDeviceView { + close() + refocusTrigger.value++ } - Spacer(Modifier.fillMaxHeight().weight(1f)) - Column(Modifier.widthIn(max = if (appPlatform.isAndroid) 450.dp else 1000.dp).align(Alignment.CenterHorizontally), horizontalAlignment = Alignment.CenterHorizontally) { + } + }, + modifier = Modifier.padding(end = DEFAULT_PADDING_HALF) + ) { + Icon(painterResource(MR.images.ic_download), null, Modifier.size(22.dp), tint = MaterialTheme.colors.primary) + Spacer(Modifier.width(4.dp)) + Text( + stringResource(if (appPlatform.isDesktop) MR.strings.migrate_from_another_device else MR.strings.migrate), + color = MaterialTheme.colors.primary, fontWeight = FontWeight.Medium + ) + } +} + +private fun onboardingBackAction(chatModel: ChatModel, close: () -> Unit) { + if (chatModel.users.none { !it.user.hidden }) { + appPrefs.onboardingStage.set(OnboardingStage.Step1_SimpleXInfo) + } else { + close() + } +} + +@Composable +private fun CreateFirstProfileMobile(chatModel: ChatModel, close: () -> Unit) { + CompositionLocalProvider(LocalAppBarHandler provides rememberAppBarHandler()) { + val focusRequester = remember { FocusRequester() } + val refocusTrigger = remember { mutableStateOf(0) } + ModalView( + close = { onboardingBackAction(chatModel, close) }, + endButtons = { MigrateButton(refocusTrigger) } + ) { + val displayName = rememberSaveable { mutableStateOf("") } + val keyboardState by getKeyboardState() + val imageHeightModifier = if (keyboardState == KeyboardState.Opened) { + Modifier.heightIn(max = 100.dp) + } else { + Modifier + } + ColumnWithScrollBar(Modifier.padding(horizontal = DEFAULT_ONBOARDING_HORIZONTAL_PADDING), horizontalAlignment = Alignment.CenterHorizontally, maxIntrinsicSize = true) { + Spacer(Modifier.weight(1f)) + + OnboardingImage( + MR.images.your_profile, MR.images.your_profile_light, MR.images.ic_person, + modifier = Modifier + .then(if (keyboardState != KeyboardState.Opened) Modifier.fillMaxWidth() else Modifier) + .then(imageHeightModifier) + ) + + Text( + stringResource(MR.strings.onboarding_your_profile), + style = MaterialTheme.typography.h1, + fontWeight = FontWeight.Bold, + textAlign = TextAlign.Center, + modifier = Modifier.padding(top = DEFAULT_PADDING_HALF) + ) + Text( + stringResource(MR.strings.onboarding_on_your_phone), + style = MaterialTheme.typography.h3, + fontWeight = FontWeight.Medium, + color = MaterialTheme.colors.secondary, + lineHeight = 25.sp, + textAlign = TextAlign.Center, + modifier = Modifier.padding(top = 14.dp) + ) + Text( + stringResource(MR.strings.onboarding_no_account), + style = MaterialTheme.typography.body2, + color = MaterialTheme.colors.secondary, + textAlign = TextAlign.Center, + lineHeight = 20.sp, + modifier = Modifier.padding(top = DEFAULT_PADDING_HALF) + ) + Spacer(Modifier.height(DEFAULT_PADDING_HALF)) + ProfileNameField(displayName, stringResource(MR.strings.enter_profile_name), { it.trim() == mkValidName(it) }, focusRequester) + + Spacer(Modifier.weight(1f)) + + Column(Modifier.widthIn(max = 450.dp).padding(bottom = DEFAULT_PADDING * 2).align(Alignment.CenterHorizontally), horizontalAlignment = Alignment.CenterHorizontally) { OnboardingActionButton( - if (appPlatform.isAndroid) Modifier.padding(horizontal = DEFAULT_ONBOARDING_HORIZONTAL_PADDING).fillMaxWidth() else Modifier.widthIn(min = 300.dp), - labelId = MR.strings.create_profile_button, + Modifier.fillMaxWidth(), + labelId = MR.strings.create_profile, onboarding = null, enabled = canCreateProfile(displayName.value), - onclick = { createProfileOnboarding(chat.simplex.common.platform.chatModel, displayName.value, close) } + onclick = { createProfileOnboarding(chatModel, displayName.value, close) } ) - // Reserve space - TextButtonBelowOnboardingButton("", null) } - LaunchedEffect(Unit) { + LaunchedEffect(refocusTrigger.value) { delay(300) focusRequester.requestFocus() } @@ -173,16 +256,52 @@ fun CreateFirstProfile(chatModel: ChatModel, close: () -> Unit) { LaunchedEffect(Unit) { setLastVersionDefault(chatModel) } - if (savedKeyboardState != keyboardState) { - LaunchedEffect(keyboardState) { - scope.launch { - savedKeyboardState = keyboardState - scrollState.animateScrollTo(scrollState.maxValue) + } + } +} + +@Composable +private fun CreateFirstProfileDesktop(chatModel: ChatModel, close: () -> Unit) { + val focusRequester = remember { FocusRequester() } + val refocusTrigger = remember { mutableStateOf(0) } + val displayName = rememberSaveable { mutableStateOf("") } + CompositionLocalProvider(LocalAppBarHandler provides rememberAppBarHandler()) { + ModalView( + close = { onboardingBackAction(chatModel, close) }, + endButtons = { MigrateButton(refocusTrigger) } + ) { + ColumnWithScrollBar(horizontalAlignment = Alignment.CenterHorizontally) { + Column(Modifier.widthIn(max = 600.dp).fillMaxHeight().padding(horizontal = DEFAULT_PADDING).align(Alignment.CenterHorizontally), horizontalAlignment = Alignment.CenterHorizontally) { + Box(Modifier.align(Alignment.CenterHorizontally)) { + AppBarTitle(stringResource(MR.strings.onboarding_your_profile), bottomPadding = DEFAULT_PADDING, withPadding = false, overrideTitleColor = MaterialTheme.colors.onBackground, textAlign = TextAlign.Center, lineHeight = 42.sp) } + Text(stringResource(MR.strings.onboarding_on_your_phone), style = MaterialTheme.typography.h3, fontWeight = FontWeight.Medium, color = MaterialTheme.colors.secondary, lineHeight = 25.sp, textAlign = TextAlign.Center) + Spacer(Modifier.height(DEFAULT_PADDING)) + ReadableText(MR.strings.onboarding_no_account, TextAlign.Center, style = MaterialTheme.typography.body2.copy(color = MaterialTheme.colors.secondary)) + Spacer(Modifier.height(DEFAULT_PADDING)) + ProfileNameField(displayName, stringResource(MR.strings.enter_profile_name), { it.trim() == mkValidName(it) }, focusRequester) + } + Spacer(Modifier.fillMaxHeight().weight(1f)) + Column(Modifier.widthIn(max = 1000.dp).align(Alignment.CenterHorizontally), horizontalAlignment = Alignment.CenterHorizontally) { + OnboardingActionButton( + Modifier.widthIn(min = 300.dp), + labelId = MR.strings.create_profile, + onboarding = null, + enabled = canCreateProfile(displayName.value), + onclick = { createProfileOnboarding(chatModel, displayName.value, close) } + ) + TextButtonBelowOnboardingButton("", null) } } + LaunchedEffect(Unit) { + setLastVersionDefault(chatModel) + } } } + LaunchedEffect(refocusTrigger.value) { + delay(300) + focusRequester.requestFocus() + } } fun createProfileInNoProfileSetup(displayName: String, close: () -> Unit) { @@ -207,7 +326,7 @@ fun createProfileInProfiles(chatModel: ChatModel, displayName: String, shortDesc chatModel.currentUser.value = user if (chatModel.users.isEmpty()) { chatModel.controller.startChat(user) - chatModel.controller.appPrefs.onboardingStage.set(OnboardingStage.Step4_SetNotificationsMode) + chatModel.controller.appPrefs.onboardingStage.set(OnboardingStage.Step4_NetworkCommitments) } else { val users = chatModel.controller.listUsers(rhId) chatModel.users.clear() diff --git a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/helpers/AppBarTitle.kt b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/helpers/AppBarTitle.kt index afb557cc78..ee63846657 100644 --- a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/helpers/AppBarTitle.kt +++ b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/helpers/AppBarTitle.kt @@ -22,7 +22,10 @@ fun AppBarTitle( hostDevice: Pair? = null, withPadding: Boolean = true, bottomPadding: Dp = DEFAULT_PADDING * 1.5f + 8.dp, - enableAlphaChanges: Boolean = true + enableAlphaChanges: Boolean = true, + overrideTitleColor: Color? = null, + textAlign: TextAlign = TextAlign.Start, + lineHeight: TextUnit = TextUnit.Unspecified ) { val handler = LocalAppBarHandler.current val connection = if (enableAlphaChanges) handler?.connection else null @@ -34,10 +37,12 @@ fun AppBarTitle( } } val theme = CurrentColors.collectAsState() - val titleColor = MaterialTheme.appColors.title - val brush = if (theme.value.base == DefaultTheme.SIMPLEX) + val titleColor = overrideTitleColor ?: MaterialTheme.appColors.title + val brush = if (overrideTitleColor != null) + Brush.linearGradient(listOf(titleColor, titleColor), Offset(0f, Float.POSITIVE_INFINITY), Offset(Float.POSITIVE_INFINITY, 0f)) + else if (theme.value.base == DefaultTheme.SIMPLEX) Brush.linearGradient(listOf(titleColor.darker(0.2f), titleColor.lighter(0.35f)), Offset(0f, Float.POSITIVE_INFINITY), Offset(Float.POSITIVE_INFINITY, 0f)) - else // color is not updated when changing themes if I pass null here + else Brush.linearGradient(listOf(titleColor, titleColor), Offset(0f, Float.POSITIVE_INFINITY), Offset(Float.POSITIVE_INFINITY, 0f)) Column { Text( @@ -48,9 +53,9 @@ fun AppBarTitle( alpha = bottomTitleAlpha(connection) }, overflow = TextOverflow.Ellipsis, - style = MaterialTheme.typography.h1.copy(brush = brush), + style = MaterialTheme.typography.h1.copy(brush = brush, lineHeight = lineHeight), color = MaterialTheme.colors.primaryVariant, - textAlign = TextAlign.Start + textAlign = textAlign ) if (hostDevice != null) { Box(Modifier.padding(start = if (withPadding) DEFAULT_PADDING else 0.dp, end = if (withPadding) DEFAULT_PADDING else 0.dp).graphicsLayer { diff --git a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/helpers/ModalView.kt b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/helpers/ModalView.kt index 21520f5424..28c81fbf56 100644 --- a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/helpers/ModalView.kt +++ b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/helpers/ModalView.kt @@ -111,8 +111,8 @@ class ModalManager(private val placement: ModalPlacement? = null) { fun isLastModalOpen(id: ModalViewId): Boolean = modalViews.lastOrNull()?.id == id - fun showModal(settings: Boolean = false, showClose: Boolean = true, id: ModalViewId? = null, endButtons: @Composable RowScope.() -> Unit = {}, content: @Composable ModalData.() -> Unit) { - showCustomModal(id = id) { close -> + fun showModal(settings: Boolean = false, showClose: Boolean = true, id: ModalViewId? = null, forceAnimated: Boolean = false, endButtons: @Composable RowScope.() -> Unit = {}, content: @Composable ModalData.() -> Unit) { + showCustomModal(id = id, forceAnimated = forceAnimated) { close -> ModalView(close, showClose = showClose, endButtons = endButtons, content = { content() }) } } @@ -123,7 +123,7 @@ class ModalManager(private val placement: ModalPlacement? = null) { } } - fun showCustomModal(animated: Boolean = true, keyboardCoversBar: Boolean = true, id: ModalViewId? = null, modal: @Composable ModalData.(close: () -> Unit) -> Unit) { + fun showCustomModal(animated: Boolean = true, keyboardCoversBar: Boolean = true, id: ModalViewId? = null, forceAnimated: Boolean = false, modal: @Composable ModalData.(close: () -> Unit) -> Unit) { Log.d(TAG, "ModalManager.showCustomModal") val data = ModalData(keyboardCoversBar = keyboardCoversBar) // Means, animation is in progress or not started yet. Do not wait until animation finishes, just remove all from screen. @@ -133,7 +133,7 @@ class ModalManager(private val placement: ModalPlacement? = null) { } // Make animated appearance only on Android (everytime) and on Desktop (when it's on the start part of the screen or modals > 0) // to prevent unneeded animation on different situations - val anim = if (appPlatform.isAndroid) animated else animated && (modalCount.value > 0 || placement == ModalPlacement.START) + val anim = if (appPlatform.isAndroid) animated else (animated && (modalCount.value > 0 || placement == ModalPlacement.START)) || forceAnimated modalViews.add(ModalViewHolder(id, anim, data, modal)) _modalCount.value = modalViews.size - toRemove.size diff --git a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/onboarding/ChooseServerOperators.kt b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/onboarding/ChooseServerOperators.kt index 9c6c0fa635..2f8fc013fc 100644 --- a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/onboarding/ChooseServerOperators.kt +++ b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/onboarding/ChooseServerOperators.kt @@ -14,80 +14,160 @@ import androidx.compose.material.* import androidx.compose.runtime.* import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier +import androidx.compose.ui.draw.clip +import androidx.compose.ui.draw.drawBehind +import androidx.compose.ui.geometry.Offset +import androidx.compose.ui.graphics.Brush +import androidx.compose.ui.layout.ContentScale import androidx.compose.ui.text.TextStyle - import androidx.compose.ui.text.style.TextAlign +import androidx.compose.ui.text.font.FontWeight +import androidx.compose.ui.text.style.TextAlign import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.sp +import chat.simplex.common.BuildConfigCommon import chat.simplex.common.model.* import chat.simplex.common.model.ChatController.appPrefs import chat.simplex.common.platform.* import chat.simplex.common.ui.theme.* import chat.simplex.common.views.helpers.* +import chat.simplex.common.views.newchat.darkStops +import chat.simplex.common.views.newchat.gradientPoints +import chat.simplex.common.views.newchat.lightStops import chat.simplex.common.views.usersettings.networkAndServers.* import chat.simplex.res.MR import dev.icerock.moko.resources.compose.painterResource import dev.icerock.moko.resources.compose.stringResource @Composable -fun ModalData.OnboardingConditionsView() { +fun OnboardingConditionsView(chatModel: ChatModel) { LaunchedEffect(Unit) { prepareChatBeforeFinishingOnboarding() } - CompositionLocalProvider(LocalAppBarHandler provides rememberAppBarHandler()) { - ModalView({}, showClose = false) { - val serverOperators = remember { derivedStateOf { chatModel.conditions.value.serverOperators } } - val selectedOperatorIds = remember { stateGetOrPut("selectedOperatorIds") { serverOperators.value.filter { it.enabled }.map { it.operatorId }.toSet() } } - ColumnWithScrollBar( - Modifier - .themedBackground(bgLayerSize = LocalAppBarHandler.current?.backgroundGraphicsLayerSize, bgLayer = LocalAppBarHandler.current?.backgroundGraphicsLayer), - maxIntrinsicSize = true - ) { - Box(Modifier.align(Alignment.CenterHorizontally)) { - AppBarTitle(stringResource(MR.strings.operator_conditions_of_use), bottomPadding = DEFAULT_PADDING) - } + val serverOperators = remember { derivedStateOf { chatModel.conditions.value.serverOperators } } + val selectedOperatorIds = remember { + mutableStateOf(OnboardingSharedState.selectedOperatorIds.ifEmpty { + serverOperators.value.filter { it.enabled }.map { it.operatorId }.toSet() + }) + } - Spacer(Modifier.weight(1f)) - Column( - (if (appPlatform.isDesktop) Modifier.width(450.dp).align(Alignment.CenterHorizontally) else Modifier) - .fillMaxWidth() - .padding(horizontal = DEFAULT_ONBOARDING_HORIZONTAL_PADDING), - horizontalAlignment = Alignment.Start - ) { - Text( - stringResource(MR.strings.onboarding_conditions_private_chats_not_accessible), - style = TextStyle(fontSize = 17.sp, lineHeight = 23.sp) - ) - Spacer(Modifier.height(DEFAULT_PADDING)) - Text( - stringResource(MR.strings.onboarding_conditions_by_using_you_agree), - style = TextStyle(fontSize = 17.sp, lineHeight = 23.sp) - ) - Spacer(Modifier.height(DEFAULT_PADDING)) - Text( - stringResource(MR.strings.onboarding_conditions_privacy_policy_and_conditions_of_use), - style = TextStyle(fontSize = 17.sp), - color = MaterialTheme.colors.primary, - modifier = Modifier - .clickable( - interactionSource = remember { MutableInteractionSource() }, - indication = null + if (appPlatform.isDesktop) { + OnboardingConditionsDesktop(selectedOperatorIds) + } else { + CompositionLocalProvider(LocalAppBarHandler provides rememberAppBarHandler()) { + ModalView({}, showClose = false, showAppBar = false) { + OnboardingShrinkingLayout( + modifier = Modifier.fillMaxSize().themedBackground(bgLayerSize = LocalAppBarHandler.current?.backgroundGraphicsLayerSize, bgLayer = LocalAppBarHandler.current?.backgroundGraphicsLayer) + .systemBarsPadding() + .padding(horizontal = DEFAULT_ONBOARDING_HORIZONTAL_PADDING), + topPadding = DEFAULT_PADDING, + image = { + Column(Modifier.padding(vertical = DEFAULT_PADDING_HALF), horizontalAlignment = Alignment.CenterHorizontally) { + OnboardingImage( + MR.images.network_commitments, MR.images.network_commitments_light, MR.images.ic_shield, + modifier = Modifier.fillMaxWidth(), + aspectRatio = 1.5f + ) + } + }, + content = { + Column(horizontalAlignment = Alignment.CenterHorizontally) { + Text( + stringResource(MR.strings.onboarding_network_commitments), + style = MaterialTheme.typography.h1, + fontWeight = FontWeight.Bold, + textAlign = TextAlign.Center, + lineHeight = 42.sp, + modifier = Modifier.padding(top = DEFAULT_PADDING_HALF) + ) + Column( + Modifier.fillMaxWidth() + .padding(horizontal = DEFAULT_PADDING_HALF) + .padding(top = DEFAULT_PADDING), + horizontalAlignment = Alignment.Start ) { - ModalManager.fullscreen.showModal(endButtons = { ConditionsLinkButton() }) { - SimpleConditionsView(rhId = null) - } + Text( + stringResource(MR.strings.onboarding_conditions_private_chats_not_accessible), + style = MaterialTheme.typography.body1, + lineHeight = 22.sp + ) + Spacer(Modifier.height(DEFAULT_PADDING)) + Text( + stringResource(MR.strings.onboarding_conditions_by_using_you_agree), + style = MaterialTheme.typography.body1, + lineHeight = 22.sp + ) + Spacer(Modifier.height(DEFAULT_PADDING)) + Text( + stringResource(MR.strings.onboarding_conditions_privacy_policy_and_conditions_of_use), + style = MaterialTheme.typography.body2, + fontWeight = FontWeight.Medium, + color = MaterialTheme.colors.primary, + modifier = Modifier + .clickable( + interactionSource = remember { MutableInteractionSource() }, + indication = null + ) { + ModalManager.fullscreen.showModal(endButtons = { ConditionsLinkButton() }) { + SimpleConditionsView(rhId = null) { + ModalManager.fullscreen.closeModal() + acceptConditions(selectedOperatorIds.value) + } + } + } + ) } - ) - } - Spacer(Modifier.weight(1f)) - - Column(Modifier.widthIn(max = if (appPlatform.isAndroid) 450.dp else 1000.dp).align(Alignment.CenterHorizontally), horizontalAlignment = Alignment.CenterHorizontally) { - AcceptConditionsButton(enabled = selectedOperatorIds.value.isNotEmpty(), selectedOperatorIds) - TextButtonBelowOnboardingButton(stringResource(MR.strings.onboarding_conditions_configure_server_operators)) { - ModalManager.fullscreen.showModalCloseable { close -> - ChooseServerOperators(serverOperators, selectedOperatorIds, close) + } + }, + button = { + Column(Modifier.widthIn(max = 450.dp).padding(bottom = DEFAULT_PADDING * 2), horizontalAlignment = Alignment.CenterHorizontally) { + AcceptConditionsButton(enabled = selectedOperatorIds.value.isNotEmpty(), selectedOperatorIds) } } + ) + } + } + } +} + +@Composable +private fun OnboardingConditionsDesktop(selectedOperatorIds: MutableState>) { + CompositionLocalProvider(LocalAppBarHandler provides rememberAppBarHandler()) { + ModalView({}, showClose = false) { + ColumnWithScrollBar(horizontalAlignment = Alignment.CenterHorizontally) { + Column(Modifier.widthIn(max = 600.dp).fillMaxHeight().padding(horizontal = DEFAULT_PADDING).align(Alignment.CenterHorizontally), horizontalAlignment = Alignment.CenterHorizontally) { + Box(Modifier.align(Alignment.CenterHorizontally)) { + AppBarTitle(stringResource(MR.strings.onboarding_network_commitments), bottomPadding = DEFAULT_PADDING, withPadding = false, overrideTitleColor = MaterialTheme.colors.onBackground, textAlign = TextAlign.Center, lineHeight = 42.sp) + } + Column(Modifier.width(450.dp), horizontalAlignment = Alignment.Start) { + ReadableText(MR.strings.onboarding_conditions_private_chats_not_accessible, TextAlign.Start, padding = PaddingValues(), style = MaterialTheme.typography.body1) + Spacer(Modifier.height(DEFAULT_PADDING)) + ReadableText(MR.strings.onboarding_conditions_by_using_you_agree, TextAlign.Start, padding = PaddingValues(), style = MaterialTheme.typography.body1) + Spacer(Modifier.height(DEFAULT_PADDING)) + Text( + stringResource(MR.strings.onboarding_conditions_privacy_policy_and_conditions_of_use), + style = MaterialTheme.typography.body1, + fontWeight = FontWeight.Medium, + color = MaterialTheme.colors.primary, + modifier = Modifier + .clickable( + interactionSource = remember { MutableInteractionSource() }, + indication = null + ) { + ModalManager.fullscreen.showModal(forceAnimated = true, endButtons = { ConditionsLinkButton() }) { + SimpleConditionsView(rhId = null) { + ModalManager.fullscreen.closeModal() + acceptConditions(selectedOperatorIds.value) + } + } + } + ) + } + } + Spacer(Modifier.fillMaxHeight().weight(1f)) + Column(Modifier.widthIn(max = 1000.dp).align(Alignment.CenterHorizontally), horizontalAlignment = Alignment.CenterHorizontally) { + AcceptConditionsButton(enabled = selectedOperatorIds.value.isNotEmpty(), selectedOperatorIds) + TextButtonBelowOnboardingButton("", null) } } } @@ -104,7 +184,7 @@ fun ModalData.ChooseServerOperators( prepareChatBeforeFinishingOnboarding() } CompositionLocalProvider(LocalAppBarHandler provides rememberAppBarHandler()) { - ModalView({}, showClose = false) { + ModalView(close, enableClose = selectedOperatorIds.value.isNotEmpty()) { ColumnWithScrollBar( Modifier .themedBackground(bgLayerSize = LocalAppBarHandler.current?.backgroundGraphicsLayerSize, bgLayer = LocalAppBarHandler.current?.backgroundGraphicsLayer), @@ -141,11 +221,9 @@ fun ModalData.ChooseServerOperators( } Spacer(Modifier.weight(1f)) - Column(Modifier.widthIn(max = if (appPlatform.isAndroid) 450.dp else 1000.dp).align(Alignment.CenterHorizontally), horizontalAlignment = Alignment.CenterHorizontally) { + Column(Modifier.widthIn(max = if (appPlatform.isAndroid) 450.dp else 1000.dp).padding(bottom = DEFAULT_PADDING * 2).align(Alignment.CenterHorizontally), horizontalAlignment = Alignment.CenterHorizontally) { val enabled = selectedOperatorIds.value.isNotEmpty() SetOperatorsButton(enabled, close) - // Reserve space - TextButtonBelowOnboardingButton("", null) } } } @@ -212,52 +290,42 @@ private fun SetOperatorsButton(enabled: Boolean, close: () -> Unit) { ) } +private fun acceptConditions(selectedOperatorIds: Set) { + withBGApi { + val conditionsId = chatModel.conditions.value.currentConditions.conditionsId + val r = chatController.acceptConditions(chatModel.remoteHostId(), conditionsId = conditionsId, operatorIds = selectedOperatorIds.toList()) + if (r != null) { + chatModel.conditions.value = r + val enabledOps = enabledOperators(r.serverOperators, selectedOperatorIds) + if (enabledOps != null) { + val r2 = chatController.setServerOperators(rh = chatModel.remoteHostId(), operators = enabledOps) + if (r2 != null) { + chatModel.conditions.value = r2 + completeOnboarding() + } + } else { + completeOnboarding() + } + } + } +} + @Composable private fun AcceptConditionsButton( enabled: Boolean, selectedOperatorIds: State> ) { - fun continueOnAccept() { - if (appPlatform.isDesktop) { - continueToNextStep() - } else { - continueToSetNotificationsAfterAccept() - } - } OnboardingActionButton( modifier = if (appPlatform.isAndroid) Modifier.padding(horizontal = DEFAULT_ONBOARDING_HORIZONTAL_PADDING).fillMaxWidth() else Modifier.widthIn(min = 300.dp), labelId = MR.strings.onboarding_conditions_accept, onboarding = null, enabled = enabled, - onclick = { - withBGApi { - val conditionsId = chatModel.conditions.value.currentConditions.conditionsId - val r = chatController.acceptConditions(chatModel.remoteHostId(), conditionsId = conditionsId, operatorIds = selectedOperatorIds.value.toList()) - if (r != null) { - chatModel.conditions.value = r - val enabledOperators = enabledOperators(r.serverOperators, selectedOperatorIds.value) - if (enabledOperators != null) { - val r2 = chatController.setServerOperators(rh = chatModel.remoteHostId(), operators = enabledOperators) - if (r2 != null) { - chatModel.conditions.value = r2 - continueOnAccept() - } - } else { - continueOnAccept() - } - } - } - } + onclick = { acceptConditions(selectedOperatorIds.value) } ) } -private fun continueToNextStep() { - appPrefs.onboardingStage.set(if (appPlatform.isAndroid) OnboardingStage.Step4_SetNotificationsMode else OnboardingStage.OnboardingComplete) -} - -private fun continueToSetNotificationsAfterAccept() { - appPrefs.onboardingStage.set(OnboardingStage.Step4_SetNotificationsMode) - ModalManager.fullscreen.showModalCloseable(showClose = false) { SetNotificationsMode(chatModel) } +private fun completeOnboarding() { + appPrefs.onboardingStage.set(OnboardingStage.OnboardingComplete) } private fun enabledOperators(operators: List, selectedOperatorIds: Set): List? { diff --git a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/onboarding/HowItWorks.kt b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/onboarding/HowItWorks.kt index 2b92d35e72..703d295523 100644 --- a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/onboarding/HowItWorks.kt +++ b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/onboarding/HowItWorks.kt @@ -1,8 +1,7 @@ package chat.simplex.common.views.onboarding import androidx.compose.desktop.ui.tooling.preview.Preview -import androidx.compose.foundation.background -import androidx.compose.foundation.clickable +import androidx.compose.foundation.* import androidx.compose.foundation.layout.* import androidx.compose.material.* import androidx.compose.runtime.* @@ -15,7 +14,7 @@ import androidx.compose.ui.text.style.TextAlign import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.sp import chat.simplex.common.model.* -import chat.simplex.common.platform.ColumnWithScrollBar +import chat.simplex.common.platform.* import chat.simplex.common.ui.theme.* import chat.simplex.common.views.chat.item.MarkdownText import chat.simplex.common.views.helpers.* @@ -24,21 +23,26 @@ import dev.icerock.moko.resources.StringResource @Composable fun HowItWorks(user: User?, onboardingStage: SharedPreference? = null) { - ColumnWithScrollBar(Modifier.padding(horizontal = DEFAULT_PADDING)) { - AppBarTitle(stringResource(MR.strings.how_simplex_works), withPadding = false) - ReadableText(MR.strings.to_protect_privacy_simplex_has_ids_for_queues) - ReadableText(MR.strings.only_client_devices_store_contacts_groups_e2e_encrypted_messages) - ReadableText(MR.strings.all_message_and_files_e2e_encrypted) - if (onboardingStage == null) { - ReadableTextWithLink(MR.strings.read_more_in_github_with_link, "https://github.com/simplex-chat/simplex-chat#readme") + Column(Modifier.fillMaxSize().padding(horizontal = if (appPlatform.isDesktop) DEFAULT_PADDING * 2 else DEFAULT_PADDING)) { + Spacer(Modifier.statusBarsPadding().padding(top = AppBarHeight * fontSizeSqrtMultiplier)) + val paraPadding = PaddingValues(bottom = if (appPlatform.isDesktop) 10.dp else 12.dp) + Column(Modifier.weight(1f).padding(bottom = DEFAULT_PADDING).verticalScroll(rememberScrollState())) { + Text(stringResource(MR.strings.why_built_heading), style = MaterialTheme.typography.h1, modifier = Modifier.padding(bottom = DEFAULT_PADDING)) + ReadableText(MR.strings.why_built_p1, padding = paraPadding) + ReadableText(MR.strings.why_built_p2, padding = paraPadding) + ReadableText(MR.strings.why_built_p3, padding = paraPadding) + ReadableText(MR.strings.why_built_p4, padding = paraPadding) + ReadableText(MR.strings.why_built_p5, padding = paraPadding) + ReadableText(MR.strings.why_built_p6, padding = paraPadding) + ReadableText(MR.strings.why_built_p7, padding = paraPadding) + ReadableText(MR.strings.why_built_tagline, padding = paraPadding) } - - Spacer(Modifier.fillMaxHeight().weight(1f)) - if (onboardingStage != null) { - Column(Modifier.fillMaxWidth(), horizontalAlignment = Alignment.CenterHorizontally) { + Column( + Modifier.widthIn(max = if (appPlatform.isAndroid) 450.dp else 1000.dp).align(Alignment.CenterHorizontally), + horizontalAlignment = Alignment.CenterHorizontally + ) { OnboardingActionButton(user, onboardingStage, onclick = { ModalManager.fullscreen.closeModal() }) - // Reserve space TextButtonBelowOnboardingButton("", null) } } diff --git a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/onboarding/LinkAMobileView.kt b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/onboarding/LinkAMobileView.kt index 9e48f4b2bd..e902b7947e 100644 --- a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/onboarding/LinkAMobileView.kt +++ b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/onboarding/LinkAMobileView.kt @@ -3,6 +3,7 @@ package chat.simplex.common.views.onboarding import SectionTextFooter import SectionView import androidx.compose.foundation.layout.* +import androidx.compose.material.MaterialTheme import androidx.compose.runtime.* import androidx.compose.runtime.saveable.rememberSaveable import androidx.compose.ui.Alignment @@ -57,7 +58,7 @@ private fun LinkAMobileLayout( ModalView({ appPrefs.onboardingStage.set(OnboardingStage.Step1_SimpleXInfo) }) { Column(Modifier.fillMaxSize().padding(top = AppBarHeight * fontSizeSqrtMultiplier)) { Box(Modifier.align(Alignment.CenterHorizontally)) { - AppBarTitle(stringResource(if (remember { chatModel.remoteHosts }.isEmpty()) MR.strings.link_a_mobile else MR.strings.linked_mobiles)) + AppBarTitle(stringResource(if (remember { chatModel.remoteHosts }.isEmpty()) MR.strings.link_a_mobile else MR.strings.linked_mobiles), overrideTitleColor = MaterialTheme.colors.onBackground) } Row(Modifier.weight(1f).padding(horizontal = DEFAULT_PADDING * 2), verticalAlignment = Alignment.CenterVertically) { Column( diff --git a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/onboarding/OnboardingLayout.kt b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/onboarding/OnboardingLayout.kt new file mode 100644 index 0000000000..684bfb0053 --- /dev/null +++ b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/onboarding/OnboardingLayout.kt @@ -0,0 +1,161 @@ +package chat.simplex.common.views.onboarding + +import androidx.compose.foundation.Image +import androidx.compose.foundation.background +import androidx.compose.foundation.layout.* +import androidx.compose.foundation.shape.RoundedCornerShape +import androidx.compose.material.Divider +import androidx.compose.material.Icon +import androidx.compose.material.MaterialTheme +import androidx.compose.runtime.Composable +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.draw.clip +import androidx.compose.ui.draw.clipToBounds +import androidx.compose.ui.draw.drawBehind +import androidx.compose.ui.geometry.Offset +import androidx.compose.ui.graphics.Brush +import androidx.compose.ui.layout.* +import androidx.compose.ui.unit.Dp +import androidx.compose.ui.unit.dp +import chat.simplex.common.BuildConfigCommon +import chat.simplex.common.ui.theme.DEFAULT_PADDING +import chat.simplex.common.ui.theme.isInDarkTheme +import chat.simplex.common.views.helpers.ModalManager +import chat.simplex.common.views.helpers.mixWith +import chat.simplex.common.views.newchat.darkStops +import chat.simplex.common.views.newchat.gradientPoints +import chat.simplex.common.views.newchat.lightStops +import chat.simplex.res.MR +import dev.icerock.moko.resources.ImageResource +import dev.icerock.moko.resources.compose.painterResource + +/** + * A layout for onboarding screens: image + content + spacer + button. + * The spacer shrinks first (down to [minSpacerHeight]), then the image shrinks. + * Button is always at the bottom. + */ +@Composable +fun OnboardingShrinkingLayout( + modifier: Modifier = Modifier, + topPadding: Dp = 0.dp, + minSpacerHeight: Dp = 20.dp, + image: @Composable () -> Unit, + content: @Composable () -> Unit, + button: @Composable () -> Unit +) { + Layout( + contents = listOf(image, content, button), + modifier = modifier + ) { (imageMeasurables, contentMeasurables, buttonMeasurables), constraints -> + val width = constraints.maxWidth + val height = constraints.maxHeight + val childConstraints = constraints.copy(minWidth = 0, minHeight = 0) + + // 1. Measure fixed content (texts) and button first + val contentPlaceable = contentMeasurables.first().measure(childConstraints) + val buttonPlaceable = buttonMeasurables.first().measure(childConstraints) + val minSpacer = minSpacerHeight.roundToPx() + + // 2. Image gets remaining after top padding + content + button + minimum spacer + val topPad = topPadding.roundToPx() + val reservedHeight = topPad + contentPlaceable.height + buttonPlaceable.height + minSpacer + val imageMaxHeight = (height - reservedHeight).coerceAtLeast(0) + val imagePlaceable = imageMeasurables.first().measure( + childConstraints.copy(maxWidth = width, maxHeight = imageMaxHeight) + ) + + // 3. Spacer fills whatever is left between content and button + val usedHeight = topPad + imagePlaceable.height + contentPlaceable.height + buttonPlaceable.height + val spacerHeight = (height - usedHeight).coerceAtLeast(minSpacer) + + // 4. Place: image centered horizontally, rest below + layout(width, height) { + var y = topPad + imagePlaceable.placeRelative((width - imagePlaceable.width) / 2, y) + y += imagePlaceable.height + contentPlaceable.placeRelative((width - contentPlaceable.width) / 2, y) + y += contentPlaceable.height + y += spacerHeight + buttonPlaceable.placeRelative((width - buttonPlaceable.width) / 2, y) + } + } +} + +@Composable +fun OnboardingImage( + lightImage: ImageResource, + darkImage: ImageResource, + fallbackIcon: ImageResource, + modifier: Modifier = Modifier, + aspectRatio: Float = 1f +) { + if (BuildConfigCommon.SIMPLEX_ASSETS) { + Image( + painterResource(if (isInDarkTheme()) darkImage else lightImage), + contentDescription = null, + contentScale = ContentScale.Fit, + modifier = Modifier.fillMaxWidth().then(modifier) + ) + } else { + val isDark = isInDarkTheme() + val stops = if (isDark) darkStops else lightStops + val scale = if (isDark) 1.5f else 1.2f + Box( + modifier + .aspectRatio(aspectRatio) + .clip(RoundedCornerShape(24.dp)) + .drawBehind { + val gp = gradientPoints(size.height / size.width, scale) + drawRect( + Brush.linearGradient( + colorStops = stops, + start = Offset(gp.startX * size.width, gp.startY * size.height), + end = Offset(gp.endX * size.width, gp.endY * size.height) + ) + ) + }, + contentAlignment = Alignment.Center + ) { + Icon( + painterResource(fallbackIcon), + contentDescription = null, + modifier = Modifier.size(80.dp), + tint = MaterialTheme.colors.primary + ) + } + } +} + +@Composable +fun DesktopOnboardingShell(stage: OnboardingStage, content: @Composable () -> Unit) { + Row(Modifier.fillMaxSize()) { + Box( + Modifier.weight(0.382f).fillMaxHeight() + .background(MaterialTheme.colors.background.mixWith(MaterialTheme.colors.onBackground, 0.985f)) + .padding(horizontal = DEFAULT_PADDING), + contentAlignment = Alignment.Center + ) { + when (stage) { + OnboardingStage.Step1_SimpleXInfo -> + OnboardingImage(MR.images.intro, MR.images.intro_light, MR.images.ic_forum, Modifier.fillMaxWidth()) + OnboardingStage.Step2_CreateProfile, + OnboardingStage.Step2_5_SetupDatabasePassphrase, + OnboardingStage.LinkAMobile -> + OnboardingImage(MR.images.your_profile, MR.images.your_profile_light, MR.images.ic_person, Modifier.fillMaxWidth()) + OnboardingStage.Step3_ChooseServerOperators, + OnboardingStage.Step3_CreateSimpleXAddress, + OnboardingStage.Step4_SetNotificationsMode -> + OnboardingImage(MR.images.your_network, MR.images.your_network_light, MR.images.ic_dns, Modifier.fillMaxWidth()) + OnboardingStage.Step4_NetworkCommitments -> + OnboardingImage(MR.images.network_commitments, MR.images.network_commitments_light, MR.images.ic_shield, Modifier.fillMaxWidth(), aspectRatio = 1.5f) + else -> {} + } + } + Divider(Modifier.fillMaxHeight().width(1.dp)) + Box(Modifier.weight(0.618f).fillMaxHeight().clipToBounds()) { + content() + ModalManager.fullscreen.showInView() + } + } +} diff --git a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/onboarding/OnboardingView.kt b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/onboarding/OnboardingView.kt index 510df13c3d..7af364b855 100644 --- a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/onboarding/OnboardingView.kt +++ b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/onboarding/OnboardingView.kt @@ -6,7 +6,8 @@ enum class OnboardingStage { LinkAMobile, Step2_5_SetupDatabasePassphrase, Step3_ChooseServerOperators, - Step3_CreateSimpleXAddress, - Step4_SetNotificationsMode, + Step3_CreateSimpleXAddress, // deprecated + Step4_SetNotificationsMode, // deprecated + Step4_NetworkCommitments, OnboardingComplete } diff --git a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/onboarding/SetNotificationsMode.kt b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/onboarding/SetNotificationsMode.kt index 84f473067f..adcfb8b194 100644 --- a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/onboarding/SetNotificationsMode.kt +++ b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/onboarding/SetNotificationsMode.kt @@ -5,8 +5,8 @@ import androidx.compose.foundation.layout.* import androidx.compose.foundation.shape.RoundedCornerShape import androidx.compose.material.* import androidx.compose.runtime.* -import androidx.compose.runtime.saveable.rememberSaveable import androidx.compose.ui.Alignment +import androidx.compose.ui.graphics.painter.Painter import androidx.compose.ui.Modifier import androidx.compose.ui.text.AnnotatedString import dev.icerock.moko.resources.compose.stringResource @@ -14,27 +14,21 @@ import androidx.compose.ui.text.font.FontWeight import androidx.compose.ui.text.style.TextAlign import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.sp -import chat.simplex.common.model.ChatModel import chat.simplex.common.model.NotificationsMode import chat.simplex.common.platform.* import chat.simplex.common.ui.theme.* import chat.simplex.common.views.helpers.* -import chat.simplex.common.views.usersettings.changeNotificationsMode import chat.simplex.res.MR +import dev.icerock.moko.resources.compose.painterResource @Composable -fun SetNotificationsMode(m: ChatModel) { - LaunchedEffect(Unit) { - prepareChatBeforeFinishingOnboarding() - } - +fun SetNotificationsMode(currentMode: MutableState, onDone: () -> Unit) { CompositionLocalProvider(LocalAppBarHandler provides rememberAppBarHandler()) { ModalView({}, showClose = false) { ColumnWithScrollBar(Modifier.themedBackground(bgLayerSize = LocalAppBarHandler.current?.backgroundGraphicsLayerSize, bgLayer = LocalAppBarHandler.current?.backgroundGraphicsLayer)) { Box(Modifier.align(Alignment.CenterHorizontally)) { AppBarTitle(stringResource(MR.strings.onboarding_notifications_mode_title), bottomPadding = DEFAULT_PADDING) } - val currentMode = rememberSaveable { mutableStateOf(NotificationsMode.default) } Column(Modifier.padding(horizontal = DEFAULT_ONBOARDING_HORIZONTAL_PADDING).fillMaxWidth(), horizontalAlignment = Alignment.CenterHorizontally) { OnboardingInformationButton( stringResource(MR.strings.onboarding_notifications_mode_subtitle), @@ -43,34 +37,28 @@ fun SetNotificationsMode(m: ChatModel) { } Spacer(Modifier.weight(1f)) Column(Modifier.padding(horizontal = DEFAULT_ONBOARDING_HORIZONTAL_PADDING)) { - SelectableCard(currentMode, NotificationsMode.SERVICE, stringResource(MR.strings.onboarding_notifications_mode_service), annotatedStringResource(MR.strings.onboarding_notifications_mode_service_desc_short)) { + SelectableCard(currentMode, NotificationsMode.SERVICE, stringResource(MR.strings.onboarding_notifications_mode_service), annotatedStringResource(MR.strings.onboarding_notifications_mode_service_desc_short), icon = painterResource(MR.images.ic_bolt)) { currentMode.value = NotificationsMode.SERVICE } - SelectableCard(currentMode, NotificationsMode.PERIODIC, stringResource(MR.strings.onboarding_notifications_mode_periodic), annotatedStringResource(MR.strings.onboarding_notifications_mode_periodic_desc_short)) { + SelectableCard(currentMode, NotificationsMode.PERIODIC, stringResource(MR.strings.onboarding_notifications_mode_periodic), annotatedStringResource(MR.strings.onboarding_notifications_mode_periodic_desc_short), icon = painterResource(MR.images.ic_timer)) { currentMode.value = NotificationsMode.PERIODIC } - SelectableCard(currentMode, NotificationsMode.OFF, stringResource(MR.strings.onboarding_notifications_mode_off), annotatedStringResource(MR.strings.onboarding_notifications_mode_off_desc_short)) { + SelectableCard(currentMode, NotificationsMode.OFF, stringResource(MR.strings.onboarding_notifications_mode_off), annotatedStringResource(MR.strings.onboarding_notifications_mode_off_desc_short), icon = painterResource(MR.images.ic_bolt_off)) { currentMode.value = NotificationsMode.OFF } } Spacer(Modifier.weight(1f)) - Column(Modifier.widthIn(max = if (appPlatform.isAndroid) 450.dp else 1000.dp).align(Alignment.CenterHorizontally), horizontalAlignment = Alignment.CenterHorizontally) { + Column(Modifier.widthIn(max = if (appPlatform.isAndroid) 450.dp else 1000.dp).padding(bottom = DEFAULT_PADDING * 2).align(Alignment.CenterHorizontally), horizontalAlignment = Alignment.CenterHorizontally) { OnboardingActionButton( modifier = if (appPlatform.isAndroid) Modifier.padding(horizontal = DEFAULT_ONBOARDING_HORIZONTAL_PADDING).fillMaxWidth() else Modifier, - labelId = MR.strings.use_chat, - onboarding = OnboardingStage.OnboardingComplete, - onclick = { - changeNotificationsMode(currentMode.value, m) - ModalManager.fullscreen.closeModals() - } + labelId = MR.strings.ok, + onboarding = null, + onclick = onDone ) - // Reserve space - TextButtonBelowOnboardingButton("", null) } } } } - SetNotificationsModeAdditions() } @Composable @@ -78,20 +66,31 @@ expect fun SetNotificationsModeAdditions() @Composable fun SelectableCard(currentValue: State, newValue: T, title: String, description: AnnotatedString, onSelected: (T) -> Unit) { + SelectableCard(currentValue, newValue, title, description, icon = null, onSelected) +} + +@Composable +fun SelectableCard(currentValue: State, newValue: T, title: String, description: AnnotatedString, icon: Painter?, onSelected: (T) -> Unit) { + val titleColor = if (currentValue.value == newValue) MaterialTheme.colors.primary else MaterialTheme.colors.secondary TextButton( onClick = { onSelected(newValue) }, border = BorderStroke(1.dp, color = if (currentValue.value == newValue) MaterialTheme.colors.primary else MaterialTheme.colors.secondary.copy(alpha = 0.5f)), shape = RoundedCornerShape(35.dp), ) { Column(Modifier.padding(horizontal = 10.dp).padding(top = 4.dp, bottom = 8.dp).fillMaxWidth()) { - Text( - title, - style = MaterialTheme.typography.h3, - fontWeight = FontWeight.Medium, - color = if (currentValue.value == newValue) MaterialTheme.colors.primary else MaterialTheme.colors.secondary, - modifier = Modifier.padding(bottom = 8.dp).align(Alignment.CenterHorizontally), - textAlign = TextAlign.Center - ) + Row(verticalAlignment = Alignment.CenterVertically, modifier = Modifier.padding(bottom = 8.dp).align(Alignment.CenterHorizontally)) { + if (icon != null) { + Icon(icon, null, Modifier.size(18.dp), tint = titleColor) + Spacer(Modifier.width(8.dp)) + } + Text( + title, + style = MaterialTheme.typography.h3, + fontWeight = FontWeight.Medium, + color = titleColor, + textAlign = TextAlign.Center + ) + } Text(description, Modifier.align(Alignment.CenterHorizontally), fontSize = 15.sp, @@ -105,7 +104,7 @@ fun SelectableCard(currentValue: State, newValue: T, title: String, descr } @Composable -private fun NotificationBatteryUsageInfo() { +fun NotificationBatteryUsageInfo() { ColumnWithScrollBar(Modifier.padding(DEFAULT_PADDING)) { AppBarTitle(stringResource(MR.strings.onboarding_notifications_mode_battery), withPadding = false) Text(stringResource(MR.strings.onboarding_notifications_mode_service), style = MaterialTheme.typography.h3, color = MaterialTheme.colors.secondary) diff --git a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/onboarding/SetupDatabasePassphrase.kt b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/onboarding/SetupDatabasePassphrase.kt index c6eceb0ce2..9ef72a7f12 100644 --- a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/onboarding/SetupDatabasePassphrase.kt +++ b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/onboarding/SetupDatabasePassphrase.kt @@ -107,7 +107,7 @@ private fun SetupDatabasePassphraseLayout( Modifier.themedBackground(bgLayerSize = LocalAppBarHandler.current?.backgroundGraphicsLayerSize, bgLayer = LocalAppBarHandler.current?.backgroundGraphicsLayer).padding(horizontal = DEFAULT_PADDING), horizontalAlignment = Alignment.CenterHorizontally, ) { - AppBarTitle(stringResource(MR.strings.setup_database_passphrase)) + AppBarTitle(stringResource(MR.strings.setup_database_passphrase), overrideTitleColor = MaterialTheme.colors.onBackground) val onClickUpdate = { // Don't do things concurrently. Shouldn't be here concurrently, just in case diff --git a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/onboarding/SimpleXInfo.kt b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/onboarding/SimpleXInfo.kt index e5d00fddd1..5b186875fa 100644 --- a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/onboarding/SimpleXInfo.kt +++ b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/onboarding/SimpleXInfo.kt @@ -11,6 +11,9 @@ import androidx.compose.runtime.* import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.draw.clip +import androidx.compose.ui.draw.drawBehind +import androidx.compose.ui.geometry.Offset +import androidx.compose.ui.graphics.Brush import androidx.compose.ui.graphics.Color import androidx.compose.ui.graphics.painter.Painter import androidx.compose.ui.layout.ContentScale @@ -21,11 +24,15 @@ import dev.icerock.moko.resources.compose.stringResource import androidx.compose.ui.text.font.FontWeight import androidx.compose.ui.text.style.TextAlign import androidx.compose.ui.unit.* +import chat.simplex.common.BuildConfigCommon import chat.simplex.common.model.* import chat.simplex.common.model.ChatController.appPrefs import chat.simplex.common.platform.* import chat.simplex.common.ui.theme.* import chat.simplex.common.views.helpers.* +import chat.simplex.common.views.newchat.darkStops +import chat.simplex.common.views.newchat.gradientPoints +import chat.simplex.common.views.newchat.lightStops import chat.simplex.common.views.migration.MigrateToDeviceView import chat.simplex.common.views.migration.MigrationToState import chat.simplex.res.MR @@ -36,12 +43,16 @@ import kotlin.math.floor @Composable fun SimpleXInfo(chatModel: ChatModel, onboarding: Boolean = true) { if (onboarding) { - CompositionLocalProvider(LocalAppBarHandler provides rememberAppBarHandler()) { - ModalView({}, showClose = false, showAppBar = false) { - SimpleXInfoLayout( - user = chatModel.currentUser.value, - onboardingStage = chatModel.controller.appPrefs.onboardingStage - ) + if (appPlatform.isDesktop) { + SimpleXInfoDesktop(chatModel) + } else { + CompositionLocalProvider(LocalAppBarHandler provides rememberAppBarHandler()) { + ModalView({}, showClose = false, showAppBar = false) { + SimpleXInfoLayout( + user = chatModel.currentUser.value, + onboardingStage = chatModel.controller.appPrefs.onboardingStage + ) + } } } } else { @@ -52,40 +63,102 @@ fun SimpleXInfo(chatModel: ChatModel, onboarding: Boolean = true) { } } +@Composable +private fun SimpleXInfoDesktop(chatModel: ChatModel) { + val user = chatModel.currentUser.value + val onboardingStage = chatModel.controller.appPrefs.onboardingStage + CompositionLocalProvider(LocalAppBarHandler provides rememberAppBarHandler()) { + ModalView({}, showClose = false) { + ColumnWithScrollBar(Modifier.padding(horizontal = DEFAULT_PADDING), horizontalAlignment = Alignment.CenterHorizontally) { + Spacer(Modifier.height(DEFAULT_PADDING)) + Box(Modifier.widthIn(max = 600.dp).fillMaxWidth(0.45f).align(Alignment.CenterHorizontally)) { + SimpleXLogo() + } + Spacer(Modifier.fillMaxHeight().weight(1f)) + Column(Modifier.widthIn(max = 600.dp).align(Alignment.CenterHorizontally), horizontalAlignment = Alignment.CenterHorizontally) { + Box(Modifier.align(Alignment.CenterHorizontally)) { + AppBarTitle(stringResource(MR.strings.onboarding_be_free), bottomPadding = DEFAULT_PADDING, withPadding = false, overrideTitleColor = MaterialTheme.colors.onBackground, textAlign = TextAlign.Center, lineHeight = 42.sp) + } + Text(stringResource(MR.strings.onboarding_private_and_secure), style = MaterialTheme.typography.h3, fontWeight = FontWeight.Medium, color = MaterialTheme.colors.secondary, lineHeight = 25.sp, textAlign = TextAlign.Center) + Spacer(Modifier.height(DEFAULT_PADDING_HALF)) + ReadableText(MR.strings.onboarding_first_network, TextAlign.Center, padding = PaddingValues(), style = MaterialTheme.typography.body2.copy(color = MaterialTheme.colors.secondary)) + } + Spacer(Modifier.fillMaxHeight().weight(1f)) + Column(Modifier.widthIn(max = 1000.dp).align(Alignment.CenterHorizontally), horizontalAlignment = Alignment.CenterHorizontally) { + OnboardingActionButton(user, onboardingStage) + TextButtonBelowOnboardingButton(stringResource(MR.strings.why_simplex_is_built), icon = painterResource(MR.images.ic_info), onClick = { + ModalManager.fullscreen.showModal(forceAnimated = true) { HowItWorks(user, onboardingStage) } + }) + } + } + } + } + LaunchedEffect(Unit) { + if (chatModel.migrationState.value != null && !ModalManager.fullscreen.hasModalsOpen()) { + ModalManager.fullscreen.showCustomModal(animated = false) { close -> MigrateToDeviceView(close) } + } + } +} + @Composable fun SimpleXInfoLayout( user: User?, onboardingStage: SharedPreference? ) { - ColumnWithScrollBar(Modifier.padding(horizontal = DEFAULT_ONBOARDING_HORIZONTAL_PADDING), horizontalAlignment = Alignment.CenterHorizontally) { - Box(Modifier.widthIn(max = if (appPlatform.isAndroid) 250.dp else 500.dp).padding(top = DEFAULT_PADDING + 8.dp), contentAlignment = Alignment.Center) { + Column(Modifier.fillMaxSize().systemBarsPadding().padding(horizontal = DEFAULT_ONBOARDING_HORIZONTAL_PADDING), horizontalAlignment = Alignment.CenterHorizontally) { + Box(Modifier.padding(top = DEFAULT_PADDING * 2).widthIn(max = if (appPlatform.isAndroid) 185.dp else 160.dp), contentAlignment = Alignment.Center) { SimpleXLogo() } - - OnboardingInformationButton( - stringResource(MR.strings.next_generation_of_private_messaging), - onClick = { ModalManager.fullscreen.showModal { HowItWorks(user, onboardingStage) } }, - ) - - Spacer(Modifier.weight(1f)) - - Column { - InfoRow(painterResource(MR.images.privacy), MR.strings.privacy_redefined, MR.strings.first_platform_without_user_ids, width = 60.dp) - InfoRow(painterResource(MR.images.shield), MR.strings.immune_to_spam_and_abuse, MR.strings.people_can_connect_only_via_links_you_share, width = 46.dp) - InfoRow(painterResource(if (isInDarkTheme()) MR.images.decentralized_light else MR.images.decentralized), MR.strings.decentralized, MR.strings.opensource_protocol_and_code_anybody_can_run_servers) - } - - Column(Modifier.fillMaxHeight().weight(1f)) { } - - if (onboardingStage != null) { - Column(Modifier.widthIn(max = if (appPlatform.isAndroid) 450.dp else 1000.dp).align(Alignment.CenterHorizontally), horizontalAlignment = Alignment.CenterHorizontally,) { - OnboardingActionButton(user, onboardingStage) - TextButtonBelowOnboardingButton(stringResource(MR.strings.migrate_from_another_device)) { - chatModel.migrationState.value = MigrationToState.PasteOrScanLink - ModalManager.fullscreen.showCustomModal { close -> MigrateToDeviceView(close) } + OnboardingShrinkingLayout( + modifier = Modifier.fillMaxSize(), + image = { + Column(Modifier.padding(vertical = DEFAULT_PADDING_HALF), horizontalAlignment = Alignment.CenterHorizontally) { + OnboardingImage( + MR.images.intro, MR.images.intro_light, MR.images.ic_forum, + modifier = if (appPlatform.isAndroid) Modifier.fillMaxWidth() else Modifier.heightIn(max = 280.dp) + ) + } + }, + content = { + Column(horizontalAlignment = Alignment.CenterHorizontally) { + Text( + stringResource(MR.strings.onboarding_be_free), + style = MaterialTheme.typography.h1, + fontWeight = FontWeight.Bold, + textAlign = TextAlign.Center, + lineHeight = 42.sp, + modifier = Modifier.padding(top = DEFAULT_PADDING_HALF) + ) + Text( + stringResource(MR.strings.onboarding_private_and_secure), + style = MaterialTheme.typography.h3, + color = MaterialTheme.colors.secondary, + fontWeight = FontWeight.Medium, + lineHeight = 25.sp, + textAlign = TextAlign.Center, + modifier = Modifier.padding(top = 14.dp) + ) + Text( + stringResource(MR.strings.onboarding_first_network), + style = MaterialTheme.typography.body2, + color = MaterialTheme.colors.secondary, + textAlign = TextAlign.Center, + lineHeight = 20.sp, + modifier = Modifier.padding(top = DEFAULT_PADDING_HALF) + ) + } + }, + button = { + if (onboardingStage != null) { + Column(Modifier.widthIn(max = if (appPlatform.isAndroid) 450.dp else 1000.dp), horizontalAlignment = Alignment.CenterHorizontally) { + OnboardingActionButton(user, onboardingStage) + TextButtonBelowOnboardingButton(stringResource(MR.strings.why_simplex_is_built), icon = painterResource(MR.images.ic_info), onClick = { + ModalManager.fullscreen.showModal { HowItWorks(user, onboardingStage) } + }) } } } + ) } LaunchedEffect(Unit) { if (chatModel.migrationState.value != null && !ModalManager.fullscreen.hasModalsOpen()) { @@ -101,25 +174,11 @@ fun SimpleXLogo() { contentDescription = stringResource(MR.strings.image_descr_simplex_logo), contentScale = ContentScale.FillWidth, modifier = Modifier - .padding(vertical = DEFAULT_PADDING) + .padding(bottom = 10.dp) .fillMaxWidth() ) } -@Composable -private fun InfoRow(icon: Painter, titleId: StringResource, textId: StringResource, width: Dp = 58.dp) { - Row(Modifier.padding(bottom = 27.dp), verticalAlignment = Alignment.Top) { - Spacer(Modifier.width((4.dp + 58.dp - width) / 2)) - Image(icon, contentDescription = null, modifier = Modifier - .width(width)) - Spacer(Modifier.width((4.dp + 58.dp - width) / 2 + DEFAULT_PADDING_HALF + 7.dp)) - Column(Modifier.padding(top = 4.dp), verticalArrangement = Arrangement.spacedBy(DEFAULT_PADDING_HALF)) { - Text(stringResource(titleId), fontWeight = FontWeight.Bold, style = MaterialTheme.typography.h3, lineHeight = 24.sp) - Text(stringResource(textId), lineHeight = 24.sp, style = MaterialTheme.typography.body1, color = MaterialTheme.colors.secondary) - } - } -} - @Composable expect fun OnboardingActionButton(user: User?, onboardingStage: SharedPreference, onclick: (() -> Unit)? = null) @@ -155,16 +214,20 @@ fun OnboardingActionButton( } @Composable -fun TextButtonBelowOnboardingButton(text: String, onClick: (() -> Unit)?) { +fun TextButtonBelowOnboardingButton(text: String, onClick: (() -> Unit)?, icon: Painter? = null) { val state = getKeyboardState() val enabled = onClick != null val topPadding by animateDpAsState(if (appPlatform.isAndroid && state.value == KeyboardState.Opened) 0.dp else 7.5.dp) val bottomPadding by animateDpAsState(if (appPlatform.isAndroid && state.value == KeyboardState.Opened) 0.dp else 7.5.dp) if ((appPlatform.isAndroid && state.value == KeyboardState.Closed) || topPadding > 0.dp) { TextButton({ onClick?.invoke() }, Modifier.padding(top = topPadding, bottom = bottomPadding).clip(CircleShape), enabled = enabled) { + if (icon != null) { + Icon(icon, null, tint = MaterialTheme.colors.primary) + Spacer(Modifier.width(4.dp)) + } Text( text, - Modifier.padding(start = DEFAULT_PADDING_HALF, end = DEFAULT_PADDING_HALF, bottom = 5.dp), + Modifier.padding(vertical = 5.dp), color = if (enabled) MaterialTheme.colors.primary else MaterialTheme.colors.secondary, fontWeight = FontWeight.Medium, textAlign = TextAlign.Center @@ -219,6 +282,7 @@ fun OnboardingInformationButton( textLayoutResult = it }, style = MaterialTheme.typography.button, + fontWeight = FontWeight.Medium, color = MaterialTheme.colors.primary ) } diff --git a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/onboarding/YourNetwork.kt b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/onboarding/YourNetwork.kt new file mode 100644 index 0000000000..b20cfe3096 --- /dev/null +++ b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/onboarding/YourNetwork.kt @@ -0,0 +1,226 @@ +package chat.simplex.common.views.onboarding + +import androidx.compose.foundation.* +import androidx.compose.foundation.layout.* +import androidx.compose.foundation.shape.CircleShape +import androidx.compose.foundation.shape.RoundedCornerShape +import androidx.compose.material.* +import androidx.compose.runtime.* +import androidx.compose.runtime.saveable.rememberSaveable +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.draw.clip +import androidx.compose.ui.draw.drawBehind +import androidx.compose.ui.geometry.Offset +import androidx.compose.ui.graphics.Brush +import androidx.compose.ui.graphics.ColorFilter +import androidx.compose.ui.graphics.ColorMatrix +import androidx.compose.ui.layout.ContentScale +import androidx.compose.ui.text.font.FontWeight +import androidx.compose.ui.text.style.TextAlign +import androidx.compose.ui.unit.dp +import androidx.compose.ui.unit.sp +import chat.simplex.common.BuildConfigCommon +import chat.simplex.common.model.* +import chat.simplex.common.model.ChatController.appPrefs +import chat.simplex.common.platform.* +import chat.simplex.common.ui.theme.* +import chat.simplex.common.views.helpers.* +import chat.simplex.common.views.newchat.darkStops +import chat.simplex.common.views.newchat.gradientPoints +import chat.simplex.common.views.newchat.lightStops +import chat.simplex.common.views.usersettings.changeNotificationsMode +import chat.simplex.res.MR +import dev.icerock.moko.resources.compose.painterResource +import dev.icerock.moko.resources.compose.stringResource + +internal object OnboardingSharedState { + var selectedOperatorIds: Set = emptySet() +} + +@Composable +fun YourNetworkView(chatModel: ChatModel) { + LaunchedEffect(Unit) { + prepareChatBeforeFinishingOnboarding() + } + + val serverOperators = remember { derivedStateOf { chatModel.conditions.value.serverOperators } } + val selectedOperatorIds = remember { + mutableStateOf(serverOperators.value.filter { it.enabled }.map { it.operatorId }.toSet()) + } + + LaunchedEffect(selectedOperatorIds.value) { + OnboardingSharedState.selectedOperatorIds = selectedOperatorIds.value + } + + val notificationMode = rememberSaveable { mutableStateOf(NotificationsMode.default) } + + if (appPlatform.isDesktop) { + YourNetworkDesktop(serverOperators, selectedOperatorIds) + } else { + CompositionLocalProvider(LocalAppBarHandler provides rememberAppBarHandler()) { + ModalView({}, showClose = false, showAppBar = false) { + OnboardingShrinkingLayout( + modifier = Modifier.fillMaxSize().themedBackground(bgLayerSize = LocalAppBarHandler.current?.backgroundGraphicsLayerSize, bgLayer = LocalAppBarHandler.current?.backgroundGraphicsLayer) + .systemBarsPadding() + .padding(horizontal = DEFAULT_ONBOARDING_HORIZONTAL_PADDING), + topPadding = DEFAULT_PADDING, + image = { + Column(Modifier.padding(vertical = DEFAULT_PADDING_HALF), horizontalAlignment = Alignment.CenterHorizontally) { + OnboardingImage( + MR.images.your_network, MR.images.your_network_light, MR.images.ic_dns, + modifier = Modifier.padding(horizontal = DEFAULT_ONBOARDING_HORIZONTAL_PADDING).fillMaxWidth() + ) + } + }, + content = { + Column(horizontalAlignment = Alignment.CenterHorizontally) { + Text( + stringResource(MR.strings.onboarding_your_network), + style = MaterialTheme.typography.h1, + fontWeight = FontWeight.Bold, + textAlign = TextAlign.Center, + lineHeight = 42.sp, + modifier = Modifier.padding(top = DEFAULT_PADDING_HALF) + ) + Text( + stringResource(MR.strings.onboarding_network_routers_cannot_know), + style = MaterialTheme.typography.h3, + fontWeight = FontWeight.Medium, + color = MaterialTheme.colors.secondary, + lineHeight = 25.sp, + textAlign = TextAlign.Center, + modifier = Modifier.padding(top = 14.dp) + ) + Column( + Modifier.padding(top = DEFAULT_PADDING_HALF), + horizontalAlignment = Alignment.Start, + verticalArrangement = Arrangement.spacedBy(4.dp) + ) { + ConfigureRoutersButton(serverOperators, selectedOperatorIds) { + ModalManager.fullscreen.showCustomModal { close -> + ChooseServerOperators(serverOperators, selectedOperatorIds, close) + } + } + ConfigureNotificationsButton(notificationMode) { + ModalManager.fullscreen.showModalCloseable { close -> + SetNotificationsMode(notificationMode, close) + } + } + } + } + }, + button = { + Column( + Modifier.widthIn(max = 450.dp).padding(bottom = DEFAULT_PADDING * 2), + horizontalAlignment = Alignment.CenterHorizontally + ) { + OnboardingActionButton( + modifier = Modifier.padding(horizontal = DEFAULT_ONBOARDING_HORIZONTAL_PADDING).fillMaxWidth(), + labelId = MR.strings.onboarding_network_operators_continue, + onboarding = null, + onclick = { + changeNotificationsMode(notificationMode.value, chatModel) + appPrefs.onboardingStage.set(OnboardingStage.Step4_NetworkCommitments) + } + ) + } + } + ) + } + } + } +} + +@Composable +private fun YourNetworkDesktop( + serverOperators: State>, + selectedOperatorIds: MutableState> +) { + CompositionLocalProvider(LocalAppBarHandler provides rememberAppBarHandler()) { + ModalView({}, showClose = false) { + ColumnWithScrollBar(horizontalAlignment = Alignment.CenterHorizontally) { + Column(Modifier.widthIn(max = 600.dp).fillMaxHeight().padding(horizontal = DEFAULT_PADDING).align(Alignment.CenterHorizontally), horizontalAlignment = Alignment.CenterHorizontally) { + Box(Modifier.align(Alignment.CenterHorizontally)) { + AppBarTitle(stringResource(MR.strings.onboarding_your_network), bottomPadding = DEFAULT_PADDING, withPadding = false, overrideTitleColor = MaterialTheme.colors.onBackground, textAlign = TextAlign.Center, lineHeight = 42.sp) + } + Text(stringResource(MR.strings.onboarding_network_routers_cannot_know), style = MaterialTheme.typography.h3, fontWeight = FontWeight.Medium, color = MaterialTheme.colors.secondary, lineHeight = 25.sp, textAlign = TextAlign.Center) + Spacer(Modifier.height(DEFAULT_PADDING)) + ConfigureRoutersButton(serverOperators, selectedOperatorIds) { + ModalManager.fullscreen.showCustomModal(forceAnimated = true) { close -> + ChooseServerOperators(serverOperators, selectedOperatorIds, close) + } + } + } + Spacer(Modifier.fillMaxHeight().weight(1f)) + Column(Modifier.widthIn(max = 1000.dp).align(Alignment.CenterHorizontally), horizontalAlignment = Alignment.CenterHorizontally) { + OnboardingActionButton( + Modifier.widthIn(min = 300.dp), + labelId = MR.strings.onboarding_network_operators_continue, + onboarding = null, + onclick = { + appPrefs.onboardingStage.set(OnboardingStage.Step4_NetworkCommitments) + } + ) + TextButtonBelowOnboardingButton("", null) + } + } + } + } +} + +@Composable +private fun ConfigureRoutersButton(serverOperators: State>, selectedOperatorIds: State>, onClick: () -> Unit) { + Box( + modifier = Modifier + .clip(CircleShape) + .clickable { onClick() } + ) { + Row(Modifier.padding(8.dp), horizontalArrangement = Arrangement.spacedBy(4.dp), verticalAlignment = Alignment.CenterVertically) { + Text( + stringResource(MR.strings.onboarding_configure_routers), + style = MaterialTheme.typography.button, + fontWeight = FontWeight.Medium, + color = MaterialTheme.colors.primary + ) + serverOperators.value.forEach { op -> + Image( + painterResource(op.logo), + contentDescription = null, + modifier = Modifier.size(22.dp), + colorFilter = if (selectedOperatorIds.value.contains(op.operatorId)) null else ColorFilter.colorMatrix(ColorMatrix().apply { + setToSaturation(0f) + }) + ) + } + } + } +} + +@Composable +private fun ConfigureNotificationsButton(notificationMode: State, onClick: () -> Unit) { + val icon = when (notificationMode.value) { + NotificationsMode.SERVICE -> MR.images.ic_bolt + NotificationsMode.PERIODIC -> MR.images.ic_timer + NotificationsMode.OFF -> MR.images.ic_bolt_off + } + Box( + modifier = Modifier + .clip(CircleShape) + .clickable { onClick() } + ) { + Row(Modifier.padding(8.dp), horizontalArrangement = Arrangement.spacedBy(4.dp), verticalAlignment = Alignment.CenterVertically) { + Text( + stringResource(MR.strings.onboarding_configure_notifications), + style = MaterialTheme.typography.button, + fontWeight = FontWeight.Medium, + color = MaterialTheme.colors.primary + ) + Icon( + painterResource(icon), + contentDescription = null, + tint = MaterialTheme.colors.primary + ) + } + } +} diff --git a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/usersettings/networkAndServers/NetworkAndServers.kt b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/usersettings/networkAndServers/NetworkAndServers.kt index c70243f584..a62a58cb10 100644 --- a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/usersettings/networkAndServers/NetworkAndServers.kt +++ b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/usersettings/networkAndServers/NetworkAndServers.kt @@ -826,13 +826,22 @@ fun UsageConditionsView( @Composable fun SimpleConditionsView( - rhId: Long? + rhId: Long?, + onAccept: () -> Unit ) { ColumnWithScrollBar(modifier = Modifier.fillMaxSize().padding(horizontal = DEFAULT_PADDING)) { AppBarTitle(stringResource(MR.strings.operator_conditions_of_use), enableAlphaChanges = false, withPadding = false, bottomPadding = DEFAULT_PADDING) Column(modifier = Modifier.weight(1f).padding(bottom = DEFAULT_PADDING, top = DEFAULT_PADDING_HALF)) { ConditionsTextView(rhId) } + Column(Modifier.widthIn(max = if (appPlatform.isAndroid) 450.dp else 1000.dp).padding(bottom = DEFAULT_PADDING * 2).align(Alignment.CenterHorizontally), horizontalAlignment = Alignment.CenterHorizontally) { + OnboardingActionButton( + modifier = if (appPlatform.isAndroid) Modifier.padding(horizontal = DEFAULT_ONBOARDING_HORIZONTAL_PADDING).fillMaxWidth() else Modifier.widthIn(min = 300.dp), + labelId = MR.strings.onboarding_conditions_accept, + onboarding = null, + onclick = onAccept + ) + } } } diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/ar/strings.xml b/apps/multiplatform/common/src/commonMain/resources/MR/ar/strings.xml index cb92b386a0..081d837a70 100644 --- a/apps/multiplatform/common/src/commonMain/resources/MR/ar/strings.xml +++ b/apps/multiplatform/common/src/commonMain/resources/MR/ar/strings.xml @@ -473,7 +473,6 @@ سريع ولا تنتظر حتى يصبح المرسل متصلاً بالإنترنت! أخفِ كيفية الاستخدام - كيف يعمل SimpleX التخفي عبر رابط عنوان جهة الاتصال رمز الأمان غير صحيحة! الإشعارات الفورية مُعطَّلة @@ -2351,7 +2350,6 @@ المشرفين لا يمكن قراءة عبارة المرور في Keystore. قد يكون هذا قد حدث بعد تحديث النظام غير متوافق مع التطبيق. إذا لم يكن الأمر كذلك، فيُرجى التواصل مع المطوِّرين. موافقة الانتظار - ضبّط مُشغلي الخادم سياسة الخصوصية وشروط الاستخدام. لا يمكن الوصول إلى الدردشات الخاصة والمجموعات وجهات اتصالك لمشغلي الخادم. باستخدام SimpleX Chat، توافق على:\n- إرسال المحتوى القانوني فقط في المجموعات العامة.\n- احترام المستخدمين الآخرين – لا سبام. diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/base/strings.xml b/apps/multiplatform/common/src/commonMain/resources/MR/base/strings.xml index ade88f7fc8..8fc2acf786 100644 --- a/apps/multiplatform/common/src/commonMain/resources/MR/base/strings.xml +++ b/apps/multiplatform/common/src/commonMain/resources/MR/base/strings.xml @@ -1292,9 +1292,27 @@ Make a private connection Migrate from another device How it works + Be free\nin your network + Private and secure messaging. + The first network where you own\nyour contacts and groups. + Get started + Why SimpleX is built. + Your profile + On your phone, not on any server. + No account. No phone. No email. No ID.\nThe most secure encryption. + Enter profile name… + Migrate - - How SimpleX works + + You were born without an account. + Nobody tracked your conversations. No one drew a map of where you\'d been. Privacy was never a feature — it was the way of life. + Then we moved online, and every platform asked for a piece of you — your name, your number, your friends. We accepted that the price of talking to others is letting someone know who we talk to. Every generation, people and tech, had it this way — telephone, email, messengers, social media. It seemed the only way possible. + There is another way. A network with no phone numbers. No usernames. No accounts. No user identities of any kind. A network that connects people and carries encrypted messages without knowing who is connected. + Not a better lock on someone else\'s door. Not a nicer landlord that respects your privacy, but still keeps the record of all visitors. You are not a guest. You are home. No king can enter it — you are sovereign. + Your conversations belong to you, as it had always been before the Internet. The network is not a place you visit. It is a place you create and own. And nobody can take it from you, whether you make it private or public. + The oldest human freedom — to speak to another person without being watched — built on infrastructure that cannot betray it. + Because we destroyed the power to know who you are. So that your power can never be taken. + Be free in your network. To protect your privacy, SimpleX uses separate IDs for each of your contacts. Only client devices store user profiles, contacts, groups, and messages. end-to-end encrypted, with post-quantum security in direct messages.]]> @@ -1321,11 +1339,10 @@ Use random passphrase - Private chats, groups and your contacts are not accessible to server operators. - By using SimpleX Chat you agree to:\n- send only legal content in public groups.\n- respect other users – no spam. + Operators commit to:\n- Be independent\n- Minimize metadata usage\n- Run verified open-source code + You commit to:\n- Only legal content in public groups\n- Respect other users — no spam Privacy policy and conditions of use. Accept - Configure server operators Server operators Network operators SimpleX Chat and Flux made an agreement to include Flux-operated servers into the app. @@ -1342,6 +1359,15 @@ Update Continue + + Your network + Network routers cannot know\nwho talks to whom + Setup routers + Setup notifications + + + Network commitments + Incoming video call Incoming audio call diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/bg/strings.xml b/apps/multiplatform/common/src/commonMain/resources/MR/bg/strings.xml index d708736821..da3c17c184 100644 --- a/apps/multiplatform/common/src/commonMain/resources/MR/bg/strings.xml +++ b/apps/multiplatform/common/src/commonMain/resources/MR/bg/strings.xml @@ -764,7 +764,6 @@ Информация Инсталирай SimpleX Chat за терминал Как работи - Как работи SimpleX Защитен от спам Игнорирай Покани членове @@ -2328,7 +2327,6 @@ Чат с член Разговаряйте с членовете, преди да се присъединят. Нарушение на правилата на общността - Конфигуриране на сървърни оператори Свързване Свържете се по-бързо! 🚀 Връзката е блокирана diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/ca/strings.xml b/apps/multiplatform/common/src/commonMain/resources/MR/ca/strings.xml index a34a4ca7fc..4ce42e2df8 100644 --- a/apps/multiplatform/common/src/commonMain/resources/MR/ca/strings.xml +++ b/apps/multiplatform/common/src/commonMain/resources/MR/ca/strings.xml @@ -1216,7 +1216,6 @@ Sense identificadors d\'usuari. Per protegir la vostra privadesa SimpleX utilitza identificadors separats per a cadascun dels vostres contactes.. Obrir SimpleX - Com funciona SimpleX Només els dispositius client emmagatzemen perfils d\'usuari, contactes, grups i missatges. Notificacions privades Com afecta la bateria @@ -2342,7 +2341,6 @@ Els xats privats, els grups i els vostres contactes no són accessibles per als operadors de servidor. Acceptar En utilitzar SimpleX Chat accepteu:\n- enviar només contingut legal en grups públics.\n- Respectar els altres usuaris, sense correu brossa. - Configurar els operadors de servidor Enllaç al canal SimpleX Aquest enllaç requereix una versió de l\'aplicació més recent. Actualitzeu l\'aplicació o demaneu al vostre contacte que enviï un enllaç compatible. Enllaç de connexió no compatible diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/cs/strings.xml b/apps/multiplatform/common/src/commonMain/resources/MR/cs/strings.xml index c7697c35ba..5f86035db7 100644 --- a/apps/multiplatform/common/src/commonMain/resources/MR/cs/strings.xml +++ b/apps/multiplatform/common/src/commonMain/resources/MR/cs/strings.xml @@ -242,7 +242,6 @@ probíhající hovor Decentralizovaná Jak to funguje - Jak funguje SimpleX Pouze klientská zařízení ukládají uživatelské profily, kontakty, skupiny a zprávy. Soukromé oznámení Pravidelné @@ -2366,7 +2365,6 @@ Členové budou odstraněny z chatu - toto nelze zvrátit! Použitím SimpleX chatu souhlasíte že:\n- ve veřejných skupinách budete zasílat pouze legální obsah.\n- budete respektovat ostatní uživatele – žádný spam. Přijmout - Nastavit operátora serveru Zásady ochrany soukromí a podmínky používání. Soukromé konverzace, skupiny a kontakty nejsou přístupné provozovatelům serverů. Nepodporovaný odkaz k připojení @@ -2551,4 +2549,13 @@ Pokud jste se připojili k nějakým kanálům nebo je vytvořili, přestanou trvale fungovat. aktivní Zrušit + Narodili jste se bez účtu. + Nikdo nesledoval vaše konverzace. Nikdo nevytvořil mapu, kde jste byli. Soukromí nikdy nebylo funkcí - byl to způsob života. + Pak jsme se přesunuli na internet a každá platforma chtěla o vás něco vědět - vaše jméno, vaše číslo, vaše přátele. Smířili jsme se s tím, že cenou za komunikaci s ostatními je dát někomu vědět, s kým mluvíme. Každá generace, lidská i technická, to tak měla - telefon, e-mail, komunikátory, sociální sítě. Zdálo se, že je to jediný možný způsob. + Existuje i jiný způsob. Síť bez telefonních čísel. Bez uživatelských jmen. Bez účtů. Bez jakékoli uživatelské identity. Síť, která spojuje lidi a přenáší šifrované zprávy, aniž by bylo známo, kdo je připojen. + Nejde o to mít lepší zámek na dveřích někoho jiného. Ani o to mít nájemce, který respektuje vaše soukromí, ale vede evidenci všech vašich návštěvníků. Nejste host. Jste doma. Ani král k vám nemůže vstoupit - jste suverén. + Vaše konverzace patří vám, jako tomu bylo vždy před internetem. Síť není místo, které navštěvujete. Je to místo, které vytváříte a vlastníte. A nikdo vám ho nemůže vzít, ať už je soukromé, nebo veřejné. + Nejstarší lidská svoboda - mluvit s druhým člověkem, aniž by byl sledován - postavena na infrastruktuře, která ji nemůže zradit. + Protože jsme zničili sílu vědět, kdo jste. Aby vám vaši moc nikdo nemohl vzít. + Buďte svobodní ve své síti. diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/de/strings.xml b/apps/multiplatform/common/src/commonMain/resources/MR/de/strings.xml index 251987f658..90f40e3713 100644 --- a/apps/multiplatform/common/src/commonMain/resources/MR/de/strings.xml +++ b/apps/multiplatform/common/src/commonMain/resources/MR/de/strings.xml @@ -473,7 +473,6 @@ Stellen Sie eine private Verbindung her Wie es funktioniert - Wie SimpleX funktioniert SimpleX nutzt individuelle Kennungen für jeden Ihrer Kontakte, um Ihre Privatsphäre zu schützen. Nur die Endgeräte speichern Benutzerprofile, Kontakte, Gruppen und Nachrichten. GitHub-Repository mehr dazu.]]> @@ -2450,7 +2449,6 @@ Durch die Nutzung von SimpleX Chat erklären Sie sich damit einverstanden:\n- nur legale Inhalte in öffentlichen Gruppen zu versenden.\n- andere Nutzer zu respektieren - kein Spam. Datenschutz- und Nutzungsbedingungen. Annehmen - Server-Betreiber konfigurieren Private Chats, Gruppen und Ihre Kontakte sind für Server-Betreiber nicht zugänglich. Verbindungs-Link wird nicht unterstützt Verkürzter Link @@ -2821,6 +2819,15 @@ Diese Adresse in Ihrem Social‑Media‑Profil, auf Ihrer Webseite oder in Ihrer E‑Mail‑Signatur verwenden. Wir haben das Verbinden für neue Nutzer vereinfacht. Ihre öffentliche Adresse + Sie wurden ohne eine Benutzerkennung geboren. + Niemand verfolgte Ihre Gespräche. Niemand erstellte eine Karte, wo Sie sich aufgehalten haben. Privatsphäre war nie ein Feature - sie war selbstverständlich. + Dann sind wir online gegangen, und jede Plattform wollte Etwas von Ihnen - Ihren Namen, Ihre Nummer, Ihre Freunde. Wir akzeptierten, dass es der Preis mit Anderen zu kommunizieren ist, Jemandem preiszugeben, mit wem und wie wir miteinander kommunizieren. Jede Generation, Menschen und Technologien, kannten es nur so - Telefon, E-Mail, Messenger, soziale Medien. Es schien der einzig mögliche Weg zu sein. + Es gibt einen anderen Weg. Ein Netzwerk ohne Telefonnummern, ohne Benutzernamen, ohne Benutzerkennungen und ohne jegliche Benutzeridentität. Ein Netzwerk, welches Menschen verbindet und verschlüsselte Nachrichten überträgt, ohne zu wissen, wer mit wem verbunden ist. + Nicht ein besseres Schloss an der Tür eines Anderen. Kein freundlicher Vermieter, der Ihre Privatsphäre respektiert, aber dennoch jeden Besucher registriert. Sie sind kein Gast. Sie sind zu Hause. Kein Vermieter, kein Fremder kann es betreten - Sie sind souverän. + Ihre Kommunikation gehört Ihnen, so wie es immer war, bevor es das Internet gab. Das Netzwerk ist kein Ort, den Sie besuchen. Es ist ein Ort, den Sie erschaffen und besitzen und Niemand kann es Ihnen nehmen, egal ob Sie es privat oder öffentlich machen. + Die älteste Freiheit des Menschen - mit einem anderen Menschen sprechen zu können, ohne beobachtet zu werden - gestützt auf einer Infrastruktur, die Sie nicht verraten kann. + Weil wir die Macht zerstört haben, zu wissen, wer Sie sind. Damit Ihnen Ihre Macht niemals genommen werden kann. + Genießen Sie die Freiheit in Ihrem Netzwerk. Abonnenten-Meldungen diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/el/strings.xml b/apps/multiplatform/common/src/commonMain/resources/MR/el/strings.xml index 20a271f58f..250e587761 100644 --- a/apps/multiplatform/common/src/commonMain/resources/MR/el/strings.xml +++ b/apps/multiplatform/common/src/commonMain/resources/MR/el/strings.xml @@ -549,7 +549,6 @@ Διαμορφωμένοι SMP διακομιστές Διαμορφωμένοι XFTP διακομιστές Διαμορφωμένοι ICE διακομιστές - Διαμόρφωση χειριστών διακομιστή Επιβεβαίωσε Επιβεβαίωση διαγραφής επαφής; Επιβεβαίωση αναβαθμίσεων βάσης δεδομένων @@ -1007,7 +1006,6 @@ Πως επηρεάζει τη μπαταρία Πως βοηθάει την ιδιωτικότητα Πως δουλεύει - Πως δουλεύει το SimpleX Πως να Πως να το χρησιμοποιήσεις Πως να χρησιμοποιήσεις markdown σύνταξη diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/es/strings.xml b/apps/multiplatform/common/src/commonMain/resources/MR/es/strings.xml index 4fc83c8a84..4fe56f1f98 100644 --- a/apps/multiplatform/common/src/commonMain/resources/MR/es/strings.xml +++ b/apps/multiplatform/common/src/commonMain/resources/MR/es/strings.xml @@ -381,7 +381,6 @@ Servidores ICE (uno por línea) Nombre completo: Tu decides quién se conecta. - Cómo funciona SimpleX Colgar Archivos y multimedia ¡Grupo no encontrado! @@ -2376,7 +2375,6 @@ Política de privacidad y condiciones de uso. Los chats privados, los grupos y tus contactos no son accesibles para los operadores de servidores. Al usar SimpleX Chat, aceptas:\n- enviar únicamente contenido legal en los grupos públicos.\n- respetar a los demás usuarios - spam prohibido. - Configurar operadores de servidores Enlace de canal SimpleX Enlace completo Enlace corto @@ -2681,6 +2679,16 @@ Dejarás de recibir mensajes de este canal. El historial del chat se conservará. fallo + Naciste sin una cuenta. + Nadie monitorizaba tus conversaciones. Nadie registraba tus ubicaciones. La privacidad nunca fue un lujo, era la manera de vivir. + Después pasamos a internet y cada plataforma pedía una parte de tí: tu nombre, tu número, tus amistades. Aceptamos que el precio de hablar con los demás es informar a alguien de quién es interlocutor. Cada generación, personas y tecnología, ha funcionado así: teléfono, email, mensajería, redes sociales. Parecía el único camino. + Existe otro camino. Una red sin números de teléfono. Sin nombres de usuario. Sin cuentas. Sin identificadores de ningún tipo. Una red que conecta las personas y entrega mensajes cifrados sin saber quien está conectado. + No un candado mejorado en la puerta de otro. No un terrateniente que respeta tu privacidad pero sigue guardando un registro de tus visitantes. Tu no eres el invitado. Estás en tu casa y ningún rey podrá entrar. Tu eres el soberano. + Tus conversaciones te pertenecen, tal como ha sido siempre antes de la llegada de internet. Tu red no es un lugar que visitas. Es un lugar que has creado, te pertenece y nadie te la podrá quitar, ya sea pública o privada. + La libertad más antigua del ser humano, la de hablar con otra persona sin ser observado, materializada sobre una infraestructura que no puede traicionarla. + Porque hemos destruido el poder de saber quien eres. De manera que tu poder nunca se pueda arrebatar. + Se libre en tu red. + Informes de suscriptores Se permiten mensajes directos entre suscriptores. diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/fa/strings.xml b/apps/multiplatform/common/src/commonMain/resources/MR/fa/strings.xml index 5483becb91..da5dac16a3 100644 --- a/apps/multiplatform/common/src/commonMain/resources/MR/fa/strings.xml +++ b/apps/multiplatform/common/src/commonMain/resources/MR/fa/strings.xml @@ -730,7 +730,6 @@ تماس پذیرفته نامتمرکز پروفایل خود را ایجاد کنید - SimpleX چگونه کار می‌کند مخزن GitHub ما.]]> استفاده از چت بهترین گزینه برای باتری. شما اعلان‌ها را فقط وقتی دریافت می‌کنید که برنامه در حال اجراست (بدون سرویس پس‌زمینه).]]> @@ -2183,7 +2182,6 @@ شرایط به‌طور خودکار برای اپراتورهای فعال در: %s پذیرفته خواهد شد. سرورهای SMP پیکربندی‌شده سرورهای XFTP پیکربندی‌شده - پیکربندی اپراتورهای سرور سرورهای متصل شده اتصال نیاز به تجدید مذاکره رمزنگاری دارد. اتصالات diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/fi/strings.xml b/apps/multiplatform/common/src/commonMain/resources/MR/fi/strings.xml index 5ea012dcf9..24634192ec 100644 --- a/apps/multiplatform/common/src/commonMain/resources/MR/fi/strings.xml +++ b/apps/multiplatform/common/src/commonMain/resources/MR/fi/strings.xml @@ -388,7 +388,6 @@ Miten Koko nimi: Miten markdownia käytetään - Miten SimpleX toimii Saapuva äänipuhelu Saapuva videopuhelu Sivuuta diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/fr/strings.xml b/apps/multiplatform/common/src/commonMain/resources/MR/fr/strings.xml index 677bdeb9b5..383e4c49f7 100644 --- a/apps/multiplatform/common/src/commonMain/resources/MR/fr/strings.xml +++ b/apps/multiplatform/common/src/commonMain/resources/MR/fr/strings.xml @@ -447,7 +447,6 @@ Créez votre profil Établir une connexion privée Comment ça fonctionne - Comment SimpleX fonctionne Seuls les appareils clients stockent les profils des utilisateurs, les contacts, les groupes et les messages. GitHub repository.]]> Batterie peu utilisée. L\'app vérifie les messages toutes les 10 minutes. Vous risquez de manquer des appels ou des messages urgents.]]> diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/hr/strings.xml b/apps/multiplatform/common/src/commonMain/resources/MR/hr/strings.xml index 3084b8569b..84e806dda0 100644 --- a/apps/multiplatform/common/src/commonMain/resources/MR/hr/strings.xml +++ b/apps/multiplatform/common/src/commonMain/resources/MR/hr/strings.xml @@ -90,7 +90,6 @@ Domaćin Kako utiče na bateriju Kako pomaže privatnosti - Kako SimpleX radi Grupni profil je uskladnjen na uredjajima korisnika, ne na serverima. O operatorima Skrivena šifra profila diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/hu/strings.xml b/apps/multiplatform/common/src/commonMain/resources/MR/hu/strings.xml index c706dc8e8a..3b77d42277 100644 --- a/apps/multiplatform/common/src/commonMain/resources/MR/hu/strings.xml +++ b/apps/multiplatform/common/src/commonMain/resources/MR/hu/strings.xml @@ -624,7 +624,6 @@ Hiba történt a téma importálásakor Partner nevének és az üzenet tartalmának elrejtése Nem kompatibilis adatbázis-verzió - Hogyan működik a SimpleX Nem kompatibilis verzió Elrejtés Bejövő videóhívás @@ -2343,7 +2342,6 @@ A SimpleX Chat használatával Ön elfogadja, hogy:\n- csak elfogadott tartalmakat tesz közzé a nyilvános csoportokban.\n- tiszteletben tartja a többi felhasználót, és nem küld kéretlen tartalmat senkinek. Adatvédelmi szabályzat és felhasználási feltételek. A privát csevegések, a csoportok és a partnerek nem érhetők el a kiszolgálók üzemeltetői számára. - Kiszolgálóüzemeltetők beállítása Nem támogatott kapcsolattartási hivatkozás Rövid hivatkozás Teljes hivatkozás @@ -2715,6 +2713,16 @@ A SimpleX hálózat hosszú távú működésének biztosítása érdekében. Az új felhasználók számára egyszerűbbé tettük a kapcsolatok létrehozását. + Fiók nélkül születtünk. + Senki sem követte nyomon a beszélgetéseinket. Senki sem készített térképet arról, hogy merre jártunk. A magánéletünk nem csak egy funkció volt, hanem az életmódunk. + Aztán felléptünk az internetre, és minden platform kért belőlünk egy darabot - nevet, telefonszámot, baráti kapcsolatokat. Elfogadtuk, hogy a kommunikáció ára az, hogy mások megtudják, hogy kivel beszélünk. Minden generáció, az emberek és a technológia is eddig így működött - telefon, e-mail, üzenetküldő programok, közösségi média. Úgy tűnt, ez az egyetlen lehetséges mód. + De van egy másik lehetőség is. Egy hálózat, amelyben nincsenek telefonszámok. Nincsenek felhasználónevek. Nincsenek fiókok. Nincsenek semmiféle felhasználói azonosítók. Egy hálózat, amely összeköti az embereket és titkosított üzeneteket továbbít, anélkül, hogy tudná, ki csatlakozik hozzá. + Nem egy jobb zár mások ajtaján. Nem egy kedvesebb házmester, aki tiszteletben tartja az Ön magánéletét, de mégis nyilvántartást vezet minden látogatójáról. Ön itt nem csak egy vendég. Ön itt otthon van. Nincs az a hatalom, amely beléphetne ide - Ön itt szuverén. + A beszélgetései Önhöz tartoznak, ahogy az internet megjelenése előtt is mindig így volt. A hálózat nem egy hely, amelyet meglátogat. Ez egy olyan hely, amelyet Ön hoz létre saját magának. És senki sem veheti el Öntől, függetlenül attól, hogy privát vagy nyilvános. + A legrégebbi emberi szabadság - beszélgetni az emberekkel, anélkül, hogy mások megfigyelnének - olyan infrastruktúrán alapul, amely nem tudja elárulni. + Mert felszámoltuk a lehetőségét is annak, hogy megtudjuk, Ön kicsoda. Így az önrendelkezése soha nem kerülhet idegen kezekbe. + Legyen szabad a saját hálózatában. + Feliratkozók jelentései A közvetlen üzenetek küldése a feliratkozók között engedélyezve van. diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/in/strings.xml b/apps/multiplatform/common/src/commonMain/resources/MR/in/strings.xml index 2257d93efa..6b3449f7b1 100644 --- a/apps/multiplatform/common/src/commonMain/resources/MR/in/strings.xml +++ b/apps/multiplatform/common/src/commonMain/resources/MR/in/strings.xml @@ -619,7 +619,6 @@ Kesalahan saat menginisialisasi WebView. Pastikan Anda telah menginstal WebView dan arsitektur yang didukung adalah arm64.\nKesalahan: %s Gunakan obrolan Bagaimana caranya - Cara kerja SimpleX Berkala Panggilan suara masuk panggilan suara terenkripsi e2e @@ -2345,7 +2344,6 @@ Frasa sandi di Keystore tidak dapat dibaca. Hal ini mungkin terjadi setelah pembaruan sistem yang tidak kompatibel dengan aplikasi. Jika tidak demikian, silakan hubungi pengembang. Terima Dengan menggunakan SimpleX Chat, Anda setuju untuk:\n- hanya mengirim konten legal di grup publik.\n- hormati pengguna lain – tidak ada spam. - Konfigurasikan operator server Kebijakan privasi dan ketentuan penggunaan. Obrolan pribadi, grup, dan kontak Anda tidak dapat diakses oleh operator server. Frasa sandi di Keystore tidak dapat dibaca, silakan masukkan secara manual. Hal ini mungkin terjadi setelah pembaruan sistem yang tidak kompatibel dengan aplikasi. Jika tidak demikian, silakan hubungi pengembang. diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/it/strings.xml b/apps/multiplatform/common/src/commonMain/resources/MR/it/strings.xml index d65dc3b128..c296fd538b 100644 --- a/apps/multiplatform/common/src/commonMain/resources/MR/it/strings.xml +++ b/apps/multiplatform/common/src/commonMain/resources/MR/it/strings.xml @@ -358,7 +358,6 @@ Videochiamata crittografata e2e terminata Come funziona - Come funziona SimpleX Rispondi alla chiamata Audio spento Audio acceso @@ -2379,7 +2378,6 @@ Usando SimpleX Chat accetti di:\n- inviare solo contenuto legale nei gruppi pubblici.\n- rispettare gli altri utenti - niente spam. Le chat private, i gruppi e i tuoi contatti non sono accessibili agli operatori dei server. Accetta - Configura gli operatori dei server Informativa sulla privacy e condizioni d\'uso. Questo link richiede una versione più recente dell\'app. Aggiornala o chiedi al tuo contatto di inviare un link compatibile. Link completo @@ -2751,6 +2749,16 @@ Sicurezza: solo i proprietari hanno le chiavi del canale. Abbiamo semplificato la connessione per i nuovi utenti. + Sei nato senza un account. + Nessuno monitorava le tue conversazioni. Nessuno disegnava una mappa delle tue posizioni. La privacy non era mai stata una caratteristica, era uno stile di vita. + Poi ci siamo trasferiti online e ogni piattaforma ha chiesto un pezzo di noi: il nome, il numero, gli amici. Abbiamo accettato che il prezzo da pagare per comunicare con gli altri fosse quello di far sapere a qualcuno con chi parliamo. Ogni generazione, sia di persone che di tecnologia, ha funzionato così: telefono, email, messenger, social media. Sembrava l\'unico modo possibile. + C\'è un\'altra via. Una rete senza numeri di telefono. Senza nomi utente. Senza account. Senza identificatori utente di alcun tipo. Una rete che connette le persone e trasferisce messaggi crittografati senza sapere chi è connesso. + Non una serratura migliore sulla porta di qualcun altro. Non un padrone di casa più gentile che rispetta la tua privacy, ma che continua a tenere traccia di tutti i visitatori. Non sei un ospite. Sei a casa tua. Nessun re può entrarvi: sei tu il sovrano. + Le tue conversazioni appartengono a te, come è sempre stato prima dell\'avvento di internet. La rete non è un luogo che visiti. È un luogo che crei e possiedi. E nessuno può portartelo via, che tu lo renda privato o pubblico. + La più antica libertà umana, parlare con un\'altra persona senza essere osservati, si basa su un\'infrastruttura che non può tradirla. + Perché abbiamo distrutto il potere di sapere chi sei. In modo che il tuo potere non possa mai esserti sottratto. + Vivi libero nella tua rete. + Segnalazioni degli iscritti Permetti l\'invio di messaggi diretti agli iscritti. diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/iw/strings.xml b/apps/multiplatform/common/src/commonMain/resources/MR/iw/strings.xml index 1ef02fd128..faf69dfd03 100644 --- a/apps/multiplatform/common/src/commonMain/resources/MR/iw/strings.xml +++ b/apps/multiplatform/common/src/commonMain/resources/MR/iw/strings.xml @@ -482,7 +482,6 @@ הסתר פרופיל איך להשתמש במרקדאון איך זה עובד - איך SimpleX עובדת נתק עזרה הקבוצה תימחק עבור כל חברי הקבוצה – לא ניתן לבטל זאת! @@ -2095,7 +2094,6 @@ לשליחה צ\'אט אחד עם חבר הודעה חדשה - הגדרת מפעילי שרת ניתן להגדיר שרתים דרך הגדרות. אישר אותך ממתין לסקירה diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/ja/strings.xml b/apps/multiplatform/common/src/commonMain/resources/MR/ja/strings.xml index a5c9f98421..db563e9ece 100644 --- a/apps/multiplatform/common/src/commonMain/resources/MR/ja/strings.xml +++ b/apps/multiplatform/common/src/commonMain/resources/MR/ja/strings.xml @@ -153,7 +153,6 @@ 通知の常時受信 SMPサーバのアドレスを正しく1行ずつに分けて、重複しないように、形式もご確認ください。 WebRTC ICEサーバのアドレスを正しく1行ずつに分けて、重複しないように、形式もご確認ください。 - SimpleX の仕様 通話中 電池消費がより高い!非アクティブ時でもバックグラウンドのサービスが常に稼働します(着信してすぐに通知が出ます)。]]> 発信中 @@ -2014,7 +2013,6 @@ プライバシーとセキュリティの向上 承諾 プライバシーポリシーと利用条件 - サーバオペレータの設定 承諾 サーバオペレータは、プライベートチャット・グループ・連絡先にはアクセスできません。 SimpleX Chat を利用することで、以下の事項に同意したものと見なされます:\n- パブリックグループでは合法なコンテンツのみを送信すること。\n- 他のユーザを尊重すること、またスパムメッセージを送信しないこと。 diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/ko/strings.xml b/apps/multiplatform/common/src/commonMain/resources/MR/ko/strings.xml index 651d32518f..83f937db32 100644 --- a/apps/multiplatform/common/src/commonMain/resources/MR/ko/strings.xml +++ b/apps/multiplatform/common/src/commonMain/resources/MR/ko/strings.xml @@ -500,7 +500,6 @@ 설명서 내 서버 사용법 마크다운 사용법 - SimpleX 작동 방식 그룹 초대가 만료되었어요. 그룹 멤버는 보낸 메시지를 영구 삭제할 수 있습니다. (24 시간) 그룹 멤버는 음성 메시지를 보낼 수 있어요. diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/ku/strings.xml b/apps/multiplatform/common/src/commonMain/resources/MR/ku/strings.xml index 0ea9328085..92985b15be 100644 --- a/apps/multiplatform/common/src/commonMain/resources/MR/ku/strings.xml +++ b/apps/multiplatform/common/src/commonMain/resources/MR/ku/strings.xml @@ -215,7 +215,6 @@ Bluetooth Profîla xwe çêke Çawa dişuxule - SimpleX çawa dişuxule Çawa tesîrê li pîlê dike Her serê pêlekê Di cih de diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/lt/strings.xml b/apps/multiplatform/common/src/commonMain/resources/MR/lt/strings.xml index aa2e2e46c9..bccd49eed9 100644 --- a/apps/multiplatform/common/src/commonMain/resources/MR/lt/strings.xml +++ b/apps/multiplatform/common/src/commonMain/resources/MR/lt/strings.xml @@ -214,7 +214,6 @@ Ištrinti nuorodą Ištrinti nuorodą\? Klaida kuriant grupės nuorodą - Kaip SimpleX veikia Duomenų bazė šifruota! kūrėjas Ištrinti grupę\? diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/lv/strings.xml b/apps/multiplatform/common/src/commonMain/resources/MR/lv/strings.xml index 0f192b284c..d673e80394 100644 --- a/apps/multiplatform/common/src/commonMain/resources/MR/lv/strings.xml +++ b/apps/multiplatform/common/src/commonMain/resources/MR/lv/strings.xml @@ -1566,7 +1566,6 @@ Izveidot privātu savienojumu Migrēt no citas ierīces Kā tas darbojas - Kā darbojas SimpleX Lai aizsargātu privātumu, SimpleX izmanto ID rindām Tikai klientu ierīces glabā kontaktu grupas un e2e šifrētas ziņas @@ -1591,7 +1590,6 @@ Ievada nosacījumi, izmantojot jūs piekrītat Ievada nosacījumi privātuma politika un lietošanas noteikumi Ievada nosacījumi pieņemt - Ievada nosacījumi konfigurēt servera operatorus Ievada izvēlēties servera operatorus Ievada tīkla operatori Ievada tīkla operatori simplex flux vienošanās diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/ml/strings.xml b/apps/multiplatform/common/src/commonMain/resources/MR/ml/strings.xml index d21b8b8f83..19aa92a4a0 100644 --- a/apps/multiplatform/common/src/commonMain/resources/MR/ml/strings.xml +++ b/apps/multiplatform/common/src/commonMain/resources/MR/ml/strings.xml @@ -353,7 +353,6 @@ സ്വാഗത സന്ദേശം നൽകുക... (ഇച്ഛാനുസൃതമായ) സംരക്ഷിക്കാതെ പുറത്ത് പോവുക ഇത് എങ്ങനെ പ്രവർത്തിക്കുന്നു - SimpleX എങ്ങനെ പ്രവർത്തിക്കുന്നു കൃത്യസമയം പ്രവർത്തനരഹിതമാക്കുക എന്നതിൽ ഇല്ലാതാക്കി diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/nl/strings.xml b/apps/multiplatform/common/src/commonMain/resources/MR/nl/strings.xml index 4ab2b10904..331ef12e4d 100644 --- a/apps/multiplatform/common/src/commonMain/resources/MR/nl/strings.xml +++ b/apps/multiplatform/common/src/commonMain/resources/MR/nl/strings.xml @@ -424,7 +424,6 @@ cursief Hoe het werkt gemiste oproep - Hoe SimpleX werkt Inkomende audio oproep Inkomend video gesprek Negeren @@ -2380,7 +2379,6 @@ Volledige link Niet-ondersteunde verbindingslink Korte link - Serveroperators configureren Privacybeleid en gebruiksvoorwaarden. Privéchats, groepen en uw contacten zijn niet toegankelijk voor serverbeheerders. contact verwijderd diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/pl/strings.xml b/apps/multiplatform/common/src/commonMain/resources/MR/pl/strings.xml index cc8b369386..4bb9626694 100644 --- a/apps/multiplatform/common/src/commonMain/resources/MR/pl/strings.xml +++ b/apps/multiplatform/common/src/commonMain/resources/MR/pl/strings.xml @@ -426,7 +426,6 @@ Możesz używać markdown do formatowania wiadomości: Utwórz swój profil Jak to działa - Jak SimpleX działa Natychmiastowy Jak wpływa na baterię Nawiąż prywatne połączenie @@ -2230,7 +2229,6 @@ Czat z administratorami Czat z członkiem Czatuj z członkami, zanim dołączą. - Konfigurowanie operatorów serwerów Połącz Połącz się szybciej! 🚀 kontakt usunięty @@ -2557,4 +2555,13 @@ Połączenie nie powiodło się niepowodzenie Jeśli dołączyłeś do kanałów lub je utworzyłeś, przestaną one działać na stałe. + Urodziłeś się bez konta. + Nikt nie śledził twoich rozmów. Nikt nie rysował mapy miejsc, w których byłeś. Prywatność nigdy nie była funkcją - była sposobem na życie. + Następnie przenieśliśmy się do sieci, a każda platforma prosiła o podanie danych osobowych - imienia i nazwiska, numeru telefonu, znajomych. Zaakceptowaliśmy fakt, że ceną za możliwość komunikowania się z innymi jest ujawnienie komuś, z kim rozmawiamy. Tak było w przypadku każdego pokolenia, ludzi i technologii - telefonu, poczty elektronicznej, komunikatorów, mediów społecznościowych. Wydawało się to jedyną możliwą opcją. + Jest jeszcze inny sposób. Sieć bez numerów telefonów. Bez nazw użytkowników. Bez kont. Bez jakichkolwiek tożsamości użytkowników. Sieć, która łączy ludzi i przesyła zaszyfrowane wiadomości, nie wiedząc, kto jest podłączony. + Nie chodzi o lepszy zamek w drzwiach kogoś innego. Nie chodzi o milszego właściciela, który szanuje twoją prywatność, ale nadal prowadzi rejestr wszystkich odwiedzających. Nie jesteś gościem. Jesteś w domu. Żaden król nie może do niego wejść - jesteś suwerenem. + Twoje rozmowy należą do Ciebie, tak jak zawsze było przed pojawieniem się Internetu. Sieć nie jest miejscem, które odwiedzasz. Jest miejscem, które tworzysz i które należy do Ciebie. Nikt nie może Ci tego odebrać, niezależnie od tego, czy jest to miejsce prywatne, czy publiczne. + Najstarsza ludzka wolność - możliwość rozmowy z inną osobą bez bycia obserwowanym - opiera się na infrastrukturze, która nie może jej zdradzić. + Ponieważ zniszczyliśmy moc pozwalającą poznać, kim jesteś. Więc twoja moc nigdy nie będzie Ci odebrana. + Ciesz się swobodą w swojej sieci. diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/pt-rBR/strings.xml b/apps/multiplatform/common/src/commonMain/resources/MR/pt-rBR/strings.xml index 133f65edb2..ca0ec5f2ba 100644 --- a/apps/multiplatform/common/src/commonMain/resources/MR/pt-rBR/strings.xml +++ b/apps/multiplatform/common/src/commonMain/resources/MR/pt-rBR/strings.xml @@ -417,7 +417,6 @@ O arquivo será recebido quando seu contato estiver online, aguarde ou verifique mais tarde! O perfil do grupo é armazenado nos dispositivos dos membros, não nos servidores. ajuda - Como o SimpleX funciona Servidores ICE (um por linha) Ignorar A imagem será recebida quando seu contato estiver online, aguarde ou verifique mais tarde! @@ -2376,7 +2375,6 @@ Os servidores para novos arquivos do seu perfil de chat atual A conexão atingiu o limite de mensagens não entregues, seu contato pode estar offline. Mensagens não entregues - Configurar operadores de servidor Chats privados, grupos e seus contatos não são acessíveis aos operadores de servidor. Aceitar Ao usar o SimpleX Chat, você concorda em:\n- enviar apenas conteúdo legal em grupos públicos.\n- respeitar outros usuários – sem spam. diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/ro/strings.xml b/apps/multiplatform/common/src/commonMain/resources/MR/ro/strings.xml index 11ca93be3b..d9af79fe96 100644 --- a/apps/multiplatform/common/src/commonMain/resources/MR/ro/strings.xml +++ b/apps/multiplatform/common/src/commonMain/resources/MR/ro/strings.xml @@ -1504,7 +1504,6 @@ Ieșire fără salvare Parolă profil ascuns italic - Cum funcționează SimpleX Fără identificatori de utilizator. Acest lucru se poate întâmpla atunci când:\n1. Mesajele au expirat în aplicația de trimitere după 2 zile sau pe server după 30 de zile.\n2. Decriptarea mesajului a eșuat, deoarece tu sau contactul tău ați folosit un backup vechi al bazei de date.\n3. Conexiunea a fost compromisă. Eroare la exportarea bazei de date a conversației @@ -2283,7 +2282,6 @@ Ai partajat o cale de fișier nevalidă. Raportează problema dezvoltatorilor aplicației. Deschide în aplicația mobilă, apoi atinge Conectare în aplicație.]]> Actualizează adresa - Configurați operatorii serverului Condițiile vor fi acceptate pentru operatorii activați după 30 de zile. Apasă pe butonul de informații de lângă bara de adrese pentru a permite accesul la microfon. Colţ diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/ru/strings.xml b/apps/multiplatform/common/src/commonMain/resources/MR/ru/strings.xml index 067174ba0d..64ca9c0711 100644 --- a/apps/multiplatform/common/src/commonMain/resources/MR/ru/strings.xml +++ b/apps/multiplatform/common/src/commonMain/resources/MR/ru/strings.xml @@ -473,7 +473,6 @@ Добавьте контакт Как это работает - Как SimpleX работает Чтобы защитить Вашу конфиденциальность, SimpleX использует разные ID для всех ваших контактов. Только пользовательские устройства хранят контакты, группы и сообщения. GitHub репозитория.]]> @@ -2459,7 +2458,6 @@ Принять Используя SimpleX Chat, Вы согласны:\n- отправлять только законные сообщения в публичных группах.\n- уважать других пользователей — не отправлять спам. Частные разговоры, группы и Ваши контакты недоступны для операторов серверов. - Настроить операторов серверов Политика конфиденциальности и условия использования. всех Принять @@ -2754,4 +2752,13 @@ Вы можете поделиться ссылкой или QR-кодом — любой желающий сможет присоединиться к каналу. Изменить настройки канала могут только владельцы канала. Одноразовая ссылка + Вы родились без аккаунта. + Никто не отслеживал ваши разговоры. Никто не составлял карту ваших перемещений. Конфиденциальность не была функцией - это был образ жизни. + Потом мы вышли в интернет, и каждая платформа попросила частичку вас - ваше имя, ваш номер, ваших друзей. Мы смирились с тем, что за возможность общаться приходится отдавать информацию о том, с кем мы общаемся. Каждое поколение людей и технологий жило так - телефон, электронная почта, мессенджеры, социальные сети. Казалось, что другого пути нет. + Другой путь есть. Сеть без номеров телефонов. Без имён пользователей. Без аккаунтов. Без каких-либо идентификаторов пользователей. Сеть, которая соединяет людей и передаёт зашифрованные сообщения, не зная, кто с кем связан. + Не более надёжный замок на чужой двери. Не более вежливый хозяин, который уважает вашу частную жизнь, но всё равно ведёт учёт всех посетителей. Вы не гость. Вы у себя дома. Ни один король не войдёт в ваш дом - вы суверенны. + Ваши разговоры принадлежат вам, как это всегда было до интернета. Сеть - это не место, куда вы приходите. Это место, которое вы создаёте и которым владеете. И никто не может это у вас отнять, делаете ли вы его конфиденциальным или публичным. + Древнейшая человеческая свобода - говорить с другим человеком без слежки - построенная на инфраструктуре, которая не может её предать. + Потому что мы разрушили саму возможность узнать, кто вы. Чтобы вашу свободу невозможно было отнять. + Будь свободен в своей сети. diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/th/strings.xml b/apps/multiplatform/common/src/commonMain/resources/MR/th/strings.xml index 2fe2000fb3..c355d8d9fb 100644 --- a/apps/multiplatform/common/src/commonMain/resources/MR/th/strings.xml +++ b/apps/multiplatform/common/src/commonMain/resources/MR/th/strings.xml @@ -376,7 +376,6 @@ วิธีใช้มาร์กดาวน์ สิ้นสุดลงแล้ว มันทำงานอย่างไร - วิธีการ SimpleX ทํางานอย่างไร กระจายอำนาจแล้ว การโทรเสียงแบบ encrypted จากต้นจนจบ การโทรวิดีแบบ encrypted จากต้นจนจบ diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/tr/strings.xml b/apps/multiplatform/common/src/commonMain/resources/MR/tr/strings.xml index 16d821637b..32672e365f 100644 --- a/apps/multiplatform/common/src/commonMain/resources/MR/tr/strings.xml +++ b/apps/multiplatform/common/src/commonMain/resources/MR/tr/strings.xml @@ -611,7 +611,6 @@ Gizle Konuşulan kişileri ve mesajları gizle Uygulamayı, son kullanılanlar kısmından gizle. - SimpleX nasıl çalışıyor bir görüntülü aramada karşıdakine karekodunu gösterebilir ya da konuştuğun kişiye bir katılım bağlantısı paylaşabilirsin.]]> bir görüntülü aramada karşıdakinin karekodunu okutabilirsin ya da konuştuğun kişi seninle bir katılım bağlantısı paylaşabilir.]]> Eğer yüz yüze görüşemiyorsanız bir görüntülü aramada karşıdakine karekodunu gösterebilir ya da konuştuğun kişiye bir katılım bağlantısı paylaşabilirsin. @@ -2270,7 +2269,6 @@ Arkaplan servisi yok Kabul Et SimpleX Chat\'i kullanarak şunları kabul etmiş olursunuz:\n- genel gruplarda sadece yasal içerik göndermeyi.\n- diğer kullanıcılara saygı göstermeyi - spam yapmamayı. - Sunucu operatörlerini yapılandırma Sohbetten çıkılsın mı? yönetici Bütün sunucular diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/uk/strings.xml b/apps/multiplatform/common/src/commonMain/resources/MR/uk/strings.xml index 6d498ef4ed..61f64df2fd 100644 --- a/apps/multiplatform/common/src/commonMain/resources/MR/uk/strings.xml +++ b/apps/multiplatform/common/src/commonMain/resources/MR/uk/strings.xml @@ -407,7 +407,6 @@ очікування підтвердження… Приватність перевизначена Ви вирішуєте, хто може під\'єднатися. - Як працює SimpleX зашифрований e2e аудіовиклик Відкрийте SimpleX Chat для прийняття виклику e2e зашифровано @@ -2376,7 +2375,6 @@ Приватні чати, групи та ваші контакти недоступні для операторів сервера. Прийняти Використовуючи SimpleX Chat, ви погоджуєтесь на:\n- надсилати тільки легальний контент у публічних групах.\n- поважати інших користувачів – без спаму. - Налаштувати операторів сервера Політика конфіденційності та умови використання Це посилання вимагає новішої версії додатку. Будь ласка, оновіть додаток або попросіть вашого контакту надіслати сумісне посилання. Повне посилання diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/vi/strings.xml b/apps/multiplatform/common/src/commonMain/resources/MR/vi/strings.xml index ae22c40277..21e2e43a44 100644 --- a/apps/multiplatform/common/src/commonMain/resources/MR/vi/strings.xml +++ b/apps/multiplatform/common/src/commonMain/resources/MR/vi/strings.xml @@ -880,7 +880,6 @@ Hồ sơ trò chuyện ẩn Cách sử dụng Cách thức hoạt động - Cách thức SimpleX hoạt động Cách làm Lỗi khởi động WebView. Hãy đảm bảo bạn đã cài đặt WebView và kiến trúc hỗ trợ của nó là arm64.\nLỗi: %s giờ @@ -2351,7 +2350,6 @@ Bằng việc sử dụng SimpleX Chat, bạn đồng ý:\n- chỉ gửi nội dung hợp pháp trong các nhóm công khai.\n- tôn trọng những người dùng khác - không gửi tin rác. Các cuộc trò chuyện riêng tư, nhóm và liên hệ của bạn không thể truy cập được đối với các bên vận hành máy chủ. Chấp nhận - Định cấu hình các bên vận hành máy chủ Đường dẫn này yêu cầu một phiên bản ứng dụng mới hơn. Vui lòng nâng cấp ứng dụng hoặc yêu cầu liên hệ của một gửi cho một đường dẫn tương thích. Đường dẫn kênh SimpleX Đường dẫn kết nối không được hỗ trợ diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/zh-rCN/strings.xml b/apps/multiplatform/common/src/commonMain/resources/MR/zh-rCN/strings.xml index b189ee581d..21811df621 100644 --- a/apps/multiplatform/common/src/commonMain/resources/MR/zh-rCN/strings.xml +++ b/apps/multiplatform/common/src/commonMain/resources/MR/zh-rCN/strings.xml @@ -618,7 +618,6 @@ %d 小时 %d 月 %d 秒 - SimpleX 是如何工作的 确保 WebRTC ICE 服务器地址格式正确、每行分开且不重复。 确保 SMP 服务器地址格式正确、每行分开且不重复。 Markdown 帮助 @@ -2364,7 +2363,6 @@ 接受 使用 SimpleX Chat 代表您同意:\n- 在公开群中只发送合法内容\n- 尊重其他用户 – 没有垃圾信息。 服务器运营方无法访问私密聊天、群和你的联系人。 - 配置服务器运营方 不支持的连接链接 SimpleX 频道链接 短链接 @@ -2734,4 +2732,13 @@ 在社交媒体资料、网站或电子邮件签名中使用该地址。 我们让连接对新用户更简单。 你的公开地址 + 你生来就没有账户。 + 没有人追踪你的谈话内容。没有人绘制你去过的地方的地图。隐私从来都不是一项功能--而是一种生活方式。 + 然后我们转向线上,每个平台都要求你提供一些信息--你的姓名、电话号码、好友列表。我们接受了这样一个事实:与人交流的代价就是让别人知道我们在和谁交流。每一代人,每一代科技,都遵循着这样的模式--电话、电子邮件、即时通讯、社交媒体。这似乎是唯一可行的方式。 + 还有另一种方法。一个没有电话号码、没有用户名、没有账户、没有任何用户身份的网络。一个连接人们并传输加密信息的网络,而无需知道谁连接了。 + 别人家的门锁再好也比不上这里。房东再好也比不上这里,他既尊重你的隐私,又保留着所有访客的记录。你不是客人,你是家。没有国王能闯入--你是主人。 + 你的对话内容始终属于你,就像互联网出现之前一样。网络不是一个你访问的地方,而是一个你创建并拥有的地方。无论你将其设为私密还是公开,任何人都无法将其夺走。 + 人类最古老的自由--与他人交谈而不被监视--建立在不会背叛它的基础设施之上。 + 因为我们摧毁了知道你是谁的权力,因而您的权利永远不会被夺走。 + 在你的网络中自由畅行。 diff --git a/apps/multiplatform/common/src/commonMain/resources/MR/zh-rTW/strings.xml b/apps/multiplatform/common/src/commonMain/resources/MR/zh-rTW/strings.xml index 05997a9fec..9ec116058a 100644 --- a/apps/multiplatform/common/src/commonMain/resources/MR/zh-rTW/strings.xml +++ b/apps/multiplatform/common/src/commonMain/resources/MR/zh-rTW/strings.xml @@ -847,7 +847,6 @@ 感謝用戶 - 使用 Weblate 的翻譯貢獻! 正在修改聯絡地址為 %s … 受加密的資料庫密碼會再次更新和儲存於金鑰庫。 - SimpleX 是怎樣運作 當發生: \n1. 訊息將在傳送至客戶端後兩天或在伺服器內三十天時過時。 \n2. 訊息解密失敗,因為你或你的聯絡人用了舊的資料庫備份 \n3. 連接被破壞。 只有客戶端裝置儲存個人檔案、聯絡人、群組,和訊息。 請放置你的密碼於安全的地方,如果你遺失了密碼,將不可能修改你的密碼。 @@ -2061,7 +2060,6 @@ 停用自動刪除訊息? 刪除或審查最多 200 條訊息。 於網路和伺服器設定中啟用 Flux 以獲得更好的元資料隱私。 - 配置伺服器營運者 使用條款 更好的隱私和安全性 你可以再試一次。 diff --git a/apps/multiplatform/common/src/commonMain/resources/assets/default/MR/images/intro.svg b/apps/multiplatform/common/src/commonMain/resources/assets/default/MR/images/intro.svg new file mode 100644 index 0000000000..cd6f033c62 --- /dev/null +++ b/apps/multiplatform/common/src/commonMain/resources/assets/default/MR/images/intro.svg @@ -0,0 +1,4 @@ + + + + diff --git a/apps/multiplatform/common/src/commonMain/resources/assets/default/MR/images/intro_light.svg b/apps/multiplatform/common/src/commonMain/resources/assets/default/MR/images/intro_light.svg new file mode 100644 index 0000000000..cd6f033c62 --- /dev/null +++ b/apps/multiplatform/common/src/commonMain/resources/assets/default/MR/images/intro_light.svg @@ -0,0 +1,4 @@ + + + + diff --git a/apps/multiplatform/common/src/commonMain/resources/assets/default/MR/images/network_commitments.svg b/apps/multiplatform/common/src/commonMain/resources/assets/default/MR/images/network_commitments.svg new file mode 100644 index 0000000000..cd6f033c62 --- /dev/null +++ b/apps/multiplatform/common/src/commonMain/resources/assets/default/MR/images/network_commitments.svg @@ -0,0 +1,4 @@ + + + + diff --git a/apps/multiplatform/common/src/commonMain/resources/assets/default/MR/images/network_commitments_light.svg b/apps/multiplatform/common/src/commonMain/resources/assets/default/MR/images/network_commitments_light.svg new file mode 100644 index 0000000000..cd6f033c62 --- /dev/null +++ b/apps/multiplatform/common/src/commonMain/resources/assets/default/MR/images/network_commitments_light.svg @@ -0,0 +1,4 @@ + + + + diff --git a/apps/multiplatform/common/src/commonMain/resources/assets/default/MR/images/your_network.svg b/apps/multiplatform/common/src/commonMain/resources/assets/default/MR/images/your_network.svg new file mode 100644 index 0000000000..cd6f033c62 --- /dev/null +++ b/apps/multiplatform/common/src/commonMain/resources/assets/default/MR/images/your_network.svg @@ -0,0 +1,4 @@ + + + + diff --git a/apps/multiplatform/common/src/commonMain/resources/assets/default/MR/images/your_network_light.svg b/apps/multiplatform/common/src/commonMain/resources/assets/default/MR/images/your_network_light.svg new file mode 100644 index 0000000000..cd6f033c62 --- /dev/null +++ b/apps/multiplatform/common/src/commonMain/resources/assets/default/MR/images/your_network_light.svg @@ -0,0 +1,4 @@ + + + + diff --git a/apps/multiplatform/common/src/commonMain/resources/assets/default/MR/images/your_profile.svg b/apps/multiplatform/common/src/commonMain/resources/assets/default/MR/images/your_profile.svg new file mode 100644 index 0000000000..cd6f033c62 --- /dev/null +++ b/apps/multiplatform/common/src/commonMain/resources/assets/default/MR/images/your_profile.svg @@ -0,0 +1,4 @@ + + + + diff --git a/apps/multiplatform/common/src/commonMain/resources/assets/default/MR/images/your_profile_light.svg b/apps/multiplatform/common/src/commonMain/resources/assets/default/MR/images/your_profile_light.svg new file mode 100644 index 0000000000..cd6f033c62 --- /dev/null +++ b/apps/multiplatform/common/src/commonMain/resources/assets/default/MR/images/your_profile_light.svg @@ -0,0 +1,4 @@ + + + + diff --git a/assets/ASSETS_LICENSE.md b/assets/ASSETS_LICENSE.md new file mode 100644 index 0000000000..36ac54d04f --- /dev/null +++ b/assets/ASSETS_LICENSE.md @@ -0,0 +1,18 @@ +# Application Graphic Assets License + +Copyright (C) 2026 SimpleX Chat Ltd. All rights reserved. + +The graphic assets in this folder, subfolders and in other folders of this repository - including illustrations, images, icons, and visual designs - are proprietary and are not licensed under the AGPLv3 that covers the application source code. + +## Permitted use + +- Unmodified application distribution. You may use these assets as part of the SimpleX Chat application, provided the application is not modified in any way. +- Publications with permission. You may use screenshots containing these assets in publications with prior written permission from SimpleX Chat Ltd. + +## Not permitted + +All other use, including modification, redistribution, or incorporation into other works, is not permitted without prior written permission from SimpleX Chat Ltd. + +## Contact + +To request permission, contact chat@simplex.chat. diff --git a/assets/multiplatform/resources/MR/images/banner_create_link@2x.png b/assets/multiplatform/resources/MR/images/banner_create_link@2x.png new file mode 100644 index 0000000000..6f768932ad Binary files /dev/null and b/assets/multiplatform/resources/MR/images/banner_create_link@2x.png differ diff --git a/assets/multiplatform/resources/MR/images/banner_create_link@3x.png b/assets/multiplatform/resources/MR/images/banner_create_link@3x.png new file mode 100644 index 0000000000..8fe3b9c035 Binary files /dev/null and b/assets/multiplatform/resources/MR/images/banner_create_link@3x.png differ diff --git a/assets/multiplatform/resources/MR/images/banner_create_link_light@2x.png b/assets/multiplatform/resources/MR/images/banner_create_link_light@2x.png new file mode 100644 index 0000000000..c7bfca381a Binary files /dev/null and b/assets/multiplatform/resources/MR/images/banner_create_link_light@2x.png differ diff --git a/assets/multiplatform/resources/MR/images/banner_create_link_light@3x.png b/assets/multiplatform/resources/MR/images/banner_create_link_light@3x.png new file mode 100644 index 0000000000..a25f96d596 Binary files /dev/null and b/assets/multiplatform/resources/MR/images/banner_create_link_light@3x.png differ diff --git a/assets/multiplatform/resources/MR/images/banner_paste_link@2x.png b/assets/multiplatform/resources/MR/images/banner_paste_link@2x.png new file mode 100644 index 0000000000..44feaf8845 Binary files /dev/null and b/assets/multiplatform/resources/MR/images/banner_paste_link@2x.png differ diff --git a/assets/multiplatform/resources/MR/images/banner_paste_link@3x.png b/assets/multiplatform/resources/MR/images/banner_paste_link@3x.png new file mode 100644 index 0000000000..4d1a6e2fda Binary files /dev/null and b/assets/multiplatform/resources/MR/images/banner_paste_link@3x.png differ diff --git a/assets/multiplatform/resources/MR/images/banner_paste_link_light@2x.png b/assets/multiplatform/resources/MR/images/banner_paste_link_light@2x.png new file mode 100644 index 0000000000..c34e988886 Binary files /dev/null and b/assets/multiplatform/resources/MR/images/banner_paste_link_light@2x.png differ diff --git a/assets/multiplatform/resources/MR/images/banner_paste_link_light@3x.png b/assets/multiplatform/resources/MR/images/banner_paste_link_light@3x.png new file mode 100644 index 0000000000..9d813e2c8e Binary files /dev/null and b/assets/multiplatform/resources/MR/images/banner_paste_link_light@3x.png differ diff --git a/assets/multiplatform/resources/MR/images/card_connect_via_link_alpha@2x.png b/assets/multiplatform/resources/MR/images/card_connect_via_link_alpha@2x.png new file mode 100644 index 0000000000..3f53f89dd6 Binary files /dev/null and b/assets/multiplatform/resources/MR/images/card_connect_via_link_alpha@2x.png differ diff --git a/assets/multiplatform/resources/MR/images/card_connect_via_link_alpha@3x.png b/assets/multiplatform/resources/MR/images/card_connect_via_link_alpha@3x.png new file mode 100644 index 0000000000..490afadc98 Binary files /dev/null and b/assets/multiplatform/resources/MR/images/card_connect_via_link_alpha@3x.png differ diff --git a/assets/multiplatform/resources/MR/images/card_connect_via_link_alpha_light@2x.png b/assets/multiplatform/resources/MR/images/card_connect_via_link_alpha_light@2x.png new file mode 100644 index 0000000000..77a072dc62 Binary files /dev/null and b/assets/multiplatform/resources/MR/images/card_connect_via_link_alpha_light@2x.png differ diff --git a/assets/multiplatform/resources/MR/images/card_connect_via_link_alpha_light@3x.png b/assets/multiplatform/resources/MR/images/card_connect_via_link_alpha_light@3x.png new file mode 100644 index 0000000000..556c4d36a4 Binary files /dev/null and b/assets/multiplatform/resources/MR/images/card_connect_via_link_alpha_light@3x.png differ diff --git a/assets/multiplatform/resources/MR/images/card_create_your_public_address_alpha@2x.png b/assets/multiplatform/resources/MR/images/card_create_your_public_address_alpha@2x.png new file mode 100644 index 0000000000..b5c813009b Binary files /dev/null and b/assets/multiplatform/resources/MR/images/card_create_your_public_address_alpha@2x.png differ diff --git a/assets/multiplatform/resources/MR/images/card_create_your_public_address_alpha@3x.png b/assets/multiplatform/resources/MR/images/card_create_your_public_address_alpha@3x.png new file mode 100644 index 0000000000..165e84c64a Binary files /dev/null and b/assets/multiplatform/resources/MR/images/card_create_your_public_address_alpha@3x.png differ diff --git a/assets/multiplatform/resources/MR/images/card_create_your_public_address_alpha_light@2x.png b/assets/multiplatform/resources/MR/images/card_create_your_public_address_alpha_light@2x.png new file mode 100644 index 0000000000..6f133967da Binary files /dev/null and b/assets/multiplatform/resources/MR/images/card_create_your_public_address_alpha_light@2x.png differ diff --git a/assets/multiplatform/resources/MR/images/card_create_your_public_address_alpha_light@3x.png b/assets/multiplatform/resources/MR/images/card_create_your_public_address_alpha_light@3x.png new file mode 100644 index 0000000000..38970844b7 Binary files /dev/null and b/assets/multiplatform/resources/MR/images/card_create_your_public_address_alpha_light@3x.png differ diff --git a/assets/multiplatform/resources/MR/images/card_invite_someone_privately_alpha@2x.png b/assets/multiplatform/resources/MR/images/card_invite_someone_privately_alpha@2x.png new file mode 100644 index 0000000000..3d54b2c507 Binary files /dev/null and b/assets/multiplatform/resources/MR/images/card_invite_someone_privately_alpha@2x.png differ diff --git a/assets/multiplatform/resources/MR/images/card_invite_someone_privately_alpha@3x.png b/assets/multiplatform/resources/MR/images/card_invite_someone_privately_alpha@3x.png new file mode 100644 index 0000000000..c0e92a91a2 Binary files /dev/null and b/assets/multiplatform/resources/MR/images/card_invite_someone_privately_alpha@3x.png differ diff --git a/assets/multiplatform/resources/MR/images/card_invite_someone_privately_alpha_light@2x.png b/assets/multiplatform/resources/MR/images/card_invite_someone_privately_alpha_light@2x.png new file mode 100644 index 0000000000..329fc8d6c4 Binary files /dev/null and b/assets/multiplatform/resources/MR/images/card_invite_someone_privately_alpha_light@2x.png differ diff --git a/assets/multiplatform/resources/MR/images/card_invite_someone_privately_alpha_light@3x.png b/assets/multiplatform/resources/MR/images/card_invite_someone_privately_alpha_light@3x.png new file mode 100644 index 0000000000..99fb7a45d6 Binary files /dev/null and b/assets/multiplatform/resources/MR/images/card_invite_someone_privately_alpha_light@3x.png differ diff --git a/assets/multiplatform/resources/MR/images/card_let_someone_connect_to_you_alpha@2x.png b/assets/multiplatform/resources/MR/images/card_let_someone_connect_to_you_alpha@2x.png new file mode 100644 index 0000000000..cc0446d16f Binary files /dev/null and b/assets/multiplatform/resources/MR/images/card_let_someone_connect_to_you_alpha@2x.png differ diff --git a/assets/multiplatform/resources/MR/images/card_let_someone_connect_to_you_alpha@3x.png b/assets/multiplatform/resources/MR/images/card_let_someone_connect_to_you_alpha@3x.png new file mode 100644 index 0000000000..8ea447c884 Binary files /dev/null and b/assets/multiplatform/resources/MR/images/card_let_someone_connect_to_you_alpha@3x.png differ diff --git a/assets/multiplatform/resources/MR/images/card_let_someone_connect_to_you_alpha_light@2x.png b/assets/multiplatform/resources/MR/images/card_let_someone_connect_to_you_alpha_light@2x.png new file mode 100644 index 0000000000..b37a483be1 Binary files /dev/null and b/assets/multiplatform/resources/MR/images/card_let_someone_connect_to_you_alpha_light@2x.png differ diff --git a/assets/multiplatform/resources/MR/images/card_let_someone_connect_to_you_alpha_light@3x.png b/assets/multiplatform/resources/MR/images/card_let_someone_connect_to_you_alpha_light@3x.png new file mode 100644 index 0000000000..414870fc3a Binary files /dev/null and b/assets/multiplatform/resources/MR/images/card_let_someone_connect_to_you_alpha_light@3x.png differ diff --git a/assets/multiplatform/resources/MR/images/connect_via_link@2x.png b/assets/multiplatform/resources/MR/images/connect_via_link@2x.png new file mode 100644 index 0000000000..24be83e066 Binary files /dev/null and b/assets/multiplatform/resources/MR/images/connect_via_link@2x.png differ diff --git a/assets/multiplatform/resources/MR/images/connect_via_link@3x.png b/assets/multiplatform/resources/MR/images/connect_via_link@3x.png new file mode 100644 index 0000000000..73f118580c Binary files /dev/null and b/assets/multiplatform/resources/MR/images/connect_via_link@3x.png differ diff --git a/assets/multiplatform/resources/MR/images/connect_via_link_light@2x.png b/assets/multiplatform/resources/MR/images/connect_via_link_light@2x.png new file mode 100644 index 0000000000..8a2d8e605a Binary files /dev/null and b/assets/multiplatform/resources/MR/images/connect_via_link_light@2x.png differ diff --git a/assets/multiplatform/resources/MR/images/connect_via_link_light@3x.png b/assets/multiplatform/resources/MR/images/connect_via_link_light@3x.png new file mode 100644 index 0000000000..b6ee8a4bb6 Binary files /dev/null and b/assets/multiplatform/resources/MR/images/connect_via_link_light@3x.png differ diff --git a/assets/multiplatform/resources/MR/images/connect_via_link_small@2x.png b/assets/multiplatform/resources/MR/images/connect_via_link_small@2x.png new file mode 100644 index 0000000000..b105e3be3e Binary files /dev/null and b/assets/multiplatform/resources/MR/images/connect_via_link_small@2x.png differ diff --git a/assets/multiplatform/resources/MR/images/connect_via_link_small@3x.png b/assets/multiplatform/resources/MR/images/connect_via_link_small@3x.png new file mode 100644 index 0000000000..1e410de4b5 Binary files /dev/null and b/assets/multiplatform/resources/MR/images/connect_via_link_small@3x.png differ diff --git a/assets/multiplatform/resources/MR/images/connect_via_link_small_light@2x.png b/assets/multiplatform/resources/MR/images/connect_via_link_small_light@2x.png new file mode 100644 index 0000000000..73520c2f68 Binary files /dev/null and b/assets/multiplatform/resources/MR/images/connect_via_link_small_light@2x.png differ diff --git a/assets/multiplatform/resources/MR/images/connect_via_link_small_light@3x.png b/assets/multiplatform/resources/MR/images/connect_via_link_small_light@3x.png new file mode 100644 index 0000000000..565d44690b Binary files /dev/null and b/assets/multiplatform/resources/MR/images/connect_via_link_small_light@3x.png differ diff --git a/assets/multiplatform/resources/MR/images/create_group@2x.png b/assets/multiplatform/resources/MR/images/create_group@2x.png new file mode 100644 index 0000000000..7fa788d8c8 Binary files /dev/null and b/assets/multiplatform/resources/MR/images/create_group@2x.png differ diff --git a/assets/multiplatform/resources/MR/images/create_group@3x.png b/assets/multiplatform/resources/MR/images/create_group@3x.png new file mode 100644 index 0000000000..cd4bfa45a4 Binary files /dev/null and b/assets/multiplatform/resources/MR/images/create_group@3x.png differ diff --git a/assets/multiplatform/resources/MR/images/create_group_light@2x.png b/assets/multiplatform/resources/MR/images/create_group_light@2x.png new file mode 100644 index 0000000000..de32b94652 Binary files /dev/null and b/assets/multiplatform/resources/MR/images/create_group_light@2x.png differ diff --git a/assets/multiplatform/resources/MR/images/create_group_light@3x.png b/assets/multiplatform/resources/MR/images/create_group_light@3x.png new file mode 100644 index 0000000000..a05610cbb9 Binary files /dev/null and b/assets/multiplatform/resources/MR/images/create_group_light@3x.png differ diff --git a/assets/multiplatform/resources/MR/images/intro@2x.png b/assets/multiplatform/resources/MR/images/intro@2x.png new file mode 100644 index 0000000000..970d68927c Binary files /dev/null and b/assets/multiplatform/resources/MR/images/intro@2x.png differ diff --git a/assets/multiplatform/resources/MR/images/intro@3x.png b/assets/multiplatform/resources/MR/images/intro@3x.png new file mode 100644 index 0000000000..cbd56771c7 Binary files /dev/null and b/assets/multiplatform/resources/MR/images/intro@3x.png differ diff --git a/assets/multiplatform/resources/MR/images/intro_light@2x.png b/assets/multiplatform/resources/MR/images/intro_light@2x.png new file mode 100644 index 0000000000..938a0b1755 Binary files /dev/null and b/assets/multiplatform/resources/MR/images/intro_light@2x.png differ diff --git a/assets/multiplatform/resources/MR/images/intro_light@3x.png b/assets/multiplatform/resources/MR/images/intro_light@3x.png new file mode 100644 index 0000000000..569c56fd29 Binary files /dev/null and b/assets/multiplatform/resources/MR/images/intro_light@3x.png differ diff --git a/assets/multiplatform/resources/MR/images/network_commitments@2x.png b/assets/multiplatform/resources/MR/images/network_commitments@2x.png new file mode 100644 index 0000000000..4b58a588d3 Binary files /dev/null and b/assets/multiplatform/resources/MR/images/network_commitments@2x.png differ diff --git a/assets/multiplatform/resources/MR/images/network_commitments@3x.png b/assets/multiplatform/resources/MR/images/network_commitments@3x.png new file mode 100644 index 0000000000..9b80a623a1 Binary files /dev/null and b/assets/multiplatform/resources/MR/images/network_commitments@3x.png differ diff --git a/assets/multiplatform/resources/MR/images/network_commitments_light@2x.png b/assets/multiplatform/resources/MR/images/network_commitments_light@2x.png new file mode 100644 index 0000000000..5e07e0afdb Binary files /dev/null and b/assets/multiplatform/resources/MR/images/network_commitments_light@2x.png differ diff --git a/assets/multiplatform/resources/MR/images/network_commitments_light@3x.png b/assets/multiplatform/resources/MR/images/network_commitments_light@3x.png new file mode 100644 index 0000000000..aadfa0288d Binary files /dev/null and b/assets/multiplatform/resources/MR/images/network_commitments_light@3x.png differ diff --git a/assets/multiplatform/resources/MR/images/one_time_link@2x.png b/assets/multiplatform/resources/MR/images/one_time_link@2x.png new file mode 100644 index 0000000000..8b3ba2f0ee Binary files /dev/null and b/assets/multiplatform/resources/MR/images/one_time_link@2x.png differ diff --git a/assets/multiplatform/resources/MR/images/one_time_link@3x.png b/assets/multiplatform/resources/MR/images/one_time_link@3x.png new file mode 100644 index 0000000000..de87789d1b Binary files /dev/null and b/assets/multiplatform/resources/MR/images/one_time_link@3x.png differ diff --git a/assets/multiplatform/resources/MR/images/one_time_link_light@2x.png b/assets/multiplatform/resources/MR/images/one_time_link_light@2x.png new file mode 100644 index 0000000000..3b0c02209b Binary files /dev/null and b/assets/multiplatform/resources/MR/images/one_time_link_light@2x.png differ diff --git a/assets/multiplatform/resources/MR/images/one_time_link_light@3x.png b/assets/multiplatform/resources/MR/images/one_time_link_light@3x.png new file mode 100644 index 0000000000..87360c3135 Binary files /dev/null and b/assets/multiplatform/resources/MR/images/one_time_link_light@3x.png differ diff --git a/assets/multiplatform/resources/MR/images/one_time_link_small@2x.png b/assets/multiplatform/resources/MR/images/one_time_link_small@2x.png new file mode 100644 index 0000000000..f9d94cf265 Binary files /dev/null and b/assets/multiplatform/resources/MR/images/one_time_link_small@2x.png differ diff --git a/assets/multiplatform/resources/MR/images/one_time_link_small@3x.png b/assets/multiplatform/resources/MR/images/one_time_link_small@3x.png new file mode 100644 index 0000000000..2dac7ef638 Binary files /dev/null and b/assets/multiplatform/resources/MR/images/one_time_link_small@3x.png differ diff --git a/assets/multiplatform/resources/MR/images/one_time_link_small_light@2x.png b/assets/multiplatform/resources/MR/images/one_time_link_small_light@2x.png new file mode 100644 index 0000000000..916bdaa007 Binary files /dev/null and b/assets/multiplatform/resources/MR/images/one_time_link_small_light@2x.png differ diff --git a/assets/multiplatform/resources/MR/images/one_time_link_small_light@3x.png b/assets/multiplatform/resources/MR/images/one_time_link_small_light@3x.png new file mode 100644 index 0000000000..1ed8194bc9 Binary files /dev/null and b/assets/multiplatform/resources/MR/images/one_time_link_small_light@3x.png differ diff --git a/assets/multiplatform/resources/MR/images/simplex_address@2x.png b/assets/multiplatform/resources/MR/images/simplex_address@2x.png new file mode 100644 index 0000000000..237c125c62 Binary files /dev/null and b/assets/multiplatform/resources/MR/images/simplex_address@2x.png differ diff --git a/assets/multiplatform/resources/MR/images/simplex_address@3x.png b/assets/multiplatform/resources/MR/images/simplex_address@3x.png new file mode 100644 index 0000000000..8f5606cbbc Binary files /dev/null and b/assets/multiplatform/resources/MR/images/simplex_address@3x.png differ diff --git a/assets/multiplatform/resources/MR/images/simplex_address_light@2x.png b/assets/multiplatform/resources/MR/images/simplex_address_light@2x.png new file mode 100644 index 0000000000..a58ebae39c Binary files /dev/null and b/assets/multiplatform/resources/MR/images/simplex_address_light@2x.png differ diff --git a/assets/multiplatform/resources/MR/images/simplex_address_light@3x.png b/assets/multiplatform/resources/MR/images/simplex_address_light@3x.png new file mode 100644 index 0000000000..aae91169ef Binary files /dev/null and b/assets/multiplatform/resources/MR/images/simplex_address_light@3x.png differ diff --git a/assets/multiplatform/resources/MR/images/simplex_address_small@2x.png b/assets/multiplatform/resources/MR/images/simplex_address_small@2x.png new file mode 100644 index 0000000000..6dddbbd377 Binary files /dev/null and b/assets/multiplatform/resources/MR/images/simplex_address_small@2x.png differ diff --git a/assets/multiplatform/resources/MR/images/simplex_address_small@3x.png b/assets/multiplatform/resources/MR/images/simplex_address_small@3x.png new file mode 100644 index 0000000000..45471e9c50 Binary files /dev/null and b/assets/multiplatform/resources/MR/images/simplex_address_small@3x.png differ diff --git a/assets/multiplatform/resources/MR/images/simplex_address_small_light@2x.png b/assets/multiplatform/resources/MR/images/simplex_address_small_light@2x.png new file mode 100644 index 0000000000..a1cdfc4652 Binary files /dev/null and b/assets/multiplatform/resources/MR/images/simplex_address_small_light@2x.png differ diff --git a/assets/multiplatform/resources/MR/images/simplex_address_small_light@3x.png b/assets/multiplatform/resources/MR/images/simplex_address_small_light@3x.png new file mode 100644 index 0000000000..f54baf5dc4 Binary files /dev/null and b/assets/multiplatform/resources/MR/images/simplex_address_small_light@3x.png differ diff --git a/assets/multiplatform/resources/MR/images/your_network@2x.png b/assets/multiplatform/resources/MR/images/your_network@2x.png new file mode 100644 index 0000000000..b7b5d6aa87 Binary files /dev/null and b/assets/multiplatform/resources/MR/images/your_network@2x.png differ diff --git a/assets/multiplatform/resources/MR/images/your_network@3x.png b/assets/multiplatform/resources/MR/images/your_network@3x.png new file mode 100644 index 0000000000..9ff0e77a86 Binary files /dev/null and b/assets/multiplatform/resources/MR/images/your_network@3x.png differ diff --git a/assets/multiplatform/resources/MR/images/your_network_light@2x.png b/assets/multiplatform/resources/MR/images/your_network_light@2x.png new file mode 100644 index 0000000000..12031202d8 Binary files /dev/null and b/assets/multiplatform/resources/MR/images/your_network_light@2x.png differ diff --git a/assets/multiplatform/resources/MR/images/your_network_light@3x.png b/assets/multiplatform/resources/MR/images/your_network_light@3x.png new file mode 100644 index 0000000000..56b7f20c59 Binary files /dev/null and b/assets/multiplatform/resources/MR/images/your_network_light@3x.png differ diff --git a/assets/multiplatform/resources/MR/images/your_profile@2x.png b/assets/multiplatform/resources/MR/images/your_profile@2x.png new file mode 100644 index 0000000000..81e8e1a6b0 Binary files /dev/null and b/assets/multiplatform/resources/MR/images/your_profile@2x.png differ diff --git a/assets/multiplatform/resources/MR/images/your_profile@3x.png b/assets/multiplatform/resources/MR/images/your_profile@3x.png new file mode 100644 index 0000000000..01ea5da43c Binary files /dev/null and b/assets/multiplatform/resources/MR/images/your_profile@3x.png differ diff --git a/assets/multiplatform/resources/MR/images/your_profile_light@2x.png b/assets/multiplatform/resources/MR/images/your_profile_light@2x.png new file mode 100644 index 0000000000..91671dadb0 Binary files /dev/null and b/assets/multiplatform/resources/MR/images/your_profile_light@2x.png differ diff --git a/assets/multiplatform/resources/MR/images/your_profile_light@3x.png b/assets/multiplatform/resources/MR/images/your_profile_light@3x.png new file mode 100644 index 0000000000..8e1d3fd15e Binary files /dev/null and b/assets/multiplatform/resources/MR/images/your_profile_light@3x.png differ diff --git a/scripts/android/build-android-bundle.sh b/scripts/android/build-android-bundle.sh index 554e64edff..b784da2aad 100755 --- a/scripts/android/build-android-bundle.sh +++ b/scripts/android/build-android-bundle.sh @@ -23,5 +23,5 @@ unzip -o "$tmp/libsimplex.zip" -d "$tmp/simplex-chat/apps/multiplatform/common/s curl -sSf "$libsup" -o "$tmp/libsupport.zip" unzip -o "$tmp/libsupport.zip" -d "$tmp/simplex-chat/apps/multiplatform/common/src/commonMain/cpp/android/libs/arm64-v8a" -gradle -p "$tmp/simplex-chat/apps/multiplatform/" clean build +gradle -p "$tmp/simplex-chat/apps/multiplatform/" -Psimplex.assets.dir=../../assets clean build cp "$tmp/simplex-chat/apps/multiplatform/android/build/outputs/apk/release/android-release-unsigned.apk" "$PWD/simplex-chat.apk" diff --git a/scripts/android/build-android.sh b/scripts/android/build-android.sh index afd13011c9..7edee9c304 100755 --- a/scripts/android/build-android.sh +++ b/scripts/android/build-android.sh @@ -67,13 +67,13 @@ checks() { if ! command -v "$i" > /dev/null 2>&1; then commands_failed="$i $commands_failed" else - gradle_ver_local="$(gradle -v | grep Gradle | awk '{print $2}')" - gradle_ver_local_compare="$(printf ${gradle_ver_local:-0.0} | awk -F. '{print $1$2}')" + gradle_ver_local="$(gradle --version | sed -n 's/^Gradle //p')" + gradle_ver_local_compare="$(printf '%s' "$gradle_ver_local" | awk -F. '{print $1"."$2}')" gradle_ver_remote="$(grep distributionUrl ${folder}/apps/multiplatform/gradle/wrapper/gradle-wrapper.properties)" gradle_ver_remote="${gradle_ver_remote#*-}" gradle_ver_remote="${gradle_ver_remote%-*}" - gradle_ver_remote_compare="$(printf ${gradle_ver_remote} | awk -F. '{print $1$2}')" - + gradle_ver_remote_compare="$(printf '%s' "$gradle_ver_remote" | awk -F. '{print $1"."$2}')" + if [ "$gradle_ver_local_compare" != "$gradle_ver_remote_compare" ]; then commands_failed="$i[installed=${gradle_ver_local},required=${gradle_ver_remote}] $commands_failed" fi @@ -134,7 +134,7 @@ build() { # Build only one arch sed -i.bak "s/include(.*/include(\"${android_arch}\")/" "$folder/apps/multiplatform/android/build.gradle.kts" - gradle -p "$folder/apps/multiplatform/" clean :android:assembleRelease + gradle -p "$folder/apps/multiplatform/" -Psimplex.assets.dir=../../assets clean :android:assembleRelease mkdir -p "$android_tmp_folder" unzip -oqd "$android_tmp_folder" "$android_apk_output" diff --git a/scripts/ci/build-desktop-mac.sh b/scripts/ci/build-desktop-mac.sh index 9adea013b4..60161ece4e 100755 --- a/scripts/ci/build-desktop-mac.sh +++ b/scripts/ci/build-desktop-mac.sh @@ -16,5 +16,5 @@ security unlock-keychain -p "" /tmp/simplex.keychain security list-keychains -s `security list-keychains | xargs` /tmp/simplex.keychain scripts/desktop/build-lib-mac.sh cd apps/multiplatform -./gradlew packageDmg -./gradlew notarizeDmg +./gradlew -Psimplex.assets.dir=../../assets packageDmg +./gradlew -Psimplex.assets.dir=../../assets notarizeDmg diff --git a/scripts/desktop/make-appimage-linux.sh b/scripts/desktop/make-appimage-linux.sh index c242b63d54..5a974cf69e 100755 --- a/scripts/desktop/make-appimage-linux.sh +++ b/scripts/desktop/make-appimage-linux.sh @@ -18,7 +18,7 @@ libcrypto_path=$(ldd common/src/commonMain/cpp/desktop/libs/*/libHSdirect-sqlcip trap "rm common/src/commonMain/cpp/desktop/libs/*/`basename $libcrypto_path` 2> /dev/null || true" EXIT cp $libcrypto_path common/src/commonMain/cpp/desktop/libs/* -./gradlew createDistributable +./gradlew -Psimplex.assets.dir=../../assets createDistributable rm common/src/commonMain/cpp/desktop/libs/*/`basename $libcrypto_path` rm -rf $release_app_dir/AppDir 2>/dev/null diff --git a/scripts/desktop/make-deb-linux.sh b/scripts/desktop/make-deb-linux.sh index 3226c22709..d0766d5ebb 100755 --- a/scripts/desktop/make-deb-linux.sh +++ b/scripts/desktop/make-deb-linux.sh @@ -4,7 +4,7 @@ ARCH="$(uname -m)" scripts/desktop/build-lib-linux.sh cd apps/multiplatform -./gradlew packageDeb +./gradlew -Psimplex.assets.dir=../../assets packageDeb # Workaround for skiko library # diff --git a/website/README.md b/website/README.md index 5a5155a917..560b427136 100644 --- a/website/README.md +++ b/website/README.md @@ -2,8 +2,6 @@ ## License -SimpleX Chat website code is licensed under the GNU Affero General Public License version 3 (AGPLv3). See the [LICENSE](../LICENSE) file for details. +SimpleX Chat website code is licensed under the GNU Affero General Public License version 3 (AGPLv3). See the [LICENSE](./LICENSE) file for details. The SimpleX and SimpleX Chat name, logo, associated branding materials, and graphic assets (illustrations, images, visual designs, etc.) are not covered by this license and are subject to the terms outlined in the [TRADEMARK](../docs/TRADEMARK.md) and [ASSETS_LICENSE](../assets/ASSETS_LICENSE.md) files respectively. -The SimpleX and SimpleX Chat name, logo, and associated branding materials are not covered by this license and are subject to the terms outlined in the [TRADEMARK](./docs/TRADEMARK.md) file. - -Graphic designs, artworks and layouts are not licensed for re-use. If you want to use them in your publications, please ask for permission. Texts can be used as direct quotes, referencing the source. +If you want to use any graphic assets in your publications, please ask for permission. Texts can be used as direct quotes, referencing the source.