mirror of
https://github.com/simplex-chat/simplex-chat.git
synced 2024-12-17 17:20:21 +01:00
Compare commits
7 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 058335d5e1 | |||
| 916ff04d78 | |||
| fb2dc74420 | |||
| 86b84bf0ea | |||
| 7158f169a2 | |||
| 2484ea2033 | |||
| aa3879ada0 |
@@ -29,12 +29,12 @@ struct ContentView: View {
|
||||
@AppStorage(DEFAULT_PERFORM_LA) private var prefPerformLA = false
|
||||
@AppStorage(DEFAULT_PRIVACY_PROTECT_SCREEN) private var protectScreen = false
|
||||
@AppStorage(DEFAULT_NOTIFICATION_ALERT_SHOWN) private var notificationAlertShown = false
|
||||
@State private var showSettings = false
|
||||
@State private var showWhatsNew = false
|
||||
@State private var showChooseLAMode = false
|
||||
@State private var showSetPasscode = false
|
||||
@State private var waitingForOrPassedAuth = true
|
||||
@State private var chatListActionSheet: ChatListActionSheet? = nil
|
||||
@State private var chatListUserPickerSheet: UserPickerSheet? = nil
|
||||
|
||||
private let callTopPadding: CGFloat = 40
|
||||
|
||||
@@ -86,7 +86,7 @@ struct ContentView: View {
|
||||
callView(call)
|
||||
}
|
||||
|
||||
if chatListUserPickerSheet == nil, let la = chatModel.laRequest {
|
||||
if !showSettings, let la = chatModel.laRequest {
|
||||
LocalAuthView(authRequest: la)
|
||||
.onDisappear {
|
||||
// this flag is separate from accessAuthenticated to show initializationView while we wait for authentication
|
||||
@@ -109,6 +109,9 @@ struct ContentView: View {
|
||||
}
|
||||
}
|
||||
.alert(isPresented: $alertManager.presentAlert) { alertManager.alertView! }
|
||||
.sheet(isPresented: $showSettings) {
|
||||
SettingsView(showSettings: $showSettings)
|
||||
}
|
||||
.confirmationDialog("SimpleX Lock mode", isPresented: $showChooseLAMode, titleVisibility: .visible) {
|
||||
Button("System authentication") { initialEnableLA() }
|
||||
Button("Passcode entry") { showSetPasscode = true }
|
||||
@@ -250,7 +253,7 @@ struct ContentView: View {
|
||||
|
||||
private func mainView() -> some View {
|
||||
ZStack(alignment: .top) {
|
||||
ChatListView(activeUserPickerSheet: $chatListUserPickerSheet).privacySensitive(protectScreen)
|
||||
ChatListView(showSettings: $showSettings).privacySensitive(protectScreen)
|
||||
.onAppear {
|
||||
requestNtfAuthorization()
|
||||
// Local Authentication notice is to be shown on next start after onboarding is complete
|
||||
@@ -297,18 +300,9 @@ struct ContentView: View {
|
||||
if let contactId = contacts?.first?.personHandle?.value,
|
||||
let chat = chatModel.getChat(contactId),
|
||||
case let .direct(contact) = chat.chatInfo {
|
||||
let activeCall = chatModel.activeCall
|
||||
// This line works when a user clicks on a video button in CallKit UI while in call.
|
||||
// The app tries to make another call to the same contact and overwite activeCall instance making its state broken
|
||||
if let activeCall, contactId == activeCall.contact.id, mediaType == .video, !activeCall.hasVideo {
|
||||
Task {
|
||||
await chatModel.callCommand.processCommand(.media(source: .camera, enable: true))
|
||||
}
|
||||
} else if activeCall == nil {
|
||||
logger.debug("callToRecentContact: schedule call")
|
||||
DispatchQueue.main.asyncAfter(deadline: .now() + 1) {
|
||||
CallController.shared.startCall(contact, mediaType)
|
||||
}
|
||||
logger.debug("callToRecentContact: schedule call")
|
||||
DispatchQueue.main.asyncAfter(deadline: .now() + 1) {
|
||||
CallController.shared.startCall(contact, mediaType)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -526,7 +526,7 @@ final class ChatModel: ObservableObject {
|
||||
}
|
||||
|
||||
func updateCurrentUserUiThemes(uiThemes: ThemeModeOverrides?) {
|
||||
guard var current = currentUser, current.uiThemes != uiThemes else { return }
|
||||
guard var current = currentUser else { return }
|
||||
current.uiThemes = uiThemes
|
||||
let i = users.firstIndex(where: { $0.user.userId == current.userId })
|
||||
if let i {
|
||||
|
||||
@@ -585,18 +585,12 @@ func apiContactInfo(_ contactId: Int64) async throws -> (ConnectionStats?, Profi
|
||||
throw r
|
||||
}
|
||||
|
||||
func apiGroupMemberInfoSync(_ groupId: Int64, _ groupMemberId: Int64) throws -> (GroupMember, ConnectionStats?) {
|
||||
func apiGroupMemberInfo(_ groupId: Int64, _ groupMemberId: Int64) throws -> (GroupMember, ConnectionStats?) {
|
||||
let r = chatSendCmdSync(.apiGroupMemberInfo(groupId: groupId, groupMemberId: groupMemberId))
|
||||
if case let .groupMemberInfo(_, _, member, connStats_) = r { return (member, connStats_) }
|
||||
throw r
|
||||
}
|
||||
|
||||
func apiGroupMemberInfo(_ groupId: Int64, _ groupMemberId: Int64) async throws -> (GroupMember, ConnectionStats?) {
|
||||
let r = await chatSendCmd(.apiGroupMemberInfo(groupId: groupId, groupMemberId: groupMemberId))
|
||||
if case let .groupMemberInfo(_, _, member, connStats_) = r { return (member, connStats_) }
|
||||
throw r
|
||||
}
|
||||
|
||||
func apiContactQueueInfo(_ contactId: Int64) async throws -> (RcvMsgInfo?, ServerQueueInfo) {
|
||||
let r = await chatSendCmd(.apiContactQueueInfo(contactId: contactId))
|
||||
if case let .queueInfo(_, rcvMsgInfo, queueInfo) = r { return (rcvMsgInfo, queueInfo) }
|
||||
@@ -651,8 +645,8 @@ func apiGetContactCode(_ contactId: Int64) async throws -> (Contact, String) {
|
||||
throw r
|
||||
}
|
||||
|
||||
func apiGetGroupMemberCode(_ groupId: Int64, _ groupMemberId: Int64) async throws -> (GroupMember, String) {
|
||||
let r = await chatSendCmd(.apiGetGroupMemberCode(groupId: groupId, groupMemberId: groupMemberId))
|
||||
func apiGetGroupMemberCode(_ groupId: Int64, _ groupMemberId: Int64) throws -> (GroupMember, String) {
|
||||
let r = chatSendCmdSync(.apiGetGroupMemberCode(groupId: groupId, groupMemberId: groupMemberId))
|
||||
if case let .groupMemberCode(_, _, member, connectionCode) = r { return (member, connectionCode) }
|
||||
throw r
|
||||
}
|
||||
@@ -2090,6 +2084,7 @@ func processReceivedMsg(_ res: ChatResponse) async {
|
||||
await withCall(contact) { call in
|
||||
await MainActor.run {
|
||||
call.callState = .offerReceived
|
||||
call.peerMedia = callType.media
|
||||
call.sharedKey = sharedKey
|
||||
}
|
||||
let useRelay = UserDefaults.standard.bool(forKey: DEFAULT_WEBRTC_POLICY_RELAY)
|
||||
|
||||
@@ -17,8 +17,8 @@ struct ActiveCallView: View {
|
||||
@ObservedObject var call: Call
|
||||
@Environment(\.scenePhase) var scenePhase
|
||||
@State private var client: WebRTCClient? = nil
|
||||
@State private var activeCall: WebRTCClient.Call? = nil
|
||||
@State private var localRendererAspectRatio: CGFloat? = nil
|
||||
@State var remoteContentMode: UIView.ContentMode = .scaleAspectFill
|
||||
@Binding var canConnectCall: Bool
|
||||
@State var prevColorScheme: ColorScheme = .dark
|
||||
@State var pipShown = false
|
||||
@@ -27,39 +27,24 @@ struct ActiveCallView: View {
|
||||
var body: some View {
|
||||
ZStack(alignment: .topLeading) {
|
||||
ZStack(alignment: .bottom) {
|
||||
if let client = client, call.hasVideo {
|
||||
if let client = client, [call.peerMedia, call.localMedia].contains(.video), activeCall != nil {
|
||||
GeometryReader { g in
|
||||
let width = g.size.width * 0.3
|
||||
ZStack(alignment: .topTrailing) {
|
||||
CallViewRemote(client: client, activeCall: $activeCall, activeCallViewIsCollapsed: $m.activeCallViewIsCollapsed, pipShown: $pipShown)
|
||||
CallViewLocal(client: client, activeCall: $activeCall, localRendererAspectRatio: $localRendererAspectRatio, pipShown: $pipShown)
|
||||
.cornerRadius(10)
|
||||
.frame(width: width, height: width / (localRendererAspectRatio ?? 1))
|
||||
.padding([.top, .trailing], 17)
|
||||
ZStack(alignment: .center) {
|
||||
// For some reason, when the view in GeometryReader and ZStack is visible, it steals clicks on a back button, so showing something on top like this with background color helps (.clear color doesn't work)
|
||||
}
|
||||
.frame(maxWidth: .infinity, maxHeight: .infinity)
|
||||
.background(Color.primary.opacity(0.000001))
|
||||
|
||||
CallViewRemote(client: client, call: call, activeCallViewIsCollapsed: $m.activeCallViewIsCollapsed, contentMode: $remoteContentMode, pipShown: $pipShown)
|
||||
.onTapGesture {
|
||||
remoteContentMode = remoteContentMode == .scaleAspectFill ? .scaleAspectFit : .scaleAspectFill
|
||||
}
|
||||
|
||||
Group {
|
||||
let localVideoTrack = client.activeCall?.localVideoTrack ?? client.notConnectedCall?.localCameraAndTrack?.1
|
||||
if localVideoTrack != nil {
|
||||
CallViewLocal(client: client, localRendererAspectRatio: $localRendererAspectRatio, pipShown: $pipShown)
|
||||
.onDisappear {
|
||||
localRendererAspectRatio = nil
|
||||
}
|
||||
} else {
|
||||
Rectangle().fill(.black)
|
||||
}
|
||||
}
|
||||
.cornerRadius(10)
|
||||
.frame(width: width, height: localRendererAspectRatio == nil ? (g.size.width < g.size.height ? width * 1.33 : width / 1.33) : width / (localRendererAspectRatio ?? 1))
|
||||
.padding([.top, .trailing], 17)
|
||||
}
|
||||
}
|
||||
}
|
||||
if let call = m.activeCall, let client = client, (!pipShown || !call.hasVideo) {
|
||||
if let call = m.activeCall, let client = client, (!pipShown || !call.supportsVideo) {
|
||||
ActiveCallOverlay(call: call, client: client)
|
||||
}
|
||||
}
|
||||
@@ -69,9 +54,6 @@ struct ActiveCallView: View {
|
||||
.onAppear {
|
||||
logger.debug("ActiveCallView: appear client is nil \(client == nil), scenePhase \(String(describing: scenePhase)), canConnectCall \(canConnectCall)")
|
||||
AppDelegate.keepScreenOn(true)
|
||||
Task {
|
||||
await askRequiredPermissions()
|
||||
}
|
||||
createWebRTCClient()
|
||||
dismissAllSheets()
|
||||
hideKeyboard()
|
||||
@@ -102,7 +84,7 @@ struct ActiveCallView: View {
|
||||
|
||||
private func createWebRTCClient() {
|
||||
if client == nil && canConnectCall {
|
||||
client = WebRTCClient({ msg in await MainActor.run { processRtcMessage(msg: msg) } }, $localRendererAspectRatio)
|
||||
client = WebRTCClient($activeCall, { msg in await MainActor.run { processRtcMessage(msg: msg) } }, $localRendererAspectRatio)
|
||||
Task {
|
||||
await m.callCommand.setClient(client)
|
||||
}
|
||||
@@ -117,7 +99,7 @@ struct ActiveCallView: View {
|
||||
logger.debug("ActiveCallView: response \(msg.resp.respType)")
|
||||
switch msg.resp {
|
||||
case let .capabilities(capabilities):
|
||||
let callType = CallType(media: call.initialCallType, capabilities: capabilities)
|
||||
let callType = CallType(media: call.localMedia, capabilities: capabilities)
|
||||
Task {
|
||||
do {
|
||||
try await apiSendCallInvitation(call.contact, callType)
|
||||
@@ -128,7 +110,7 @@ struct ActiveCallView: View {
|
||||
call.callState = .invitationSent
|
||||
call.localCapabilities = capabilities
|
||||
}
|
||||
if call.hasVideo && !AVAudioSession.sharedInstance().hasExternalAudioDevice() {
|
||||
if call.supportsVideo && !AVAudioSession.sharedInstance().hasExternalAudioDevice() {
|
||||
try? AVAudioSession.sharedInstance().setCategory(.playback, options: [.allowBluetooth, .allowAirPlay, .allowBluetoothA2DP])
|
||||
}
|
||||
CallSoundsPlayer.shared.startConnectingCallSound()
|
||||
@@ -138,7 +120,7 @@ struct ActiveCallView: View {
|
||||
Task {
|
||||
do {
|
||||
try await apiSendCallOffer(call.contact, offer, iceCandidates,
|
||||
media: call.initialCallType, capabilities: capabilities)
|
||||
media: call.localMedia, capabilities: capabilities)
|
||||
} catch {
|
||||
logger.error("apiSendCallOffer \(responseError(error))")
|
||||
}
|
||||
@@ -182,9 +164,6 @@ struct ActiveCallView: View {
|
||||
}
|
||||
if state.connectionState == "closed" {
|
||||
closeCallView(client)
|
||||
if let callUUID = m.activeCall?.callUUID {
|
||||
CallController.shared.endCall(callUUID: callUUID)
|
||||
}
|
||||
m.activeCall = nil
|
||||
m.activeCallViewIsCollapsed = false
|
||||
}
|
||||
@@ -203,14 +182,6 @@ struct ActiveCallView: View {
|
||||
CallSoundsPlayer.shared.vibrate(long: false)
|
||||
wasConnected = true
|
||||
}
|
||||
case let .peerMedia(source, enabled):
|
||||
switch source {
|
||||
case .mic: call.peerMediaSources.mic = enabled
|
||||
case .camera: call.peerMediaSources.camera = enabled
|
||||
case .screenAudio: call.peerMediaSources.screenAudio = enabled
|
||||
case .screenVideo: call.peerMediaSources.screenVideo = enabled
|
||||
case .unknown: ()
|
||||
}
|
||||
case .ended:
|
||||
closeCallView(client)
|
||||
call.callState = .ended
|
||||
@@ -255,26 +226,6 @@ struct ActiveCallView: View {
|
||||
}
|
||||
}
|
||||
|
||||
private func askRequiredPermissions() async {
|
||||
let mic = await WebRTCClient.isAuthorized(for: .audio)
|
||||
await MainActor.run {
|
||||
call.localMediaSources.mic = mic
|
||||
}
|
||||
let cameraAuthorized = AVCaptureDevice.authorizationStatus(for: .video) == .authorized
|
||||
var camera = call.initialCallType == .audio || cameraAuthorized
|
||||
if call.initialCallType == .video && !cameraAuthorized {
|
||||
camera = await WebRTCClient.isAuthorized(for: .video)
|
||||
await MainActor.run {
|
||||
if camera, let client {
|
||||
client.setCameraEnabled(true)
|
||||
}
|
||||
}
|
||||
}
|
||||
if !mic || !camera {
|
||||
WebRTCClient.showUnauthorizedAlert(for: !mic ? .audio : .video)
|
||||
}
|
||||
}
|
||||
|
||||
private func closeCallView(_ client: WebRTCClient) {
|
||||
if m.activeCall != nil {
|
||||
m.showCallView = false
|
||||
@@ -290,16 +241,44 @@ struct ActiveCallOverlay: View {
|
||||
|
||||
var body: some View {
|
||||
VStack {
|
||||
switch call.hasVideo {
|
||||
case true:
|
||||
switch call.localMedia {
|
||||
case .video:
|
||||
videoCallInfoView(call)
|
||||
.foregroundColor(.white)
|
||||
.opacity(0.8)
|
||||
.padding(.horizontal)
|
||||
// Fixed vertical padding required for preserving position of buttons row when changing audio-to-video and back in landscape orientation.
|
||||
// Otherwise, bigger padding is added by SwiftUI when switching call types
|
||||
.padding(.vertical, 10)
|
||||
case false:
|
||||
.padding()
|
||||
|
||||
Spacer()
|
||||
|
||||
HStack {
|
||||
toggleAudioButton()
|
||||
Spacer()
|
||||
if deviceManager.availableInputs.allSatisfy({ $0.portType == .builtInMic }) {
|
||||
toggleSpeakerButton()
|
||||
.frame(width: 40, height: 40)
|
||||
} else if call.hasMedia {
|
||||
AudioDevicePicker()
|
||||
.scaleEffect(2)
|
||||
.frame(maxWidth: 40, maxHeight: 40)
|
||||
} else {
|
||||
Color.clear.frame(width: 40, height: 40)
|
||||
}
|
||||
Spacer()
|
||||
endCallButton()
|
||||
Spacer()
|
||||
if call.videoEnabled {
|
||||
flipCameraButton()
|
||||
} else {
|
||||
Color.clear.frame(width: 40, height: 40)
|
||||
}
|
||||
Spacer()
|
||||
toggleVideoButton()
|
||||
}
|
||||
.padding(.horizontal, 20)
|
||||
.padding(.bottom, 16)
|
||||
.frame(maxWidth: .infinity, alignment: .center)
|
||||
|
||||
case .audio:
|
||||
ZStack(alignment: .topLeading) {
|
||||
Button {
|
||||
chatModel.activeCallViewIsCollapsed = true
|
||||
@@ -314,32 +293,35 @@ struct ActiveCallOverlay: View {
|
||||
}
|
||||
.foregroundColor(.white)
|
||||
.opacity(0.8)
|
||||
.padding(.horizontal)
|
||||
.padding(.vertical, 10)
|
||||
.padding()
|
||||
.frame(maxHeight: .infinity)
|
||||
}
|
||||
}
|
||||
|
||||
Spacer()
|
||||
Spacer()
|
||||
|
||||
HStack {
|
||||
toggleMicButton()
|
||||
Spacer()
|
||||
audioDeviceButton()
|
||||
Spacer()
|
||||
endCallButton()
|
||||
Spacer()
|
||||
if call.localMediaSources.camera {
|
||||
flipCameraButton()
|
||||
} else {
|
||||
Color.clear.frame(width: 60, height: 60)
|
||||
ZStack(alignment: .bottom) {
|
||||
toggleAudioButton()
|
||||
.frame(maxWidth: .infinity, alignment: .leading)
|
||||
endCallButton()
|
||||
// Check if the only input is microphone. And in this case show toggle button,
|
||||
// If there are more inputs, it probably means something like bluetooth headphones are available
|
||||
// and in this case show iOS button for choosing different output.
|
||||
// There is no way to get available outputs, only inputs
|
||||
if deviceManager.availableInputs.allSatisfy({ $0.portType == .builtInMic }) {
|
||||
toggleSpeakerButton()
|
||||
.frame(maxWidth: .infinity, alignment: .trailing)
|
||||
} else if call.hasMedia {
|
||||
AudioDevicePicker()
|
||||
.scaleEffect(2)
|
||||
.frame(maxWidth: 50, maxHeight: 40)
|
||||
.frame(maxWidth: .infinity, alignment: .trailing)
|
||||
} else {
|
||||
Color.clear.frame(width: 50, height: 40)
|
||||
}
|
||||
}
|
||||
Spacer()
|
||||
toggleCameraButton()
|
||||
.padding(.bottom, 60)
|
||||
.padding(.horizontal, 48)
|
||||
}
|
||||
.padding(.horizontal, 20)
|
||||
.padding(.bottom, 16)
|
||||
.frame(maxWidth: 440, alignment: .center)
|
||||
}
|
||||
.frame(maxWidth: .infinity)
|
||||
.onAppear {
|
||||
@@ -401,54 +383,36 @@ struct ActiveCallOverlay: View {
|
||||
|
||||
private func endCallButton() -> some View {
|
||||
let cc = CallController.shared
|
||||
return callButton("phone.down.fill", .red, padding: 10) {
|
||||
return callButton("phone.down.fill", width: 60, height: 60) {
|
||||
if let uuid = call.callUUID {
|
||||
cc.endCall(callUUID: uuid)
|
||||
} else {
|
||||
cc.endCall(call: call) {}
|
||||
}
|
||||
}
|
||||
.foregroundColor(.red)
|
||||
}
|
||||
|
||||
private func toggleMicButton() -> some View {
|
||||
controlButton(call, call.localMediaSources.mic ? "mic.fill" : "mic.slash", padding: 14) {
|
||||
private func toggleAudioButton() -> some View {
|
||||
controlButton(call, call.audioEnabled ? "mic.fill" : "mic.slash") {
|
||||
Task {
|
||||
if await WebRTCClient.isAuthorized(for: .audio) {
|
||||
client.setAudioEnabled(!call.localMediaSources.mic)
|
||||
} else { WebRTCClient.showUnauthorizedAlert(for: .audio) }
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func audioDeviceButton() -> some View {
|
||||
// Check if the only input is microphone. And in this case show toggle button,
|
||||
// If there are more inputs, it probably means something like bluetooth headphones are available
|
||||
// and in this case show iOS button for choosing different output.
|
||||
// There is no way to get available outputs, only inputs
|
||||
Group {
|
||||
if deviceManager.availableInputs.allSatisfy({ $0.portType == .builtInMic }) {
|
||||
toggleSpeakerButton()
|
||||
} else {
|
||||
audioDevicePickerButton()
|
||||
}
|
||||
}
|
||||
.onChange(of: call.localMediaSources.hasVideo) { hasVideo in
|
||||
let current = AVAudioSession.sharedInstance().currentRoute.outputs.first?.portType
|
||||
let speakerEnabled = current == .builtInSpeaker
|
||||
let receiverEnabled = current == .builtInReceiver
|
||||
// react automatically only when receiver were selected, otherwise keep an external device selected
|
||||
if !speakerEnabled && hasVideo && receiverEnabled {
|
||||
client.setSpeakerEnabledAndConfigureSession(!speakerEnabled, skipExternalDevice: true)
|
||||
call.speakerEnabled = !speakerEnabled
|
||||
client.setAudioEnabled(!call.audioEnabled)
|
||||
DispatchQueue.main.async {
|
||||
call.audioEnabled = !call.audioEnabled
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private func toggleSpeakerButton() -> some View {
|
||||
controlButton(call, !call.peerMediaSources.mic ? "speaker.slash" : call.speakerEnabled ? "speaker.wave.2.fill" : "speaker.wave.1.fill", padding: !call.peerMediaSources.mic ? 16 : call.speakerEnabled ? 15 : 17) {
|
||||
let speakerEnabled = AVAudioSession.sharedInstance().currentRoute.outputs.first?.portType == .builtInSpeaker
|
||||
client.setSpeakerEnabledAndConfigureSession(!speakerEnabled)
|
||||
call.speakerEnabled = !speakerEnabled
|
||||
controlButton(call, call.speakerEnabled ? "speaker.wave.2.fill" : "speaker.wave.1.fill") {
|
||||
Task {
|
||||
let speakerEnabled = AVAudioSession.sharedInstance().currentRoute.outputs.first?.portType == .builtInSpeaker
|
||||
client.setSpeakerEnabledAndConfigureSession(!speakerEnabled)
|
||||
DispatchQueue.main.async {
|
||||
call.speakerEnabled = !speakerEnabled
|
||||
}
|
||||
}
|
||||
}
|
||||
.onAppear {
|
||||
deviceManager.call = call
|
||||
@@ -456,67 +420,53 @@ struct ActiveCallOverlay: View {
|
||||
}
|
||||
}
|
||||
|
||||
private func toggleCameraButton() -> some View {
|
||||
controlButton(call, call.localMediaSources.camera ? "video.fill" : "video.slash", padding: call.localMediaSources.camera ? 16 : 14) {
|
||||
private func toggleVideoButton() -> some View {
|
||||
controlButton(call, call.videoEnabled ? "video.fill" : "video.slash") {
|
||||
Task {
|
||||
if await WebRTCClient.isAuthorized(for: .video) {
|
||||
client.setCameraEnabled(!call.localMediaSources.camera)
|
||||
} else { WebRTCClient.showUnauthorizedAlert(for: .video) }
|
||||
client.setVideoEnabled(!call.videoEnabled)
|
||||
DispatchQueue.main.async {
|
||||
call.videoEnabled = !call.videoEnabled
|
||||
}
|
||||
}
|
||||
}
|
||||
.disabled(call.initialCallType == .audio && client.activeCall?.peerHasOldVersion == true)
|
||||
}
|
||||
|
||||
@ViewBuilder private func flipCameraButton() -> some View {
|
||||
controlButton(call, "arrow.triangle.2.circlepath", padding: 12) {
|
||||
controlButton(call, "arrow.triangle.2.circlepath") {
|
||||
Task {
|
||||
if await WebRTCClient.isAuthorized(for: .video) {
|
||||
client.flipCamera()
|
||||
}
|
||||
client.flipCamera()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ViewBuilder private func controlButton(_ call: Call, _ imageName: String, padding: CGFloat, _ perform: @escaping () -> Void) -> some View {
|
||||
callButton(imageName, call.peerMediaSources.hasVideo ? Color.black.opacity(0.2) : Color.white.opacity(0.2), padding: padding, perform)
|
||||
@ViewBuilder private func controlButton(_ call: Call, _ imageName: String, _ perform: @escaping () -> Void) -> some View {
|
||||
if call.hasMedia {
|
||||
callButton(imageName, width: 50, height: 38, perform)
|
||||
.foregroundColor(.white)
|
||||
.opacity(0.85)
|
||||
} else {
|
||||
Color.clear.frame(width: 50, height: 38)
|
||||
}
|
||||
}
|
||||
|
||||
@ViewBuilder private func audioDevicePickerButton() -> some View {
|
||||
AudioDevicePicker()
|
||||
.opacity(0.8)
|
||||
.scaleEffect(2)
|
||||
.padding(10)
|
||||
.frame(width: 60, height: 60)
|
||||
.background(call.peerMediaSources.hasVideo ? Color.black.opacity(0.2) : Color.white.opacity(0.2))
|
||||
.clipShape(.circle)
|
||||
}
|
||||
|
||||
private func callButton(_ imageName: String, _ background: Color, padding: CGFloat, _ perform: @escaping () -> Void) -> some View {
|
||||
private func callButton(_ imageName: String, width: CGFloat, height: CGFloat, _ perform: @escaping () -> Void) -> some View {
|
||||
Button {
|
||||
perform()
|
||||
} label: {
|
||||
Image(systemName: imageName)
|
||||
.resizable()
|
||||
.scaledToFit()
|
||||
.padding(padding)
|
||||
.frame(width: 60, height: 60)
|
||||
.background(background)
|
||||
.frame(maxWidth: width, maxHeight: height)
|
||||
}
|
||||
.foregroundColor(whiteColorWithAlpha)
|
||||
.clipShape(.circle)
|
||||
}
|
||||
|
||||
private var whiteColorWithAlpha: Color {
|
||||
get { Color(red: 204 / 255, green: 204 / 255, blue: 204 / 255) }
|
||||
}
|
||||
}
|
||||
|
||||
struct ActiveCallOverlay_Previews: PreviewProvider {
|
||||
static var previews: some View {
|
||||
Group{
|
||||
ActiveCallOverlay(call: Call(direction: .incoming, contact: Contact.sampleData, callUUID: UUID().uuidString.lowercased(), callState: .offerSent, initialCallType: .video), client: WebRTCClient({ _ in }, Binding.constant(nil)))
|
||||
ActiveCallOverlay(call: Call(direction: .incoming, contact: Contact.sampleData, callUUID: UUID().uuidString.lowercased(), callState: .offerSent, localMedia: .video), client: WebRTCClient(Binding.constant(nil), { _ in }, Binding.constant(nil)))
|
||||
.background(.black)
|
||||
ActiveCallOverlay(call: Call(direction: .incoming, contact: Contact.sampleData, callUUID: UUID().uuidString.lowercased(), callState: .offerSent, initialCallType: .audio), client: WebRTCClient({ _ in }, Binding.constant(nil)))
|
||||
ActiveCallOverlay(call: Call(direction: .incoming, contact: Contact.sampleData, callUUID: UUID().uuidString.lowercased(), callState: .offerSent, localMedia: .audio), client: WebRTCClient(Binding.constant(nil), { _ in }, Binding.constant(nil)))
|
||||
.background(.black)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -104,7 +104,7 @@ class CallController: NSObject, CXProviderDelegate, PKPushRegistryDelegate, Obse
|
||||
}
|
||||
|
||||
func provider(_ provider: CXProvider, perform action: CXSetMutedCallAction) {
|
||||
if callManager.enableMedia(source: .mic, enable: !action.isMuted, callUUID: action.callUUID.uuidString.lowercased()) {
|
||||
if callManager.enableMedia(media: .audio, enable: !action.isMuted, callUUID: action.callUUID.uuidString.lowercased()) {
|
||||
action.fulfill()
|
||||
} else {
|
||||
action.fail()
|
||||
@@ -121,8 +121,8 @@ class CallController: NSObject, CXProviderDelegate, PKPushRegistryDelegate, Obse
|
||||
RTCAudioSession.sharedInstance().audioSessionDidActivate(audioSession)
|
||||
RTCAudioSession.sharedInstance().isAudioEnabled = true
|
||||
do {
|
||||
let hasVideo = ChatModel.shared.activeCall?.hasVideo == true
|
||||
if hasVideo {
|
||||
let supportsVideo = ChatModel.shared.activeCall?.supportsVideo == true
|
||||
if supportsVideo {
|
||||
try audioSession.setCategory(.playAndRecord, mode: .videoChat, options: [.defaultToSpeaker, .mixWithOthers, .allowBluetooth, .allowAirPlay, .allowBluetoothA2DP])
|
||||
} else {
|
||||
try audioSession.setCategory(.playAndRecord, mode: .voiceChat, options: [.mixWithOthers, .allowBluetooth, .allowAirPlay, .allowBluetoothA2DP])
|
||||
@@ -133,7 +133,7 @@ class CallController: NSObject, CXProviderDelegate, PKPushRegistryDelegate, Obse
|
||||
try? await Task.sleep(nanoseconds: UInt64(i) * 300_000000)
|
||||
if let preferred = audioSession.preferredInputDevice() {
|
||||
await MainActor.run { try? audioSession.setPreferredInput(preferred) }
|
||||
} else if hasVideo {
|
||||
} else if supportsVideo {
|
||||
await MainActor.run { try? audioSession.overrideOutputAudioPort(.speaker) }
|
||||
}
|
||||
}
|
||||
@@ -357,9 +357,11 @@ class CallController: NSObject, CXProviderDelegate, PKPushRegistryDelegate, Obse
|
||||
self.provider.reportCall(with: uuid, updated: update)
|
||||
}
|
||||
} else if callManager.startOutgoingCall(callUUID: callUUID) {
|
||||
logger.debug("CallController.startCall: call started")
|
||||
} else {
|
||||
logger.error("CallController.startCall: no active call")
|
||||
if callManager.startOutgoingCall(callUUID: callUUID) {
|
||||
logger.debug("CallController.startCall: call started")
|
||||
} else {
|
||||
logger.error("CallController.startCall: no active call")
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -12,7 +12,7 @@ import SimpleXChat
|
||||
class CallManager {
|
||||
func newOutgoingCall(_ contact: Contact, _ media: CallMediaType) -> String {
|
||||
let uuid = UUID().uuidString.lowercased()
|
||||
let call = Call(direction: .outgoing, contact: contact, callUUID: uuid, callState: .waitCapabilities, initialCallType: media)
|
||||
let call = Call(direction: .outgoing, contact: contact, callUUID: uuid, callState: .waitCapabilities, localMedia: media)
|
||||
call.speakerEnabled = media == .video
|
||||
ChatModel.shared.activeCall = call
|
||||
return uuid
|
||||
@@ -22,7 +22,7 @@ class CallManager {
|
||||
let m = ChatModel.shared
|
||||
if let call = m.activeCall, call.callUUID == callUUID {
|
||||
m.showCallView = true
|
||||
Task { await m.callCommand.processCommand(.capabilities(media: call.initialCallType)) }
|
||||
Task { await m.callCommand.processCommand(.capabilities(media: call.localMedia)) }
|
||||
return true
|
||||
}
|
||||
return false
|
||||
@@ -44,7 +44,7 @@ class CallManager {
|
||||
contact: invitation.contact,
|
||||
callUUID: invitation.callUUID,
|
||||
callState: .invitationAccepted,
|
||||
initialCallType: invitation.callType.media,
|
||||
localMedia: invitation.callType.media,
|
||||
sharedKey: invitation.sharedKey
|
||||
)
|
||||
call.speakerEnabled = invitation.callType.media == .video
|
||||
@@ -68,10 +68,10 @@ class CallManager {
|
||||
}
|
||||
}
|
||||
|
||||
func enableMedia(source: CallMediaSource, enable: Bool, callUUID: String) -> Bool {
|
||||
func enableMedia(media: CallMediaType, enable: Bool, callUUID: String) -> Bool {
|
||||
if let call = ChatModel.shared.activeCall, call.callUUID == callUUID {
|
||||
let m = ChatModel.shared
|
||||
Task { await m.callCommand.processCommand(.media(source: source, enable: enable)) }
|
||||
Task { await m.callCommand.processCommand(.media(media: media, enable: enable)) }
|
||||
return true
|
||||
}
|
||||
return false
|
||||
|
||||
@@ -10,49 +10,40 @@ import AVKit
|
||||
|
||||
struct CallViewRemote: UIViewRepresentable {
|
||||
var client: WebRTCClient
|
||||
@ObservedObject var call: Call
|
||||
var activeCall: Binding<WebRTCClient.Call?>
|
||||
@State var enablePip: (Bool) -> Void = {_ in }
|
||||
@Binding var activeCallViewIsCollapsed: Bool
|
||||
@Binding var contentMode: UIView.ContentMode
|
||||
@Binding var pipShown: Bool
|
||||
|
||||
init(client: WebRTCClient, activeCall: Binding<WebRTCClient.Call?>, activeCallViewIsCollapsed: Binding<Bool>, pipShown: Binding<Bool>) {
|
||||
self.client = client
|
||||
self.activeCall = activeCall
|
||||
self._activeCallViewIsCollapsed = activeCallViewIsCollapsed
|
||||
self._pipShown = pipShown
|
||||
}
|
||||
|
||||
func makeUIView(context: Context) -> UIView {
|
||||
let view = UIView()
|
||||
let remoteCameraRenderer = RTCMTLVideoView(frame: view.frame)
|
||||
remoteCameraRenderer.videoContentMode = contentMode
|
||||
remoteCameraRenderer.tag = 0
|
||||
if let call = activeCall.wrappedValue {
|
||||
let remoteRenderer = RTCMTLVideoView(frame: view.frame)
|
||||
remoteRenderer.videoContentMode = .scaleAspectFill
|
||||
client.addRemoteRenderer(call, remoteRenderer)
|
||||
addSubviewAndResize(remoteRenderer, into: view)
|
||||
|
||||
let screenVideo = call.peerMediaSources.screenVideo
|
||||
let remoteScreenRenderer = RTCMTLVideoView(frame: view.frame)
|
||||
remoteScreenRenderer.videoContentMode = contentMode
|
||||
remoteScreenRenderer.tag = 1
|
||||
remoteScreenRenderer.alpha = screenVideo ? 1 : 0
|
||||
|
||||
context.coordinator.cameraRenderer = remoteCameraRenderer
|
||||
context.coordinator.screenRenderer = remoteScreenRenderer
|
||||
client.addRemoteCameraRenderer(remoteCameraRenderer)
|
||||
client.addRemoteScreenRenderer(remoteScreenRenderer)
|
||||
if screenVideo {
|
||||
addSubviewAndResize(remoteScreenRenderer, remoteCameraRenderer, into: view)
|
||||
} else {
|
||||
addSubviewAndResize(remoteCameraRenderer, remoteScreenRenderer, into: view)
|
||||
}
|
||||
|
||||
if AVPictureInPictureController.isPictureInPictureSupported() {
|
||||
makeViewWithRTCRenderer(remoteCameraRenderer, remoteScreenRenderer, view, context)
|
||||
if AVPictureInPictureController.isPictureInPictureSupported() {
|
||||
makeViewWithRTCRenderer(call, remoteRenderer, view, context)
|
||||
}
|
||||
}
|
||||
return view
|
||||
}
|
||||
|
||||
func makeViewWithRTCRenderer(_ remoteCameraRenderer: RTCMTLVideoView, _ remoteScreenRenderer: RTCMTLVideoView, _ view: UIView, _ context: Context) {
|
||||
let pipRemoteCameraRenderer = RTCMTLVideoView(frame: view.frame)
|
||||
pipRemoteCameraRenderer.videoContentMode = .scaleAspectFill
|
||||
|
||||
let pipRemoteScreenRenderer = RTCMTLVideoView(frame: view.frame)
|
||||
pipRemoteScreenRenderer.videoContentMode = .scaleAspectFill
|
||||
|
||||
func makeViewWithRTCRenderer(_ call: WebRTCClient.Call, _ remoteRenderer: RTCMTLVideoView, _ view: UIView, _ context: Context) {
|
||||
let pipRemoteRenderer = RTCMTLVideoView(frame: view.frame)
|
||||
pipRemoteRenderer.videoContentMode = .scaleAspectFill
|
||||
|
||||
let pipVideoCallViewController = AVPictureInPictureVideoCallViewController()
|
||||
pipVideoCallViewController.preferredContentSize = CGSize(width: 1080, height: 1920)
|
||||
addSubviewAndResize(pipRemoteRenderer, into: pipVideoCallViewController.view)
|
||||
let pipContentSource = AVPictureInPictureController.ContentSource(
|
||||
activeVideoCallSourceView: view,
|
||||
contentViewController: pipVideoCallViewController
|
||||
@@ -64,9 +55,7 @@ struct CallViewRemote: UIViewRepresentable {
|
||||
context.coordinator.pipController = pipController
|
||||
context.coordinator.willShowHide = { show in
|
||||
if show {
|
||||
client.addRemoteCameraRenderer(pipRemoteCameraRenderer)
|
||||
client.addRemoteScreenRenderer(pipRemoteScreenRenderer)
|
||||
context.coordinator.relayout()
|
||||
client.addRemoteRenderer(call, pipRemoteRenderer)
|
||||
DispatchQueue.main.asyncAfter(deadline: .now() + 0.1) {
|
||||
activeCallViewIsCollapsed = true
|
||||
}
|
||||
@@ -78,29 +67,13 @@ struct CallViewRemote: UIViewRepresentable {
|
||||
}
|
||||
context.coordinator.didShowHide = { show in
|
||||
if show {
|
||||
remoteCameraRenderer.isHidden = true
|
||||
remoteScreenRenderer.isHidden = true
|
||||
remoteRenderer.isHidden = true
|
||||
} else {
|
||||
client.removeRemoteCameraRenderer(pipRemoteCameraRenderer)
|
||||
client.removeRemoteScreenRenderer(pipRemoteScreenRenderer)
|
||||
remoteCameraRenderer.isHidden = false
|
||||
remoteScreenRenderer.isHidden = false
|
||||
client.removeRemoteRenderer(call, pipRemoteRenderer)
|
||||
remoteRenderer.isHidden = false
|
||||
}
|
||||
pipShown = show
|
||||
}
|
||||
context.coordinator.relayout = {
|
||||
let camera = call.peerMediaSources.camera
|
||||
let screenVideo = call.peerMediaSources.screenVideo
|
||||
pipRemoteCameraRenderer.alpha = camera ? 1 : 0
|
||||
pipRemoteScreenRenderer.alpha = screenVideo ? 1 : 0
|
||||
if screenVideo {
|
||||
addSubviewAndResize(pipRemoteScreenRenderer, pipRemoteCameraRenderer, pip: true, into: pipVideoCallViewController.view)
|
||||
} else {
|
||||
addSubviewAndResize(pipRemoteCameraRenderer, pipRemoteScreenRenderer, pip: true, into: pipVideoCallViewController.view)
|
||||
}
|
||||
(pipVideoCallViewController.view.subviews[0] as! RTCMTLVideoView).videoContentMode = contentMode
|
||||
(pipVideoCallViewController.view.subviews[1] as! RTCMTLVideoView).videoContentMode = .scaleAspectFill
|
||||
}
|
||||
DispatchQueue.main.async {
|
||||
enablePip = { enable in
|
||||
if enable != pipShown /* pipController.isPictureInPictureActive */ {
|
||||
@@ -115,50 +88,24 @@ struct CallViewRemote: UIViewRepresentable {
|
||||
}
|
||||
|
||||
func makeCoordinator() -> Coordinator {
|
||||
Coordinator(client)
|
||||
Coordinator()
|
||||
}
|
||||
|
||||
func updateUIView(_ view: UIView, context: Context) {
|
||||
logger.debug("CallView.updateUIView remote")
|
||||
let camera = view.subviews.first(where: { $0.tag == 0 })!
|
||||
let screen = view.subviews.first(where: { $0.tag == 1 })!
|
||||
let screenVideo = call.peerMediaSources.screenVideo
|
||||
if screenVideo && screen.alpha == 0 {
|
||||
screen.alpha = 1
|
||||
addSubviewAndResize(screen, camera, into: view)
|
||||
} else if !screenVideo && screen.alpha == 1 {
|
||||
screen.alpha = 0
|
||||
addSubviewAndResize(camera, screen, into: view)
|
||||
}
|
||||
(view.subviews[0] as! RTCMTLVideoView).videoContentMode = contentMode
|
||||
(view.subviews[1] as! RTCMTLVideoView).videoContentMode = .scaleAspectFill
|
||||
|
||||
camera.alpha = call.peerMediaSources.camera ? 1 : 0
|
||||
screen.alpha = call.peerMediaSources.screenVideo ? 1 : 0
|
||||
|
||||
DispatchQueue.main.async {
|
||||
if activeCallViewIsCollapsed != pipShown {
|
||||
enablePip(activeCallViewIsCollapsed)
|
||||
} else if pipShown {
|
||||
context.coordinator.relayout()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// MARK: - Coordinator
|
||||
class Coordinator: NSObject, AVPictureInPictureControllerDelegate {
|
||||
var cameraRenderer: RTCMTLVideoView?
|
||||
var screenRenderer: RTCMTLVideoView?
|
||||
var client: WebRTCClient
|
||||
var pipController: AVPictureInPictureController? = nil
|
||||
var willShowHide: (Bool) -> Void = { _ in }
|
||||
var didShowHide: (Bool) -> Void = { _ in }
|
||||
var relayout: () -> Void = {}
|
||||
|
||||
required init(_ client: WebRTCClient) {
|
||||
self.client = client
|
||||
}
|
||||
|
||||
|
||||
func pictureInPictureControllerWillStartPictureInPicture(_ pictureInPictureController: AVPictureInPictureController) {
|
||||
willShowHide(true)
|
||||
}
|
||||
@@ -180,20 +127,11 @@ struct CallViewRemote: UIViewRepresentable {
|
||||
}
|
||||
|
||||
deinit {
|
||||
// TODO: deinit is not called when changing call type from audio to video and back,
|
||||
// which causes many renderers can be created and added to stream (if enabling/disabling
|
||||
// video while not yet connected in outgoing call)
|
||||
pipController?.stopPictureInPicture()
|
||||
pipController?.canStartPictureInPictureAutomaticallyFromInline = false
|
||||
pipController?.contentSource = nil
|
||||
pipController?.delegate = nil
|
||||
pipController = nil
|
||||
if let cameraRenderer {
|
||||
client.removeRemoteCameraRenderer(cameraRenderer)
|
||||
}
|
||||
if let screenRenderer {
|
||||
client.removeRemoteScreenRenderer(screenRenderer)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -210,109 +148,51 @@ struct CallViewRemote: UIViewRepresentable {
|
||||
|
||||
struct CallViewLocal: UIViewRepresentable {
|
||||
var client: WebRTCClient
|
||||
var activeCall: Binding<WebRTCClient.Call?>
|
||||
var localRendererAspectRatio: Binding<CGFloat?>
|
||||
@State var pipStateChanged: (Bool) -> Void = {_ in }
|
||||
@Binding var pipShown: Bool
|
||||
|
||||
init(client: WebRTCClient, localRendererAspectRatio: Binding<CGFloat?>, pipShown: Binding<Bool>) {
|
||||
init(client: WebRTCClient, activeCall: Binding<WebRTCClient.Call?>, localRendererAspectRatio: Binding<CGFloat?>, pipShown: Binding<Bool>) {
|
||||
self.client = client
|
||||
self.activeCall = activeCall
|
||||
self.localRendererAspectRatio = localRendererAspectRatio
|
||||
self._pipShown = pipShown
|
||||
}
|
||||
|
||||
func makeUIView(context: Context) -> UIView {
|
||||
let view = UIView()
|
||||
let localRenderer = RTCEAGLVideoView(frame: .zero)
|
||||
context.coordinator.renderer = localRenderer
|
||||
client.addLocalRenderer(localRenderer)
|
||||
addSubviewAndResize(localRenderer, nil, into: view)
|
||||
DispatchQueue.main.async {
|
||||
pipStateChanged = { shown in
|
||||
localRenderer.isHidden = shown
|
||||
if let call = activeCall.wrappedValue {
|
||||
let localRenderer = RTCEAGLVideoView(frame: .zero)
|
||||
client.addLocalRenderer(call, localRenderer)
|
||||
client.startCaptureLocalVideo(call)
|
||||
addSubviewAndResize(localRenderer, into: view)
|
||||
DispatchQueue.main.async {
|
||||
pipStateChanged = { shown in
|
||||
localRenderer.isHidden = shown
|
||||
}
|
||||
}
|
||||
}
|
||||
return view
|
||||
}
|
||||
|
||||
func makeCoordinator() -> Coordinator {
|
||||
Coordinator(client)
|
||||
}
|
||||
|
||||
func updateUIView(_ view: UIView, context: Context) {
|
||||
logger.debug("CallView.updateUIView local")
|
||||
pipStateChanged(pipShown)
|
||||
}
|
||||
|
||||
// MARK: - Coordinator
|
||||
class Coordinator: NSObject, AVPictureInPictureControllerDelegate {
|
||||
var renderer: RTCEAGLVideoView?
|
||||
var client: WebRTCClient
|
||||
|
||||
required init(_ client: WebRTCClient) {
|
||||
self.client = client
|
||||
}
|
||||
|
||||
deinit {
|
||||
if let renderer {
|
||||
client.removeLocalRenderer(renderer)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private func addSubviewAndResize(_ fullscreen: UIView, _ end: UIView?, pip: Bool = false, into containerView: UIView) {
|
||||
if containerView.subviews.firstIndex(of: fullscreen) == 0 && ((end == nil && containerView.subviews.count == 1) || (end != nil && containerView.subviews.firstIndex(of: end!) == 1)) {
|
||||
// Nothing to do, elements on their places
|
||||
return
|
||||
}
|
||||
containerView.removeConstraints(containerView.constraints)
|
||||
containerView.subviews.forEach { sub in sub.removeFromSuperview()}
|
||||
|
||||
containerView.addSubview(fullscreen)
|
||||
fullscreen.translatesAutoresizingMaskIntoConstraints = false
|
||||
fullscreen.layer.cornerRadius = 0
|
||||
fullscreen.layer.masksToBounds = false
|
||||
|
||||
if let end {
|
||||
containerView.addSubview(end)
|
||||
end.translatesAutoresizingMaskIntoConstraints = false
|
||||
end.layer.cornerRadius = pip ? 8 : 10
|
||||
end.layer.masksToBounds = true
|
||||
}
|
||||
|
||||
let constraintFullscreenV = NSLayoutConstraint.constraints(
|
||||
withVisualFormat: "V:|[fullscreen]|",
|
||||
private func addSubviewAndResize(_ view: UIView, into containerView: UIView) {
|
||||
containerView.addSubview(view)
|
||||
view.translatesAutoresizingMaskIntoConstraints = false
|
||||
containerView.addConstraints(NSLayoutConstraint.constraints(withVisualFormat: "H:|[view]|",
|
||||
options: [],
|
||||
metrics: nil,
|
||||
views: ["fullscreen": fullscreen]
|
||||
)
|
||||
let constraintFullscreenH = NSLayoutConstraint.constraints(
|
||||
withVisualFormat: "H:|[fullscreen]|",
|
||||
views: ["view": view]))
|
||||
|
||||
containerView.addConstraints(NSLayoutConstraint.constraints(withVisualFormat: "V:|[view]|",
|
||||
options: [],
|
||||
metrics: nil,
|
||||
views: ["fullscreen": fullscreen]
|
||||
)
|
||||
|
||||
containerView.addConstraints(constraintFullscreenV)
|
||||
containerView.addConstraints(constraintFullscreenH)
|
||||
|
||||
if let end {
|
||||
let constraintEndWidth = NSLayoutConstraint(
|
||||
item: end, attribute: .width, relatedBy: .equal, toItem: containerView, attribute: .width, multiplier: pip ? 0.5 : 0.3, constant: 0
|
||||
)
|
||||
let constraintEndHeight = NSLayoutConstraint(
|
||||
item: end, attribute: .height, relatedBy: .equal, toItem: containerView, attribute: .width, multiplier: pip ? 0.5 * 1.33 : 0.3 * 1.33, constant: 0
|
||||
)
|
||||
let constraintEndX = NSLayoutConstraint(
|
||||
item: end, attribute: .leading, relatedBy: .equal, toItem: containerView, attribute: .trailing, multiplier: pip ? 0.5 : 0.7, constant: pip ? -8 : -17
|
||||
)
|
||||
let constraintEndY = NSLayoutConstraint(
|
||||
item: end, attribute: .bottom, relatedBy: .equal, toItem: containerView, attribute: .bottom, multiplier: 1, constant: pip ? -8 : -92
|
||||
)
|
||||
containerView.addConstraint(constraintEndWidth)
|
||||
containerView.addConstraint(constraintEndHeight)
|
||||
containerView.addConstraint(constraintEndX)
|
||||
containerView.addConstraint(constraintEndY)
|
||||
}
|
||||
views: ["view": view]))
|
||||
containerView.layoutIfNeeded()
|
||||
}
|
||||
|
||||
@@ -19,13 +19,14 @@ class Call: ObservableObject, Equatable {
|
||||
var direction: CallDirection
|
||||
var contact: Contact
|
||||
var callUUID: String?
|
||||
var initialCallType: CallMediaType
|
||||
@Published var localMediaSources: CallMediaSources
|
||||
var localMedia: CallMediaType
|
||||
@Published var callState: CallState
|
||||
@Published var localCapabilities: CallCapabilities?
|
||||
@Published var peerMediaSources: CallMediaSources = CallMediaSources()
|
||||
@Published var peerMedia: CallMediaType?
|
||||
@Published var sharedKey: String?
|
||||
@Published var audioEnabled = true
|
||||
@Published var speakerEnabled = false
|
||||
@Published var videoEnabled: Bool
|
||||
@Published var connectionInfo: ConnectionInfo?
|
||||
@Published var connectedAt: Date? = nil
|
||||
|
||||
@@ -34,33 +35,32 @@ class Call: ObservableObject, Equatable {
|
||||
contact: Contact,
|
||||
callUUID: String?,
|
||||
callState: CallState,
|
||||
initialCallType: CallMediaType,
|
||||
localMedia: CallMediaType,
|
||||
sharedKey: String? = nil
|
||||
) {
|
||||
self.direction = direction
|
||||
self.contact = contact
|
||||
self.callUUID = callUUID
|
||||
self.callState = callState
|
||||
self.initialCallType = initialCallType
|
||||
self.localMedia = localMedia
|
||||
self.sharedKey = sharedKey
|
||||
self.localMediaSources = CallMediaSources(
|
||||
mic: AVCaptureDevice.authorizationStatus(for: .audio) == .authorized,
|
||||
camera: initialCallType == .video && AVCaptureDevice.authorizationStatus(for: .video) == .authorized)
|
||||
self.videoEnabled = localMedia == .video
|
||||
}
|
||||
|
||||
var encrypted: Bool { get { localEncrypted && sharedKey != nil } }
|
||||
private var localEncrypted: Bool { get { localCapabilities?.encryption ?? false } }
|
||||
var localEncrypted: Bool { get { localCapabilities?.encryption ?? false } }
|
||||
var encryptionStatus: LocalizedStringKey {
|
||||
get {
|
||||
switch callState {
|
||||
case .waitCapabilities: return ""
|
||||
case .invitationSent: return localEncrypted ? "e2e encrypted" : "no e2e encryption"
|
||||
case .invitationAccepted: return sharedKey == nil ? "contact has no e2e encryption" : "contact has e2e encryption"
|
||||
default: return !localEncrypted ? "no e2e encryption" : sharedKey == nil ? "contact has no e2e encryption" : "e2e encrypted"
|
||||
default: return !localEncrypted ? "no e2e encryption" : sharedKey == nil ? "contact has no e2e encryption" : "e2e encrypted"
|
||||
}
|
||||
}
|
||||
}
|
||||
var hasVideo: Bool { get { localMediaSources.hasVideo || peerMediaSources.hasVideo } }
|
||||
var hasMedia: Bool { get { callState == .offerSent || callState == .negotiated || callState == .connected } }
|
||||
var supportsVideo: Bool { get { peerMedia == .video || localMedia == .video } }
|
||||
}
|
||||
|
||||
enum CallDirection {
|
||||
@@ -105,28 +105,18 @@ struct WVAPIMessage: Equatable, Decodable, Encodable {
|
||||
var command: WCallCommand?
|
||||
}
|
||||
|
||||
struct CallMediaSources: Equatable, Codable {
|
||||
var mic: Bool = false
|
||||
var camera: Bool = false
|
||||
var screenAudio: Bool = false
|
||||
var screenVideo: Bool = false
|
||||
|
||||
var hasVideo: Bool { get { camera || screenVideo } }
|
||||
}
|
||||
|
||||
enum WCallCommand: Equatable, Encodable, Decodable {
|
||||
case capabilities(media: CallMediaType)
|
||||
case start(media: CallMediaType, aesKey: String? = nil, iceServers: [RTCIceServer]? = nil, relay: Bool? = nil)
|
||||
case offer(offer: String, iceCandidates: String, media: CallMediaType, aesKey: String? = nil, iceServers: [RTCIceServer]? = nil, relay: Bool? = nil)
|
||||
case answer(answer: String, iceCandidates: String)
|
||||
case ice(iceCandidates: String)
|
||||
case media(source: CallMediaSource, enable: Bool)
|
||||
case media(media: CallMediaType, enable: Bool)
|
||||
case end
|
||||
|
||||
enum CodingKeys: String, CodingKey {
|
||||
case type
|
||||
case media
|
||||
case source
|
||||
case aesKey
|
||||
case offer
|
||||
case answer
|
||||
@@ -177,9 +167,9 @@ enum WCallCommand: Equatable, Encodable, Decodable {
|
||||
case let .ice(iceCandidates):
|
||||
try container.encode("ice", forKey: .type)
|
||||
try container.encode(iceCandidates, forKey: .iceCandidates)
|
||||
case let .media(source, enable):
|
||||
case let .media(media, enable):
|
||||
try container.encode("media", forKey: .type)
|
||||
try container.encode(source, forKey: .media)
|
||||
try container.encode(media, forKey: .media)
|
||||
try container.encode(enable, forKey: .enable)
|
||||
case .end:
|
||||
try container.encode("end", forKey: .type)
|
||||
@@ -215,9 +205,9 @@ enum WCallCommand: Equatable, Encodable, Decodable {
|
||||
let iceCandidates = try container.decode(String.self, forKey: CodingKeys.iceCandidates)
|
||||
self = .ice(iceCandidates: iceCandidates)
|
||||
case "media":
|
||||
let source = try container.decode(CallMediaSource.self, forKey: CodingKeys.source)
|
||||
let media = try container.decode(CallMediaType.self, forKey: CodingKeys.media)
|
||||
let enable = try container.decode(Bool.self, forKey: CodingKeys.enable)
|
||||
self = .media(source: source, enable: enable)
|
||||
self = .media(media: media, enable: enable)
|
||||
case "end":
|
||||
self = .end
|
||||
default:
|
||||
@@ -234,7 +224,6 @@ enum WCallResponse: Equatable, Decodable {
|
||||
case ice(iceCandidates: String)
|
||||
case connection(state: ConnectionState)
|
||||
case connected(connectionInfo: ConnectionInfo)
|
||||
case peerMedia(source: CallMediaSource, enabled: Bool)
|
||||
case ended
|
||||
case ok
|
||||
case error(message: String)
|
||||
@@ -249,8 +238,6 @@ enum WCallResponse: Equatable, Decodable {
|
||||
case state
|
||||
case connectionInfo
|
||||
case message
|
||||
case source
|
||||
case enabled
|
||||
}
|
||||
|
||||
var respType: String {
|
||||
@@ -262,7 +249,6 @@ enum WCallResponse: Equatable, Decodable {
|
||||
case .ice: return "ice"
|
||||
case .connection: return "connection"
|
||||
case .connected: return "connected"
|
||||
case .peerMedia: return "peerMedia"
|
||||
case .ended: return "ended"
|
||||
case .ok: return "ok"
|
||||
case .error: return "error"
|
||||
@@ -297,10 +283,6 @@ enum WCallResponse: Equatable, Decodable {
|
||||
case "connected":
|
||||
let connectionInfo = try container.decode(ConnectionInfo.self, forKey: CodingKeys.connectionInfo)
|
||||
self = .connected(connectionInfo: connectionInfo)
|
||||
case "peerMedia":
|
||||
let source = try container.decode(CallMediaSource.self, forKey: CodingKeys.source)
|
||||
let enabled = try container.decode(Bool.self, forKey: CodingKeys.enabled)
|
||||
self = .peerMedia(source: source, enabled: enabled)
|
||||
case "ended":
|
||||
self = .ended
|
||||
case "ok":
|
||||
@@ -342,10 +324,6 @@ extension WCallResponse: Encodable {
|
||||
case let .connected(connectionInfo):
|
||||
try container.encode("connected", forKey: .type)
|
||||
try container.encode(connectionInfo, forKey: .connectionInfo)
|
||||
case let .peerMedia(source, enabled):
|
||||
try container.encode("peerMedia", forKey: .type)
|
||||
try container.encode(source, forKey: .source)
|
||||
try container.encode(enabled, forKey: .enabled)
|
||||
case .ended:
|
||||
try container.encode("ended", forKey: .type)
|
||||
case .ok:
|
||||
@@ -398,7 +376,7 @@ actor WebRTCCommandProcessor {
|
||||
func shouldRunCommand(_ client: WebRTCClient, _ c: WCallCommand) -> Bool {
|
||||
switch c {
|
||||
case .capabilities, .start, .offer, .end: true
|
||||
default: client.activeCall != nil
|
||||
default: client.activeCall.wrappedValue != nil
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -23,24 +23,15 @@ final class WebRTCClient: NSObject, RTCVideoViewDelegate, RTCFrameEncryptorDeleg
|
||||
struct Call {
|
||||
var connection: RTCPeerConnection
|
||||
var iceCandidates: IceCandidates
|
||||
var localMedia: CallMediaType
|
||||
var localCamera: RTCVideoCapturer?
|
||||
var localAudioTrack: RTCAudioTrack?
|
||||
var localVideoTrack: RTCVideoTrack?
|
||||
var remoteAudioTrack: RTCAudioTrack?
|
||||
var remoteVideoTrack: RTCVideoTrack?
|
||||
var remoteScreenAudioTrack: RTCAudioTrack?
|
||||
var remoteScreenVideoTrack: RTCVideoTrack?
|
||||
var device: AVCaptureDevice.Position
|
||||
var localVideoSource: RTCVideoSource?
|
||||
var localStream: RTCVideoTrack?
|
||||
var remoteStream: RTCVideoTrack?
|
||||
var device: AVCaptureDevice.Position = .front
|
||||
var aesKey: String?
|
||||
var frameEncryptor: RTCFrameEncryptor?
|
||||
var frameDecryptor: RTCFrameDecryptor?
|
||||
var peerHasOldVersion: Bool
|
||||
}
|
||||
|
||||
struct NotConnectedCall {
|
||||
var audioTrack: RTCAudioTrack?
|
||||
var localCameraAndTrack: (RTCVideoCapturer, RTCVideoTrack)?
|
||||
var device: AVCaptureDevice.Position = .front
|
||||
}
|
||||
|
||||
actor IceCandidates {
|
||||
@@ -60,20 +51,17 @@ final class WebRTCClient: NSObject, RTCVideoViewDelegate, RTCFrameEncryptorDeleg
|
||||
private let rtcAudioSession = RTCAudioSession.sharedInstance()
|
||||
private let audioQueue = DispatchQueue(label: "chat.simplex.app.audio")
|
||||
private var sendCallResponse: (WVAPIMessage) async -> Void
|
||||
var activeCall: Call?
|
||||
var notConnectedCall: NotConnectedCall?
|
||||
var activeCall: Binding<Call?>
|
||||
private var localRendererAspectRatio: Binding<CGFloat?>
|
||||
|
||||
var cameraRenderers: [RTCVideoRenderer] = []
|
||||
var screenRenderers: [RTCVideoRenderer] = []
|
||||
|
||||
@available(*, unavailable)
|
||||
override init() {
|
||||
fatalError("Unimplemented")
|
||||
}
|
||||
|
||||
required init(_ sendCallResponse: @escaping (WVAPIMessage) async -> Void, _ localRendererAspectRatio: Binding<CGFloat?>) {
|
||||
required init(_ activeCall: Binding<Call?>, _ sendCallResponse: @escaping (WVAPIMessage) async -> Void, _ localRendererAspectRatio: Binding<CGFloat?>) {
|
||||
self.sendCallResponse = sendCallResponse
|
||||
self.activeCall = activeCall
|
||||
self.localRendererAspectRatio = localRendererAspectRatio
|
||||
rtcAudioSession.useManualAudio = CallController.useCallKit()
|
||||
rtcAudioSession.isAudioEnabled = !CallController.useCallKit()
|
||||
@@ -90,45 +78,39 @@ final class WebRTCClient: NSObject, RTCVideoViewDelegate, RTCFrameEncryptorDeleg
|
||||
func initializeCall(_ iceServers: [WebRTC.RTCIceServer]?, _ mediaType: CallMediaType, _ aesKey: String?, _ relay: Bool?) -> Call {
|
||||
let connection = createPeerConnection(iceServers ?? getWebRTCIceServers() ?? defaultIceServers, relay)
|
||||
connection.delegate = self
|
||||
let device = notConnectedCall?.device ?? .front
|
||||
createAudioSender(connection)
|
||||
var localStream: RTCVideoTrack? = nil
|
||||
var remoteStream: RTCVideoTrack? = nil
|
||||
var localCamera: RTCVideoCapturer? = nil
|
||||
var localAudioTrack: RTCAudioTrack? = nil
|
||||
var localVideoTrack: RTCVideoTrack? = nil
|
||||
if let localCameraAndTrack = notConnectedCall?.localCameraAndTrack {
|
||||
(localCamera, localVideoTrack) = localCameraAndTrack
|
||||
} else if notConnectedCall == nil && mediaType == .video {
|
||||
(localCamera, localVideoTrack) = createVideoTrackAndStartCapture(device)
|
||||
var localVideoSource: RTCVideoSource? = nil
|
||||
if mediaType == .video {
|
||||
(localStream, remoteStream, localCamera, localVideoSource) = createVideoSender(connection)
|
||||
}
|
||||
if let audioTrack = notConnectedCall?.audioTrack {
|
||||
localAudioTrack = audioTrack
|
||||
} else if notConnectedCall == nil {
|
||||
localAudioTrack = createAudioTrack()
|
||||
}
|
||||
notConnectedCall?.localCameraAndTrack = nil
|
||||
notConnectedCall?.audioTrack = nil
|
||||
|
||||
var frameEncryptor: RTCFrameEncryptor? = nil
|
||||
var frameDecryptor: RTCFrameDecryptor? = nil
|
||||
if aesKey != nil {
|
||||
let encryptor = RTCFrameEncryptor.init(sizeChange: Int32(WebRTCClient.ivTagBytes))
|
||||
encryptor.delegate = self
|
||||
frameEncryptor = encryptor
|
||||
connection.senders.forEach { $0.setRtcFrameEncryptor(encryptor) }
|
||||
|
||||
let decryptor = RTCFrameDecryptor.init(sizeChange: -Int32(WebRTCClient.ivTagBytes))
|
||||
decryptor.delegate = self
|
||||
frameDecryptor = decryptor
|
||||
// Has no video receiver in outgoing call if applied here, see [peerConnection(_ connection: RTCPeerConnection, didChange newState]
|
||||
// connection.receivers.forEach { $0.setRtcFrameDecryptor(decryptor) }
|
||||
}
|
||||
return Call(
|
||||
connection: connection,
|
||||
iceCandidates: IceCandidates(),
|
||||
localMedia: mediaType,
|
||||
localCamera: localCamera,
|
||||
localAudioTrack: localAudioTrack,
|
||||
localVideoTrack: localVideoTrack,
|
||||
device: device,
|
||||
localVideoSource: localVideoSource,
|
||||
localStream: localStream,
|
||||
remoteStream: remoteStream,
|
||||
aesKey: aesKey,
|
||||
frameEncryptor: frameEncryptor,
|
||||
frameDecryptor: frameDecryptor,
|
||||
peerHasOldVersion: false
|
||||
frameDecryptor: frameDecryptor
|
||||
)
|
||||
}
|
||||
|
||||
@@ -169,24 +151,18 @@ final class WebRTCClient: NSObject, RTCVideoViewDelegate, RTCFrameEncryptorDeleg
|
||||
|
||||
func sendCallCommand(command: WCallCommand) async {
|
||||
var resp: WCallResponse? = nil
|
||||
let pc = activeCall?.connection
|
||||
let pc = activeCall.wrappedValue?.connection
|
||||
switch command {
|
||||
case let .capabilities(media): // outgoing
|
||||
let localCameraAndTrack: (RTCVideoCapturer, RTCVideoTrack)? = media == .video
|
||||
? createVideoTrackAndStartCapture(.front)
|
||||
: nil
|
||||
notConnectedCall = NotConnectedCall(audioTrack: createAudioTrack(), localCameraAndTrack: localCameraAndTrack, device: .front)
|
||||
case .capabilities:
|
||||
resp = .capabilities(capabilities: CallCapabilities(encryption: WebRTCClient.enableEncryption))
|
||||
case let .start(media: media, aesKey, iceServers, relay): // incoming
|
||||
case let .start(media: media, aesKey, iceServers, relay):
|
||||
logger.debug("starting incoming call - create webrtc session")
|
||||
if activeCall != nil { endCall() }
|
||||
if activeCall.wrappedValue != nil { endCall() }
|
||||
let encryption = WebRTCClient.enableEncryption
|
||||
let call = initializeCall(iceServers?.toWebRTCIceServers(), media, encryption ? aesKey : nil, relay)
|
||||
activeCall = call
|
||||
setupLocalTracks(true, call)
|
||||
activeCall.wrappedValue = call
|
||||
let (offer, error) = await call.connection.offer()
|
||||
if let offer = offer {
|
||||
setupEncryptionForLocalTracks(call)
|
||||
resp = .offer(
|
||||
offer: compressToBase64(input: encodeJSON(CustomRTCSessionDescription(type: offer.type.toSdpType(), sdp: offer.sdp))),
|
||||
iceCandidates: compressToBase64(input: encodeJSON(await self.getInitialIceCandidates())),
|
||||
@@ -196,24 +172,18 @@ final class WebRTCClient: NSObject, RTCVideoViewDelegate, RTCFrameEncryptorDeleg
|
||||
} else {
|
||||
resp = .error(message: "offer error: \(error?.localizedDescription ?? "unknown error")")
|
||||
}
|
||||
case let .offer(offer, iceCandidates, media, aesKey, iceServers, relay): // outgoing
|
||||
if activeCall != nil {
|
||||
case let .offer(offer, iceCandidates, media, aesKey, iceServers, relay):
|
||||
if activeCall.wrappedValue != nil {
|
||||
resp = .error(message: "accept: call already started")
|
||||
} else if !WebRTCClient.enableEncryption && aesKey != nil {
|
||||
resp = .error(message: "accept: encryption is not supported")
|
||||
} else if let offer: CustomRTCSessionDescription = decodeJSON(decompressFromBase64(input: offer)),
|
||||
let remoteIceCandidates: [RTCIceCandidate] = decodeJSON(decompressFromBase64(input: iceCandidates)) {
|
||||
let call = initializeCall(iceServers?.toWebRTCIceServers(), media, WebRTCClient.enableEncryption ? aesKey : nil, relay)
|
||||
activeCall = call
|
||||
activeCall.wrappedValue = call
|
||||
let pc = call.connection
|
||||
if let type = offer.type, let sdp = offer.sdp {
|
||||
if (try? await pc.setRemoteDescription(RTCSessionDescription(type: type.toWebRTCSdpType(), sdp: sdp))) != nil {
|
||||
setupLocalTracks(false, call)
|
||||
setupEncryptionForLocalTracks(call)
|
||||
pc.transceivers.forEach { transceiver in
|
||||
transceiver.setDirection(.sendRecv, error: nil)
|
||||
}
|
||||
await adaptToOldVersion(pc.transceivers.count <= 2)
|
||||
let (answer, error) = await pc.answer()
|
||||
if let answer = answer {
|
||||
self.addIceCandidates(pc, remoteIceCandidates)
|
||||
@@ -230,7 +200,7 @@ final class WebRTCClient: NSObject, RTCVideoViewDelegate, RTCFrameEncryptorDeleg
|
||||
}
|
||||
}
|
||||
}
|
||||
case let .answer(answer, iceCandidates): // incoming
|
||||
case let .answer(answer, iceCandidates):
|
||||
if pc == nil {
|
||||
resp = .error(message: "answer: call not started")
|
||||
} else if pc?.localDescription == nil {
|
||||
@@ -242,9 +212,6 @@ final class WebRTCClient: NSObject, RTCVideoViewDelegate, RTCFrameEncryptorDeleg
|
||||
let type = answer.type, let sdp = answer.sdp,
|
||||
let pc = pc {
|
||||
if (try? await pc.setRemoteDescription(RTCSessionDescription(type: type.toWebRTCSdpType(), sdp: sdp))) != nil {
|
||||
var currentDirection: RTCRtpTransceiverDirection = .sendOnly
|
||||
pc.transceivers[2].currentDirection(¤tDirection)
|
||||
await adaptToOldVersion(currentDirection == .sendOnly)
|
||||
addIceCandidates(pc, remoteIceCandidates)
|
||||
resp = .ok
|
||||
} else {
|
||||
@@ -259,11 +226,13 @@ final class WebRTCClient: NSObject, RTCVideoViewDelegate, RTCFrameEncryptorDeleg
|
||||
} else {
|
||||
resp = .error(message: "ice: call not started")
|
||||
}
|
||||
case let .media(source, enable):
|
||||
if activeCall == nil {
|
||||
case let .media(media, enable):
|
||||
if activeCall.wrappedValue == nil {
|
||||
resp = .error(message: "media: call not started")
|
||||
} else if activeCall.wrappedValue?.localMedia == .audio && media == .video {
|
||||
resp = .error(message: "media: no video")
|
||||
} else {
|
||||
await enableMedia(source, enable)
|
||||
enableMedia(media, enable)
|
||||
resp = .ok
|
||||
}
|
||||
case .end:
|
||||
@@ -278,7 +247,7 @@ final class WebRTCClient: NSObject, RTCVideoViewDelegate, RTCFrameEncryptorDeleg
|
||||
|
||||
func getInitialIceCandidates() async -> [RTCIceCandidate] {
|
||||
await untilIceComplete(timeoutMs: 750, stepMs: 150) {}
|
||||
let candidates = await activeCall?.iceCandidates.getAndClear() ?? []
|
||||
let candidates = await activeCall.wrappedValue?.iceCandidates.getAndClear() ?? []
|
||||
logger.debug("WebRTCClient: sending initial ice candidates: \(candidates.count)")
|
||||
return candidates
|
||||
}
|
||||
@@ -286,7 +255,7 @@ final class WebRTCClient: NSObject, RTCVideoViewDelegate, RTCFrameEncryptorDeleg
|
||||
func waitForMoreIceCandidates() {
|
||||
Task {
|
||||
await untilIceComplete(timeoutMs: 12000, stepMs: 1500) {
|
||||
let candidates = await self.activeCall?.iceCandidates.getAndClear() ?? []
|
||||
let candidates = await self.activeCall.wrappedValue?.iceCandidates.getAndClear() ?? []
|
||||
if candidates.count > 0 {
|
||||
logger.debug("WebRTCClient: sending more ice candidates: \(candidates.count)")
|
||||
await self.sendIceCandidates(candidates)
|
||||
@@ -303,202 +272,25 @@ final class WebRTCClient: NSObject, RTCVideoViewDelegate, RTCFrameEncryptorDeleg
|
||||
)
|
||||
}
|
||||
|
||||
func setupMuteUnmuteListener(_ transceiver: RTCRtpTransceiver, _ track: RTCMediaStreamTrack) {
|
||||
// logger.log("Setting up mute/unmute listener in the call without encryption for mid = \(transceiver.mid)")
|
||||
Task {
|
||||
var lastBytesReceived: Int64 = 0
|
||||
// muted initially
|
||||
var mutedSeconds = 4
|
||||
while let call = self.activeCall, transceiver.receiver.track?.readyState == .live {
|
||||
let stats: RTCStatisticsReport = await call.connection.statistics(for: transceiver.receiver)
|
||||
let stat = stats.statistics.values.first(where: { stat in stat.type == "inbound-rtp"})
|
||||
if let stat {
|
||||
//logger.debug("Stat \(stat.debugDescription)")
|
||||
let bytes = stat.values["bytesReceived"] as! Int64
|
||||
if bytes <= lastBytesReceived {
|
||||
mutedSeconds += 1
|
||||
if mutedSeconds == 3 {
|
||||
await MainActor.run {
|
||||
self.onMediaMuteUnmute(transceiver.mid, true)
|
||||
}
|
||||
}
|
||||
} else {
|
||||
if mutedSeconds >= 3 {
|
||||
await MainActor.run {
|
||||
self.onMediaMuteUnmute(transceiver.mid, false)
|
||||
}
|
||||
}
|
||||
lastBytesReceived = bytes
|
||||
mutedSeconds = 0
|
||||
}
|
||||
}
|
||||
try? await Task.sleep(nanoseconds: 1000_000000)
|
||||
}
|
||||
}
|
||||
func enableMedia(_ media: CallMediaType, _ enable: Bool) {
|
||||
logger.debug("WebRTCClient: enabling media \(media.rawValue) \(enable)")
|
||||
media == .video ? setVideoEnabled(enable) : setAudioEnabled(enable)
|
||||
}
|
||||
|
||||
@MainActor
|
||||
func onMediaMuteUnmute(_ transceiverMid: String?, _ mute: Bool) {
|
||||
guard let activeCall = ChatModel.shared.activeCall else { return }
|
||||
let source = mediaSourceFromTransceiverMid(transceiverMid)
|
||||
logger.log("Mute/unmute \(source.rawValue) track = \(mute) with mid = \(transceiverMid ?? "nil")")
|
||||
if source == .mic && activeCall.peerMediaSources.mic == mute {
|
||||
activeCall.peerMediaSources.mic = !mute
|
||||
} else if (source == .camera && activeCall.peerMediaSources.camera == mute) {
|
||||
activeCall.peerMediaSources.camera = !mute
|
||||
} else if (source == .screenAudio && activeCall.peerMediaSources.screenAudio == mute) {
|
||||
activeCall.peerMediaSources.screenAudio = !mute
|
||||
} else if (source == .screenVideo && activeCall.peerMediaSources.screenVideo == mute) {
|
||||
activeCall.peerMediaSources.screenVideo = !mute
|
||||
}
|
||||
}
|
||||
|
||||
@MainActor
|
||||
func enableMedia(_ source: CallMediaSource, _ enable: Bool) {
|
||||
logger.debug("WebRTCClient: enabling media \(source.rawValue) \(enable)")
|
||||
source == .camera ? setCameraEnabled(enable) : setAudioEnabled(enable)
|
||||
}
|
||||
|
||||
@MainActor
|
||||
func adaptToOldVersion(_ peerHasOldVersion: Bool) {
|
||||
activeCall?.peerHasOldVersion = peerHasOldVersion
|
||||
if peerHasOldVersion {
|
||||
logger.debug("The peer has an old version. Remote audio track is nil = \(self.activeCall?.remoteAudioTrack == nil), video = \(self.activeCall?.remoteVideoTrack == nil)")
|
||||
onMediaMuteUnmute("0", false)
|
||||
if activeCall?.remoteVideoTrack != nil {
|
||||
onMediaMuteUnmute("1", false)
|
||||
}
|
||||
if ChatModel.shared.activeCall?.localMediaSources.camera == true && ChatModel.shared.activeCall?.peerMediaSources.camera == false {
|
||||
logger.debug("Stopping video track for the old version")
|
||||
activeCall?.connection.senders[1].track = nil
|
||||
ChatModel.shared.activeCall?.localMediaSources.camera = false
|
||||
(activeCall?.localCamera as? RTCCameraVideoCapturer)?.stopCapture()
|
||||
activeCall?.localCamera = nil
|
||||
activeCall?.localVideoTrack = nil
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func addLocalRenderer(_ renderer: RTCEAGLVideoView) {
|
||||
if let activeCall {
|
||||
if let track = activeCall.localVideoTrack {
|
||||
track.add(renderer)
|
||||
}
|
||||
} else if let notConnectedCall {
|
||||
if let track = notConnectedCall.localCameraAndTrack?.1 {
|
||||
track.add(renderer)
|
||||
}
|
||||
}
|
||||
func addLocalRenderer(_ activeCall: Call, _ renderer: RTCEAGLVideoView) {
|
||||
activeCall.localStream?.add(renderer)
|
||||
// To get width and height of a frame, see videoView(videoView:, didChangeVideoSize)
|
||||
renderer.delegate = self
|
||||
}
|
||||
|
||||
func removeLocalRenderer(_ renderer: RTCEAGLVideoView) {
|
||||
if let activeCall {
|
||||
if let track = activeCall.localVideoTrack {
|
||||
track.remove(renderer)
|
||||
}
|
||||
} else if let notConnectedCall {
|
||||
if let track = notConnectedCall.localCameraAndTrack?.1 {
|
||||
track.remove(renderer)
|
||||
}
|
||||
}
|
||||
renderer.delegate = nil
|
||||
}
|
||||
|
||||
func videoView(_ videoView: RTCVideoRenderer, didChangeVideoSize size: CGSize) {
|
||||
guard size.height > 0 else { return }
|
||||
localRendererAspectRatio.wrappedValue = size.width / size.height
|
||||
}
|
||||
|
||||
func setupLocalTracks(_ incomingCall: Bool, _ call: Call) {
|
||||
let pc = call.connection
|
||||
let transceivers = call.connection.transceivers
|
||||
let audioTrack = call.localAudioTrack
|
||||
let videoTrack = call.localVideoTrack
|
||||
|
||||
if incomingCall {
|
||||
let micCameraInit = RTCRtpTransceiverInit()
|
||||
// streamIds required for old versions which adds tracks from stream, not from track property
|
||||
micCameraInit.streamIds = ["micCamera"]
|
||||
|
||||
let screenAudioVideoInit = RTCRtpTransceiverInit()
|
||||
screenAudioVideoInit.streamIds = ["screenAudioVideo"]
|
||||
|
||||
// incoming call, no transceivers yet. But they should be added in order: mic, camera, screen audio, screen video
|
||||
// mid = 0, mic
|
||||
if let audioTrack {
|
||||
pc.addTransceiver(with: audioTrack, init: micCameraInit)
|
||||
} else {
|
||||
pc.addTransceiver(of: .audio, init: micCameraInit)
|
||||
}
|
||||
// mid = 1, camera
|
||||
if let videoTrack {
|
||||
pc.addTransceiver(with: videoTrack, init: micCameraInit)
|
||||
} else {
|
||||
pc.addTransceiver(of: .video, init: micCameraInit)
|
||||
}
|
||||
// mid = 2, screenAudio
|
||||
pc.addTransceiver(of: .audio, init: screenAudioVideoInit)
|
||||
// mid = 3, screenVideo
|
||||
pc.addTransceiver(of: .video, init: screenAudioVideoInit)
|
||||
} else {
|
||||
// new version
|
||||
if transceivers.count > 2 {
|
||||
// Outgoing call. All transceivers are ready. Don't addTrack() because it will create new transceivers, replace existing (nil) tracks
|
||||
transceivers
|
||||
.first(where: { elem in mediaSourceFromTransceiverMid(elem.mid) == .mic })?
|
||||
.sender.track = audioTrack
|
||||
transceivers
|
||||
.first(where: { elem in mediaSourceFromTransceiverMid(elem.mid) == .camera })?
|
||||
.sender.track = videoTrack
|
||||
} else {
|
||||
// old version, only two transceivers
|
||||
if let audioTrack {
|
||||
pc.add(audioTrack, streamIds: ["micCamera"])
|
||||
} else {
|
||||
// it's important to have any track in order to be able to turn it on again (currently it's off)
|
||||
let sender = pc.add(createAudioTrack(), streamIds: ["micCamera"])
|
||||
sender?.track = nil
|
||||
}
|
||||
if let videoTrack {
|
||||
pc.add(videoTrack, streamIds: ["micCamera"])
|
||||
} else {
|
||||
// it's important to have any track in order to be able to turn it on again (currently it's off)
|
||||
let localVideoSource = WebRTCClient.factory.videoSource()
|
||||
let localVideoTrack = WebRTCClient.factory.videoTrack(with: localVideoSource, trackId: "video0")
|
||||
let sender = pc.add(localVideoTrack, streamIds: ["micCamera"])
|
||||
sender?.track = nil
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func mediaSourceFromTransceiverMid(_ mid: String?) -> CallMediaSource {
|
||||
switch mid {
|
||||
case "0":
|
||||
return .mic
|
||||
case "1":
|
||||
return .camera
|
||||
case "2":
|
||||
return .screenAudio
|
||||
case "3":
|
||||
return .screenVideo
|
||||
default:
|
||||
return .unknown
|
||||
}
|
||||
}
|
||||
|
||||
// Should be called after local description set
|
||||
func setupEncryptionForLocalTracks(_ call: Call) {
|
||||
if let encryptor = call.frameEncryptor {
|
||||
call.connection.senders.forEach { $0.setRtcFrameEncryptor(encryptor) }
|
||||
}
|
||||
}
|
||||
|
||||
func frameDecryptor(_ decryptor: RTCFrameDecryptor, mediaType: RTCRtpMediaType, withFrame encrypted: Data) -> Data? {
|
||||
guard encrypted.count > 0 else { return nil }
|
||||
if var key: [CChar] = activeCall?.aesKey?.cString(using: .utf8),
|
||||
if var key: [CChar] = activeCall.wrappedValue?.aesKey?.cString(using: .utf8),
|
||||
let pointer: UnsafeMutableRawPointer = malloc(encrypted.count) {
|
||||
memcpy(pointer, (encrypted as NSData).bytes, encrypted.count)
|
||||
let isKeyFrame = encrypted[0] & 1 == 0
|
||||
@@ -512,7 +304,7 @@ final class WebRTCClient: NSObject, RTCVideoViewDelegate, RTCFrameEncryptorDeleg
|
||||
|
||||
func frameEncryptor(_ encryptor: RTCFrameEncryptor, mediaType: RTCRtpMediaType, withFrame unencrypted: Data) -> Data? {
|
||||
guard unencrypted.count > 0 else { return nil }
|
||||
if var key: [CChar] = activeCall?.aesKey?.cString(using: .utf8),
|
||||
if var key: [CChar] = activeCall.wrappedValue?.aesKey?.cString(using: .utf8),
|
||||
let pointer: UnsafeMutableRawPointer = malloc(unencrypted.count + WebRTCClient.ivTagBytes) {
|
||||
memcpy(pointer, (unencrypted as NSData).bytes, unencrypted.count)
|
||||
let isKeyFrame = unencrypted[0] & 1 == 0
|
||||
@@ -535,42 +327,18 @@ final class WebRTCClient: NSObject, RTCVideoViewDelegate, RTCFrameEncryptorDeleg
|
||||
}
|
||||
}
|
||||
|
||||
func addRemoteCameraRenderer(_ renderer: RTCVideoRenderer) {
|
||||
if activeCall?.remoteVideoTrack != nil {
|
||||
activeCall?.remoteVideoTrack?.add(renderer)
|
||||
} else {
|
||||
cameraRenderers.append(renderer)
|
||||
}
|
||||
func addRemoteRenderer(_ activeCall: Call, _ renderer: RTCVideoRenderer) {
|
||||
activeCall.remoteStream?.add(renderer)
|
||||
}
|
||||
|
||||
func removeRemoteCameraRenderer(_ renderer: RTCVideoRenderer) {
|
||||
if activeCall?.remoteVideoTrack != nil {
|
||||
activeCall?.remoteVideoTrack?.remove(renderer)
|
||||
} else {
|
||||
cameraRenderers.removeAll(where: { $0.isEqual(renderer) })
|
||||
}
|
||||
func removeRemoteRenderer(_ activeCall: Call, _ renderer: RTCVideoRenderer) {
|
||||
activeCall.remoteStream?.remove(renderer)
|
||||
}
|
||||
|
||||
func addRemoteScreenRenderer(_ renderer: RTCVideoRenderer) {
|
||||
if activeCall?.remoteScreenVideoTrack != nil {
|
||||
activeCall?.remoteScreenVideoTrack?.add(renderer)
|
||||
} else {
|
||||
screenRenderers.append(renderer)
|
||||
}
|
||||
}
|
||||
|
||||
func removeRemoteScreenRenderer(_ renderer: RTCVideoRenderer) {
|
||||
if activeCall?.remoteScreenVideoTrack != nil {
|
||||
activeCall?.remoteScreenVideoTrack?.remove(renderer)
|
||||
} else {
|
||||
screenRenderers.removeAll(where: { $0.isEqual(renderer) })
|
||||
}
|
||||
}
|
||||
|
||||
func startCaptureLocalVideo(_ device: AVCaptureDevice.Position?, _ capturer: RTCVideoCapturer?) {
|
||||
func startCaptureLocalVideo(_ activeCall: Call) {
|
||||
#if targetEnvironment(simulator)
|
||||
guard
|
||||
let capturer = (activeCall?.localCamera ?? notConnectedCall?.localCameraAndTrack?.0) as? RTCFileVideoCapturer
|
||||
let capturer = activeCall.localCamera as? RTCFileVideoCapturer
|
||||
else {
|
||||
logger.error("Unable to work with a file capturer")
|
||||
return
|
||||
@@ -580,10 +348,10 @@ final class WebRTCClient: NSObject, RTCVideoViewDelegate, RTCFrameEncryptorDeleg
|
||||
capturer.startCapturing(fromFileNamed: "sounds/video.mp4")
|
||||
#else
|
||||
guard
|
||||
let capturer = capturer as? RTCCameraVideoCapturer,
|
||||
let camera = (RTCCameraVideoCapturer.captureDevices().first { $0.position == device })
|
||||
let capturer = activeCall.localCamera as? RTCCameraVideoCapturer,
|
||||
let camera = (RTCCameraVideoCapturer.captureDevices().first { $0.position == activeCall.device })
|
||||
else {
|
||||
logger.error("Unable to find a camera or local track")
|
||||
logger.error("Unable to find a camera")
|
||||
return
|
||||
}
|
||||
|
||||
@@ -609,6 +377,19 @@ final class WebRTCClient: NSObject, RTCVideoViewDelegate, RTCFrameEncryptorDeleg
|
||||
#endif
|
||||
}
|
||||
|
||||
private func createAudioSender(_ connection: RTCPeerConnection) {
|
||||
let streamId = "stream"
|
||||
let audioTrack = createAudioTrack()
|
||||
connection.add(audioTrack, streamIds: [streamId])
|
||||
}
|
||||
|
||||
private func createVideoSender(_ connection: RTCPeerConnection) -> (RTCVideoTrack?, RTCVideoTrack?, RTCVideoCapturer?, RTCVideoSource?) {
|
||||
let streamId = "stream"
|
||||
let (localVideoTrack, localCamera, localVideoSource) = createVideoTrack()
|
||||
connection.add(localVideoTrack, streamIds: [streamId])
|
||||
return (localVideoTrack, connection.transceivers.first { $0.mediaType == .video }?.receiver.track as? RTCVideoTrack, localCamera, localVideoSource)
|
||||
}
|
||||
|
||||
private func createAudioTrack() -> RTCAudioTrack {
|
||||
let audioConstrains = RTCMediaConstraints(mandatoryConstraints: nil, optionalConstraints: nil)
|
||||
let audioSource = WebRTCClient.factory.audioSource(with: audioConstrains)
|
||||
@@ -616,7 +397,7 @@ final class WebRTCClient: NSObject, RTCVideoViewDelegate, RTCFrameEncryptorDeleg
|
||||
return audioTrack
|
||||
}
|
||||
|
||||
private func createVideoTrackAndStartCapture(_ device: AVCaptureDevice.Position) -> (RTCVideoCapturer, RTCVideoTrack) {
|
||||
private func createVideoTrack() -> (RTCVideoTrack, RTCVideoCapturer, RTCVideoSource) {
|
||||
let localVideoSource = WebRTCClient.factory.videoSource()
|
||||
|
||||
#if targetEnvironment(simulator)
|
||||
@@ -626,8 +407,7 @@ final class WebRTCClient: NSObject, RTCVideoViewDelegate, RTCFrameEncryptorDeleg
|
||||
#endif
|
||||
|
||||
let localVideoTrack = WebRTCClient.factory.videoTrack(with: localVideoSource, trackId: "video0")
|
||||
startCaptureLocalVideo(device, localCamera)
|
||||
return (localCamera, localVideoTrack)
|
||||
return (localVideoTrack, localCamera, localVideoSource)
|
||||
}
|
||||
|
||||
func endCall() {
|
||||
@@ -640,16 +420,15 @@ final class WebRTCClient: NSObject, RTCVideoViewDelegate, RTCFrameEncryptorDeleg
|
||||
}
|
||||
|
||||
private func _endCall() {
|
||||
(notConnectedCall?.localCameraAndTrack?.0 as? RTCCameraVideoCapturer)?.stopCapture()
|
||||
guard let call = activeCall else { return }
|
||||
guard let call = activeCall.wrappedValue else { return }
|
||||
logger.debug("WebRTCClient: ending the call")
|
||||
activeCall.wrappedValue = nil
|
||||
(call.localCamera as? RTCCameraVideoCapturer)?.stopCapture()
|
||||
call.connection.close()
|
||||
call.connection.delegate = nil
|
||||
call.frameEncryptor?.delegate = nil
|
||||
call.frameDecryptor?.delegate = nil
|
||||
(call.localCamera as? RTCCameraVideoCapturer)?.stopCapture()
|
||||
audioSessionToDefaults()
|
||||
activeCall = nil
|
||||
}
|
||||
|
||||
func untilIceComplete(timeoutMs: UInt64, stepMs: UInt64, action: @escaping () async -> Void) async {
|
||||
@@ -658,7 +437,7 @@ final class WebRTCClient: NSObject, RTCVideoViewDelegate, RTCFrameEncryptorDeleg
|
||||
_ = try? await Task.sleep(nanoseconds: stepMs * 1000000)
|
||||
t += stepMs
|
||||
await action()
|
||||
} while t < timeoutMs && activeCall?.connection.iceGatheringState != .complete
|
||||
} while t < timeoutMs && activeCall.wrappedValue?.connection.iceGatheringState != .complete
|
||||
}
|
||||
}
|
||||
|
||||
@@ -719,40 +498,11 @@ extension WebRTCClient: RTCPeerConnectionDelegate {
|
||||
logger.debug("Connection should negotiate")
|
||||
}
|
||||
|
||||
func peerConnection(_ peerConnection: RTCPeerConnection, didStartReceivingOn transceiver: RTCRtpTransceiver) {
|
||||
if let track = transceiver.receiver.track {
|
||||
DispatchQueue.main.async {
|
||||
// Doesn't work for outgoing video call (audio in video call works ok still, same as incoming call)
|
||||
// if let decryptor = self.activeCall?.frameDecryptor {
|
||||
// transceiver.receiver.setRtcFrameDecryptor(decryptor)
|
||||
// }
|
||||
let source = self.mediaSourceFromTransceiverMid(transceiver.mid)
|
||||
switch source {
|
||||
case .mic: self.activeCall?.remoteAudioTrack = track as? RTCAudioTrack
|
||||
case .camera:
|
||||
self.activeCall?.remoteVideoTrack = track as? RTCVideoTrack
|
||||
self.cameraRenderers.forEach({ renderer in
|
||||
self.activeCall?.remoteVideoTrack?.add(renderer)
|
||||
})
|
||||
self.cameraRenderers.removeAll()
|
||||
case .screenAudio: self.activeCall?.remoteScreenAudioTrack = track as? RTCAudioTrack
|
||||
case .screenVideo:
|
||||
self.activeCall?.remoteScreenVideoTrack = track as? RTCVideoTrack
|
||||
self.screenRenderers.forEach({ renderer in
|
||||
self.activeCall?.remoteScreenVideoTrack?.add(renderer)
|
||||
})
|
||||
self.screenRenderers.removeAll()
|
||||
case .unknown: ()
|
||||
}
|
||||
}
|
||||
self.setupMuteUnmuteListener(transceiver, track)
|
||||
}
|
||||
}
|
||||
|
||||
func peerConnection(_ connection: RTCPeerConnection, didChange newState: RTCIceConnectionState) {
|
||||
debugPrint("Connection new connection state: \(newState.toString() ?? "" + newState.rawValue.description) \(connection.receivers)")
|
||||
|
||||
guard let connectionStateString = newState.toString(),
|
||||
guard let call = activeCall.wrappedValue,
|
||||
let connectionStateString = newState.toString(),
|
||||
let iceConnectionStateString = connection.iceConnectionState.toString(),
|
||||
let iceGatheringStateString = connection.iceGatheringState.toString(),
|
||||
let signalingStateString = connection.signalingState.toString()
|
||||
@@ -773,14 +523,18 @@ extension WebRTCClient: RTCPeerConnectionDelegate {
|
||||
|
||||
switch newState {
|
||||
case .checking:
|
||||
if let frameDecryptor = activeCall?.frameDecryptor {
|
||||
if let frameDecryptor = activeCall.wrappedValue?.frameDecryptor {
|
||||
connection.receivers.forEach { $0.setRtcFrameDecryptor(frameDecryptor) }
|
||||
}
|
||||
let enableSpeaker: Bool = ChatModel.shared.activeCall?.localMediaSources.hasVideo == true
|
||||
let enableSpeaker: Bool
|
||||
switch call.localMedia {
|
||||
case .video: enableSpeaker = true
|
||||
default: enableSpeaker = false
|
||||
}
|
||||
setSpeakerEnabledAndConfigureSession(enableSpeaker)
|
||||
case .connected: sendConnectedEvent(connection)
|
||||
case .disconnected, .failed: endCall()
|
||||
default: ()
|
||||
default: do {}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -792,7 +546,7 @@ extension WebRTCClient: RTCPeerConnectionDelegate {
|
||||
func peerConnection(_ connection: RTCPeerConnection, didGenerate candidate: WebRTC.RTCIceCandidate) {
|
||||
// logger.debug("Connection generated candidate \(candidate.debugDescription)")
|
||||
Task {
|
||||
await self.activeCall?.iceCandidates.append(candidate.toCandidate(nil, nil))
|
||||
await self.activeCall.wrappedValue?.iceCandidates.append(candidate.toCandidate(nil, nil))
|
||||
}
|
||||
}
|
||||
|
||||
@@ -847,42 +601,11 @@ extension WebRTCClient: RTCPeerConnectionDelegate {
|
||||
}
|
||||
|
||||
extension WebRTCClient {
|
||||
static func isAuthorized(for type: AVMediaType) async -> Bool {
|
||||
let status = AVCaptureDevice.authorizationStatus(for: type)
|
||||
var isAuthorized = status == .authorized
|
||||
if status == .notDetermined {
|
||||
isAuthorized = await AVCaptureDevice.requestAccess(for: type)
|
||||
}
|
||||
return isAuthorized
|
||||
func setAudioEnabled(_ enabled: Bool) {
|
||||
setTrackEnabled(RTCAudioTrack.self, enabled)
|
||||
}
|
||||
|
||||
static func showUnauthorizedAlert(for type: AVMediaType) {
|
||||
if type == .audio {
|
||||
AlertManager.shared.showAlert(Alert(
|
||||
title: Text("No permission to record speech"),
|
||||
message: Text("To record speech please grant permission to use Microphone."),
|
||||
primaryButton: .default(Text("Open Settings")) {
|
||||
DispatchQueue.main.async {
|
||||
UIApplication.shared.open(URL(string: UIApplication.openSettingsURLString)!, options: [:], completionHandler: nil)
|
||||
}
|
||||
},
|
||||
secondaryButton: .cancel()
|
||||
))
|
||||
} else if type == .video {
|
||||
AlertManager.shared.showAlert(Alert(
|
||||
title: Text("No permission to record video"),
|
||||
message: Text("To record video please grant permission to use Camera."),
|
||||
primaryButton: .default(Text("Open Settings")) {
|
||||
DispatchQueue.main.async {
|
||||
UIApplication.shared.open(URL(string: UIApplication.openSettingsURLString)!, options: [:], completionHandler: nil)
|
||||
}
|
||||
},
|
||||
secondaryButton: .cancel()
|
||||
))
|
||||
}
|
||||
}
|
||||
|
||||
func setSpeakerEnabledAndConfigureSession( _ enabled: Bool, skipExternalDevice: Bool = false) {
|
||||
func setSpeakerEnabledAndConfigureSession( _ enabled: Bool) {
|
||||
logger.debug("WebRTCClient: configuring session with speaker enabled \(enabled)")
|
||||
audioQueue.async { [weak self] in
|
||||
guard let self = self else { return }
|
||||
@@ -895,7 +618,7 @@ extension WebRTCClient {
|
||||
if enabled {
|
||||
try self.rtcAudioSession.setCategory(AVAudioSession.Category.playAndRecord.rawValue, with: [.defaultToSpeaker, .allowBluetooth, .allowAirPlay, .allowBluetoothA2DP])
|
||||
try self.rtcAudioSession.setMode(AVAudioSession.Mode.videoChat.rawValue)
|
||||
if hasExternalAudioDevice && !skipExternalDevice, let preferred = self.rtcAudioSession.session.preferredInputDevice() {
|
||||
if hasExternalAudioDevice, let preferred = self.rtcAudioSession.session.preferredInputDevice() {
|
||||
try self.rtcAudioSession.setPreferredInput(preferred)
|
||||
} else {
|
||||
try self.rtcAudioSession.overrideOutputAudioPort(.speaker)
|
||||
@@ -905,7 +628,7 @@ extension WebRTCClient {
|
||||
try self.rtcAudioSession.setMode(AVAudioSession.Mode.voiceChat.rawValue)
|
||||
try self.rtcAudioSession.overrideOutputAudioPort(.none)
|
||||
}
|
||||
if hasExternalAudioDevice && !skipExternalDevice {
|
||||
if hasExternalAudioDevice {
|
||||
logger.debug("WebRTCClient: configuring session with external device available, skip configuring speaker")
|
||||
}
|
||||
try self.rtcAudioSession.setActive(true)
|
||||
@@ -936,59 +659,25 @@ extension WebRTCClient {
|
||||
}
|
||||
}
|
||||
|
||||
@MainActor
|
||||
func setAudioEnabled(_ enabled: Bool) {
|
||||
if activeCall != nil {
|
||||
activeCall?.localAudioTrack = enabled ? createAudioTrack() : nil
|
||||
activeCall?.connection.transceivers.first(where: { t in mediaSourceFromTransceiverMid(t.mid) == .mic })?.sender.track = activeCall?.localAudioTrack
|
||||
} else if notConnectedCall != nil {
|
||||
notConnectedCall?.audioTrack = enabled ? createAudioTrack() : nil
|
||||
}
|
||||
ChatModel.shared.activeCall?.localMediaSources.mic = enabled
|
||||
}
|
||||
|
||||
@MainActor
|
||||
func setCameraEnabled(_ enabled: Bool) {
|
||||
if let call = activeCall {
|
||||
if enabled {
|
||||
if call.localVideoTrack == nil {
|
||||
let device = activeCall?.device ?? notConnectedCall?.device ?? .front
|
||||
let (camera, track) = createVideoTrackAndStartCapture(device)
|
||||
activeCall?.localCamera = camera
|
||||
activeCall?.localVideoTrack = track
|
||||
}
|
||||
} else {
|
||||
(call.localCamera as? RTCCameraVideoCapturer)?.stopCapture()
|
||||
activeCall?.localCamera = nil
|
||||
activeCall?.localVideoTrack = nil
|
||||
}
|
||||
call.connection.transceivers
|
||||
.first(where: { t in mediaSourceFromTransceiverMid(t.mid) == .camera })?
|
||||
.sender.track = activeCall?.localVideoTrack
|
||||
ChatModel.shared.activeCall?.localMediaSources.camera = activeCall?.localVideoTrack != nil
|
||||
} else if let call = notConnectedCall {
|
||||
if enabled {
|
||||
let device = activeCall?.device ?? notConnectedCall?.device ?? .front
|
||||
notConnectedCall?.localCameraAndTrack = createVideoTrackAndStartCapture(device)
|
||||
} else {
|
||||
(call.localCameraAndTrack?.0 as? RTCCameraVideoCapturer)?.stopCapture()
|
||||
notConnectedCall?.localCameraAndTrack = nil
|
||||
}
|
||||
ChatModel.shared.activeCall?.localMediaSources.camera = notConnectedCall?.localCameraAndTrack != nil
|
||||
}
|
||||
func setVideoEnabled(_ enabled: Bool) {
|
||||
setTrackEnabled(RTCVideoTrack.self, enabled)
|
||||
}
|
||||
|
||||
func flipCamera() {
|
||||
let device = activeCall?.device ?? notConnectedCall?.device
|
||||
if activeCall != nil {
|
||||
activeCall?.device = device == .front ? .back : .front
|
||||
} else {
|
||||
notConnectedCall?.device = device == .front ? .back : .front
|
||||
switch activeCall.wrappedValue?.device {
|
||||
case .front: activeCall.wrappedValue?.device = .back
|
||||
case .back: activeCall.wrappedValue?.device = .front
|
||||
default: ()
|
||||
}
|
||||
startCaptureLocalVideo(
|
||||
activeCall?.device ?? notConnectedCall?.device,
|
||||
(activeCall?.localCamera ?? notConnectedCall?.localCameraAndTrack?.0) as? RTCCameraVideoCapturer
|
||||
)
|
||||
if let call = activeCall.wrappedValue {
|
||||
startCaptureLocalVideo(call)
|
||||
}
|
||||
}
|
||||
|
||||
private func setTrackEnabled<T: RTCMediaStreamTrack>(_ type: T.Type, _ enabled: Bool) {
|
||||
activeCall.wrappedValue?.connection.transceivers
|
||||
.compactMap { $0.sender.track as? T }
|
||||
.forEach { $0.isEnabled = enabled }
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -48,7 +48,7 @@ struct CIRcvDecryptionError: View {
|
||||
if case let .group(groupInfo) = chat.chatInfo,
|
||||
case let .groupRcv(groupMember) = chatItem.chatDir {
|
||||
do {
|
||||
let (member, stats) = try apiGroupMemberInfoSync(groupInfo.apiId, groupMember.groupMemberId)
|
||||
let (member, stats) = try apiGroupMemberInfo(groupInfo.apiId, groupMember.groupMemberId)
|
||||
if let s = stats {
|
||||
m.updateGroupMemberConnectionStats(groupInfo, member, s)
|
||||
}
|
||||
|
||||
@@ -137,14 +137,6 @@ struct ChatView: View {
|
||||
}
|
||||
}
|
||||
}
|
||||
// it should be presented on top level in order to prevent a bug in SwiftUI on iOS 16 related to .focused() modifier in AddGroupMembersView's search field
|
||||
.appSheet(isPresented: $showAddMembersSheet) {
|
||||
Group {
|
||||
if case let .group(groupInfo) = cInfo {
|
||||
AddGroupMembersView(chat: chat, groupInfo: groupInfo)
|
||||
}
|
||||
}
|
||||
}
|
||||
.sheet(isPresented: Binding(
|
||||
get: { !forwardedChatItems.isEmpty },
|
||||
set: { isPresented in
|
||||
@@ -312,6 +304,9 @@ struct ChatView: View {
|
||||
}
|
||||
} else {
|
||||
addMembersButton()
|
||||
.appSheet(isPresented: $showAddMembersSheet) {
|
||||
AddGroupMembersView(chat: chat, groupInfo: groupInfo)
|
||||
}
|
||||
}
|
||||
}
|
||||
Menu {
|
||||
|
||||
@@ -18,7 +18,6 @@ struct GroupMemberInfoView: View {
|
||||
var navigation: Bool = false
|
||||
@State private var connectionStats: ConnectionStats? = nil
|
||||
@State private var connectionCode: String? = nil
|
||||
@State private var connectionLoaded: Bool = false
|
||||
@State private var newRole: GroupMemberRole = .member
|
||||
@State private var alert: GroupMemberInfoViewAlert?
|
||||
@State private var sheet: PlanAndConnectActionSheet?
|
||||
@@ -95,137 +94,129 @@ struct GroupMemberInfoView: View {
|
||||
.listRowSeparator(.hidden)
|
||||
.listRowInsets(EdgeInsets(top: 0, leading: 0, bottom: 0, trailing: 0))
|
||||
|
||||
if connectionLoaded {
|
||||
|
||||
if member.memberActive {
|
||||
Section {
|
||||
if let code = connectionCode { verifyCodeButton(code) }
|
||||
if let connStats = connectionStats,
|
||||
connStats.ratchetSyncAllowed {
|
||||
synchronizeConnectionButton()
|
||||
}
|
||||
// } else if developerTools {
|
||||
// synchronizeConnectionButtonForce()
|
||||
// }
|
||||
if member.memberActive {
|
||||
Section {
|
||||
if let code = connectionCode { verifyCodeButton(code) }
|
||||
if let connStats = connectionStats,
|
||||
connStats.ratchetSyncAllowed {
|
||||
synchronizeConnectionButton()
|
||||
}
|
||||
// } else if developerTools {
|
||||
// synchronizeConnectionButtonForce()
|
||||
// }
|
||||
}
|
||||
}
|
||||
|
||||
if let contactLink = member.contactLink {
|
||||
Section {
|
||||
SimpleXLinkQRCode(uri: contactLink)
|
||||
Button {
|
||||
showShareSheet(items: [simplexChatLink(contactLink)])
|
||||
} label: {
|
||||
Label("Share address", systemImage: "square.and.arrow.up")
|
||||
}
|
||||
if let contactId = member.memberContactId {
|
||||
if knownDirectChat(contactId) == nil && !groupInfo.fullGroupPreferences.directMessages.on(for: groupInfo.membership) {
|
||||
connectViaAddressButton(contactLink)
|
||||
}
|
||||
} else {
|
||||
if let contactLink = member.contactLink {
|
||||
Section {
|
||||
SimpleXLinkQRCode(uri: contactLink)
|
||||
Button {
|
||||
showShareSheet(items: [simplexChatLink(contactLink)])
|
||||
} label: {
|
||||
Label("Share address", systemImage: "square.and.arrow.up")
|
||||
}
|
||||
if let contactId = member.memberContactId {
|
||||
if knownDirectChat(contactId) == nil && !groupInfo.fullGroupPreferences.directMessages.on(for: groupInfo.membership) {
|
||||
connectViaAddressButton(contactLink)
|
||||
}
|
||||
} header: {
|
||||
Text("Address")
|
||||
.foregroundColor(theme.colors.secondary)
|
||||
} footer: {
|
||||
Text("You can share this address with your contacts to let them connect with **\(member.displayName)**.")
|
||||
.foregroundColor(theme.colors.secondary)
|
||||
}
|
||||
}
|
||||
|
||||
Section(header: Text("Member").foregroundColor(theme.colors.secondary)) {
|
||||
infoRow("Group", groupInfo.displayName)
|
||||
|
||||
if let roles = member.canChangeRoleTo(groupInfo: groupInfo) {
|
||||
Picker("Change role", selection: $newRole) {
|
||||
ForEach(roles) { role in
|
||||
Text(role.text)
|
||||
}
|
||||
}
|
||||
.frame(height: 36)
|
||||
} else {
|
||||
infoRow("Role", member.memberRole.text)
|
||||
connectViaAddressButton(contactLink)
|
||||
}
|
||||
} header: {
|
||||
Text("Address")
|
||||
.foregroundColor(theme.colors.secondary)
|
||||
} footer: {
|
||||
Text("You can share this address with your contacts to let them connect with **\(member.displayName)**.")
|
||||
.foregroundColor(theme.colors.secondary)
|
||||
}
|
||||
}
|
||||
|
||||
if let connStats = connectionStats {
|
||||
Section(header: Text("Servers").foregroundColor(theme.colors.secondary)) {
|
||||
// TODO network connection status
|
||||
Button("Change receiving address") {
|
||||
alert = .switchAddressAlert
|
||||
Section(header: Text("Member").foregroundColor(theme.colors.secondary)) {
|
||||
infoRow("Group", groupInfo.displayName)
|
||||
|
||||
if let roles = member.canChangeRoleTo(groupInfo: groupInfo) {
|
||||
Picker("Change role", selection: $newRole) {
|
||||
ForEach(roles) { role in
|
||||
Text(role.text)
|
||||
}
|
||||
}
|
||||
.frame(height: 36)
|
||||
} else {
|
||||
infoRow("Role", member.memberRole.text)
|
||||
}
|
||||
}
|
||||
|
||||
if let connStats = connectionStats {
|
||||
Section(header: Text("Servers").foregroundColor(theme.colors.secondary)) {
|
||||
// TODO network connection status
|
||||
Button("Change receiving address") {
|
||||
alert = .switchAddressAlert
|
||||
}
|
||||
.disabled(
|
||||
connStats.rcvQueuesInfo.contains { $0.rcvSwitchStatus != nil }
|
||||
|| connStats.ratchetSyncSendProhibited
|
||||
)
|
||||
if connStats.rcvQueuesInfo.contains(where: { $0.rcvSwitchStatus != nil }) {
|
||||
Button("Abort changing address") {
|
||||
alert = .abortSwitchAddressAlert
|
||||
}
|
||||
.disabled(
|
||||
connStats.rcvQueuesInfo.contains { $0.rcvSwitchStatus != nil }
|
||||
connStats.rcvQueuesInfo.contains { $0.rcvSwitchStatus != nil && !$0.canAbortSwitch }
|
||||
|| connStats.ratchetSyncSendProhibited
|
||||
)
|
||||
if connStats.rcvQueuesInfo.contains(where: { $0.rcvSwitchStatus != nil }) {
|
||||
Button("Abort changing address") {
|
||||
alert = .abortSwitchAddressAlert
|
||||
}
|
||||
.disabled(
|
||||
connStats.rcvQueuesInfo.contains { $0.rcvSwitchStatus != nil && !$0.canAbortSwitch }
|
||||
|| connStats.ratchetSyncSendProhibited
|
||||
)
|
||||
}
|
||||
smpServers("Receiving via", connStats.rcvQueuesInfo.map { $0.rcvServer }, theme.colors.secondary)
|
||||
smpServers("Sending via", connStats.sndQueuesInfo.map { $0.sndServer }, theme.colors.secondary)
|
||||
}
|
||||
smpServers("Receiving via", connStats.rcvQueuesInfo.map { $0.rcvServer }, theme.colors.secondary)
|
||||
smpServers("Sending via", connStats.sndQueuesInfo.map { $0.sndServer }, theme.colors.secondary)
|
||||
}
|
||||
}
|
||||
|
||||
if groupInfo.membership.memberRole >= .admin {
|
||||
adminDestructiveSection(member)
|
||||
} else {
|
||||
nonAdminBlockSection(member)
|
||||
}
|
||||
if groupInfo.membership.memberRole >= .admin {
|
||||
adminDestructiveSection(member)
|
||||
} else {
|
||||
nonAdminBlockSection(member)
|
||||
}
|
||||
|
||||
if developerTools {
|
||||
Section(header: Text("For console").foregroundColor(theme.colors.secondary)) {
|
||||
infoRow("Local name", member.localDisplayName)
|
||||
infoRow("Database ID", "\(member.groupMemberId)")
|
||||
if let conn = member.activeConn {
|
||||
let connLevelDesc = conn.connLevel == 0 ? NSLocalizedString("direct", comment: "connection level description") : String.localizedStringWithFormat(NSLocalizedString("indirect (%d)", comment: "connection level description"), conn.connLevel)
|
||||
infoRow("Connection", connLevelDesc)
|
||||
}
|
||||
Button ("Debug delivery") {
|
||||
Task {
|
||||
do {
|
||||
let info = queueInfoText(try await apiGroupMemberQueueInfo(groupInfo.apiId, member.groupMemberId))
|
||||
await MainActor.run { alert = .queueInfo(info: info) }
|
||||
} catch let e {
|
||||
logger.error("apiContactQueueInfo error: \(responseError(e))")
|
||||
let a = getErrorAlert(e, "Error")
|
||||
await MainActor.run { alert = .error(title: a.title, error: a.message) }
|
||||
}
|
||||
if developerTools {
|
||||
Section(header: Text("For console").foregroundColor(theme.colors.secondary)) {
|
||||
infoRow("Local name", member.localDisplayName)
|
||||
infoRow("Database ID", "\(member.groupMemberId)")
|
||||
if let conn = member.activeConn {
|
||||
let connLevelDesc = conn.connLevel == 0 ? NSLocalizedString("direct", comment: "connection level description") : String.localizedStringWithFormat(NSLocalizedString("indirect (%d)", comment: "connection level description"), conn.connLevel)
|
||||
infoRow("Connection", connLevelDesc)
|
||||
}
|
||||
Button ("Debug delivery") {
|
||||
Task {
|
||||
do {
|
||||
let info = queueInfoText(try await apiGroupMemberQueueInfo(groupInfo.apiId, member.groupMemberId))
|
||||
await MainActor.run { alert = .queueInfo(info: info) }
|
||||
} catch let e {
|
||||
logger.error("apiContactQueueInfo error: \(responseError(e))")
|
||||
let a = getErrorAlert(e, "Error")
|
||||
await MainActor.run { alert = .error(title: a.title, error: a.message) }
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
.navigationBarHidden(true)
|
||||
.task {
|
||||
.onAppear {
|
||||
if #unavailable(iOS 16) {
|
||||
// this condition prevents re-setting picker
|
||||
if !justOpened { return }
|
||||
}
|
||||
justOpened = false
|
||||
newRole = member.memberRole
|
||||
do {
|
||||
let (_, stats) = try await apiGroupMemberInfo(groupInfo.apiId, member.groupMemberId)
|
||||
let (mem, code) = member.memberActive ? try await apiGetGroupMemberCode(groupInfo.apiId, member.groupMemberId) : (member, nil)
|
||||
await MainActor.run {
|
||||
DispatchQueue.main.async {
|
||||
newRole = member.memberRole
|
||||
do {
|
||||
let (_, stats) = try apiGroupMemberInfo(groupInfo.apiId, member.groupMemberId)
|
||||
let (mem, code) = member.memberActive ? try apiGetGroupMemberCode(groupInfo.apiId, member.groupMemberId) : (member, nil)
|
||||
_ = chatModel.upsertGroupMember(groupInfo, mem)
|
||||
connectionStats = stats
|
||||
connectionCode = code
|
||||
connectionLoaded = true
|
||||
} catch let error {
|
||||
logger.error("apiGroupMemberInfo or apiGetGroupMemberCode error: \(responseError(error))")
|
||||
}
|
||||
} catch let error {
|
||||
await MainActor.run {
|
||||
connectionLoaded = true
|
||||
}
|
||||
logger.error("apiGroupMemberInfo or apiGetGroupMemberCode error: \(responseError(error))")
|
||||
}
|
||||
}
|
||||
.onChange(of: newRole) { newRole in
|
||||
|
||||
@@ -41,8 +41,7 @@ struct SelectedItemsBottomToolbar: View {
|
||||
|
||||
@State var forwardEnabled: Bool = false
|
||||
|
||||
@State var deleteCountProhibited = false
|
||||
@State var forwardCountProhibited = false
|
||||
@State var allButtonsDisabled = false
|
||||
|
||||
var body: some View {
|
||||
VStack(spacing: 0) {
|
||||
@@ -56,9 +55,9 @@ struct SelectedItemsBottomToolbar: View {
|
||||
.resizable()
|
||||
.scaledToFit()
|
||||
.frame(width: 20, height: 20, alignment: .center)
|
||||
.foregroundColor(!deleteEnabled || deleteCountProhibited ? theme.colors.secondary: .red)
|
||||
.foregroundColor(!deleteEnabled || allButtonsDisabled ? theme.colors.secondary: .red)
|
||||
}
|
||||
.disabled(!deleteEnabled || deleteCountProhibited)
|
||||
.disabled(!deleteEnabled || allButtonsDisabled)
|
||||
|
||||
Spacer()
|
||||
Button {
|
||||
@@ -68,9 +67,9 @@ struct SelectedItemsBottomToolbar: View {
|
||||
.resizable()
|
||||
.scaledToFit()
|
||||
.frame(width: 20, height: 20, alignment: .center)
|
||||
.foregroundColor(!moderateEnabled || deleteCountProhibited ? theme.colors.secondary : .red)
|
||||
.foregroundColor(!moderateEnabled || allButtonsDisabled ? theme.colors.secondary : .red)
|
||||
}
|
||||
.disabled(!moderateEnabled || deleteCountProhibited)
|
||||
.disabled(!moderateEnabled || allButtonsDisabled)
|
||||
.opacity(canModerate ? 1 : 0)
|
||||
|
||||
Spacer()
|
||||
@@ -81,9 +80,9 @@ struct SelectedItemsBottomToolbar: View {
|
||||
.resizable()
|
||||
.scaledToFit()
|
||||
.frame(width: 20, height: 20, alignment: .center)
|
||||
.foregroundColor(!forwardEnabled || forwardCountProhibited ? theme.colors.secondary : theme.colors.primary)
|
||||
.foregroundColor(!forwardEnabled || allButtonsDisabled ? theme.colors.secondary : theme.colors.primary)
|
||||
}
|
||||
.disabled(!forwardEnabled || forwardCountProhibited)
|
||||
.disabled(!forwardEnabled || allButtonsDisabled)
|
||||
}
|
||||
.frame(maxHeight: .infinity)
|
||||
.padding([.leading, .trailing], 12)
|
||||
@@ -106,8 +105,7 @@ struct SelectedItemsBottomToolbar: View {
|
||||
|
||||
private func recheckItems(_ chatInfo: ChatInfo, _ chatItems: [ChatItem], _ selectedItems: Set<Int64>?) {
|
||||
let count = selectedItems?.count ?? 0
|
||||
deleteCountProhibited = count == 0 || count > 200
|
||||
forwardCountProhibited = count == 0 || count > 20
|
||||
allButtonsDisabled = count == 0 || count > 20
|
||||
canModerate = possibleToModerate(chatInfo)
|
||||
if let selected = selectedItems {
|
||||
let me: Bool
|
||||
|
||||
@@ -10,7 +10,7 @@ import SwiftUI
|
||||
|
||||
struct ChatHelp: View {
|
||||
@EnvironmentObject var chatModel: ChatModel
|
||||
let dismissSettingsSheet: DismissAction
|
||||
@Binding var showSettings: Bool
|
||||
|
||||
var body: some View {
|
||||
ScrollView { chatHelp() }
|
||||
@@ -23,7 +23,7 @@ struct ChatHelp: View {
|
||||
VStack(alignment: .leading, spacing: 0) {
|
||||
Text("To ask any questions and to receive updates:")
|
||||
Button("connect to SimpleX Chat developers.") {
|
||||
dismissSettingsSheet()
|
||||
showSettings = false
|
||||
DispatchQueue.main.async {
|
||||
UIApplication.shared.open(simplexTeamURL)
|
||||
}
|
||||
@@ -61,9 +61,8 @@ struct ChatHelp: View {
|
||||
}
|
||||
|
||||
struct ChatHelp_Previews: PreviewProvider {
|
||||
@Environment(\.dismiss) static var mockDismiss
|
||||
|
||||
static var previews: some View {
|
||||
ChatHelp(dismissSettingsSheet: mockDismiss)
|
||||
@State var showSettings = false
|
||||
return ChatHelp(showSettings: $showSettings)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -18,77 +18,19 @@ enum UserPickerSheet: Identifiable {
|
||||
case settings
|
||||
|
||||
var id: Self { self }
|
||||
|
||||
var navigationTitle: LocalizedStringKey {
|
||||
switch self {
|
||||
case .address: "SimpleX address"
|
||||
case .chatPreferences: "Your preferences"
|
||||
case .chatProfiles: "Your chat profiles"
|
||||
case .currentProfile: "Your current profile"
|
||||
case .useFromDesktop: "Connect to desktop"
|
||||
case .settings: "Your settings"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
struct UserPickerSheetView: View {
|
||||
let sheet: UserPickerSheet
|
||||
@EnvironmentObject var chatModel: ChatModel
|
||||
@State private var loaded = false
|
||||
|
||||
var body: some View {
|
||||
NavigationView {
|
||||
ZStack {
|
||||
if loaded, let currentUser = chatModel.currentUser {
|
||||
switch sheet {
|
||||
case .address:
|
||||
UserAddressView(shareViaProfile: currentUser.addressShared)
|
||||
case .chatPreferences:
|
||||
PreferencesView(
|
||||
profile: currentUser.profile,
|
||||
preferences: currentUser.fullPreferences,
|
||||
currentPreferences: currentUser.fullPreferences
|
||||
)
|
||||
case .chatProfiles:
|
||||
UserProfilesView()
|
||||
case .currentProfile:
|
||||
UserProfile()
|
||||
case .useFromDesktop:
|
||||
ConnectDesktopView()
|
||||
case .settings:
|
||||
SettingsView()
|
||||
}
|
||||
}
|
||||
Color.clear // Required for list background to be rendered during loading
|
||||
}
|
||||
.navigationTitle(sheet.navigationTitle)
|
||||
.navigationBarTitleDisplayMode(.large)
|
||||
.modifier(ThemedBackground(grouped: true))
|
||||
}
|
||||
.overlay {
|
||||
if let la = chatModel.laRequest {
|
||||
LocalAuthView(authRequest: la)
|
||||
}
|
||||
}
|
||||
.task {
|
||||
withAnimation(
|
||||
.easeOut(duration: 0.1),
|
||||
{ loaded = true }
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
struct ChatListView: View {
|
||||
@EnvironmentObject var chatModel: ChatModel
|
||||
@EnvironmentObject var theme: AppTheme
|
||||
@Binding var activeUserPickerSheet: UserPickerSheet?
|
||||
@Binding var showSettings: Bool
|
||||
@State private var searchMode = false
|
||||
@FocusState private var searchFocussed
|
||||
@State private var searchText = ""
|
||||
@State private var searchShowingSimplexLink = false
|
||||
@State private var searchChatFilteredBySimplexLink: String? = nil
|
||||
@State private var scrollToSearchBar = false
|
||||
@State private var activeUserPickerSheet: UserPickerSheet? = nil
|
||||
@State private var userPickerShown: Bool = false
|
||||
|
||||
@AppStorage(DEFAULT_SHOW_UNREAD_AND_FAVORITES) private var showUnreadAndFavorites = false
|
||||
@@ -116,20 +58,43 @@ struct ChatListView: View {
|
||||
destination: chatView
|
||||
) { chatListView }
|
||||
}
|
||||
.modifier(
|
||||
Sheet(isPresented: $userPickerShown) {
|
||||
UserPicker(userPickerShown: $userPickerShown, activeSheet: $activeUserPickerSheet)
|
||||
}
|
||||
)
|
||||
.sheet(item: $activeUserPickerSheet) {
|
||||
UserPickerSheetView(sheet: $0)
|
||||
}
|
||||
.onChange(of: activeUserPickerSheet) {
|
||||
if $0 != nil {
|
||||
DispatchQueue.main.asyncAfter(deadline: .now() + 0.3) {
|
||||
userPickerShown = false
|
||||
.sheet(isPresented: $userPickerShown) {
|
||||
UserPicker(activeSheet: $activeUserPickerSheet)
|
||||
.sheet(item: $activeUserPickerSheet) { sheet in
|
||||
if let currentUser = chatModel.currentUser {
|
||||
switch sheet {
|
||||
case .address:
|
||||
NavigationView {
|
||||
UserAddressView(shareViaProfile: currentUser.addressShared)
|
||||
.navigationTitle("SimpleX address")
|
||||
.navigationBarTitleDisplayMode(.large)
|
||||
.modifier(ThemedBackground(grouped: true))
|
||||
}
|
||||
case .chatProfiles:
|
||||
NavigationView {
|
||||
UserProfilesView()
|
||||
}
|
||||
case .currentProfile:
|
||||
NavigationView {
|
||||
UserProfile()
|
||||
.navigationTitle("Your current profile")
|
||||
.modifier(ThemedBackground(grouped: true))
|
||||
}
|
||||
case .chatPreferences:
|
||||
NavigationView {
|
||||
PreferencesView(profile: currentUser.profile, preferences: currentUser.fullPreferences, currentPreferences: currentUser.fullPreferences)
|
||||
.navigationTitle("Your preferences")
|
||||
.navigationBarTitleDisplayMode(.large)
|
||||
.modifier(ThemedBackground(grouped: true))
|
||||
}
|
||||
case .useFromDesktop:
|
||||
ConnectDesktopView(viaSettings: false)
|
||||
case .settings:
|
||||
SettingsView(showSettings: $showSettings)
|
||||
.navigationBarTitleDisplayMode(.large)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -437,7 +402,7 @@ struct SubsStatusIndicator: View {
|
||||
private func startTask() {
|
||||
task = Task {
|
||||
while !Task.isCancelled {
|
||||
if AppChatState.shared.value == .active, ChatModel.shared.chatRunning == true {
|
||||
if AppChatState.shared.value == .active {
|
||||
do {
|
||||
let (subs, hasSess) = try await getAgentSubsTotal()
|
||||
await MainActor.run {
|
||||
@@ -579,8 +544,6 @@ func chatStoppedIcon() -> some View {
|
||||
}
|
||||
|
||||
struct ChatListView_Previews: PreviewProvider {
|
||||
@State static var userPickerSheet: UserPickerSheet? = .none
|
||||
|
||||
static var previews: some View {
|
||||
let chatModel = ChatModel()
|
||||
chatModel.updateChats([
|
||||
@@ -599,9 +562,9 @@ struct ChatListView_Previews: PreviewProvider {
|
||||
|
||||
])
|
||||
return Group {
|
||||
ChatListView(activeUserPickerSheet: $userPickerSheet)
|
||||
ChatListView(showSettings: Binding.constant(false))
|
||||
.environmentObject(chatModel)
|
||||
ChatListView(activeUserPickerSheet: $userPickerSheet)
|
||||
ChatListView(showSettings: Binding.constant(false))
|
||||
.environmentObject(ChatModel())
|
||||
}
|
||||
}
|
||||
|
||||
@@ -12,31 +12,42 @@ struct UserPicker: View {
|
||||
@Environment(\.dynamicTypeSize) private var userFont: DynamicTypeSize
|
||||
@Environment(\.scenePhase) private var scenePhase: ScenePhase
|
||||
@Environment(\.colorScheme) private var colorScheme: ColorScheme
|
||||
@Binding var userPickerShown: Bool
|
||||
@Environment(\.dismiss) private var dismiss: DismissAction
|
||||
@Binding var activeSheet: UserPickerSheet?
|
||||
@State private var currentUser: Int64?
|
||||
@State private var switchingProfile = false
|
||||
@State private var frameWidth: CGFloat = 0
|
||||
@State private var resetScroll = ResetScrollAction()
|
||||
|
||||
// Inset grouped list dimensions
|
||||
private let imageSize: CGFloat = 44
|
||||
private let rowPadding: CGFloat = 16
|
||||
private let rowVerticalPadding: CGFloat = 11
|
||||
private let sectionSpacing: CGFloat = 35
|
||||
private var sectionHorizontalPadding: CGFloat { frameWidth > 375 ? 20 : 16 }
|
||||
private let sectionShape = RoundedRectangle(cornerRadius: 10, style: .continuous)
|
||||
|
||||
var body: some View {
|
||||
if #available(iOS 16.0, *) {
|
||||
let v = viewBody.presentationDetents([.height(400)])
|
||||
if #available(iOS 16.4, *) {
|
||||
v.scrollBounceBehavior(.basedOnSize)
|
||||
} else {
|
||||
v
|
||||
}
|
||||
} else {
|
||||
viewBody
|
||||
}
|
||||
}
|
||||
|
||||
@ViewBuilder
|
||||
private var viewBody: some View {
|
||||
let otherUsers: [UserInfo] = m.users
|
||||
.filter { u in !u.user.hidden && u.user.userId != m.currentUser?.userId }
|
||||
.sorted(using: KeyPathComparator<UserInfo>(\.user.activeOrder, order: .reverse))
|
||||
let sectionWidth = max(frameWidth - sectionHorizontalPadding * 2, 0)
|
||||
let currentUserWidth = max(frameWidth - sectionHorizontalPadding - rowPadding * 2 - 14 - imageSize, 0)
|
||||
let stopped = m.chatRunning != true
|
||||
VStack(spacing: sectionSpacing) {
|
||||
VStack(spacing: 0) {
|
||||
if let user = m.currentUser {
|
||||
StickyScrollView(resetScroll: $resetScroll) {
|
||||
StickyScrollView {
|
||||
HStack(spacing: rowPadding) {
|
||||
HStack {
|
||||
ProfileImage(imageStr: user.image, size: imageSize, color: Color(uiColor: .tertiarySystemGroupedBackground))
|
||||
@@ -45,16 +56,13 @@ struct UserPicker: View {
|
||||
}
|
||||
.padding(rowPadding)
|
||||
.frame(width: otherUsers.isEmpty ? sectionWidth : currentUserWidth, alignment: .leading)
|
||||
.modifier(ListRow { activeSheet = .currentProfile })
|
||||
.background(Color(.secondarySystemGroupedBackground))
|
||||
.clipShape(sectionShape)
|
||||
.disabled(stopped)
|
||||
.opacity(stopped ? 0.4 : 1)
|
||||
.onTapGesture { activeSheet = .currentProfile }
|
||||
ForEach(otherUsers) { u in
|
||||
userView(u, size: imageSize)
|
||||
.frame(maxWidth: sectionWidth * 0.618)
|
||||
.fixedSize()
|
||||
.disabled(stopped)
|
||||
.opacity(stopped ? 0.4 : 1)
|
||||
}
|
||||
}
|
||||
.padding(.horizontal, sectionHorizontalPadding)
|
||||
@@ -64,21 +72,20 @@ struct UserPicker: View {
|
||||
.overlay(DetermineWidth())
|
||||
.onPreferenceChange(DetermineWidth.Key.self) { frameWidth = $0 }
|
||||
}
|
||||
VStack(spacing: 0) {
|
||||
openSheetOnTap("qrcode", title: m.userAddress == nil ? "Create SimpleX address" : "Your SimpleX address", sheet: .address, disabled: stopped)
|
||||
openSheetOnTap("switch.2", title: "Chat preferences", sheet: .chatPreferences, disabled: stopped)
|
||||
openSheetOnTap("person.crop.rectangle.stack", title: "Your chat profiles", sheet: .chatProfiles, disabled: stopped)
|
||||
openSheetOnTap("desktopcomputer", title: "Use from desktop", sheet: .useFromDesktop, disabled: stopped)
|
||||
ZStack(alignment: .trailing) {
|
||||
openSheetOnTap("gearshape", title: "Settings", sheet: .settings, showDivider: false)
|
||||
Image(systemName: colorScheme == .light ? "sun.max" : "moon.fill")
|
||||
List {
|
||||
Section {
|
||||
openSheetOnTap("qrcode", title: m.userAddress == nil ? "Create SimpleX address" : "Your SimpleX address", sheet: .address)
|
||||
openSheetOnTap("switch.2", title: "Chat preferences", sheet: .chatPreferences)
|
||||
openSheetOnTap("person.crop.rectangle.stack", title: "Your chat profiles", sheet: .chatProfiles)
|
||||
openSheetOnTap("desktopcomputer", title: "Use from desktop", sheet: .useFromDesktop)
|
||||
|
||||
ZStack(alignment: .trailing) {
|
||||
openSheetOnTap("gearshape", title: "Settings", sheet: .settings)
|
||||
Image(systemName: colorScheme == .light ? "sun.max" : "moon.fill")
|
||||
.resizable()
|
||||
.scaledToFit()
|
||||
.symbolRenderingMode(.monochrome)
|
||||
.foregroundColor(theme.colors.secondary)
|
||||
.frame(maxWidth: 20, maxHeight: .infinity)
|
||||
.padding(.horizontal, rowPadding)
|
||||
.background(Color(.systemBackground).opacity(0.01))
|
||||
.frame(maxWidth: 20, maxHeight: 20)
|
||||
.onTapGesture {
|
||||
if (colorScheme == .light) {
|
||||
ThemeManager.applyTheme(systemDarkThemeDefault.get())
|
||||
@@ -89,11 +96,9 @@ struct UserPicker: View {
|
||||
.onLongPressGesture {
|
||||
ThemeManager.applyTheme(DefaultTheme.SYSTEM_THEME_NAME)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
.clipShape(sectionShape)
|
||||
.padding(.horizontal, sectionHorizontalPadding)
|
||||
.padding(.bottom, sectionSpacing)
|
||||
}
|
||||
.onAppear {
|
||||
// This check prevents the call of listUsers after the app is suspended, and the database is closed.
|
||||
@@ -112,9 +117,6 @@ struct UserPicker: View {
|
||||
}
|
||||
}
|
||||
}
|
||||
.onChange(of: userPickerShown) {
|
||||
if !$0 { resetScroll() }
|
||||
}
|
||||
.modifier(ThemedBackground(grouped: true))
|
||||
.disabled(switchingProfile)
|
||||
}
|
||||
@@ -131,15 +133,15 @@ struct UserPicker: View {
|
||||
Text(u.user.displayName).font(.title2).lineLimit(1)
|
||||
}
|
||||
.padding(rowPadding)
|
||||
.modifier(ListRow {
|
||||
.background(Color(.secondarySystemGroupedBackground))
|
||||
.clipShape(sectionShape)
|
||||
.onTapGesture {
|
||||
switchingProfile = true
|
||||
dismiss()
|
||||
Task {
|
||||
do {
|
||||
try await changeActiveUserAsync_(u.user.userId, viewPwd: nil)
|
||||
await MainActor.run {
|
||||
switchingProfile = false
|
||||
userPickerShown = false
|
||||
}
|
||||
await MainActor.run { switchingProfile = false }
|
||||
} catch {
|
||||
await MainActor.run {
|
||||
switchingProfile = false
|
||||
@@ -150,24 +152,19 @@ struct UserPicker: View {
|
||||
}
|
||||
}
|
||||
}
|
||||
})
|
||||
.clipShape(sectionShape)
|
||||
}
|
||||
}
|
||||
|
||||
private func openSheetOnTap(_ icon: String, title: LocalizedStringKey, sheet: UserPickerSheet, showDivider: Bool = true, disabled: Bool = false) -> some View {
|
||||
ZStack(alignment: .bottom) {
|
||||
|
||||
private func openSheetOnTap(_ icon: String, title: LocalizedStringKey, sheet: UserPickerSheet) -> some View {
|
||||
Button {
|
||||
activeSheet = sheet
|
||||
} label: {
|
||||
settingsRow(icon, color: theme.colors.secondary) {
|
||||
Text(title).foregroundColor(.primary).opacity(disabled ? 0.4 : 1)
|
||||
}
|
||||
.frame(maxWidth: .infinity, alignment: .leading)
|
||||
.padding(.horizontal, rowPadding)
|
||||
.padding(.vertical, rowVerticalPadding)
|
||||
.modifier(ListRow { activeSheet = sheet })
|
||||
.disabled(disabled)
|
||||
if showDivider {
|
||||
Divider().padding(.leading, 52)
|
||||
Text(title).foregroundColor(.primary)
|
||||
}
|
||||
}
|
||||
.frame(maxWidth: .infinity, alignment: .leading)
|
||||
.contentShape(Rectangle())
|
||||
}
|
||||
|
||||
private func unreadBadge(_ u: UserInfo) -> some View {
|
||||
@@ -182,92 +179,6 @@ struct UserPicker: View {
|
||||
}
|
||||
}
|
||||
|
||||
struct ListRow: ViewModifier {
|
||||
@Environment(\.colorScheme) private var colorScheme: ColorScheme
|
||||
@State private var touchDown = false
|
||||
let action: () -> Void
|
||||
|
||||
func body(content: Content) -> some View {
|
||||
ZStack {
|
||||
elevatedSecondarySystemGroupedBackground
|
||||
Color(.systemGray4).opacity(touchDown ? 1 : 0)
|
||||
content
|
||||
TouchOverlay(touchDown: $touchDown, action: action)
|
||||
}
|
||||
}
|
||||
|
||||
var elevatedSecondarySystemGroupedBackground: Color {
|
||||
switch colorScheme {
|
||||
case .dark: Color(0xFF2C2C2E)
|
||||
default: Color(0xFFFFFFFF)
|
||||
}
|
||||
}
|
||||
|
||||
struct TouchOverlay: UIViewRepresentable {
|
||||
@Binding var touchDown: Bool
|
||||
let action: () -> Void
|
||||
|
||||
func makeUIView(context: Context) -> TouchView {
|
||||
let touchView = TouchView()
|
||||
let gesture = UILongPressGestureRecognizer(
|
||||
target: touchView,
|
||||
action: #selector(touchView.longPress(gesture:))
|
||||
)
|
||||
gesture.delegate = touchView
|
||||
gesture.minimumPressDuration = 0
|
||||
touchView.addGestureRecognizer(gesture)
|
||||
return touchView
|
||||
}
|
||||
|
||||
func updateUIView(_ touchView: TouchView, context: Context) {
|
||||
touchView.representer = self
|
||||
}
|
||||
|
||||
class TouchView: UIView, UIGestureRecognizerDelegate {
|
||||
var representer: TouchOverlay?
|
||||
private var startLocation: CGPoint?
|
||||
private var task: Task<Void, Never>?
|
||||
|
||||
@objc
|
||||
func longPress(gesture: UILongPressGestureRecognizer) {
|
||||
switch gesture.state {
|
||||
case .began:
|
||||
startLocation = gesture.location(in: nil)
|
||||
task = Task {
|
||||
do {
|
||||
try await Task.sleep(nanoseconds: 200_000000)
|
||||
await MainActor.run { representer?.touchDown = true }
|
||||
} catch { }
|
||||
}
|
||||
case .ended:
|
||||
if hitTest(gesture.location(in: self), with: nil) == self {
|
||||
representer?.action()
|
||||
}
|
||||
task?.cancel()
|
||||
representer?.touchDown = false
|
||||
case .changed:
|
||||
if let startLocation {
|
||||
let location = gesture.location(in: nil)
|
||||
let dx = location.x - startLocation.x
|
||||
let dy = location.y - startLocation.y
|
||||
if sqrt(pow(dx, 2) + pow(dy, 2)) > 10 { gesture.state = .failed }
|
||||
}
|
||||
case .cancelled, .failed:
|
||||
task?.cancel()
|
||||
representer?.touchDown = false
|
||||
default: break
|
||||
}
|
||||
}
|
||||
|
||||
func gestureRecognizer(
|
||||
_: UIGestureRecognizer,
|
||||
shouldRecognizeSimultaneouslyWith: UIGestureRecognizer
|
||||
) -> Bool { true }
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
struct UserPicker_Previews: PreviewProvider {
|
||||
static var previews: some View {
|
||||
@State var activeSheet: UserPickerSheet?
|
||||
@@ -275,7 +186,6 @@ struct UserPicker_Previews: PreviewProvider {
|
||||
let m = ChatModel()
|
||||
m.users = [UserInfo.sampleData, UserInfo.sampleData]
|
||||
return UserPicker(
|
||||
userPickerShown: .constant(true),
|
||||
activeSheet: $activeSheet
|
||||
)
|
||||
.environmentObject(m)
|
||||
|
||||
@@ -44,7 +44,7 @@ enum DatabaseAlert: Identifiable {
|
||||
struct DatabaseView: View {
|
||||
@EnvironmentObject var m: ChatModel
|
||||
@EnvironmentObject var theme: AppTheme
|
||||
let dismissSettingsSheet: DismissAction
|
||||
@Binding var showSettings: Bool
|
||||
@State private var runChat = false
|
||||
@State private var alert: DatabaseAlert? = nil
|
||||
@State private var showFileImporter = false
|
||||
@@ -439,7 +439,7 @@ struct DatabaseView: View {
|
||||
|
||||
private func startChat() {
|
||||
if m.chatDbChanged {
|
||||
dismissSettingsSheet()
|
||||
showSettings = false
|
||||
DispatchQueue.main.asyncAfter(deadline: .now() + 1) {
|
||||
resetChatCtrl()
|
||||
do {
|
||||
@@ -533,9 +533,7 @@ func deleteChatAsync() async throws {
|
||||
}
|
||||
|
||||
struct DatabaseView_Previews: PreviewProvider {
|
||||
@Environment(\.dismiss) static var mockDismiss
|
||||
|
||||
static var previews: some View {
|
||||
DatabaseView(dismissSettingsSheet: mockDismiss, chatItemTTL: .none)
|
||||
DatabaseView(showSettings: Binding.constant(false), chatItemTTL: .none)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,188 +0,0 @@
|
||||
//
|
||||
// SwiftUISheet.swift
|
||||
// SimpleX (iOS)
|
||||
//
|
||||
// Created by user on 23/09/2024.
|
||||
// Copyright © 2024 SimpleX Chat. All rights reserved.
|
||||
//
|
||||
|
||||
import SwiftUI
|
||||
|
||||
private let sheetAnimationDuration: Double = 0.35
|
||||
|
||||
// Refrence: https://easings.net/
|
||||
private let easeOutCubic = UICubicTimingParameters(
|
||||
controlPoint1: CGPoint(x: 0.215, y: 0.61),
|
||||
controlPoint2: CGPoint(x: 0.355, y: 1)
|
||||
)
|
||||
|
||||
struct Sheet<SheetContent: View>: ViewModifier {
|
||||
@Binding var isPresented: Bool
|
||||
@ViewBuilder let sheetContent: () -> SheetContent
|
||||
|
||||
func body(content: Content) -> some View {
|
||||
ZStack {
|
||||
content
|
||||
SheetRepresentable(isPresented: $isPresented, content: sheetContent())
|
||||
.allowsHitTesting(isPresented)
|
||||
.ignoresSafeArea()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
struct SheetRepresentable<Content: View>: UIViewControllerRepresentable {
|
||||
@Binding var isPresented: Bool
|
||||
let content: Content
|
||||
|
||||
func makeUIViewController(context: Context) -> Controller<Content> {
|
||||
Controller(content: content, representer: self)
|
||||
}
|
||||
|
||||
func updateUIViewController(_ sheetController: Controller<Content>, context: Context) {
|
||||
sheetController.animate(isPresented: isPresented)
|
||||
}
|
||||
|
||||
class Controller<C: View>: UIViewController {
|
||||
let hostingController: UIHostingController<C>
|
||||
private let animator = UIViewPropertyAnimator(
|
||||
duration: sheetAnimationDuration,
|
||||
timingParameters: easeOutCubic
|
||||
)
|
||||
private let representer: SheetRepresentable<C>
|
||||
private var retainedFraction: CGFloat = 0
|
||||
private var sheetHeight: Double { hostingController.view.frame.height }
|
||||
private var task: Task<Void, Never>?
|
||||
|
||||
init(content: C, representer: SheetRepresentable<C>) {
|
||||
self.representer = representer
|
||||
self.hostingController = UIHostingController(rootView: content)
|
||||
super.init(nibName: nil, bundle: nil)
|
||||
}
|
||||
|
||||
@available(*, unavailable)
|
||||
required init?(coder: NSCoder) { fatalError("init(coder:) missing") }
|
||||
|
||||
deinit {
|
||||
animator.stopAnimation(true)
|
||||
animator.finishAnimation(at: .current)
|
||||
}
|
||||
|
||||
func animate(isPresented: Bool) {
|
||||
let alreadyAnimating = animator.isRunning && isPresented != animator.isReversed
|
||||
let sheetFullyDismissed = animator.fractionComplete == (animator.isReversed ? 1 : 0)
|
||||
let sheetFullyPresented = animator.fractionComplete == (animator.isReversed ? 0 : 1)
|
||||
|
||||
if !isPresented && sheetFullyDismissed ||
|
||||
isPresented && sheetFullyPresented ||
|
||||
alreadyAnimating {
|
||||
return
|
||||
}
|
||||
|
||||
animator.pauseAnimation()
|
||||
animator.isReversed = !isPresented
|
||||
animator.continueAnimation(
|
||||
withTimingParameters: isPresented
|
||||
? easeOutCubic
|
||||
: UICubicTimingParameters(animationCurve: .easeIn),
|
||||
durationFactor: 1 - animator.fractionComplete
|
||||
)
|
||||
handleVisibility()
|
||||
}
|
||||
|
||||
func handleVisibility() {
|
||||
if animator.isReversed {
|
||||
task = Task {
|
||||
do {
|
||||
let sleepDuration = UInt64(sheetAnimationDuration * Double(NSEC_PER_SEC))
|
||||
try await Task.sleep(nanoseconds: sleepDuration)
|
||||
view.isHidden = true
|
||||
} catch { }
|
||||
}
|
||||
} else {
|
||||
task?.cancel()
|
||||
task = nil
|
||||
view.isHidden = false
|
||||
}
|
||||
}
|
||||
|
||||
override func viewDidLoad() {
|
||||
view.isHidden = true
|
||||
view.backgroundColor = .clear
|
||||
view.addGestureRecognizer(
|
||||
UITapGestureRecognizer(target: self, action: #selector(tap(gesture:)))
|
||||
)
|
||||
addChild(hostingController)
|
||||
hostingController.didMove(toParent: self)
|
||||
if let sheet = hostingController.view {
|
||||
sheet.isHidden = true
|
||||
sheet.clipsToBounds = true
|
||||
sheet.layer.cornerRadius = 10
|
||||
sheet.layer.maskedCorners = [.layerMaxXMinYCorner, .layerMinXMinYCorner]
|
||||
sheet.addGestureRecognizer(UIPanGestureRecognizer(target: self, action: #selector(pan(gesture:))))
|
||||
sheet.translatesAutoresizingMaskIntoConstraints = false
|
||||
view.addSubview(sheet)
|
||||
NSLayoutConstraint.activate([
|
||||
hostingController.view.leadingAnchor.constraint(equalTo: view.leadingAnchor),
|
||||
hostingController.view.trailingAnchor.constraint(equalTo: view.trailingAnchor),
|
||||
hostingController.view.bottomAnchor.constraint(equalTo: view.bottomAnchor),
|
||||
])
|
||||
}
|
||||
}
|
||||
|
||||
override func viewDidAppear(_ animated: Bool) {
|
||||
// Ensures animations are only setup once
|
||||
// on some iOS version `viewDidAppear` can get called on each state change.
|
||||
if hostingController.view.isHidden {
|
||||
hostingController.view.transform = CGAffineTransform(translationX: 0, y: self.sheetHeight)
|
||||
hostingController.view.isHidden = false
|
||||
animator.pausesOnCompletion = true
|
||||
animator.addAnimations {
|
||||
self.hostingController.view.transform = .identity
|
||||
self.view.backgroundColor = UIColor {
|
||||
switch $0.userInterfaceStyle {
|
||||
case .dark: .black.withAlphaComponent(0.290)
|
||||
default: .black.withAlphaComponent(0.121)
|
||||
}
|
||||
}
|
||||
}
|
||||
animator.startAnimation()
|
||||
animator.pauseAnimation()
|
||||
}
|
||||
}
|
||||
|
||||
@objc
|
||||
func pan(gesture: UIPanGestureRecognizer) {
|
||||
switch gesture.state {
|
||||
case .began:
|
||||
animator.isReversed = false
|
||||
animator.pauseAnimation()
|
||||
retainedFraction = animator.fractionComplete
|
||||
case .changed:
|
||||
animator.fractionComplete = retainedFraction - gesture.translation(in: view).y / sheetHeight
|
||||
case .ended, .cancelled:
|
||||
let velocity = gesture.velocity(in: view).y
|
||||
animator.isReversed = (velocity - (animator.fractionComplete - 0.5) * 100).sign == .plus
|
||||
let defaultVelocity = sheetHeight / sheetAnimationDuration
|
||||
let fractionRemaining = 1 - animator.fractionComplete
|
||||
let durationFactor = min(max(fractionRemaining / (abs(velocity) / defaultVelocity), 0.5), 1)
|
||||
animator.continueAnimation(withTimingParameters: nil, durationFactor: durationFactor * fractionRemaining)
|
||||
handleVisibility()
|
||||
DispatchQueue.main.asyncAfter(deadline: .now() + sheetAnimationDuration) {
|
||||
self.representer.isPresented = !self.animator.isReversed
|
||||
}
|
||||
default: break
|
||||
}
|
||||
}
|
||||
|
||||
@objc
|
||||
func tap(gesture: UITapGestureRecognizer) {
|
||||
switch gesture.state {
|
||||
case .ended:
|
||||
if gesture.location(in: view).y < view.frame.height - sheetHeight {
|
||||
representer.isPresented = false
|
||||
}
|
||||
default: break
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -9,7 +9,6 @@
|
||||
import SwiftUI
|
||||
|
||||
struct StickyScrollView<Content: View>: UIViewRepresentable {
|
||||
@Binding var resetScroll: ResetScrollAction
|
||||
@ViewBuilder let content: () -> Content
|
||||
|
||||
func makeUIView(context: Context) -> UIScrollView {
|
||||
@@ -19,9 +18,6 @@ struct StickyScrollView<Content: View>: UIViewRepresentable {
|
||||
sv.showsHorizontalScrollIndicator = false
|
||||
sv.addSubview(hc.view)
|
||||
sv.delegate = context.coordinator
|
||||
DispatchQueue.main.async {
|
||||
resetScroll = ResetScrollAction { sv.setContentOffset(.zero, animated: false) }
|
||||
}
|
||||
return sv
|
||||
}
|
||||
|
||||
@@ -54,8 +50,3 @@ struct StickyScrollView<Content: View>: UIViewRepresentable {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
struct ResetScrollAction {
|
||||
var action = { }
|
||||
func callAsFunction() { action() }
|
||||
}
|
||||
|
||||
@@ -14,8 +14,7 @@ enum ContactType: Int {
|
||||
}
|
||||
|
||||
struct NewChatMenuButton: View {
|
||||
// do not use chatModel here because it prevents showing AddGroupMembersView after group creation and QR code after link creation on iOS 16
|
||||
// @EnvironmentObject var chatModel: ChatModel
|
||||
@EnvironmentObject var chatModel: ChatModel
|
||||
@State private var showNewChatSheet = false
|
||||
@State private var alert: SomeAlert? = nil
|
||||
@State private var pendingConnection: PendingContactConnection? = nil
|
||||
@@ -33,7 +32,7 @@ struct NewChatMenuButton: View {
|
||||
NewChatSheet(pendingConnection: $pendingConnection)
|
||||
.environment(\EnvironmentValues.refresh as! WritableKeyPath<EnvironmentValues, RefreshAction?>, nil)
|
||||
.onDisappear {
|
||||
alert = cleanupPendingConnection(contactConnection: pendingConnection)
|
||||
alert = cleanupPendingConnection(chatModel: chatModel, contactConnection: pendingConnection)
|
||||
pendingConnection = nil
|
||||
}
|
||||
}
|
||||
|
||||
@@ -45,10 +45,10 @@ enum NewChatOption: Identifiable {
|
||||
var id: Self { self }
|
||||
}
|
||||
|
||||
func cleanupPendingConnection(contactConnection: PendingContactConnection?) -> SomeAlert? {
|
||||
func cleanupPendingConnection(chatModel: ChatModel, contactConnection: PendingContactConnection?) -> SomeAlert? {
|
||||
var alert: SomeAlert? = nil
|
||||
|
||||
if !(ChatModel.shared.showingInvitation?.connChatUsed ?? true),
|
||||
if !(chatModel.showingInvitation?.connChatUsed ?? true),
|
||||
let conn = contactConnection {
|
||||
alert = SomeAlert(
|
||||
alert: Alert(
|
||||
@@ -68,7 +68,7 @@ func cleanupPendingConnection(contactConnection: PendingContactConnection?) -> S
|
||||
)
|
||||
}
|
||||
|
||||
ChatModel.shared.showingInvitation = nil
|
||||
chatModel.showingInvitation = nil
|
||||
|
||||
return alert
|
||||
}
|
||||
@@ -97,11 +97,6 @@ struct NewChatView: View {
|
||||
}
|
||||
.pickerStyle(.segmented)
|
||||
.padding()
|
||||
.onChange(of: $selection.wrappedValue) { opt in
|
||||
if opt == NewChatOption.connect {
|
||||
showQRCodeScanner = true
|
||||
}
|
||||
}
|
||||
|
||||
VStack {
|
||||
// it seems there's a bug in iOS 15 if several views in switch (or if-else) statement have different transitions
|
||||
@@ -157,7 +152,7 @@ struct NewChatView: View {
|
||||
}
|
||||
.onDisappear {
|
||||
if !choosingProfile {
|
||||
parentAlert = cleanupPendingConnection(contactConnection: contactConnection)
|
||||
parentAlert = cleanupPendingConnection(chatModel: m, contactConnection: contactConnection)
|
||||
contactConnection = nil
|
||||
}
|
||||
}
|
||||
@@ -246,6 +241,7 @@ private struct InviteView: View {
|
||||
@Binding var choosingProfile: Bool
|
||||
|
||||
@AppStorage(GROUP_DEFAULT_INCOGNITO, store: groupDefaults) private var incognitoDefault = false
|
||||
@State private var showSettings: Bool = false
|
||||
|
||||
var body: some View {
|
||||
List {
|
||||
@@ -697,7 +693,6 @@ struct ScannerInView: View {
|
||||
.frame(maxWidth: .infinity, maxHeight: .infinity)
|
||||
.foregroundColor(Color.clear)
|
||||
switch cameraAuthorizationStatus {
|
||||
case .authorized, nil: EmptyView()
|
||||
case .restricted: Text("Camera not available")
|
||||
case .denied: Label("Enable camera access", systemImage: "camera")
|
||||
default: Label("Tap to scan", systemImage: "qrcode")
|
||||
@@ -717,26 +712,21 @@ struct ScannerInView: View {
|
||||
.disabled(cameraAuthorizationStatus == .restricted)
|
||||
}
|
||||
}
|
||||
.task {
|
||||
.onAppear {
|
||||
let status = AVCaptureDevice.authorizationStatus(for: .video)
|
||||
cameraAuthorizationStatus = status
|
||||
if showQRCodeScanner {
|
||||
switch status {
|
||||
case .notDetermined: await askCameraAuthorizationAsync()
|
||||
case .notDetermined: askCameraAuthorization()
|
||||
case .restricted: showQRCodeScanner = false
|
||||
case .denied: showQRCodeScanner = false
|
||||
case .authorized: ()
|
||||
@unknown default: await askCameraAuthorizationAsync()
|
||||
@unknown default: askCameraAuthorization()
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func askCameraAuthorizationAsync() async {
|
||||
await AVCaptureDevice.requestAccess(for: .video)
|
||||
cameraAuthorizationStatus = AVCaptureDevice.authorizationStatus(for: .video)
|
||||
}
|
||||
|
||||
func askCameraAuthorization(_ cb: (() -> Void)? = nil) {
|
||||
AVCaptureDevice.requestAccess(for: .video) { allowed in
|
||||
cameraAuthorizationStatus = AVCaptureDevice.authorizationStatus(for: .video)
|
||||
|
||||
@@ -49,34 +49,34 @@ struct QRCode: View {
|
||||
ZStack {
|
||||
if let image = image {
|
||||
qrCodeImage(image)
|
||||
GeometryReader { geo in
|
||||
ZStack {
|
||||
if withLogo {
|
||||
let w = geo.size.width
|
||||
Image("icon-light")
|
||||
.resizable()
|
||||
.scaledToFit()
|
||||
.frame(width: w * 0.16, height: w * 0.16)
|
||||
.frame(width: w * 0.165, height: w * 0.165)
|
||||
.background(.white)
|
||||
.clipShape(Circle())
|
||||
}
|
||||
}
|
||||
GeometryReader { geo in
|
||||
ZStack {
|
||||
if withLogo {
|
||||
let w = geo.size.width
|
||||
Image("icon-light")
|
||||
.resizable()
|
||||
.scaledToFit()
|
||||
.frame(width: w * 0.16, height: w * 0.16)
|
||||
.frame(width: w * 0.165, height: w * 0.165)
|
||||
.background(.white)
|
||||
.clipShape(Circle())
|
||||
}
|
||||
.onAppear {
|
||||
makeScreenshotFunc = {
|
||||
let size = CGSizeMake(1024 / UIScreen.main.scale, 1024 / UIScreen.main.scale)
|
||||
showShareSheet(items: [makeScreenshot(geo.frame(in: .local).origin, size)])
|
||||
onShare?()
|
||||
}
|
||||
}
|
||||
.frame(width: geo.size.width, height: geo.size.height)
|
||||
}
|
||||
} else {
|
||||
Color.clear.aspectRatio(1, contentMode: .fit)
|
||||
.onAppear {
|
||||
makeScreenshotFunc = {
|
||||
let size = CGSizeMake(1024 / UIScreen.main.scale, 1024 / UIScreen.main.scale)
|
||||
showShareSheet(items: [makeScreenshot(geo.frame(in: .local).origin, size)])
|
||||
onShare?()
|
||||
}
|
||||
}
|
||||
.frame(width: geo.size.width, height: geo.size.height)
|
||||
}
|
||||
}
|
||||
.onTapGesture(perform: makeScreenshotFunc)
|
||||
.task { image = await generateImage(uri, tintColor: tintColor) }
|
||||
.onAppear {
|
||||
image = image ?? generateImage(uri, tintColor: tintColor)
|
||||
}
|
||||
.frame(maxWidth: .infinity, maxHeight: .infinity)
|
||||
}
|
||||
}
|
||||
@@ -89,7 +89,7 @@ private func qrCodeImage(_ image: UIImage) -> some View {
|
||||
.textSelection(.enabled)
|
||||
}
|
||||
|
||||
private func generateImage(_ uri: String, tintColor: UIColor) async -> UIImage? {
|
||||
private func generateImage(_ uri: String, tintColor: UIColor) -> UIImage? {
|
||||
let context = CIContext()
|
||||
let filter = CIFilter.qrCodeGenerator()
|
||||
filter.message = Data(uri.utf8)
|
||||
|
||||
@@ -467,39 +467,6 @@ private let versionDescriptions: [VersionDescription] = [
|
||||
)
|
||||
]
|
||||
),
|
||||
VersionDescription(
|
||||
version: "v6.1",
|
||||
post: URL(string: "https://simplex.chat/blog/20241014-simplex-network-v6-1-security-review-better-calls-user-experience.html"),
|
||||
features: [
|
||||
FeatureDescription(
|
||||
icon: "checkmark.shield",
|
||||
title: "Better security ✅",
|
||||
description: "SimpleX protocols reviewed by Trail of Bits."
|
||||
),
|
||||
FeatureDescription(
|
||||
icon: "video",
|
||||
title: "Better calls",
|
||||
description: "Switch audio and video during the call."
|
||||
),
|
||||
FeatureDescription(
|
||||
icon: "bolt",
|
||||
title: "Better notifications",
|
||||
description: "Improved delivery, reduced traffic usage.\nMore improvements are coming soon!"
|
||||
),
|
||||
FeatureDescription(
|
||||
icon: nil,
|
||||
title: "Better user experience",
|
||||
description: nil,
|
||||
subfeatures: [
|
||||
("link", "Switch chat profile for 1-time invitations."),
|
||||
("message", "Customizable message shape."),
|
||||
("calendar", "Better message dates."),
|
||||
("arrowshape.turn.up.right", "Forward up to 20 messages at once."),
|
||||
("flag", "Delete or moderate up to 200 messages.")
|
||||
]
|
||||
),
|
||||
]
|
||||
),
|
||||
]
|
||||
|
||||
private let lastVersion = versionDescriptions.last!.version
|
||||
|
||||
@@ -14,6 +14,7 @@ struct ConnectDesktopView: View {
|
||||
@EnvironmentObject var m: ChatModel
|
||||
@EnvironmentObject var theme: AppTheme
|
||||
@Environment(\.dismiss) var dismiss: DismissAction
|
||||
var viaSettings = false
|
||||
@AppStorage(DEFAULT_DEVICE_NAME_FOR_REMOTE_ACCESS) private var deviceName = UIDevice.current.name
|
||||
@AppStorage(DEFAULT_CONFIRM_REMOTE_SESSIONS) private var confirmRemoteSessions = false
|
||||
@AppStorage(DEFAULT_CONNECT_REMOTE_VIA_MULTICAST) private var connectRemoteViaMulticast = true
|
||||
@@ -56,6 +57,16 @@ struct ConnectDesktopView: View {
|
||||
}
|
||||
|
||||
var body: some View {
|
||||
if viaSettings {
|
||||
viewBody
|
||||
} else {
|
||||
NavigationView {
|
||||
viewBody
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
var viewBody: some View {
|
||||
Group {
|
||||
let discovery = m.remoteCtrlSession?.discovery
|
||||
if discovery == true || (discovery == nil && !showConnectScreen) {
|
||||
|
||||
@@ -196,14 +196,11 @@ struct AdvancedNetworkSettings: View {
|
||||
if developerTools {
|
||||
Section {
|
||||
Picker("Transport isolation", selection: $netCfg.sessionMode) {
|
||||
let modes = TransportSessionMode.values.contains(netCfg.sessionMode)
|
||||
? TransportSessionMode.values
|
||||
: TransportSessionMode.values + [netCfg.sessionMode]
|
||||
ForEach(modes, id: \.self) { Text($0.text) }
|
||||
ForEach(TransportSessionMode.values, id: \.self) { Text($0.text) }
|
||||
}
|
||||
.frame(height: 36)
|
||||
} footer: {
|
||||
sessionModeInfo(netCfg.sessionMode)
|
||||
Text(sessionModeInfo(netCfg.sessionMode))
|
||||
.foregroundColor(theme.colors.secondary)
|
||||
}
|
||||
}
|
||||
@@ -356,13 +353,10 @@ struct AdvancedNetworkSettings: View {
|
||||
}
|
||||
}
|
||||
|
||||
private func sessionModeInfo(_ mode: TransportSessionMode) -> Text {
|
||||
let userMode = Text("A separate TCP connection will be used **for each chat profile you have in the app**.")
|
||||
return switch mode {
|
||||
case .user: userMode
|
||||
case .session: userMode + Text("\n") + Text("New SOCKS credentials will be used every time you start the app.")
|
||||
case .server: userMode + Text("\n") + Text("New SOCKS credentials will be used for each server.")
|
||||
case .entity: Text("A separate TCP connection will be used **for each contact and group member**.\n**Please note**: if you have many connections, your battery and traffic consumption can be substantially higher and some connections may fail.")
|
||||
private func sessionModeInfo(_ mode: TransportSessionMode) -> LocalizedStringKey {
|
||||
switch mode {
|
||||
case .user: return "A separate TCP connection will be used **for each chat profile you have in the app**."
|
||||
case .entity: return "A separate TCP connection will be used **for each contact and group member**.\n**Please note**: if you have many connections, your battery and traffic consumption can be substantially higher and some connections may fail."
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -257,18 +257,23 @@ let networkProxyDefault: CodableDefault<NetworkProxy> = CodableDefault(defaults:
|
||||
|
||||
struct SettingsView: View {
|
||||
@Environment(\.colorScheme) var colorScheme
|
||||
@Environment(\.dismiss) var dismiss
|
||||
@EnvironmentObject var chatModel: ChatModel
|
||||
@EnvironmentObject var sceneDelegate: SceneDelegate
|
||||
@EnvironmentObject var theme: AppTheme
|
||||
@Binding var showSettings: Bool
|
||||
@State private var showProgress: Bool = false
|
||||
|
||||
var body: some View {
|
||||
ZStack {
|
||||
settingsView()
|
||||
NavigationView {
|
||||
settingsView()
|
||||
}
|
||||
if showProgress {
|
||||
progressView()
|
||||
}
|
||||
if let la = chatModel.laRequest {
|
||||
LocalAuthView(authRequest: la)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -342,7 +347,7 @@ struct SettingsView: View {
|
||||
Section(header: Text("Help").foregroundColor(theme.colors.secondary)) {
|
||||
if let user = user {
|
||||
NavigationLink {
|
||||
ChatHelp(dismissSettingsSheet: dismiss)
|
||||
ChatHelp(showSettings: $showSettings)
|
||||
.navigationTitle("Welcome \(user.displayName)!")
|
||||
.modifier(ThemedBackground())
|
||||
.frame(maxHeight: .infinity, alignment: .top)
|
||||
@@ -367,7 +372,7 @@ struct SettingsView: View {
|
||||
}
|
||||
settingsRow("number", color: theme.colors.secondary) {
|
||||
Button("Send questions and ideas") {
|
||||
dismiss()
|
||||
showSettings = false
|
||||
DispatchQueue.main.async {
|
||||
UIApplication.shared.open(simplexTeamURL)
|
||||
}
|
||||
@@ -424,7 +429,7 @@ struct SettingsView: View {
|
||||
|
||||
private func chatDatabaseRow() -> some View {
|
||||
NavigationLink {
|
||||
DatabaseView(dismissSettingsSheet: dismiss, chatItemTTL: chatModel.chatItemTTL)
|
||||
DatabaseView(showSettings: $showSettings, chatItemTTL: chatModel.chatItemTTL)
|
||||
.navigationTitle("Your chat database")
|
||||
.modifier(ThemedBackground(grouped: true))
|
||||
} label: {
|
||||
@@ -520,7 +525,9 @@ struct SettingsView_Previews: PreviewProvider {
|
||||
static var previews: some View {
|
||||
let chatModel = ChatModel()
|
||||
chatModel.currentUser = User.sampleData
|
||||
return SettingsView()
|
||||
@State var showSettings = false
|
||||
|
||||
return SettingsView(showSettings: $showSettings)
|
||||
.environmentObject(chatModel)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -925,10 +925,6 @@
|
||||
<target>Кода за достъп до приложение се заменя с код за самоунищожение.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="App session" xml:space="preserve">
|
||||
<source>App session</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="App version" xml:space="preserve">
|
||||
<source>App version</source>
|
||||
<target>Версия на приложението</target>
|
||||
@@ -1059,19 +1055,11 @@
|
||||
<target>Лош хеш на съобщението</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Better calls" xml:space="preserve">
|
||||
<source>Better calls</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Better groups" xml:space="preserve">
|
||||
<source>Better groups</source>
|
||||
<target>По-добри групи</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Better message dates." xml:space="preserve">
|
||||
<source>Better message dates.</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Better messages" xml:space="preserve">
|
||||
<source>Better messages</source>
|
||||
<target>По-добри съобщения</target>
|
||||
@@ -1081,18 +1069,6 @@
|
||||
<source>Better networking</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Better notifications" xml:space="preserve">
|
||||
<source>Better notifications</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Better security ✅" xml:space="preserve">
|
||||
<source>Better security ✅</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Better user experience" xml:space="preserve">
|
||||
<source>Better user experience</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Black" xml:space="preserve">
|
||||
<source>Black</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
@@ -1366,11 +1342,6 @@
|
||||
<source>Chat preferences were changed.</source>
|
||||
<note>alert message</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Chat profile" xml:space="preserve">
|
||||
<source>Chat profile</source>
|
||||
<target>Потребителски профил</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Chat theme" xml:space="preserve">
|
||||
<source>Chat theme</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
@@ -1873,10 +1844,6 @@ This is your own one-time link!</source>
|
||||
<target>Персонализирано време</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Customizable message shape." xml:space="preserve">
|
||||
<source>Customizable message shape.</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Customize theme" xml:space="preserve">
|
||||
<source>Customize theme</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
@@ -2166,10 +2133,6 @@ This is your own one-time link!</source>
|
||||
<target>Изтрий старата база данни?</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Delete or moderate up to 200 messages." xml:space="preserve">
|
||||
<source>Delete or moderate up to 200 messages.</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Delete pending connection?" xml:space="preserve">
|
||||
<source>Delete pending connection?</source>
|
||||
<target>Изтрий предстоящата връзка?</target>
|
||||
@@ -3252,10 +3215,6 @@ This is your own one-time link!</source>
|
||||
<source>Forward messages without files?</source>
|
||||
<note>alert message</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Forward up to 20 messages at once." xml:space="preserve">
|
||||
<source>Forward up to 20 messages at once.</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Forwarded" xml:space="preserve">
|
||||
<source>Forwarded</source>
|
||||
<target>Препратено</target>
|
||||
@@ -3633,11 +3592,6 @@ Error: %2$@</source>
|
||||
<target>Импортиране на архив</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Improved delivery, reduced traffic usage. More improvements are coming soon!" xml:space="preserve">
|
||||
<source>Improved delivery, reduced traffic usage.
|
||||
More improvements are coming soon!</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Improved message delivery" xml:space="preserve">
|
||||
<source>Improved message delivery</source>
|
||||
<target>Подобрена доставка на съобщения</target>
|
||||
@@ -4403,14 +4357,6 @@ This is your link for group %@!</source>
|
||||
<target>Нов kод за достъп</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="New SOCKS credentials will be used every time you start the app." xml:space="preserve">
|
||||
<source>New SOCKS credentials will be used every time you start the app.</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="New SOCKS credentials will be used for each server." xml:space="preserve">
|
||||
<source>New SOCKS credentials will be used for each server.</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="New chat" xml:space="preserve">
|
||||
<source>New chat</source>
|
||||
<target>Нов чат</target>
|
||||
@@ -4527,14 +4473,6 @@ This is your link for group %@!</source>
|
||||
<target>Няма мрежова връзка</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="No permission to record speech" xml:space="preserve">
|
||||
<source>No permission to record speech</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="No permission to record video" xml:space="preserve">
|
||||
<source>No permission to record video</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="No permission to record voice message" xml:space="preserve">
|
||||
<source>No permission to record voice message</source>
|
||||
<target>Няма разрешение за запис на гласово съобщение</target>
|
||||
@@ -5938,10 +5876,6 @@ Enable in *Network & servers* settings.</source>
|
||||
<source>Sent via proxy</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Server" xml:space="preserve">
|
||||
<source>Server</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Server address" xml:space="preserve">
|
||||
<source>Server address</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
@@ -6225,10 +6159,6 @@ Enable in *Network & servers* settings.</source>
|
||||
<target>Еднократна покана за SimpleX</target>
|
||||
<note>simplex link type</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="SimpleX protocols reviewed by Trail of Bits." xml:space="preserve">
|
||||
<source>SimpleX protocols reviewed by Trail of Bits.</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Simplified incognito mode" xml:space="preserve">
|
||||
<source>Simplified incognito mode</source>
|
||||
<target>Опростен режим инкогнито</target>
|
||||
@@ -6393,14 +6323,6 @@ Enable in *Network & servers* settings.</source>
|
||||
<target>Подкрепете SimpleX Chat</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Switch audio and video during the call." xml:space="preserve">
|
||||
<source>Switch audio and video during the call.</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Switch chat profile for 1-time invitations." xml:space="preserve">
|
||||
<source>Switch chat profile for 1-time invitations.</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="System" xml:space="preserve">
|
||||
<source>System</source>
|
||||
<target>Системен</target>
|
||||
@@ -6754,14 +6676,6 @@ You will be prompted to complete authentication before this feature is enabled.<
|
||||
Ще бъдете подканени да извършите идентификация, преди тази функция да бъде активирана.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="To record speech please grant permission to use Microphone." xml:space="preserve">
|
||||
<source>To record speech please grant permission to use Microphone.</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="To record video please grant permission to use Camera." xml:space="preserve">
|
||||
<source>To record video please grant permission to use Camera.</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="To record voice message please grant permission to use Microphone." xml:space="preserve">
|
||||
<source>To record voice message please grant permission to use Microphone.</source>
|
||||
<target>За да запишете гласово съобщение, моля, дайте разрешение за използване на микрофон.</target>
|
||||
@@ -7086,6 +7000,11 @@ To connect, please ask your contact to create another connection link and check
|
||||
<source>Use the app with one hand.</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="User profile" xml:space="preserve">
|
||||
<source>User profile</source>
|
||||
<target>Потребителски профил</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="User selection" xml:space="preserve">
|
||||
<source>User selection</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
|
||||
@@ -898,10 +898,6 @@
|
||||
<target>Přístupový kód aplikace je nahrazen sebedestrukčním přístupovým heslem.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="App session" xml:space="preserve">
|
||||
<source>App session</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="App version" xml:space="preserve">
|
||||
<source>App version</source>
|
||||
<target>Verze aplikace</target>
|
||||
@@ -1028,18 +1024,10 @@
|
||||
<target>Špatný hash zprávy</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Better calls" xml:space="preserve">
|
||||
<source>Better calls</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Better groups" xml:space="preserve">
|
||||
<source>Better groups</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Better message dates." xml:space="preserve">
|
||||
<source>Better message dates.</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Better messages" xml:space="preserve">
|
||||
<source>Better messages</source>
|
||||
<target>Lepší zprávy</target>
|
||||
@@ -1049,18 +1037,6 @@
|
||||
<source>Better networking</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Better notifications" xml:space="preserve">
|
||||
<source>Better notifications</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Better security ✅" xml:space="preserve">
|
||||
<source>Better security ✅</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Better user experience" xml:space="preserve">
|
||||
<source>Better user experience</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Black" xml:space="preserve">
|
||||
<source>Black</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
@@ -1322,11 +1298,6 @@
|
||||
<source>Chat preferences were changed.</source>
|
||||
<note>alert message</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Chat profile" xml:space="preserve">
|
||||
<source>Chat profile</source>
|
||||
<target>Profil uživatele</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Chat theme" xml:space="preserve">
|
||||
<source>Chat theme</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
@@ -1803,10 +1774,6 @@ This is your own one-time link!</source>
|
||||
<target>Vlastní čas</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Customizable message shape." xml:space="preserve">
|
||||
<source>Customizable message shape.</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Customize theme" xml:space="preserve">
|
||||
<source>Customize theme</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
@@ -2093,10 +2060,6 @@ This is your own one-time link!</source>
|
||||
<target>Smazat starou databázi?</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Delete or moderate up to 200 messages." xml:space="preserve">
|
||||
<source>Delete or moderate up to 200 messages.</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Delete pending connection?" xml:space="preserve">
|
||||
<source>Delete pending connection?</source>
|
||||
<target>Smazat čekající připojení?</target>
|
||||
@@ -3144,10 +3107,6 @@ This is your own one-time link!</source>
|
||||
<source>Forward messages without files?</source>
|
||||
<note>alert message</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Forward up to 20 messages at once." xml:space="preserve">
|
||||
<source>Forward up to 20 messages at once.</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Forwarded" xml:space="preserve">
|
||||
<source>Forwarded</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
@@ -3514,11 +3473,6 @@ Error: %2$@</source>
|
||||
<source>Importing archive</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Improved delivery, reduced traffic usage. More improvements are coming soon!" xml:space="preserve">
|
||||
<source>Improved delivery, reduced traffic usage.
|
||||
More improvements are coming soon!</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Improved message delivery" xml:space="preserve">
|
||||
<source>Improved message delivery</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
@@ -4247,14 +4201,6 @@ This is your link for group %@!</source>
|
||||
<target>Nové heslo</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="New SOCKS credentials will be used every time you start the app." xml:space="preserve">
|
||||
<source>New SOCKS credentials will be used every time you start the app.</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="New SOCKS credentials will be used for each server." xml:space="preserve">
|
||||
<source>New SOCKS credentials will be used for each server.</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="New chat" xml:space="preserve">
|
||||
<source>New chat</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
@@ -4369,14 +4315,6 @@ This is your link for group %@!</source>
|
||||
<source>No network connection</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="No permission to record speech" xml:space="preserve">
|
||||
<source>No permission to record speech</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="No permission to record video" xml:space="preserve">
|
||||
<source>No permission to record video</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="No permission to record voice message" xml:space="preserve">
|
||||
<source>No permission to record voice message</source>
|
||||
<target>Nemáte oprávnění nahrávat hlasové zprávy</target>
|
||||
@@ -5740,10 +5678,6 @@ Enable in *Network & servers* settings.</source>
|
||||
<source>Sent via proxy</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Server" xml:space="preserve">
|
||||
<source>Server</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Server address" xml:space="preserve">
|
||||
<source>Server address</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
@@ -6020,10 +5954,6 @@ Enable in *Network & servers* settings.</source>
|
||||
<target>Jednorázová pozvánka SimpleX</target>
|
||||
<note>simplex link type</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="SimpleX protocols reviewed by Trail of Bits." xml:space="preserve">
|
||||
<source>SimpleX protocols reviewed by Trail of Bits.</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Simplified incognito mode" xml:space="preserve">
|
||||
<source>Simplified incognito mode</source>
|
||||
<target>Zjednodušený inkognito režim</target>
|
||||
@@ -6184,14 +6114,6 @@ Enable in *Network & servers* settings.</source>
|
||||
<target>Podpořte SimpleX Chat</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Switch audio and video during the call." xml:space="preserve">
|
||||
<source>Switch audio and video during the call.</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Switch chat profile for 1-time invitations." xml:space="preserve">
|
||||
<source>Switch chat profile for 1-time invitations.</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="System" xml:space="preserve">
|
||||
<source>System</source>
|
||||
<target>Systém</target>
|
||||
@@ -6533,14 +6455,6 @@ You will be prompted to complete authentication before this feature is enabled.<
|
||||
Před zapnutím této funkce budete vyzváni k dokončení ověření.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="To record speech please grant permission to use Microphone." xml:space="preserve">
|
||||
<source>To record speech please grant permission to use Microphone.</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="To record video please grant permission to use Camera." xml:space="preserve">
|
||||
<source>To record video please grant permission to use Camera.</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="To record voice message please grant permission to use Microphone." xml:space="preserve">
|
||||
<source>To record voice message please grant permission to use Microphone.</source>
|
||||
<target>Chcete-li nahrávat hlasové zprávy, udělte povolení k použití mikrofonu.</target>
|
||||
@@ -6851,6 +6765,11 @@ Chcete-li se připojit, požádejte svůj kontakt o vytvoření dalšího odkazu
|
||||
<source>Use the app with one hand.</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="User profile" xml:space="preserve">
|
||||
<source>User profile</source>
|
||||
<target>Profil uživatele</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="User selection" xml:space="preserve">
|
||||
<source>User selection</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
|
||||
@@ -945,11 +945,6 @@
|
||||
<target>App-Zugangscode wurde durch den Selbstzerstörungs-Zugangscode ersetzt.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="App session" xml:space="preserve">
|
||||
<source>App session</source>
|
||||
<target>App-Sitzung</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="App version" xml:space="preserve">
|
||||
<source>App version</source>
|
||||
<target>App Version</target>
|
||||
@@ -1085,19 +1080,11 @@
|
||||
<target>Ungültiger Nachrichten-Hash</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Better calls" xml:space="preserve">
|
||||
<source>Better calls</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Better groups" xml:space="preserve">
|
||||
<source>Better groups</source>
|
||||
<target>Bessere Gruppen</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Better message dates." xml:space="preserve">
|
||||
<source>Better message dates.</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Better messages" xml:space="preserve">
|
||||
<source>Better messages</source>
|
||||
<target>Verbesserungen bei Nachrichten</target>
|
||||
@@ -1108,18 +1095,6 @@
|
||||
<target>Kontrollieren Sie Ihr Netzwerk</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Better notifications" xml:space="preserve">
|
||||
<source>Better notifications</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Better security ✅" xml:space="preserve">
|
||||
<source>Better security ✅</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Better user experience" xml:space="preserve">
|
||||
<source>Better user experience</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Black" xml:space="preserve">
|
||||
<source>Black</source>
|
||||
<target>Schwarz</target>
|
||||
@@ -1406,11 +1381,6 @@
|
||||
<target>Die Chat-Präferenzen wurden geändert.</target>
|
||||
<note>alert message</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Chat profile" xml:space="preserve">
|
||||
<source>Chat profile</source>
|
||||
<target>Benutzerprofil</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Chat theme" xml:space="preserve">
|
||||
<source>Chat theme</source>
|
||||
<target>Chat-Design</target>
|
||||
@@ -1812,7 +1782,7 @@ Das ist Ihr eigener Einmal-Link!</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="Corner" xml:space="preserve">
|
||||
<source>Corner</source>
|
||||
<target>Abrundung Ecken</target>
|
||||
<target>Ecken-Abrundung</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Correct name to %@?" xml:space="preserve">
|
||||
@@ -1940,10 +1910,6 @@ Das ist Ihr eigener Einmal-Link!</target>
|
||||
<target>Zeit anpassen</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Customizable message shape." xml:space="preserve">
|
||||
<source>Customizable message shape.</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Customize theme" xml:space="preserve">
|
||||
<source>Customize theme</source>
|
||||
<target>Design anpassen</target>
|
||||
@@ -2238,10 +2204,6 @@ Das ist Ihr eigener Einmal-Link!</target>
|
||||
<target>Alte Datenbank löschen?</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Delete or moderate up to 200 messages." xml:space="preserve">
|
||||
<source>Delete or moderate up to 200 messages.</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Delete pending connection?" xml:space="preserve">
|
||||
<source>Delete pending connection?</source>
|
||||
<target>Ausstehende Verbindung löschen?</target>
|
||||
@@ -3365,10 +3327,6 @@ Das ist Ihr eigener Einmal-Link!</target>
|
||||
<target>Nachrichten ohne Dateien weiterleiten?</target>
|
||||
<note>alert message</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Forward up to 20 messages at once." xml:space="preserve">
|
||||
<source>Forward up to 20 messages at once.</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Forwarded" xml:space="preserve">
|
||||
<source>Forwarded</source>
|
||||
<target>Weitergeleitet</target>
|
||||
@@ -3758,11 +3716,6 @@ Fehler: %2$@</target>
|
||||
<target>Archiv wird importiert</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Improved delivery, reduced traffic usage. More improvements are coming soon!" xml:space="preserve">
|
||||
<source>Improved delivery, reduced traffic usage.
|
||||
More improvements are coming soon!</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Improved message delivery" xml:space="preserve">
|
||||
<source>Improved message delivery</source>
|
||||
<target>Verbesserte Zustellung von Nachrichten</target>
|
||||
@@ -4548,16 +4501,6 @@ Das ist Ihr Link für die Gruppe %@!</target>
|
||||
<target>Neuer Zugangscode</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="New SOCKS credentials will be used every time you start the app." xml:space="preserve">
|
||||
<source>New SOCKS credentials will be used every time you start the app.</source>
|
||||
<target>Jedes Mal wenn Sie die App starten, werden neue SOCKS-Anmeldeinformationen genutzt</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="New SOCKS credentials will be used for each server." xml:space="preserve">
|
||||
<source>New SOCKS credentials will be used for each server.</source>
|
||||
<target>Für jeden Server werden neue SOCKS-Anmeldeinformationen genutzt</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="New chat" xml:space="preserve">
|
||||
<source>New chat</source>
|
||||
<target>Neuer Chat</target>
|
||||
@@ -4678,16 +4621,6 @@ Das ist Ihr Link für die Gruppe %@!</target>
|
||||
<target>Keine Netzwerkverbindung</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="No permission to record speech" xml:space="preserve">
|
||||
<source>No permission to record speech</source>
|
||||
<target>Keine Genehmigung für Sprach-Aufnahmen</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="No permission to record video" xml:space="preserve">
|
||||
<source>No permission to record video</source>
|
||||
<target>Keine Genehmigung für Video-Aufnahmen</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="No permission to record voice message" xml:space="preserve">
|
||||
<source>No permission to record voice message</source>
|
||||
<target>Keine Berechtigung für das Aufnehmen von Sprachnachrichten</target>
|
||||
@@ -6156,11 +6089,6 @@ Aktivieren Sie es in den *Netzwerk & Server* Einstellungen.</target>
|
||||
<target>Über einen Proxy gesendet</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Server" xml:space="preserve">
|
||||
<source>Server</source>
|
||||
<target>Server</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Server address" xml:space="preserve">
|
||||
<source>Server address</source>
|
||||
<target>Server-Adresse</target>
|
||||
@@ -6461,10 +6389,6 @@ Aktivieren Sie es in den *Netzwerk & Server* Einstellungen.</target>
|
||||
<target>SimpleX-Einmal-Einladung</target>
|
||||
<note>simplex link type</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="SimpleX protocols reviewed by Trail of Bits." xml:space="preserve">
|
||||
<source>SimpleX protocols reviewed by Trail of Bits.</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Simplified incognito mode" xml:space="preserve">
|
||||
<source>Simplified incognito mode</source>
|
||||
<target>Vereinfachter Inkognito-Modus</target>
|
||||
@@ -6640,14 +6564,6 @@ Aktivieren Sie es in den *Netzwerk & Server* Einstellungen.</target>
|
||||
<target>Unterstützung von SimpleX Chat</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Switch audio and video during the call." xml:space="preserve">
|
||||
<source>Switch audio and video during the call.</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Switch chat profile for 1-time invitations." xml:space="preserve">
|
||||
<source>Switch chat profile for 1-time invitations.</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="System" xml:space="preserve">
|
||||
<source>System</source>
|
||||
<target>System</target>
|
||||
@@ -7012,16 +6928,6 @@ You will be prompted to complete authentication before this feature is enabled.<
|
||||
Sie werden aufgefordert, die Authentifizierung abzuschließen, bevor diese Funktion aktiviert wird.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="To record speech please grant permission to use Microphone." xml:space="preserve">
|
||||
<source>To record speech please grant permission to use Microphone.</source>
|
||||
<target>Bitte erteilen Sie für Sprach-Aufnahmen die Genehmigung das Mikrofon zu nutzen.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="To record video please grant permission to use Camera." xml:space="preserve">
|
||||
<source>To record video please grant permission to use Camera.</source>
|
||||
<target>Bitte erteilen Sie für Video-Aufnahmen die Genehmigung die Kamera zu nutzen.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="To record voice message please grant permission to use Microphone." xml:space="preserve">
|
||||
<source>To record voice message please grant permission to use Microphone.</source>
|
||||
<target>Bitte erlauben Sie die Nutzung des Mikrofons, um Sprachnachrichten aufnehmen zu können.</target>
|
||||
@@ -7359,6 +7265,11 @@ Bitten Sie Ihren Kontakt darum einen weiteren Verbindungs-Link zu erzeugen, um s
|
||||
<target>Die App mit einer Hand bedienen.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="User profile" xml:space="preserve">
|
||||
<source>User profile</source>
|
||||
<target>Benutzerprofil</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="User selection" xml:space="preserve">
|
||||
<source>User selection</source>
|
||||
<target>Benutzer-Auswahl</target>
|
||||
@@ -8490,7 +8401,7 @@ Verbindungsanfrage wiederholen?</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="expired" xml:space="preserve">
|
||||
<source>expired</source>
|
||||
<target>Abgelaufen</target>
|
||||
<target>abgelaufen</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="forwarded" xml:space="preserve">
|
||||
@@ -8722,7 +8633,7 @@ Verbindungsanfrage wiederholen?</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="other" xml:space="preserve">
|
||||
<source>other</source>
|
||||
<target>Andere</target>
|
||||
<target>andere</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="other errors" xml:space="preserve">
|
||||
|
||||
@@ -4200,7 +4200,7 @@ SimpleX servers cannot see your profile.</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="## In reply to" xml:space="preserve" approved="no">
|
||||
<source>## In reply to</source>
|
||||
<target state="translated">## Ως απάντηση σε</target>
|
||||
<target state="translated">## Ως απαντηση σε</target>
|
||||
<note>copied message info</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="%@ (current)" xml:space="preserve" approved="no">
|
||||
|
||||
@@ -945,11 +945,6 @@
|
||||
<target>App passcode is replaced with self-destruct passcode.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="App session" xml:space="preserve">
|
||||
<source>App session</source>
|
||||
<target>App session</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="App version" xml:space="preserve">
|
||||
<source>App version</source>
|
||||
<target>App version</target>
|
||||
@@ -1085,21 +1080,11 @@
|
||||
<target>Bad message hash</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Better calls" xml:space="preserve">
|
||||
<source>Better calls</source>
|
||||
<target>Better calls</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Better groups" xml:space="preserve">
|
||||
<source>Better groups</source>
|
||||
<target>Better groups</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Better message dates." xml:space="preserve">
|
||||
<source>Better message dates.</source>
|
||||
<target>Better message dates.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Better messages" xml:space="preserve">
|
||||
<source>Better messages</source>
|
||||
<target>Better messages</target>
|
||||
@@ -1110,21 +1095,6 @@
|
||||
<target>Better networking</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Better notifications" xml:space="preserve">
|
||||
<source>Better notifications</source>
|
||||
<target>Better notifications</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Better security ✅" xml:space="preserve">
|
||||
<source>Better security ✅</source>
|
||||
<target>Better security ✅</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Better user experience" xml:space="preserve">
|
||||
<source>Better user experience</source>
|
||||
<target>Better user experience</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Black" xml:space="preserve">
|
||||
<source>Black</source>
|
||||
<target>Black</target>
|
||||
@@ -1411,11 +1381,6 @@
|
||||
<target>Chat preferences were changed.</target>
|
||||
<note>alert message</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Chat profile" xml:space="preserve">
|
||||
<source>Chat profile</source>
|
||||
<target>Chat profile</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Chat theme" xml:space="preserve">
|
||||
<source>Chat theme</source>
|
||||
<target>Chat theme</target>
|
||||
@@ -1945,11 +1910,6 @@ This is your own one-time link!</target>
|
||||
<target>Custom time</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Customizable message shape." xml:space="preserve">
|
||||
<source>Customizable message shape.</source>
|
||||
<target>Customizable message shape.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Customize theme" xml:space="preserve">
|
||||
<source>Customize theme</source>
|
||||
<target>Customize theme</target>
|
||||
@@ -2244,11 +2204,6 @@ This is your own one-time link!</target>
|
||||
<target>Delete old database?</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Delete or moderate up to 200 messages." xml:space="preserve">
|
||||
<source>Delete or moderate up to 200 messages.</source>
|
||||
<target>Delete or moderate up to 200 messages.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Delete pending connection?" xml:space="preserve">
|
||||
<source>Delete pending connection?</source>
|
||||
<target>Delete pending connection?</target>
|
||||
@@ -3372,11 +3327,6 @@ This is your own one-time link!</target>
|
||||
<target>Forward messages without files?</target>
|
||||
<note>alert message</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Forward up to 20 messages at once." xml:space="preserve">
|
||||
<source>Forward up to 20 messages at once.</source>
|
||||
<target>Forward up to 20 messages at once.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Forwarded" xml:space="preserve">
|
||||
<source>Forwarded</source>
|
||||
<target>Forwarded</target>
|
||||
@@ -3766,13 +3716,6 @@ Error: %2$@</target>
|
||||
<target>Importing archive</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Improved delivery, reduced traffic usage. More improvements are coming soon!" xml:space="preserve">
|
||||
<source>Improved delivery, reduced traffic usage.
|
||||
More improvements are coming soon!</source>
|
||||
<target>Improved delivery, reduced traffic usage.
|
||||
More improvements are coming soon!</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Improved message delivery" xml:space="preserve">
|
||||
<source>Improved message delivery</source>
|
||||
<target>Improved message delivery</target>
|
||||
@@ -4558,16 +4501,6 @@ This is your link for group %@!</target>
|
||||
<target>New Passcode</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="New SOCKS credentials will be used every time you start the app." xml:space="preserve">
|
||||
<source>New SOCKS credentials will be used every time you start the app.</source>
|
||||
<target>New SOCKS credentials will be used every time you start the app.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="New SOCKS credentials will be used for each server." xml:space="preserve">
|
||||
<source>New SOCKS credentials will be used for each server.</source>
|
||||
<target>New SOCKS credentials will be used for each server.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="New chat" xml:space="preserve">
|
||||
<source>New chat</source>
|
||||
<target>New chat</target>
|
||||
@@ -4688,16 +4621,6 @@ This is your link for group %@!</target>
|
||||
<target>No network connection</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="No permission to record speech" xml:space="preserve">
|
||||
<source>No permission to record speech</source>
|
||||
<target>No permission to record speech</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="No permission to record video" xml:space="preserve">
|
||||
<source>No permission to record video</source>
|
||||
<target>No permission to record video</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="No permission to record voice message" xml:space="preserve">
|
||||
<source>No permission to record voice message</source>
|
||||
<target>No permission to record voice message</target>
|
||||
@@ -6166,11 +6089,6 @@ Enable in *Network & servers* settings.</target>
|
||||
<target>Sent via proxy</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Server" xml:space="preserve">
|
||||
<source>Server</source>
|
||||
<target>Server</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Server address" xml:space="preserve">
|
||||
<source>Server address</source>
|
||||
<target>Server address</target>
|
||||
@@ -6471,11 +6389,6 @@ Enable in *Network & servers* settings.</target>
|
||||
<target>SimpleX one-time invitation</target>
|
||||
<note>simplex link type</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="SimpleX protocols reviewed by Trail of Bits." xml:space="preserve">
|
||||
<source>SimpleX protocols reviewed by Trail of Bits.</source>
|
||||
<target>SimpleX protocols reviewed by Trail of Bits.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Simplified incognito mode" xml:space="preserve">
|
||||
<source>Simplified incognito mode</source>
|
||||
<target>Simplified incognito mode</target>
|
||||
@@ -6651,16 +6564,6 @@ Enable in *Network & servers* settings.</target>
|
||||
<target>Support SimpleX Chat</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Switch audio and video during the call." xml:space="preserve">
|
||||
<source>Switch audio and video during the call.</source>
|
||||
<target>Switch audio and video during the call.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Switch chat profile for 1-time invitations." xml:space="preserve">
|
||||
<source>Switch chat profile for 1-time invitations.</source>
|
||||
<target>Switch chat profile for 1-time invitations.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="System" xml:space="preserve">
|
||||
<source>System</source>
|
||||
<target>System</target>
|
||||
@@ -7025,16 +6928,6 @@ You will be prompted to complete authentication before this feature is enabled.<
|
||||
You will be prompted to complete authentication before this feature is enabled.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="To record speech please grant permission to use Microphone." xml:space="preserve">
|
||||
<source>To record speech please grant permission to use Microphone.</source>
|
||||
<target>To record speech please grant permission to use Microphone.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="To record video please grant permission to use Camera." xml:space="preserve">
|
||||
<source>To record video please grant permission to use Camera.</source>
|
||||
<target>To record video please grant permission to use Camera.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="To record voice message please grant permission to use Microphone." xml:space="preserve">
|
||||
<source>To record voice message please grant permission to use Microphone.</source>
|
||||
<target>To record voice message please grant permission to use Microphone.</target>
|
||||
@@ -7372,6 +7265,11 @@ To connect, please ask your contact to create another connection link and check
|
||||
<target>Use the app with one hand.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="User profile" xml:space="preserve">
|
||||
<source>User profile</source>
|
||||
<target>User profile</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="User selection" xml:space="preserve">
|
||||
<source>User selection</source>
|
||||
<target>User selection</target>
|
||||
|
||||
@@ -945,11 +945,6 @@
|
||||
<target>El código de acceso será reemplazado por código de autodestrucción.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="App session" xml:space="preserve">
|
||||
<source>App session</source>
|
||||
<target>Sesión de aplicación</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="App version" xml:space="preserve">
|
||||
<source>App version</source>
|
||||
<target>Versión de la aplicación</target>
|
||||
@@ -1085,19 +1080,11 @@
|
||||
<target>Hash de mensaje incorrecto</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Better calls" xml:space="preserve">
|
||||
<source>Better calls</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Better groups" xml:space="preserve">
|
||||
<source>Better groups</source>
|
||||
<target>Grupos mejorados</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Better message dates." xml:space="preserve">
|
||||
<source>Better message dates.</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Better messages" xml:space="preserve">
|
||||
<source>Better messages</source>
|
||||
<target>Mensajes mejorados</target>
|
||||
@@ -1108,18 +1095,6 @@
|
||||
<target>Uso de red mejorado</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Better notifications" xml:space="preserve">
|
||||
<source>Better notifications</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Better security ✅" xml:space="preserve">
|
||||
<source>Better security ✅</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Better user experience" xml:space="preserve">
|
||||
<source>Better user experience</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Black" xml:space="preserve">
|
||||
<source>Black</source>
|
||||
<target>Negro</target>
|
||||
@@ -1406,11 +1381,6 @@
|
||||
<target>Las preferencias del chat han sido modificadas.</target>
|
||||
<note>alert message</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Chat profile" xml:space="preserve">
|
||||
<source>Chat profile</source>
|
||||
<target>Perfil de usuario</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Chat theme" xml:space="preserve">
|
||||
<source>Chat theme</source>
|
||||
<target>Tema de chat</target>
|
||||
@@ -1563,7 +1533,7 @@
|
||||
</trans-unit>
|
||||
<trans-unit id="Confirm that you remember database passphrase to migrate it." xml:space="preserve">
|
||||
<source>Confirm that you remember database passphrase to migrate it.</source>
|
||||
<target>Para migrar la base de datos confirma que recuerdas la frase de contraseña.</target>
|
||||
<target>Para migrar confirma que recuerdas la frase de contraseña de la base de datos.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Confirm upload" xml:space="preserve">
|
||||
@@ -1940,10 +1910,6 @@ This is your own one-time link!</source>
|
||||
<target>Tiempo personalizado</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Customizable message shape." xml:space="preserve">
|
||||
<source>Customizable message shape.</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Customize theme" xml:space="preserve">
|
||||
<source>Customize theme</source>
|
||||
<target>Personalizar tema</target>
|
||||
@@ -2238,10 +2204,6 @@ This is your own one-time link!</source>
|
||||
<target>¿Eliminar base de datos antigua?</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Delete or moderate up to 200 messages." xml:space="preserve">
|
||||
<source>Delete or moderate up to 200 messages.</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Delete pending connection?" xml:space="preserve">
|
||||
<source>Delete pending connection?</source>
|
||||
<target>¿Eliminar conexión pendiente?</target>
|
||||
@@ -3365,10 +3327,6 @@ This is your own one-time link!</source>
|
||||
<target>¿Reenviar mensajes sin los archivos?</target>
|
||||
<note>alert message</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Forward up to 20 messages at once." xml:space="preserve">
|
||||
<source>Forward up to 20 messages at once.</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Forwarded" xml:space="preserve">
|
||||
<source>Forwarded</source>
|
||||
<target>Reenviado</target>
|
||||
@@ -3758,11 +3716,6 @@ Error: %2$@</target>
|
||||
<target>Importando archivo</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Improved delivery, reduced traffic usage. More improvements are coming soon!" xml:space="preserve">
|
||||
<source>Improved delivery, reduced traffic usage.
|
||||
More improvements are coming soon!</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Improved message delivery" xml:space="preserve">
|
||||
<source>Improved message delivery</source>
|
||||
<target>Entrega de mensajes mejorada</target>
|
||||
@@ -4165,7 +4118,7 @@ This is your link for group %@!</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="Local profile data only" xml:space="preserve">
|
||||
<source>Local profile data only</source>
|
||||
<target>Eliminar sólo el perfil</target>
|
||||
<target>Sólo datos del perfil local</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Lock after" xml:space="preserve">
|
||||
@@ -4548,16 +4501,6 @@ This is your link for group %@!</source>
|
||||
<target>Código Nuevo</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="New SOCKS credentials will be used every time you start the app." xml:space="preserve">
|
||||
<source>New SOCKS credentials will be used every time you start the app.</source>
|
||||
<target>Se usarán credenciales SOCKS nuevas cada vez que inicies la aplicación.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="New SOCKS credentials will be used for each server." xml:space="preserve">
|
||||
<source>New SOCKS credentials will be used for each server.</source>
|
||||
<target>Se usarán credenciales SOCKS nuevas por cada servidor.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="New chat" xml:space="preserve">
|
||||
<source>New chat</source>
|
||||
<target>Nuevo chat</target>
|
||||
@@ -4678,16 +4621,6 @@ This is your link for group %@!</source>
|
||||
<target>Sin conexión de red</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="No permission to record speech" xml:space="preserve">
|
||||
<source>No permission to record speech</source>
|
||||
<target>Sin permiso para grabación de voz</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="No permission to record video" xml:space="preserve">
|
||||
<source>No permission to record video</source>
|
||||
<target>Sin permiso para grabación de vídeo</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="No permission to record voice message" xml:space="preserve">
|
||||
<source>No permission to record voice message</source>
|
||||
<target>Sin permiso para grabar mensajes de voz</target>
|
||||
@@ -5139,7 +5072,7 @@ Error: %@</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="Possibly, certificate fingerprint in server address is incorrect" xml:space="preserve">
|
||||
<source>Possibly, certificate fingerprint in server address is incorrect</source>
|
||||
<target>Posiblemente la huella del certificado en la dirección del servidor es incorrecta</target>
|
||||
<target>Posiblemente la huella digital del certificado en la dirección del servidor es incorrecta</target>
|
||||
<note>server test error</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Preserve the last message draft, with attachments." xml:space="preserve">
|
||||
@@ -5209,7 +5142,7 @@ Error: %@</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="Profile and server connections" xml:space="preserve">
|
||||
<source>Profile and server connections</source>
|
||||
<target>Eliminar perfil y conexiones</target>
|
||||
<target>Datos del perfil y conexiones</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Profile image" xml:space="preserve">
|
||||
@@ -6156,11 +6089,6 @@ Actívalo en ajustes de *Servidores y Redes*.</target>
|
||||
<target>Mediante proxy</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Server" xml:space="preserve">
|
||||
<source>Server</source>
|
||||
<target>Servidor</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Server address" xml:space="preserve">
|
||||
<source>Server address</source>
|
||||
<target>Dirección del servidor</target>
|
||||
@@ -6188,7 +6116,7 @@ Actívalo en ajustes de *Servidores y Redes*.</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="Server test failed!" xml:space="preserve">
|
||||
<source>Server test failed!</source>
|
||||
<target>¡Prueba no superada!</target>
|
||||
<target>¡Error en prueba del servidor!</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Server type" xml:space="preserve">
|
||||
@@ -6461,10 +6389,6 @@ Actívalo en ajustes de *Servidores y Redes*.</target>
|
||||
<target>Invitación SimpleX de un uso</target>
|
||||
<note>simplex link type</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="SimpleX protocols reviewed by Trail of Bits." xml:space="preserve">
|
||||
<source>SimpleX protocols reviewed by Trail of Bits.</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Simplified incognito mode" xml:space="preserve">
|
||||
<source>Simplified incognito mode</source>
|
||||
<target>Modo incógnito simplificado</target>
|
||||
@@ -6640,14 +6564,6 @@ Actívalo en ajustes de *Servidores y Redes*.</target>
|
||||
<target>Soporte SimpleX Chat</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Switch audio and video during the call." xml:space="preserve">
|
||||
<source>Switch audio and video during the call.</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Switch chat profile for 1-time invitations." xml:space="preserve">
|
||||
<source>Switch chat profile for 1-time invitations.</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="System" xml:space="preserve">
|
||||
<source>System</source>
|
||||
<target>Sistema</target>
|
||||
@@ -6735,7 +6651,7 @@ Actívalo en ajustes de *Servidores y Redes*.</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="Test failed at step %@." xml:space="preserve">
|
||||
<source>Test failed at step %@.</source>
|
||||
<target>Prueba no superada en el paso %@.</target>
|
||||
<target>La prueba ha fallado en el paso %@.</target>
|
||||
<note>server test failure</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Test server" xml:space="preserve">
|
||||
@@ -6750,7 +6666,7 @@ Actívalo en ajustes de *Servidores y Redes*.</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="Tests failed!" xml:space="preserve">
|
||||
<source>Tests failed!</source>
|
||||
<target>¡Pruebas no superadas!</target>
|
||||
<target>¡Pruebas fallidas!</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Thank you for installing SimpleX Chat!" xml:space="preserve">
|
||||
@@ -7012,16 +6928,6 @@ You will be prompted to complete authentication before this feature is enabled.<
|
||||
Se te pedirá que completes la autenticación antes de activar esta función.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="To record speech please grant permission to use Microphone." xml:space="preserve">
|
||||
<source>To record speech please grant permission to use Microphone.</source>
|
||||
<target>Para grabación de voz, por favor concede el permiso para usar el micrófono.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="To record video please grant permission to use Camera." xml:space="preserve">
|
||||
<source>To record video please grant permission to use Camera.</source>
|
||||
<target>Para grabación de vídeo, por favor concede el permiso para usar la cámara.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="To record voice message please grant permission to use Microphone." xml:space="preserve">
|
||||
<source>To record voice message please grant permission to use Microphone.</source>
|
||||
<target>Para grabar el mensaje de voz concede permiso para usar el micrófono.</target>
|
||||
@@ -7359,6 +7265,11 @@ Para conectarte pide a tu contacto que cree otro enlace y comprueba la conexión
|
||||
<target>Usa la aplicación con una sola mano.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="User profile" xml:space="preserve">
|
||||
<source>User profile</source>
|
||||
<target>Perfil de usuario</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="User selection" xml:space="preserve">
|
||||
<source>User selection</source>
|
||||
<target>Selección de usuarios</target>
|
||||
@@ -8782,7 +8693,7 @@ Repeat connection request?</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="removed profile picture" xml:space="preserve">
|
||||
<source>removed profile picture</source>
|
||||
<target>ha eliminado la imagen del perfil</target>
|
||||
<target>imagen de perfil eliminada</target>
|
||||
<note>profile update event chat item</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="removed you" xml:space="preserve">
|
||||
@@ -8846,7 +8757,7 @@ last received msg: %2$@</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="set new profile picture" xml:space="preserve">
|
||||
<source>set new profile picture</source>
|
||||
<target>tiene nueva imagen del perfil</target>
|
||||
<target>nueva imagen de perfil</target>
|
||||
<note>profile update event chat item</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="standard end-to-end encryption" xml:space="preserve">
|
||||
|
||||
@@ -892,10 +892,6 @@
|
||||
<target>Sovelluksen pääsykoodi korvataan itsetuhoutuvalla pääsykoodilla.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="App session" xml:space="preserve">
|
||||
<source>App session</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="App version" xml:space="preserve">
|
||||
<source>App version</source>
|
||||
<target>Sovellusversio</target>
|
||||
@@ -1022,18 +1018,10 @@
|
||||
<target>Virheellinen viestin tarkiste</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Better calls" xml:space="preserve">
|
||||
<source>Better calls</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Better groups" xml:space="preserve">
|
||||
<source>Better groups</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Better message dates." xml:space="preserve">
|
||||
<source>Better message dates.</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Better messages" xml:space="preserve">
|
||||
<source>Better messages</source>
|
||||
<target>Parempia viestejä</target>
|
||||
@@ -1043,18 +1031,6 @@
|
||||
<source>Better networking</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Better notifications" xml:space="preserve">
|
||||
<source>Better notifications</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Better security ✅" xml:space="preserve">
|
||||
<source>Better security ✅</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Better user experience" xml:space="preserve">
|
||||
<source>Better user experience</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Black" xml:space="preserve">
|
||||
<source>Black</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
@@ -1315,11 +1291,6 @@
|
||||
<source>Chat preferences were changed.</source>
|
||||
<note>alert message</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Chat profile" xml:space="preserve">
|
||||
<source>Chat profile</source>
|
||||
<target>Käyttäjäprofiili</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Chat theme" xml:space="preserve">
|
||||
<source>Chat theme</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
@@ -1796,10 +1767,6 @@ This is your own one-time link!</source>
|
||||
<target>Mukautettu aika</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Customizable message shape." xml:space="preserve">
|
||||
<source>Customizable message shape.</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Customize theme" xml:space="preserve">
|
||||
<source>Customize theme</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
@@ -2086,10 +2053,6 @@ This is your own one-time link!</source>
|
||||
<target>Poista vanha tietokanta?</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Delete or moderate up to 200 messages." xml:space="preserve">
|
||||
<source>Delete or moderate up to 200 messages.</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Delete pending connection?" xml:space="preserve">
|
||||
<source>Delete pending connection?</source>
|
||||
<target>Poistetaanko odottava yhteys?</target>
|
||||
@@ -3134,10 +3097,6 @@ This is your own one-time link!</source>
|
||||
<source>Forward messages without files?</source>
|
||||
<note>alert message</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Forward up to 20 messages at once." xml:space="preserve">
|
||||
<source>Forward up to 20 messages at once.</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Forwarded" xml:space="preserve">
|
||||
<source>Forwarded</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
@@ -3504,11 +3463,6 @@ Error: %2$@</source>
|
||||
<source>Importing archive</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Improved delivery, reduced traffic usage. More improvements are coming soon!" xml:space="preserve">
|
||||
<source>Improved delivery, reduced traffic usage.
|
||||
More improvements are coming soon!</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Improved message delivery" xml:space="preserve">
|
||||
<source>Improved message delivery</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
@@ -4237,14 +4191,6 @@ This is your link for group %@!</source>
|
||||
<target>Uusi pääsykoodi</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="New SOCKS credentials will be used every time you start the app." xml:space="preserve">
|
||||
<source>New SOCKS credentials will be used every time you start the app.</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="New SOCKS credentials will be used for each server." xml:space="preserve">
|
||||
<source>New SOCKS credentials will be used for each server.</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="New chat" xml:space="preserve">
|
||||
<source>New chat</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
@@ -4358,14 +4304,6 @@ This is your link for group %@!</source>
|
||||
<source>No network connection</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="No permission to record speech" xml:space="preserve">
|
||||
<source>No permission to record speech</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="No permission to record video" xml:space="preserve">
|
||||
<source>No permission to record video</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="No permission to record voice message" xml:space="preserve">
|
||||
<source>No permission to record voice message</source>
|
||||
<target>Ei lupaa ääniviestin tallentamiseen</target>
|
||||
@@ -5727,10 +5665,6 @@ Enable in *Network & servers* settings.</source>
|
||||
<source>Sent via proxy</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Server" xml:space="preserve">
|
||||
<source>Server</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Server address" xml:space="preserve">
|
||||
<source>Server address</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
@@ -6007,10 +5941,6 @@ Enable in *Network & servers* settings.</source>
|
||||
<target>SimpleX-kertakutsu</target>
|
||||
<note>simplex link type</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="SimpleX protocols reviewed by Trail of Bits." xml:space="preserve">
|
||||
<source>SimpleX protocols reviewed by Trail of Bits.</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Simplified incognito mode" xml:space="preserve">
|
||||
<source>Simplified incognito mode</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
@@ -6170,14 +6100,6 @@ Enable in *Network & servers* settings.</source>
|
||||
<target>SimpleX Chat tuki</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Switch audio and video during the call." xml:space="preserve">
|
||||
<source>Switch audio and video during the call.</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Switch chat profile for 1-time invitations." xml:space="preserve">
|
||||
<source>Switch chat profile for 1-time invitations.</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="System" xml:space="preserve">
|
||||
<source>System</source>
|
||||
<target>Järjestelmä</target>
|
||||
@@ -6519,14 +6441,6 @@ You will be prompted to complete authentication before this feature is enabled.<
|
||||
Sinua kehotetaan suorittamaan todennus loppuun, ennen kuin tämä ominaisuus otetaan käyttöön.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="To record speech please grant permission to use Microphone." xml:space="preserve">
|
||||
<source>To record speech please grant permission to use Microphone.</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="To record video please grant permission to use Camera." xml:space="preserve">
|
||||
<source>To record video please grant permission to use Camera.</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="To record voice message please grant permission to use Microphone." xml:space="preserve">
|
||||
<source>To record voice message please grant permission to use Microphone.</source>
|
||||
<target>Jos haluat nauhoittaa ääniviestin, anna lupa käyttää mikrofonia.</target>
|
||||
@@ -6836,6 +6750,11 @@ Jos haluat muodostaa yhteyden, pyydä kontaktiasi luomaan toinen yhteyslinkki ja
|
||||
<source>Use the app with one hand.</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="User profile" xml:space="preserve">
|
||||
<source>User profile</source>
|
||||
<target>Käyttäjäprofiili</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="User selection" xml:space="preserve">
|
||||
<source>User selection</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
|
||||
@@ -939,10 +939,6 @@
|
||||
<target>Le code d'accès de l'application est remplacé par un code d'autodestruction.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="App session" xml:space="preserve">
|
||||
<source>App session</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="App version" xml:space="preserve">
|
||||
<source>App version</source>
|
||||
<target>Version de l'app</target>
|
||||
@@ -1077,19 +1073,11 @@
|
||||
<target>Mauvais hash de message</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Better calls" xml:space="preserve">
|
||||
<source>Better calls</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Better groups" xml:space="preserve">
|
||||
<source>Better groups</source>
|
||||
<target>Des groupes plus performants</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Better message dates." xml:space="preserve">
|
||||
<source>Better message dates.</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Better messages" xml:space="preserve">
|
||||
<source>Better messages</source>
|
||||
<target>Meilleurs messages</target>
|
||||
@@ -1100,18 +1088,6 @@
|
||||
<target>Meilleure gestion de réseau</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Better notifications" xml:space="preserve">
|
||||
<source>Better notifications</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Better security ✅" xml:space="preserve">
|
||||
<source>Better security ✅</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Better user experience" xml:space="preserve">
|
||||
<source>Better user experience</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Black" xml:space="preserve">
|
||||
<source>Black</source>
|
||||
<target>Noir</target>
|
||||
@@ -1397,11 +1373,6 @@
|
||||
<source>Chat preferences were changed.</source>
|
||||
<note>alert message</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Chat profile" xml:space="preserve">
|
||||
<source>Chat profile</source>
|
||||
<target>Profil d'utilisateur</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Chat theme" xml:space="preserve">
|
||||
<source>Chat theme</source>
|
||||
<target>Thème de chat</target>
|
||||
@@ -1930,10 +1901,6 @@ Il s'agit de votre propre lien unique !</target>
|
||||
<target>Délai personnalisé</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Customizable message shape." xml:space="preserve">
|
||||
<source>Customizable message shape.</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Customize theme" xml:space="preserve">
|
||||
<source>Customize theme</source>
|
||||
<target>Personnaliser le thème</target>
|
||||
@@ -2228,10 +2195,6 @@ Il s'agit de votre propre lien unique !</target>
|
||||
<target>Supprimer l'ancienne base de données ?</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Delete or moderate up to 200 messages." xml:space="preserve">
|
||||
<source>Delete or moderate up to 200 messages.</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Delete pending connection?" xml:space="preserve">
|
||||
<source>Delete pending connection?</source>
|
||||
<target>Supprimer la connexion en attente ?</target>
|
||||
@@ -3344,10 +3307,6 @@ Il s'agit de votre propre lien unique !</target>
|
||||
<source>Forward messages without files?</source>
|
||||
<note>alert message</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Forward up to 20 messages at once." xml:space="preserve">
|
||||
<source>Forward up to 20 messages at once.</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Forwarded" xml:space="preserve">
|
||||
<source>Forwarded</source>
|
||||
<target>Transféré</target>
|
||||
@@ -3735,11 +3694,6 @@ Erreur : %2$@</target>
|
||||
<target>Importation de l'archive</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Improved delivery, reduced traffic usage. More improvements are coming soon!" xml:space="preserve">
|
||||
<source>Improved delivery, reduced traffic usage.
|
||||
More improvements are coming soon!</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Improved message delivery" xml:space="preserve">
|
||||
<source>Improved message delivery</source>
|
||||
<target>Amélioration de la transmission des messages</target>
|
||||
@@ -4523,14 +4477,6 @@ Voici votre lien pour le groupe %@ !</target>
|
||||
<target>Nouveau code d'accès</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="New SOCKS credentials will be used every time you start the app." xml:space="preserve">
|
||||
<source>New SOCKS credentials will be used every time you start the app.</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="New SOCKS credentials will be used for each server." xml:space="preserve">
|
||||
<source>New SOCKS credentials will be used for each server.</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="New chat" xml:space="preserve">
|
||||
<source>New chat</source>
|
||||
<target>Nouveau chat</target>
|
||||
@@ -4651,14 +4597,6 @@ Voici votre lien pour le groupe %@ !</target>
|
||||
<target>Pas de connexion au réseau</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="No permission to record speech" xml:space="preserve">
|
||||
<source>No permission to record speech</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="No permission to record video" xml:space="preserve">
|
||||
<source>No permission to record video</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="No permission to record voice message" xml:space="preserve">
|
||||
<source>No permission to record voice message</source>
|
||||
<target>Pas l'autorisation d'enregistrer un message vocal</target>
|
||||
@@ -6116,10 +6054,6 @@ Activez-le dans les paramètres *Réseau et serveurs*.</target>
|
||||
<target>Envoyé via le proxy</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Server" xml:space="preserve">
|
||||
<source>Server</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Server address" xml:space="preserve">
|
||||
<source>Server address</source>
|
||||
<target>Adresse du serveur</target>
|
||||
@@ -6418,10 +6352,6 @@ Activez-le dans les paramètres *Réseau et serveurs*.</target>
|
||||
<target>Invitation unique SimpleX</target>
|
||||
<note>simplex link type</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="SimpleX protocols reviewed by Trail of Bits." xml:space="preserve">
|
||||
<source>SimpleX protocols reviewed by Trail of Bits.</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Simplified incognito mode" xml:space="preserve">
|
||||
<source>Simplified incognito mode</source>
|
||||
<target>Mode incognito simplifié</target>
|
||||
@@ -6596,14 +6526,6 @@ Activez-le dans les paramètres *Réseau et serveurs*.</target>
|
||||
<target>Supporter SimpleX Chat</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Switch audio and video during the call." xml:space="preserve">
|
||||
<source>Switch audio and video during the call.</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Switch chat profile for 1-time invitations." xml:space="preserve">
|
||||
<source>Switch chat profile for 1-time invitations.</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="System" xml:space="preserve">
|
||||
<source>System</source>
|
||||
<target>Système</target>
|
||||
@@ -6966,14 +6888,6 @@ You will be prompted to complete authentication before this feature is enabled.<
|
||||
Vous serez invité à confirmer l'authentification avant que cette fonction ne soit activée.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="To record speech please grant permission to use Microphone." xml:space="preserve">
|
||||
<source>To record speech please grant permission to use Microphone.</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="To record video please grant permission to use Camera." xml:space="preserve">
|
||||
<source>To record video please grant permission to use Camera.</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="To record voice message please grant permission to use Microphone." xml:space="preserve">
|
||||
<source>To record voice message please grant permission to use Microphone.</source>
|
||||
<target>Pour enregistrer un message vocal, veuillez accorder la permission d'utiliser le microphone.</target>
|
||||
@@ -7310,6 +7224,11 @@ Pour vous connecter, veuillez demander à votre contact de créer un autre lien
|
||||
<target>Utiliser l'application d'une main.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="User profile" xml:space="preserve">
|
||||
<source>User profile</source>
|
||||
<target>Profil d'utilisateur</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="User selection" xml:space="preserve">
|
||||
<source>User selection</source>
|
||||
<target>Sélection de l'utilisateur</target>
|
||||
|
||||
@@ -119,12 +119,12 @@
|
||||
</trans-unit>
|
||||
<trans-unit id="%@ is not verified" xml:space="preserve">
|
||||
<source>%@ is not verified</source>
|
||||
<target>%@ nem hitelesített</target>
|
||||
<target>%@ nem ellenőrzött</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="%@ is verified" xml:space="preserve">
|
||||
<source>%@ is verified</source>
|
||||
<target>%@ hitelesítve</target>
|
||||
<target>%@ ellenőrizve</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="%@ uploaded" xml:space="preserve">
|
||||
@@ -354,27 +354,27 @@
|
||||
</trans-unit>
|
||||
<trans-unit id="**Add contact**: to create a new invitation link, or connect via a link you received." xml:space="preserve">
|
||||
<source>**Add contact**: to create a new invitation link, or connect via a link you received.</source>
|
||||
<target>**Ismerős hozzáadása:** új meghívó-hivatkozás létrehozásához, vagy egy kapott hivatkozáson keresztül történő kapcsolódáshoz.</target>
|
||||
<target>**Ismerős hozzáadása**: új meghívó-hivatkozás létrehozásához, vagy egy kapott hivatkozáson keresztül történő kapcsolódáshoz.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="**Add new contact**: to create your one-time QR Code for your contact." xml:space="preserve">
|
||||
<source>**Add new contact**: to create your one-time QR Code or link for your contact.</source>
|
||||
<target>**Új ismerős hozzáadása:** egyszer használható QR-kód vagy hivatkozás létrehozása az ismerőse számára.</target>
|
||||
<target>**Új ismerős hozzáadása**: egyszer használható QR-kód vagy hivatkozás létrehozása az ismerőse számára.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="**Create group**: to create a new group." xml:space="preserve">
|
||||
<source>**Create group**: to create a new group.</source>
|
||||
<target>**Csoport létrehozása:** új csoport létrehozásához.</target>
|
||||
<target>**Csoport létrehozása**: új csoport létrehozásához.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="**More private**: check new messages every 20 minutes. Device token is shared with SimpleX Chat server, but not how many contacts or messages you have." xml:space="preserve">
|
||||
<source>**More private**: check new messages every 20 minutes. Device token is shared with SimpleX Chat server, but not how many contacts or messages you have.</source>
|
||||
<target>**Privátabb:** 20 percenként ellenőrzi az új üzeneteket. Az eszköztoken megosztásra kerül a SimpleX Chat-kiszolgálóval, de az nem, hogy hány ismerőse vagy üzenete van.</target>
|
||||
<target>**Privátabb**: 20 percenként ellenőrzi az új üzeneteket. Az eszköztoken megosztásra kerül a SimpleX Chat-kiszolgálóval, de az nem, hogy hány ismerőse vagy üzenete van.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="**Most private**: do not use SimpleX Chat notifications server, check messages periodically in the background (depends on how often you use the app)." xml:space="preserve">
|
||||
<source>**Most private**: do not use SimpleX Chat notifications server, check messages periodically in the background (depends on how often you use the app).</source>
|
||||
<target>**Legprivátabb:** ne használja a SimpleX Chat értesítési kiszolgálót, rendszeresen ellenőrizze az üzeneteket a háttérben (attól függően, hogy milyen gyakran használja az alkalmazást).</target>
|
||||
<target>**Legprivátabb**: ne használja a SimpleX Chat értesítési kiszolgálót, rendszeresen ellenőrizze az üzeneteket a háttérben (attól függően, hogy milyen gyakran használja az alkalmazást).</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="**Please note**: using the same database on two devices will break the decryption of messages from your connections, as a security protection." xml:space="preserve">
|
||||
@@ -389,7 +389,7 @@
|
||||
</trans-unit>
|
||||
<trans-unit id="**Recommended**: device token and notifications are sent to SimpleX Chat notification server, but not the message content, size or who it is from." xml:space="preserve">
|
||||
<source>**Recommended**: device token and notifications are sent to SimpleX Chat notification server, but not the message content, size or who it is from.</source>
|
||||
<target>**Megjegyzés:** az eszköztoken és az értesítések elküldésre kerülnek a SimpleX Chat értesítési kiszolgálóra, kivéve az üzenet tartalma, mérete vagy az, hogy kitől származik.</target>
|
||||
<target>**Javasolt**: az eszköztoken és az értesítések elküldésre kerülnek a SimpleX Chat értesítési kiszolgálóra, kivéve az üzenet tartalma, mérete vagy az, hogy kitől származik.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="**Warning**: Instant push notifications require passphrase saved in Keychain." xml:space="preserve">
|
||||
@@ -606,7 +606,7 @@
|
||||
</trans-unit>
|
||||
<trans-unit id="Accept incognito" xml:space="preserve">
|
||||
<source>Accept incognito</source>
|
||||
<target>Fogadás inkognitóban</target>
|
||||
<target>Fogadás inkognítóban</target>
|
||||
<note>accept contact request via notification
|
||||
swipe action</note>
|
||||
</trans-unit>
|
||||
@@ -742,7 +742,7 @@
|
||||
</trans-unit>
|
||||
<trans-unit id="All messages will be deleted - this cannot be undone! The messages will be deleted ONLY for you." xml:space="preserve">
|
||||
<source>All messages will be deleted - this cannot be undone! The messages will be deleted ONLY for you.</source>
|
||||
<target>Minden üzenet törlésre kerül - ez a művelet nem vonható vissza! Az üzenetek CSAK az Ön számára törlődnek.</target>
|
||||
<target>Minden üzenet törlésre kerül - ez a művelet nem vonható vissza! Az üzenetek CSAK az ön számára törlődnek.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="All new messages from %@ will be hidden!" xml:space="preserve">
|
||||
@@ -787,7 +787,7 @@
|
||||
</trans-unit>
|
||||
<trans-unit id="Allow disappearing messages only if your contact allows it to you." xml:space="preserve">
|
||||
<source>Allow disappearing messages only if your contact allows it to you.</source>
|
||||
<target>Az eltűnő üzenetek küldése csak abban az esetben van engedélyezve, ha az ismerőse is engedélyezi az Ön számára.</target>
|
||||
<target>Az eltűnő üzenetek küldése csak abban az esetben van engedélyezve, ha az ismerőse is engedélyezi az ön számára.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Allow downgrade" xml:space="preserve">
|
||||
@@ -945,11 +945,6 @@
|
||||
<target>Az alkalmazás jelkód helyettesítésre kerül egy önmegsemmisítő jelkóddal.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="App session" xml:space="preserve">
|
||||
<source>App session</source>
|
||||
<target>Alkalmazás munkamenete</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="App version" xml:space="preserve">
|
||||
<source>App version</source>
|
||||
<target>Alkalmazás verzió</target>
|
||||
@@ -1085,19 +1080,11 @@
|
||||
<target>Hibás az üzenet hasító értéke</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Better calls" xml:space="preserve">
|
||||
<source>Better calls</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Better groups" xml:space="preserve">
|
||||
<source>Better groups</source>
|
||||
<target>Javított csoportok</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Better message dates." xml:space="preserve">
|
||||
<source>Better message dates.</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Better messages" xml:space="preserve">
|
||||
<source>Better messages</source>
|
||||
<target>Jobb üzenetek</target>
|
||||
@@ -1108,18 +1095,6 @@
|
||||
<target>Jobb hálózatkezelés</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Better notifications" xml:space="preserve">
|
||||
<source>Better notifications</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Better security ✅" xml:space="preserve">
|
||||
<source>Better security ✅</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Better user experience" xml:space="preserve">
|
||||
<source>Better user experience</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Black" xml:space="preserve">
|
||||
<source>Black</source>
|
||||
<target>Fekete</target>
|
||||
@@ -1406,11 +1381,6 @@
|
||||
<target>A csevegési beállítások megváltoztak.</target>
|
||||
<note>alert message</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Chat profile" xml:space="preserve">
|
||||
<source>Chat profile</source>
|
||||
<target>Felhasználói profil</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Chat theme" xml:space="preserve">
|
||||
<source>Chat theme</source>
|
||||
<target>Csevegés témája</target>
|
||||
@@ -1605,14 +1575,14 @@
|
||||
<source>Connect to yourself?
|
||||
This is your own SimpleX address!</source>
|
||||
<target>Kapcsolódás saját magához?
|
||||
Ez az Ön SimpleX-címe!</target>
|
||||
Ez az ön SimpleX-címe!</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Connect to yourself? This is your own one-time link!" xml:space="preserve">
|
||||
<source>Connect to yourself?
|
||||
This is your own one-time link!</source>
|
||||
<target>Kapcsolódás saját magához?
|
||||
Ez az Ön egyszer használható hivatkozása!</target>
|
||||
Ez az ön egyszer használható hivatkozása!</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Connect via contact address" xml:space="preserve">
|
||||
@@ -1762,7 +1732,7 @@ Ez az Ön egyszer használható hivatkozása!</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="Contact name" xml:space="preserve">
|
||||
<source>Contact name</source>
|
||||
<target>Csak név</target>
|
||||
<target>Ismerős neve</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Contact preferences" xml:space="preserve">
|
||||
@@ -1782,7 +1752,7 @@ Ez az Ön egyszer használható hivatkozása!</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="Contacts can mark messages for deletion; you will be able to view them." xml:space="preserve">
|
||||
<source>Contacts can mark messages for deletion; you will be able to view them.</source>
|
||||
<target>Az ismerősei törlésre jelölhetnek üzeneteket; Ön majd meg tudja nézni azokat.</target>
|
||||
<target>Az ismerősei törlésre jelölhetnek üzeneteket; ön majd meg tudja nézni azokat.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Continue" xml:space="preserve">
|
||||
@@ -1837,7 +1807,7 @@ Ez az Ön egyszer használható hivatkozása!</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="Create an address to let people connect with you." xml:space="preserve">
|
||||
<source>Create an address to let people connect with you.</source>
|
||||
<target>Cím létrehozása, hogy az emberek kapcsolatba léphessenek Önnel.</target>
|
||||
<target>Cím létrehozása, hogy az emberek kapcsolatba léphessenek önnel.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Create file" xml:space="preserve">
|
||||
@@ -1940,10 +1910,6 @@ Ez az Ön egyszer használható hivatkozása!</target>
|
||||
<target>Személyreszabott idő</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Customizable message shape." xml:space="preserve">
|
||||
<source>Customizable message shape.</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Customize theme" xml:space="preserve">
|
||||
<source>Customize theme</source>
|
||||
<target>Téma személyre szabása</target>
|
||||
@@ -2238,10 +2204,6 @@ Ez az Ön egyszer használható hivatkozása!</target>
|
||||
<target>Régi adatbázis törlése?</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Delete or moderate up to 200 messages." xml:space="preserve">
|
||||
<source>Delete or moderate up to 200 messages.</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Delete pending connection?" xml:space="preserve">
|
||||
<source>Delete pending connection?</source>
|
||||
<target>Függőben lévő ismerőskérelem törlése?</target>
|
||||
@@ -2259,7 +2221,7 @@ Ez az Ön egyszer használható hivatkozása!</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="Delete up to 20 messages at once." xml:space="preserve">
|
||||
<source>Delete up to 20 messages at once.</source>
|
||||
<target>Legfeljebb 20 üzenet egyszerre való törlése.</target>
|
||||
<target>Legfeljebb 20 üzenet törlése egyszerre.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Delete user profile?" xml:space="preserve">
|
||||
@@ -2469,7 +2431,7 @@ Ez az Ön egyszer használható hivatkozása!</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="Do NOT send messages directly, even if your or destination server does not support private routing." xml:space="preserve">
|
||||
<source>Do NOT send messages directly, even if your or destination server does not support private routing.</source>
|
||||
<target>Ne küldjön üzeneteket közvetlenül, még akkor sem, ha az Ön kiszolgálója vagy a célkiszolgáló nem támogatja a privát útválasztást.</target>
|
||||
<target>Ne küldjön üzeneteket közvetlenül, még akkor sem, ha az ön kiszolgálója vagy a célkiszolgáló nem támogatja a privát útválasztást.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Do NOT use SimpleX for emergency calls." xml:space="preserve">
|
||||
@@ -2835,7 +2797,7 @@ Ez az Ön egyszer használható hivatkozása!</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="Error changing to incognito!" xml:space="preserve">
|
||||
<source>Error changing to incognito!</source>
|
||||
<target>Hiba az inkognitóprofilra való váltáskor!</target>
|
||||
<target>Hiba az inkognitó-profilra való váltáskor!</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Error connecting to forwarding server %@. Please try later." xml:space="preserve">
|
||||
@@ -3070,7 +3032,7 @@ Ez az Ön egyszer használható hivatkozása!</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="Error switching profile!" xml:space="preserve">
|
||||
<source>Error switching profile!</source>
|
||||
<target>Hiba a profilváltásakor!</target>
|
||||
<target>Hiba a profil váltásakor!</target>
|
||||
<note>alertTitle</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Error synchronizing connection" xml:space="preserve">
|
||||
@@ -3105,7 +3067,7 @@ Ez az Ön egyszer használható hivatkozása!</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="Error verifying passphrase:" xml:space="preserve">
|
||||
<source>Error verifying passphrase:</source>
|
||||
<target>Hiba a jelmondat hitelesítésekor:</target>
|
||||
<target>Hiba a jelmondat ellenőrzésekor:</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Error: " xml:space="preserve">
|
||||
@@ -3195,7 +3157,7 @@ Ez az Ön egyszer használható hivatkozása!</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="Favorite" xml:space="preserve">
|
||||
<source>Favorite</source>
|
||||
<target>Kedvenc</target>
|
||||
<target>Csillag</target>
|
||||
<note>swipe action</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="File error" xml:space="preserve">
|
||||
@@ -3282,7 +3244,7 @@ Ez az Ön egyszer használható hivatkozása!</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="Filter unread and favorite chats." xml:space="preserve">
|
||||
<source>Filter unread and favorite chats.</source>
|
||||
<target>Olvasatlan és kedvenc csevegésekre való szűrés.</target>
|
||||
<target>Olvasatlan és csillagozott csevegésekre való szűrés.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Finalize migration" xml:space="preserve">
|
||||
@@ -3365,10 +3327,6 @@ Ez az Ön egyszer használható hivatkozása!</target>
|
||||
<target>Üzenetek továbbítása fájlok nélkül?</target>
|
||||
<note>alert message</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Forward up to 20 messages at once." xml:space="preserve">
|
||||
<source>Forward up to 20 messages at once.</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Forwarded" xml:space="preserve">
|
||||
<source>Forwarded</source>
|
||||
<target>Továbbított</target>
|
||||
@@ -3490,7 +3448,7 @@ Hiba: %2$@</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="Group image" xml:space="preserve">
|
||||
<source>Group image</source>
|
||||
<target>Csoport profilképe</target>
|
||||
<target>Csoportkép</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Group invitation" xml:space="preserve">
|
||||
@@ -3590,7 +3548,7 @@ Hiba: %2$@</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="Group will be deleted for you - this cannot be undone!" xml:space="preserve">
|
||||
<source>Group will be deleted for you - this cannot be undone!</source>
|
||||
<target>A csoport törlésre kerül az Ön számára - ez a művelet nem vonható vissza!</target>
|
||||
<target>A csoport törlésre kerül az ön számára - ez a művelet nem vonható vissza!</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Help" xml:space="preserve">
|
||||
@@ -3600,7 +3558,7 @@ Hiba: %2$@</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="Hidden" xml:space="preserve">
|
||||
<source>Hidden</source>
|
||||
<target>Se név, se üzenet</target>
|
||||
<target>Rejtett</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Hidden chat profiles" xml:space="preserve">
|
||||
@@ -3610,12 +3568,12 @@ Hiba: %2$@</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="Hidden profile password" xml:space="preserve">
|
||||
<source>Hidden profile password</source>
|
||||
<target>Rejtett profiljelszó</target>
|
||||
<target>Rejtett profil jelszó</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Hide" xml:space="preserve">
|
||||
<source>Hide</source>
|
||||
<target>Elrejtés</target>
|
||||
<target>Elrejt</target>
|
||||
<note>chat item action</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Hide app screen in the recent apps." xml:space="preserve">
|
||||
@@ -3630,7 +3588,7 @@ Hiba: %2$@</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="Hide:" xml:space="preserve">
|
||||
<source>Hide:</source>
|
||||
<target>Elrejtés:</target>
|
||||
<target>Elrejt:</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="History" xml:space="preserve">
|
||||
@@ -3758,11 +3716,6 @@ Hiba: %2$@</target>
|
||||
<target>Archívum importálása</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Improved delivery, reduced traffic usage. More improvements are coming soon!" xml:space="preserve">
|
||||
<source>Improved delivery, reduced traffic usage.
|
||||
More improvements are coming soon!</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Improved message delivery" xml:space="preserve">
|
||||
<source>Improved message delivery</source>
|
||||
<target>Továbbfejlesztett üzenetkézbesítés</target>
|
||||
@@ -3800,7 +3753,7 @@ More improvements are coming soon!</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="Incognito groups" xml:space="preserve">
|
||||
<source>Incognito groups</source>
|
||||
<target>Inkognitócsoportok</target>
|
||||
<target>Inkognitó csoportok</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Incognito mode" xml:space="preserve">
|
||||
@@ -3972,7 +3925,7 @@ More improvements are coming soon!</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="It can happen when you or your connection used the old database backup." xml:space="preserve">
|
||||
<source>It can happen when you or your connection used the old database backup.</source>
|
||||
<target>Ez akkor fordulhat elő, ha Ön vagy az ismerőse régi adatbázis biztonsági mentést használt.</target>
|
||||
<target>Ez akkor fordulhat elő, ha ön vagy az ismerőse régi adatbázis biztonsági mentést használt.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="It can happen when: 1. The messages expired in the sending client after 2 days or on the server after 30 days. 2. Message decryption failed, because you or your contact used old database backup. 3. The connection was compromised." xml:space="preserve">
|
||||
@@ -4040,7 +3993,7 @@ More improvements are coming soon!</source>
|
||||
<source>Join your group?
|
||||
This is your link for group %@!</source>
|
||||
<target>Csatlakozik a csoportjához?
|
||||
Ez az Ön hivatkozása a(z) %@ csoporthoz!</target>
|
||||
Ez az ön hivatkozása a(z) %@ csoporthoz!</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Joining group" xml:space="preserve">
|
||||
@@ -4075,12 +4028,12 @@ Ez az Ön hivatkozása a(z) %@ csoporthoz!</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="KeyChain error" xml:space="preserve">
|
||||
<source>KeyChain error</source>
|
||||
<target>Kulcstartóhiba</target>
|
||||
<target>Kulcstartó hiba</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Keychain error" xml:space="preserve">
|
||||
<source>Keychain error</source>
|
||||
<target>Kulcstartóhiba</target>
|
||||
<target>Kulcstartó hiba</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="LIVE" xml:space="preserve">
|
||||
@@ -4355,7 +4308,7 @@ Ez az Ön hivatkozása a(z) %@ csoporthoz!</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="Message text" xml:space="preserve">
|
||||
<source>Message text</source>
|
||||
<target>Név és üzenet</target>
|
||||
<target>Üzenet szövege</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Message too large" xml:space="preserve">
|
||||
@@ -4548,16 +4501,6 @@ Ez az Ön hivatkozása a(z) %@ csoporthoz!</target>
|
||||
<target>Új jelkód</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="New SOCKS credentials will be used every time you start the app." xml:space="preserve">
|
||||
<source>New SOCKS credentials will be used every time you start the app.</source>
|
||||
<target>Minden alkalommal, amikor elindítja az alkalmazást, új SOCKS-hitelesítő-adatokat fog használni.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="New SOCKS credentials will be used for each server." xml:space="preserve">
|
||||
<source>New SOCKS credentials will be used for each server.</source>
|
||||
<target>Minden egyes kiszolgálóhoz új SOCKS-hitelesítő-adatok legyenek használva.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="New chat" xml:space="preserve">
|
||||
<source>New chat</source>
|
||||
<target>Új beszélgetés</target>
|
||||
@@ -4678,16 +4621,6 @@ Ez az Ön hivatkozása a(z) %@ csoporthoz!</target>
|
||||
<target>Nincs hálózati kapcsolat</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="No permission to record speech" xml:space="preserve">
|
||||
<source>No permission to record speech</source>
|
||||
<target>Nincs jogosultság megadva a beszéd rögzítéséhez</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="No permission to record video" xml:space="preserve">
|
||||
<source>No permission to record video</source>
|
||||
<target>Nincs jogosultság megadva a videó rögzítéséhez</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="No permission to record voice message" xml:space="preserve">
|
||||
<source>No permission to record voice message</source>
|
||||
<target>Nincs engedély a hangüzenet rögzítésére</target>
|
||||
@@ -4765,7 +4698,7 @@ Ez az Ön hivatkozása a(z) %@ csoporthoz!</target>
|
||||
<trans-unit id="Onion hosts will be **required** for connection. Requires compatible VPN." xml:space="preserve">
|
||||
<source>Onion hosts will be **required** for connection.
|
||||
Requires compatible VPN.</source>
|
||||
<target>Onion-kiszolgálók **szükségesek** a kapcsolódáshoz.
|
||||
<target>Az onion-kiszolgálók **szükségesek** a kapcsolódáshoz.
|
||||
Kompatibilis VPN szükséges.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
@@ -4808,27 +4741,27 @@ VPN engedélyezése szükséges.</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="Only you can add message reactions." xml:space="preserve">
|
||||
<source>Only you can add message reactions.</source>
|
||||
<target>Csak Ön adhat hozzá üzenetreakciókat.</target>
|
||||
<target>Csak ön adhat hozzá üzenetreakciókat.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Only you can irreversibly delete messages (your contact can mark them for deletion). (24 hours)" xml:space="preserve">
|
||||
<source>Only you can irreversibly delete messages (your contact can mark them for deletion). (24 hours)</source>
|
||||
<target>Véglegesen csak Ön törölhet üzeneteket (ismerőse csak törlésre jelölheti meg őket ). (24 óra)</target>
|
||||
<target>Véglegesen csak ön törölhet üzeneteket (ismerőse csak törlésre jelölheti meg őket ). (24 óra)</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Only you can make calls." xml:space="preserve">
|
||||
<source>Only you can make calls.</source>
|
||||
<target>Csak Ön tud hívásokat indítani.</target>
|
||||
<target>Csak ön tud hívásokat indítani.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Only you can send disappearing messages." xml:space="preserve">
|
||||
<source>Only you can send disappearing messages.</source>
|
||||
<target>Csak Ön tud eltűnő üzeneteket küldeni.</target>
|
||||
<target>Csak ön tud eltűnő üzeneteket küldeni.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Only you can send voice messages." xml:space="preserve">
|
||||
<source>Only you can send voice messages.</source>
|
||||
<target>Csak Ön tud hangüzeneteket küldeni.</target>
|
||||
<target>Csak ön tud hangüzeneteket küldeni.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Only your contact can add message reactions." xml:space="preserve">
|
||||
@@ -4838,7 +4771,7 @@ VPN engedélyezése szükséges.</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="Only your contact can irreversibly delete messages (you can mark them for deletion). (24 hours)" xml:space="preserve">
|
||||
<source>Only your contact can irreversibly delete messages (you can mark them for deletion). (24 hours)</source>
|
||||
<target>Csak az ismerőse tudja az üzeneteket véglegesen törölni (Ön csak törlésre jelölheti meg azokat). (24 óra)</target>
|
||||
<target>Csak az ismerőse tudja az üzeneteket véglegesen törölni (ön csak törlésre jelölheti meg azokat). (24 óra)</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Only your contact can make calls." xml:space="preserve">
|
||||
@@ -4990,7 +4923,7 @@ VPN engedélyezése szükséges.</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="Past member %@" xml:space="preserve">
|
||||
<source>Past member %@</source>
|
||||
<target>(Már nem tag) %@</target>
|
||||
<target>%@ (már nem tag)</target>
|
||||
<note>past/unknown group member</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Paste desktop address" xml:space="preserve">
|
||||
@@ -5020,7 +4953,7 @@ VPN engedélyezése szükséges.</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="People can connect to you only via the links you share." xml:space="preserve">
|
||||
<source>People can connect to you only via the links you share.</source>
|
||||
<target>Az emberek csak az Ön által megosztott hivatkozáson keresztül kapcsolódhatnak.</target>
|
||||
<target>Az emberek csak az ön által megosztott hivatkozáson keresztül kapcsolódhatnak.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Periodically" xml:space="preserve">
|
||||
@@ -5184,12 +5117,12 @@ Hiba: %@</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="Private message routing" xml:space="preserve">
|
||||
<source>Private message routing</source>
|
||||
<target>Privát üzenet-útválasztás</target>
|
||||
<target>Privát üzenet útválasztás</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Private message routing 🚀" xml:space="preserve">
|
||||
<source>Private message routing 🚀</source>
|
||||
<target>Privát üzenet-útválasztás 🚀</target>
|
||||
<target>Privát üzenet útválasztás 🚀</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Private notes" xml:space="preserve">
|
||||
@@ -5204,7 +5137,7 @@ Hiba: %@</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="Private routing error" xml:space="preserve">
|
||||
<source>Private routing error</source>
|
||||
<target>Privát útválasztáshiba</target>
|
||||
<target>Privát útválasztási hiba</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Profile and server connections" xml:space="preserve">
|
||||
@@ -5421,7 +5354,7 @@ Engedélyezze a „Beállítások -> Hálózat és kiszolgálók” menüben.
|
||||
</trans-unit>
|
||||
<trans-unit id="Received message" xml:space="preserve">
|
||||
<source>Received message</source>
|
||||
<target>Fogadott üzenetbuborék színe</target>
|
||||
<target>Fogadott üzenet</target>
|
||||
<note>message info title</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Received messages" xml:space="preserve">
|
||||
@@ -5431,7 +5364,7 @@ Engedélyezze a „Beállítások -> Hálózat és kiszolgálók” menüben.
|
||||
</trans-unit>
|
||||
<trans-unit id="Received reply" xml:space="preserve">
|
||||
<source>Received reply</source>
|
||||
<target>Fogadott válaszüzenet-buborék színe</target>
|
||||
<target>Fogadott válasz</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Received total" xml:space="preserve">
|
||||
@@ -6018,12 +5951,12 @@ Engedélyezze a „Beállítások -> Hálózat és kiszolgálók” menüben.
|
||||
</trans-unit>
|
||||
<trans-unit id="Send messages directly when IP address is protected and your or destination server does not support private routing." xml:space="preserve">
|
||||
<source>Send messages directly when IP address is protected and your or destination server does not support private routing.</source>
|
||||
<target>Közvetlen üzenetküldés, ha az IP-cím védett és az Ön kiszolgálója vagy a célkiszolgáló nem támogatja a privát útválasztást.</target>
|
||||
<target>Közvetlen üzenetküldés, ha az IP-cím védett és az ön kiszolgálója vagy a célkiszolgáló nem támogatja a privát útválasztást.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Send messages directly when your or destination server does not support private routing." xml:space="preserve">
|
||||
<source>Send messages directly when your or destination server does not support private routing.</source>
|
||||
<target>Közvetlen üzenetküldés, ha az Ön kiszolgálója vagy a célkiszolgáló nem támogatja a privát útválasztást.</target>
|
||||
<target>Közvetlen üzenetküldés, ha az ön kiszolgálója vagy a célkiszolgáló nem támogatja a privát útválasztást.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Send notifications" xml:space="preserve">
|
||||
@@ -6128,7 +6061,7 @@ Engedélyezze a „Beállítások -> Hálózat és kiszolgálók” menüben.
|
||||
</trans-unit>
|
||||
<trans-unit id="Sent message" xml:space="preserve">
|
||||
<source>Sent message</source>
|
||||
<target>Üzenetbuborék színe</target>
|
||||
<target>Elküldött üzenet</target>
|
||||
<note>message info title</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Sent messages" xml:space="preserve">
|
||||
@@ -6143,7 +6076,7 @@ Engedélyezze a „Beállítások -> Hálózat és kiszolgálók” menüben.
|
||||
</trans-unit>
|
||||
<trans-unit id="Sent reply" xml:space="preserve">
|
||||
<source>Sent reply</source>
|
||||
<target>Válaszüzenet-buborék színe</target>
|
||||
<target>Elküldött válasz</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Sent total" xml:space="preserve">
|
||||
@@ -6156,11 +6089,6 @@ Engedélyezze a „Beállítások -> Hálózat és kiszolgálók” menüben.
|
||||
<target>Proxyn keresztül küldve</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Server" xml:space="preserve">
|
||||
<source>Server</source>
|
||||
<target>Kiszolgáló</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Server address" xml:space="preserve">
|
||||
<source>Server address</source>
|
||||
<target>Kiszolgáló címe</target>
|
||||
@@ -6358,7 +6286,7 @@ Engedélyezze a „Beállítások -> Hálózat és kiszolgálók” menüben.
|
||||
</trans-unit>
|
||||
<trans-unit id="Show last messages" xml:space="preserve">
|
||||
<source>Show last messages</source>
|
||||
<target>Szobák utolsó üzeneteinek megjelenítése a listanézetben</target>
|
||||
<target>Utolsó üzenetek megjelenítése</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Show message status" xml:space="preserve">
|
||||
@@ -6373,7 +6301,7 @@ Engedélyezze a „Beállítások -> Hálózat és kiszolgálók” menüben.
|
||||
</trans-unit>
|
||||
<trans-unit id="Show preview" xml:space="preserve">
|
||||
<source>Show preview</source>
|
||||
<target>Értesítés előnézete</target>
|
||||
<target>Előnézet megjelenítése</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Show → on messages sent via private routing." xml:space="preserve">
|
||||
@@ -6461,13 +6389,9 @@ Engedélyezze a „Beállítások -> Hálózat és kiszolgálók” menüben.
|
||||
<target>Egyszer használható SimpleX-meghívó</target>
|
||||
<note>simplex link type</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="SimpleX protocols reviewed by Trail of Bits." xml:space="preserve">
|
||||
<source>SimpleX protocols reviewed by Trail of Bits.</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Simplified incognito mode" xml:space="preserve">
|
||||
<source>Simplified incognito mode</source>
|
||||
<target>Egyszerűsített inkognitómód</target>
|
||||
<target>Egyszerűsített inkognító mód</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Size" xml:space="preserve">
|
||||
@@ -6640,14 +6564,6 @@ Engedélyezze a „Beállítások -> Hálózat és kiszolgálók” menüben.
|
||||
<target>SimpleX Chat támogatása</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Switch audio and video during the call." xml:space="preserve">
|
||||
<source>Switch audio and video during the call.</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Switch chat profile for 1-time invitations." xml:space="preserve">
|
||||
<source>Switch chat profile for 1-time invitations.</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="System" xml:space="preserve">
|
||||
<source>System</source>
|
||||
<target>Rendszer</target>
|
||||
@@ -6720,7 +6636,7 @@ Engedélyezze a „Beállítások -> Hálózat és kiszolgálók” menüben.
|
||||
</trans-unit>
|
||||
<trans-unit id="Tap to paste link" xml:space="preserve">
|
||||
<source>Tap to paste link</source>
|
||||
<target>Koppintson ide a hivatkozás beillesztéséhez</target>
|
||||
<target>Koppintson a hivatkozás beillesztéséhez</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Tap to scan" xml:space="preserve">
|
||||
@@ -6802,7 +6718,7 @@ Ez valamilyen hiba, vagy sérült kapcsolat esetén fordulhat elő.</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="The connection you accepted will be cancelled!" xml:space="preserve">
|
||||
<source>The connection you accepted will be cancelled!</source>
|
||||
<target>Az Ön által elfogadott kérelem vissza lesz vonva!</target>
|
||||
<target>Az ön által elfogadott kérelem vissza lesz vonva!</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="The contact you shared this link with will NOT be able to connect!" xml:space="preserve">
|
||||
@@ -6947,12 +6863,12 @@ Ez valamilyen hiba, vagy sérült kapcsolat esetén fordulhat elő.</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="This is your own SimpleX address!" xml:space="preserve">
|
||||
<source>This is your own SimpleX address!</source>
|
||||
<target>Ez az Ön SimpleX-címe!</target>
|
||||
<target>Ez az ön SimpleX-címe!</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="This is your own one-time link!" xml:space="preserve">
|
||||
<source>This is your own one-time link!</source>
|
||||
<target>Ez az Ön egyszer használható hivatkozása!</target>
|
||||
<target>Ez az ön egyszer használható hivatkozása!</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="This link was used with another mobile device, please create a new link on the desktop." xml:space="preserve">
|
||||
@@ -7012,16 +6928,6 @@ You will be prompted to complete authentication before this feature is enabled.<
|
||||
A funkció bekapcsolása előtt a rendszer felszólítja a képernyőzár beállítására az eszközén.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="To record speech please grant permission to use Microphone." xml:space="preserve">
|
||||
<source>To record speech please grant permission to use Microphone.</source>
|
||||
<target>A beszéd rögzítéséhez adjon engedélyt a Mikrofon használatára.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="To record video please grant permission to use Camera." xml:space="preserve">
|
||||
<source>To record video please grant permission to use Camera.</source>
|
||||
<target>A videó rögzítéséhez adjon engedélyt a Kamera használatára.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="To record voice message please grant permission to use Microphone." xml:space="preserve">
|
||||
<source>To record voice message please grant permission to use Microphone.</source>
|
||||
<target>Hangüzenet rögzítéséhez adjon engedélyt a mikrofon használathoz.</target>
|
||||
@@ -7039,7 +6945,7 @@ A funkció bekapcsolása előtt a rendszer felszólítja a képernyőzár beáll
|
||||
</trans-unit>
|
||||
<trans-unit id="To verify end-to-end encryption with your contact compare (or scan) the code on your devices." xml:space="preserve">
|
||||
<source>To verify end-to-end encryption with your contact compare (or scan) the code on your devices.</source>
|
||||
<target>A végpontok közötti titkosítás hitelesítéséhez hasonlítsa össze (vagy olvassa be a QR-kódot) az ismerőse eszközén lévő kóddal.</target>
|
||||
<target>A végpontok közötti titkosítás ellenőrzéséhez hasonlítsa össze (vagy olvassa be a QR-kódot) az ismerőse eszközén lévő kóddal.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Toggle chat list:" xml:space="preserve">
|
||||
@@ -7049,7 +6955,7 @@ A funkció bekapcsolása előtt a rendszer felszólítja a képernyőzár beáll
|
||||
</trans-unit>
|
||||
<trans-unit id="Toggle incognito when connecting." xml:space="preserve">
|
||||
<source>Toggle incognito when connecting.</source>
|
||||
<target>Inkognitómód használata kapcsolódáskor.</target>
|
||||
<target>Inkognitómód kapcsolódáskor.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Toolbar opacity" xml:space="preserve">
|
||||
@@ -7134,7 +7040,7 @@ A funkció bekapcsolása előtt a rendszer felszólítja a képernyőzár beáll
|
||||
</trans-unit>
|
||||
<trans-unit id="Unfav." xml:space="preserve">
|
||||
<source>Unfav.</source>
|
||||
<target>Kedvenc megszüntetése</target>
|
||||
<target>Csillagozás megszüntetése</target>
|
||||
<note>swipe action</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Unhide" xml:space="preserve">
|
||||
@@ -7326,7 +7232,7 @@ A kapcsolódáshoz kérje meg az ismerősét, hogy hozzon létre egy másik kapc
|
||||
</trans-unit>
|
||||
<trans-unit id="Use new incognito profile" xml:space="preserve">
|
||||
<source>Use new incognito profile</source>
|
||||
<target>Új inkognitóprofil használata</target>
|
||||
<target>Az új inkognító profil használata</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Use only local notifications?" xml:space="preserve">
|
||||
@@ -7336,7 +7242,7 @@ A kapcsolódáshoz kérje meg az ismerősét, hogy hozzon létre egy másik kapc
|
||||
</trans-unit>
|
||||
<trans-unit id="Use private routing with unknown servers when IP address is not protected." xml:space="preserve">
|
||||
<source>Use private routing with unknown servers when IP address is not protected.</source>
|
||||
<target>Használjon privát útválasztást ismeretlen kiszolgálókkal, ha az IP-cím nem védett.</target>
|
||||
<target>Privát útválasztás használata ismeretlen kiszolgálókkal, ha az IP-cím nem védett.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Use private routing with unknown servers." xml:space="preserve">
|
||||
@@ -7359,6 +7265,11 @@ A kapcsolódáshoz kérje meg az ismerősét, hogy hozzon létre egy másik kapc
|
||||
<target>Használja az alkalmazást egy kézzel.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="User profile" xml:space="preserve">
|
||||
<source>User profile</source>
|
||||
<target>Felhasználói profil</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="User selection" xml:space="preserve">
|
||||
<source>User selection</source>
|
||||
<target>Felhasználó kiválasztása</target>
|
||||
@@ -7376,37 +7287,37 @@ A kapcsolódáshoz kérje meg az ismerősét, hogy hozzon létre egy másik kapc
|
||||
</trans-unit>
|
||||
<trans-unit id="Verify code with desktop" xml:space="preserve">
|
||||
<source>Verify code with desktop</source>
|
||||
<target>Kód hitelesítése a számítógépen</target>
|
||||
<target>Kód ellenőrzése a számítógépen</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Verify connection" xml:space="preserve">
|
||||
<source>Verify connection</source>
|
||||
<target>Kapcsolat hitelesítése</target>
|
||||
<target>Kapcsolat ellenőrzése</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Verify connection security" xml:space="preserve">
|
||||
<source>Verify connection security</source>
|
||||
<target>Biztonságos kapcsolat hitelesítése</target>
|
||||
<target>Kapcsolat biztonságának ellenőrzése</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Verify connections" xml:space="preserve">
|
||||
<source>Verify connections</source>
|
||||
<target>Kapcsolatok hitelesítése</target>
|
||||
<target>Kapcsolatok ellenőrzése</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Verify database passphrase" xml:space="preserve">
|
||||
<source>Verify database passphrase</source>
|
||||
<target>Az adatbázis jelmondatának hitelesítése</target>
|
||||
<target>Az adatbázis jelmondatának ellenőrzése</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Verify passphrase" xml:space="preserve">
|
||||
<source>Verify passphrase</source>
|
||||
<target>Jelmondat hitelesítése</target>
|
||||
<target>Jelmondat ellenőrzése</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Verify security code" xml:space="preserve">
|
||||
<source>Verify security code</source>
|
||||
<target>Biztonsági kód hitelesítése</target>
|
||||
<target>Biztonsági kód ellenőrzése</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Via browser" xml:space="preserve">
|
||||
@@ -7556,12 +7467,12 @@ A kapcsolódáshoz kérje meg az ismerősét, hogy hozzon létre egy másik kapc
|
||||
</trans-unit>
|
||||
<trans-unit id="When people request to connect, you can accept or reject it." xml:space="preserve">
|
||||
<source>When people request to connect, you can accept or reject it.</source>
|
||||
<target>Amikor az emberek kapcsolatot kérnek, Ön elfogadhatja vagy elutasíthatja azokat.</target>
|
||||
<target>Amikor az emberek kapcsolatot kérnek, ön elfogadhatja vagy elutasíthatja azokat.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="When you share an incognito profile with somebody, this profile will be used for the groups they invite you to." xml:space="preserve">
|
||||
<source>When you share an incognito profile with somebody, this profile will be used for the groups they invite you to.</source>
|
||||
<target>Inkognitóprofil megosztása esetén a rendszer azt a profilt fogja használni azokhoz a csoportokhoz, amelyekbe meghívást kapott.</target>
|
||||
<target>Inkognitó-profil megosztása esetén a rendszer azt a profilt fogja használni azokhoz a csoportokhoz, amelyekbe meghívást kapott.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="WiFi" xml:space="preserve">
|
||||
@@ -7723,7 +7634,7 @@ Csatlakozáskérés megismétlése?</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="You can enable later via Settings" xml:space="preserve">
|
||||
<source>You can enable later via Settings</source>
|
||||
<target>Később engedélyezheti a „Beállításokban”</target>
|
||||
<target>Később engedélyezheti a Beállításokban</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="You can enable them later via app Privacy & Security settings." xml:space="preserve">
|
||||
@@ -7768,12 +7679,12 @@ Csatlakozáskérés megismétlése?</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="You can share this address with your contacts to let them connect with **%@**." xml:space="preserve">
|
||||
<source>You can share this address with your contacts to let them connect with **%@**.</source>
|
||||
<target>Megoszthatja ezt a címet az ismerőseivel, hogy kapcsolatba léphessenek Önnel a(z) **%@** nevű profilján keresztül.</target>
|
||||
<target>Megoszthatja ezt a címet az ismerőseivel, hogy kapcsolatba léphessenek önnel a(z) **%@** nevű profilján keresztül.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="You can share your address as a link or QR code - anybody can connect to you." xml:space="preserve">
|
||||
<source>You can share your address as a link or QR code - anybody can connect to you.</source>
|
||||
<target>Megoszthatja a címét egy hivatkozásként vagy QR-kódként – így bárki kapcsolódhat Önhöz.</target>
|
||||
<target>Megoszthatja a címét egy hivatkozásként vagy QR-kódként – így bárki kapcsolódhat önhöz.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="You can start chat via app Settings / Database or by restarting the app" xml:space="preserve">
|
||||
@@ -7813,7 +7724,7 @@ Csatlakozáskérés megismétlése?</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="You could not be verified; please try again." xml:space="preserve">
|
||||
<source>You could not be verified; please try again.</source>
|
||||
<target>Nem sikerült hitelesíteni; próbálja meg újra.</target>
|
||||
<target>Nem sikerült ellenőrizni; próbálja meg újra.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="You have already requested connection via this address!" xml:space="preserve">
|
||||
@@ -7930,12 +7841,12 @@ Kapcsolatkérés megismétlése?</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="You're trying to invite contact with whom you've shared an incognito profile to the group in which you're using your main profile" xml:space="preserve">
|
||||
<source>You're trying to invite contact with whom you've shared an incognito profile to the group in which you're using your main profile</source>
|
||||
<target>Egy olyan ismerősét próbálja meghívni, akivel inkognitóprofilt osztott meg abban a csoportban, amelyben a saját fő profilja van használatban</target>
|
||||
<target>Egy olyan ismerőst próbál meghívni, akivel inkognító profilt osztott meg abban a csoportban, amelyben saját fő profilja van használatban</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="You're using an incognito profile for this group - to prevent sharing your main profile inviting contacts is not allowed" xml:space="preserve">
|
||||
<source>You're using an incognito profile for this group - to prevent sharing your main profile inviting contacts is not allowed</source>
|
||||
<target>Inkognitóprofilt használ ehhez a csoporthoz - fő profilja megosztásának elkerülése érdekében a meghívók küldése le van tiltva</target>
|
||||
<target>Inkognító profilt használ ehhez a csoporthoz - fő profilja megosztásának elkerülése érdekében a meghívók küldése le van tiltva</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Your %@ servers" xml:space="preserve">
|
||||
@@ -8230,7 +8141,7 @@ Kapcsolatkérés megismétlése?</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="changed your role to %@" xml:space="preserve">
|
||||
<source>changed your role to %@</source>
|
||||
<target>megváltoztatta az Ön szerepkörét erre: %@</target>
|
||||
<target>megváltoztatta a szerepkörét erre: %@</target>
|
||||
<note>rcv group event chat item</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="changing address for %@…" xml:space="preserve">
|
||||
@@ -8265,7 +8176,7 @@ Kapcsolatkérés megismétlése?</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="connected directly" xml:space="preserve">
|
||||
<source>connected directly</source>
|
||||
<target>közvetlenül kapcsolódott</target>
|
||||
<target>közvetlenül kapcsolódva</target>
|
||||
<note>rcv group event chat item</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="connecting" xml:space="preserve">
|
||||
@@ -8425,7 +8336,7 @@ Kapcsolatkérés megismétlése?</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="enabled for you" xml:space="preserve">
|
||||
<source>enabled for you</source>
|
||||
<target>engedélyezve az Ön számára</target>
|
||||
<target>engedélyezve az ön számára</target>
|
||||
<note>enabled status</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="encryption agreed" xml:space="preserve">
|
||||
@@ -8530,7 +8441,7 @@ Kapcsolatkérés megismétlése?</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="incognito via contact address link" xml:space="preserve">
|
||||
<source>incognito via contact address link</source>
|
||||
<target>inkognitó a kapcsolattartási címhivatkozáson keresztül</target>
|
||||
<target>inkognitó a kapcsolattartási hivatkozáson keresztül</target>
|
||||
<note>chat list item description</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="incognito via group link" xml:space="preserve">
|
||||
@@ -8590,7 +8501,7 @@ Kapcsolatkérés megismétlése?</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="invited via your group link" xml:space="preserve">
|
||||
<source>invited via your group link</source>
|
||||
<target>meghíva az Ön csoporthivatkozásán keresztül</target>
|
||||
<target>meghíva az ön csoporthivatkozásán keresztül</target>
|
||||
<note>rcv group event chat item</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="italic" xml:space="preserve">
|
||||
@@ -8675,7 +8586,7 @@ Kapcsolatkérés megismétlése?</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="new message" xml:space="preserve">
|
||||
<source>new message</source>
|
||||
<target>Rejtett üzenet</target>
|
||||
<target>új üzenet</target>
|
||||
<note>notification</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="no" xml:space="preserve">
|
||||
@@ -8787,7 +8698,7 @@ Kapcsolatkérés megismétlése?</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="removed you" xml:space="preserve">
|
||||
<source>removed you</source>
|
||||
<target>eltávolította Önt</target>
|
||||
<target>eltávolította önt</target>
|
||||
<note>rcv group event chat item</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="saved" xml:space="preserve">
|
||||
@@ -8961,7 +8872,7 @@ utoljára fogadott üzenet: %2$@</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="wants to connect to you!" xml:space="preserve">
|
||||
<source>wants to connect to you!</source>
|
||||
<target>kapcsolatba akar lépni Önnel!</target>
|
||||
<target>kapcsolatba akar lépni önnel!</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="weeks" xml:space="preserve">
|
||||
@@ -8981,7 +8892,7 @@ utoljára fogadott üzenet: %2$@</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="you" xml:space="preserve">
|
||||
<source>you</source>
|
||||
<target>Ön</target>
|
||||
<target>ön</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="you are invited to group" xml:space="preserve">
|
||||
@@ -8996,7 +8907,7 @@ utoljára fogadott üzenet: %2$@</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="you blocked %@" xml:space="preserve">
|
||||
<source>you blocked %@</source>
|
||||
<target>Ön letiltotta őt: %@</target>
|
||||
<target>ön letiltotta őt: %@</target>
|
||||
<note>snd group event chat item</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="you changed address" xml:space="preserve">
|
||||
@@ -9011,22 +8922,22 @@ utoljára fogadott üzenet: %2$@</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="you changed role for yourself to %@" xml:space="preserve">
|
||||
<source>you changed role for yourself to %@</source>
|
||||
<target>saját szerepköre megváltozott erre: %@</target>
|
||||
<target>saját szerepkör megváltoztatva erre: %@</target>
|
||||
<note>snd group event chat item</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="you changed role of %@ to %@" xml:space="preserve">
|
||||
<source>you changed role of %1$@ to %2$@</source>
|
||||
<target>Ön megváltoztatta %1$@ szerepkörét erre: %@</target>
|
||||
<target>%1$@ szerepkörét megváltoztatta erre: %@</target>
|
||||
<note>snd group event chat item</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="you left" xml:space="preserve">
|
||||
<source>you left</source>
|
||||
<target>Ön elhagyta a csoportot</target>
|
||||
<target>elhagyta a csoportot</target>
|
||||
<note>snd group event chat item</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="you removed %@" xml:space="preserve">
|
||||
<source>you removed %@</source>
|
||||
<target>Ön eltávolította őt: %@</target>
|
||||
<target>eltávolította őt: %@</target>
|
||||
<note>snd group event chat item</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="you shared one-time link" xml:space="preserve">
|
||||
@@ -9041,12 +8952,12 @@ utoljára fogadott üzenet: %2$@</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="you unblocked %@" xml:space="preserve">
|
||||
<source>you unblocked %@</source>
|
||||
<target>Ön feloldotta %@ letiltását</target>
|
||||
<target>ön feloldotta %@ letiltását</target>
|
||||
<note>snd group event chat item</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="you: " xml:space="preserve">
|
||||
<source>you: </source>
|
||||
<target>Ön: </target>
|
||||
<target>ön: </target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="~strike~" xml:space="preserve">
|
||||
@@ -9239,7 +9150,7 @@ utoljára fogadott üzenet: %2$@</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="Keychain error" xml:space="preserve">
|
||||
<source>Keychain error</source>
|
||||
<target>Kulcstartóhiba</target>
|
||||
<target>Kulcstartó hiba</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Large file!" xml:space="preserve">
|
||||
|
||||
@@ -945,11 +945,6 @@
|
||||
<target>Il codice di accesso dell'app viene sostituito da un codice di autodistruzione.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="App session" xml:space="preserve">
|
||||
<source>App session</source>
|
||||
<target>Sessione dell'app</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="App version" xml:space="preserve">
|
||||
<source>App version</source>
|
||||
<target>Versione dell'app</target>
|
||||
@@ -1085,19 +1080,11 @@
|
||||
<target>Hash del messaggio errato</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Better calls" xml:space="preserve">
|
||||
<source>Better calls</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Better groups" xml:space="preserve">
|
||||
<source>Better groups</source>
|
||||
<target>Gruppi migliorati</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Better message dates." xml:space="preserve">
|
||||
<source>Better message dates.</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Better messages" xml:space="preserve">
|
||||
<source>Better messages</source>
|
||||
<target>Messaggi migliorati</target>
|
||||
@@ -1108,18 +1095,6 @@
|
||||
<target>Rete migliorata</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Better notifications" xml:space="preserve">
|
||||
<source>Better notifications</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Better security ✅" xml:space="preserve">
|
||||
<source>Better security ✅</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Better user experience" xml:space="preserve">
|
||||
<source>Better user experience</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Black" xml:space="preserve">
|
||||
<source>Black</source>
|
||||
<target>Nero</target>
|
||||
@@ -1406,11 +1381,6 @@
|
||||
<target>Le preferenze della chat sono state cambiate.</target>
|
||||
<note>alert message</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Chat profile" xml:space="preserve">
|
||||
<source>Chat profile</source>
|
||||
<target>Profilo utente</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Chat theme" xml:space="preserve">
|
||||
<source>Chat theme</source>
|
||||
<target>Tema della chat</target>
|
||||
@@ -1940,10 +1910,6 @@ Questo è il tuo link una tantum!</target>
|
||||
<target>Tempo personalizzato</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Customizable message shape." xml:space="preserve">
|
||||
<source>Customizable message shape.</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Customize theme" xml:space="preserve">
|
||||
<source>Customize theme</source>
|
||||
<target>Personalizza il tema</target>
|
||||
@@ -2238,10 +2204,6 @@ Questo è il tuo link una tantum!</target>
|
||||
<target>Eliminare il database vecchio?</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Delete or moderate up to 200 messages." xml:space="preserve">
|
||||
<source>Delete or moderate up to 200 messages.</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Delete pending connection?" xml:space="preserve">
|
||||
<source>Delete pending connection?</source>
|
||||
<target>Eliminare la connessione in attesa?</target>
|
||||
@@ -3365,10 +3327,6 @@ Questo è il tuo link una tantum!</target>
|
||||
<target>Inoltrare i messaggi senza file?</target>
|
||||
<note>alert message</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Forward up to 20 messages at once." xml:space="preserve">
|
||||
<source>Forward up to 20 messages at once.</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Forwarded" xml:space="preserve">
|
||||
<source>Forwarded</source>
|
||||
<target>Inoltrato</target>
|
||||
@@ -3758,11 +3716,6 @@ Errore: %2$@</target>
|
||||
<target>Importazione archivio</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Improved delivery, reduced traffic usage. More improvements are coming soon!" xml:space="preserve">
|
||||
<source>Improved delivery, reduced traffic usage.
|
||||
More improvements are coming soon!</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Improved message delivery" xml:space="preserve">
|
||||
<source>Improved message delivery</source>
|
||||
<target>Consegna dei messaggi migliorata</target>
|
||||
@@ -4548,16 +4501,6 @@ Questo è il tuo link per il gruppo %@!</target>
|
||||
<target>Nuovo codice di accesso</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="New SOCKS credentials will be used every time you start the app." xml:space="preserve">
|
||||
<source>New SOCKS credentials will be used every time you start the app.</source>
|
||||
<target>Le nuove credenziali SOCKS verranno usate ogni volta che avvii l'app.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="New SOCKS credentials will be used for each server." xml:space="preserve">
|
||||
<source>New SOCKS credentials will be used for each server.</source>
|
||||
<target>Le nuove credenziali SOCKS verranno usate per ogni server.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="New chat" xml:space="preserve">
|
||||
<source>New chat</source>
|
||||
<target>Nuova chat</target>
|
||||
@@ -4678,16 +4621,6 @@ Questo è il tuo link per il gruppo %@!</target>
|
||||
<target>Nessuna connessione di rete</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="No permission to record speech" xml:space="preserve">
|
||||
<source>No permission to record speech</source>
|
||||
<target>Nessuna autorizzazione per registrare l'audio</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="No permission to record video" xml:space="preserve">
|
||||
<source>No permission to record video</source>
|
||||
<target>Nessuna autorizzazione per registrare il video</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="No permission to record voice message" xml:space="preserve">
|
||||
<source>No permission to record voice message</source>
|
||||
<target>Nessuna autorizzazione per registrare messaggi vocali</target>
|
||||
@@ -6156,11 +6089,6 @@ Attivalo nelle impostazioni *Rete e server*.</target>
|
||||
<target>Inviato via proxy</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Server" xml:space="preserve">
|
||||
<source>Server</source>
|
||||
<target>Server</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Server address" xml:space="preserve">
|
||||
<source>Server address</source>
|
||||
<target>Indirizzo server</target>
|
||||
@@ -6461,10 +6389,6 @@ Attivalo nelle impostazioni *Rete e server*.</target>
|
||||
<target>Invito SimpleX una tantum</target>
|
||||
<note>simplex link type</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="SimpleX protocols reviewed by Trail of Bits." xml:space="preserve">
|
||||
<source>SimpleX protocols reviewed by Trail of Bits.</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Simplified incognito mode" xml:space="preserve">
|
||||
<source>Simplified incognito mode</source>
|
||||
<target>Modalità incognito semplificata</target>
|
||||
@@ -6640,14 +6564,6 @@ Attivalo nelle impostazioni *Rete e server*.</target>
|
||||
<target>Supporta SimpleX Chat</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Switch audio and video during the call." xml:space="preserve">
|
||||
<source>Switch audio and video during the call.</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Switch chat profile for 1-time invitations." xml:space="preserve">
|
||||
<source>Switch chat profile for 1-time invitations.</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="System" xml:space="preserve">
|
||||
<source>System</source>
|
||||
<target>Sistema</target>
|
||||
@@ -7012,16 +6928,6 @@ You will be prompted to complete authentication before this feature is enabled.<
|
||||
Ti verrà chiesto di completare l'autenticazione prima di attivare questa funzionalità.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="To record speech please grant permission to use Microphone." xml:space="preserve">
|
||||
<source>To record speech please grant permission to use Microphone.</source>
|
||||
<target>Per registrare l'audio, concedi l'autorizzazione di usare il microfono.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="To record video please grant permission to use Camera." xml:space="preserve">
|
||||
<source>To record video please grant permission to use Camera.</source>
|
||||
<target>Per registrare il video, concedi l'autorizzazione di usare la fotocamera.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="To record voice message please grant permission to use Microphone." xml:space="preserve">
|
||||
<source>To record voice message please grant permission to use Microphone.</source>
|
||||
<target>Per registrare un messaggio vocale, concedi l'autorizzazione all'uso del microfono.</target>
|
||||
@@ -7359,6 +7265,11 @@ Per connetterti, chiedi al tuo contatto di creare un altro link di connessione e
|
||||
<target>Usa l'app con una mano sola.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="User profile" xml:space="preserve">
|
||||
<source>User profile</source>
|
||||
<target>Profilo utente</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="User selection" xml:space="preserve">
|
||||
<source>User selection</source>
|
||||
<target>Selezione utente</target>
|
||||
|
||||
@@ -915,10 +915,6 @@
|
||||
<target>アプリのパスコードは自己破壊パスコードに置き換えられます。</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="App session" xml:space="preserve">
|
||||
<source>App session</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="App version" xml:space="preserve">
|
||||
<source>App version</source>
|
||||
<target>アプリのバージョン</target>
|
||||
@@ -1045,18 +1041,10 @@
|
||||
<target>メッセージのハッシュ値問題</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Better calls" xml:space="preserve">
|
||||
<source>Better calls</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Better groups" xml:space="preserve">
|
||||
<source>Better groups</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Better message dates." xml:space="preserve">
|
||||
<source>Better message dates.</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Better messages" xml:space="preserve">
|
||||
<source>Better messages</source>
|
||||
<target>より良いメッセージ</target>
|
||||
@@ -1066,18 +1054,6 @@
|
||||
<source>Better networking</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Better notifications" xml:space="preserve">
|
||||
<source>Better notifications</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Better security ✅" xml:space="preserve">
|
||||
<source>Better security ✅</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Better user experience" xml:space="preserve">
|
||||
<source>Better user experience</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Black" xml:space="preserve">
|
||||
<source>Black</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
@@ -1339,11 +1315,6 @@
|
||||
<source>Chat preferences were changed.</source>
|
||||
<note>alert message</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Chat profile" xml:space="preserve">
|
||||
<source>Chat profile</source>
|
||||
<target>ユーザープロフィール</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Chat theme" xml:space="preserve">
|
||||
<source>Chat theme</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
@@ -1820,10 +1791,6 @@ This is your own one-time link!</source>
|
||||
<target>カスタム時間</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Customizable message shape." xml:space="preserve">
|
||||
<source>Customizable message shape.</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Customize theme" xml:space="preserve">
|
||||
<source>Customize theme</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
@@ -2110,10 +2077,6 @@ This is your own one-time link!</source>
|
||||
<target>古いデータベースを削除しますか?</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Delete or moderate up to 200 messages." xml:space="preserve">
|
||||
<source>Delete or moderate up to 200 messages.</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Delete pending connection?" xml:space="preserve">
|
||||
<source>Delete pending connection?</source>
|
||||
<target>接続待ちの接続を削除しますか?</target>
|
||||
@@ -3159,10 +3122,6 @@ This is your own one-time link!</source>
|
||||
<source>Forward messages without files?</source>
|
||||
<note>alert message</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Forward up to 20 messages at once." xml:space="preserve">
|
||||
<source>Forward up to 20 messages at once.</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Forwarded" xml:space="preserve">
|
||||
<source>Forwarded</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
@@ -3529,11 +3488,6 @@ Error: %2$@</source>
|
||||
<source>Importing archive</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Improved delivery, reduced traffic usage. More improvements are coming soon!" xml:space="preserve">
|
||||
<source>Improved delivery, reduced traffic usage.
|
||||
More improvements are coming soon!</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Improved message delivery" xml:space="preserve">
|
||||
<source>Improved message delivery</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
@@ -4261,14 +4215,6 @@ This is your link for group %@!</source>
|
||||
<target>新しいパスコード</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="New SOCKS credentials will be used every time you start the app." xml:space="preserve">
|
||||
<source>New SOCKS credentials will be used every time you start the app.</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="New SOCKS credentials will be used for each server." xml:space="preserve">
|
||||
<source>New SOCKS credentials will be used for each server.</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="New chat" xml:space="preserve">
|
||||
<source>New chat</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
@@ -4383,14 +4329,6 @@ This is your link for group %@!</source>
|
||||
<source>No network connection</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="No permission to record speech" xml:space="preserve">
|
||||
<source>No permission to record speech</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="No permission to record video" xml:space="preserve">
|
||||
<source>No permission to record video</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="No permission to record voice message" xml:space="preserve">
|
||||
<source>No permission to record voice message</source>
|
||||
<target>音声メッセージを録音する権限がありません</target>
|
||||
@@ -5745,10 +5683,6 @@ Enable in *Network & servers* settings.</source>
|
||||
<source>Sent via proxy</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Server" xml:space="preserve">
|
||||
<source>Server</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Server address" xml:space="preserve">
|
||||
<source>Server address</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
@@ -6025,10 +5959,6 @@ Enable in *Network & servers* settings.</source>
|
||||
<target>SimpleX使い捨て招待リンク</target>
|
||||
<note>simplex link type</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="SimpleX protocols reviewed by Trail of Bits." xml:space="preserve">
|
||||
<source>SimpleX protocols reviewed by Trail of Bits.</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Simplified incognito mode" xml:space="preserve">
|
||||
<source>Simplified incognito mode</source>
|
||||
<target>シークレットモードの簡素化</target>
|
||||
@@ -6189,14 +6119,6 @@ Enable in *Network & servers* settings.</source>
|
||||
<target>Simplex Chatを支援</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Switch audio and video during the call." xml:space="preserve">
|
||||
<source>Switch audio and video during the call.</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Switch chat profile for 1-time invitations." xml:space="preserve">
|
||||
<source>Switch chat profile for 1-time invitations.</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="System" xml:space="preserve">
|
||||
<source>System</source>
|
||||
<target>システム</target>
|
||||
@@ -6537,14 +6459,6 @@ You will be prompted to complete authentication before this feature is enabled.<
|
||||
オンにするには、認証ステップが行われます。</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="To record speech please grant permission to use Microphone." xml:space="preserve">
|
||||
<source>To record speech please grant permission to use Microphone.</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="To record video please grant permission to use Camera." xml:space="preserve">
|
||||
<source>To record video please grant permission to use Camera.</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="To record voice message please grant permission to use Microphone." xml:space="preserve">
|
||||
<source>To record voice message please grant permission to use Microphone.</source>
|
||||
<target>音声メッセージを録音する場合は、マイクの使用を許可してください。</target>
|
||||
@@ -6854,6 +6768,11 @@ To connect, please ask your contact to create another connection link and check
|
||||
<source>Use the app with one hand.</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="User profile" xml:space="preserve">
|
||||
<source>User profile</source>
|
||||
<target>ユーザープロフィール</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="User selection" xml:space="preserve">
|
||||
<source>User selection</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
|
||||
@@ -945,11 +945,6 @@
|
||||
<target>De app-toegangscode wordt vervangen door een zelfvernietigings wachtwoord.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="App session" xml:space="preserve">
|
||||
<source>App session</source>
|
||||
<target>Appsessie</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="App version" xml:space="preserve">
|
||||
<source>App version</source>
|
||||
<target>App versie</target>
|
||||
@@ -1085,19 +1080,11 @@
|
||||
<target>Onjuiste bericht hash</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Better calls" xml:space="preserve">
|
||||
<source>Better calls</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Better groups" xml:space="preserve">
|
||||
<source>Better groups</source>
|
||||
<target>Betere groepen</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Better message dates." xml:space="preserve">
|
||||
<source>Better message dates.</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Better messages" xml:space="preserve">
|
||||
<source>Better messages</source>
|
||||
<target>Betere berichten</target>
|
||||
@@ -1108,18 +1095,6 @@
|
||||
<target>Beter netwerk</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Better notifications" xml:space="preserve">
|
||||
<source>Better notifications</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Better security ✅" xml:space="preserve">
|
||||
<source>Better security ✅</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Better user experience" xml:space="preserve">
|
||||
<source>Better user experience</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Black" xml:space="preserve">
|
||||
<source>Black</source>
|
||||
<target>Zwart</target>
|
||||
@@ -1406,11 +1381,6 @@
|
||||
<target>Chatvoorkeuren zijn gewijzigd.</target>
|
||||
<note>alert message</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Chat profile" xml:space="preserve">
|
||||
<source>Chat profile</source>
|
||||
<target>Gebruikers profiel</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Chat theme" xml:space="preserve">
|
||||
<source>Chat theme</source>
|
||||
<target>Chat thema</target>
|
||||
@@ -1940,10 +1910,6 @@ Dit is uw eigen eenmalige link!</target>
|
||||
<target>Aangepaste tijd</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Customizable message shape." xml:space="preserve">
|
||||
<source>Customizable message shape.</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Customize theme" xml:space="preserve">
|
||||
<source>Customize theme</source>
|
||||
<target>Thema aanpassen</target>
|
||||
@@ -2238,10 +2204,6 @@ Dit is uw eigen eenmalige link!</target>
|
||||
<target>Oude database verwijderen?</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Delete or moderate up to 200 messages." xml:space="preserve">
|
||||
<source>Delete or moderate up to 200 messages.</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Delete pending connection?" xml:space="preserve">
|
||||
<source>Delete pending connection?</source>
|
||||
<target>Wachtende verbinding verwijderen?</target>
|
||||
@@ -3365,10 +3327,6 @@ Dit is uw eigen eenmalige link!</target>
|
||||
<target>Berichten doorsturen zonder bestanden?</target>
|
||||
<note>alert message</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Forward up to 20 messages at once." xml:space="preserve">
|
||||
<source>Forward up to 20 messages at once.</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Forwarded" xml:space="preserve">
|
||||
<source>Forwarded</source>
|
||||
<target>Doorgestuurd</target>
|
||||
@@ -3758,11 +3716,6 @@ Fout: %2$@</target>
|
||||
<target>Archief importeren</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Improved delivery, reduced traffic usage. More improvements are coming soon!" xml:space="preserve">
|
||||
<source>Improved delivery, reduced traffic usage.
|
||||
More improvements are coming soon!</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Improved message delivery" xml:space="preserve">
|
||||
<source>Improved message delivery</source>
|
||||
<target>Verbeterde berichtbezorging</target>
|
||||
@@ -4548,16 +4501,6 @@ Dit is jouw link voor groep %@!</target>
|
||||
<target>Nieuwe toegangscode</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="New SOCKS credentials will be used every time you start the app." xml:space="preserve">
|
||||
<source>New SOCKS credentials will be used every time you start the app.</source>
|
||||
<target>Elke keer dat u de app start, worden er nieuwe SOCKS-inloggegevens gebruikt.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="New SOCKS credentials will be used for each server." xml:space="preserve">
|
||||
<source>New SOCKS credentials will be used for each server.</source>
|
||||
<target>Voor elke server worden nieuwe SOCKS-inloggegevens gebruikt.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="New chat" xml:space="preserve">
|
||||
<source>New chat</source>
|
||||
<target>Nieuw gesprek</target>
|
||||
@@ -4678,16 +4621,6 @@ Dit is jouw link voor groep %@!</target>
|
||||
<target>Geen netwerkverbinding</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="No permission to record speech" xml:space="preserve">
|
||||
<source>No permission to record speech</source>
|
||||
<target>Geen toestemming om spraak op te nemen</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="No permission to record video" xml:space="preserve">
|
||||
<source>No permission to record video</source>
|
||||
<target>Geen toestemming om video op te nemen</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="No permission to record voice message" xml:space="preserve">
|
||||
<source>No permission to record voice message</source>
|
||||
<target>Geen toestemming om spraakbericht op te nemen</target>
|
||||
@@ -6156,11 +6089,6 @@ Schakel dit in in *Netwerk en servers*-instellingen.</target>
|
||||
<target>Verzonden via proxy</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Server" xml:space="preserve">
|
||||
<source>Server</source>
|
||||
<target>Server</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Server address" xml:space="preserve">
|
||||
<source>Server address</source>
|
||||
<target>Server adres</target>
|
||||
@@ -6461,10 +6389,6 @@ Schakel dit in in *Netwerk en servers*-instellingen.</target>
|
||||
<target>Eenmalige SimpleX uitnodiging</target>
|
||||
<note>simplex link type</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="SimpleX protocols reviewed by Trail of Bits." xml:space="preserve">
|
||||
<source>SimpleX protocols reviewed by Trail of Bits.</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Simplified incognito mode" xml:space="preserve">
|
||||
<source>Simplified incognito mode</source>
|
||||
<target>Vereenvoudigde incognitomodus</target>
|
||||
@@ -6640,14 +6564,6 @@ Schakel dit in in *Netwerk en servers*-instellingen.</target>
|
||||
<target>Ondersteuning van SimpleX Chat</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Switch audio and video during the call." xml:space="preserve">
|
||||
<source>Switch audio and video during the call.</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Switch chat profile for 1-time invitations." xml:space="preserve">
|
||||
<source>Switch chat profile for 1-time invitations.</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="System" xml:space="preserve">
|
||||
<source>System</source>
|
||||
<target>Systeem</target>
|
||||
@@ -6685,7 +6601,6 @@ Schakel dit in in *Netwerk en servers*-instellingen.</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="Tail" xml:space="preserve">
|
||||
<source>Tail</source>
|
||||
<target>Staart</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Take picture" xml:space="preserve">
|
||||
@@ -7012,16 +6927,6 @@ You will be prompted to complete authentication before this feature is enabled.<
|
||||
U wordt gevraagd de authenticatie te voltooien voordat deze functie wordt ingeschakeld.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="To record speech please grant permission to use Microphone." xml:space="preserve">
|
||||
<source>To record speech please grant permission to use Microphone.</source>
|
||||
<target>Geef toestemming om de microfoon te gebruiken om spraak op te nemen.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="To record video please grant permission to use Camera." xml:space="preserve">
|
||||
<source>To record video please grant permission to use Camera.</source>
|
||||
<target>Om video op te nemen, dient u toestemming te geven om de camera te gebruiken.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="To record voice message please grant permission to use Microphone." xml:space="preserve">
|
||||
<source>To record voice message please grant permission to use Microphone.</source>
|
||||
<target>Geef toestemming om de microfoon te gebruiken om een spraakbericht op te nemen.</target>
|
||||
@@ -7359,6 +7264,11 @@ Om verbinding te maken, vraagt u uw contact om een andere verbinding link te mak
|
||||
<target>Gebruik de app met één hand.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="User profile" xml:space="preserve">
|
||||
<source>User profile</source>
|
||||
<target>Gebruikers profiel</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="User selection" xml:space="preserve">
|
||||
<source>User selection</source>
|
||||
<target>Gebruikersselectie</target>
|
||||
@@ -8991,7 +8901,7 @@ laatst ontvangen bericht: %2$@</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="you are observer" xml:space="preserve">
|
||||
<source>you are observer</source>
|
||||
<target>je bent waarnemer</target>
|
||||
<target>jij bent waarnemer</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="you blocked %@" xml:space="preserve">
|
||||
@@ -9021,7 +8931,7 @@ laatst ontvangen bericht: %2$@</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="you left" xml:space="preserve">
|
||||
<source>you left</source>
|
||||
<target>je bent vertrokken</target>
|
||||
<target>jij bent vertrokken</target>
|
||||
<note>snd group event chat item</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="you removed %@" xml:space="preserve">
|
||||
|
||||
@@ -139,7 +139,6 @@
|
||||
</trans-unit>
|
||||
<trans-unit id="%@, %@" xml:space="preserve">
|
||||
<source>%1$@, %2$@</source>
|
||||
<target>%1$@, %2$@</target>
|
||||
<note>format for date separator in chat</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="%@, %@ and %lld members" xml:space="preserve">
|
||||
@@ -164,22 +163,18 @@
|
||||
</trans-unit>
|
||||
<trans-unit id="%d file(s) are still being downloaded." xml:space="preserve">
|
||||
<source>%d file(s) are still being downloaded.</source>
|
||||
<target>%d plik(ów) jest dalej pobieranych.</target>
|
||||
<note>forward confirmation reason</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="%d file(s) failed to download." xml:space="preserve">
|
||||
<source>%d file(s) failed to download.</source>
|
||||
<target>%d plik(ów) nie udało się pobrać.</target>
|
||||
<note>forward confirmation reason</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="%d file(s) were deleted." xml:space="preserve">
|
||||
<source>%d file(s) were deleted.</source>
|
||||
<target>%d plik(ów) zostało usuniętych.</target>
|
||||
<note>forward confirmation reason</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="%d file(s) were not downloaded." xml:space="preserve">
|
||||
<source>%d file(s) were not downloaded.</source>
|
||||
<target>%d plik(ów) nie zostało pobranych.</target>
|
||||
<note>forward confirmation reason</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="%d hours" xml:space="preserve">
|
||||
@@ -189,7 +184,6 @@
|
||||
</trans-unit>
|
||||
<trans-unit id="%d messages not forwarded" xml:space="preserve">
|
||||
<source>%d messages not forwarded</source>
|
||||
<target>%d wiadomości nie przekazanych</target>
|
||||
<note>alert title</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="%d min" xml:space="preserve">
|
||||
@@ -945,11 +939,6 @@
|
||||
<target>Pin aplikacji został zastąpiony pinem samozniszczenia.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="App session" xml:space="preserve">
|
||||
<source>App session</source>
|
||||
<target>Sesja aplikacji</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="App version" xml:space="preserve">
|
||||
<source>App version</source>
|
||||
<target>Wersja aplikacji</target>
|
||||
@@ -1057,7 +1046,6 @@
|
||||
</trans-unit>
|
||||
<trans-unit id="Auto-accept settings" xml:space="preserve">
|
||||
<source>Auto-accept settings</source>
|
||||
<target>Ustawienia automatycznej akceptacji</target>
|
||||
<note>alert title</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Back" xml:space="preserve">
|
||||
@@ -1085,19 +1073,11 @@
|
||||
<target>Zły hash wiadomości</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Better calls" xml:space="preserve">
|
||||
<source>Better calls</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Better groups" xml:space="preserve">
|
||||
<source>Better groups</source>
|
||||
<target>Lepsze grupy</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Better message dates." xml:space="preserve">
|
||||
<source>Better message dates.</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Better messages" xml:space="preserve">
|
||||
<source>Better messages</source>
|
||||
<target>Lepsze wiadomości</target>
|
||||
@@ -1108,18 +1088,6 @@
|
||||
<target>Lepsze sieciowanie</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Better notifications" xml:space="preserve">
|
||||
<source>Better notifications</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Better security ✅" xml:space="preserve">
|
||||
<source>Better security ✅</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Better user experience" xml:space="preserve">
|
||||
<source>Better user experience</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Black" xml:space="preserve">
|
||||
<source>Black</source>
|
||||
<target>Czarny</target>
|
||||
@@ -1403,14 +1371,8 @@
|
||||
</trans-unit>
|
||||
<trans-unit id="Chat preferences were changed." xml:space="preserve">
|
||||
<source>Chat preferences were changed.</source>
|
||||
<target>Preferencje czatu zostały zmienione.</target>
|
||||
<note>alert message</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Chat profile" xml:space="preserve">
|
||||
<source>Chat profile</source>
|
||||
<target>Profil użytkownika</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Chat theme" xml:space="preserve">
|
||||
<source>Chat theme</source>
|
||||
<target>Motyw czatu</target>
|
||||
@@ -1812,7 +1774,6 @@ To jest twój jednorazowy link!</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="Corner" xml:space="preserve">
|
||||
<source>Corner</source>
|
||||
<target>Róg</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Correct name to %@?" xml:space="preserve">
|
||||
@@ -1940,10 +1901,6 @@ To jest twój jednorazowy link!</target>
|
||||
<target>Niestandardowy czas</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Customizable message shape." xml:space="preserve">
|
||||
<source>Customizable message shape.</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Customize theme" xml:space="preserve">
|
||||
<source>Customize theme</source>
|
||||
<target>Dostosuj motyw</target>
|
||||
@@ -2238,10 +2195,6 @@ To jest twój jednorazowy link!</target>
|
||||
<target>Usunąć starą bazę danych?</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Delete or moderate up to 200 messages." xml:space="preserve">
|
||||
<source>Delete or moderate up to 200 messages.</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Delete pending connection?" xml:space="preserve">
|
||||
<source>Delete pending connection?</source>
|
||||
<target>Usunąć oczekujące połączenie?</target>
|
||||
@@ -2494,7 +2447,6 @@ To jest twój jednorazowy link!</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="Do not use credentials with proxy." xml:space="preserve">
|
||||
<source>Do not use credentials with proxy.</source>
|
||||
<target>Nie używaj danych logowania do proxy.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Don't create address" xml:space="preserve">
|
||||
@@ -2540,7 +2492,6 @@ To jest twój jednorazowy link!</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="Download files" xml:space="preserve">
|
||||
<source>Download files</source>
|
||||
<target>Pobierz pliki</target>
|
||||
<note>alert action</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Downloaded" xml:space="preserve">
|
||||
@@ -2820,7 +2771,6 @@ To jest twój jednorazowy link!</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="Error changing connection profile" xml:space="preserve">
|
||||
<source>Error changing connection profile</source>
|
||||
<target>Błąd zmiany połączenia profilu</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Error changing role" xml:space="preserve">
|
||||
@@ -2835,7 +2785,6 @@ To jest twój jednorazowy link!</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="Error changing to incognito!" xml:space="preserve">
|
||||
<source>Error changing to incognito!</source>
|
||||
<target>Błąd zmiany na incognito!</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Error connecting to forwarding server %@. Please try later." xml:space="preserve">
|
||||
@@ -2960,7 +2909,6 @@ To jest twój jednorazowy link!</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="Error migrating settings" xml:space="preserve">
|
||||
<source>Error migrating settings</source>
|
||||
<target>Błąd migracji ustawień</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Error opening chat" xml:space="preserve">
|
||||
@@ -3065,7 +3013,6 @@ To jest twój jednorazowy link!</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="Error switching profile" xml:space="preserve">
|
||||
<source>Error switching profile</source>
|
||||
<target>Błąd zmiany profilu</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Error switching profile!" xml:space="preserve">
|
||||
@@ -3206,8 +3153,6 @@ To jest twój jednorazowy link!</target>
|
||||
<trans-unit id="File errors: %@" xml:space="preserve">
|
||||
<source>File errors:
|
||||
%@</source>
|
||||
<target>Błędy pliku:
|
||||
%@</target>
|
||||
<note>alert message</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="File not found - most likely file was deleted or cancelled." xml:space="preserve">
|
||||
@@ -3347,7 +3292,6 @@ To jest twój jednorazowy link!</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="Forward %d message(s)?" xml:space="preserve">
|
||||
<source>Forward %d message(s)?</source>
|
||||
<target>Przekazać %d wiadomość(i)?</target>
|
||||
<note>alert title</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Forward and save messages" xml:space="preserve">
|
||||
@@ -3357,18 +3301,12 @@ To jest twój jednorazowy link!</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="Forward messages" xml:space="preserve">
|
||||
<source>Forward messages</source>
|
||||
<target>Przekaż wiadomości</target>
|
||||
<note>alert action</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Forward messages without files?" xml:space="preserve">
|
||||
<source>Forward messages without files?</source>
|
||||
<target>Przekazać wiadomości bez plików?</target>
|
||||
<note>alert message</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Forward up to 20 messages at once." xml:space="preserve">
|
||||
<source>Forward up to 20 messages at once.</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Forwarded" xml:space="preserve">
|
||||
<source>Forwarded</source>
|
||||
<target>Przekazane dalej</target>
|
||||
@@ -3381,7 +3319,6 @@ To jest twój jednorazowy link!</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="Forwarding %lld messages" xml:space="preserve">
|
||||
<source>Forwarding %lld messages</source>
|
||||
<target>Przekazywanie %lld wiadomości</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Forwarding server %@ failed to connect to destination server %@. Please try later." xml:space="preserve">
|
||||
@@ -3680,7 +3617,6 @@ Błąd: %2$@</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="IP address" xml:space="preserve">
|
||||
<source>IP address</source>
|
||||
<target>Adres IP</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="If you can't meet in person, show QR code in a video call, or share the link." xml:space="preserve">
|
||||
@@ -3758,11 +3694,6 @@ Błąd: %2$@</target>
|
||||
<target>Importowanie archiwum</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Improved delivery, reduced traffic usage. More improvements are coming soon!" xml:space="preserve">
|
||||
<source>Improved delivery, reduced traffic usage.
|
||||
More improvements are coming soon!</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Improved message delivery" xml:space="preserve">
|
||||
<source>Improved message delivery</source>
|
||||
<target>Ulepszona dostawa wiadomości</target>
|
||||
@@ -4335,7 +4266,6 @@ To jest twój link do grupy %@!</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="Message shape" xml:space="preserve">
|
||||
<source>Message shape</source>
|
||||
<target>Kształt wiadomości</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Message source remains private." xml:space="preserve">
|
||||
@@ -4390,7 +4320,6 @@ To jest twój link do grupy %@!</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="Messages were deleted after you selected them." xml:space="preserve">
|
||||
<source>Messages were deleted after you selected them.</source>
|
||||
<target>Wiadomości zostały usunięte po wybraniu ich.</target>
|
||||
<note>alert message</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Messages, files and calls are protected by **end-to-end encryption** with perfect forward secrecy, repudiation and break-in recovery." xml:space="preserve">
|
||||
@@ -4548,16 +4477,6 @@ To jest twój link do grupy %@!</target>
|
||||
<target>Nowy Pin</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="New SOCKS credentials will be used every time you start the app." xml:space="preserve">
|
||||
<source>New SOCKS credentials will be used every time you start the app.</source>
|
||||
<target>Nowe poświadczenia SOCKS będą używane przy każdym uruchomieniu aplikacji.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="New SOCKS credentials will be used for each server." xml:space="preserve">
|
||||
<source>New SOCKS credentials will be used for each server.</source>
|
||||
<target>Dla każdego serwera zostaną użyte nowe poświadczenia SOCKS.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="New chat" xml:space="preserve">
|
||||
<source>New chat</source>
|
||||
<target>Nowy czat</target>
|
||||
@@ -4678,16 +4597,6 @@ To jest twój link do grupy %@!</target>
|
||||
<target>Brak połączenia z siecią</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="No permission to record speech" xml:space="preserve">
|
||||
<source>No permission to record speech</source>
|
||||
<target>Brak zezwoleń do nagrania rozmowy</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="No permission to record video" xml:space="preserve">
|
||||
<source>No permission to record video</source>
|
||||
<target>Brak zezwoleń do nagrania wideo</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="No permission to record voice message" xml:space="preserve">
|
||||
<source>No permission to record voice message</source>
|
||||
<target>Brak uprawnień do nagrywania wiadomości głosowej</target>
|
||||
@@ -4710,7 +4619,6 @@ To jest twój link do grupy %@!</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="Nothing to forward!" xml:space="preserve">
|
||||
<source>Nothing to forward!</source>
|
||||
<target>Nic do przekazania!</target>
|
||||
<note>alert title</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Notifications" xml:space="preserve">
|
||||
@@ -4939,8 +4847,6 @@ Wymaga włączenia VPN.</target>
|
||||
<trans-unit id="Other file errors: %@" xml:space="preserve">
|
||||
<source>Other file errors:
|
||||
%@</source>
|
||||
<target>Inne błędy pliku:
|
||||
%@</target>
|
||||
<note>alert message</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="PING count" xml:space="preserve">
|
||||
@@ -4980,7 +4886,6 @@ Wymaga włączenia VPN.</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="Password" xml:space="preserve">
|
||||
<source>Password</source>
|
||||
<target>Hasło</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Password to show" xml:space="preserve">
|
||||
@@ -5134,7 +5039,6 @@ Błąd: %@</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="Port" xml:space="preserve">
|
||||
<source>Port</source>
|
||||
<target>Port</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Possibly, certificate fingerprint in server address is incorrect" xml:space="preserve">
|
||||
@@ -5326,7 +5230,6 @@ Włącz w ustawianiach *Sieć i serwery* .</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="Proxy requires password" xml:space="preserve">
|
||||
<source>Proxy requires password</source>
|
||||
<target>Proxy wymaga hasła</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Push notifications" xml:space="preserve">
|
||||
@@ -5552,7 +5455,6 @@ Włącz w ustawianiach *Sieć i serwery* .</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="Remove archive?" xml:space="preserve">
|
||||
<source>Remove archive?</source>
|
||||
<target>Usunąć archiwum?</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Remove image" xml:space="preserve">
|
||||
@@ -5737,7 +5639,6 @@ Włącz w ustawianiach *Sieć i serwery* .</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="SOCKS proxy" xml:space="preserve">
|
||||
<source>SOCKS proxy</source>
|
||||
<target>Proxy SOCKS</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Safely receive files" xml:space="preserve">
|
||||
@@ -5828,7 +5729,6 @@ Włącz w ustawianiach *Sieć i serwery* .</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="Save your profile?" xml:space="preserve">
|
||||
<source>Save your profile?</source>
|
||||
<target>Zapisać Twój profil?</target>
|
||||
<note>alert title</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Saved" xml:space="preserve">
|
||||
@@ -5853,7 +5753,6 @@ Włącz w ustawianiach *Sieć i serwery* .</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="Saving %lld messages" xml:space="preserve">
|
||||
<source>Saving %lld messages</source>
|
||||
<target>Zapisywanie %lld wiadomości</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Scale" xml:space="preserve">
|
||||
@@ -5938,7 +5837,6 @@ Włącz w ustawianiach *Sieć i serwery* .</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="Select chat profile" xml:space="preserve">
|
||||
<source>Select chat profile</source>
|
||||
<target>Wybierz profil czatu</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Selected %lld" xml:space="preserve">
|
||||
@@ -6156,11 +6054,6 @@ Włącz w ustawianiach *Sieć i serwery* .</target>
|
||||
<target>Wysłano przez proxy</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Server" xml:space="preserve">
|
||||
<source>Server</source>
|
||||
<target>Serwer</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Server address" xml:space="preserve">
|
||||
<source>Server address</source>
|
||||
<target>Adres serwera</target>
|
||||
@@ -6283,7 +6176,6 @@ Włącz w ustawianiach *Sieć i serwery* .</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="Settings were changed." xml:space="preserve">
|
||||
<source>Settings were changed.</source>
|
||||
<target>Ustawienia zostały zmienione.</target>
|
||||
<note>alert message</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Shape profile images" xml:space="preserve">
|
||||
@@ -6323,7 +6215,6 @@ Włącz w ustawianiach *Sieć i serwery* .</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="Share profile" xml:space="preserve">
|
||||
<source>Share profile</source>
|
||||
<target>Udostępnij profil</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Share this 1-time invite link" xml:space="preserve">
|
||||
@@ -6461,10 +6352,6 @@ Włącz w ustawianiach *Sieć i serwery* .</target>
|
||||
<target>Zaproszenie jednorazowe SimpleX</target>
|
||||
<note>simplex link type</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="SimpleX protocols reviewed by Trail of Bits." xml:space="preserve">
|
||||
<source>SimpleX protocols reviewed by Trail of Bits.</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Simplified incognito mode" xml:space="preserve">
|
||||
<source>Simplified incognito mode</source>
|
||||
<target>Uproszczony tryb incognito</target>
|
||||
@@ -6497,7 +6384,6 @@ Włącz w ustawianiach *Sieć i serwery* .</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="Some app settings were not migrated." xml:space="preserve">
|
||||
<source>Some app settings were not migrated.</source>
|
||||
<target>Niektóre ustawienia aplikacji nie zostały zmigrowane.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Some file(s) were not exported:" xml:space="preserve">
|
||||
@@ -6640,14 +6526,6 @@ Włącz w ustawianiach *Sieć i serwery* .</target>
|
||||
<target>Wspieraj SimpleX Chat</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Switch audio and video during the call." xml:space="preserve">
|
||||
<source>Switch audio and video during the call.</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Switch chat profile for 1-time invitations." xml:space="preserve">
|
||||
<source>Switch chat profile for 1-time invitations.</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="System" xml:space="preserve">
|
||||
<source>System</source>
|
||||
<target>System</target>
|
||||
@@ -6685,7 +6563,6 @@ Włącz w ustawianiach *Sieć i serwery* .</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="Tail" xml:space="preserve">
|
||||
<source>Tail</source>
|
||||
<target>Ogon</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Take picture" xml:space="preserve">
|
||||
@@ -6882,7 +6759,6 @@ Może się to zdarzyć z powodu jakiegoś błędu lub gdy połączenie jest skom
|
||||
</trans-unit>
|
||||
<trans-unit id="The uploaded database archive will be permanently removed from the servers." xml:space="preserve">
|
||||
<source>The uploaded database archive will be permanently removed from the servers.</source>
|
||||
<target>Przesłane archiwum bazy danych zostanie trwale usunięte z serwerów.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Themes" xml:space="preserve">
|
||||
@@ -7012,16 +6888,6 @@ You will be prompted to complete authentication before this feature is enabled.<
|
||||
Przed włączeniem tej funkcji zostanie wyświetlony monit uwierzytelniania.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="To record speech please grant permission to use Microphone." xml:space="preserve">
|
||||
<source>To record speech please grant permission to use Microphone.</source>
|
||||
<target>Aby nagrać rozmowę, proszę zezwolić na użycie Mikrofonu.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="To record video please grant permission to use Camera." xml:space="preserve">
|
||||
<source>To record video please grant permission to use Camera.</source>
|
||||
<target>Aby nagrać wideo, proszę zezwolić na użycie Aparatu.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="To record voice message please grant permission to use Microphone." xml:space="preserve">
|
||||
<source>To record voice message please grant permission to use Microphone.</source>
|
||||
<target>Aby nagrać wiadomość głosową należy udzielić zgody na użycie Mikrofonu.</target>
|
||||
@@ -7291,7 +7157,6 @@ Aby się połączyć, poproś Twój kontakt o utworzenie kolejnego linku połąc
|
||||
</trans-unit>
|
||||
<trans-unit id="Use SOCKS proxy" xml:space="preserve">
|
||||
<source>Use SOCKS proxy</source>
|
||||
<target>Użyj proxy SOCKS</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Use SimpleX Chat servers?" xml:space="preserve">
|
||||
@@ -7359,6 +7224,11 @@ Aby się połączyć, poproś Twój kontakt o utworzenie kolejnego linku połąc
|
||||
<target>Korzystaj z aplikacji jedną ręką.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="User profile" xml:space="preserve">
|
||||
<source>User profile</source>
|
||||
<target>Profil użytkownika</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="User selection" xml:space="preserve">
|
||||
<source>User selection</source>
|
||||
<target>Wybór użytkownika</target>
|
||||
@@ -7366,7 +7236,6 @@ Aby się połączyć, poproś Twój kontakt o utworzenie kolejnego linku połąc
|
||||
</trans-unit>
|
||||
<trans-unit id="Username" xml:space="preserve">
|
||||
<source>Username</source>
|
||||
<target>Nazwa użytkownika</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Using SimpleX Chat servers." xml:space="preserve">
|
||||
@@ -7980,7 +7849,6 @@ Powtórzyć prośbę połączenia?</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="Your chat preferences" xml:space="preserve">
|
||||
<source>Your chat preferences</source>
|
||||
<target>Twoje preferencje czatu</target>
|
||||
<note>alert title</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Your chat profiles" xml:space="preserve">
|
||||
@@ -7990,7 +7858,6 @@ Powtórzyć prośbę połączenia?</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="Your connection was moved to %@ but an unexpected error occurred while redirecting you to the profile." xml:space="preserve">
|
||||
<source>Your connection was moved to %@ but an unexpected error occurred while redirecting you to the profile.</source>
|
||||
<target>Twoje połączenie zostało przeniesione do %@, ale podczas przekierowywania do profilu wystąpił nieoczekiwany błąd.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Your contact sent a file that is larger than currently supported maximum size (%@)." xml:space="preserve">
|
||||
@@ -8010,7 +7877,6 @@ Powtórzyć prośbę połączenia?</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="Your credentials may be sent unencrypted." xml:space="preserve">
|
||||
<source>Your credentials may be sent unencrypted.</source>
|
||||
<target>Twoje poświadczenia mogą zostać wysłane niezaszyfrowane.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Your current chat database will be DELETED and REPLACED with the imported one." xml:space="preserve">
|
||||
@@ -8050,7 +7916,6 @@ Powtórzyć prośbę połączenia?</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="Your profile was changed. If you save it, the updated profile will be sent to all your contacts." xml:space="preserve">
|
||||
<source>Your profile was changed. If you save it, the updated profile will be sent to all your contacts.</source>
|
||||
<target>Twój profil został zmieniony. Jeśli go zapiszesz, zaktualizowany profil zostanie wysłany do wszystkich kontaktów.</target>
|
||||
<note>alert message</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Your profile, contacts and delivered messages are stored on your device." xml:space="preserve">
|
||||
|
||||
@@ -163,22 +163,18 @@
|
||||
</trans-unit>
|
||||
<trans-unit id="%d file(s) are still being downloaded." xml:space="preserve">
|
||||
<source>%d file(s) are still being downloaded.</source>
|
||||
<target>%d файл(ов) загружаются.</target>
|
||||
<note>forward confirmation reason</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="%d file(s) failed to download." xml:space="preserve">
|
||||
<source>%d file(s) failed to download.</source>
|
||||
<target>%d файл(ов) не удалось загрузить.</target>
|
||||
<note>forward confirmation reason</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="%d file(s) were deleted." xml:space="preserve">
|
||||
<source>%d file(s) were deleted.</source>
|
||||
<target>%d файлов было удалено.</target>
|
||||
<note>forward confirmation reason</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="%d file(s) were not downloaded." xml:space="preserve">
|
||||
<source>%d file(s) were not downloaded.</source>
|
||||
<target>%d файлов не было загружено.</target>
|
||||
<note>forward confirmation reason</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="%d hours" xml:space="preserve">
|
||||
@@ -188,7 +184,6 @@
|
||||
</trans-unit>
|
||||
<trans-unit id="%d messages not forwarded" xml:space="preserve">
|
||||
<source>%d messages not forwarded</source>
|
||||
<target>%d сообщений не переслано</target>
|
||||
<note>alert title</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="%d min" xml:space="preserve">
|
||||
@@ -944,11 +939,6 @@
|
||||
<target>Код доступа в приложение будет заменен кодом самоуничтожения.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="App session" xml:space="preserve">
|
||||
<source>App session</source>
|
||||
<target>Сессия приложения</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="App version" xml:space="preserve">
|
||||
<source>App version</source>
|
||||
<target>Версия приложения</target>
|
||||
@@ -1056,7 +1046,6 @@
|
||||
</trans-unit>
|
||||
<trans-unit id="Auto-accept settings" xml:space="preserve">
|
||||
<source>Auto-accept settings</source>
|
||||
<target>Настройки автоприема</target>
|
||||
<note>alert title</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Back" xml:space="preserve">
|
||||
@@ -1084,19 +1073,11 @@
|
||||
<target>Ошибка хэш сообщения</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Better calls" xml:space="preserve">
|
||||
<source>Better calls</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Better groups" xml:space="preserve">
|
||||
<source>Better groups</source>
|
||||
<target>Улучшенные группы</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Better message dates." xml:space="preserve">
|
||||
<source>Better message dates.</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Better messages" xml:space="preserve">
|
||||
<source>Better messages</source>
|
||||
<target>Улучшенные сообщения</target>
|
||||
@@ -1107,18 +1088,6 @@
|
||||
<target>Улучшенные сетевые функции</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Better notifications" xml:space="preserve">
|
||||
<source>Better notifications</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Better security ✅" xml:space="preserve">
|
||||
<source>Better security ✅</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Better user experience" xml:space="preserve">
|
||||
<source>Better user experience</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Black" xml:space="preserve">
|
||||
<source>Black</source>
|
||||
<target>Черная</target>
|
||||
@@ -1402,14 +1371,8 @@
|
||||
</trans-unit>
|
||||
<trans-unit id="Chat preferences were changed." xml:space="preserve">
|
||||
<source>Chat preferences were changed.</source>
|
||||
<target>Настройки чата были изменены.</target>
|
||||
<note>alert message</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Chat profile" xml:space="preserve">
|
||||
<source>Chat profile</source>
|
||||
<target>Профиль чата</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Chat theme" xml:space="preserve">
|
||||
<source>Chat theme</source>
|
||||
<target>Тема чата</target>
|
||||
@@ -1811,7 +1774,6 @@ This is your own one-time link!</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="Corner" xml:space="preserve">
|
||||
<source>Corner</source>
|
||||
<target>Угол</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Correct name to %@?" xml:space="preserve">
|
||||
@@ -1939,10 +1901,6 @@ This is your own one-time link!</source>
|
||||
<target>Пользовательское время</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Customizable message shape." xml:space="preserve">
|
||||
<source>Customizable message shape.</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Customize theme" xml:space="preserve">
|
||||
<source>Customize theme</source>
|
||||
<target>Настроить тему</target>
|
||||
@@ -2237,10 +2195,6 @@ This is your own one-time link!</source>
|
||||
<target>Удалить предыдущую версию данных?</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Delete or moderate up to 200 messages." xml:space="preserve">
|
||||
<source>Delete or moderate up to 200 messages.</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Delete pending connection?" xml:space="preserve">
|
||||
<source>Delete pending connection?</source>
|
||||
<target>Удалить ожидаемое соединение?</target>
|
||||
@@ -2493,7 +2447,6 @@ This is your own one-time link!</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="Do not use credentials with proxy." xml:space="preserve">
|
||||
<source>Do not use credentials with proxy.</source>
|
||||
<target>Не использовать учетные данные с прокси.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Don't create address" xml:space="preserve">
|
||||
@@ -2539,7 +2492,6 @@ This is your own one-time link!</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="Download files" xml:space="preserve">
|
||||
<source>Download files</source>
|
||||
<target>Загрузить файлы</target>
|
||||
<note>alert action</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Downloaded" xml:space="preserve">
|
||||
@@ -2819,7 +2771,6 @@ This is your own one-time link!</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="Error changing connection profile" xml:space="preserve">
|
||||
<source>Error changing connection profile</source>
|
||||
<target>Ошибка при изменении профиля соединения</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Error changing role" xml:space="preserve">
|
||||
@@ -2834,7 +2785,6 @@ This is your own one-time link!</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="Error changing to incognito!" xml:space="preserve">
|
||||
<source>Error changing to incognito!</source>
|
||||
<target>Ошибка при смене на Инкогнито!</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Error connecting to forwarding server %@. Please try later." xml:space="preserve">
|
||||
@@ -2959,7 +2909,6 @@ This is your own one-time link!</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="Error migrating settings" xml:space="preserve">
|
||||
<source>Error migrating settings</source>
|
||||
<target>Ошибка миграции настроек</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Error opening chat" xml:space="preserve">
|
||||
@@ -3064,7 +3013,6 @@ This is your own one-time link!</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="Error switching profile" xml:space="preserve">
|
||||
<source>Error switching profile</source>
|
||||
<target>Ошибка переключения профиля</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Error switching profile!" xml:space="preserve">
|
||||
@@ -3205,8 +3153,6 @@ This is your own one-time link!</source>
|
||||
<trans-unit id="File errors: %@" xml:space="preserve">
|
||||
<source>File errors:
|
||||
%@</source>
|
||||
<target>Ошибки файлов:
|
||||
%@</target>
|
||||
<note>alert message</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="File not found - most likely file was deleted or cancelled." xml:space="preserve">
|
||||
@@ -3346,7 +3292,6 @@ This is your own one-time link!</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="Forward %d message(s)?" xml:space="preserve">
|
||||
<source>Forward %d message(s)?</source>
|
||||
<target>Переслать %d сообщение(й)?</target>
|
||||
<note>alert title</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Forward and save messages" xml:space="preserve">
|
||||
@@ -3356,18 +3301,12 @@ This is your own one-time link!</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="Forward messages" xml:space="preserve">
|
||||
<source>Forward messages</source>
|
||||
<target>Переслать сообщения</target>
|
||||
<note>alert action</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Forward messages without files?" xml:space="preserve">
|
||||
<source>Forward messages without files?</source>
|
||||
<target>Переслать сообщения без файлов?</target>
|
||||
<note>alert message</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Forward up to 20 messages at once." xml:space="preserve">
|
||||
<source>Forward up to 20 messages at once.</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Forwarded" xml:space="preserve">
|
||||
<source>Forwarded</source>
|
||||
<target>Переслано</target>
|
||||
@@ -3380,7 +3319,6 @@ This is your own one-time link!</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="Forwarding %lld messages" xml:space="preserve">
|
||||
<source>Forwarding %lld messages</source>
|
||||
<target>Пересылка %lld сообщений</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Forwarding server %@ failed to connect to destination server %@. Please try later." xml:space="preserve">
|
||||
@@ -3679,7 +3617,6 @@ Error: %2$@</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="IP address" xml:space="preserve">
|
||||
<source>IP address</source>
|
||||
<target>IP адрес</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="If you can't meet in person, show QR code in a video call, or share the link." xml:space="preserve">
|
||||
@@ -3757,11 +3694,6 @@ Error: %2$@</source>
|
||||
<target>Импорт архива</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Improved delivery, reduced traffic usage. More improvements are coming soon!" xml:space="preserve">
|
||||
<source>Improved delivery, reduced traffic usage.
|
||||
More improvements are coming soon!</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Improved message delivery" xml:space="preserve">
|
||||
<source>Improved message delivery</source>
|
||||
<target>Улучшенная доставка сообщений</target>
|
||||
@@ -4334,7 +4266,6 @@ This is your link for group %@!</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="Message shape" xml:space="preserve">
|
||||
<source>Message shape</source>
|
||||
<target>Форма сообщений</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Message source remains private." xml:space="preserve">
|
||||
@@ -4389,7 +4320,6 @@ This is your link for group %@!</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="Messages were deleted after you selected them." xml:space="preserve">
|
||||
<source>Messages were deleted after you selected them.</source>
|
||||
<target>Сообщения были удалены после того, как вы их выбрали.</target>
|
||||
<note>alert message</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Messages, files and calls are protected by **end-to-end encryption** with perfect forward secrecy, repudiation and break-in recovery." xml:space="preserve">
|
||||
@@ -4547,16 +4477,6 @@ This is your link for group %@!</source>
|
||||
<target>Новый Код</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="New SOCKS credentials will be used every time you start the app." xml:space="preserve">
|
||||
<source>New SOCKS credentials will be used every time you start the app.</source>
|
||||
<target>Новые учетные данные SOCKS будут использоваться при каждом запуске приложения.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="New SOCKS credentials will be used for each server." xml:space="preserve">
|
||||
<source>New SOCKS credentials will be used for each server.</source>
|
||||
<target>Новые учетные данные SOCKS будут использоваться для каждого сервера.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="New chat" xml:space="preserve">
|
||||
<source>New chat</source>
|
||||
<target>Новый чат</target>
|
||||
@@ -4677,16 +4597,6 @@ This is your link for group %@!</source>
|
||||
<target>Нет интернет-соединения</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="No permission to record speech" xml:space="preserve">
|
||||
<source>No permission to record speech</source>
|
||||
<target>Нет разрешения на запись речи</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="No permission to record video" xml:space="preserve">
|
||||
<source>No permission to record video</source>
|
||||
<target>Нет разрешения на запись видео</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="No permission to record voice message" xml:space="preserve">
|
||||
<source>No permission to record voice message</source>
|
||||
<target>Нет разрешения для записи голосового сообщения</target>
|
||||
@@ -4709,7 +4619,6 @@ This is your link for group %@!</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="Nothing to forward!" xml:space="preserve">
|
||||
<source>Nothing to forward!</source>
|
||||
<target>Нет сообщений, которые можно переслать!</target>
|
||||
<note>alert title</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Notifications" xml:space="preserve">
|
||||
@@ -4938,8 +4847,6 @@ Requires compatible VPN.</source>
|
||||
<trans-unit id="Other file errors: %@" xml:space="preserve">
|
||||
<source>Other file errors:
|
||||
%@</source>
|
||||
<target>Другие ошибки файлов:
|
||||
%@</target>
|
||||
<note>alert message</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="PING count" xml:space="preserve">
|
||||
@@ -4979,7 +4886,6 @@ Requires compatible VPN.</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="Password" xml:space="preserve">
|
||||
<source>Password</source>
|
||||
<target>Пароль</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Password to show" xml:space="preserve">
|
||||
@@ -5133,7 +5039,6 @@ Error: %@</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="Port" xml:space="preserve">
|
||||
<source>Port</source>
|
||||
<target>Порт</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Possibly, certificate fingerprint in server address is incorrect" xml:space="preserve">
|
||||
@@ -5325,7 +5230,6 @@ Enable in *Network & servers* settings.</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="Proxy requires password" xml:space="preserve">
|
||||
<source>Proxy requires password</source>
|
||||
<target>Прокси требует пароль</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Push notifications" xml:space="preserve">
|
||||
@@ -5551,7 +5455,6 @@ Enable in *Network & servers* settings.</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="Remove archive?" xml:space="preserve">
|
||||
<source>Remove archive?</source>
|
||||
<target>Удалить архив?</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Remove image" xml:space="preserve">
|
||||
@@ -5736,7 +5639,6 @@ Enable in *Network & servers* settings.</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="SOCKS proxy" xml:space="preserve">
|
||||
<source>SOCKS proxy</source>
|
||||
<target>SOCKS прокси</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Safely receive files" xml:space="preserve">
|
||||
@@ -5827,7 +5729,6 @@ Enable in *Network & servers* settings.</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="Save your profile?" xml:space="preserve">
|
||||
<source>Save your profile?</source>
|
||||
<target>Сохранить ваш профиль?</target>
|
||||
<note>alert title</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Saved" xml:space="preserve">
|
||||
@@ -5852,7 +5753,6 @@ Enable in *Network & servers* settings.</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="Saving %lld messages" xml:space="preserve">
|
||||
<source>Saving %lld messages</source>
|
||||
<target>Сохранение %lld сообщений</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Scale" xml:space="preserve">
|
||||
@@ -5937,7 +5837,6 @@ Enable in *Network & servers* settings.</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="Select chat profile" xml:space="preserve">
|
||||
<source>Select chat profile</source>
|
||||
<target>Выберите профиль чата</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Selected %lld" xml:space="preserve">
|
||||
@@ -6155,11 +6054,6 @@ Enable in *Network & servers* settings.</source>
|
||||
<target>Отправлено через прокси</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Server" xml:space="preserve">
|
||||
<source>Server</source>
|
||||
<target>Сервер</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Server address" xml:space="preserve">
|
||||
<source>Server address</source>
|
||||
<target>Адрес сервера</target>
|
||||
@@ -6282,7 +6176,6 @@ Enable in *Network & servers* settings.</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="Settings were changed." xml:space="preserve">
|
||||
<source>Settings were changed.</source>
|
||||
<target>Настройки были изменены.</target>
|
||||
<note>alert message</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Shape profile images" xml:space="preserve">
|
||||
@@ -6322,7 +6215,6 @@ Enable in *Network & servers* settings.</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="Share profile" xml:space="preserve">
|
||||
<source>Share profile</source>
|
||||
<target>Поделиться профилем</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Share this 1-time invite link" xml:space="preserve">
|
||||
@@ -6460,10 +6352,6 @@ Enable in *Network & servers* settings.</source>
|
||||
<target>SimpleX одноразовая ссылка</target>
|
||||
<note>simplex link type</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="SimpleX protocols reviewed by Trail of Bits." xml:space="preserve">
|
||||
<source>SimpleX protocols reviewed by Trail of Bits.</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Simplified incognito mode" xml:space="preserve">
|
||||
<source>Simplified incognito mode</source>
|
||||
<target>Упрощенный режим Инкогнито</target>
|
||||
@@ -6496,7 +6384,6 @@ Enable in *Network & servers* settings.</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="Some app settings were not migrated." xml:space="preserve">
|
||||
<source>Some app settings were not migrated.</source>
|
||||
<target>Некоторые настройки приложения не были перенесены.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Some file(s) were not exported:" xml:space="preserve">
|
||||
@@ -6639,14 +6526,6 @@ Enable in *Network & servers* settings.</source>
|
||||
<target>Поддержать SimpleX Chat</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Switch audio and video during the call." xml:space="preserve">
|
||||
<source>Switch audio and video during the call.</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Switch chat profile for 1-time invitations." xml:space="preserve">
|
||||
<source>Switch chat profile for 1-time invitations.</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="System" xml:space="preserve">
|
||||
<source>System</source>
|
||||
<target>Системная</target>
|
||||
@@ -6684,7 +6563,6 @@ Enable in *Network & servers* settings.</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="Tail" xml:space="preserve">
|
||||
<source>Tail</source>
|
||||
<target>Хвост</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Take picture" xml:space="preserve">
|
||||
@@ -6881,7 +6759,6 @@ It can happen because of some bug or when the connection is compromised.</source
|
||||
</trans-unit>
|
||||
<trans-unit id="The uploaded database archive will be permanently removed from the servers." xml:space="preserve">
|
||||
<source>The uploaded database archive will be permanently removed from the servers.</source>
|
||||
<target>Загруженный архив базы данных будет навсегда удален с серверов.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Themes" xml:space="preserve">
|
||||
@@ -7011,16 +6888,6 @@ You will be prompted to complete authentication before this feature is enabled.<
|
||||
Вам будет нужно пройти аутентификацию для включения блокировки.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="To record speech please grant permission to use Microphone." xml:space="preserve">
|
||||
<source>To record speech please grant permission to use Microphone.</source>
|
||||
<target>Для записи речи, пожалуйста, дайте разрешение на использование микрофона.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="To record video please grant permission to use Camera." xml:space="preserve">
|
||||
<source>To record video please grant permission to use Camera.</source>
|
||||
<target>Для записи видео, пожалуйста, дайте разрешение на использование камеры.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="To record voice message please grant permission to use Microphone." xml:space="preserve">
|
||||
<source>To record voice message please grant permission to use Microphone.</source>
|
||||
<target>Для записи голосового сообщения, пожалуйста разрешите доступ к микрофону.</target>
|
||||
@@ -7290,7 +7157,6 @@ To connect, please ask your contact to create another connection link and check
|
||||
</trans-unit>
|
||||
<trans-unit id="Use SOCKS proxy" xml:space="preserve">
|
||||
<source>Use SOCKS proxy</source>
|
||||
<target>Использовать SOCKS прокси</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Use SimpleX Chat servers?" xml:space="preserve">
|
||||
@@ -7358,6 +7224,11 @@ To connect, please ask your contact to create another connection link and check
|
||||
<target>Используйте приложение одной рукой.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="User profile" xml:space="preserve">
|
||||
<source>User profile</source>
|
||||
<target>Профиль чата</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="User selection" xml:space="preserve">
|
||||
<source>User selection</source>
|
||||
<target>Выбор пользователя</target>
|
||||
@@ -7365,7 +7236,6 @@ To connect, please ask your contact to create another connection link and check
|
||||
</trans-unit>
|
||||
<trans-unit id="Username" xml:space="preserve">
|
||||
<source>Username</source>
|
||||
<target>Имя пользователя</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Using SimpleX Chat servers." xml:space="preserve">
|
||||
@@ -7979,7 +7849,6 @@ Repeat connection request?</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="Your chat preferences" xml:space="preserve">
|
||||
<source>Your chat preferences</source>
|
||||
<target>Ваши настройки чата</target>
|
||||
<note>alert title</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Your chat profiles" xml:space="preserve">
|
||||
@@ -7989,7 +7858,6 @@ Repeat connection request?</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="Your connection was moved to %@ but an unexpected error occurred while redirecting you to the profile." xml:space="preserve">
|
||||
<source>Your connection was moved to %@ but an unexpected error occurred while redirecting you to the profile.</source>
|
||||
<target>Соединение было перемещено на %@, но при смене профиля произошла неожиданная ошибка.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Your contact sent a file that is larger than currently supported maximum size (%@)." xml:space="preserve">
|
||||
@@ -8009,7 +7877,6 @@ Repeat connection request?</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="Your credentials may be sent unencrypted." xml:space="preserve">
|
||||
<source>Your credentials may be sent unencrypted.</source>
|
||||
<target>Ваши учетные данные могут быть отправлены в незашифрованном виде.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Your current chat database will be DELETED and REPLACED with the imported one." xml:space="preserve">
|
||||
@@ -8049,7 +7916,6 @@ Repeat connection request?</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="Your profile was changed. If you save it, the updated profile will be sent to all your contacts." xml:space="preserve">
|
||||
<source>Your profile was changed. If you save it, the updated profile will be sent to all your contacts.</source>
|
||||
<target>Ваш профиль был изменен. Если вы сохраните его, обновленный профиль будет отправлен всем вашим контактам.</target>
|
||||
<note>alert message</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Your profile, contacts and delivered messages are stored on your device." xml:space="preserve">
|
||||
|
||||
@@ -884,10 +884,6 @@
|
||||
<target>รหัสผ่านแอปจะถูกแทนที่ด้วยรหัสผ่านที่ทำลายตัวเอง</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="App session" xml:space="preserve">
|
||||
<source>App session</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="App version" xml:space="preserve">
|
||||
<source>App version</source>
|
||||
<target>เวอร์ชันแอป</target>
|
||||
@@ -1014,18 +1010,10 @@
|
||||
<target>แฮชข้อความไม่ดี</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Better calls" xml:space="preserve">
|
||||
<source>Better calls</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Better groups" xml:space="preserve">
|
||||
<source>Better groups</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Better message dates." xml:space="preserve">
|
||||
<source>Better message dates.</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Better messages" xml:space="preserve">
|
||||
<source>Better messages</source>
|
||||
<target>ข้อความที่ดีขึ้น</target>
|
||||
@@ -1035,18 +1023,6 @@
|
||||
<source>Better networking</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Better notifications" xml:space="preserve">
|
||||
<source>Better notifications</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Better security ✅" xml:space="preserve">
|
||||
<source>Better security ✅</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Better user experience" xml:space="preserve">
|
||||
<source>Better user experience</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Black" xml:space="preserve">
|
||||
<source>Black</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
@@ -1307,11 +1283,6 @@
|
||||
<source>Chat preferences were changed.</source>
|
||||
<note>alert message</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Chat profile" xml:space="preserve">
|
||||
<source>Chat profile</source>
|
||||
<target>โปรไฟล์ผู้ใช้</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Chat theme" xml:space="preserve">
|
||||
<source>Chat theme</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
@@ -1785,10 +1756,6 @@ This is your own one-time link!</source>
|
||||
<target>เวลาที่กําหนดเอง</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Customizable message shape." xml:space="preserve">
|
||||
<source>Customizable message shape.</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Customize theme" xml:space="preserve">
|
||||
<source>Customize theme</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
@@ -2075,10 +2042,6 @@ This is your own one-time link!</source>
|
||||
<target>ลบฐานข้อมูลเก่า?</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Delete or moderate up to 200 messages." xml:space="preserve">
|
||||
<source>Delete or moderate up to 200 messages.</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Delete pending connection?" xml:space="preserve">
|
||||
<source>Delete pending connection?</source>
|
||||
<target>ลบการเชื่อมต่อที่รอดำเนินการหรือไม่?</target>
|
||||
@@ -3119,10 +3082,6 @@ This is your own one-time link!</source>
|
||||
<source>Forward messages without files?</source>
|
||||
<note>alert message</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Forward up to 20 messages at once." xml:space="preserve">
|
||||
<source>Forward up to 20 messages at once.</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Forwarded" xml:space="preserve">
|
||||
<source>Forwarded</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
@@ -3489,11 +3448,6 @@ Error: %2$@</source>
|
||||
<source>Importing archive</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Improved delivery, reduced traffic usage. More improvements are coming soon!" xml:space="preserve">
|
||||
<source>Improved delivery, reduced traffic usage.
|
||||
More improvements are coming soon!</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Improved message delivery" xml:space="preserve">
|
||||
<source>Improved message delivery</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
@@ -4219,14 +4173,6 @@ This is your link for group %@!</source>
|
||||
<target>รหัสผ่านใหม่</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="New SOCKS credentials will be used every time you start the app." xml:space="preserve">
|
||||
<source>New SOCKS credentials will be used every time you start the app.</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="New SOCKS credentials will be used for each server." xml:space="preserve">
|
||||
<source>New SOCKS credentials will be used for each server.</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="New chat" xml:space="preserve">
|
||||
<source>New chat</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
@@ -4339,14 +4285,6 @@ This is your link for group %@!</source>
|
||||
<source>No network connection</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="No permission to record speech" xml:space="preserve">
|
||||
<source>No permission to record speech</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="No permission to record video" xml:space="preserve">
|
||||
<source>No permission to record video</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="No permission to record voice message" xml:space="preserve">
|
||||
<source>No permission to record voice message</source>
|
||||
<target>ไม่อนุญาตให้บันทึกข้อความเสียง</target>
|
||||
@@ -5702,10 +5640,6 @@ Enable in *Network & servers* settings.</source>
|
||||
<source>Sent via proxy</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Server" xml:space="preserve">
|
||||
<source>Server</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Server address" xml:space="preserve">
|
||||
<source>Server address</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
@@ -5981,10 +5915,6 @@ Enable in *Network & servers* settings.</source>
|
||||
<target>คำเชิญ SimpleX แบบครั้งเดียว</target>
|
||||
<note>simplex link type</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="SimpleX protocols reviewed by Trail of Bits." xml:space="preserve">
|
||||
<source>SimpleX protocols reviewed by Trail of Bits.</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Simplified incognito mode" xml:space="preserve">
|
||||
<source>Simplified incognito mode</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
@@ -6143,14 +6073,6 @@ Enable in *Network & servers* settings.</source>
|
||||
<target>สนับสนุน SimpleX แชท</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Switch audio and video during the call." xml:space="preserve">
|
||||
<source>Switch audio and video during the call.</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Switch chat profile for 1-time invitations." xml:space="preserve">
|
||||
<source>Switch chat profile for 1-time invitations.</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="System" xml:space="preserve">
|
||||
<source>System</source>
|
||||
<target>ระบบ</target>
|
||||
@@ -6491,14 +6413,6 @@ You will be prompted to complete authentication before this feature is enabled.<
|
||||
คุณจะได้รับแจ้งให้ยืนยันตัวตนให้เสร็จสมบูรณ์ก่อนที่จะเปิดใช้งานคุณลักษณะนี้</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="To record speech please grant permission to use Microphone." xml:space="preserve">
|
||||
<source>To record speech please grant permission to use Microphone.</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="To record video please grant permission to use Camera." xml:space="preserve">
|
||||
<source>To record video please grant permission to use Camera.</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="To record voice message please grant permission to use Microphone." xml:space="preserve">
|
||||
<source>To record voice message please grant permission to use Microphone.</source>
|
||||
<target>ในการบันทึกข้อความเสียง โปรดให้สิทธิ์ในการใช้ไมโครโฟน</target>
|
||||
@@ -6806,6 +6720,11 @@ To connect, please ask your contact to create another connection link and check
|
||||
<source>Use the app with one hand.</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="User profile" xml:space="preserve">
|
||||
<source>User profile</source>
|
||||
<target>โปรไฟล์ผู้ใช้</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="User selection" xml:space="preserve">
|
||||
<source>User selection</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -939,10 +939,6 @@
|
||||
<target>Пароль програми замінено на пароль самознищення.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="App session" xml:space="preserve">
|
||||
<source>App session</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="App version" xml:space="preserve">
|
||||
<source>App version</source>
|
||||
<target>Версія програми</target>
|
||||
@@ -1077,19 +1073,11 @@
|
||||
<target>Поганий хеш повідомлення</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Better calls" xml:space="preserve">
|
||||
<source>Better calls</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Better groups" xml:space="preserve">
|
||||
<source>Better groups</source>
|
||||
<target>Кращі групи</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Better message dates." xml:space="preserve">
|
||||
<source>Better message dates.</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Better messages" xml:space="preserve">
|
||||
<source>Better messages</source>
|
||||
<target>Кращі повідомлення</target>
|
||||
@@ -1100,18 +1088,6 @@
|
||||
<target>Краща мережа</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Better notifications" xml:space="preserve">
|
||||
<source>Better notifications</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Better security ✅" xml:space="preserve">
|
||||
<source>Better security ✅</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Better user experience" xml:space="preserve">
|
||||
<source>Better user experience</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Black" xml:space="preserve">
|
||||
<source>Black</source>
|
||||
<target>Чорний</target>
|
||||
@@ -1397,11 +1373,6 @@
|
||||
<source>Chat preferences were changed.</source>
|
||||
<note>alert message</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Chat profile" xml:space="preserve">
|
||||
<source>Chat profile</source>
|
||||
<target>Профіль користувача</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Chat theme" xml:space="preserve">
|
||||
<source>Chat theme</source>
|
||||
<target>Тема чату</target>
|
||||
@@ -1930,10 +1901,6 @@ This is your own one-time link!</source>
|
||||
<target>Індивідуальний час</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Customizable message shape." xml:space="preserve">
|
||||
<source>Customizable message shape.</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Customize theme" xml:space="preserve">
|
||||
<source>Customize theme</source>
|
||||
<target>Налаштувати тему</target>
|
||||
@@ -2228,10 +2195,6 @@ This is your own one-time link!</source>
|
||||
<target>Видалити стару базу даних?</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Delete or moderate up to 200 messages." xml:space="preserve">
|
||||
<source>Delete or moderate up to 200 messages.</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Delete pending connection?" xml:space="preserve">
|
||||
<source>Delete pending connection?</source>
|
||||
<target>Видалити очікуване з'єднання?</target>
|
||||
@@ -3344,10 +3307,6 @@ This is your own one-time link!</source>
|
||||
<source>Forward messages without files?</source>
|
||||
<note>alert message</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Forward up to 20 messages at once." xml:space="preserve">
|
||||
<source>Forward up to 20 messages at once.</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Forwarded" xml:space="preserve">
|
||||
<source>Forwarded</source>
|
||||
<target>Переслано</target>
|
||||
@@ -3735,11 +3694,6 @@ Error: %2$@</source>
|
||||
<target>Імпорт архіву</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Improved delivery, reduced traffic usage. More improvements are coming soon!" xml:space="preserve">
|
||||
<source>Improved delivery, reduced traffic usage.
|
||||
More improvements are coming soon!</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Improved message delivery" xml:space="preserve">
|
||||
<source>Improved message delivery</source>
|
||||
<target>Покращена доставка повідомлень</target>
|
||||
@@ -4523,14 +4477,6 @@ This is your link for group %@!</source>
|
||||
<target>Новий пароль</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="New SOCKS credentials will be used every time you start the app." xml:space="preserve">
|
||||
<source>New SOCKS credentials will be used every time you start the app.</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="New SOCKS credentials will be used for each server." xml:space="preserve">
|
||||
<source>New SOCKS credentials will be used for each server.</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="New chat" xml:space="preserve">
|
||||
<source>New chat</source>
|
||||
<target>Новий чат</target>
|
||||
@@ -4651,14 +4597,6 @@ This is your link for group %@!</source>
|
||||
<target>Немає підключення до мережі</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="No permission to record speech" xml:space="preserve">
|
||||
<source>No permission to record speech</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="No permission to record video" xml:space="preserve">
|
||||
<source>No permission to record video</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="No permission to record voice message" xml:space="preserve">
|
||||
<source>No permission to record voice message</source>
|
||||
<target>Немає дозволу на запис голосового повідомлення</target>
|
||||
@@ -6116,10 +6054,6 @@ Enable in *Network & servers* settings.</source>
|
||||
<target>Відправлено через проксі</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Server" xml:space="preserve">
|
||||
<source>Server</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Server address" xml:space="preserve">
|
||||
<source>Server address</source>
|
||||
<target>Адреса сервера</target>
|
||||
@@ -6418,10 +6352,6 @@ Enable in *Network & servers* settings.</source>
|
||||
<target>Одноразове запрошення SimpleX</target>
|
||||
<note>simplex link type</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="SimpleX protocols reviewed by Trail of Bits." xml:space="preserve">
|
||||
<source>SimpleX protocols reviewed by Trail of Bits.</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Simplified incognito mode" xml:space="preserve">
|
||||
<source>Simplified incognito mode</source>
|
||||
<target>Спрощений режим інкогніто</target>
|
||||
@@ -6596,14 +6526,6 @@ Enable in *Network & servers* settings.</source>
|
||||
<target>Підтримка чату SimpleX</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Switch audio and video during the call." xml:space="preserve">
|
||||
<source>Switch audio and video during the call.</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Switch chat profile for 1-time invitations." xml:space="preserve">
|
||||
<source>Switch chat profile for 1-time invitations.</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="System" xml:space="preserve">
|
||||
<source>System</source>
|
||||
<target>Система</target>
|
||||
@@ -6966,14 +6888,6 @@ You will be prompted to complete authentication before this feature is enabled.<
|
||||
Перед увімкненням цієї функції вам буде запропоновано пройти автентифікацію.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="To record speech please grant permission to use Microphone." xml:space="preserve">
|
||||
<source>To record speech please grant permission to use Microphone.</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="To record video please grant permission to use Camera." xml:space="preserve">
|
||||
<source>To record video please grant permission to use Camera.</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="To record voice message please grant permission to use Microphone." xml:space="preserve">
|
||||
<source>To record voice message please grant permission to use Microphone.</source>
|
||||
<target>Щоб записати голосове повідомлення, будь ласка, надайте дозвіл на використання мікрофону.</target>
|
||||
@@ -7310,6 +7224,11 @@ To connect, please ask your contact to create another connection link and check
|
||||
<target>Використовуйте додаток однією рукою.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="User profile" xml:space="preserve">
|
||||
<source>User profile</source>
|
||||
<target>Профіль користувача</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="User selection" xml:space="preserve">
|
||||
<source>User selection</source>
|
||||
<target>Вибір користувача</target>
|
||||
|
||||
@@ -939,10 +939,6 @@
|
||||
<target>应用程序密码被替换为自毁密码。</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="App session" xml:space="preserve">
|
||||
<source>App session</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="App version" xml:space="preserve">
|
||||
<source>App version</source>
|
||||
<target>应用程序版本</target>
|
||||
@@ -1077,19 +1073,11 @@
|
||||
<target>错误消息散列</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Better calls" xml:space="preserve">
|
||||
<source>Better calls</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Better groups" xml:space="preserve">
|
||||
<source>Better groups</source>
|
||||
<target>更佳的群组</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Better message dates." xml:space="preserve">
|
||||
<source>Better message dates.</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Better messages" xml:space="preserve">
|
||||
<source>Better messages</source>
|
||||
<target>更好的消息</target>
|
||||
@@ -1100,18 +1088,6 @@
|
||||
<target>更好的网络</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Better notifications" xml:space="preserve">
|
||||
<source>Better notifications</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Better security ✅" xml:space="preserve">
|
||||
<source>Better security ✅</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Better user experience" xml:space="preserve">
|
||||
<source>Better user experience</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Black" xml:space="preserve">
|
||||
<source>Black</source>
|
||||
<target>黑色</target>
|
||||
@@ -1397,11 +1373,6 @@
|
||||
<source>Chat preferences were changed.</source>
|
||||
<note>alert message</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Chat profile" xml:space="preserve">
|
||||
<source>Chat profile</source>
|
||||
<target>用户资料</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Chat theme" xml:space="preserve">
|
||||
<source>Chat theme</source>
|
||||
<target>聊天主题</target>
|
||||
@@ -1930,10 +1901,6 @@ This is your own one-time link!</source>
|
||||
<target>自定义时间</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Customizable message shape." xml:space="preserve">
|
||||
<source>Customizable message shape.</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Customize theme" xml:space="preserve">
|
||||
<source>Customize theme</source>
|
||||
<target>自定义主题</target>
|
||||
@@ -2228,10 +2195,6 @@ This is your own one-time link!</source>
|
||||
<target>删除旧数据库吗?</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Delete or moderate up to 200 messages." xml:space="preserve">
|
||||
<source>Delete or moderate up to 200 messages.</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Delete pending connection?" xml:space="preserve">
|
||||
<source>Delete pending connection?</source>
|
||||
<target>删除待定连接?</target>
|
||||
@@ -3344,10 +3307,6 @@ This is your own one-time link!</source>
|
||||
<source>Forward messages without files?</source>
|
||||
<note>alert message</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Forward up to 20 messages at once." xml:space="preserve">
|
||||
<source>Forward up to 20 messages at once.</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Forwarded" xml:space="preserve">
|
||||
<source>Forwarded</source>
|
||||
<target>已转发</target>
|
||||
@@ -3735,11 +3694,6 @@ Error: %2$@</source>
|
||||
<target>正在导入存档</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Improved delivery, reduced traffic usage. More improvements are coming soon!" xml:space="preserve">
|
||||
<source>Improved delivery, reduced traffic usage.
|
||||
More improvements are coming soon!</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Improved message delivery" xml:space="preserve">
|
||||
<source>Improved message delivery</source>
|
||||
<target>改进了消息传递</target>
|
||||
@@ -4523,14 +4477,6 @@ This is your link for group %@!</source>
|
||||
<target>新密码</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="New SOCKS credentials will be used every time you start the app." xml:space="preserve">
|
||||
<source>New SOCKS credentials will be used every time you start the app.</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="New SOCKS credentials will be used for each server." xml:space="preserve">
|
||||
<source>New SOCKS credentials will be used for each server.</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="New chat" xml:space="preserve">
|
||||
<source>New chat</source>
|
||||
<target>新聊天</target>
|
||||
@@ -4651,14 +4597,6 @@ This is your link for group %@!</source>
|
||||
<target>无网络连接</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="No permission to record speech" xml:space="preserve">
|
||||
<source>No permission to record speech</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="No permission to record video" xml:space="preserve">
|
||||
<source>No permission to record video</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="No permission to record voice message" xml:space="preserve">
|
||||
<source>No permission to record voice message</source>
|
||||
<target>没有录制语音消息的权限</target>
|
||||
@@ -6116,10 +6054,6 @@ Enable in *Network & servers* settings.</source>
|
||||
<target>通过代理发送</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Server" xml:space="preserve">
|
||||
<source>Server</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Server address" xml:space="preserve">
|
||||
<source>Server address</source>
|
||||
<target>服务器地址</target>
|
||||
@@ -6418,10 +6352,6 @@ Enable in *Network & servers* settings.</source>
|
||||
<target>SimpleX 一次性邀请</target>
|
||||
<note>simplex link type</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="SimpleX protocols reviewed by Trail of Bits." xml:space="preserve">
|
||||
<source>SimpleX protocols reviewed by Trail of Bits.</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Simplified incognito mode" xml:space="preserve">
|
||||
<source>Simplified incognito mode</source>
|
||||
<target>简化的隐身模式</target>
|
||||
@@ -6596,14 +6526,6 @@ Enable in *Network & servers* settings.</source>
|
||||
<target>支持 SimpleX Chat</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Switch audio and video during the call." xml:space="preserve">
|
||||
<source>Switch audio and video during the call.</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Switch chat profile for 1-time invitations." xml:space="preserve">
|
||||
<source>Switch chat profile for 1-time invitations.</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="System" xml:space="preserve">
|
||||
<source>System</source>
|
||||
<target>系统</target>
|
||||
@@ -6966,14 +6888,6 @@ You will be prompted to complete authentication before this feature is enabled.<
|
||||
在启用此功能之前,系统将提示您完成身份验证。</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="To record speech please grant permission to use Microphone." xml:space="preserve">
|
||||
<source>To record speech please grant permission to use Microphone.</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="To record video please grant permission to use Camera." xml:space="preserve">
|
||||
<source>To record video please grant permission to use Camera.</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="To record voice message please grant permission to use Microphone." xml:space="preserve">
|
||||
<source>To record voice message please grant permission to use Microphone.</source>
|
||||
<target>请授权使用麦克风以录制语音消息。</target>
|
||||
@@ -7310,6 +7224,11 @@ To connect, please ask your contact to create another connection link and check
|
||||
<target>用一只手使用应用程序。</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="User profile" xml:space="preserve">
|
||||
<source>User profile</source>
|
||||
<target>用户资料</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="User selection" xml:space="preserve">
|
||||
<source>User selection</source>
|
||||
<target>用户选择</target>
|
||||
|
||||
@@ -26,7 +26,7 @@ enum NSENotification {
|
||||
case nse(UNMutableNotificationContent)
|
||||
case callkit(RcvCallInvitation)
|
||||
case empty
|
||||
case msgInfo(NtfMsgAckInfo)
|
||||
case msgInfo(NtfMsgInfo)
|
||||
|
||||
var isCallInvitation: Bool {
|
||||
switch self {
|
||||
@@ -119,9 +119,7 @@ class NotificationService: UNNotificationServiceExtension {
|
||||
var threadId: UUID? = NSEThreads.shared.newThread()
|
||||
var notificationInfo: NtfMessages?
|
||||
var receiveEntityId: String?
|
||||
var receiveConnId: String?
|
||||
var expectedMessage: String?
|
||||
var allowedGetNextAttempts: Int = 3
|
||||
// return true if the message is taken - it prevents sending it to another NotificationService instance for processing
|
||||
var shouldProcessNtf = false
|
||||
var appSubscriber: AppSubscriber?
|
||||
@@ -193,21 +191,17 @@ class NotificationService: UNNotificationServiceExtension {
|
||||
let dbStatus = startChat()
|
||||
if case .ok = dbStatus,
|
||||
let ntfInfo = apiGetNtfMessage(nonce: nonce, encNtfInfo: encNtfInfo) {
|
||||
logger.debug("NotificationService: receiveNtfMessages: apiGetNtfMessage \(String(describing: ntfInfo.receivedMsg_ == nil ? 0 : 1))")
|
||||
logger.debug("NotificationService: receiveNtfMessages: apiGetNtfMessage \(String(describing: ntfInfo.ntfMessage_ == nil ? 0 : 1))")
|
||||
if let connEntity = ntfInfo.connEntity_ {
|
||||
setBestAttemptNtf(
|
||||
ntfInfo.ntfsEnabled
|
||||
? .nse(createConnectionEventNtf(ntfInfo.user, connEntity))
|
||||
: .empty
|
||||
)
|
||||
if let id = connEntity.id, ntfInfo.expectedMsg_ != nil {
|
||||
if let id = connEntity.id, ntfInfo.msgTs != nil {
|
||||
notificationInfo = ntfInfo
|
||||
receiveEntityId = id
|
||||
receiveConnId = connEntity.conn.agentConnId
|
||||
let expectedMsgId = ntfInfo.expectedMsg_?.msgId
|
||||
let receivedMsgId = ntfInfo.receivedMsg_?.msgId
|
||||
logger.debug("NotificationService: receiveNtfMessages: expectedMsgId = \(expectedMsgId ?? "nil", privacy: .private), receivedMsgId = \(receivedMsgId ?? "nil", privacy: .private)")
|
||||
expectedMessage = expectedMsgId
|
||||
expectedMessage = ntfInfo.ntfMessage_.flatMap { $0.msgId }
|
||||
shouldProcessNtf = true
|
||||
return
|
||||
}
|
||||
@@ -225,34 +219,22 @@ class NotificationService: UNNotificationServiceExtension {
|
||||
}
|
||||
|
||||
func processReceivedNtf(_ ntf: NSENotification) -> Bool {
|
||||
guard let ntfInfo = notificationInfo, let expectedMsgTs = ntfInfo.expectedMsg_?.msgTs else { return false }
|
||||
guard let ntfInfo = notificationInfo, let msgTs = ntfInfo.msgTs else { return false }
|
||||
if !ntfInfo.user.showNotifications {
|
||||
self.setBestAttemptNtf(.empty)
|
||||
}
|
||||
if case let .msgInfo(info) = ntf {
|
||||
if info.msgId == expectedMessage {
|
||||
expectedMessage = nil
|
||||
logger.debug("NotificationService processNtf: msgInfo msgId = \(info.msgId, privacy: .private): expected")
|
||||
logger.debug("NotificationService processNtf: msgInfo")
|
||||
self.deliverBestAttemptNtf()
|
||||
return true
|
||||
} else if let msgTs = info.msgTs_, msgTs > expectedMsgTs {
|
||||
logger.debug("NotificationService processNtf: msgInfo msgId = \(info.msgId, privacy: .private): unexpected msgInfo, let other instance to process it, stopping this one")
|
||||
} else if info.msgTs > msgTs {
|
||||
logger.debug("NotificationService processNtf: unexpected msgInfo, let other instance to process it, stopping this one")
|
||||
self.deliverBestAttemptNtf()
|
||||
return false
|
||||
} else if allowedGetNextAttempts > 0, let receiveConnId = receiveConnId {
|
||||
logger.debug("NotificationService processNtf: msgInfo msgId = \(info.msgId, privacy: .private): unexpected msgInfo, get next message")
|
||||
allowedGetNextAttempts -= 1
|
||||
if let receivedMsg = apiGetConnNtfMessage(connId: receiveConnId) {
|
||||
logger.debug("NotificationService processNtf, on apiGetConnNtfMessage: msgInfo msgId = \(info.msgId, privacy: .private), receivedMsg msgId = \(receivedMsg.msgId, privacy: .private)")
|
||||
return true
|
||||
} else {
|
||||
logger.debug("NotificationService processNtf, on apiGetConnNtfMessage: msgInfo msgId = \(info.msgId, privacy: .private): no next message, deliver best attempt")
|
||||
self.deliverBestAttemptNtf()
|
||||
return false
|
||||
}
|
||||
} else {
|
||||
logger.debug("NotificationService processNtf: msgInfo msgId = \(info.msgId, privacy: .private): unknown message, let other instance to process it")
|
||||
self.deliverBestAttemptNtf()
|
||||
logger.debug("NotificationService processNtf: unknown message, let other instance to process it")
|
||||
return false
|
||||
}
|
||||
} else if ntfInfo.user.showNotifications {
|
||||
@@ -710,9 +692,9 @@ func apiGetNtfMessage(nonce: String, encNtfInfo: String) -> NtfMessages? {
|
||||
return nil
|
||||
}
|
||||
let r = sendSimpleXCmd(.apiGetNtfMessage(nonce: nonce, encNtfInfo: encNtfInfo))
|
||||
if case let .ntfMessages(user, connEntity_, expectedMsg_, receivedMsg_) = r, let user = user {
|
||||
logger.debug("apiGetNtfMessage response ntfMessages: \(receivedMsg_ == nil ? 0 : 1)")
|
||||
return NtfMessages(user: user, connEntity_: connEntity_, expectedMsg_: expectedMsg_, receivedMsg_: receivedMsg_)
|
||||
if case let .ntfMessages(user, connEntity_, msgTs, ntfMessage_) = r, let user = user {
|
||||
logger.debug("apiGetNtfMessage response ntfMessages: \(ntfMessage_ == nil ? 0 : 1)")
|
||||
return NtfMessages(user: user, connEntity_: connEntity_, msgTs: msgTs, ntfMessage_: ntfMessage_)
|
||||
} else if case let .chatCmdError(_, error) = r {
|
||||
logger.debug("apiGetNtfMessage error response: \(String.init(describing: error))")
|
||||
} else {
|
||||
@@ -721,20 +703,6 @@ func apiGetNtfMessage(nonce: String, encNtfInfo: String) -> NtfMessages? {
|
||||
return nil
|
||||
}
|
||||
|
||||
func apiGetConnNtfMessage(connId: String) -> NtfMsgInfo? {
|
||||
guard apiGetActiveUser() != nil else {
|
||||
logger.debug("no active user")
|
||||
return nil
|
||||
}
|
||||
let r = sendSimpleXCmd(.apiGetConnNtfMessage(connId: connId))
|
||||
if case let .connNtfMessage(receivedMsg_) = r {
|
||||
logger.debug("apiGetConnNtfMessage response receivedMsg_: \(receivedMsg_ == nil ? 0 : 1)")
|
||||
return receivedMsg_
|
||||
}
|
||||
logger.debug("apiGetConnNtfMessage error: \(responseError(r))")
|
||||
return nil
|
||||
}
|
||||
|
||||
func apiReceiveFile(fileId: Int64, encrypted: Bool, inline: Bool? = nil) -> AChatItem? {
|
||||
let userApprovedRelays = !privacyAskToApproveRelaysGroupDefault.get()
|
||||
let r = sendSimpleXCmd(.receiveFile(fileId: fileId, userApprovedRelays: userApprovedRelays, encrypted: encrypted, inline: inline))
|
||||
@@ -772,8 +740,8 @@ func setNetworkConfig(_ cfg: NetCfg) throws {
|
||||
struct NtfMessages {
|
||||
var user: User
|
||||
var connEntity_: ConnectionEntity?
|
||||
var expectedMsg_: NtfMsgInfo?
|
||||
var receivedMsg_: NtfMsgInfo?
|
||||
var msgTs: Date?
|
||||
var ntfMessage_: NtfMsgInfo?
|
||||
|
||||
var ntfsEnabled: Bool {
|
||||
user.showNotifications && (connEntity_?.ntfsEnabled ?? false)
|
||||
|
||||
@@ -56,7 +56,7 @@
|
||||
"Invalid migration confirmation" = "Érvénytelen átköltöztetési visszaigazolás";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Keychain error" = "Kulcstartóhiba";
|
||||
"Keychain error" = "Kulcstartó hiba";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Large file!" = "Nagy fájl!";
|
||||
|
||||
@@ -1,9 +1,7 @@
|
||||
/* Bundle display name */
|
||||
"CFBundleDisplayName" = "SimpleX SE";
|
||||
|
||||
/* Bundle name */
|
||||
"CFBundleName" = "SimpleX SE";
|
||||
|
||||
/* Copyright (human-readable) */
|
||||
"NSHumanReadableCopyright" = "Telif Hakkı © 2024 SimpleX Chat. Tüm hakları saklıdır.";
|
||||
/*
|
||||
InfoPlist.strings
|
||||
SimpleX
|
||||
|
||||
Created by EP on 30/07/2024.
|
||||
Copyright © 2024 SimpleX Chat. All rights reserved.
|
||||
*/
|
||||
|
||||
@@ -1,111 +1,7 @@
|
||||
/* No comment provided by engineer. */
|
||||
"%@" = "%@";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"App is locked!" = "Uygulama kilitlendi!";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Cancel" = "İptal et";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Cannot access keychain to save database password" = "Veritabanı şifresini kaydetmek için Anahtar Zinciri'ne erişilemiyor";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Cannot forward message" = "Mesaj iletilemiyor";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Comment" = "Yorum";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Currently maximum supported file size is %@." = "Şu anki maksimum desteklenen dosya boyutu %@ kadardır.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Database downgrade required" = "Veritabanı sürüm düşürme gerekli";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Database encrypted!" = "Veritabanı şifrelendi!";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Database error" = "Veritabanı hatası";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Database passphrase is different from saved in the keychain." = "Veritabanı parolası Anahtar Zinciri'nde kayıtlı olandan farklıdır.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Database passphrase is required to open chat." = "Konuşmayı açmak için veri tabanı parolası gerekli.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Database upgrade required" = "Veritabanı yükseltmesi gerekli";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Error preparing file" = "Dosya hazırlanırken hata oluştu";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Error preparing message" = "Mesaj hazırlanırken hata oluştu";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Error: %@" = "Hata: %@";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"File error" = "Dosya hatası";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Incompatible database version" = "Uyumsuz veritabanı sürümü";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Invalid migration confirmation" = "Geçerli olmayan taşıma onayı";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Keychain error" = "Anahtarlık hatası";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Large file!" = "Büyük dosya!";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"No active profile" = "Aktif profil yok";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Ok" = "Tamam";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Open the app to downgrade the database." = "Veritabanının sürümünü düşürmek için uygulamayı açın.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Open the app to upgrade the database." = "Veritabanını güncellemek için uygulamayı açın.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Passphrase" = "Parola";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Please create a profile in the SimpleX app" = "Lütfen SimpleX uygulamasında bir profil oluşturun";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Selected chat preferences prohibit this message." = "Seçilen sohbet tercihleri bu mesajı yasakladı.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Sending a message takes longer than expected." = "Mesaj göndermek beklenenden daha uzun sürüyor.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Sending message…" = "Mesaj gönderiliyor…";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Share" = "Paylaş";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Slow network?" = "Ağ yavaş mı?";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Unknown database error: %@" = "Bilinmeyen veritabanı hatası: %@";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Unsupported format" = "Desteklenmeyen format";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Wait" = "Bekleyin";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Wrong database passphrase" = "Yanlış veritabanı parolası";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"You can allow sharing in Privacy & Security / SimpleX Lock settings." = "Gizlilik ve Güvenlik / SimpleX Lock ayarlarından paylaşıma izin verebilirsiniz.";
|
||||
/*
|
||||
Localizable.strings
|
||||
SimpleX
|
||||
|
||||
Created by EP on 30/07/2024.
|
||||
Copyright © 2024 SimpleX Chat. All rights reserved.
|
||||
*/
|
||||
|
||||
@@ -144,11 +144,6 @@
|
||||
5CFE0922282EEAF60002594B /* ZoomableScrollView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5CFE0920282EEAF60002594B /* ZoomableScrollView.swift */; };
|
||||
640417CD2B29B8C200CCB412 /* NewChatMenuButton.swift in Sources */ = {isa = PBXBuildFile; fileRef = 640417CB2B29B8C200CCB412 /* NewChatMenuButton.swift */; };
|
||||
640417CE2B29B8C200CCB412 /* NewChatView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 640417CC2B29B8C200CCB412 /* NewChatView.swift */; };
|
||||
640548A32CB56735005DE1E4 /* libgmpxx.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 6405489E2CB56735005DE1E4 /* libgmpxx.a */; };
|
||||
640548A42CB56735005DE1E4 /* libgmp.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 6405489F2CB56735005DE1E4 /* libgmp.a */; };
|
||||
640548A52CB56735005DE1E4 /* libffi.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 640548A02CB56735005DE1E4 /* libffi.a */; };
|
||||
640548A62CB56735005DE1E4 /* libHSsimplex-chat-6.1.0.7-EtclnBf7vnkLnhnDA1lixv-ghc9.6.3.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 640548A12CB56735005DE1E4 /* libHSsimplex-chat-6.1.0.7-EtclnBf7vnkLnhnDA1lixv-ghc9.6.3.a */; };
|
||||
640548A72CB56735005DE1E4 /* libHSsimplex-chat-6.1.0.7-EtclnBf7vnkLnhnDA1lixv.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 640548A22CB56735005DE1E4 /* libHSsimplex-chat-6.1.0.7-EtclnBf7vnkLnhnDA1lixv.a */; };
|
||||
6407BA83295DA85D0082BA18 /* CIInvalidJSONView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6407BA82295DA85D0082BA18 /* CIInvalidJSONView.swift */; };
|
||||
6419EC562AB8BC8B004A607A /* ContextInvitingContactMemberView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6419EC552AB8BC8B004A607A /* ContextInvitingContactMemberView.swift */; };
|
||||
6419EC582AB97507004A607A /* CIMemberCreatedContactView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6419EC572AB97507004A607A /* CIMemberCreatedContactView.swift */; };
|
||||
@@ -216,13 +211,17 @@
|
||||
CEE723F02C3D25C70009AE93 /* ShareView.swift in Sources */ = {isa = PBXBuildFile; fileRef = CEE723EF2C3D25C70009AE93 /* ShareView.swift */; };
|
||||
CEE723F22C3D25ED0009AE93 /* ShareModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = CEE723F12C3D25ED0009AE93 /* ShareModel.swift */; };
|
||||
CEEA861D2C2ABCB50084E1EA /* ReverseList.swift in Sources */ = {isa = PBXBuildFile; fileRef = CEEA861C2C2ABCB50084E1EA /* ReverseList.swift */; };
|
||||
CEFB2EDF2CA1BCC7004B1ECE /* SheetRepresentable.swift in Sources */ = {isa = PBXBuildFile; fileRef = CEFB2EDE2CA1BCC7004B1ECE /* SheetRepresentable.swift */; };
|
||||
D7197A1829AE89660055C05A /* WebRTC in Frameworks */ = {isa = PBXBuildFile; productRef = D7197A1729AE89660055C05A /* WebRTC */; };
|
||||
D72A9088294BD7A70047C86D /* NativeTextEditor.swift in Sources */ = {isa = PBXBuildFile; fileRef = D72A9087294BD7A70047C86D /* NativeTextEditor.swift */; };
|
||||
D741547829AF89AF0022400A /* StoreKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D741547729AF89AF0022400A /* StoreKit.framework */; };
|
||||
D741547A29AF90B00022400A /* PushKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D741547929AF90B00022400A /* PushKit.framework */; };
|
||||
D77B92DC2952372200A5A1CC /* SwiftyGif in Frameworks */ = {isa = PBXBuildFile; productRef = D77B92DB2952372200A5A1CC /* SwiftyGif */; };
|
||||
D7F0E33929964E7E0068AF69 /* LZString in Frameworks */ = {isa = PBXBuildFile; productRef = D7F0E33829964E7E0068AF69 /* LZString */; };
|
||||
E51B923B2CAB2B8800C212F2 /* libHSsimplex-chat-6.1.0.5-HWShuJBYoppEOt1hLB8GPU.a in Frameworks */ = {isa = PBXBuildFile; fileRef = E51B92362CAB2B8800C212F2 /* libHSsimplex-chat-6.1.0.5-HWShuJBYoppEOt1hLB8GPU.a */; };
|
||||
E51B923C2CAB2B8800C212F2 /* libgmp.a in Frameworks */ = {isa = PBXBuildFile; fileRef = E51B92372CAB2B8800C212F2 /* libgmp.a */; };
|
||||
E51B923D2CAB2B8800C212F2 /* libffi.a in Frameworks */ = {isa = PBXBuildFile; fileRef = E51B92382CAB2B8800C212F2 /* libffi.a */; };
|
||||
E51B923E2CAB2B8800C212F2 /* libHSsimplex-chat-6.1.0.5-HWShuJBYoppEOt1hLB8GPU-ghc9.6.3.a in Frameworks */ = {isa = PBXBuildFile; fileRef = E51B92392CAB2B8800C212F2 /* libHSsimplex-chat-6.1.0.5-HWShuJBYoppEOt1hLB8GPU-ghc9.6.3.a */; };
|
||||
E51B923F2CAB2B8800C212F2 /* libgmpxx.a in Frameworks */ = {isa = PBXBuildFile; fileRef = E51B923A2CAB2B8800C212F2 /* libgmpxx.a */; };
|
||||
E51CC1E62C62085600DB91FE /* OneHandUICard.swift in Sources */ = {isa = PBXBuildFile; fileRef = E51CC1E52C62085600DB91FE /* OneHandUICard.swift */; };
|
||||
E5DCF8DB2C56FAC1007928CC /* SimpleXChat.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 5CE2BA682845308900EC33A6 /* SimpleXChat.framework */; };
|
||||
E5DCF9712C590272007928CC /* Localizable.strings in Resources */ = {isa = PBXBuildFile; fileRef = E5DCF96F2C590272007928CC /* Localizable.strings */; };
|
||||
@@ -486,11 +485,6 @@
|
||||
5CFE0920282EEAF60002594B /* ZoomableScrollView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = ZoomableScrollView.swift; path = Shared/Views/ZoomableScrollView.swift; sourceTree = SOURCE_ROOT; };
|
||||
640417CB2B29B8C200CCB412 /* NewChatMenuButton.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = NewChatMenuButton.swift; sourceTree = "<group>"; };
|
||||
640417CC2B29B8C200CCB412 /* NewChatView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = NewChatView.swift; sourceTree = "<group>"; };
|
||||
6405489E2CB56735005DE1E4 /* libgmpxx.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = libgmpxx.a; sourceTree = "<group>"; };
|
||||
6405489F2CB56735005DE1E4 /* libgmp.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = libgmp.a; sourceTree = "<group>"; };
|
||||
640548A02CB56735005DE1E4 /* libffi.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = libffi.a; sourceTree = "<group>"; };
|
||||
640548A12CB56735005DE1E4 /* libHSsimplex-chat-6.1.0.7-EtclnBf7vnkLnhnDA1lixv-ghc9.6.3.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = "libHSsimplex-chat-6.1.0.7-EtclnBf7vnkLnhnDA1lixv-ghc9.6.3.a"; sourceTree = "<group>"; };
|
||||
640548A22CB56735005DE1E4 /* libHSsimplex-chat-6.1.0.7-EtclnBf7vnkLnhnDA1lixv.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = "libHSsimplex-chat-6.1.0.7-EtclnBf7vnkLnhnDA1lixv.a"; sourceTree = "<group>"; };
|
||||
6407BA82295DA85D0082BA18 /* CIInvalidJSONView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CIInvalidJSONView.swift; sourceTree = "<group>"; };
|
||||
6419EC552AB8BC8B004A607A /* ContextInvitingContactMemberView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ContextInvitingContactMemberView.swift; sourceTree = "<group>"; };
|
||||
6419EC572AB97507004A607A /* CIMemberCreatedContactView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CIMemberCreatedContactView.swift; sourceTree = "<group>"; };
|
||||
@@ -559,11 +553,15 @@
|
||||
CEE723EF2C3D25C70009AE93 /* ShareView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ShareView.swift; sourceTree = "<group>"; };
|
||||
CEE723F12C3D25ED0009AE93 /* ShareModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ShareModel.swift; sourceTree = "<group>"; };
|
||||
CEEA861C2C2ABCB50084E1EA /* ReverseList.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ReverseList.swift; sourceTree = "<group>"; };
|
||||
CEFB2EDE2CA1BCC7004B1ECE /* SheetRepresentable.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SheetRepresentable.swift; sourceTree = "<group>"; };
|
||||
D72A9087294BD7A70047C86D /* NativeTextEditor.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NativeTextEditor.swift; sourceTree = "<group>"; };
|
||||
D741547729AF89AF0022400A /* StoreKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = StoreKit.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS16.1.sdk/System/Library/Frameworks/StoreKit.framework; sourceTree = DEVELOPER_DIR; };
|
||||
D741547929AF90B00022400A /* PushKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = PushKit.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS16.1.sdk/System/Library/Frameworks/PushKit.framework; sourceTree = DEVELOPER_DIR; };
|
||||
D7AA2C3429A936B400737B40 /* MediaEncryption.playground */ = {isa = PBXFileReference; lastKnownFileType = file.playground; name = MediaEncryption.playground; path = Shared/MediaEncryption.playground; sourceTree = SOURCE_ROOT; xcLanguageSpecificationIdentifier = xcode.lang.swift; };
|
||||
E51B92362CAB2B8800C212F2 /* libHSsimplex-chat-6.1.0.5-HWShuJBYoppEOt1hLB8GPU.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = "libHSsimplex-chat-6.1.0.5-HWShuJBYoppEOt1hLB8GPU.a"; sourceTree = "<group>"; };
|
||||
E51B92372CAB2B8800C212F2 /* libgmp.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = libgmp.a; sourceTree = "<group>"; };
|
||||
E51B92382CAB2B8800C212F2 /* libffi.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = libffi.a; sourceTree = "<group>"; };
|
||||
E51B92392CAB2B8800C212F2 /* libHSsimplex-chat-6.1.0.5-HWShuJBYoppEOt1hLB8GPU-ghc9.6.3.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = "libHSsimplex-chat-6.1.0.5-HWShuJBYoppEOt1hLB8GPU-ghc9.6.3.a"; sourceTree = "<group>"; };
|
||||
E51B923A2CAB2B8800C212F2 /* libgmpxx.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = libgmpxx.a; sourceTree = "<group>"; };
|
||||
E51CC1E52C62085600DB91FE /* OneHandUICard.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = OneHandUICard.swift; sourceTree = "<group>"; };
|
||||
E5DCF9702C590272007928CC /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/Localizable.strings; sourceTree = "<group>"; };
|
||||
E5DCF9722C590274007928CC /* bg */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = bg; path = bg.lproj/Localizable.strings; sourceTree = "<group>"; };
|
||||
@@ -655,14 +653,14 @@
|
||||
isa = PBXFrameworksBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
files = (
|
||||
640548A32CB56735005DE1E4 /* libgmpxx.a in Frameworks */,
|
||||
640548A72CB56735005DE1E4 /* libHSsimplex-chat-6.1.0.7-EtclnBf7vnkLnhnDA1lixv.a in Frameworks */,
|
||||
640548A52CB56735005DE1E4 /* libffi.a in Frameworks */,
|
||||
640548A42CB56735005DE1E4 /* libgmp.a in Frameworks */,
|
||||
E51B923B2CAB2B8800C212F2 /* libHSsimplex-chat-6.1.0.5-HWShuJBYoppEOt1hLB8GPU.a in Frameworks */,
|
||||
E51B923D2CAB2B8800C212F2 /* libffi.a in Frameworks */,
|
||||
E51B923C2CAB2B8800C212F2 /* libgmp.a in Frameworks */,
|
||||
5CE2BA93284534B000EC33A6 /* libiconv.tbd in Frameworks */,
|
||||
640548A62CB56735005DE1E4 /* libHSsimplex-chat-6.1.0.7-EtclnBf7vnkLnhnDA1lixv-ghc9.6.3.a in Frameworks */,
|
||||
E51B923F2CAB2B8800C212F2 /* libgmpxx.a in Frameworks */,
|
||||
5CE2BA94284534BB00EC33A6 /* libz.tbd in Frameworks */,
|
||||
CE38A29C2C3FCD72005ED185 /* SwiftyGif in Frameworks */,
|
||||
E51B923E2CAB2B8800C212F2 /* libHSsimplex-chat-6.1.0.5-HWShuJBYoppEOt1hLB8GPU-ghc9.6.3.a in Frameworks */,
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
};
|
||||
@@ -739,11 +737,11 @@
|
||||
5C764E5C279C70B7000C6508 /* Libraries */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
640548A02CB56735005DE1E4 /* libffi.a */,
|
||||
6405489F2CB56735005DE1E4 /* libgmp.a */,
|
||||
6405489E2CB56735005DE1E4 /* libgmpxx.a */,
|
||||
640548A12CB56735005DE1E4 /* libHSsimplex-chat-6.1.0.7-EtclnBf7vnkLnhnDA1lixv-ghc9.6.3.a */,
|
||||
640548A22CB56735005DE1E4 /* libHSsimplex-chat-6.1.0.7-EtclnBf7vnkLnhnDA1lixv.a */,
|
||||
E51B92382CAB2B8800C212F2 /* libffi.a */,
|
||||
E51B92372CAB2B8800C212F2 /* libgmp.a */,
|
||||
E51B923A2CAB2B8800C212F2 /* libgmpxx.a */,
|
||||
E51B92392CAB2B8800C212F2 /* libHSsimplex-chat-6.1.0.5-HWShuJBYoppEOt1hLB8GPU-ghc9.6.3.a */,
|
||||
E51B92362CAB2B8800C212F2 /* libHSsimplex-chat-6.1.0.5-HWShuJBYoppEOt1hLB8GPU.a */,
|
||||
);
|
||||
path = Libraries;
|
||||
sourceTree = "<group>";
|
||||
@@ -801,7 +799,6 @@
|
||||
CE7548092C622630009579B7 /* SwipeLabel.swift */,
|
||||
CE176F1F2C87014C00145DBC /* InvertedForegroundStyle.swift */,
|
||||
CEDB245A2C9CD71800FBC5F6 /* StickyScrollView.swift */,
|
||||
CEFB2EDE2CA1BCC7004B1ECE /* SheetRepresentable.swift */,
|
||||
);
|
||||
path = Helpers;
|
||||
sourceTree = "<group>";
|
||||
@@ -1452,7 +1449,6 @@
|
||||
5CB634B129E5EFEA0066AD6B /* PasscodeView.swift in Sources */,
|
||||
8C69FE7D2B8C7D2700267E38 /* AppSettings.swift in Sources */,
|
||||
5C2E260F27A30FDC00F70299 /* ChatView.swift in Sources */,
|
||||
CEFB2EDF2CA1BCC7004B1ECE /* SheetRepresentable.swift in Sources */,
|
||||
5C2E260B27A30CFA00F70299 /* ChatListView.swift in Sources */,
|
||||
6442E0BA287F169300CEC0F9 /* AddGroupView.swift in Sources */,
|
||||
5CF937232B2503D000E1D781 /* NSESubscriber.swift in Sources */,
|
||||
@@ -1899,7 +1895,7 @@
|
||||
CLANG_TIDY_MISC_REDUNDANT_EXPRESSION = YES;
|
||||
CODE_SIGN_ENTITLEMENTS = "SimpleX (iOS).entitlements";
|
||||
CODE_SIGN_STYLE = Automatic;
|
||||
CURRENT_PROJECT_VERSION = 242;
|
||||
CURRENT_PROJECT_VERSION = 241;
|
||||
DEAD_CODE_STRIPPING = YES;
|
||||
DEVELOPMENT_TEAM = 5NN7GUYB6T;
|
||||
ENABLE_BITCODE = NO;
|
||||
@@ -1948,7 +1944,7 @@
|
||||
CLANG_TIDY_MISC_REDUNDANT_EXPRESSION = YES;
|
||||
CODE_SIGN_ENTITLEMENTS = "SimpleX (iOS).entitlements";
|
||||
CODE_SIGN_STYLE = Automatic;
|
||||
CURRENT_PROJECT_VERSION = 242;
|
||||
CURRENT_PROJECT_VERSION = 241;
|
||||
DEAD_CODE_STRIPPING = YES;
|
||||
DEVELOPMENT_TEAM = 5NN7GUYB6T;
|
||||
ENABLE_BITCODE = NO;
|
||||
@@ -1989,7 +1985,7 @@
|
||||
buildSettings = {
|
||||
ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES;
|
||||
CODE_SIGN_STYLE = Automatic;
|
||||
CURRENT_PROJECT_VERSION = 242;
|
||||
CURRENT_PROJECT_VERSION = 241;
|
||||
DEVELOPMENT_TEAM = 5NN7GUYB6T;
|
||||
GENERATE_INFOPLIST_FILE = YES;
|
||||
IPHONEOS_DEPLOYMENT_TARGET = 15.0;
|
||||
@@ -2009,7 +2005,7 @@
|
||||
buildSettings = {
|
||||
ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES;
|
||||
CODE_SIGN_STYLE = Automatic;
|
||||
CURRENT_PROJECT_VERSION = 242;
|
||||
CURRENT_PROJECT_VERSION = 241;
|
||||
DEVELOPMENT_TEAM = 5NN7GUYB6T;
|
||||
GENERATE_INFOPLIST_FILE = YES;
|
||||
IPHONEOS_DEPLOYMENT_TARGET = 15.0;
|
||||
@@ -2034,7 +2030,7 @@
|
||||
CODE_SIGN_ENTITLEMENTS = "SimpleX NSE/SimpleX NSE.entitlements";
|
||||
CODE_SIGN_IDENTITY = "Apple Development";
|
||||
CODE_SIGN_STYLE = Automatic;
|
||||
CURRENT_PROJECT_VERSION = 242;
|
||||
CURRENT_PROJECT_VERSION = 241;
|
||||
DEVELOPMENT_TEAM = 5NN7GUYB6T;
|
||||
ENABLE_BITCODE = NO;
|
||||
GCC_OPTIMIZATION_LEVEL = s;
|
||||
@@ -2071,7 +2067,7 @@
|
||||
CODE_SIGN_ENTITLEMENTS = "SimpleX NSE/SimpleX NSE.entitlements";
|
||||
CODE_SIGN_IDENTITY = "Apple Development";
|
||||
CODE_SIGN_STYLE = Automatic;
|
||||
CURRENT_PROJECT_VERSION = 242;
|
||||
CURRENT_PROJECT_VERSION = 241;
|
||||
DEVELOPMENT_TEAM = 5NN7GUYB6T;
|
||||
ENABLE_BITCODE = NO;
|
||||
ENABLE_CODE_COVERAGE = NO;
|
||||
@@ -2108,7 +2104,7 @@
|
||||
CLANG_TIDY_BUGPRONE_REDUNDANT_BRANCH_CONDITION = YES;
|
||||
CLANG_TIDY_MISC_REDUNDANT_EXPRESSION = YES;
|
||||
CODE_SIGN_STYLE = Automatic;
|
||||
CURRENT_PROJECT_VERSION = 242;
|
||||
CURRENT_PROJECT_VERSION = 241;
|
||||
DEFINES_MODULE = YES;
|
||||
DEVELOPMENT_TEAM = 5NN7GUYB6T;
|
||||
DYLIB_COMPATIBILITY_VERSION = 1;
|
||||
@@ -2159,7 +2155,7 @@
|
||||
CLANG_TIDY_BUGPRONE_REDUNDANT_BRANCH_CONDITION = YES;
|
||||
CLANG_TIDY_MISC_REDUNDANT_EXPRESSION = YES;
|
||||
CODE_SIGN_STYLE = Automatic;
|
||||
CURRENT_PROJECT_VERSION = 242;
|
||||
CURRENT_PROJECT_VERSION = 241;
|
||||
DEFINES_MODULE = YES;
|
||||
DEVELOPMENT_TEAM = 5NN7GUYB6T;
|
||||
DYLIB_COMPATIBILITY_VERSION = 1;
|
||||
@@ -2210,7 +2206,7 @@
|
||||
CLANG_CXX_LANGUAGE_STANDARD = "gnu++20";
|
||||
CODE_SIGN_ENTITLEMENTS = "SimpleX SE/SimpleX SE.entitlements";
|
||||
CODE_SIGN_STYLE = Automatic;
|
||||
CURRENT_PROJECT_VERSION = 242;
|
||||
CURRENT_PROJECT_VERSION = 241;
|
||||
DEVELOPMENT_TEAM = 5NN7GUYB6T;
|
||||
ENABLE_USER_SCRIPT_SANDBOXING = YES;
|
||||
GCC_C_LANGUAGE_STANDARD = gnu17;
|
||||
@@ -2244,7 +2240,7 @@
|
||||
CLANG_CXX_LANGUAGE_STANDARD = "gnu++20";
|
||||
CODE_SIGN_ENTITLEMENTS = "SimpleX SE/SimpleX SE.entitlements";
|
||||
CODE_SIGN_STYLE = Automatic;
|
||||
CURRENT_PROJECT_VERSION = 242;
|
||||
CURRENT_PROJECT_VERSION = 241;
|
||||
DEVELOPMENT_TEAM = 5NN7GUYB6T;
|
||||
ENABLE_USER_SCRIPT_SANDBOXING = YES;
|
||||
GCC_C_LANGUAGE_STANDARD = gnu17;
|
||||
|
||||
@@ -56,7 +56,6 @@ public enum ChatCommand {
|
||||
case apiVerifyToken(token: DeviceToken, nonce: String, code: String)
|
||||
case apiDeleteToken(token: DeviceToken)
|
||||
case apiGetNtfMessage(nonce: String, encNtfInfo: String)
|
||||
case apiGetConnNtfMessage(connId: String)
|
||||
case apiNewGroup(userId: Int64, incognito: Bool, groupProfile: GroupProfile)
|
||||
case apiAddMember(groupId: Int64, contactId: Int64, memberRole: GroupMemberRole)
|
||||
case apiJoinGroup(groupId: Int64)
|
||||
@@ -215,7 +214,6 @@ public enum ChatCommand {
|
||||
case let .apiVerifyToken(token, nonce, code): return "/_ntf verify \(token.cmdString) \(nonce) \(code)"
|
||||
case let .apiDeleteToken(token): return "/_ntf delete \(token.cmdString)"
|
||||
case let .apiGetNtfMessage(nonce, encNtfInfo): return "/_ntf message \(nonce) \(encNtfInfo)"
|
||||
case let .apiGetConnNtfMessage(connId): return "/_ntf conn message \(connId)"
|
||||
case let .apiNewGroup(userId, incognito, groupProfile): return "/_group \(userId) incognito=\(onOff(incognito)) \(encodeJSON(groupProfile))"
|
||||
case let .apiAddMember(groupId, contactId, memberRole): return "/_add #\(groupId) \(contactId) \(memberRole)"
|
||||
case let .apiJoinGroup(groupId): return "/_join #\(groupId)"
|
||||
@@ -370,7 +368,6 @@ public enum ChatCommand {
|
||||
case .apiVerifyToken: return "apiVerifyToken"
|
||||
case .apiDeleteToken: return "apiDeleteToken"
|
||||
case .apiGetNtfMessage: return "apiGetNtfMessage"
|
||||
case .apiGetConnNtfMessage: return "apiGetConnNtfMessage"
|
||||
case .apiNewGroup: return "apiNewGroup"
|
||||
case .apiAddMember: return "apiAddMember"
|
||||
case .apiJoinGroup: return "apiJoinGroup"
|
||||
@@ -682,9 +679,8 @@ public enum ChatResponse: Decodable, Error {
|
||||
case callInvitations(callInvitations: [RcvCallInvitation])
|
||||
case ntfTokenStatus(status: NtfTknStatus)
|
||||
case ntfToken(token: DeviceToken, status: NtfTknStatus, ntfMode: NotificationsMode, ntfServer: String)
|
||||
case ntfMessages(user_: User?, connEntity_: ConnectionEntity?, expectedMsg_: NtfMsgInfo?, receivedMsg_: NtfMsgInfo?)
|
||||
case connNtfMessage(receivedMsg_: NtfMsgInfo?)
|
||||
case ntfMessage(user: UserRef, connEntity: ConnectionEntity, ntfMessage: NtfMsgAckInfo)
|
||||
case ntfMessages(user_: User?, connEntity_: ConnectionEntity?, msgTs: Date?, ntfMessage_: NtfMsgInfo?)
|
||||
case ntfMessage(user: UserRef, connEntity: ConnectionEntity, ntfMessage: NtfMsgInfo)
|
||||
case contactConnectionDeleted(user: UserRef, connection: PendingContactConnection)
|
||||
case contactDisabled(user: UserRef, contact: Contact)
|
||||
// remote desktop responses/events
|
||||
@@ -852,7 +848,6 @@ public enum ChatResponse: Decodable, Error {
|
||||
case .ntfTokenStatus: return "ntfTokenStatus"
|
||||
case .ntfToken: return "ntfToken"
|
||||
case .ntfMessages: return "ntfMessages"
|
||||
case .connNtfMessage: return "connNtfMessage"
|
||||
case .ntfMessage: return "ntfMessage"
|
||||
case .contactConnectionDeleted: return "contactConnectionDeleted"
|
||||
case .contactDisabled: return "contactDisabled"
|
||||
@@ -1029,8 +1024,7 @@ public enum ChatResponse: Decodable, Error {
|
||||
case let .callInvitations(invs): return String(describing: invs)
|
||||
case let .ntfTokenStatus(status): return String(describing: status)
|
||||
case let .ntfToken(token, status, ntfMode, ntfServer): return "token: \(token)\nstatus: \(status.rawValue)\nntfMode: \(ntfMode.rawValue)\nntfServer: \(ntfServer)"
|
||||
case let .ntfMessages(u, connEntity, expectedMsg_, receivedMsg_): return withUser(u, "connEntity: \(String(describing: connEntity))\nexpectedMsg_: \(String(describing: expectedMsg_))\nreceivedMsg_: \(String(describing: receivedMsg_))")
|
||||
case let .connNtfMessage(receivedMsg_): return "receivedMsg_: \(String(describing: receivedMsg_))"
|
||||
case let .ntfMessages(u, connEntity, msgTs, ntfMessages): return withUser(u, "connEntity: \(String(describing: connEntity))\nmsgTs: \(String(describing: msgTs))\nntfMessages: \(String(describing: ntfMessages))")
|
||||
case let .ntfMessage(u, connEntity, ntfMessage): return withUser(u, "connEntity: \(String(describing: connEntity))\nntfMessage: \(String(describing: ntfMessage))")
|
||||
case let .contactConnectionDeleted(u, connection): return withUser(u, String(describing: connection))
|
||||
case let .contactDisabled(u, contact): return withUser(u, String(describing: contact))
|
||||
@@ -1359,7 +1353,7 @@ public struct NetCfg: Codable, Equatable {
|
||||
public var sessionMode = TransportSessionMode.user
|
||||
public var smpProxyMode: SMPProxyMode = .unknown
|
||||
public var smpProxyFallback: SMPProxyFallback = .allowProtected
|
||||
public var smpWebPort = false
|
||||
var smpWebPort = false
|
||||
public var tcpConnectTimeout: Int // microseconds
|
||||
public var tcpTimeout: Int // microseconds
|
||||
public var tcpTimeoutPerKb: Int // microseconds
|
||||
@@ -1491,22 +1485,18 @@ public enum OnionHosts: String, Identifiable {
|
||||
|
||||
public enum TransportSessionMode: String, Codable, Identifiable {
|
||||
case user
|
||||
case session
|
||||
case server
|
||||
case entity
|
||||
|
||||
public var text: LocalizedStringKey {
|
||||
switch self {
|
||||
case .user: return "Chat profile"
|
||||
case .session: return "App session"
|
||||
case .server: return "Server"
|
||||
case .user: return "User profile"
|
||||
case .entity: return "Connection"
|
||||
}
|
||||
}
|
||||
|
||||
public var id: TransportSessionMode { self }
|
||||
|
||||
public static let values: [TransportSessionMode] = [.user, .session, .server, .entity]
|
||||
public static let values: [TransportSessionMode] = [.user, .entity]
|
||||
}
|
||||
|
||||
public struct KeepAliveOpts: Codable, Equatable {
|
||||
|
||||
@@ -67,7 +67,7 @@ public func registerGroupDefaults() {
|
||||
GROUP_DEFAULT_NTF_ENABLE_LOCAL: false,
|
||||
GROUP_DEFAULT_NTF_ENABLE_PERIODIC: false,
|
||||
GROUP_DEFAULT_NETWORK_USE_ONION_HOSTS: OnionHosts.no.rawValue,
|
||||
GROUP_DEFAULT_NETWORK_SESSION_MODE: TransportSessionMode.session.rawValue,
|
||||
GROUP_DEFAULT_NETWORK_SESSION_MODE: TransportSessionMode.user.rawValue,
|
||||
GROUP_DEFAULT_NETWORK_SMP_PROXY_MODE: SMPProxyMode.unknown.rawValue,
|
||||
GROUP_DEFAULT_NETWORK_SMP_PROXY_FALLBACK: SMPProxyFallback.allowProtected.rawValue,
|
||||
GROUP_DEFAULT_NETWORK_TCP_CONNECT_TIMEOUT: NetCfg.defaults.tcpConnectTimeout,
|
||||
@@ -232,7 +232,7 @@ public let networkUseOnionHostsGroupDefault = EnumDefault<OnionHosts>(
|
||||
public let networkSessionModeGroupDefault = EnumDefault<TransportSessionMode>(
|
||||
defaults: groupDefaults,
|
||||
forKey: GROUP_DEFAULT_NETWORK_SESSION_MODE,
|
||||
withDefault: .session
|
||||
withDefault: .user
|
||||
)
|
||||
|
||||
public let networkSMPProxyModeGroupDefault = EnumDefault<SMPProxyMode>(
|
||||
@@ -357,7 +357,6 @@ public func getNetCfg() -> NetCfg {
|
||||
sessionMode: sessionMode,
|
||||
smpProxyMode: smpProxyMode,
|
||||
smpProxyFallback: smpProxyFallback,
|
||||
smpWebPort: false,
|
||||
tcpConnectTimeout: tcpConnectTimeout,
|
||||
tcpTimeout: tcpTimeout,
|
||||
tcpTimeoutPerKb: tcpTimeoutPerKb,
|
||||
|
||||
@@ -80,14 +80,6 @@ public enum CallMediaType: String, Codable, Equatable {
|
||||
case audio = "audio"
|
||||
}
|
||||
|
||||
public enum CallMediaSource: String, Codable, Equatable {
|
||||
case mic = "mic"
|
||||
case camera = "camera"
|
||||
case screenAudio = "screenAudio"
|
||||
case screenVideo = "screenVideo"
|
||||
case unknown = "unknown"
|
||||
}
|
||||
|
||||
public enum VideoCamera: String, Codable, Equatable {
|
||||
case user = "user"
|
||||
case environment = "environment"
|
||||
|
||||
@@ -2240,42 +2240,32 @@ public struct MemberSubError: Decodable, Hashable {
|
||||
}
|
||||
|
||||
public enum ConnectionEntity: Decodable, Hashable {
|
||||
case rcvDirectMsgConnection(entityConnection: Connection, contact: Contact?)
|
||||
case rcvGroupMsgConnection(entityConnection: Connection, groupInfo: GroupInfo, groupMember: GroupMember)
|
||||
case sndFileConnection(entityConnection: Connection, sndFileTransfer: SndFileTransfer)
|
||||
case rcvFileConnection(entityConnection: Connection, rcvFileTransfer: RcvFileTransfer)
|
||||
case userContactConnection(entityConnection: Connection, userContact: UserContact)
|
||||
case rcvDirectMsgConnection(contact: Contact?)
|
||||
case rcvGroupMsgConnection(groupInfo: GroupInfo, groupMember: GroupMember)
|
||||
case sndFileConnection(sndFileTransfer: SndFileTransfer)
|
||||
case rcvFileConnection(rcvFileTransfer: RcvFileTransfer)
|
||||
case userContactConnection(userContact: UserContact)
|
||||
|
||||
public var id: String? {
|
||||
switch self {
|
||||
case let .rcvDirectMsgConnection(_, contact):
|
||||
case let .rcvDirectMsgConnection(contact):
|
||||
return contact?.id
|
||||
case let .rcvGroupMsgConnection(_, _, groupMember):
|
||||
case let .rcvGroupMsgConnection(_, groupMember):
|
||||
return groupMember.id
|
||||
case let .userContactConnection(_, userContact):
|
||||
case let .userContactConnection(userContact):
|
||||
return userContact.id
|
||||
default:
|
||||
return nil
|
||||
}
|
||||
}
|
||||
|
||||
public var conn: Connection {
|
||||
switch self {
|
||||
case let .rcvDirectMsgConnection(entityConnection, _): entityConnection
|
||||
case let .rcvGroupMsgConnection(entityConnection, _, _): entityConnection
|
||||
case let .sndFileConnection(entityConnection, _): entityConnection
|
||||
case let .rcvFileConnection(entityConnection, _): entityConnection
|
||||
case let .userContactConnection(entityConnection, _): entityConnection
|
||||
}
|
||||
}
|
||||
|
||||
public var ntfsEnabled: Bool {
|
||||
switch self {
|
||||
case let .rcvDirectMsgConnection(_, contact): return contact?.chatSettings.enableNtfs == .all
|
||||
case let .rcvGroupMsgConnection(_, groupInfo, _): return groupInfo.chatSettings.enableNtfs == .all
|
||||
case let .rcvDirectMsgConnection(contact): return contact?.chatSettings.enableNtfs == .all
|
||||
case let .rcvGroupMsgConnection(groupInfo, _): return groupInfo.chatSettings.enableNtfs == .all
|
||||
case .sndFileConnection: return false
|
||||
case .rcvFileConnection: return false
|
||||
case let .userContactConnection(_, userContact): return userContact.groupId == nil
|
||||
case let .userContactConnection(userContact): return userContact.groupId == nil
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -2285,11 +2275,6 @@ public struct NtfMsgInfo: Decodable, Hashable {
|
||||
public var msgTs: Date
|
||||
}
|
||||
|
||||
public struct NtfMsgAckInfo: Decodable, Hashable {
|
||||
public var msgId: String
|
||||
public var msgTs_: Date?
|
||||
}
|
||||
|
||||
public struct ChatItemDeletion: Decodable, Hashable {
|
||||
public var deletedChatItem: AChatItem
|
||||
public var toChatItem: AChatItem? = nil
|
||||
|
||||
@@ -94,7 +94,7 @@ public func createConnectionEventNtf(_ user: User, _ connEntity: ConnectionEntit
|
||||
var body: String? = nil
|
||||
var targetContentIdentifier: String? = nil
|
||||
switch connEntity {
|
||||
case let .rcvDirectMsgConnection(_, contact):
|
||||
case let .rcvDirectMsgConnection(contact):
|
||||
if let contact = contact {
|
||||
title = hideContent ? contactHidden : "\(contact.chatViewName):"
|
||||
targetContentIdentifier = contact.id
|
||||
@@ -102,7 +102,7 @@ public func createConnectionEventNtf(_ user: User, _ connEntity: ConnectionEntit
|
||||
title = NSLocalizedString("New contact:", comment: "notification")
|
||||
}
|
||||
body = NSLocalizedString("message received", comment: "notification")
|
||||
case let .rcvGroupMsgConnection(_, groupInfo, groupMember):
|
||||
case let .rcvGroupMsgConnection(groupInfo, groupMember):
|
||||
title = groupMsgNtfTitle(groupInfo, groupMember, hideContent: hideContent)
|
||||
body = NSLocalizedString("message received", comment: "notification")
|
||||
targetContentIdentifier = groupInfo.id
|
||||
|
||||
@@ -791,9 +791,6 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Chat preferences" = "Чат настройки";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Chat profile" = "Потребителски профил";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Chats" = "Чатове";
|
||||
|
||||
@@ -3992,6 +3989,9 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Use the app while in the call." = "Използвайте приложението по време на разговора.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"User profile" = "Потребителски профил";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Using SimpleX Chat servers." = "Използват се сървърите на SimpleX Chat.";
|
||||
|
||||
|
||||
@@ -644,9 +644,6 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Chat preferences" = "Předvolby chatu";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Chat profile" = "Profil uživatele";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Chats" = "Chaty";
|
||||
|
||||
@@ -3232,6 +3229,9 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Use SimpleX Chat servers?" = "Používat servery SimpleX Chat?";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"User profile" = "Profil uživatele";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Using SimpleX Chat servers." = "Používat servery SimpleX Chat.";
|
||||
|
||||
|
||||
@@ -595,9 +595,6 @@
|
||||
/* No comment provided by engineer. */
|
||||
"App passcode is replaced with self-destruct passcode." = "App-Zugangscode wurde durch den Selbstzerstörungs-Zugangscode ersetzt.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"App session" = "App-Sitzung";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"App version" = "App Version";
|
||||
|
||||
@@ -917,9 +914,6 @@
|
||||
/* alert message */
|
||||
"Chat preferences were changed." = "Die Chat-Präferenzen wurden geändert.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Chat profile" = "Benutzerprofil";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Chat theme" = "Chat-Design";
|
||||
|
||||
@@ -1209,7 +1203,7 @@
|
||||
"Core version: v%@" = "Core Version: v%@";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Corner" = "Abrundung Ecken";
|
||||
"Corner" = "Ecken-Abrundung";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Correct name to %@?" = "Richtiger Name für %@?";
|
||||
@@ -2099,7 +2093,7 @@
|
||||
"Expand" = "Erweitern";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"expired" = "Abgelaufen";
|
||||
"expired" = "abgelaufen";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Export database" = "Datenbank exportieren";
|
||||
@@ -3073,12 +3067,6 @@
|
||||
/* No comment provided by engineer. */
|
||||
"New passphrase…" = "Neues Passwort…";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"New SOCKS credentials will be used every time you start the app." = "Jedes Mal wenn Sie die App starten, werden neue SOCKS-Anmeldeinformationen genutzt";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"New SOCKS credentials will be used for each server." = "Für jeden Server werden neue SOCKS-Anmeldeinformationen genutzt";
|
||||
|
||||
/* pref value */
|
||||
"no" = "Nein";
|
||||
|
||||
@@ -3121,12 +3109,6 @@
|
||||
/* No comment provided by engineer. */
|
||||
"No network connection" = "Keine Netzwerkverbindung";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"No permission to record speech" = "Keine Genehmigung für Sprach-Aufnahmen";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"No permission to record video" = "Keine Genehmigung für Video-Aufnahmen";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"No permission to record voice message" = "Keine Berechtigung für das Aufnehmen von Sprachnachrichten";
|
||||
|
||||
@@ -3286,7 +3268,7 @@
|
||||
"Or show this code" = "Oder diesen QR-Code anzeigen";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"other" = "Andere";
|
||||
"other" = "andere";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Other" = "Andere";
|
||||
@@ -4079,9 +4061,6 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Sent via proxy" = "Über einen Proxy gesendet";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Server" = "Server";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Server address" = "Server-Adresse";
|
||||
|
||||
@@ -4610,12 +4589,6 @@
|
||||
/* No comment provided by engineer. */
|
||||
"To protect your IP address, private routing uses your SMP servers to deliver messages." = "Zum Schutz Ihrer IP-Adresse, wird für die Nachrichten-Auslieferung privates Routing über Ihre konfigurierten SMP-Server genutzt.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"To record speech please grant permission to use Microphone." = "Bitte erteilen Sie für Sprach-Aufnahmen die Genehmigung das Mikrofon zu nutzen.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"To record video please grant permission to use Camera." = "Bitte erteilen Sie für Video-Aufnahmen die Genehmigung die Kamera zu nutzen.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"To record voice message please grant permission to use Microphone." = "Bitte erlauben Sie die Nutzung des Mikrofons, um Sprachnachrichten aufnehmen zu können.";
|
||||
|
||||
@@ -4841,6 +4814,9 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Use the app with one hand." = "Die App mit einer Hand bedienen.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"User profile" = "Benutzerprofil";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"User selection" = "Benutzer-Auswahl";
|
||||
|
||||
|
||||
@@ -595,9 +595,6 @@
|
||||
/* No comment provided by engineer. */
|
||||
"App passcode is replaced with self-destruct passcode." = "El código de acceso será reemplazado por código de autodestrucción.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"App session" = "Sesión de aplicación";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"App version" = "Versión de la aplicación";
|
||||
|
||||
@@ -917,9 +914,6 @@
|
||||
/* alert message */
|
||||
"Chat preferences were changed." = "Las preferencias del chat han sido modificadas.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Chat profile" = "Perfil de usuario";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Chat theme" = "Tema de chat";
|
||||
|
||||
@@ -1017,7 +1011,7 @@
|
||||
"Confirm password" = "Confirmar contraseña";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Confirm that you remember database passphrase to migrate it." = "Para migrar la base de datos confirma que recuerdas la frase de contraseña.";
|
||||
"Confirm that you remember database passphrase to migrate it." = "Para migrar confirma que recuerdas la frase de contraseña de la base de datos.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Confirm upload" = "Confirmar subida";
|
||||
@@ -2765,7 +2759,7 @@
|
||||
"Local name" = "Nombre local";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Local profile data only" = "Eliminar sólo el perfil";
|
||||
"Local profile data only" = "Sólo datos del perfil local";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Lock after" = "Bloquear en";
|
||||
@@ -3073,12 +3067,6 @@
|
||||
/* No comment provided by engineer. */
|
||||
"New passphrase…" = "Contraseña nueva…";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"New SOCKS credentials will be used every time you start the app." = "Se usarán credenciales SOCKS nuevas cada vez que inicies la aplicación.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"New SOCKS credentials will be used for each server." = "Se usarán credenciales SOCKS nuevas por cada servidor.";
|
||||
|
||||
/* pref value */
|
||||
"no" = "no";
|
||||
|
||||
@@ -3121,12 +3109,6 @@
|
||||
/* No comment provided by engineer. */
|
||||
"No network connection" = "Sin conexión de red";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"No permission to record speech" = "Sin permiso para grabación de voz";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"No permission to record video" = "Sin permiso para grabación de vídeo";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"No permission to record voice message" = "Sin permiso para grabar mensajes de voz";
|
||||
|
||||
@@ -3424,7 +3406,7 @@
|
||||
"Port" = "Puerto";
|
||||
|
||||
/* server test error */
|
||||
"Possibly, certificate fingerprint in server address is incorrect" = "Posiblemente la huella del certificado en la dirección del servidor es incorrecta";
|
||||
"Possibly, certificate fingerprint in server address is incorrect" = "Posiblemente la huella digital del certificado en la dirección del servidor es incorrecta";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Preserve the last message draft, with attachments." = "Conserva el último borrador del mensaje con los datos adjuntos.";
|
||||
@@ -3466,7 +3448,7 @@
|
||||
"Private routing error" = "Error de enrutamiento privado";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Profile and server connections" = "Eliminar perfil y conexiones";
|
||||
"Profile and server connections" = "Datos del perfil y conexiones";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Profile image" = "Imagen del perfil";
|
||||
@@ -3707,7 +3689,7 @@
|
||||
"removed contact address" = "dirección de contacto eliminada";
|
||||
|
||||
/* profile update event chat item */
|
||||
"removed profile picture" = "ha eliminado la imagen del perfil";
|
||||
"removed profile picture" = "imagen de perfil eliminada";
|
||||
|
||||
/* rcv group event chat item */
|
||||
"removed you" = "te ha expulsado";
|
||||
@@ -4079,9 +4061,6 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Sent via proxy" = "Mediante proxy";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Server" = "Servidor";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Server address" = "Dirección del servidor";
|
||||
|
||||
@@ -4101,7 +4080,7 @@
|
||||
"Server requires authorization to upload, check password" = "El servidor requiere autorización para subir, comprueba la contraseña";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Server test failed!" = "¡Prueba no superada!";
|
||||
"Server test failed!" = "¡Error en prueba del servidor!";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Server type" = "Tipo de servidor";
|
||||
@@ -4143,7 +4122,7 @@
|
||||
"set new contact address" = "nueva dirección de contacto";
|
||||
|
||||
/* profile update event chat item */
|
||||
"set new profile picture" = "tiene nueva imagen del perfil";
|
||||
"set new profile picture" = "nueva imagen de perfil";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Set passcode" = "Código autodestrucción";
|
||||
@@ -4443,7 +4422,7 @@
|
||||
"Temporary file error" = "Error en archivo temporal";
|
||||
|
||||
/* server test failure */
|
||||
"Test failed at step %@." = "Prueba no superada en el paso %@.";
|
||||
"Test failed at step %@." = "La prueba ha fallado en el paso %@.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Test server" = "Probar servidor";
|
||||
@@ -4452,7 +4431,7 @@
|
||||
"Test servers" = "Probar servidores";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Tests failed!" = "¡Pruebas no superadas!";
|
||||
"Tests failed!" = "¡Pruebas fallidas!";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Thank you for installing SimpleX Chat!" = "¡Gracias por instalar SimpleX Chat!";
|
||||
@@ -4610,12 +4589,6 @@
|
||||
/* No comment provided by engineer. */
|
||||
"To protect your IP address, private routing uses your SMP servers to deliver messages." = "Para proteger tu dirección IP, el enrutamiento privado usa tu lista de servidores SMP para enviar mensajes.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"To record speech please grant permission to use Microphone." = "Para grabación de voz, por favor concede el permiso para usar el micrófono.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"To record video please grant permission to use Camera." = "Para grabación de vídeo, por favor concede el permiso para usar la cámara.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"To record voice message please grant permission to use Microphone." = "Para grabar el mensaje de voz concede permiso para usar el micrófono.";
|
||||
|
||||
@@ -4841,6 +4814,9 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Use the app with one hand." = "Usa la aplicación con una sola mano.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"User profile" = "Perfil de usuario";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"User selection" = "Selección de usuarios";
|
||||
|
||||
|
||||
@@ -629,9 +629,6 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Chat preferences" = "Chat-asetukset";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Chat profile" = "Käyttäjäprofiili";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Chats" = "Keskustelut";
|
||||
|
||||
@@ -3190,6 +3187,9 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Use SimpleX Chat servers?" = "Käytä SimpleX Chat palvelimia?";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"User profile" = "Käyttäjäprofiili";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Using SimpleX Chat servers." = "Käyttää SimpleX Chat -palvelimia.";
|
||||
|
||||
|
||||
@@ -890,9 +890,6 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Chat preferences" = "Préférences de chat";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Chat profile" = "Profil d'utilisateur";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Chat theme" = "Thème de chat";
|
||||
|
||||
@@ -4700,6 +4697,9 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Use the app with one hand." = "Utiliser l'application d'une main.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"User profile" = "Profil d'utilisateur";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"User selection" = "Sélection de l'utilisateur";
|
||||
|
||||
|
||||
@@ -65,13 +65,13 @@
|
||||
"[Star on GitHub](https://github.com/simplex-chat/simplex-chat)" = "[Csillagozás a GitHubon](https://github.com/simplex-chat/simplex-chat)";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"**Add contact**: to create a new invitation link, or connect via a link you received." = "**Ismerős hozzáadása:** új meghívó-hivatkozás létrehozásához, vagy egy kapott hivatkozáson keresztül történő kapcsolódáshoz.";
|
||||
"**Add contact**: to create a new invitation link, or connect via a link you received." = "**Ismerős hozzáadása**: új meghívó-hivatkozás létrehozásához, vagy egy kapott hivatkozáson keresztül történő kapcsolódáshoz.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"**Add new contact**: to create your one-time QR Code for your contact." = "**Új ismerős hozzáadása:** egyszer használható QR-kód vagy hivatkozás létrehozása az ismerőse számára.";
|
||||
"**Add new contact**: to create your one-time QR Code for your contact." = "**Új ismerős hozzáadása**: egyszer használható QR-kód vagy hivatkozás létrehozása az ismerőse számára.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"**Create group**: to create a new group." = "**Csoport létrehozása:** új csoport létrehozásához.";
|
||||
"**Create group**: to create a new group." = "**Csoport létrehozása**: új csoport létrehozásához.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"**e2e encrypted** audio call" = "**e2e titkosított** hanghívás";
|
||||
@@ -80,10 +80,10 @@
|
||||
"**e2e encrypted** video call" = "**e2e titkosított** videóhívás";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"**More private**: check new messages every 20 minutes. Device token is shared with SimpleX Chat server, but not how many contacts or messages you have." = "**Privátabb:** 20 percenként ellenőrzi az új üzeneteket. Az eszköztoken megosztásra kerül a SimpleX Chat-kiszolgálóval, de az nem, hogy hány ismerőse vagy üzenete van.";
|
||||
"**More private**: check new messages every 20 minutes. Device token is shared with SimpleX Chat server, but not how many contacts or messages you have." = "**Privátabb**: 20 percenként ellenőrzi az új üzeneteket. Az eszköztoken megosztásra kerül a SimpleX Chat-kiszolgálóval, de az nem, hogy hány ismerőse vagy üzenete van.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"**Most private**: do not use SimpleX Chat notifications server, check messages periodically in the background (depends on how often you use the app)." = "**Legprivátabb:** ne használja a SimpleX Chat értesítési kiszolgálót, rendszeresen ellenőrizze az üzeneteket a háttérben (attól függően, hogy milyen gyakran használja az alkalmazást).";
|
||||
"**Most private**: do not use SimpleX Chat notifications server, check messages periodically in the background (depends on how often you use the app)." = "**Legprivátabb**: ne használja a SimpleX Chat értesítési kiszolgálót, rendszeresen ellenőrizze az üzeneteket a háttérben (attól függően, hogy milyen gyakran használja az alkalmazást).";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"**Please note**: using the same database on two devices will break the decryption of messages from your connections, as a security protection." = "**Megjegyzés:** ha két eszközön is ugyanazt az adatbázist használja, akkor biztonsági védelemként megszakítja az ismerőseitől érkező üzenetek visszafejtését.";
|
||||
@@ -92,7 +92,7 @@
|
||||
"**Please note**: you will NOT be able to recover or change passphrase if you lose it." = "**Megjegyzés:** NEM tudja visszaállítani vagy megváltoztatni jelmondatát, ha elveszíti azt.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"**Recommended**: device token and notifications are sent to SimpleX Chat notification server, but not the message content, size or who it is from." = "**Megjegyzés:** az eszköztoken és az értesítések elküldésre kerülnek a SimpleX Chat értesítési kiszolgálóra, kivéve az üzenet tartalma, mérete vagy az, hogy kitől származik.";
|
||||
"**Recommended**: device token and notifications are sent to SimpleX Chat notification server, but not the message content, size or who it is from." = "**Javasolt**: az eszköztoken és az értesítések elküldésre kerülnek a SimpleX Chat értesítési kiszolgálóra, kivéve az üzenet tartalma, mérete vagy az, hogy kitől származik.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"**Warning**: Instant push notifications require passphrase saved in Keychain." = "**Figyelmeztetés:** Az azonnali push-értesítésekhez a kulcstartóban tárolt jelmondat megadása szükséges.";
|
||||
@@ -149,10 +149,10 @@
|
||||
"%@ is connected!" = "%@ kapcsolódott!";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"%@ is not verified" = "%@ nem hitelesített";
|
||||
"%@ is not verified" = "%@ nem ellenőrzött";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"%@ is verified" = "%@ hitelesítve";
|
||||
"%@ is verified" = "%@ ellenőrizve";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"%@ uploaded" = "%@ feltöltve";
|
||||
@@ -368,7 +368,7 @@
|
||||
|
||||
/* accept contact request via notification
|
||||
swipe action */
|
||||
"Accept incognito" = "Fogadás inkognitóban";
|
||||
"Accept incognito" = "Fogadás inkognítóban";
|
||||
|
||||
/* call status */
|
||||
"accepted call" = "elfogadott hívás";
|
||||
@@ -467,7 +467,7 @@
|
||||
"All messages will be deleted - this cannot be undone!" = "Minden üzenet törlésre kerül – ez a művelet nem vonható vissza!";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"All messages will be deleted - this cannot be undone! The messages will be deleted ONLY for you." = "Minden üzenet törlésre kerül - ez a művelet nem vonható vissza! Az üzenetek CSAK az Ön számára törlődnek.";
|
||||
"All messages will be deleted - this cannot be undone! The messages will be deleted ONLY for you." = "Minden üzenet törlésre kerül - ez a művelet nem vonható vissza! Az üzenetek CSAK az ön számára törlődnek.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"All new messages from %@ will be hidden!" = "Minden új üzenet elrejtésre kerül tőle: %@!";
|
||||
@@ -494,7 +494,7 @@
|
||||
"Allow calls?" = "Hívások engedélyezése?";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Allow disappearing messages only if your contact allows it to you." = "Az eltűnő üzenetek küldése csak abban az esetben van engedélyezve, ha az ismerőse is engedélyezi az Ön számára.";
|
||||
"Allow disappearing messages only if your contact allows it to you." = "Az eltűnő üzenetek küldése csak abban az esetben van engedélyezve, ha az ismerőse is engedélyezi az ön számára.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Allow downgrade" = "Visszafejlesztés engedélyezése";
|
||||
@@ -595,9 +595,6 @@
|
||||
/* No comment provided by engineer. */
|
||||
"App passcode is replaced with self-destruct passcode." = "Az alkalmazás jelkód helyettesítésre kerül egy önmegsemmisítő jelkóddal.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"App session" = "Alkalmazás munkamenete";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"App version" = "Alkalmazás verzió";
|
||||
|
||||
@@ -867,7 +864,7 @@
|
||||
"changed role of %@ to %@" = "%1$@ szerepkörét megváltoztatta erre: %2$@";
|
||||
|
||||
/* rcv group event chat item */
|
||||
"changed your role to %@" = "megváltoztatta az Ön szerepkörét erre: %@";
|
||||
"changed your role to %@" = "megváltoztatta a szerepkörét erre: %@";
|
||||
|
||||
/* chat item text */
|
||||
"changing address for %@…" = "cím megváltoztatása nála: %@…";
|
||||
@@ -917,9 +914,6 @@
|
||||
/* alert message */
|
||||
"Chat preferences were changed." = "A csevegési beállítások megváltoztak.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Chat profile" = "Felhasználói profil";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Chat theme" = "Csevegés témája";
|
||||
|
||||
@@ -1044,10 +1038,10 @@
|
||||
"Connect to yourself?" = "Kapcsolódás saját magához?";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Connect to yourself?\nThis is your own one-time link!" = "Kapcsolódás saját magához?\nEz az Ön egyszer használható hivatkozása!";
|
||||
"Connect to yourself?\nThis is your own one-time link!" = "Kapcsolódás saját magához?\nEz az ön egyszer használható hivatkozása!";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Connect to yourself?\nThis is your own SimpleX address!" = "Kapcsolódás saját magához?\nEz az Ön SimpleX-címe!";
|
||||
"Connect to yourself?\nThis is your own SimpleX address!" = "Kapcsolódás saját magához?\nEz az ön SimpleX-címe!";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Connect via contact address" = "Kapcsolódás a kapcsolattartási címen keresztül";
|
||||
@@ -1071,7 +1065,7 @@
|
||||
"Connected desktop" = "Társított számítógép";
|
||||
|
||||
/* rcv group event chat item */
|
||||
"connected directly" = "közvetlenül kapcsolódott";
|
||||
"connected directly" = "közvetlenül kapcsolódva";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Connected servers" = "Kapcsolódott kiszolgálók";
|
||||
@@ -1179,7 +1173,7 @@
|
||||
"Contact is deleted." = "Törölt ismerős.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Contact name" = "Csak név";
|
||||
"Contact name" = "Ismerős neve";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Contact preferences" = "Ismerős beállításai";
|
||||
@@ -1191,7 +1185,7 @@
|
||||
"Contacts" = "Ismerősök";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Contacts can mark messages for deletion; you will be able to view them." = "Az ismerősei törlésre jelölhetnek üzeneteket; Ön majd meg tudja nézni azokat.";
|
||||
"Contacts can mark messages for deletion; you will be able to view them." = "Az ismerősei törlésre jelölhetnek üzeneteket; ön majd meg tudja nézni azokat.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Continue" = "Folytatás";
|
||||
@@ -1221,7 +1215,7 @@
|
||||
"Create a group using a random profile." = "Csoport létrehozása véletlenszerűen létrehozott profillal.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Create an address to let people connect with you." = "Cím létrehozása, hogy az emberek kapcsolatba léphessenek Önnel.";
|
||||
"Create an address to let people connect with you." = "Cím létrehozása, hogy az emberek kapcsolatba léphessenek önnel.";
|
||||
|
||||
/* server test step */
|
||||
"Create file" = "Fájl létrehozása";
|
||||
@@ -1492,7 +1486,7 @@
|
||||
"Delete queue" = "Sorbaállítás törlése";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Delete up to 20 messages at once." = "Legfeljebb 20 üzenet egyszerre való törlése.";
|
||||
"Delete up to 20 messages at once." = "Legfeljebb 20 üzenet törlése egyszerre.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Delete user profile?" = "Felhasználói profil törlése?";
|
||||
@@ -1642,7 +1636,7 @@
|
||||
"Do not send history to new members." = "Az előzmények ne kerüljenek elküldésre az új tagok számára.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Do NOT send messages directly, even if your or destination server does not support private routing." = "Ne küldjön üzeneteket közvetlenül, még akkor sem, ha az Ön kiszolgálója vagy a célkiszolgáló nem támogatja a privát útválasztást.";
|
||||
"Do NOT send messages directly, even if your or destination server does not support private routing." = "Ne küldjön üzeneteket közvetlenül, még akkor sem, ha az ön kiszolgálója vagy a célkiszolgáló nem támogatja a privát útválasztást.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Do not use credentials with proxy." = "Ne használja a hitelesítőadatokat proxyval.";
|
||||
@@ -1769,7 +1763,7 @@
|
||||
"enabled for contact" = "engedélyezve az ismerős számára";
|
||||
|
||||
/* enabled status */
|
||||
"enabled for you" = "engedélyezve az Ön számára";
|
||||
"enabled for you" = "engedélyezve az ön számára";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Encrypt" = "Titkosít";
|
||||
@@ -1907,7 +1901,7 @@
|
||||
"Error changing setting" = "Hiba a beállítás megváltoztatásakor";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Error changing to incognito!" = "Hiba az inkognitóprofilra való váltáskor!";
|
||||
"Error changing to incognito!" = "Hiba az inkognitó-profilra való váltáskor!";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Error connecting to forwarding server %@. Please try later." = "Hiba a(z) %@ továbbító kiszolgálóhoz való kapcsolódáskor. Próbálja meg később.";
|
||||
@@ -2048,7 +2042,7 @@
|
||||
"Error switching profile" = "Hiba a profilváltáskor";
|
||||
|
||||
/* alertTitle */
|
||||
"Error switching profile!" = "Hiba a profilváltásakor!";
|
||||
"Error switching profile!" = "Hiba a profil váltásakor!";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Error synchronizing connection" = "Hiba a kapcsolat szinkronizálásakor";
|
||||
@@ -2069,7 +2063,7 @@
|
||||
"Error uploading the archive" = "Hiba az archívum feltöltésekor";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Error verifying passphrase:" = "Hiba a jelmondat hitelesítésekor:";
|
||||
"Error verifying passphrase:" = "Hiba a jelmondat ellenőrzésekor:";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Error: " = "Hiba: ";
|
||||
@@ -2129,7 +2123,7 @@
|
||||
"Faster joining and more reliable messages." = "Gyorsabb csatlakozás és megbízhatóbb üzenetkézbesítés.";
|
||||
|
||||
/* swipe action */
|
||||
"Favorite" = "Kedvenc";
|
||||
"Favorite" = "Csillag";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"File error" = "Fájlhiba";
|
||||
@@ -2180,7 +2174,7 @@
|
||||
"Files and media prohibited!" = "A fájlok- és a médiatartalmak küldése le van tiltva!";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Filter unread and favorite chats." = "Olvasatlan és kedvenc csevegésekre való szűrés.";
|
||||
"Filter unread and favorite chats." = "Olvasatlan és csillagozott csevegésekre való szűrés.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Finalize migration" = "Átköltöztetés véglegesítése";
|
||||
@@ -2306,7 +2300,7 @@
|
||||
"Group full name (optional)" = "Csoport teljes neve (nem kötelező)";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Group image" = "Csoport profilképe";
|
||||
"Group image" = "Csoportkép";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Group invitation" = "Csoportmeghívó";
|
||||
@@ -2369,22 +2363,22 @@
|
||||
"Group will be deleted for all members - this cannot be undone!" = "A csoport törlésre kerül minden tag számára - ez a művelet nem vonható vissza!";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Group will be deleted for you - this cannot be undone!" = "A csoport törlésre kerül az Ön számára - ez a művelet nem vonható vissza!";
|
||||
"Group will be deleted for you - this cannot be undone!" = "A csoport törlésre kerül az ön számára - ez a művelet nem vonható vissza!";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Help" = "Segítség";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Hidden" = "Se név, se üzenet";
|
||||
"Hidden" = "Rejtett";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Hidden chat profiles" = "Rejtett csevegési profilok";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Hidden profile password" = "Rejtett profiljelszó";
|
||||
"Hidden profile password" = "Rejtett profil jelszó";
|
||||
|
||||
/* chat item action */
|
||||
"Hide" = "Elrejtés";
|
||||
"Hide" = "Elrejt";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Hide app screen in the recent apps." = "Alkalmazás képernyőjének elrejtése a gyakran használt alkalmazások között.";
|
||||
@@ -2393,7 +2387,7 @@
|
||||
"Hide profile" = "Profil elrejtése";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Hide:" = "Elrejtés:";
|
||||
"Hide:" = "Elrejt:";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"History" = "Előzmények";
|
||||
@@ -2495,7 +2489,7 @@
|
||||
"Incognito" = "Inkognitó";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Incognito groups" = "Inkognitócsoportok";
|
||||
"Incognito groups" = "Inkognitó csoportok";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Incognito mode" = "Inkognitómód";
|
||||
@@ -2504,7 +2498,7 @@
|
||||
"Incognito mode protects your privacy by using a new random profile for each contact." = "Az inkognitómód védi személyes adatait azáltal, hogy minden ismerőshöz új véletlenszerű profilt használ.";
|
||||
|
||||
/* chat list item description */
|
||||
"incognito via contact address link" = "inkognitó a kapcsolattartási címhivatkozáson keresztül";
|
||||
"incognito via contact address link" = "inkognitó a kapcsolattartási hivatkozáson keresztül";
|
||||
|
||||
/* chat list item description */
|
||||
"incognito via group link" = "inkognitó a csoporthivatkozáson keresztül";
|
||||
@@ -2621,7 +2615,7 @@
|
||||
"invited to connect" = "meghívta, hogy csatlakozzon";
|
||||
|
||||
/* rcv group event chat item */
|
||||
"invited via your group link" = "meghíva az Ön csoporthivatkozásán keresztül";
|
||||
"invited via your group link" = "meghíva az ön csoporthivatkozásán keresztül";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"iOS Keychain is used to securely store passphrase - it allows receiving push notifications." = "Az iOS kulcstartó a jelmondat biztonságos tárolására szolgál - lehetővé teszi a push-értesítések fogadását.";
|
||||
@@ -2645,7 +2639,7 @@
|
||||
"It allows having many anonymous connections without any shared data between them in a single chat profile." = "Lehetővé teszi, hogy egyetlen csevegőprofilon belül több anonim kapcsolat legyen, anélkül, hogy megosztott adatok lennének közöttük.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"It can happen when you or your connection used the old database backup." = "Ez akkor fordulhat elő, ha Ön vagy az ismerőse régi adatbázis biztonsági mentést használt.";
|
||||
"It can happen when you or your connection used the old database backup." = "Ez akkor fordulhat elő, ha ön vagy az ismerőse régi adatbázis biztonsági mentést használt.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"It can happen when:\n1. The messages expired in the sending client after 2 days or on the server after 30 days.\n2. Message decryption failed, because you or your contact used old database backup.\n3. The connection was compromised." = "Ez akkor fordulhat elő, ha:\n1. Az üzenetek 2 nap után, vagy a kiszolgálón 30 nap után lejártak.\n2. Az üzenet visszafejtése sikertelen volt, mert vagy az ismerőse régebbi adatbázis biztonsági mentést használt.\n3. A kapcsolat sérült.";
|
||||
@@ -2687,7 +2681,7 @@
|
||||
"Join with current profile" = "Csatlakozás a jelenlegi profillal";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Join your group?\nThis is your link for group %@!" = "Csatlakozik a csoportjához?\nEz az Ön hivatkozása a(z) %@ csoporthoz!";
|
||||
"Join your group?\nThis is your link for group %@!" = "Csatlakozik a csoportjához?\nEz az ön hivatkozása a(z) %@ csoporthoz!";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Joining group" = "Csatlakozás a csoporthoz";
|
||||
@@ -2708,10 +2702,10 @@
|
||||
"Keep your connections" = "Kapcsolatok megtartása";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Keychain error" = "Kulcstartóhiba";
|
||||
"Keychain error" = "Kulcstartó hiba";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"KeyChain error" = "Kulcstartóhiba";
|
||||
"KeyChain error" = "Kulcstartó hiba";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Large file!" = "Nagy fájl!";
|
||||
@@ -2897,7 +2891,7 @@
|
||||
"Message status: %@" = "Üzenetállapot: %@";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Message text" = "Név és üzenet";
|
||||
"Message text" = "Üzenet szövege";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Message too large" = "Az üzenet túl nagy";
|
||||
@@ -3062,7 +3056,7 @@
|
||||
"New member role" = "Új tag szerepköre";
|
||||
|
||||
/* notification */
|
||||
"new message" = "Rejtett üzenet";
|
||||
"new message" = "új üzenet";
|
||||
|
||||
/* notification */
|
||||
"New message" = "Új üzenet";
|
||||
@@ -3073,12 +3067,6 @@
|
||||
/* No comment provided by engineer. */
|
||||
"New passphrase…" = "Új jelmondat…";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"New SOCKS credentials will be used every time you start the app." = "Minden alkalommal, amikor elindítja az alkalmazást, új SOCKS-hitelesítő-adatokat fog használni.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"New SOCKS credentials will be used for each server." = "Minden egyes kiszolgálóhoz új SOCKS-hitelesítő-adatok legyenek használva.";
|
||||
|
||||
/* pref value */
|
||||
"no" = "nem";
|
||||
|
||||
@@ -3121,12 +3109,6 @@
|
||||
/* No comment provided by engineer. */
|
||||
"No network connection" = "Nincs hálózati kapcsolat";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"No permission to record speech" = "Nincs jogosultság megadva a beszéd rögzítéséhez";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"No permission to record video" = "Nincs jogosultság megadva a videó rögzítéséhez";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"No permission to record voice message" = "Nincs engedély a hangüzenet rögzítésére";
|
||||
|
||||
@@ -3190,7 +3172,7 @@
|
||||
"One-time invitation link" = "Egyszer használható meghívó-hivatkozás";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Onion hosts will be **required** for connection.\nRequires compatible VPN." = "Onion-kiszolgálók **szükségesek** a kapcsolódáshoz.\nKompatibilis VPN szükséges.";
|
||||
"Onion hosts will be **required** for connection.\nRequires compatible VPN." = "Az onion-kiszolgálók **szükségesek** a kapcsolódáshoz.\nKompatibilis VPN szükséges.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Onion hosts will be used when available.\nRequires compatible VPN." = "Onion-kiszolgálók használata, ha azok rendelkezésre állnak.\nVPN engedélyezése szükséges.";
|
||||
@@ -3214,25 +3196,25 @@
|
||||
"Only group owners can enable voice messages." = "Csak a csoporttulajdonosok engedélyezhetik a hangüzenetek küldését.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Only you can add message reactions." = "Csak Ön adhat hozzá üzenetreakciókat.";
|
||||
"Only you can add message reactions." = "Csak ön adhat hozzá üzenetreakciókat.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Only you can irreversibly delete messages (your contact can mark them for deletion). (24 hours)" = "Véglegesen csak Ön törölhet üzeneteket (ismerőse csak törlésre jelölheti meg őket ). (24 óra)";
|
||||
"Only you can irreversibly delete messages (your contact can mark them for deletion). (24 hours)" = "Véglegesen csak ön törölhet üzeneteket (ismerőse csak törlésre jelölheti meg őket ). (24 óra)";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Only you can make calls." = "Csak Ön tud hívásokat indítani.";
|
||||
"Only you can make calls." = "Csak ön tud hívásokat indítani.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Only you can send disappearing messages." = "Csak Ön tud eltűnő üzeneteket küldeni.";
|
||||
"Only you can send disappearing messages." = "Csak ön tud eltűnő üzeneteket küldeni.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Only you can send voice messages." = "Csak Ön tud hangüzeneteket küldeni.";
|
||||
"Only you can send voice messages." = "Csak ön tud hangüzeneteket küldeni.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Only your contact can add message reactions." = "Csak az ismerőse tud üzenetreakciókat küldeni.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Only your contact can irreversibly delete messages (you can mark them for deletion). (24 hours)" = "Csak az ismerőse tudja az üzeneteket véglegesen törölni (Ön csak törlésre jelölheti meg azokat). (24 óra)";
|
||||
"Only your contact can irreversibly delete messages (you can mark them for deletion). (24 hours)" = "Csak az ismerőse tudja az üzeneteket véglegesen törölni (ön csak törlésre jelölheti meg azokat). (24 óra)";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Only your contact can make calls." = "Csak az ismerőse tud hívást indítani.";
|
||||
@@ -3328,7 +3310,7 @@
|
||||
"Password to show" = "Jelszó megjelenítése";
|
||||
|
||||
/* past/unknown group member */
|
||||
"Past member %@" = "(Már nem tag) %@";
|
||||
"Past member %@" = "%@ (már nem tag)";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Paste desktop address" = "Számítógép címének beillesztése";
|
||||
@@ -3349,7 +3331,7 @@
|
||||
"Pending" = "Függőben";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"People can connect to you only via the links you share." = "Az emberek csak az Ön által megosztott hivatkozáson keresztül kapcsolódhatnak.";
|
||||
"People can connect to you only via the links you share." = "Az emberek csak az ön által megosztott hivatkozáson keresztül kapcsolódhatnak.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Periodically" = "Rendszeresen";
|
||||
@@ -3451,10 +3433,10 @@
|
||||
"Private filenames" = "Privát fájlnevek";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Private message routing" = "Privát üzenet-útválasztás";
|
||||
"Private message routing" = "Privát üzenet útválasztás";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Private message routing 🚀" = "Privát üzenet-útválasztás 🚀";
|
||||
"Private message routing 🚀" = "Privát üzenet útválasztás 🚀";
|
||||
|
||||
/* name of notes to self */
|
||||
"Private notes" = "Privát jegyzetek";
|
||||
@@ -3463,7 +3445,7 @@
|
||||
"Private routing" = "Privát útválasztás";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Private routing error" = "Privát útválasztáshiba";
|
||||
"Private routing error" = "Privát útválasztási hiba";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Profile and server connections" = "Profil és kiszolgálókapcsolatok";
|
||||
@@ -3601,13 +3583,13 @@
|
||||
"Received file event" = "Fogadott fájlesemény";
|
||||
|
||||
/* message info title */
|
||||
"Received message" = "Fogadott üzenetbuborék színe";
|
||||
"Received message" = "Fogadott üzenet";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Received messages" = "Fogadott üzenetek";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Received reply" = "Fogadott válaszüzenet-buborék színe";
|
||||
"Received reply" = "Fogadott válasz";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Received total" = "Összes fogadott";
|
||||
@@ -3710,7 +3692,7 @@
|
||||
"removed profile picture" = "eltávolította a profilképét";
|
||||
|
||||
/* rcv group event chat item */
|
||||
"removed you" = "eltávolította Önt";
|
||||
"removed you" = "eltávolította önt";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Renegotiate" = "Újraegyzetetés";
|
||||
@@ -3996,10 +3978,10 @@
|
||||
"Send message to enable calls." = "Üzenet küldése a hívások engedélyezéséhez.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Send messages directly when IP address is protected and your or destination server does not support private routing." = "Közvetlen üzenetküldés, ha az IP-cím védett és az Ön kiszolgálója vagy a célkiszolgáló nem támogatja a privát útválasztást.";
|
||||
"Send messages directly when IP address is protected and your or destination server does not support private routing." = "Közvetlen üzenetküldés, ha az IP-cím védett és az ön kiszolgálója vagy a célkiszolgáló nem támogatja a privát útválasztást.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Send messages directly when your or destination server does not support private routing." = "Közvetlen üzenetküldés, ha az Ön kiszolgálója vagy a célkiszolgáló nem támogatja a privát útválasztást.";
|
||||
"Send messages directly when your or destination server does not support private routing." = "Közvetlen üzenetküldés, ha az ön kiszolgálója vagy a célkiszolgáló nem támogatja a privát útválasztást.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Send notifications" = "Értesítések küldése";
|
||||
@@ -4062,7 +4044,7 @@
|
||||
"Sent file event" = "Elküldött fájlesemény";
|
||||
|
||||
/* message info title */
|
||||
"Sent message" = "Üzenetbuborék színe";
|
||||
"Sent message" = "Elküldött üzenet";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Sent messages" = "Elküldött üzenetek";
|
||||
@@ -4071,7 +4053,7 @@
|
||||
"Sent messages will be deleted after set time." = "Az elküldött üzenetek törlésre kerülnek a beállított idő után.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Sent reply" = "Válaszüzenet-buborék színe";
|
||||
"Sent reply" = "Elküldött válasz";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Sent total" = "Összes elküldött";
|
||||
@@ -4079,9 +4061,6 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Sent via proxy" = "Proxyn keresztül küldve";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Server" = "Kiszolgáló";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Server address" = "Kiszolgáló címe";
|
||||
|
||||
@@ -4209,7 +4188,7 @@
|
||||
"Show developer options" = "Fejlesztői beállítások megjelenítése";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Show last messages" = "Szobák utolsó üzeneteinek megjelenítése a listanézetben";
|
||||
"Show last messages" = "Utolsó üzenetek megjelenítése";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Show message status" = "Üzenet állapot megjelenítése";
|
||||
@@ -4218,7 +4197,7 @@
|
||||
"Show percentage" = "Százalék megjelenítése";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Show preview" = "Értesítés előnézete";
|
||||
"Show preview" = "Előnézet megjelenítése";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Show QR code" = "QR-kód megjelenítése";
|
||||
@@ -4272,7 +4251,7 @@
|
||||
"SimpleX one-time invitation" = "Egyszer használható SimpleX-meghívó";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Simplified incognito mode" = "Egyszerűsített inkognitómód";
|
||||
"Simplified incognito mode" = "Egyszerűsített inkognító mód";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Size" = "Méret";
|
||||
@@ -4419,7 +4398,7 @@
|
||||
"Tap to join incognito" = "Koppintson az inkognitóban való csatlakozáshoz";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Tap to paste link" = "Koppintson ide a hivatkozás beillesztéséhez";
|
||||
"Tap to paste link" = "Koppintson a hivatkozás beillesztéséhez";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Tap to scan" = "Koppintson a beolvasáshoz";
|
||||
@@ -4479,7 +4458,7 @@
|
||||
"The code you scanned is not a SimpleX link QR code." = "A beolvasott QR-kód nem egy SimpleX QR-kód hivatkozás.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"The connection you accepted will be cancelled!" = "Az Ön által elfogadott kérelem vissza lesz vonva!";
|
||||
"The connection you accepted will be cancelled!" = "Az ön által elfogadott kérelem vissza lesz vonva!";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"The contact you shared this link with will NOT be able to connect!" = "Ismerőse, akivel megosztotta ezt a hivatkozást, NEM fog tudni kapcsolódni!";
|
||||
@@ -4572,10 +4551,10 @@
|
||||
"This group no longer exists." = "Ez a csoport már nem létezik.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"This is your own one-time link!" = "Ez az Ön egyszer használható hivatkozása!";
|
||||
"This is your own one-time link!" = "Ez az ön egyszer használható hivatkozása!";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"This is your own SimpleX address!" = "Ez az Ön SimpleX-címe!";
|
||||
"This is your own SimpleX address!" = "Ez az ön SimpleX-címe!";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"This link was used with another mobile device, please create a new link on the desktop." = "Ezt a hivatkozást egy másik hordozható eszközön már használták, hozzon létre egy új hivatkozást a számítógépén.";
|
||||
@@ -4610,12 +4589,6 @@
|
||||
/* No comment provided by engineer. */
|
||||
"To protect your IP address, private routing uses your SMP servers to deliver messages." = "Az IP-cím védelmének érdekében a privát útválasztás az SMP-kiszolgálókat használja az üzenetek kézbesítéséhez.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"To record speech please grant permission to use Microphone." = "A beszéd rögzítéséhez adjon engedélyt a Mikrofon használatára.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"To record video please grant permission to use Camera." = "A videó rögzítéséhez adjon engedélyt a Kamera használatára.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"To record voice message please grant permission to use Microphone." = "Hangüzenet rögzítéséhez adjon engedélyt a mikrofon használathoz.";
|
||||
|
||||
@@ -4626,13 +4599,13 @@
|
||||
"To support instant push notifications the chat database has to be migrated." = "Az azonnali push-értesítések támogatásához a csevegési adatbázis átköltöztetése szükséges.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"To verify end-to-end encryption with your contact compare (or scan) the code on your devices." = "A végpontok közötti titkosítás hitelesítéséhez hasonlítsa össze (vagy olvassa be a QR-kódot) az ismerőse eszközén lévő kóddal.";
|
||||
"To verify end-to-end encryption with your contact compare (or scan) the code on your devices." = "A végpontok közötti titkosítás ellenőrzéséhez hasonlítsa össze (vagy olvassa be a QR-kódot) az ismerőse eszközén lévő kóddal.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Toggle chat list:" = "Csevegőlista átváltása:";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Toggle incognito when connecting." = "Inkognitómód használata kapcsolódáskor.";
|
||||
"Toggle incognito when connecting." = "Inkognitómód kapcsolódáskor.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Toolbar opacity" = "Eszköztár átlátszatlansága";
|
||||
@@ -4686,7 +4659,7 @@
|
||||
"Unexpected migration state" = "Váratlan átköltöztetési állapot";
|
||||
|
||||
/* swipe action */
|
||||
"Unfav." = "Kedvenc megszüntetése";
|
||||
"Unfav." = "Csillagozás megszüntetése";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Unhide" = "Felfedés";
|
||||
@@ -4815,13 +4788,13 @@
|
||||
"Use iOS call interface" = "Az iOS hívófelület használata";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Use new incognito profile" = "Új inkognitóprofil használata";
|
||||
"Use new incognito profile" = "Az új inkognító profil használata";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Use only local notifications?" = "Csak helyi értesítések használata?";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Use private routing with unknown servers when IP address is not protected." = "Használjon privát útválasztást ismeretlen kiszolgálókkal, ha az IP-cím nem védett.";
|
||||
"Use private routing with unknown servers when IP address is not protected." = "Privát útválasztás használata ismeretlen kiszolgálókkal, ha az IP-cím nem védett.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Use private routing with unknown servers." = "Használjon privát útválasztást ismeretlen kiszolgálókkal.";
|
||||
@@ -4841,6 +4814,9 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Use the app with one hand." = "Használja az alkalmazást egy kézzel.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"User profile" = "Felhasználói profil";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"User selection" = "Felhasználó kiválasztása";
|
||||
|
||||
@@ -4857,25 +4833,25 @@
|
||||
"v%@ (%@)" = "v%@ (%@)";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Verify code with desktop" = "Kód hitelesítése a számítógépen";
|
||||
"Verify code with desktop" = "Kód ellenőrzése a számítógépen";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Verify connection" = "Kapcsolat hitelesítése";
|
||||
"Verify connection" = "Kapcsolat ellenőrzése";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Verify connection security" = "Biztonságos kapcsolat hitelesítése";
|
||||
"Verify connection security" = "Kapcsolat biztonságának ellenőrzése";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Verify connections" = "Kapcsolatok hitelesítése";
|
||||
"Verify connections" = "Kapcsolatok ellenőrzése";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Verify database passphrase" = "Az adatbázis jelmondatának hitelesítése";
|
||||
"Verify database passphrase" = "Az adatbázis jelmondatának ellenőrzése";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Verify passphrase" = "Jelmondat hitelesítése";
|
||||
"Verify passphrase" = "Jelmondat ellenőrzése";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Verify security code" = "Biztonsági kód hitelesítése";
|
||||
"Verify security code" = "Biztonsági kód ellenőrzése";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Via browser" = "Böngészőn keresztül";
|
||||
@@ -4962,7 +4938,7 @@
|
||||
"Wallpaper background" = "Háttérkép háttérszíne";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"wants to connect to you!" = "kapcsolatba akar lépni Önnel!";
|
||||
"wants to connect to you!" = "kapcsolatba akar lépni önnel!";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Warning: starting chat on multiple devices is not supported and will cause message delivery failures" = "Figyelmeztetés: a csevegés elindítása egyszerre több eszközön nem támogatott, továbbá üzenetkézbesítési hibákat okozhat";
|
||||
@@ -4998,10 +4974,10 @@
|
||||
"when IP hidden" = "ha az IP-cím rejtett";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"When people request to connect, you can accept or reject it." = "Amikor az emberek kapcsolatot kérnek, Ön elfogadhatja vagy elutasíthatja azokat.";
|
||||
"When people request to connect, you can accept or reject it." = "Amikor az emberek kapcsolatot kérnek, ön elfogadhatja vagy elutasíthatja azokat.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"When you share an incognito profile with somebody, this profile will be used for the groups they invite you to." = "Inkognitóprofil megosztása esetén a rendszer azt a profilt fogja használni azokhoz a csoportokhoz, amelyekbe meghívást kapott.";
|
||||
"When you share an incognito profile with somebody, this profile will be used for the groups they invite you to." = "Inkognitó-profil megosztása esetén a rendszer azt a profilt fogja használni azokhoz a csoportokhoz, amelyekbe meghívást kapott.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"WiFi" = "Wi-Fi";
|
||||
@@ -5046,7 +5022,7 @@
|
||||
"yes" = "igen";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"you" = "Ön";
|
||||
"you" = "ön";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"You **must not** use the same database on two devices." = "**Nem szabad** ugyanazt az adatbázist használni egyszerre két eszközön.";
|
||||
@@ -5100,7 +5076,7 @@
|
||||
"you are observer" = "megfigyelő szerep";
|
||||
|
||||
/* snd group event chat item */
|
||||
"you blocked %@" = "Ön letiltotta őt: %@";
|
||||
"you blocked %@" = "ön letiltotta őt: %@";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"You can accept calls from lock screen, without device and app authentication." = "Hívásokat fogadhat a lezárási képernyőről, eszköz- és alkalmazás-hitelesítés nélkül.";
|
||||
@@ -5112,7 +5088,7 @@
|
||||
"You can create it later" = "Létrehozás később";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"You can enable later via Settings" = "Később engedélyezheti a „Beállításokban”";
|
||||
"You can enable later via Settings" = "Később engedélyezheti a Beállításokban";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"You can enable them later via app Privacy & Security settings." = "Később engedélyezheti őket az alkalmazás „Adatvédelem és biztonság” menüben.";
|
||||
@@ -5139,10 +5115,10 @@
|
||||
"You can share a link or a QR code - anybody will be able to join the group. You won't lose members of the group if you later delete it." = "Megoszthat egy hivatkozást vagy QR-kódot - így bárki csatlakozhat a csoporthoz. Ha a csoport később törlésre kerül, akkor nem fogja elveszíteni annak tagjait.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"You can share this address with your contacts to let them connect with **%@**." = "Megoszthatja ezt a címet az ismerőseivel, hogy kapcsolatba léphessenek Önnel a(z) **%@** nevű profilján keresztül.";
|
||||
"You can share this address with your contacts to let them connect with **%@**." = "Megoszthatja ezt a címet az ismerőseivel, hogy kapcsolatba léphessenek önnel a(z) **%@** nevű profilján keresztül.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"You can share your address as a link or QR code - anybody can connect to you." = "Megoszthatja a címét egy hivatkozásként vagy QR-kódként – így bárki kapcsolódhat Önhöz.";
|
||||
"You can share your address as a link or QR code - anybody can connect to you." = "Megoszthatja a címét egy hivatkozásként vagy QR-kódként – így bárki kapcsolódhat önhöz.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"You can start chat via app Settings / Database or by restarting the app" = "A csevegést az alkalmazás „Beállítások / Adatbázis” menüben vagy az alkalmazás újraindításával indíthatja el";
|
||||
@@ -5169,16 +5145,16 @@
|
||||
"you changed address for %@" = "cím megváltoztatva nála: %@";
|
||||
|
||||
/* snd group event chat item */
|
||||
"you changed role for yourself to %@" = "saját szerepköre megváltozott erre: %@";
|
||||
"you changed role for yourself to %@" = "saját szerepkör megváltoztatva erre: %@";
|
||||
|
||||
/* snd group event chat item */
|
||||
"you changed role of %@ to %@" = "Ön megváltoztatta %1$@ szerepkörét erre: %@";
|
||||
"you changed role of %@ to %@" = "%1$@ szerepkörét megváltoztatta erre: %@";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"You control through which server(s) **to receive** the messages, your contacts – the servers you use to message them." = "Ön szabályozhatja, hogy mely kiszogál(ók)ón keresztül **kapja** az üzeneteket, az ismerősöket - az üzenetküldéshez használt kiszolgálókon.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"You could not be verified; please try again." = "Nem sikerült hitelesíteni; próbálja meg újra.";
|
||||
"You could not be verified; please try again." = "Nem sikerült ellenőrizni; próbálja meg újra.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"You have already requested connection via this address!" = "Már küldött egy kapcsolatkérést ezen a címen keresztül!";
|
||||
@@ -5199,7 +5175,7 @@
|
||||
"You joined this group. Connecting to inviting group member." = "Csatlakozott ehhez a csoporthoz. Kapcsolódás a meghívó csoporttaghoz.";
|
||||
|
||||
/* snd group event chat item */
|
||||
"you left" = "Ön elhagyta a csoportot";
|
||||
"you left" = "elhagyta a csoportot";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"You may migrate the exported database." = "Az exportált adatbázist átköltöztetheti.";
|
||||
@@ -5220,7 +5196,7 @@
|
||||
"You rejected group invitation" = "Csoportmeghívó elutasítva";
|
||||
|
||||
/* snd group event chat item */
|
||||
"you removed %@" = "Ön eltávolította őt: %@";
|
||||
"you removed %@" = "eltávolította őt: %@";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"You sent group invitation" = "Csoportmeghívó elküldve";
|
||||
@@ -5232,7 +5208,7 @@
|
||||
"you shared one-time link incognito" = "egyszer használható hivatkozást osztott meg inkognitóban";
|
||||
|
||||
/* snd group event chat item */
|
||||
"you unblocked %@" = "Ön feloldotta %@ letiltását";
|
||||
"you unblocked %@" = "ön feloldotta %@ letiltását";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"You will be connected to group when the group host's device is online, please wait or check later!" = "Akkor lesz kapcsolódva a csoporthoz, amikor a csoport tulajdonosának eszköze online lesz, várjon, vagy ellenőrizze később!";
|
||||
@@ -5262,13 +5238,13 @@
|
||||
"You won't lose your contacts if you later delete your address." = "Nem veszíti el az ismerőseit, ha később törli a címét.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"you: " = "Ön: ";
|
||||
"you: " = "ön: ";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"You're trying to invite contact with whom you've shared an incognito profile to the group in which you're using your main profile" = "Egy olyan ismerősét próbálja meghívni, akivel inkognitóprofilt osztott meg abban a csoportban, amelyben a saját fő profilja van használatban";
|
||||
"You're trying to invite contact with whom you've shared an incognito profile to the group in which you're using your main profile" = "Egy olyan ismerőst próbál meghívni, akivel inkognító profilt osztott meg abban a csoportban, amelyben saját fő profilja van használatban";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"You're using an incognito profile for this group - to prevent sharing your main profile inviting contacts is not allowed" = "Inkognitóprofilt használ ehhez a csoporthoz - fő profilja megosztásának elkerülése érdekében a meghívók küldése le van tiltva";
|
||||
"You're using an incognito profile for this group - to prevent sharing your main profile inviting contacts is not allowed" = "Inkognító profilt használ ehhez a csoporthoz - fő profilja megosztásának elkerülése érdekében a meghívók küldése le van tiltva";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Your %@ servers" = "%@ nevű profiljához tartozó kiszolgálók";
|
||||
|
||||
@@ -595,9 +595,6 @@
|
||||
/* No comment provided by engineer. */
|
||||
"App passcode is replaced with self-destruct passcode." = "Il codice di accesso dell'app viene sostituito da un codice di autodistruzione.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"App session" = "Sessione dell'app";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"App version" = "Versione dell'app";
|
||||
|
||||
@@ -917,9 +914,6 @@
|
||||
/* alert message */
|
||||
"Chat preferences were changed." = "Le preferenze della chat sono state cambiate.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Chat profile" = "Profilo utente";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Chat theme" = "Tema della chat";
|
||||
|
||||
@@ -3073,12 +3067,6 @@
|
||||
/* No comment provided by engineer. */
|
||||
"New passphrase…" = "Nuova password…";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"New SOCKS credentials will be used every time you start the app." = "Le nuove credenziali SOCKS verranno usate ogni volta che avvii l'app.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"New SOCKS credentials will be used for each server." = "Le nuove credenziali SOCKS verranno usate per ogni server.";
|
||||
|
||||
/* pref value */
|
||||
"no" = "no";
|
||||
|
||||
@@ -3121,12 +3109,6 @@
|
||||
/* No comment provided by engineer. */
|
||||
"No network connection" = "Nessuna connessione di rete";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"No permission to record speech" = "Nessuna autorizzazione per registrare l'audio";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"No permission to record video" = "Nessuna autorizzazione per registrare il video";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"No permission to record voice message" = "Nessuna autorizzazione per registrare messaggi vocali";
|
||||
|
||||
@@ -4079,9 +4061,6 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Sent via proxy" = "Inviato via proxy";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Server" = "Server";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Server address" = "Indirizzo server";
|
||||
|
||||
@@ -4610,12 +4589,6 @@
|
||||
/* No comment provided by engineer. */
|
||||
"To protect your IP address, private routing uses your SMP servers to deliver messages." = "Per proteggere il tuo indirizzo IP, l'instradamento privato usa i tuoi server SMP per consegnare i messaggi.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"To record speech please grant permission to use Microphone." = "Per registrare l'audio, concedi l'autorizzazione di usare il microfono.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"To record video please grant permission to use Camera." = "Per registrare il video, concedi l'autorizzazione di usare la fotocamera.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"To record voice message please grant permission to use Microphone." = "Per registrare un messaggio vocale, concedi l'autorizzazione all'uso del microfono.";
|
||||
|
||||
@@ -4841,6 +4814,9 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Use the app with one hand." = "Usa l'app con una mano sola.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"User profile" = "Profilo utente";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"User selection" = "Selezione utente";
|
||||
|
||||
|
||||
@@ -701,9 +701,6 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Chat preferences" = "チャット設定";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Chat profile" = "ユーザープロフィール";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Chats" = "チャット";
|
||||
|
||||
@@ -3244,6 +3241,9 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Use SimpleX Chat servers?" = "SimpleX チャット サーバーを使用しますか?";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"User profile" = "ユーザープロフィール";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Using SimpleX Chat servers." = "SimpleX チャット サーバーを使用する。";
|
||||
|
||||
|
||||
@@ -595,9 +595,6 @@
|
||||
/* No comment provided by engineer. */
|
||||
"App passcode is replaced with self-destruct passcode." = "De app-toegangscode wordt vervangen door een zelfvernietigings wachtwoord.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"App session" = "Appsessie";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"App version" = "App versie";
|
||||
|
||||
@@ -917,9 +914,6 @@
|
||||
/* alert message */
|
||||
"Chat preferences were changed." = "Chatvoorkeuren zijn gewijzigd.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Chat profile" = "Gebruikers profiel";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Chat theme" = "Chat thema";
|
||||
|
||||
@@ -3073,12 +3067,6 @@
|
||||
/* No comment provided by engineer. */
|
||||
"New passphrase…" = "Nieuw wachtwoord…";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"New SOCKS credentials will be used every time you start the app." = "Elke keer dat u de app start, worden er nieuwe SOCKS-inloggegevens gebruikt.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"New SOCKS credentials will be used for each server." = "Voor elke server worden nieuwe SOCKS-inloggegevens gebruikt.";
|
||||
|
||||
/* pref value */
|
||||
"no" = "Nee";
|
||||
|
||||
@@ -3121,12 +3109,6 @@
|
||||
/* No comment provided by engineer. */
|
||||
"No network connection" = "Geen netwerkverbinding";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"No permission to record speech" = "Geen toestemming om spraak op te nemen";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"No permission to record video" = "Geen toestemming om video op te nemen";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"No permission to record voice message" = "Geen toestemming om spraakbericht op te nemen";
|
||||
|
||||
@@ -4079,9 +4061,6 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Sent via proxy" = "Verzonden via proxy";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Server" = "Server";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Server address" = "Server adres";
|
||||
|
||||
@@ -4397,9 +4376,6 @@
|
||||
/* No comment provided by engineer. */
|
||||
"System authentication" = "Systeem authenticatie";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Tail" = "Staart";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Take picture" = "Foto nemen";
|
||||
|
||||
@@ -4610,12 +4586,6 @@
|
||||
/* No comment provided by engineer. */
|
||||
"To protect your IP address, private routing uses your SMP servers to deliver messages." = "Om uw IP-adres te beschermen, gebruikt privéroutering uw SMP-servers om berichten te bezorgen.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"To record speech please grant permission to use Microphone." = "Geef toestemming om de microfoon te gebruiken om spraak op te nemen.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"To record video please grant permission to use Camera." = "Om video op te nemen, dient u toestemming te geven om de camera te gebruiken.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"To record voice message please grant permission to use Microphone." = "Geef toestemming om de microfoon te gebruiken om een spraakbericht op te nemen.";
|
||||
|
||||
@@ -4841,6 +4811,9 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Use the app with one hand." = "Gebruik de app met één hand.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"User profile" = "Gebruikers profiel";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"User selection" = "Gebruikersselectie";
|
||||
|
||||
@@ -5097,7 +5070,7 @@
|
||||
"You are not connected to these servers. Private routing is used to deliver messages to them." = "U bent niet verbonden met deze servers. Privéroutering wordt gebruikt om berichten bij hen af te leveren.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"you are observer" = "je bent waarnemer";
|
||||
"you are observer" = "jij bent waarnemer";
|
||||
|
||||
/* snd group event chat item */
|
||||
"you blocked %@" = "je hebt %@ geblokkeerd";
|
||||
@@ -5199,7 +5172,7 @@
|
||||
"You joined this group. Connecting to inviting group member." = "Je bent lid geworden van deze groep. Verbinding maken met uitnodigend groepslid.";
|
||||
|
||||
/* snd group event chat item */
|
||||
"you left" = "je bent vertrokken";
|
||||
"you left" = "jij bent vertrokken";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"You may migrate the exported database." = "U kunt de geëxporteerde database migreren.";
|
||||
|
||||
@@ -160,9 +160,6 @@
|
||||
/* notification title */
|
||||
"%@ wants to connect!" = "%@ chce się połączyć!";
|
||||
|
||||
/* format for date separator in chat */
|
||||
"%@, %@" = "%1$@, %2$@";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"%@, %@ and %lld members" = "%@, %@ i %lld członków";
|
||||
|
||||
@@ -175,24 +172,9 @@
|
||||
/* time interval */
|
||||
"%d days" = "%d dni";
|
||||
|
||||
/* forward confirmation reason */
|
||||
"%d file(s) are still being downloaded." = "%d plik(ów) jest dalej pobieranych.";
|
||||
|
||||
/* forward confirmation reason */
|
||||
"%d file(s) failed to download." = "%d plik(ów) nie udało się pobrać.";
|
||||
|
||||
/* forward confirmation reason */
|
||||
"%d file(s) were deleted." = "%d plik(ów) zostało usuniętych.";
|
||||
|
||||
/* forward confirmation reason */
|
||||
"%d file(s) were not downloaded." = "%d plik(ów) nie zostało pobranych.";
|
||||
|
||||
/* time interval */
|
||||
"%d hours" = "%d godzin";
|
||||
|
||||
/* alert title */
|
||||
"%d messages not forwarded" = "%d wiadomości nie przekazanych";
|
||||
|
||||
/* time interval */
|
||||
"%d min" = "%d min";
|
||||
|
||||
@@ -595,9 +577,6 @@
|
||||
/* No comment provided by engineer. */
|
||||
"App passcode is replaced with self-destruct passcode." = "Pin aplikacji został zastąpiony pinem samozniszczenia.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"App session" = "Sesja aplikacji";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"App version" = "Wersja aplikacji";
|
||||
|
||||
@@ -670,9 +649,6 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Auto-accept images" = "Automatyczne akceptowanie obrazów";
|
||||
|
||||
/* alert title */
|
||||
"Auto-accept settings" = "Ustawienia automatycznej akceptacji";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Back" = "Wstecz";
|
||||
|
||||
@@ -914,12 +890,6 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Chat preferences" = "Preferencje czatu";
|
||||
|
||||
/* alert message */
|
||||
"Chat preferences were changed." = "Preferencje czatu zostały zmienione.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Chat profile" = "Profil użytkownika";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Chat theme" = "Motyw czatu";
|
||||
|
||||
@@ -1208,9 +1178,6 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Core version: v%@" = "Wersja rdzenia: v%@";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Corner" = "Róg";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Correct name to %@?" = "Poprawić imię na %@?";
|
||||
|
||||
@@ -1644,9 +1611,6 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Do NOT send messages directly, even if your or destination server does not support private routing." = "NIE wysyłaj wiadomości bezpośrednio, nawet jeśli serwer docelowy nie obsługuje prywatnego trasowania.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Do not use credentials with proxy." = "Nie używaj danych logowania do proxy.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Do NOT use private routing." = "NIE używaj prywatnego trasowania.";
|
||||
|
||||
@@ -1678,9 +1642,6 @@
|
||||
/* server test step */
|
||||
"Download file" = "Pobierz plik";
|
||||
|
||||
/* alert action */
|
||||
"Download files" = "Pobierz pliki";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Downloaded" = "Pobrane";
|
||||
|
||||
@@ -1897,18 +1858,12 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Error changing address" = "Błąd zmiany adresu";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Error changing connection profile" = "Błąd zmiany połączenia profilu";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Error changing role" = "Błąd zmiany roli";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Error changing setting" = "Błąd zmiany ustawienia";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Error changing to incognito!" = "Błąd zmiany na incognito!";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Error connecting to forwarding server %@. Please try later." = "Błąd połączenia z serwerem przekierowania %@. Spróbuj ponownie później.";
|
||||
|
||||
@@ -1981,9 +1936,6 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Error loading %@ servers" = "Błąd ładowania %@ serwerów";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Error migrating settings" = "Błąd migracji ustawień";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Error opening chat" = "Błąd otwierania czatu";
|
||||
|
||||
@@ -2044,9 +1996,6 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Error stopping chat" = "Błąd zatrzymania czatu";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Error switching profile" = "Błąd zmiany profilu";
|
||||
|
||||
/* alertTitle */
|
||||
"Error switching profile!" = "Błąd przełączania profilu!";
|
||||
|
||||
@@ -2134,9 +2083,6 @@
|
||||
/* No comment provided by engineer. */
|
||||
"File error" = "Błąd pliku";
|
||||
|
||||
/* alert message */
|
||||
"File errors:\n%@" = "Błędy pliku:\n%@";
|
||||
|
||||
/* file error text */
|
||||
"File not found - most likely file was deleted or cancelled." = "Nie odnaleziono pliku - najprawdopodobniej plik został usunięty lub anulowany.";
|
||||
|
||||
@@ -2218,18 +2164,9 @@
|
||||
/* chat item action */
|
||||
"Forward" = "Przekaż dalej";
|
||||
|
||||
/* alert title */
|
||||
"Forward %d message(s)?" = "Przekazać %d wiadomość(i)?";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Forward and save messages" = "Przesyłaj dalej i zapisuj wiadomości";
|
||||
|
||||
/* alert action */
|
||||
"Forward messages" = "Przekaż wiadomości";
|
||||
|
||||
/* alert message */
|
||||
"Forward messages without files?" = "Przekazać wiadomości bez plików?";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"forwarded" = "przekazane dalej";
|
||||
|
||||
@@ -2239,9 +2176,6 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Forwarded from" = "Przekazane dalej od";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Forwarding %lld messages" = "Przekazywanie %lld wiadomości";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Forwarding server %@ failed to connect to destination server %@. Please try later." = "Serwer przekazujący %@ nie mógł połączyć się z serwerem docelowym %@. Spróbuj ponownie później.";
|
||||
|
||||
@@ -2629,9 +2563,6 @@
|
||||
/* No comment provided by engineer. */
|
||||
"iOS Keychain will be used to securely store passphrase after you restart the app or change passphrase - it will allow receiving push notifications." = "iOS Keychain będzie używany do bezpiecznego przechowywania hasła po ponownym uruchomieniu aplikacji lub zmianie hasła - pozwoli to na otrzymywanie powiadomień push.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"IP address" = "Adres IP";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Irreversible message deletion" = "Nieodwracalne usuwanie wiadomości";
|
||||
|
||||
@@ -2884,9 +2815,6 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Message servers" = "Serwery wiadomości";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Message shape" = "Kształt wiadomości";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Message source remains private." = "Źródło wiadomości pozostaje prywatne.";
|
||||
|
||||
@@ -2917,9 +2845,6 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Messages sent" = "Wysłane wiadomości";
|
||||
|
||||
/* alert message */
|
||||
"Messages were deleted after you selected them." = "Wiadomości zostały usunięte po wybraniu ich.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Messages, files and calls are protected by **end-to-end encryption** with perfect forward secrecy, repudiation and break-in recovery." = "Wiadomości, pliki i połączenia są chronione przez **szyfrowanie end-to-end** z doskonałym utajnianiem z wyprzedzeniem i odzyskiem po złamaniu.";
|
||||
|
||||
@@ -3073,12 +2998,6 @@
|
||||
/* No comment provided by engineer. */
|
||||
"New passphrase…" = "Nowe hasło…";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"New SOCKS credentials will be used every time you start the app." = "Nowe poświadczenia SOCKS będą używane przy każdym uruchomieniu aplikacji.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"New SOCKS credentials will be used for each server." = "Dla każdego serwera zostaną użyte nowe poświadczenia SOCKS.";
|
||||
|
||||
/* pref value */
|
||||
"no" = "nie";
|
||||
|
||||
@@ -3121,12 +3040,6 @@
|
||||
/* No comment provided by engineer. */
|
||||
"No network connection" = "Brak połączenia z siecią";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"No permission to record speech" = "Brak zezwoleń do nagrania rozmowy";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"No permission to record video" = "Brak zezwoleń do nagrania wideo";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"No permission to record voice message" = "Brak uprawnień do nagrywania wiadomości głosowej";
|
||||
|
||||
@@ -3142,9 +3055,6 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Nothing selected" = "Nic nie jest zaznaczone";
|
||||
|
||||
/* alert title */
|
||||
"Nothing to forward!" = "Nic do przekazania!";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Notifications" = "Powiadomienia";
|
||||
|
||||
@@ -3297,9 +3207,6 @@
|
||||
/* No comment provided by engineer. */
|
||||
"other errors" = "inne błędy";
|
||||
|
||||
/* alert message */
|
||||
"Other file errors:\n%@" = "Inne błędy pliku:\n%@";
|
||||
|
||||
/* member role */
|
||||
"owner" = "właściciel";
|
||||
|
||||
@@ -3321,9 +3228,6 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Passcode set!" = "Pin ustawiony!";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Password" = "Hasło";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Password to show" = "Hasło do wyświetlenia";
|
||||
|
||||
@@ -3420,9 +3324,6 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Polish interface" = "Polski interfejs";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Port" = "Port";
|
||||
|
||||
/* server test error */
|
||||
"Possibly, certificate fingerprint in server address is incorrect" = "Możliwe, że odcisk palca certyfikatu w adresie serwera jest nieprawidłowy";
|
||||
|
||||
@@ -3534,9 +3435,6 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Proxied servers" = "Serwery trasowane przez proxy";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Proxy requires password" = "Proxy wymaga hasła";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Push notifications" = "Powiadomienia push";
|
||||
|
||||
@@ -3682,9 +3580,6 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Remove" = "Usuń";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Remove archive?" = "Usunąć archiwum?";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Remove image" = "Usuń obraz";
|
||||
|
||||
@@ -3857,9 +3752,6 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Save welcome message?" = "Zapisać wiadomość powitalną?";
|
||||
|
||||
/* alert title */
|
||||
"Save your profile?" = "Zapisać Twój profil?";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"saved" = "zapisane";
|
||||
|
||||
@@ -3878,9 +3770,6 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Saved WebRTC ICE servers will be removed" = "Zapisane serwery WebRTC ICE zostaną usunięte";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Saving %lld messages" = "Zapisywanie %lld wiadomości";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Scale" = "Skaluj";
|
||||
|
||||
@@ -3944,9 +3833,6 @@
|
||||
/* chat item action */
|
||||
"Select" = "Wybierz";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Select chat profile" = "Wybierz profil czatu";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Selected %lld" = "Zaznaczono %lld";
|
||||
|
||||
@@ -4079,9 +3965,6 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Sent via proxy" = "Wysłano przez proxy";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Server" = "Serwer";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Server address" = "Adres serwera";
|
||||
|
||||
@@ -4163,9 +4046,6 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Settings" = "Ustawienia";
|
||||
|
||||
/* alert message */
|
||||
"Settings were changed." = "Ustawienia zostały zmienione.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Shape profile images" = "Kształtuj obrazy profilowe";
|
||||
|
||||
@@ -4187,9 +4067,6 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Share link" = "Udostępnij link";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Share profile" = "Udostępnij profil";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Share this 1-time invite link" = "Udostępnij ten jednorazowy link";
|
||||
|
||||
@@ -4289,15 +4166,9 @@
|
||||
/* No comment provided by engineer. */
|
||||
"SMP server" = "Serwer SMP";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"SOCKS proxy" = "Proxy SOCKS";
|
||||
|
||||
/* blur media */
|
||||
"Soft" = "Łagodny";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Some app settings were not migrated." = "Niektóre ustawienia aplikacji nie zostały zmigrowane.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Some file(s) were not exported:" = "Niektóre plik(i) nie zostały wyeksportowane:";
|
||||
|
||||
@@ -4397,9 +4268,6 @@
|
||||
/* No comment provided by engineer. */
|
||||
"System authentication" = "Uwierzytelnianie systemu";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Tail" = "Ogon";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Take picture" = "Zrób zdjęcie";
|
||||
|
||||
@@ -4529,9 +4397,6 @@
|
||||
/* No comment provided by engineer. */
|
||||
"The text you pasted is not a SimpleX link." = "Tekst, który wkleiłeś nie jest linkiem SimpleX.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"The uploaded database archive will be permanently removed from the servers." = "Przesłane archiwum bazy danych zostanie trwale usunięte z serwerów.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Themes" = "Motywy";
|
||||
|
||||
@@ -4610,12 +4475,6 @@
|
||||
/* No comment provided by engineer. */
|
||||
"To protect your IP address, private routing uses your SMP servers to deliver messages." = "Aby chronić Twój adres IP, prywatne trasowanie używa Twoich serwerów SMP, aby dostarczyć wiadomości.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"To record speech please grant permission to use Microphone." = "Aby nagrać rozmowę, proszę zezwolić na użycie Mikrofonu.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"To record video please grant permission to use Camera." = "Aby nagrać wideo, proszę zezwolić na użycie Aparatu.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"To record voice message please grant permission to use Microphone." = "Aby nagrać wiadomość głosową należy udzielić zgody na użycie Mikrofonu.";
|
||||
|
||||
@@ -4832,9 +4691,6 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Use SimpleX Chat servers?" = "Użyć serwerów SimpleX Chat?";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Use SOCKS proxy" = "Użyj proxy SOCKS";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Use the app while in the call." = "Używaj aplikacji podczas połączenia.";
|
||||
|
||||
@@ -4842,10 +4698,10 @@
|
||||
"Use the app with one hand." = "Korzystaj z aplikacji jedną ręką.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"User selection" = "Wybór użytkownika";
|
||||
"User profile" = "Profil użytkownika";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Username" = "Nazwa użytkownika";
|
||||
"User selection" = "Wybór użytkownika";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Using SimpleX Chat servers." = "Używanie serwerów SimpleX Chat.";
|
||||
@@ -5282,15 +5138,9 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Your chat database is not encrypted - set passphrase to encrypt it." = "Baza danych czatu nie jest szyfrowana - ustaw hasło, aby ją zaszyfrować.";
|
||||
|
||||
/* alert title */
|
||||
"Your chat preferences" = "Twoje preferencje czatu";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Your chat profiles" = "Twoje profile czatu";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Your connection was moved to %@ but an unexpected error occurred while redirecting you to the profile." = "Twoje połączenie zostało przeniesione do %@, ale podczas przekierowywania do profilu wystąpił nieoczekiwany błąd.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Your contact sent a file that is larger than currently supported maximum size (%@)." = "Twój kontakt wysłał plik, który jest większy niż obecnie obsługiwany maksymalny rozmiar (%@).";
|
||||
|
||||
@@ -5300,9 +5150,6 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Your contacts will remain connected." = "Twoje kontakty pozostaną połączone.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Your credentials may be sent unencrypted." = "Twoje poświadczenia mogą zostać wysłane niezaszyfrowane.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Your current chat database will be DELETED and REPLACED with the imported one." = "Twoja obecna baza danych czatu zostanie usunięta i zastąpiona zaimportowaną.";
|
||||
|
||||
@@ -5327,9 +5174,6 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Your profile is stored on your device and shared only with your contacts. SimpleX servers cannot see your profile." = "Twój profil jest przechowywany na urządzeniu i udostępniany tylko Twoim kontaktom. Serwery SimpleX nie mogą zobaczyć Twojego profilu.";
|
||||
|
||||
/* alert message */
|
||||
"Your profile was changed. If you save it, the updated profile will be sent to all your contacts." = "Twój profil został zmieniony. Jeśli go zapiszesz, zaktualizowany profil zostanie wysłany do wszystkich kontaktów.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Your profile, contacts and delivered messages are stored on your device." = "Twój profil, kontakty i dostarczone wiadomości są przechowywane na Twoim urządzeniu.";
|
||||
|
||||
|
||||
@@ -172,24 +172,9 @@
|
||||
/* time interval */
|
||||
"%d days" = "%d дней";
|
||||
|
||||
/* forward confirmation reason */
|
||||
"%d file(s) are still being downloaded." = "%d файл(ов) загружаются.";
|
||||
|
||||
/* forward confirmation reason */
|
||||
"%d file(s) failed to download." = "%d файл(ов) не удалось загрузить.";
|
||||
|
||||
/* forward confirmation reason */
|
||||
"%d file(s) were deleted." = "%d файлов было удалено.";
|
||||
|
||||
/* forward confirmation reason */
|
||||
"%d file(s) were not downloaded." = "%d файлов не было загружено.";
|
||||
|
||||
/* time interval */
|
||||
"%d hours" = "%d ч.";
|
||||
|
||||
/* alert title */
|
||||
"%d messages not forwarded" = "%d сообщений не переслано";
|
||||
|
||||
/* time interval */
|
||||
"%d min" = "%d мин";
|
||||
|
||||
@@ -592,9 +577,6 @@
|
||||
/* No comment provided by engineer. */
|
||||
"App passcode is replaced with self-destruct passcode." = "Код доступа в приложение будет заменен кодом самоуничтожения.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"App session" = "Сессия приложения";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"App version" = "Версия приложения";
|
||||
|
||||
@@ -667,9 +649,6 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Auto-accept images" = "Автоприем изображений";
|
||||
|
||||
/* alert title */
|
||||
"Auto-accept settings" = "Настройки автоприема";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Back" = "Назад";
|
||||
|
||||
@@ -911,12 +890,6 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Chat preferences" = "Предпочтения";
|
||||
|
||||
/* alert message */
|
||||
"Chat preferences were changed." = "Настройки чата были изменены.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Chat profile" = "Профиль чата";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Chat theme" = "Тема чата";
|
||||
|
||||
@@ -1205,9 +1178,6 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Core version: v%@" = "Версия ядра: v%@";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Corner" = "Угол";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Correct name to %@?" = "Исправить имя на %@?";
|
||||
|
||||
@@ -1641,9 +1611,6 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Do NOT send messages directly, even if your or destination server does not support private routing." = "Не отправлять сообщения напрямую, даже если сервер получателя не поддерживает конфиденциальную доставку.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Do not use credentials with proxy." = "Не использовать учетные данные с прокси.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Do NOT use private routing." = "Не использовать конфиденциальную доставку.";
|
||||
|
||||
@@ -1675,9 +1642,6 @@
|
||||
/* server test step */
|
||||
"Download file" = "Загрузка файла";
|
||||
|
||||
/* alert action */
|
||||
"Download files" = "Загрузить файлы";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Downloaded" = "Принято";
|
||||
|
||||
@@ -1894,18 +1858,12 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Error changing address" = "Ошибка при изменении адреса";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Error changing connection profile" = "Ошибка при изменении профиля соединения";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Error changing role" = "Ошибка при изменении роли";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Error changing setting" = "Ошибка при изменении настройки";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Error changing to incognito!" = "Ошибка при смене на Инкогнито!";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Error connecting to forwarding server %@. Please try later." = "Ошибка подключения к пересылающему серверу %@. Попробуйте позже.";
|
||||
|
||||
@@ -1978,9 +1936,6 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Error loading %@ servers" = "Ошибка загрузки %@ серверов";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Error migrating settings" = "Ошибка миграции настроек";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Error opening chat" = "Ошибка доступа к чату";
|
||||
|
||||
@@ -2041,9 +1996,6 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Error stopping chat" = "Ошибка при остановке чата";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Error switching profile" = "Ошибка переключения профиля";
|
||||
|
||||
/* alertTitle */
|
||||
"Error switching profile!" = "Ошибка выбора профиля!";
|
||||
|
||||
@@ -2131,9 +2083,6 @@
|
||||
/* No comment provided by engineer. */
|
||||
"File error" = "Ошибка файла";
|
||||
|
||||
/* alert message */
|
||||
"File errors:\n%@" = "Ошибки файлов:\n%@";
|
||||
|
||||
/* file error text */
|
||||
"File not found - most likely file was deleted or cancelled." = "Файл не найден - скорее всего, файл был удален или отменен.";
|
||||
|
||||
@@ -2215,18 +2164,9 @@
|
||||
/* chat item action */
|
||||
"Forward" = "Переслать";
|
||||
|
||||
/* alert title */
|
||||
"Forward %d message(s)?" = "Переслать %d сообщение(й)?";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Forward and save messages" = "Переслать и сохранить сообщение";
|
||||
|
||||
/* alert action */
|
||||
"Forward messages" = "Переслать сообщения";
|
||||
|
||||
/* alert message */
|
||||
"Forward messages without files?" = "Переслать сообщения без файлов?";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"forwarded" = "переслано";
|
||||
|
||||
@@ -2236,9 +2176,6 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Forwarded from" = "Переслано из";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Forwarding %lld messages" = "Пересылка %lld сообщений";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Forwarding server %@ failed to connect to destination server %@. Please try later." = "Пересылающий сервер %@ не смог подключиться к серверу назначения %@. Попробуйте позже.";
|
||||
|
||||
@@ -2626,9 +2563,6 @@
|
||||
/* No comment provided by engineer. */
|
||||
"iOS Keychain will be used to securely store passphrase after you restart the app or change passphrase - it will allow receiving push notifications." = "Пароль базы данных будет безопасно сохранен в iOS Keychain после запуска чата или изменения пароля - это позволит получать мгновенные уведомления.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"IP address" = "IP адрес";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Irreversible message deletion" = "Окончательное удаление сообщений";
|
||||
|
||||
@@ -2881,9 +2815,6 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Message servers" = "Серверы сообщений";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Message shape" = "Форма сообщений";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Message source remains private." = "Источник сообщения остаётся конфиденциальным.";
|
||||
|
||||
@@ -2914,9 +2845,6 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Messages sent" = "Сообщений отправлено";
|
||||
|
||||
/* alert message */
|
||||
"Messages were deleted after you selected them." = "Сообщения были удалены после того, как вы их выбрали.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Messages, files and calls are protected by **end-to-end encryption** with perfect forward secrecy, repudiation and break-in recovery." = "Сообщения, файлы и звонки защищены **end-to-end шифрованием** с прямой секретностью (PFS), правдоподобным отрицанием и восстановлением от взлома.";
|
||||
|
||||
@@ -3070,12 +2998,6 @@
|
||||
/* No comment provided by engineer. */
|
||||
"New passphrase…" = "Новый пароль…";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"New SOCKS credentials will be used every time you start the app." = "Новые учетные данные SOCKS будут использоваться при каждом запуске приложения.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"New SOCKS credentials will be used for each server." = "Новые учетные данные SOCKS будут использоваться для каждого сервера.";
|
||||
|
||||
/* pref value */
|
||||
"no" = "нет";
|
||||
|
||||
@@ -3118,12 +3040,6 @@
|
||||
/* No comment provided by engineer. */
|
||||
"No network connection" = "Нет интернет-соединения";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"No permission to record speech" = "Нет разрешения на запись речи";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"No permission to record video" = "Нет разрешения на запись видео";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"No permission to record voice message" = "Нет разрешения для записи голосового сообщения";
|
||||
|
||||
@@ -3139,9 +3055,6 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Nothing selected" = "Ничего не выбрано";
|
||||
|
||||
/* alert title */
|
||||
"Nothing to forward!" = "Нет сообщений, которые можно переслать!";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Notifications" = "Уведомления";
|
||||
|
||||
@@ -3294,9 +3207,6 @@
|
||||
/* No comment provided by engineer. */
|
||||
"other errors" = "другие ошибки";
|
||||
|
||||
/* alert message */
|
||||
"Other file errors:\n%@" = "Другие ошибки файлов:\n%@";
|
||||
|
||||
/* member role */
|
||||
"owner" = "владелец";
|
||||
|
||||
@@ -3318,9 +3228,6 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Passcode set!" = "Код доступа установлен!";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Password" = "Пароль";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Password to show" = "Пароль чтобы раскрыть";
|
||||
|
||||
@@ -3417,9 +3324,6 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Polish interface" = "Польский интерфейс";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Port" = "Порт";
|
||||
|
||||
/* server test error */
|
||||
"Possibly, certificate fingerprint in server address is incorrect" = "Возможно, хэш сертификата в адресе сервера неверный";
|
||||
|
||||
@@ -3531,9 +3435,6 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Proxied servers" = "Проксированные серверы";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Proxy requires password" = "Прокси требует пароль";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Push notifications" = "Доставка уведомлений";
|
||||
|
||||
@@ -3679,9 +3580,6 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Remove" = "Удалить";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Remove archive?" = "Удалить архив?";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Remove image" = "Удалить изображение";
|
||||
|
||||
@@ -3854,9 +3752,6 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Save welcome message?" = "Сохранить приветственное сообщение?";
|
||||
|
||||
/* alert title */
|
||||
"Save your profile?" = "Сохранить ваш профиль?";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"saved" = "сохранено";
|
||||
|
||||
@@ -3875,9 +3770,6 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Saved WebRTC ICE servers will be removed" = "Сохраненные WebRTC ICE серверы будут удалены";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Saving %lld messages" = "Сохранение %lld сообщений";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Scale" = "Масштаб";
|
||||
|
||||
@@ -3941,9 +3833,6 @@
|
||||
/* chat item action */
|
||||
"Select" = "Выбрать";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Select chat profile" = "Выберите профиль чата";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Selected %lld" = "Выбрано %lld";
|
||||
|
||||
@@ -4076,9 +3965,6 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Sent via proxy" = "Отправлено через прокси";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Server" = "Сервер";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Server address" = "Адрес сервера";
|
||||
|
||||
@@ -4160,9 +4046,6 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Settings" = "Настройки";
|
||||
|
||||
/* alert message */
|
||||
"Settings were changed." = "Настройки были изменены.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Shape profile images" = "Форма картинок профилей";
|
||||
|
||||
@@ -4184,9 +4067,6 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Share link" = "Поделиться ссылкой";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Share profile" = "Поделиться профилем";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Share this 1-time invite link" = "Поделиться одноразовой ссылкой-приглашением";
|
||||
|
||||
@@ -4286,15 +4166,9 @@
|
||||
/* No comment provided by engineer. */
|
||||
"SMP server" = "SMP сервер";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"SOCKS proxy" = "SOCKS прокси";
|
||||
|
||||
/* blur media */
|
||||
"Soft" = "Слабое";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Some app settings were not migrated." = "Некоторые настройки приложения не были перенесены.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Some file(s) were not exported:" = "Некоторые файл(ы) не были экспортированы:";
|
||||
|
||||
@@ -4394,9 +4268,6 @@
|
||||
/* No comment provided by engineer. */
|
||||
"System authentication" = "Системная аутентификация";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Tail" = "Хвост";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Take picture" = "Сделать фото";
|
||||
|
||||
@@ -4526,9 +4397,6 @@
|
||||
/* No comment provided by engineer. */
|
||||
"The text you pasted is not a SimpleX link." = "Вставленный текст не является SimpleX-ссылкой.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"The uploaded database archive will be permanently removed from the servers." = "Загруженный архив базы данных будет навсегда удален с серверов.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Themes" = "Темы";
|
||||
|
||||
@@ -4607,12 +4475,6 @@
|
||||
/* No comment provided by engineer. */
|
||||
"To protect your IP address, private routing uses your SMP servers to deliver messages." = "Чтобы защитить ваш IP адрес, приложение использует Ваши SMP серверы для конфиденциальной доставки сообщений.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"To record speech please grant permission to use Microphone." = "Для записи речи, пожалуйста, дайте разрешение на использование микрофона.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"To record video please grant permission to use Camera." = "Для записи видео, пожалуйста, дайте разрешение на использование камеры.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"To record voice message please grant permission to use Microphone." = "Для записи голосового сообщения, пожалуйста разрешите доступ к микрофону.";
|
||||
|
||||
@@ -4829,9 +4691,6 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Use SimpleX Chat servers?" = "Использовать серверы предосталенные SimpleX Chat?";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Use SOCKS proxy" = "Использовать SOCKS прокси";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Use the app while in the call." = "Используйте приложение во время звонка.";
|
||||
|
||||
@@ -4839,10 +4698,10 @@
|
||||
"Use the app with one hand." = "Используйте приложение одной рукой.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"User selection" = "Выбор пользователя";
|
||||
"User profile" = "Профиль чата";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Username" = "Имя пользователя";
|
||||
"User selection" = "Выбор пользователя";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Using SimpleX Chat servers." = "Используются серверы, предоставленные SimpleX Chat.";
|
||||
@@ -5279,15 +5138,9 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Your chat database is not encrypted - set passphrase to encrypt it." = "База данных НЕ зашифрована. Установите пароль, чтобы защитить Ваши данные.";
|
||||
|
||||
/* alert title */
|
||||
"Your chat preferences" = "Ваши настройки чата";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Your chat profiles" = "Ваши профили чата";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Your connection was moved to %@ but an unexpected error occurred while redirecting you to the profile." = "Соединение было перемещено на %@, но при смене профиля произошла неожиданная ошибка.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Your contact sent a file that is larger than currently supported maximum size (%@)." = "Ваш контакт отправил файл, размер которого превышает максимальный размер (%@).";
|
||||
|
||||
@@ -5297,9 +5150,6 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Your contacts will remain connected." = "Ваши контакты сохранятся.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Your credentials may be sent unencrypted." = "Ваши учетные данные могут быть отправлены в незашифрованном виде.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Your current chat database will be DELETED and REPLACED with the imported one." = "Текущие данные Вашего чата будет УДАЛЕНЫ и ЗАМЕНЕНЫ импортированными.";
|
||||
|
||||
@@ -5324,9 +5174,6 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Your profile is stored on your device and shared only with your contacts. SimpleX servers cannot see your profile." = "Ваш профиль хранится на Вашем устройстве и отправляется только Вашим контактам. SimpleX серверы не могут получить доступ к Вашему профилю.";
|
||||
|
||||
/* alert message */
|
||||
"Your profile was changed. If you save it, the updated profile will be sent to all your contacts." = "Ваш профиль был изменен. Если вы сохраните его, обновленный профиль будет отправлен всем вашим контактам.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Your profile, contacts and delivered messages are stored on your device." = "Ваш профиль, контакты и доставленные сообщения хранятся на Вашем устройстве.";
|
||||
|
||||
|
||||
@@ -605,9 +605,6 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Chat preferences" = "ค่ากําหนดในการแชท";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Chat profile" = "โปรไฟล์ผู้ใช้";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Chats" = "แชท";
|
||||
|
||||
@@ -3097,6 +3094,9 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Use SimpleX Chat servers?" = "ใช้เซิร์ฟเวอร์ SimpleX Chat ไหม?";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"User profile" = "โปรไฟล์ผู้ใช้";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Using SimpleX Chat servers." = "กำลังใช้เซิร์ฟเวอร์ SimpleX Chat อยู่";
|
||||
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -890,9 +890,6 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Chat preferences" = "Налаштування чату";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Chat profile" = "Профіль користувача";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Chat theme" = "Тема чату";
|
||||
|
||||
@@ -4700,6 +4697,9 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Use the app with one hand." = "Використовуйте додаток однією рукою.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"User profile" = "Профіль користувача";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"User selection" = "Вибір користувача";
|
||||
|
||||
|
||||
@@ -890,9 +890,6 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Chat preferences" = "聊天偏好设置";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Chat profile" = "用户资料";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Chat theme" = "聊天主题";
|
||||
|
||||
@@ -4700,6 +4697,9 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Use the app with one hand." = "用一只手使用应用程序。";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"User profile" = "用户资料";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"User selection" = "用户选择";
|
||||
|
||||
|
||||
-46
@@ -7,12 +7,9 @@ import android.os.Build
|
||||
import androidx.annotation.RequiresApi
|
||||
import androidx.compose.runtime.*
|
||||
import chat.simplex.common.platform.*
|
||||
import chat.simplex.common.views.helpers.withBGApi
|
||||
import dev.icerock.moko.resources.ImageResource
|
||||
import chat.simplex.res.MR
|
||||
import dev.icerock.moko.resources.StringResource
|
||||
import kotlinx.coroutines.Job
|
||||
import kotlinx.coroutines.delay
|
||||
import java.util.concurrent.Executors
|
||||
|
||||
interface CallAudioDeviceManagerInterface {
|
||||
@@ -22,7 +19,6 @@ interface CallAudioDeviceManagerInterface {
|
||||
fun stop()
|
||||
// AudioDeviceInfo.AudioDeviceType
|
||||
fun selectLastExternalDeviceOrDefault(speaker: Boolean, keepAnyExternal: Boolean)
|
||||
fun selectSameDeviceOnWebViewChange()
|
||||
// AudioDeviceInfo.AudioDeviceType
|
||||
fun selectDevice(id: Int)
|
||||
|
||||
@@ -39,15 +35,12 @@ interface CallAudioDeviceManagerInterface {
|
||||
@RequiresApi(Build.VERSION_CODES.S)
|
||||
class PostSCallAudioDeviceManager: CallAudioDeviceManagerInterface {
|
||||
private val am = androidAppContext.getSystemService(Context.AUDIO_SERVICE) as AudioManager
|
||||
private var resetCurrentToDevice: AudioDeviceInfo? = null
|
||||
private var resetCurrentToDeviceJob: Job = Job()
|
||||
override val devices: MutableState<List<AudioDeviceInfo>> = mutableStateOf(emptyList())
|
||||
override val currentDevice: MutableState<AudioDeviceInfo?> = mutableStateOf(null)
|
||||
|
||||
private val audioCallback = object: AudioDeviceCallback() {
|
||||
override fun onAudioDevicesAdded(addedDevices: Array<out AudioDeviceInfo>) {
|
||||
Log.d(TAG, "Added audio devices: ${addedDevices.map { it.type }}")
|
||||
resetCurrentToDevice = null
|
||||
super.onAudioDevicesAdded(addedDevices)
|
||||
val oldDevices = devices.value
|
||||
devices.value = am.availableCommunicationDevices
|
||||
@@ -60,21 +53,13 @@ class PostSCallAudioDeviceManager: CallAudioDeviceManagerInterface {
|
||||
|
||||
override fun onAudioDevicesRemoved(removedDevices: Array<out AudioDeviceInfo>) {
|
||||
Log.d(TAG, "Removed audio devices: ${removedDevices.map { it.type }}")
|
||||
resetCurrentToDevice = null
|
||||
super.onAudioDevicesRemoved(removedDevices)
|
||||
devices.value = am.availableCommunicationDevices
|
||||
}
|
||||
}
|
||||
|
||||
private val listener: OnCommunicationDeviceChangedListener = OnCommunicationDeviceChangedListener { device ->
|
||||
val resetTo = resetCurrentToDevice
|
||||
if (resetTo != null && device != null && resetTo.id != device.id) {
|
||||
Log.w(TAG, "Resetting device that was set by WebView ${device.name?.localized()} to previously set device ${resetTo.name?.localized()}")
|
||||
selectDevice(resetTo.id)
|
||||
return@OnCommunicationDeviceChangedListener
|
||||
}
|
||||
devices.value = am.availableCommunicationDevices
|
||||
//Log.d(TAG, "Devices changed ${device?.details()} | ${devices.value.map { it.details() }}")
|
||||
currentDevice.value = device
|
||||
}
|
||||
|
||||
@@ -113,18 +98,7 @@ class PostSCallAudioDeviceManager: CallAudioDeviceManagerInterface {
|
||||
}
|
||||
}
|
||||
|
||||
// WebView modifies speaker when muting/unmuting microphone. It's not needed at all, returning back current device if it will be changed
|
||||
override fun selectSameDeviceOnWebViewChange() {
|
||||
resetCurrentToDevice = currentDevice.value
|
||||
resetCurrentToDeviceJob.cancel()
|
||||
resetCurrentToDeviceJob = withBGApi {
|
||||
delay(5000)
|
||||
resetCurrentToDevice = null
|
||||
}
|
||||
}
|
||||
|
||||
override fun selectDevice(id: Int) {
|
||||
resetCurrentToDevice = null
|
||||
val device = devices.value.lastOrNull { it.id == id }
|
||||
if (device != null && am.communicationDevice?.id != id ) {
|
||||
am.setCommunicationDevice(device)
|
||||
@@ -134,14 +108,12 @@ class PostSCallAudioDeviceManager: CallAudioDeviceManagerInterface {
|
||||
|
||||
class PreSCallAudioDeviceManager: CallAudioDeviceManagerInterface {
|
||||
private val am = androidAppContext.getSystemService(Context.AUDIO_SERVICE) as AudioManager
|
||||
private var resetCurrentToDeviceJob: Job = Job()
|
||||
override val devices: MutableState<List<AudioDeviceInfo>> = mutableStateOf(emptyList())
|
||||
override val currentDevice: MutableState<AudioDeviceInfo?> = mutableStateOf(null)
|
||||
|
||||
private val audioCallback = object: AudioDeviceCallback() {
|
||||
override fun onAudioDevicesAdded(addedDevices: Array<out AudioDeviceInfo>) {
|
||||
Log.d(TAG, "Added audio devices: ${addedDevices.map { it.type }}")
|
||||
resetCurrentToDeviceJob.cancel()
|
||||
super.onAudioDevicesAdded(addedDevices)
|
||||
devices.value = am.getDevices(AudioManager.GET_DEVICES_OUTPUTS).filter { it.hasSupportedType() }.excludeSameType().excludeEarpieceIfWired()
|
||||
selectLastExternalDeviceOrDefault(chatModel.activeCall.value?.hasVideo == true, false)
|
||||
@@ -149,7 +121,6 @@ class PreSCallAudioDeviceManager: CallAudioDeviceManagerInterface {
|
||||
|
||||
override fun onAudioDevicesRemoved(removedDevices: Array<out AudioDeviceInfo>) {
|
||||
Log.d(TAG, "Removed audio devices: ${removedDevices.map { it.type }}")
|
||||
resetCurrentToDeviceJob.cancel()
|
||||
super.onAudioDevicesRemoved(removedDevices)
|
||||
devices.value = am.getDevices(AudioManager.GET_DEVICES_OUTPUTS).filter { it.hasSupportedType() }.excludeSameType().excludeEarpieceIfWired()
|
||||
selectLastExternalDeviceOrDefault(chatModel.activeCall.value?.hasVideo == true, true)
|
||||
@@ -182,22 +153,7 @@ class PreSCallAudioDeviceManager: CallAudioDeviceManagerInterface {
|
||||
}
|
||||
}
|
||||
|
||||
override fun selectSameDeviceOnWebViewChange() {
|
||||
val current = currentDevice.value ?: return
|
||||
resetCurrentToDeviceJob.cancel()
|
||||
resetCurrentToDeviceJob = withBGApi {
|
||||
// select old device manually because WebView will change it for sure.
|
||||
// smaller delay first if it's possible to make the switch less noticeable
|
||||
delay(300)
|
||||
selectDevice(current.id)
|
||||
// and in order to be sure that it will be selected even if WebView will be slow in changing its device
|
||||
delay(700)
|
||||
selectDevice(current.id)
|
||||
}
|
||||
}
|
||||
|
||||
override fun selectDevice(id: Int) {
|
||||
resetCurrentToDeviceJob.cancel()
|
||||
val device = devices.value.lastOrNull { it.id == id }
|
||||
val isExternalDevice = device != null && device.type != AudioDeviceInfo.TYPE_BUILTIN_EARPIECE && device.type != AudioDeviceInfo.TYPE_BUILTIN_SPEAKER
|
||||
if (isExternalDevice) {
|
||||
@@ -260,8 +216,6 @@ val AudioDeviceInfo.icon: ImageResource
|
||||
else -> MR.images.ic_brand_awareness_filled
|
||||
}
|
||||
|
||||
private fun AudioDeviceInfo.details(): String = "$productName id:$id name:${name?.localized()} type:$type sink:$isSink source:$isSource"
|
||||
|
||||
val AudioDeviceInfo.name: StringResource?
|
||||
get() = when (this.type) {
|
||||
AudioDeviceInfo.TYPE_BUILTIN_EARPIECE -> MR.strings.audio_device_earpiece
|
||||
|
||||
+3
-8
@@ -202,7 +202,6 @@ actual fun ActiveCallView() {
|
||||
is WCallCommand.Camera -> {
|
||||
updateActiveCall(call) { it.copy(localCamera = cmd.camera) }
|
||||
if (!call.localMediaSources.mic) {
|
||||
callAudioDeviceManager.selectSameDeviceOnWebViewChange()
|
||||
chatModel.callCommand.add(WCallCommand.Media(CallMediaSource.Mic, enable = false))
|
||||
}
|
||||
}
|
||||
@@ -227,9 +226,8 @@ actual fun ActiveCallView() {
|
||||
ActiveCallOverlay(call, chatModel, callAudioDeviceManager)
|
||||
}
|
||||
}
|
||||
KeyChangeEffect(call?.localMediaSources?.hasVideo) {
|
||||
if (call != null && call.hasVideo && callAudioDeviceManager.currentDevice.value?.type == AudioDeviceInfo.TYPE_BUILTIN_EARPIECE) {
|
||||
// enabling speaker on user action (peer action ignored) and not disabling it again
|
||||
KeyChangeEffect(call?.hasVideo) {
|
||||
if (call != null) {
|
||||
callAudioDeviceManager.selectLastExternalDeviceOrDefault(call.hasVideo, true)
|
||||
}
|
||||
}
|
||||
@@ -262,10 +260,7 @@ private fun ActiveCallOverlay(call: Call, chatModel: ChatModel, callAudioDeviceM
|
||||
devices = remember { callAudioDeviceManager.devices }.value,
|
||||
currentDevice = remember { callAudioDeviceManager.currentDevice },
|
||||
dismiss = { withBGApi { chatModel.callManager.endCall(call) } },
|
||||
toggleAudio = {
|
||||
callAudioDeviceManager.selectSameDeviceOnWebViewChange()
|
||||
chatModel.callCommand.add(WCallCommand.Media(CallMediaSource.Mic, enable = !call.localMediaSources.mic))
|
||||
},
|
||||
toggleAudio = { chatModel.callCommand.add(WCallCommand.Media(CallMediaSource.Mic, enable = !call.localMediaSources.mic)) },
|
||||
selectDevice = { callAudioDeviceManager.selectDevice(it.id) },
|
||||
toggleVideo = {
|
||||
if (ContextCompat.checkSelfPermission(androidAppContext, Manifest.permission.CAMERA) == PackageManager.PERMISSION_GRANTED) {
|
||||
|
||||
-13
@@ -71,9 +71,6 @@ object ChatModel {
|
||||
val groupMembers = mutableStateListOf<GroupMember>()
|
||||
val groupMembersIndexes = mutableStateMapOf<Long, Int>()
|
||||
|
||||
// false: default placement, true: floating window.
|
||||
// Used for deciding to add terminal items on main thread or not. Floating means appPrefs.terminalAlwaysVisible
|
||||
var terminalsVisible = setOf<Boolean>()
|
||||
val terminalItems = mutableStateOf<List<TerminalItem>>(listOf())
|
||||
val userAddress = mutableStateOf<UserContactLinkRec?>(null)
|
||||
val chatItemTTL = mutableStateOf<ChatItemTTL>(ChatItemTTL.None)
|
||||
@@ -775,16 +772,6 @@ object ChatModel {
|
||||
|
||||
fun addTerminalItem(item: TerminalItem) {
|
||||
val maxItems = if (appPreferences.developerTools.get()) 500 else 200
|
||||
if (terminalsVisible.isNotEmpty()) {
|
||||
withApi {
|
||||
addTerminalItem(item, maxItems)
|
||||
}
|
||||
} else {
|
||||
addTerminalItem(item, maxItems)
|
||||
}
|
||||
}
|
||||
|
||||
private fun addTerminalItem(item: TerminalItem, maxItems: Int) {
|
||||
if (terminalItems.value.size >= maxItems) {
|
||||
terminalItems.value = terminalItems.value.subList(1, terminalItems.value.size)
|
||||
}
|
||||
|
||||
+2
-5
@@ -3654,7 +3654,7 @@ data class NetCfg(
|
||||
val socksMode: SocksMode = SocksMode.Always,
|
||||
val hostMode: HostMode = HostMode.OnionViaSocks,
|
||||
val requiredHostMode: Boolean = false,
|
||||
val sessionMode: TransportSessionMode = TransportSessionMode.default,
|
||||
val sessionMode: TransportSessionMode = TransportSessionMode.User,
|
||||
val smpProxyMode: SMPProxyMode = SMPProxyMode.Unknown,
|
||||
val smpProxyFallback: SMPProxyFallback = SMPProxyFallback.AllowProtected,
|
||||
val smpWebPort: Boolean = false,
|
||||
@@ -3781,13 +3781,10 @@ enum class SMPProxyFallback {
|
||||
@Serializable
|
||||
enum class TransportSessionMode {
|
||||
@SerialName("user") User,
|
||||
@SerialName("session") Session,
|
||||
@SerialName("server") Server,
|
||||
@SerialName("entity") Entity;
|
||||
|
||||
companion object {
|
||||
val default = Session
|
||||
val safeValues = arrayOf(User, Session, Server)
|
||||
val default = User
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
+7
-47
@@ -20,12 +20,11 @@ import chat.simplex.common.views.chat.*
|
||||
import chat.simplex.common.views.helpers.*
|
||||
import chat.simplex.common.model.ChatModel
|
||||
import chat.simplex.common.platform.*
|
||||
import kotlinx.coroutines.flow.collect
|
||||
import kotlinx.coroutines.flow.filter
|
||||
import kotlinx.coroutines.launch
|
||||
import chat.simplex.res.MR
|
||||
import dev.icerock.moko.resources.compose.stringResource
|
||||
|
||||
@Composable
|
||||
fun TerminalView(floating: Boolean = false, close: () -> Unit) {
|
||||
fun TerminalView(chatModel: ChatModel, close: () -> Unit) {
|
||||
val composeState = remember { mutableStateOf(ComposeState(useLinkPreviews = false)) }
|
||||
val close = {
|
||||
close()
|
||||
@@ -38,7 +37,6 @@ fun TerminalView(floating: Boolean = false, close: () -> Unit) {
|
||||
})
|
||||
TerminalLayout(
|
||||
composeState,
|
||||
floating,
|
||||
sendCommand = { sendCommand(chatModel, composeState) },
|
||||
close
|
||||
)
|
||||
@@ -67,7 +65,6 @@ private fun sendCommand(chatModel: ChatModel, composeState: MutableState<Compose
|
||||
@Composable
|
||||
fun TerminalLayout(
|
||||
composeState: MutableState<ComposeState>,
|
||||
floating: Boolean,
|
||||
sendCommand: () -> Unit,
|
||||
close: () -> Unit
|
||||
) {
|
||||
@@ -121,40 +118,19 @@ fun TerminalLayout(
|
||||
color = MaterialTheme.colors.background,
|
||||
contentColor = LocalContentColor.current
|
||||
) {
|
||||
TerminalLog(floating)
|
||||
TerminalLog()
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Composable
|
||||
fun TerminalLog(floating: Boolean) {
|
||||
fun TerminalLog() {
|
||||
val reversedTerminalItems by remember {
|
||||
derivedStateOf { chatModel.terminalItems.value.asReversed() }
|
||||
}
|
||||
val clipboard = LocalClipboardManager.current
|
||||
val listState = LocalAppBarHandler.current?.listState ?: rememberLazyListState()
|
||||
LaunchedEffect(Unit) {
|
||||
var autoScrollToBottom = true
|
||||
launch {
|
||||
snapshotFlow { listState.layoutInfo.totalItemsCount }
|
||||
.filter { autoScrollToBottom }
|
||||
.collect {
|
||||
try {
|
||||
listState.scrollToItem(0)
|
||||
} catch (e: Exception) {
|
||||
Log.e(TAG, e.stackTraceToString())
|
||||
}
|
||||
}
|
||||
}
|
||||
launch {
|
||||
snapshotFlow { listState.firstVisibleItemIndex }
|
||||
.collect {
|
||||
autoScrollToBottom = listState.firstVisibleItemIndex == 0
|
||||
}
|
||||
}
|
||||
}
|
||||
LazyColumnWithScrollBar(reverseLayout = true, state = listState) {
|
||||
LazyColumnWithScrollBar(reverseLayout = true) {
|
||||
items(reversedTerminalItems, key = { item -> item.id to item.createdAtNanos }) { item ->
|
||||
val rhId = item.remoteHostId
|
||||
val rhIdStr = if (rhId == null) "" else "$rhId "
|
||||
@@ -166,12 +142,7 @@ fun TerminalLog(floating: Boolean) {
|
||||
modifier = Modifier
|
||||
.fillMaxWidth()
|
||||
.clickable {
|
||||
val modalPlace = if (floating) {
|
||||
ModalManager.floatingTerminal
|
||||
} else {
|
||||
ModalManager.start
|
||||
}
|
||||
modalPlace.showModal(endButtons = { ShareButton { clipboard.shareText(item.details) } }) {
|
||||
ModalManager.start.showModal(endButtons = { ShareButton { clipboard.shareText(item.details) } }) {
|
||||
SelectionContainer(modifier = Modifier.verticalScroll(rememberScrollState())) {
|
||||
val details = item.details
|
||||
.let {
|
||||
@@ -185,16 +156,6 @@ fun TerminalLog(floating: Boolean) {
|
||||
)
|
||||
}
|
||||
}
|
||||
DisposableEffect(Unit) {
|
||||
val terminals = chatModel.terminalsVisible.toMutableSet()
|
||||
terminals += floating
|
||||
chatModel.terminalsVisible = terminals
|
||||
onDispose {
|
||||
val terminals = chatModel.terminalsVisible.toMutableSet()
|
||||
terminals -= floating
|
||||
chatModel.terminalsVisible = terminals
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Preview/*(
|
||||
@@ -208,7 +169,6 @@ fun PreviewTerminalLayout() {
|
||||
TerminalLayout(
|
||||
composeState = remember { mutableStateOf(ComposeState(useLinkPreviews = false)) },
|
||||
sendCommand = {},
|
||||
floating = false,
|
||||
close = {}
|
||||
)
|
||||
}
|
||||
|
||||
-1
@@ -83,7 +83,6 @@ enum class CallState {
|
||||
@Serializable
|
||||
sealed class WCallCommand {
|
||||
@Serializable @SerialName("capabilities") data class Capabilities(val media: CallMediaType): WCallCommand()
|
||||
@Serializable @SerialName("permission") data class Permission(val title: String, val chrome: String, val safari: String): WCallCommand()
|
||||
@Serializable @SerialName("start") data class Start(val media: CallMediaType, val aesKey: String? = null, val iceServers: List<RTCIceServer>? = null, val relay: Boolean? = null): WCallCommand()
|
||||
@Serializable @SerialName("offer") data class Offer(val offer: String, val iceCandidates: String, val media: CallMediaType, val aesKey: String? = null, val iceServers: List<RTCIceServer>? = null, val relay: Boolean? = null): WCallCommand()
|
||||
@Serializable @SerialName("answer") data class Answer (val answer: String, val iceCandidates: String): WCallCommand()
|
||||
|
||||
+10
-13
@@ -59,8 +59,7 @@ fun SelectedItemsBottomToolbar(
|
||||
val canModerate = remember { mutableStateOf(false) }
|
||||
val moderateEnabled = remember { mutableStateOf(false) }
|
||||
val forwardEnabled = remember { mutableStateOf(false) }
|
||||
val deleteCountProhibited = remember { mutableStateOf(false) }
|
||||
val forwardCountProhibited = remember { mutableStateOf(false) }
|
||||
val allButtonsDisabled = remember { mutableStateOf(false) }
|
||||
Box {
|
||||
// It's hard to measure exact height of ComposeView with different fontSizes. Better to depend on actual ComposeView, even empty
|
||||
ComposeView(chatModel = chatModel, Chat.sampleData, remember { mutableStateOf(ComposeState(useLinkPreviews = false)) }, remember { mutableStateOf(null) }, {})
|
||||
@@ -76,36 +75,36 @@ fun SelectedItemsBottomToolbar(
|
||||
horizontalArrangement = Arrangement.SpaceBetween,
|
||||
verticalAlignment = Alignment.CenterVertically
|
||||
) {
|
||||
IconButton({ deleteItems(deleteForEveryoneEnabled.value) }, enabled = deleteEnabled.value && !deleteCountProhibited.value) {
|
||||
IconButton({ deleteItems(deleteForEveryoneEnabled.value) }, enabled = deleteEnabled.value && !allButtonsDisabled.value) {
|
||||
Icon(
|
||||
painterResource(MR.images.ic_delete),
|
||||
null,
|
||||
Modifier.size(22.dp),
|
||||
tint = if (!deleteEnabled.value || deleteCountProhibited.value) MaterialTheme.colors.secondary else MaterialTheme.colors.error
|
||||
tint = if (!deleteEnabled.value || allButtonsDisabled.value) MaterialTheme.colors.secondary else MaterialTheme.colors.error
|
||||
)
|
||||
}
|
||||
|
||||
IconButton({ moderateItems() }, Modifier.alpha(if (canModerate.value) 1f else 0f), enabled = moderateEnabled.value && !deleteCountProhibited.value) {
|
||||
IconButton({ moderateItems() }, Modifier.alpha(if (canModerate.value) 1f else 0f), enabled = moderateEnabled.value && !allButtonsDisabled.value) {
|
||||
Icon(
|
||||
painterResource(MR.images.ic_flag),
|
||||
null,
|
||||
Modifier.size(22.dp),
|
||||
tint = if (!moderateEnabled.value || deleteCountProhibited.value) MaterialTheme.colors.secondary else MaterialTheme.colors.error
|
||||
tint = if (!moderateEnabled.value || allButtonsDisabled.value) MaterialTheme.colors.secondary else MaterialTheme.colors.error
|
||||
)
|
||||
}
|
||||
|
||||
IconButton({ forwardItems() }, enabled = forwardEnabled.value && !forwardCountProhibited.value) {
|
||||
IconButton({ forwardItems() }, enabled = forwardEnabled.value && !allButtonsDisabled.value) {
|
||||
Icon(
|
||||
painterResource(MR.images.ic_forward),
|
||||
null,
|
||||
Modifier.size(22.dp),
|
||||
tint = if (!forwardEnabled.value || forwardCountProhibited.value) MaterialTheme.colors.secondary else MaterialTheme.colors.primary
|
||||
tint = if (!forwardEnabled.value || allButtonsDisabled.value) MaterialTheme.colors.secondary else MaterialTheme.colors.primary
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
LaunchedEffect(chatInfo, chatItems, selectedChatItems.value) {
|
||||
recheckItems(chatInfo, chatItems, selectedChatItems, deleteEnabled, deleteForEveryoneEnabled, canModerate, moderateEnabled, forwardEnabled, deleteCountProhibited, forwardCountProhibited)
|
||||
recheckItems(chatInfo, chatItems, selectedChatItems, deleteEnabled, deleteForEveryoneEnabled, canModerate, moderateEnabled, forwardEnabled, allButtonsDisabled)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -117,12 +116,10 @@ private fun recheckItems(chatInfo: ChatInfo,
|
||||
canModerate: MutableState<Boolean>,
|
||||
moderateEnabled: MutableState<Boolean>,
|
||||
forwardEnabled: MutableState<Boolean>,
|
||||
deleteCountProhibited: MutableState<Boolean>,
|
||||
forwardCountProhibited: MutableState<Boolean>
|
||||
allButtonsDisabled: MutableState<Boolean>
|
||||
) {
|
||||
val count = selectedChatItems.value?.size ?: 0
|
||||
deleteCountProhibited.value = count == 0 || count > 200
|
||||
forwardCountProhibited.value = count == 0 || count > 20
|
||||
allButtonsDisabled.value = count == 0 || count > 20
|
||||
canModerate.value = possibleToModerate(chatInfo)
|
||||
val selected = selectedChatItems.value ?: return
|
||||
var rDeleteEnabled = true
|
||||
|
||||
+1
-2
@@ -341,8 +341,7 @@ private fun GlobalSettingsSection(
|
||||
ModalManager.start.showCustomModal { close ->
|
||||
ConnectDesktopView(close)
|
||||
}
|
||||
},
|
||||
disabled = stopped
|
||||
}
|
||||
)
|
||||
} else {
|
||||
UserPickerOptionRow(
|
||||
|
||||
+2
-3
@@ -2,8 +2,10 @@ package chat.simplex.common.views.helpers
|
||||
|
||||
import androidx.compose.animation.*
|
||||
import androidx.compose.animation.core.*
|
||||
import androidx.compose.foundation.ScrollState
|
||||
import androidx.compose.foundation.background
|
||||
import androidx.compose.foundation.layout.*
|
||||
import androidx.compose.foundation.lazy.LazyListState
|
||||
import androidx.compose.material.*
|
||||
import androidx.compose.runtime.*
|
||||
import androidx.compose.ui.Modifier
|
||||
@@ -207,14 +209,11 @@ class ModalManager(private val placement: ModalPlacement? = null) {
|
||||
val end = if (appPlatform.isAndroid) shared else ModalManager(ModalPlacement.END)
|
||||
val fullscreen = if (appPlatform.isAndroid) shared else ModalManager(ModalPlacement.FULLSCREEN)
|
||||
|
||||
val floatingTerminal = if (appPlatform.isAndroid) shared else ModalManager(ModalPlacement.START)
|
||||
|
||||
fun closeAllModalsEverywhere() {
|
||||
start.closeModals()
|
||||
center.closeModals()
|
||||
end.closeModals()
|
||||
fullscreen.closeModals()
|
||||
floatingTerminal.closeModals()
|
||||
}
|
||||
|
||||
@OptIn(ExperimentalAnimationApi::class)
|
||||
|
||||
+10
-12
@@ -321,19 +321,17 @@ fun ActiveProfilePicker(
|
||||
}
|
||||
}
|
||||
|
||||
if ((contactConnection != null && updatedConn != null) || contactConnection == null) {
|
||||
controller.changeActiveUser_(
|
||||
rhId = user.remoteHostId,
|
||||
toUserId = user.userId,
|
||||
viewPwd = if (user.hidden) searchTextOrPassword.value else null
|
||||
)
|
||||
controller.changeActiveUser_(
|
||||
rhId = user.remoteHostId,
|
||||
toUserId = user.userId,
|
||||
viewPwd = if (user.hidden) searchTextOrPassword.value else null
|
||||
)
|
||||
|
||||
if (chatModel.currentUser.value?.userId != user.userId) {
|
||||
AlertManager.shared.showAlertMsg(generalGetString(
|
||||
MR.strings.switching_profile_error_title),
|
||||
String.format(generalGetString(MR.strings.switching_profile_error_message), user.chatViewName)
|
||||
)
|
||||
}
|
||||
if (chatModel.currentUser.value?.userId != user.userId) {
|
||||
AlertManager.shared.showAlertMsg(generalGetString(
|
||||
MR.strings.switching_profile_error_title),
|
||||
String.format(generalGetString(MR.strings.switching_profile_error_message), user.chatViewName)
|
||||
)
|
||||
}
|
||||
|
||||
if (updatedConn != null) {
|
||||
|
||||
+3
-33
@@ -53,8 +53,7 @@ fun WhatsNewView(viaSettings: Boolean = false, close: () -> Unit) {
|
||||
maxLines = 2,
|
||||
overflow = TextOverflow.Ellipsis,
|
||||
style = MaterialTheme.typography.h4,
|
||||
fontWeight = FontWeight.Medium,
|
||||
modifier = Modifier.padding(bottom = 6.dp)
|
||||
fontWeight = FontWeight.Medium
|
||||
)
|
||||
if (link != null) {
|
||||
linkButton(link)
|
||||
@@ -65,7 +64,7 @@ fun WhatsNewView(viaSettings: Boolean = false, close: () -> Unit) {
|
||||
Row(
|
||||
verticalAlignment = Alignment.CenterVertically,
|
||||
horizontalArrangement = Arrangement.spacedBy(8.dp),
|
||||
modifier = Modifier.padding(bottom = 6.dp)
|
||||
modifier = Modifier.padding(bottom = 4.dp)
|
||||
) {
|
||||
Icon(painterResource(si), stringResource(sd), tint = MaterialTheme.colors.secondary)
|
||||
Text(generalGetString(sd), fontSize = 15.sp)
|
||||
@@ -649,36 +648,7 @@ private val versionDescriptions: List<VersionDescription> = listOf(
|
||||
show = appPlatform.isDesktop
|
||||
),
|
||||
),
|
||||
),
|
||||
VersionDescription(
|
||||
version = "v6.1",
|
||||
post = "https://simplex.chat/blog/20241014-simplex-network-v6-1-security-review-better-calls-user-experience.html",
|
||||
features = listOf(
|
||||
FeatureDescription(
|
||||
icon = MR.images.ic_verified_user,
|
||||
titleId = MR.strings.v6_1_better_security,
|
||||
descrId = MR.strings.v6_1_better_security_descr,
|
||||
link = "https://simplex.chat/blog/20241014-simplex-network-v6-1-security-review-better-calls-user-experience.html"
|
||||
),
|
||||
FeatureDescription(
|
||||
icon = MR.images.ic_videocam,
|
||||
titleId = MR.strings.v6_1_better_calls,
|
||||
descrId = MR.strings.v6_1_better_calls_descr
|
||||
),
|
||||
FeatureDescription(
|
||||
icon = null,
|
||||
titleId = MR.strings.v6_1_better_user_experience,
|
||||
descrId = null,
|
||||
subfeatures = listOf(
|
||||
MR.images.ic_link to MR.strings.v6_1_switch_chat_profile_descr,
|
||||
MR.images.ic_chat to MR.strings.v6_1_customizable_message_descr,
|
||||
MR.images.ic_calendar to MR.strings.v6_1_message_dates_descr,
|
||||
MR.images.ic_forward to MR.strings.v6_1_forward_many_messages_descr,
|
||||
MR.images.ic_delete to MR.strings.v6_1_delete_many_messages_descr
|
||||
)
|
||||
),
|
||||
),
|
||||
),
|
||||
)
|
||||
)
|
||||
|
||||
private val lastVersion = versionDescriptions.last().version
|
||||
|
||||
+1
-1
@@ -218,7 +218,7 @@ fun ModalData.AdvancedNetworkSettingsView(showModal: (ModalData.() -> Unit) -> U
|
||||
SectionDividerSpaced(maxTopPadding = true)
|
||||
}
|
||||
|
||||
if (currentRemoteHost == null) {
|
||||
if (currentRemoteHost == null && developerTools) {
|
||||
SectionView(stringResource(MR.strings.network_session_mode_transport_isolation).uppercase()) {
|
||||
SessionModePicker(sessionMode, showModal, updateSessionMode)
|
||||
}
|
||||
|
||||
+1
-1
@@ -35,7 +35,7 @@ fun DeveloperView(
|
||||
val unchangedHints = mutableStateOf(unchangedHintPreferences())
|
||||
SectionView {
|
||||
InstallTerminalAppItem(uriHandler)
|
||||
ChatConsoleItem { withAuth(generalGetString(MR.strings.auth_open_chat_console), generalGetString(MR.strings.auth_log_in_using_credential), showCustomModal { it, close -> TerminalView(false, close) }) }
|
||||
ChatConsoleItem { withAuth(generalGetString(MR.strings.auth_open_chat_console), generalGetString(MR.strings.auth_log_in_using_credential), showCustomModal { it, close -> TerminalView(it, close) }) }
|
||||
ResetHintsItem(unchangedHints)
|
||||
SettingsPreferenceItem(painterResource(MR.images.ic_code), stringResource(MR.strings.show_developer_options), developerTools)
|
||||
SectionTextFooter(
|
||||
|
||||
+5
-11
@@ -164,7 +164,9 @@ fun NetworkAndServersView() {
|
||||
val showCustomModal = { it: @Composable (close: () -> Unit) -> Unit -> ModalManager.fullscreen.showCustomModal { close -> it(close) }}
|
||||
UseSocksProxySwitch(networkUseSocksProxy, toggleSocksProxy)
|
||||
SettingsActionItem(painterResource(MR.images.ic_settings_ethernet), stringResource(MR.strings.network_socks_proxy_settings), { showCustomModal { SocksProxySettings(networkUseSocksProxy.value, networkProxy, onionHosts, sessionMode.value, true, it) } })
|
||||
SessionModePicker(sessionMode, showModal, updateSessionMode)
|
||||
if (developerTools) {
|
||||
SessionModePicker(sessionMode, showModal, updateSessionMode)
|
||||
}
|
||||
}
|
||||
|
||||
@Composable
|
||||
@@ -456,17 +458,9 @@ fun SessionModePicker(
|
||||
) {
|
||||
val density = LocalDensity.current
|
||||
val values = remember {
|
||||
val safeModes = TransportSessionMode.safeValues
|
||||
val modes: Array<TransportSessionMode> =
|
||||
if (appPrefs.developerTools.get()) TransportSessionMode.values()
|
||||
else if (safeModes.contains(sessionMode.value)) safeModes
|
||||
else safeModes + sessionMode.value
|
||||
modes.map {
|
||||
val userModeDescr: AnnotatedString = escapedHtmlToAnnotatedString(generalGetString(MR.strings.network_session_mode_user_description), density)
|
||||
TransportSessionMode.values().map {
|
||||
when (it) {
|
||||
TransportSessionMode.User -> ValueTitleDesc(TransportSessionMode.User, generalGetString(MR.strings.network_session_mode_user), userModeDescr)
|
||||
TransportSessionMode.Session -> ValueTitleDesc(TransportSessionMode.Session, generalGetString(MR.strings.network_session_mode_session), userModeDescr + AnnotatedString("\n") + escapedHtmlToAnnotatedString(generalGetString(MR.strings.network_session_mode_session_description), density))
|
||||
TransportSessionMode.Server -> ValueTitleDesc(TransportSessionMode.Server, generalGetString(MR.strings.network_session_mode_server), userModeDescr + AnnotatedString("\n") + escapedHtmlToAnnotatedString(generalGetString(MR.strings.network_session_mode_server_description), density))
|
||||
TransportSessionMode.User -> ValueTitleDesc(TransportSessionMode.User, generalGetString(MR.strings.network_session_mode_user), escapedHtmlToAnnotatedString(generalGetString(MR.strings.network_session_mode_user_description), density))
|
||||
TransportSessionMode.Entity -> ValueTitleDesc(TransportSessionMode.Entity, generalGetString(MR.strings.network_session_mode_entity), escapedHtmlToAnnotatedString(generalGetString(MR.strings.network_session_mode_entity_description), density))
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2104,25 +2104,4 @@
|
||||
<string name="network_proxy_auth">استيثاق الوكيل</string>
|
||||
<string name="delete_messages_cannot_be_undone_warning">سيتم حذف الرسائل - لا يمكن التراجع عن هذا!</string>
|
||||
<string name="icon_descr_sound_muted">الصوت مكتوم</string>
|
||||
<string name="error_initializing_web_view_wrong_arch">حدث خطأ أثناء تهيئة WebView. تأكد من تثبيت WebView وأن بنيته المدعومة هي arm64.\nالخطأ: %s</string>
|
||||
<string name="settings_section_title_message_shape">شكل الرسالة</string>
|
||||
<string name="settings_message_shape_tail">ذيل</string>
|
||||
<string name="settings_message_shape_corner">ركن</string>
|
||||
<string name="network_session_mode_session">جلسة التطبيق</string>
|
||||
<string name="network_session_mode_server">الخادم</string>
|
||||
<string name="network_session_mode_session_description">سيتم استخدام بيانات اعتماد SOCKS الجديدة في كل مرة تبدأ فيها تشغيل التطبيق.</string>
|
||||
<string name="network_session_mode_server_description">سيتم استخدام بيانات اعتماد SOCKS الجديدة لكل خادم.</string>
|
||||
<string name="call_desktop_permission_denied_chrome">انقر فوق زر المعلومات الموجود بالقرب من حقل العنوان للسماح باستخدام الميكروفون.</string>
|
||||
<string name="call_desktop_permission_denied_safari">افتح إعدادات Safari / مواقع الويب / الميكروفون، ثم اختر السماح لـ localhost.</string>
|
||||
<string name="call_desktop_permission_denied_title">لإجراء مكالمات، اسمح باستخدام الميكروفون. أنهِ المكالمة وحاول الاتصال مرة أخرى.</string>
|
||||
<string name="v6_1_better_user_experience">تجربة مستخدم أفضل</string>
|
||||
<string name="v6_1_customizable_message_descr">شكل الرسالة قابل للتخصيص.</string>
|
||||
<string name="v6_1_better_calls_descr">تبديل الصوت والفيديو أثناء المكالمة.</string>
|
||||
<string name="v6_1_delete_many_messages_descr">حذف أو إشراف ما يصل إلى 200 رسالة.</string>
|
||||
<string name="v6_1_forward_many_messages_descr">حوّل ما يصل إلى 20 رسالة آن واحد.</string>
|
||||
<string name="v6_1_better_calls">مكالمات أفضل</string>
|
||||
<string name="v6_1_message_dates_descr">تواريخ أفضل للرسائل.</string>
|
||||
<string name="v6_1_better_security">أمان أفضل ✅</string>
|
||||
<string name="v6_1_better_security_descr">بروتوكولات SimpleX تمت مراجعتها بواسطة Trail of Bits.</string>
|
||||
<string name="v6_1_switch_chat_profile_descr">تبديل ملف تعريف الدردشة لدعوات لمرة واحدة.</string>
|
||||
</resources>
|
||||
@@ -811,12 +811,8 @@
|
||||
<string name="network_use_onion_hosts_required_desc">Onion hosts will be required for connection.\nPlease note: you will not be able to connect to the servers without .onion address.</string>
|
||||
<string name="network_session_mode_transport_isolation">Transport isolation</string>
|
||||
<string name="network_session_mode_user">Chat profile</string>
|
||||
<string name="network_session_mode_session">App session</string>
|
||||
<string name="network_session_mode_server">Server</string>
|
||||
<string name="network_session_mode_entity">Connection</string>
|
||||
<string name="network_session_mode_user_description"><![CDATA[A separate TCP connection (and SOCKS credential) will be used <b>for each chat profile you have in the app</b>.]]></string>
|
||||
<string name="network_session_mode_session_description">New SOCKS credentials will be used every time you start the app.</string>
|
||||
<string name="network_session_mode_server_description">New SOCKS credentials will be used for each server.</string>
|
||||
<string name="network_session_mode_entity_description"><![CDATA[A separate TCP connection (and SOCKS credential) will be used <b>for each contact and group member</b>.\n<b>Please note</b>: if you have many connections, your battery and traffic consumption can be substantially higher and some connections may fail.]]></string>
|
||||
<string name="update_network_session_mode_question">Update transport isolation mode?</string>
|
||||
<string name="disable_onion_hosts_when_not_supported"><![CDATA[Set <i>Use .onion hosts</i> to No if SOCKS proxy does not support them.]]></string>
|
||||
@@ -1047,9 +1043,6 @@
|
||||
<string name="call_already_ended">Call already ended!</string>
|
||||
<string name="icon_descr_video_call">video call</string>
|
||||
<string name="icon_descr_audio_call">audio call</string>
|
||||
<string name="call_desktop_permission_denied_title">To make calls, allow to use your microphone. End the call and try to call again.</string>
|
||||
<string name="call_desktop_permission_denied_chrome">Click info button near address field to allow using microphone.</string>
|
||||
<string name="call_desktop_permission_denied_safari">Open Safari Settings / Websites / Microphone, then choose Allow for localhost.</string>
|
||||
|
||||
<!-- Call settings -->
|
||||
<string name="settings_audio_video_calls">Audio & video calls</string>
|
||||
@@ -2041,16 +2034,6 @@
|
||||
<string name="v6_0_upgrade_app_descr">Download new versions from GitHub.</string>
|
||||
<string name="v6_0_connection_servers_status">Control your network</string>
|
||||
<string name="v6_0_connection_servers_status_descr">Connection and servers status.</string>
|
||||
<string name="v6_1_better_security">Better security ✅</string>
|
||||
<string name="v6_1_better_security_descr">SimpleX protocols reviewed by Trail of Bits.</string>
|
||||
<string name="v6_1_better_calls">Better calls</string>
|
||||
<string name="v6_1_better_calls_descr">Switch audio and video during the call.</string>
|
||||
<string name="v6_1_better_user_experience">Better user experience</string>
|
||||
<string name="v6_1_switch_chat_profile_descr">Switch chat profile for 1-time invitations.</string>
|
||||
<string name="v6_1_customizable_message_descr">Customizable message shape.</string>
|
||||
<string name="v6_1_message_dates_descr">Better message dates.</string>
|
||||
<string name="v6_1_forward_many_messages_descr">Forward up to 20 messages at once.</string>
|
||||
<string name="v6_1_delete_many_messages_descr">Delete or moderate up to 200 messages.</string>
|
||||
|
||||
<!-- CustomTimePicker -->
|
||||
<string name="custom_time_unit_seconds">seconds</string>
|
||||
|
||||
@@ -1990,7 +1990,7 @@
|
||||
<string name="downloaded_files">Heruntergeladene Dateien</string>
|
||||
<string name="download_errors">Fehler beim Herunterladen</string>
|
||||
<string name="duplicates_label">Duplikate</string>
|
||||
<string name="expired_label">Abgelaufen</string>
|
||||
<string name="expired_label">abgelaufen</string>
|
||||
<string name="open_server_settings_button">Server-Einstellungen öffnen</string>
|
||||
<string name="other_errors">Andere Fehler</string>
|
||||
<string name="proxied">Proxy</string>
|
||||
@@ -2188,25 +2188,4 @@
|
||||
<string name="forward_multiple">Nachrichten werden weitergeleitet…</string>
|
||||
<string name="compose_save_messages_n">Es wird/werden %1$s Nachricht(en) gesichert</string>
|
||||
<string name="icon_descr_sound_muted">Ton stummgeschaltet</string>
|
||||
<string name="error_initializing_web_view_wrong_arch">Fehler bei der Initialisierung von WebView. Stellen Sie sicher, dass Sie WebView installiert haben, und es die ARM64-Architektur unterstützt.\nFehler: %s</string>
|
||||
<string name="settings_section_title_message_shape">Form der Nachricht</string>
|
||||
<string name="settings_message_shape_tail">Sprechblase</string>
|
||||
<string name="settings_message_shape_corner">Abrundung Ecken</string>
|
||||
<string name="network_session_mode_session">App-Sitzung</string>
|
||||
<string name="network_session_mode_server_description">Für jeden Server werden neue SOCKS-Anmeldeinformationen genutzt</string>
|
||||
<string name="network_session_mode_server">Server</string>
|
||||
<string name="call_desktop_permission_denied_chrome">Klicken Sie auf die Info-Schaltfläche neben dem Adressfeld, um die Verwendung des Mikrofons zu erlauben.</string>
|
||||
<string name="call_desktop_permission_denied_title">Um Anrufe durchzuführen, erlauben Sie die Nutzung Ihres Mikrofons. Beenden Sie den Anruf und versuchen Sie es erneut.</string>
|
||||
<string name="call_desktop_permission_denied_safari">Öffnen Sie die Safari-Einstellungen / Webseiten / Mikrofon und wählen Sie dann \"Für Localhost erlauben\".</string>
|
||||
<string name="v6_1_better_calls">Verbesserte Anrufe</string>
|
||||
<string name="v6_1_customizable_message_descr">Anpassbares Format des Nachrichtenfelds</string>
|
||||
<string name="v6_1_delete_many_messages_descr">Bis zu 200 Nachrichten löschen oder moderieren</string>
|
||||
<string name="v6_1_forward_many_messages_descr">Bis zu 20 Nachrichten auf einmal weiterleiten</string>
|
||||
<string name="v6_1_better_security_descr">Die SimpleX-Protokolle wurden von Trail of Bits überprüft.</string>
|
||||
<string name="v6_1_better_calls_descr">Während des Anrufs zwischen Audio und Video wechseln</string>
|
||||
<string name="v6_1_switch_chat_profile_descr">Das Chat-Profil für Einmal-Einladungen wechseln</string>
|
||||
<string name="network_session_mode_session_description">Jedes Mal wenn Sie die App starten, werden neue SOCKS-Anmeldeinformationen genutzt</string>
|
||||
<string name="v6_1_better_security">Verbesserte Sicherheit ✅</string>
|
||||
<string name="v6_1_message_dates_descr">Verbesserte Nachrichten-Datumsinformation</string>
|
||||
<string name="v6_1_better_user_experience">Verbesserte Nutzer-Erfahrung</string>
|
||||
</resources>
|
||||
@@ -227,20 +227,4 @@
|
||||
<string name="deleted_description">διαγράφτηκε</string>
|
||||
<string name="moderated_item_description">με συντονιστή %s</string>
|
||||
<string name="blocked_item_description">φραγμένος</string>
|
||||
<string name="learn_more_about_address">Σχετικά με τη διεύθυνση SimpleX</string>
|
||||
<string name="conn_event_ratchet_sync_started">συμφωνία κρυπτογράφησης…</string>
|
||||
<string name="chat_theme_apply_to_all_modes">Όλες οι χρωματικές λειτουργίες</string>
|
||||
<string name="abort_switch_receiving_address_desc">Η αλλαγή διεύθυνσης θα ακυρωθεί. Θα χρησιμοποιηθεί η παλιά διεύθυνση παραλαβής.</string>
|
||||
<string name="servers_info_subscriptions_connections_subscribed">Ενεργές συνδέσεις</string>
|
||||
<string name="network_settings_title">Προχωρημένες ρυθμίσεις</string>
|
||||
<string name="color_primary_variant">Πρόσθετη προφορά</string>
|
||||
<string name="add_contact_tab">Προσθήκη επαφής</string>
|
||||
<string name="abort_switch_receiving_address">Διακοπή αλλαγής διεύθυνσης</string>
|
||||
<string name="wallpaper_advanced_settings">Προχωρημένες ρυθμίσεις</string>
|
||||
<string name="v5_6_safer_groups_descr">Οι διαχειριστές μπορούν να αποκλείσουν ένα μέλος για όλους.</string>
|
||||
<string name="acknowledged">Αναγνωρισμένο</string>
|
||||
<string name="above_then_preposition_continuation">παραπάνω, λοιπόν:</string>
|
||||
<string name="add_address_to_your_profile">Προσθέστε τη διεύθυνση στο προφίλ σας, έτσι ώστε οι επαφές σας να μπορούν να τη μοιραστούν με άλλα άτομα. Το ενημέρωμένο προφίλ θα σταλεί στις επαφές σας.</string>
|
||||
<string name="feature_roles_admins">διαχειριστές</string>
|
||||
<string name="acknowledgement_errors">Λάθη αναγνώρισης</string>
|
||||
</resources>
|
||||
@@ -366,7 +366,7 @@
|
||||
<string name="description_via_contact_address_link_incognito">en modo incógnito mediante enlace de dirección del contacto</string>
|
||||
<string name="failed_to_create_user_title">¡Error al crear perfil!</string>
|
||||
<string name="failed_to_parse_chat_title">No se pudo cargar el chat</string>
|
||||
<string name="failed_to_parse_chats_title">Fallo en la carga de chats</string>
|
||||
<string name="failed_to_parse_chats_title">No se pudieron cargar los chats</string>
|
||||
<string name="simplex_link_mode_full">Enlace completo</string>
|
||||
<string name="error_deleting_contact">Error al eliminar contacto</string>
|
||||
<string name="error_joining_group">Error al unirte al grupo</string>
|
||||
@@ -562,7 +562,7 @@
|
||||
<string name="rcv_group_event_member_left">ha salido</string>
|
||||
<string name="button_leave_group">Salir del grupo</string>
|
||||
<string name="only_group_owners_can_change_prefs">Sólo los propietarios pueden modificar las preferencias del grupo.</string>
|
||||
<string name="users_delete_data_only">Eliminar sólo el perfil</string>
|
||||
<string name="users_delete_data_only">Sólo datos del perfil</string>
|
||||
<string name="chat_preferences_no">no</string>
|
||||
<string name="thousand_abbreviation">k</string>
|
||||
<string name="marked_deleted_description">marcado eliminado</string>
|
||||
@@ -579,7 +579,7 @@
|
||||
<string name="make_private_connection">Establecer una conexión privada</string>
|
||||
<string name="network_error_desc">Comprueba tu conexión de red con %1$s e inténtalo de nuevo.</string>
|
||||
<string name="sender_may_have_deleted_the_connection_request">El remitente puede haber eliminado la solicitud de conexión.</string>
|
||||
<string name="error_smp_test_certificate">Posiblemente la huella del certificado en la dirección del servidor es incorrecta</string>
|
||||
<string name="error_smp_test_certificate">Posiblemente la huella digital del certificado en la dirección del servidor es incorrecta</string>
|
||||
<string name="reply_verb">Responder</string>
|
||||
<string name="save_passphrase_in_keychain">Guardar contraseña en Keystore</string>
|
||||
<string name="database_restore_error">Error al restaurar base de datos</string>
|
||||
@@ -668,7 +668,7 @@
|
||||
<string name="receiving_via">Recibiendo vía</string>
|
||||
<string name="network_option_protocol_timeout">Timeout protocolo</string>
|
||||
<string name="network_option_seconds_label">seg</string>
|
||||
<string name="users_delete_with_connections">Eliminar perfil y conexiones</string>
|
||||
<string name="users_delete_with_connections">Datos del perfil y conexiones</string>
|
||||
<string name="prohibit_sending_disappearing_messages">No se permiten mensajes temporales.</string>
|
||||
<string name="only_you_can_send_voice">Sólo tú puedes enviar mensajes de voz.</string>
|
||||
<string name="only_your_contact_can_send_voice">Sólo tu contacto puede enviar mensajes de voz.</string>
|
||||
@@ -820,7 +820,7 @@
|
||||
<string name="trying_to_connect_to_server_to_receive_messages">Intentando conectar con el servidor para recibir mensajes de este contacto.</string>
|
||||
<string name="unknown_message_format">formato de mensaje desconocido</string>
|
||||
<string name="trying_to_connect_to_server_to_receive_messages_with_error">Intentando conectar con el servidor para recibir mensajes de este contacto (error: %1$s).</string>
|
||||
<string name="error_smp_test_failed_at_step">Prueba no superada en el paso %s.</string>
|
||||
<string name="error_smp_test_failed_at_step">Prueba fallida en el paso %s.</string>
|
||||
<string name="tap_to_start_new_chat">Pulsa para iniciar chat nuevo</string>
|
||||
<string name="share_message">Compartir mensaje…</string>
|
||||
<string name="share_image">Compartir medios…</string>
|
||||
@@ -832,8 +832,8 @@
|
||||
<string name="switch_receiving_address">Cambiar servidor de recepción</string>
|
||||
<string name="group_is_decentralized">Totalmente descentralizado. Visible sólo para los miembros.</string>
|
||||
<string name="to_connect_via_link_title">Para conectarte mediante enlace</string>
|
||||
<string name="smp_servers_test_failed">¡Prueba no superada!</string>
|
||||
<string name="smp_servers_test_some_failed">Algunos servidores no han superado la prueba:</string>
|
||||
<string name="smp_servers_test_failed">¡Error en prueba del servidor!</string>
|
||||
<string name="smp_servers_test_some_failed">Algunos servidores no superaron la prueba:</string>
|
||||
<string name="smp_servers_use_server">Usar servidor</string>
|
||||
<string name="smp_servers_use_server_for_new_conn">Usar para conexiones nuevas</string>
|
||||
<string name="theme_system">Sistema</string>
|
||||
@@ -1627,9 +1627,9 @@
|
||||
<string name="past_member_vName">Miembro pasado %1$s</string>
|
||||
<string name="profile_update_event_member_name_changed">el miembro %1$s ha cambiado a %2$s</string>
|
||||
<string name="profile_update_event_removed_address">dirección de contacto eliminada</string>
|
||||
<string name="profile_update_event_removed_picture">ha eliminado la imagen del perfil</string>
|
||||
<string name="profile_update_event_removed_picture">imagen de perfil eliminada</string>
|
||||
<string name="profile_update_event_set_new_address">nueva dirección de contacto</string>
|
||||
<string name="profile_update_event_set_new_picture">tiene nueva imagen del perfil</string>
|
||||
<string name="profile_update_event_set_new_picture">nueva imagen de perfil</string>
|
||||
<string name="call_service_notification_audio_call">Llamada</string>
|
||||
<string name="call_service_notification_end_call">Llamada finalizada</string>
|
||||
<string name="call_service_notification_video_call">Videollamada</string>
|
||||
@@ -1686,7 +1686,7 @@
|
||||
<string name="migrate_from_device_finalize_migration">Finalizar migración</string>
|
||||
<string name="migrate_from_device_archive_will_be_deleted"><![CDATA[<b>Atención</b>: el archivo será eliminado.]]></string>
|
||||
<string name="migrate_from_device_check_connection_and_try_again">Comprueba tu conexión a internet y vuelve a intentarlo</string>
|
||||
<string name="migrate_from_device_confirm_you_remember_passphrase">Para migrar la base de datos confirma que recuerdas la frase de contraseña.</string>
|
||||
<string name="migrate_from_device_confirm_you_remember_passphrase">Para migrar confirma que recuerdas la frase de contraseña de la base de datos.</string>
|
||||
<string name="migrate_from_device_error_verifying_passphrase">Error al verificar la frase de contraseña:</string>
|
||||
<string name="migrate_from_device_using_on_two_device_breaks_encryption"><![CDATA[<b>Recuerda</b>: usar la misma base de datos en dos dispositivos hará que falle el descifrado de mensajes como protección de seguridad.]]></string>
|
||||
<string name="migrate_from_device_choose_migrate_from_another_device"><![CDATA[En el nuevo dispositivo selecciona <i>Migrar desde otro dispositivo</i> y escanea el código QR.]]></string>
|
||||
@@ -2107,25 +2107,4 @@
|
||||
<string name="new_chat_share_profile">Comparte perfil</string>
|
||||
<string name="switching_profile_error_message">Tu conexión ha sido trasladada a %s pero ha ocurrido un error inesperado al redirigirte al perfil.</string>
|
||||
<string name="icon_descr_sound_muted">Sonido silenciado</string>
|
||||
<string name="error_initializing_web_view_wrong_arch">Error al iniciar WebView. Asegúrate de tener WebView instalado y que sea compatible con la arquitectura amr64.\nError: %s</string>
|
||||
<string name="settings_section_title_message_shape">Forma del mensaje</string>
|
||||
<string name="settings_message_shape_corner">Esquinas</string>
|
||||
<string name="settings_message_shape_tail">Cola</string>
|
||||
<string name="network_session_mode_session_description">Se usarán credenciales SOCKS nuevas cada vez que inicies la aplicación.</string>
|
||||
<string name="network_session_mode_session">Sesión de aplicación</string>
|
||||
<string name="call_desktop_permission_denied_safari">Abre la configuración de Safari / Sitios Web / Micrófono y a continuación selecciona Permitir para localhost.</string>
|
||||
<string name="call_desktop_permission_denied_chrome">Pulsa el botón info del campo dirección para permitir el uso del micrófono.</string>
|
||||
<string name="call_desktop_permission_denied_title">Para hacer llamadas, permite el uso del micrófono. Cuelga e intenta llamar de nuevo.</string>
|
||||
<string name="network_session_mode_server_description">Se usarán credenciales SOCKS nuevas por cada servidor.</string>
|
||||
<string name="network_session_mode_server">Servidor</string>
|
||||
<string name="v6_1_better_calls">Llamadas mejoradas</string>
|
||||
<string name="v6_1_message_dates_descr">Mensajes mejor datados.</string>
|
||||
<string name="v6_1_better_user_experience">Experiencia de usuario mejorada</string>
|
||||
<string name="v6_1_customizable_message_descr">Forma personalizable de los mensajes.</string>
|
||||
<string name="v6_1_forward_many_messages_descr">Desplazamiento de hasta 20 mensajes.</string>
|
||||
<string name="v6_1_better_security_descr">Protocolos de SimpleX auditados por Trail of Bits.</string>
|
||||
<string name="v6_1_better_calls_descr">Intercambia audio y video durante la llamada.</string>
|
||||
<string name="v6_1_better_security">Seguridad mejorada ✅</string>
|
||||
<string name="v6_1_delete_many_messages_descr">Borrar o moderar hasta 200 mensajes.</string>
|
||||
<string name="v6_1_switch_chat_profile_descr">Cambia el perfil de chat para invitaciones de un solo uso.</string>
|
||||
</resources>
|
||||
@@ -14,7 +14,7 @@
|
||||
<string name="abort_switch_receiving_address_confirm">Megszakítás</string>
|
||||
<string name="send_disappearing_message_30_seconds">30 másodperc</string>
|
||||
<string name="one_time_link_short">Egyszer használható hivatkozás</string>
|
||||
<string name="contact_wants_to_connect_via_call">%1$s szeretne kapcsolatba lépni Önnel ezen keresztül:</string>
|
||||
<string name="contact_wants_to_connect_via_call">%1$s szeretne kapcsolatba lépni önnel ezen keresztül:</string>
|
||||
<string name="about_simplex_chat">A SimpleX Chatről</string>
|
||||
<string name="chat_item_ttl_day">1 nap</string>
|
||||
<string name="abort_switch_receiving_address">Címváltoztatás megszakítása</string>
|
||||
@@ -25,7 +25,7 @@
|
||||
<string name="accept_feature">Elfogadás</string>
|
||||
<string name="accept_call_on_lock_screen">Elfogadás</string>
|
||||
<string name="above_then_preposition_continuation">gombra fent, majd:</string>
|
||||
<string name="accept_contact_incognito_button">Elfogadás inkognitóban</string>
|
||||
<string name="accept_contact_incognito_button">Elfogadás inkognítóban</string>
|
||||
<string name="accept_connection_request__question">Kapcsolatkérés elfogadása?</string>
|
||||
<string name="accept_contact_button">Elfogadás</string>
|
||||
<string name="accept">Elfogadás</string>
|
||||
@@ -70,8 +70,8 @@
|
||||
<string name="available_in_v51">"
|
||||
\nElérhető a v5.1-ben"</string>
|
||||
<string name="both_you_and_your_contacts_can_delete">Mindkét fél véglegesen törölheti az elküldött üzeneteket. (24 óra)</string>
|
||||
<string name="v5_4_better_groups">Továbbfejlesztett csoportok</string>
|
||||
<string name="clear_chat_warning">Minden üzenet törlésre kerül - ez a művelet nem vonható vissza! Az üzenetek CSAK az Ön számára törlődnek.</string>
|
||||
<string name="v5_4_better_groups">Javított csoportok</string>
|
||||
<string name="clear_chat_warning">Minden üzenet törlésre kerül - ez a művelet nem vonható vissza! Az üzenetek CSAK az ön számára törlődnek.</string>
|
||||
<string name="icon_descr_call_ended">Hívás befejeződött</string>
|
||||
<string name="settings_section_title_calls">HÍVÁSOK</string>
|
||||
<string name="rcv_group_and_other_events">és további %d esemény</string>
|
||||
@@ -138,7 +138,7 @@
|
||||
<string name="allow_your_contacts_irreversibly_delete">Az elküldött üzenetek végleges törlése engedélyezve van az ismerősei számára. (24 óra)</string>
|
||||
<string name="cancel_verb">Mégse</string>
|
||||
<string name="notifications_mode_off_desc">Az alkalmazás csak akkor tud értesítéseket fogadni, amikor meg van nyitva. A háttérszolgáltatás nem indul el</string>
|
||||
<string name="v5_1_better_messages">Továbbfejlesztett üzenetek</string>
|
||||
<string name="v5_1_better_messages">Jobb üzenetek</string>
|
||||
<string name="abort_switch_receiving_address_desc">A cím módosítása megszakad. A régi fogadási cím kerül felhasználásra.</string>
|
||||
<string name="allow_verb">Engedélyezés</string>
|
||||
<string name="bad_desktop_address">Hibás számítógép cím</string>
|
||||
@@ -191,20 +191,20 @@
|
||||
<string name="switch_receiving_address_question">Megváltoztatja a fogadó címet?</string>
|
||||
<string name="rcv_conn_event_switch_queue_phase_completed">cím megváltoztatva</string>
|
||||
<string name="change_self_destruct_mode">Önmegsemmisítő mód megváltoztatása</string>
|
||||
<string name="rcv_group_event_changed_your_role">megváltoztatta az Ön szerepkörét erre: %s</string>
|
||||
<string name="rcv_group_event_changed_your_role">megváltoztatta az ön szerepkörét erre: %s</string>
|
||||
<string name="connect_button">Kapcsolódás</string>
|
||||
<string name="connect_via_member_address_alert_title">Közvetlen kapcsolódás?</string>
|
||||
<string name="smp_server_test_connect">Kapcsolódás</string>
|
||||
<string name="rcv_group_event_member_created_contact">közvetlenül kapcsolódott</string>
|
||||
<string name="rcv_group_event_member_created_contact">közvetlenül kapcsolódva</string>
|
||||
<string name="connection_local_display_name">kapcsolat %1$d</string>
|
||||
<string name="status_contact_has_e2e_encryption">az ismerős e2e titkosítással rendelkezik</string>
|
||||
<string name="v5_4_incognito_groups_descr">Csoport létrehozása véletlenszerű profillal.</string>
|
||||
<string name="delete_contact_all_messages_deleted_cannot_undo_warning">Az ismerős és az összes üzenet törlésre kerül - ez a művelet nem vonható vissza!</string>
|
||||
<string name="contacts_can_mark_messages_for_deletion">Az ismerősei törlésre jelölhetnek üzeneteket; Ön majd meg tudja nézni azokat.</string>
|
||||
<string name="contacts_can_mark_messages_for_deletion">Az ismerősei törlésre jelölhetnek üzeneteket; ön majd meg tudja nézni azokat.</string>
|
||||
<string name="connect_via_invitation_link">Kapcsolódás egyszer használható hivatkozással?</string>
|
||||
<string name="connect_via_link_or_qr">Kapcsolódás egy hivatkozáson vagy QR-kódon keresztül</string>
|
||||
<string name="connection_error_auth">Kapcsolódási hiba (AUTH)</string>
|
||||
<string name="notification_preview_mode_contact">Csak név</string>
|
||||
<string name="notification_preview_mode_contact">Ismerős neve</string>
|
||||
<string name="connect_via_contact_link">Kapcsolódik a kapcsolattartási címen keresztül?</string>
|
||||
<string name="create_address">Cím létrehozása</string>
|
||||
<string name="copy_verb">Másolás</string>
|
||||
@@ -338,10 +338,10 @@
|
||||
<string name="delete_image">Kép törlése</string>
|
||||
<string name="smp_server_test_create_file">Fájl létrehozása</string>
|
||||
<string name="create_secret_group_title">Tikos csoport létrehozása</string>
|
||||
<string name="clear_contacts_selection_button">Elvetés</string>
|
||||
<string name="clear_contacts_selection_button">Kiürítés</string>
|
||||
<string name="delete_contact_question">Ismerős törlése?</string>
|
||||
<string name="clear_verb">Kiürítés</string>
|
||||
<string name="create_address_and_let_people_connect">Cím létrehozása, hogy az emberek kapcsolatba léphessenek Önnel.</string>
|
||||
<string name="create_address_and_let_people_connect">Cím létrehozása, hogy az emberek kapcsolatba léphessenek önnel.</string>
|
||||
<string name="v4_4_verify_connection_security_desc">Biztonsági kódok összehasonlítása az ismerősökével.</string>
|
||||
<string name="smp_server_test_compare_file">Fájl-összehasonlítás</string>
|
||||
<string name="your_chats">Csevegések</string>
|
||||
@@ -421,7 +421,7 @@
|
||||
<string name="blocked_items_description">%d üzenet letiltva</string>
|
||||
<string name="info_row_disappears_at">Eltűnik ekkor:</string>
|
||||
<string name="ttl_weeks">%d hét</string>
|
||||
<string name="feature_enabled_for_you">engedélyezve az Ön számára</string>
|
||||
<string name="feature_enabled_for_you">engedélyezve az ön számára</string>
|
||||
<string name="timed_messages">Eltűnő üzenetek</string>
|
||||
<string name="delete_group_menu_action">Törlés</string>
|
||||
<string name="delete_and_notify_contact">Törlés, és az ismerős értesítése</string>
|
||||
@@ -495,7 +495,7 @@
|
||||
<string name="marked_deleted_items_description">%d üzenet megjelölve törlésre</string>
|
||||
<string name="conn_event_ratchet_sync_allowed">titkosítás újra egyeztetése engedélyezve</string>
|
||||
<string name="enable_self_destruct">Önmegsemmisítés engedélyezése</string>
|
||||
<string name="v5_2_favourites_filter_descr">Olvasatlan és kedvenc csevegésekre való szűrés.</string>
|
||||
<string name="v5_2_favourites_filter_descr">Olvasatlan és csillagozott csevegésekre való szűrés.</string>
|
||||
<string name="failed_to_parse_chats_title">A csevegések betöltése sikertelen</string>
|
||||
<string name="connect_plan_group_already_exists">A csoport már létezik!</string>
|
||||
<string name="v4_4_french_interface">Francia kezelőfelület</string>
|
||||
@@ -512,16 +512,16 @@
|
||||
<string name="icon_descr_group_inactive">A csoport inaktív</string>
|
||||
<string name="v5_0_large_files_support_descr">Gyors és nem kell várni, amíg a feladó online lesz!</string>
|
||||
<string name="error_joining_group">Hiba a csoporthoz való csatlakozáskor</string>
|
||||
<string name="favorite_chat">Kedvenc</string>
|
||||
<string name="favorite_chat">Csillag</string>
|
||||
<string name="v4_6_group_moderation">Csoport moderáció</string>
|
||||
<string name="choose_file">Fájl</string>
|
||||
<string name="group_link">Csoporthivatkozás</string>
|
||||
<string name="snd_conn_event_ratchet_sync_required">titkosítás-újraegyeztetés szükséges ehhez: %s</string>
|
||||
<string name="failed_to_active_user_title">Hiba a profilváltáskor!</string>
|
||||
<string name="failed_to_active_user_title">Hiba a profil váltásakor!</string>
|
||||
<string name="settings_experimental_features">Kísérleti funkciók</string>
|
||||
<string name="receipts_contacts_enable_keep_overrides">Engedélyezés (felülírások megtartásával)</string>
|
||||
<string name="enter_correct_passphrase">Adja meg a helyes jelmondatot.</string>
|
||||
<string name="delete_group_for_self_cannot_undo_warning">A csoport törlésre kerül az Ön számára - ez a művelet nem vonható vissza!</string>
|
||||
<string name="delete_group_for_self_cannot_undo_warning">A csoport törlésre kerül az ön számára - ez a művelet nem vonható vissza!</string>
|
||||
<string name="encrypt_database_question">Adatbázis titkosítása?</string>
|
||||
<string name="allow_accepting_calls_from_lock_screen">A zárolási képernyőn megjelenő hívások engedélyezése a Beállításokban.</string>
|
||||
<string name="conn_event_ratchet_sync_agreed">titkosítás elfogadva</string>
|
||||
@@ -624,7 +624,7 @@
|
||||
<string name="v4_6_hidden_chat_profiles">Rejtett csevegési profilok</string>
|
||||
<string name="files_and_media_section">Fájlok és médiatartalmak</string>
|
||||
<string name="image_saved">A kép mentve a „Galériába”</string>
|
||||
<string name="hide_notification">Elrejtés</string>
|
||||
<string name="hide_notification">Elrejt</string>
|
||||
<string name="la_immediately">Azonnal</string>
|
||||
<string name="files_and_media_prohibited">A fájlok- és a médiatartalmak küldése le van tiltva!</string>
|
||||
<string name="hide_profile">Profil elrejtése</string>
|
||||
@@ -636,18 +636,18 @@
|
||||
<string name="incompatible_database_version">Nem kompatibilis adatbázis-verzió</string>
|
||||
<string name="how_simplex_works">Hogyan működik a SimpleX</string>
|
||||
<string name="desktop_incompatible_version">Nem kompatibilis verzió</string>
|
||||
<string name="user_hide">Elrejtés</string>
|
||||
<string name="user_hide">Elrejt</string>
|
||||
<string name="incoming_video_call">Bejövő videóhívás</string>
|
||||
<string name="incorrect_passcode">Téves jelkód</string>
|
||||
<string name="onboarding_notifications_mode_service">Azonnali</string>
|
||||
<string name="v5_4_incognito_groups">Inkognitócsoportok</string>
|
||||
<string name="v5_4_incognito_groups">Inkognitó csoportok</string>
|
||||
<string name="how_to">Hogyan</string>
|
||||
<string name="hide_verb">Elrejtés</string>
|
||||
<string name="hide_verb">Elrejt</string>
|
||||
<string name="gallery_image_button">Kép</string>
|
||||
<string name="v4_3_improved_privacy_and_security">Fejlesztett adatvédelem és biztonság</string>
|
||||
<string name="ignore">Mellőzés</string>
|
||||
<string name="icon_descr_image_snd_complete">Kép elküldve</string>
|
||||
<string name="notification_preview_mode_hidden">Se név, se üzenet</string>
|
||||
<string name="notification_preview_mode_hidden">Rejtett</string>
|
||||
<string name="host_verb">Kiszolgáló</string>
|
||||
<string name="initial_member_role">Kezdeti szerepkör</string>
|
||||
<string name="invalid_chat">érvénytelen csevegés</string>
|
||||
@@ -657,7 +657,7 @@
|
||||
<string name="v4_3_improved_privacy_and_security_desc">Alkalmazás képernyőjének elrejtése a gyakran használt alkalmazások között.</string>
|
||||
<string name="v4_3_improved_server_configuration">Javított kiszolgáló konfiguráció</string>
|
||||
<string name="edit_history">Előzmények</string>
|
||||
<string name="hidden_profile_password">Rejtett profiljelszó</string>
|
||||
<string name="hidden_profile_password">Rejtett profil jelszó</string>
|
||||
<string name="import_database">Adatbázis importálása</string>
|
||||
<string name="import_database_confirmation">Importálás</string>
|
||||
<string name="icon_descr_instant_notifications">Azonnali értesítések</string>
|
||||
@@ -668,7 +668,7 @@
|
||||
<string name="image_descr">Kép</string>
|
||||
<string name="files_are_prohibited_in_group">A fájlok- és a médiatartalmak le vannak tiltva ebben a csoportban.</string>
|
||||
<string name="how_it_works">Hogyan működik</string>
|
||||
<string name="hide_dev_options">Elrejtés:</string>
|
||||
<string name="hide_dev_options">Elrejt:</string>
|
||||
<string name="error_creating_member_contact">Hiba az ismerőssel történő kapcsolat létrehozásában</string>
|
||||
<string name="enter_one_ICE_server_per_line">ICE-kiszolgálók (soronként egy)</string>
|
||||
<string name="if_you_cannot_meet_in_person_scan_QR_in_video_call_or_ask_for_invitation_link"><![CDATA[Ha nem tud személyesen találkozni, <b>beolvashatja a QR-kódot a videohívásban</b>, vagy az ismerőse megoszthat egy meghívó-hivatkozást.]]></string>
|
||||
@@ -698,7 +698,7 @@
|
||||
<string name="theme_light">Világos</string>
|
||||
<string name="delete_message_cannot_be_undone_warning">Az üzenet törlésre kerül - ez a művelet nem vonható vissza!</string>
|
||||
<string name="markdown_help">Markdown segítség</string>
|
||||
<string name="notification_preview_new_message">Rejtett üzenet</string>
|
||||
<string name="notification_preview_new_message">új üzenet</string>
|
||||
<string name="old_database_archive">Régi adatbázis-archívum</string>
|
||||
<string name="network_settings_title">Speciális beállítások</string>
|
||||
<string name="no_info_on_delivery">Nincs kézbesítési információ</string>
|
||||
@@ -715,7 +715,7 @@
|
||||
<string name="v5_2_fix_encryption">Kapcsolatok megtartása</string>
|
||||
<string name="button_add_members">Tagok meghívása</string>
|
||||
<string name="message_reactions">Üzenetreakciók</string>
|
||||
<string name="only_one_device_can_work_at_the_same_time">Egyszerre csak 1 eszköz működhet</string>
|
||||
<string name="only_one_device_can_work_at_the_same_time">Egyszerre csak egy eszköz működhet</string>
|
||||
<string name="connect_plan_join_your_group">Csatlakozik a csoportjához?</string>
|
||||
<string name="large_file">Nagy fájl!</string>
|
||||
<string name="info_row_local_name">Helyi név</string>
|
||||
@@ -726,7 +726,7 @@
|
||||
<string name="v4_6_reduced_battery_usage_descr">Hamarosan további fejlesztések érkeznek!</string>
|
||||
<string name="message_reactions_prohibited_in_this_chat">Az üzenetreakciók küldése le van tiltva ebben a csevegésben.</string>
|
||||
<string name="incorrect_code">Helytelen biztonsági kód!</string>
|
||||
<string name="alert_text_fragment_encryption_out_of_sync_old_database">Ez akkor fordulhat elő, ha Ön vagy az ismerőse régi adatbázis biztonsági mentést használt.</string>
|
||||
<string name="alert_text_fragment_encryption_out_of_sync_old_database">Ez akkor fordulhat elő, ha ön vagy az ismerőse régi adatbázis biztonsági mentést használt.</string>
|
||||
<string name="v5_3_new_desktop_app">Új számítógép-alkalmazás!</string>
|
||||
<string name="v4_6_group_moderation_descr">Most már az adminok is:
|
||||
\n- törölhetik a tagok üzeneteit.
|
||||
@@ -752,7 +752,7 @@
|
||||
<string name="notification_new_contact_request">Új kapcsolatkérés</string>
|
||||
<string name="joining_group">Csatlakozás a csoporthoz</string>
|
||||
<string name="linked_desktop_options">Társított számítógép beállítások</string>
|
||||
<string name="rcv_group_event_invited_via_your_group_link">meghíva az Ön csoporthivatkozásán keresztül</string>
|
||||
<string name="rcv_group_event_invited_via_your_group_link">meghíva az ön csoporthivatkozásán keresztül</string>
|
||||
<string name="rcv_group_event_member_left">elhagyta a csoportot</string>
|
||||
<string name="linked_desktops">Társított számítógépek</string>
|
||||
<string name="la_no_app_password">Nincs alkalmazás jelkód</string>
|
||||
@@ -769,12 +769,13 @@
|
||||
<string name="v5_2_disappear_one_message">Egy üzenet eltüntetése</string>
|
||||
<string name="v4_3_irreversible_message_deletion">Végleges üzenettörlés</string>
|
||||
<string name="videos_limit_desc">Egyszerre csak 10 videó küldhető el</string>
|
||||
<string name="only_you_can_add_message_reactions">Csak Ön adhat hozzá üzenetreakciókat.</string>
|
||||
<string name="only_you_can_add_message_reactions">Csak ön adhat hozzá üzenetreakciókat.</string>
|
||||
<string name="group_member_status_left">elhagyta a csoportot</string>
|
||||
<string name="message_deletion_prohibited">Az üzenetek végleges törlése le van tiltva ebben a csevegésben.</string>
|
||||
<string name="v4_3_voice_messages_desc">Max 40 másodperc, azonnal fogadható.</string>
|
||||
<string name="description_via_contact_address_link_incognito">inkognitó a kapcsolattartási címhivatkozáson keresztül</string>
|
||||
<string name="network_use_onion_hosts_required_desc">Onion-kiszolgálók szükségesek a kapcsolódáshoz.\nMegjegyzés: .onion cím nélkül nem fog tudni kapcsolódni a kiszolgálókhoz.</string>
|
||||
<string name="description_via_contact_address_link_incognito">inkognitó a kapcsolattartási cím-hivatkozáson keresztül</string>
|
||||
<string name="network_use_onion_hosts_required_desc">Az onion-kiszolgálók szükségesek a kapcsolódáshoz.
|
||||
\nMegjegyzés: .onion cím nélkül nem fog tudni kapcsolódni a kiszolgálókhoz.</string>
|
||||
<string name="v4_5_italian_interface">Olasz kezelőfelület</string>
|
||||
<string name="system_restricted_background_in_call_title">Nincsenek háttérhívások</string>
|
||||
<string name="messages_section_title">Üzenetek</string>
|
||||
@@ -823,7 +824,10 @@
|
||||
<string name="button_leave_group">Csoport elhagyása</string>
|
||||
<string name="unblock_member_desc">Minden %s által írt üzenet megjelenik!</string>
|
||||
<string name="many_people_asked_how_can_it_deliver"><![CDATA[Sokan kérdezték: <i>Ha a SimpleX Chatnek nincs felhasználói azonosítója, hogyan lehet mégis üzeneteket küldeni?</i>]]></string>
|
||||
<string name="alert_text_skipped_messages_it_can_happen_when">Ez akkor fordulhat elő, ha:\n1. Az üzenetek 2 nap után, vagy a kiszolgálón 30 nap után lejártak.\n2. Az üzenet visszafejtése sikertelen volt, mert Ön, vagy az ismerőse régebbi adatbázis biztonsági mentést használt.\n3. A kapcsolat sérült.</string>
|
||||
<string name="alert_text_skipped_messages_it_can_happen_when">Ez akkor fordulhat elő, ha:
|
||||
\n1. Az üzenetek 2 nap után, vagy a kiszolgálón 30 nap után lejártak.
|
||||
\n2. Az üzenet visszafejtése sikertelen volt, mert ön, vagy az ismerőse régebbi adatbázis biztonsági mentést használt.
|
||||
\n3. A kapcsolat sérült.</string>
|
||||
<string name="group_member_role_observer">megfigyelő</string>
|
||||
<string name="description_via_group_link_incognito">inkognitó a csoporthivatkozáson keresztül</string>
|
||||
<string name="network_use_onion_hosts_prefer_desc">Onion-kiszolgálók használata, ha azok rendelkezésre állnak.</string>
|
||||
@@ -853,7 +857,7 @@
|
||||
<string name="callstatus_missed">nem fogadott hívás</string>
|
||||
<string name="database_migrations">Átköltöztetés: %s</string>
|
||||
<string name="in_reply_to">Válaszul erre:</string>
|
||||
<string name="notification_preview_mode_message">Név és üzenet</string>
|
||||
<string name="notification_preview_mode_message">Üzenet szövege</string>
|
||||
<string name="notifications_will_be_hidden">Az értesítések csak az alkalmazás bezárásáig érkeznek!</string>
|
||||
<string name="info_menu">Információ</string>
|
||||
<string name="settings_section_title_messages">ÜZENETEK ÉS FÁJLOK</string>
|
||||
@@ -870,22 +874,24 @@
|
||||
<string name="invite_to_group_button">Meghívás a csoportba</string>
|
||||
<string name="lock_after">Zárolás miután</string>
|
||||
<string name="incoming_audio_call">Bejövő hanghívás</string>
|
||||
<string name="keychain_error">Kulcstartóhiba</string>
|
||||
<string name="keychain_error">Kulcstartó hiba</string>
|
||||
<string name="join_group_question">Csatlakozik a csoporthoz?</string>
|
||||
<string name="incognito_info_protects">Az inkognitómód védi személyes adatait azáltal, hogy minden ismerőshöz új véletlenszerű profilt használ.</string>
|
||||
<string name="v5_2_more_things_descr">- stabilabb üzenetkézbesítés.\n- picit továbbfejlesztett csoportok.\n- és még sok más!</string>
|
||||
<string name="v5_2_more_things_descr">- stabilabb üzenetkézbesítés.
|
||||
\n- valamivel jobb csoportok.
|
||||
\n- és még sok más!</string>
|
||||
<string name="v5_1_message_reactions">Üzenetreakciók</string>
|
||||
<string name="no_connected_mobile">Nincs társított hordozható eszköz</string>
|
||||
<string name="network_status">Hálózat állapota</string>
|
||||
<string name="new_passcode">Új jelkód</string>
|
||||
<string name="message_delivery_error_desc">Valószínűleg ez az ismerős törölte Önnel a kapcsolatot.</string>
|
||||
<string name="message_delivery_error_desc">Valószínűleg ez az ismerős törölte önnel a kapcsolatot.</string>
|
||||
<string name="join_group_incognito_button">Csatlakozás inkognitóban</string>
|
||||
<string name="open_chat">Csevegés megnyitása</string>
|
||||
<string name="callstatus_rejected">elutasított hívás</string>
|
||||
<string name="onboarding_notifications_mode_periodic">Rendszeres</string>
|
||||
<string name="feature_received_prohibited">fogadott, tiltott</string>
|
||||
<string name="connect_plan_repeat_connection_request">Kapcsolatkérés megismétlése?</string>
|
||||
<string name="only_you_can_delete_messages">Véglegesen csak Ön törölhet üzeneteket (ismerőse csak törlésre jelölheti őket ). (24 óra)</string>
|
||||
<string name="only_you_can_delete_messages">Véglegesen csak ön törölhet üzeneteket (ismerőse csak törlésre jelölheti őket ). (24 óra)</string>
|
||||
<string name="role_in_group">Szerepkör</string>
|
||||
<string name="simplex_link_contact">SimpleX-kapcsolattartási-cím</string>
|
||||
<string name="stop_file__confirm">Megállítás</string>
|
||||
@@ -895,7 +901,7 @@
|
||||
<string name="rcv_group_event_open_chat">Megnyitás</string>
|
||||
<string name="network_option_protocol_timeout">Protokoll időtúllépés</string>
|
||||
<string name="secret_text">titkos</string>
|
||||
<string name="settings_notification_preview_mode_title">Értesítés előnézete</string>
|
||||
<string name="settings_notification_preview_mode_title">Üzenetek előnézetének megjelenítése</string>
|
||||
<string name="callstate_waiting_for_confirmation">várakozás a visszaigazolásra…</string>
|
||||
<string name="stop_file__action">Fájl megállítása</string>
|
||||
<string name="description_via_group_link">a csoporthivatkozáson keresztül</string>
|
||||
@@ -908,7 +914,7 @@
|
||||
<string name="alert_text_fragment_please_report_to_developers">Jelentse a fejlesztőknek.</string>
|
||||
<string name="people_can_connect_only_via_links_you_share">Ön dönti el, hogy kivel beszélget.</string>
|
||||
<string name="prohibit_sending_disappearing">Az eltűnő üzenetek küldése le van tiltva.</string>
|
||||
<string name="only_you_can_send_voice">Csak Ön tud hangüzeneteket küldeni.</string>
|
||||
<string name="only_you_can_send_voice">Csak ön tud hangüzeneteket küldeni.</string>
|
||||
<string name="update_network_settings_confirmation">Frissítés</string>
|
||||
<string name="icon_descr_video_snd_complete">Videó elküldve</string>
|
||||
<string name="update_database_passphrase">Adatbázis-jelmondat megváltoztatása</string>
|
||||
@@ -916,7 +922,7 @@
|
||||
<string name="passcode_not_changed">A jelkód nem változott!</string>
|
||||
<string name="refresh_qr_code">Frissítés</string>
|
||||
<string name="custom_time_picker_select">Kiválasztás</string>
|
||||
<string name="only_you_can_make_calls">Csak Ön tud hívásokat indítani.</string>
|
||||
<string name="only_you_can_make_calls">Csak ön tud hívásokat indítani.</string>
|
||||
<string name="smp_server_test_secure_queue">Biztonságos sorbaállítás</string>
|
||||
<string name="rate_the_app">Értékelje az alkalmazást</string>
|
||||
<string name="share_invitation_link">Egyszer használható hivatkozás megosztása</string>
|
||||
@@ -940,9 +946,9 @@
|
||||
<string name="connect_via_link_or_qr_from_clipboard_or_in_person">(beolvasás, vagy beillesztés a vágólapról)</string>
|
||||
<string name="waiting_for_video">Várakozás a videóra</string>
|
||||
<string name="reply_verb">Válasz</string>
|
||||
<string name="connect_plan_this_is_your_own_one_time_link">Ez az Ön egyszer használható hivatkozása!</string>
|
||||
<string name="connect_plan_this_is_your_own_one_time_link">Ez az ön egyszer használható hivatkozása!</string>
|
||||
<string name="ntf_channel_calls">SimpleX Chat hívások</string>
|
||||
<string name="connect_use_new_incognito_profile">Új inkognitóprofil használata</string>
|
||||
<string name="connect_use_new_incognito_profile">Új inkognító profil használata</string>
|
||||
<string name="contact_developers">Frissítse az alkalmazást, és lépjen kapcsolatba a fejlesztőkkel.</string>
|
||||
<string name="theme_simplex">SimpleX</string>
|
||||
<string name="send_link_previews">Hivatkozás előnézete</string>
|
||||
@@ -994,7 +1000,7 @@
|
||||
<string name="smp_servers_your_server">Saját SMP-kiszolgáló</string>
|
||||
<string name="random_port">Véletlen</string>
|
||||
<string name="share_with_contacts">Megosztás az ismerősökkel</string>
|
||||
<string name="sender_you_pronoun">Ön</string>
|
||||
<string name="sender_you_pronoun">ön</string>
|
||||
<string name="you_have_no_chats">Nincsenek csevegései</string>
|
||||
<string name="send_disappearing_message_send">Küldés</string>
|
||||
<string name="chat_item_ttl_seconds">%s másodperc</string>
|
||||
@@ -1042,7 +1048,7 @@
|
||||
<string name="settings_section_title_support">SIMPLEX CHAT TÁMOGATÁSA</string>
|
||||
<string name="simplex_service_notification_title">SimpleX Chat szolgáltatás</string>
|
||||
<string name="observer_cant_send_message_title">Nem lehet üzeneteket küldeni!</string>
|
||||
<string name="is_verified">%s hitelesítve</string>
|
||||
<string name="is_verified">%s ellenőrzött</string>
|
||||
<string name="password_to_show">Jelszó megjelenítése</string>
|
||||
<string name="privacy_and_security">Adatvédelem és biztonság</string>
|
||||
<string name="button_remove_member">Eltávolítás</string>
|
||||
@@ -1054,7 +1060,7 @@
|
||||
<string name="group_welcome_title">Üdvözlőüzenet</string>
|
||||
<string name="network_option_seconds_label">mp</string>
|
||||
<string name="profile_update_will_be_sent_to_contacts">A profilfrissítés elküldésre került az ismerősök számára.</string>
|
||||
<string name="v5_3_simpler_incognito_mode">Egyszerűsített inkognitómód</string>
|
||||
<string name="v5_3_simpler_incognito_mode">Egyszerűsített inkognító mód</string>
|
||||
<string name="save_welcome_message_question">Üdvözlőüzenet mentése?</string>
|
||||
<string name="restart_the_app_to_create_a_new_chat_profile">Új csevegési fiók létrehozásához indítsa újra az alkalmazást.</string>
|
||||
<string name="toast_permission_denied">Engedély megtagadva!</string>
|
||||
@@ -1064,7 +1070,7 @@
|
||||
<string name="enter_passphrase_notification_title">Jelmondat szükséges</string>
|
||||
<string name="onboarding_notifications_mode_title">Privát értesítések</string>
|
||||
<string name="you_invited_a_contact">Meghívta egy ismerősét</string>
|
||||
<string name="is_not_verified">%s nincs hitelesítve</string>
|
||||
<string name="is_not_verified">%s nincs ellenőrizve</string>
|
||||
<string name="contact_tap_to_connect">Koppintson a kapcsolódáshoz</string>
|
||||
<string name="this_device_name">Ennek az eszköznek a neve</string>
|
||||
<string name="your_current_profile">Jelenlegi profil</string>
|
||||
@@ -1074,9 +1080,9 @@
|
||||
<string name="ntf_channel_messages">SimpleX Chat üzenetek</string>
|
||||
<string name="restore_database_alert_confirm">Visszaállítás</string>
|
||||
<string name="setup_database_passphrase">Adatbázis-jelmondat beállítása</string>
|
||||
<string name="color_sent_message">Üzenetbuborék színe</string>
|
||||
<string name="color_sent_message">Elküldött üzenet</string>
|
||||
<string name="notifications_mode_periodic">Időszakosan indul</string>
|
||||
<string name="connect_plan_this_is_your_own_simplex_address">Ez az Ön SimpleX-címe!</string>
|
||||
<string name="connect_plan_this_is_your_own_simplex_address">Ez az ön SimpleX-címe!</string>
|
||||
<string name="group_member_status_removed">eltávolítva</string>
|
||||
<string name="share_link">Megosztás</string>
|
||||
<string name="icon_descr_simplex_team">SimpleX csapat</string>
|
||||
@@ -1134,8 +1140,8 @@
|
||||
<string name="waiting_for_image">Várakozás a képre</string>
|
||||
<string name="v4_3_voice_messages">Hangüzenetek</string>
|
||||
<string name="button_remove_member_question">Biztosan eltávolítja?</string>
|
||||
<string name="verify_security_code">Biztonsági kód hitelesítése</string>
|
||||
<string name="rcv_group_event_user_deleted">eltávolította Önt</string>
|
||||
<string name="verify_security_code">Biztonsági kód ellenőrzése</string>
|
||||
<string name="rcv_group_event_user_deleted">eltávolította önt</string>
|
||||
<string name="simplex_address">SimpleX-cím</string>
|
||||
<string name="show_dev_options">Megjelenítés:</string>
|
||||
<string name="callstate_received_answer">válasz fogadása…</string>
|
||||
@@ -1149,7 +1155,7 @@
|
||||
<string name="connect_plan_open_group">Csoport megnyitása</string>
|
||||
<string name="info_row_sent_at">Elküldve ekkor:</string>
|
||||
<string name="prohibit_sending_voice">A hangüzenetek küldése le van tiltva.</string>
|
||||
<string name="privacy_show_last_messages">Szobák utolsó üzeneteinek megjelenítése a listanézetben</string>
|
||||
<string name="privacy_show_last_messages">Utolsó üzenetek megjelenítése</string>
|
||||
<string name="smp_servers_preset_address">Az előre beállított kiszolgáló címe</string>
|
||||
<string name="periodic_notifications_disabled">Rendszeres értesítések letiltva!</string>
|
||||
<string name="passcode_changed">A jelkód megváltozott!</string>
|
||||
@@ -1175,9 +1181,9 @@
|
||||
<string name="alert_title_skipped_messages">Kihagyott üzenetek</string>
|
||||
<string name="prohibit_sending_voice_messages">A hangüzenetek küldése le van tiltva.</string>
|
||||
<string name="set_contact_name">Ismerős nevének beállítása</string>
|
||||
<string name="only_you_can_send_disappearing">Csak Ön tud eltűnő üzeneteket küldeni.</string>
|
||||
<string name="only_you_can_send_disappearing">Csak ön tud eltűnő üzeneteket küldeni.</string>
|
||||
<string name="share_image">Média megosztása…</string>
|
||||
<string name="group_info_member_you">Ön: %1$s</string>
|
||||
<string name="group_info_member_you">ön: %1$s</string>
|
||||
<string name="your_preferences">Beállítások</string>
|
||||
<string name="reset_color">Színek visszaállítása</string>
|
||||
<string name="network_options_save">Mentés</string>
|
||||
@@ -1195,7 +1201,7 @@
|
||||
<string name="protect_app_screen">Alkalmazás képernyőjének védelme</string>
|
||||
<string name="show_QR_code">QR-kód megjelenítése</string>
|
||||
<string name="icon_descr_video_call">videóhívás</string>
|
||||
<string name="unfavorite_chat">Kedvenc megszüntetése</string>
|
||||
<string name="unfavorite_chat">Csillagozás megszüntetése</string>
|
||||
<string name="send_receipts">Kézbesítési jelentések küldése</string>
|
||||
<string name="icon_descr_address">SimpleX-cím</string>
|
||||
<string name="chat_help_tap_button">Koppintson a</string>
|
||||
@@ -1215,7 +1221,7 @@
|
||||
<string name="save_verb">Mentés</string>
|
||||
<string name="call_connection_via_relay">közvetítő-kiszolgálón keresztül</string>
|
||||
<string name="stop_sharing">Megosztás megállítása</string>
|
||||
<string name="snd_group_event_member_deleted">Ön eltávolította őt: %1$s</string>
|
||||
<string name="snd_group_event_member_deleted">eltávolította őt: %1$s</string>
|
||||
<string name="save_passphrase_and_open_chat">Jelmondat mentése és a csevegés megnyitása</string>
|
||||
<string name="save_preferences_question">Beállítások mentése?</string>
|
||||
<string name="first_platform_without_user_ids">Nincsenek felhasználói azonosítók.</string>
|
||||
@@ -1251,12 +1257,12 @@
|
||||
<string name="reset_verb">Visszaállítás</string>
|
||||
<string name="only_your_contact_can_add_message_reactions">Csak az ismerőse tud üzenetreakciókat küldeni.</string>
|
||||
<string name="voice_messages">Hangüzenetek</string>
|
||||
<string name="snd_group_event_user_left">Ön elhagyta a csoportot</string>
|
||||
<string name="snd_group_event_user_left">elhagyta a csoportot</string>
|
||||
<string name="icon_descr_record_voice_message">Hangüzenet rögzítése</string>
|
||||
<string name="auth_simplex_lock_turned_on">SimpleX-zár bekapcsolva</string>
|
||||
<string name="member_contact_send_direct_message">közvetlen üzenet küldése</string>
|
||||
<string name="scan_from_mobile">Beolvasás hordozható eszközről</string>
|
||||
<string name="verify_connections">Kapcsolatok hitelesítése</string>
|
||||
<string name="verify_connections">Kapcsolatok ellenőrzése</string>
|
||||
<string name="share_message">Üzenet megosztása…</string>
|
||||
<string name="custom_time_unit_seconds">másodperc</string>
|
||||
<string name="lock_not_enabled">A SimpleX-zár nincs bekapcsolva!</string>
|
||||
@@ -1265,15 +1271,15 @@
|
||||
<string name="your_chat_database">Csevegési adatbázis</string>
|
||||
<string name="rcv_group_event_member_deleted">eltávolította őt: %1$s</string>
|
||||
<string name="smp_servers_test_failed">Sikertelen kiszolgáló teszt!</string>
|
||||
<string name="verify_connection">Kapcsolat hitelesítése</string>
|
||||
<string name="verify_connection">Kapcsolat ellenőrzése</string>
|
||||
<string name="whats_new_read_more">Tudjon meg többet</string>
|
||||
<string name="sender_cancelled_file_transfer">A fájl küldője visszavonta az átvitelt.</string>
|
||||
<string name="stop_chat_question">Csevegési szolgáltatás megállítása?</string>
|
||||
<string name="info_row_received_at">Fogadva ekkor:</string>
|
||||
<string name="accept_feature_set_1_day">Beállítva 1 nap</string>
|
||||
<string name="user_unhide">Felfedés</string>
|
||||
<string name="color_received_message">Fogadott üzenetbuborék színe</string>
|
||||
<string name="only_your_contact_can_delete">Csak az ismerőse tudja az üzeneteket véglegesen törölni (Ön csak törlésre jelölheti meg azokat). (24 óra)</string>
|
||||
<string name="color_received_message">Fogadott üzenet</string>
|
||||
<string name="only_your_contact_can_delete">Csak az ismerőse tudja az üzeneteket véglegesen törölni (ön csak törlésre jelölheti meg azokat). (24 óra)</string>
|
||||
<string name="self_destruct_passcode_changed">Az önmegsemmisítési jelkód megváltozott!</string>
|
||||
<string name="using_simplex_chat_servers">SimpleX Chat-kiszolgálók használatban.</string>
|
||||
<string name="use_simplex_chat_servers__question">SimpleX Chat-kiszolgálók használata?</string>
|
||||
@@ -1292,7 +1298,7 @@
|
||||
\nkövetkező generációja</string>
|
||||
<string name="update_network_settings_question">Hálózati beállítások megváltoztatása?</string>
|
||||
<string name="waiting_for_mobile_to_connect">Várakozás a hordozható eszköz társítására:</string>
|
||||
<string name="v4_4_verify_connection_security">Biztonságos kapcsolat hitelesítése</string>
|
||||
<string name="v4_4_verify_connection_security">Kapcsolat biztonságának ellenőrzése</string>
|
||||
<string name="sending_files_not_yet_supported">fájlok küldése egyelőre még nem támogatott</string>
|
||||
<string name="snd_conn_event_switch_queue_phase_completed_for_member">cím megváltoztatva nála: %s</string>
|
||||
<string name="receiving_files_not_yet_supported">fájlok fogadása egyelőre még nem támogatott</string>
|
||||
@@ -1314,7 +1320,7 @@
|
||||
<string name="database_initialization_error_desc">Az adatbázis nem működik megfelelően. Koppintson további információért</string>
|
||||
<string name="stop_snd_file__message">A fájl küldése leállt.</string>
|
||||
<string name="trying_to_connect_to_server_to_receive_messages">Kapcsolódási kísérlet ahhoz a kiszolgálóhoz, amely az adott ismerősétől érkező üzenetek fogadására szolgál.</string>
|
||||
<string name="la_could_not_be_verified">Nem sikerült hitelesíteni; próbálja meg újra.</string>
|
||||
<string name="la_could_not_be_verified">Nem sikerült ellenőrizni; próbálja meg újra.</string>
|
||||
<string name="moderate_message_will_be_marked_warning">Az üzenet minden tag számára moderáltként lesz megjelölve.</string>
|
||||
<string name="enter_passphrase_notification_desc">Értesítések fogadásához adja meg az adatbázis jelmondatát</string>
|
||||
<string name="error_smp_test_failed_at_step">A teszt a(z) %s lépésnél sikertelen volt.</string>
|
||||
@@ -1345,13 +1351,13 @@
|
||||
<string name="video_will_be_received_when_contact_completes_uploading">A videó akkor érkezik meg, amikor a küldője befejezte annak feltöltését.</string>
|
||||
<string name="description_you_shared_one_time_link_incognito">egyszer használható hivatkozást osztott meg inkognitóban</string>
|
||||
<string name="connected_to_server_to_receive_messages_from_contact">Már kapcsolódott ahhoz a kiszolgálóhoz, amely az adott ismerősétől érkező üzenetek fogadására szolgál.</string>
|
||||
<string name="you_can_enable_delivery_receipts_later">Később engedélyezheti a „Beállításokban”</string>
|
||||
<string name="you_can_enable_delivery_receipts_later">Később engedélyezheti a Beállításokban</string>
|
||||
<string name="you_will_be_connected_when_group_host_device_is_online">Akkor lesz kapcsolódva a csoporthoz, amikor a csoport tulajdonosának eszköze online lesz, várjon, vagy ellenőrizze később!</string>
|
||||
<string name="mtr_error_different">különböző átköltöztetés az alkalmazásban/adatbázisban: %s / %s</string>
|
||||
<string name="connect_plan_you_are_already_connecting_to_vName"><![CDATA[A kapcsolódás már folyamatban van ehhez: <b>%1$s</b>.]]></string>
|
||||
<string name="unhide_profile">Profil felfedése</string>
|
||||
<string name="this_link_is_not_a_valid_connection_link">Ez nem egy érvényes kapcsolattartási hivatkozás!</string>
|
||||
<string name="to_verify_compare">A végpontok közötti titkosítás hitelesítéséhez hasonlítsa össze (vagy olvassa be a QR-kódot) az ismerőse eszközén lévő kóddal.</string>
|
||||
<string name="to_verify_compare">A végpontok közötti titkosítás ellenőrzéséhez hasonlítsa össze (vagy olvassa be a QR-kódot) az ismerőse eszközén lévő kóddal.</string>
|
||||
<string name="you_must_use_the_most_recent_version_of_database">A csevegési adatbázis legfrissebb verzióját CSAK egy eszközön kell használnia, ellenkező esetben előfordulhat, hogy az üzeneteket nem fogja megkapni valamennyi ismerősétől.</string>
|
||||
<string name="messages_section_description">Ez a beállítás a jelenlegi csevegési profilban lévő üzenetekre érvényes</string>
|
||||
<string name="you_are_invited_to_group_join_to_connect_with_group_members">Meghívást kapott a csoportba. Csatlakozzon, hogy kapcsolatba léphessen a csoport tagjaival.</string>
|
||||
@@ -1367,7 +1373,7 @@
|
||||
<string name="invite_prohibited_description">Egy olyan ismerősét próbálja meghívni, akivel inkognitó-profilt osztott meg abban a csoportban, amelyben a saját fő profilja van használatban</string>
|
||||
<string name="connect_plan_you_are_already_joining_the_group_vName"><![CDATA[A csatlakozás már folyamatban van a(z) <b>%1$s</b> nevű csoporthoz.]]></string>
|
||||
<string name="onboarding_notifications_mode_off">Amikor az alkalmazás fut</string>
|
||||
<string name="alert_title_cant_invite_contacts_descr">Inkognitóprofilt használ ehhez a csoporthoz - fő profilja megosztásának elkerülése érdekében a meghívók küldése le van tiltva</string>
|
||||
<string name="alert_title_cant_invite_contacts_descr">Inkognító profilt használ ehhez a csoporthoz - fő profilja megosztásának elkerülése érdekében a meghívók küldése le van tiltva</string>
|
||||
<string name="v4_5_transport_isolation">Kapcsolat izolációs mód</string>
|
||||
<string name="you_will_be_connected_when_your_connection_request_is_accepted">Akkor lesz kapcsolódva, ha a kapcsolatkérése elfogadásra kerül, várjon, vagy ellenőrizze később!</string>
|
||||
<string name="voice_messages_are_prohibited">A hangüzenetek küldése le van tiltva ebben a csoportban.</string>
|
||||
@@ -1381,10 +1387,10 @@
|
||||
<string name="you_will_be_connected_when_your_contacts_device_is_online">Akkor lesz kapcsolódva, amikor az ismerősének eszköze online lesz, várjon, vagy ellenőrizze később!</string>
|
||||
<string name="v5_4_block_group_members_descr">Kéretlen üzenetek elrejtése.</string>
|
||||
<string name="disable_onion_hosts_when_not_supported"><![CDATA[Állítsa az <i>Onion kiszolgálók használata</i> opciót „Nemre”, ha a SOCKS proxy nem támogatja őket.]]></string>
|
||||
<string name="you_can_share_your_address">Megoszthatja a címét egy hivatkozásként vagy egy QR-kódként – így bárki kapcsolódhat Önhöz.</string>
|
||||
<string name="you_can_share_your_address">Megoszthatja a címét egy hivatkozásként vagy egy QR-kódként – így bárki kapcsolódhat önhöz.</string>
|
||||
<string name="you_can_create_it_later">Létrehozás később</string>
|
||||
<string name="your_profile_is_stored_on_device_and_shared_only_with_contacts_simplex_cannot_see_it">A profilja az eszközén van tárolva és csak az ismerőseivel kerül megosztásra. A SimpleX-kiszolgálók nem láthatják a profilját.</string>
|
||||
<string name="snd_group_event_changed_member_role">Ön megváltoztatta %s szerepkörét erre: %s</string>
|
||||
<string name="snd_group_event_changed_member_role">%s szerepkörét megváltoztatta erre: %s</string>
|
||||
<string name="you_rejected_group_invitation">Csoportmeghívó elutasítva</string>
|
||||
<string name="to_protect_privacy_simplex_has_ids_for_queues">Az adatvédelem érdekében, a más csevegési platformokon megszokott felhasználói azonosítók helyett, a SimpleX csak az üzenetek sorbaállításához használ azonosítókat, minden egyes ismerőshöz egy-egy különbözőt.</string>
|
||||
<string name="to_share_with_your_contact">(a megosztáshoz az ismerősével)</string>
|
||||
@@ -1413,28 +1419,28 @@
|
||||
<string name="connect_plan_you_are_already_connecting_via_this_one_time_link">A kapcsolódás már folyamatban van ezen az egyszer használható hivatkozáson keresztül!</string>
|
||||
<string name="you_wont_lose_your_contacts_if_delete_address">Nem veszíti el az ismerőseit, ha később törli a címét.</string>
|
||||
<string name="updating_settings_will_reconnect_client_to_all_servers">A beállítások frissítése a kiszolgálókhoz való újra kapcsolódással jár.</string>
|
||||
<string name="contact_wants_to_connect_with_you">kapcsolatba akar lépni Önnel!</string>
|
||||
<string name="snd_group_event_changed_role_for_yourself">saját szerepköre megváltozott erre: %s</string>
|
||||
<string name="contact_wants_to_connect_with_you">kapcsolatba akar lépni önnel!</string>
|
||||
<string name="snd_group_event_changed_role_for_yourself">saját szerepköre erre változott: %s</string>
|
||||
<string name="you_can_start_chat_via_setting_or_by_restarting_the_app">A csevegési szolgáltatás elindítható a „Beállítások / Adatbázis” menüben vagy az alkalmazás újraindításával.</string>
|
||||
<string name="verify_code_on_mobile">Kód hitelesítése a hordozható eszközön</string>
|
||||
<string name="verify_code_on_mobile">Kód ellenőrzése a hordozható eszközön</string>
|
||||
<string name="youve_accepted_group_invitation_connecting_to_inviting_group_member">Csatlakozott ehhez a csoporthoz. Kapcsolódás a meghívó csoporttaghoz.</string>
|
||||
<string name="you_can_connect_to_simplex_chat_founder"><![CDATA[Kapcsolatba léphet <font color="#0088ff">a SimpleX Chat fejlesztőivel, ahol bármiről kérdezhet és értesülhet az újdonságokról</font>.]]></string>
|
||||
<string name="v4_2_auto_accept_contact_requests_desc">Nem kötelező üdvözlőüzenettel.</string>
|
||||
<string name="unknown_database_error_with_info">Ismeretlen adatbázishiba: %s</string>
|
||||
<string name="you_can_hide_or_mute_user_profile">Elrejtheti vagy lenémíthatja a felhasználó profiljait - koppintson (vagy számítógép-alkalmazásban kattintson) hosszan a profilra a felugró menühöz.</string>
|
||||
<string name="v5_3_simpler_incognito_mode_descr">Inkognitómód használata kapcsolódáskor.</string>
|
||||
<string name="v5_3_simpler_incognito_mode_descr">Inkognító mód kapcsolódáskor.</string>
|
||||
<string name="you_can_share_group_link_anybody_will_be_able_to_connect">Megoszthat egy hivatkozást vagy QR-kódot - így bárki csatlakozhat a csoporthoz. Ha a csoport később törlésre kerül, akkor nem fogja elveszíteni annak tagjait.</string>
|
||||
<string name="you_joined_this_group">Csatlakozott ehhez a csoporthoz</string>
|
||||
<string name="connect_plan_this_is_your_link_for_group_vName"><![CDATA[Ez az Ön hivatkozása a(z) <b>%1$s</b> csoporthoz!]]></string>
|
||||
<string name="connect_plan_this_is_your_link_for_group_vName"><![CDATA[Ez az ön hivatkozása a(z) <b>%1$s</b> csoporthoz!]]></string>
|
||||
<string name="voice_prohibited_in_this_chat">A hangüzenetek küldése le van tiltva ebben a csevegésben.</string>
|
||||
<string name="you_control_your_chat">Ön irányítja csevegését!</string>
|
||||
<string name="verify_code_with_desktop">Kód hitelesítése a számítógépen</string>
|
||||
<string name="verify_code_with_desktop">Kód ellenőrzése a számítógépen</string>
|
||||
<string name="v4_5_private_filenames_descr">Az időzóna védelme érdekében a kép-/hangfájlok UTC-t használnak.</string>
|
||||
<string name="connect_via_member_address_alert_desc">A kapcsolatkérés elküldésre kerül ezen csoporttag számára.</string>
|
||||
<string name="incognito_info_share">Inkognitó-profil megosztása esetén a rendszer azt a profilt fogja használni azokhoz a csoportokhoz, amelyekbe meghívást kapott.</string>
|
||||
<string name="connect_plan_you_have_already_requested_connection_via_this_address">Már küldött egy kapcsolatkérést ezen a címen keresztül!</string>
|
||||
<string name="you_can_share_this_address_with_your_contacts">Megoszthatja ezt a SimpleX-címet az ismerőseivel, hogy kapcsolatba léphessenek vele: %s.</string>
|
||||
<string name="you_can_accept_or_reject_connection">Amikor az emberek kapcsolatot kérnek, Ön elfogadhatja vagy elutasíthatja azokat.</string>
|
||||
<string name="you_can_accept_or_reject_connection">Amikor az emberek kapcsolatot kérnek, ön elfogadhatja vagy elutasíthatja azokat.</string>
|
||||
<string name="v4_6_group_welcome_message_descr">Megjelenítendő üzenet beállítása az új tagok számára!</string>
|
||||
<string name="whats_new_thanks_to_users_contribute_weblate">Köszönet a felhasználóknak - hozzájárulás a Weblate-en!</string>
|
||||
<string name="sending_delivery_receipts_will_be_enabled">A kézbesítési jelentés küldése minden ismerőse számára engedélyezésre kerül.</string>
|
||||
@@ -1484,7 +1490,7 @@
|
||||
<string name="session_code">Munkamenet kód</string>
|
||||
<string name="v4_4_french_interface_descr">Köszönet a felhasználóknak - hozzájárulás a Weblate-en!</string>
|
||||
<string name="receipts_section_groups">Kis csoportok (max. 20 tag)</string>
|
||||
<string name="connection_you_accepted_will_be_cancelled">Az Ön által elfogadott kérelem vissza lesz vonva!</string>
|
||||
<string name="connection_you_accepted_will_be_cancelled">Az ön által elfogadott kérelem vissza lesz vonva!</string>
|
||||
<string name="send_live_message_desc">Élő üzenet küldése - a címzett(ek) számára frissül, ahogy beírja</string>
|
||||
<string name="settings_section_title_delivery_receipts">A KÉZBESÍTÉSI JELENTÉSEKET A KÖVETKEZŐ CÍMRE KELL KÜLDENI</string>
|
||||
<string name="alert_text_msg_bad_id">A következő üzenet azonosítója hibás (kisebb vagy egyenlő az előzővel).
|
||||
@@ -1520,7 +1526,7 @@
|
||||
<string name="la_app_passcode">Alkalmazás jelkód</string>
|
||||
<string name="add_contact_tab">Ismerős hozzáadása</string>
|
||||
<string name="tap_to_scan">Koppintson a beolvasáshoz</string>
|
||||
<string name="tap_to_paste_link">Koppintson ide a hivatkozás beillesztéséhez</string>
|
||||
<string name="tap_to_paste_link">Koppintson a hivatkozás beillesztéséhez</string>
|
||||
<string name="add_contact_button_to_create_link_or_connect_via_link"><![CDATA[<b>Ismerős hozzáadása</b>: új meghívó-hivatkozás létrehozásához, vagy egy kapott hivatkozáson keresztül történő kapcsolódáshoz.]]></string>
|
||||
<string name="create_group_button_to_create_new_group"><![CDATA[<b>Csoport létrehozása</b>: új csoport létrehozásához.]]></string>
|
||||
<string name="chat_is_stopped_you_should_transfer_database">A csevegés leállt. Ha már használta ezt az adatbázist egy másik eszközön, úgy visszaállítás szükséges a csevegés megkezdése előtt.</string>
|
||||
@@ -1575,7 +1581,7 @@
|
||||
<string name="developer_options_section">Fejlesztői beállítások</string>
|
||||
<string name="possible_slow_function_desc">A funkció végrehajtása túl sokáig tart: %1$d másodperc: %2$s</string>
|
||||
<string name="remote_host_error_busy"><![CDATA[A(z) <b>%s</b> hordozható eszköz elfoglalt]]></string>
|
||||
<string name="past_member_vName">Már nem tag %1$s</string>
|
||||
<string name="past_member_vName">%1$s (már nem tag)</string>
|
||||
<string name="group_member_status_unknown">ismeretlen állapot</string>
|
||||
<string name="profile_update_event_member_name_changed">%1$s megváltoztatta a nevét erre: %2$s</string>
|
||||
<string name="profile_update_event_removed_address">eltávolította a kapcsolattartási címet</string>
|
||||
@@ -1602,7 +1608,7 @@
|
||||
<string name="v5_5_new_interface_languages">Magyar és török felhasználói felület</string>
|
||||
<string name="v5_5_join_group_conversation_descr">A közelmúlt eseményei és továbbfejlesztett könyvtárbot.</string>
|
||||
<string name="rcv_group_event_member_unblocked">feloldotta %s letiltását</string>
|
||||
<string name="snd_group_event_member_unblocked">Ön feloldotta %s letiltását</string>
|
||||
<string name="snd_group_event_member_unblocked">ön feloldotta %s letiltását</string>
|
||||
<string name="member_info_member_blocked">letiltva</string>
|
||||
<string name="blocked_by_admin_item_description">letiltva az admin által</string>
|
||||
<string name="member_blocked_by_admin">Letiltva az admin által</string>
|
||||
@@ -1612,7 +1618,7 @@
|
||||
<string name="blocked_by_admin_items_description">%d üzenetet letiltott az admin</string>
|
||||
<string name="unblock_for_all">Letiltás feloldása mindenki számára</string>
|
||||
<string name="unblock_for_all_question">Mindenki számára feloldja a tag letiltását?</string>
|
||||
<string name="snd_group_event_member_blocked">Ön letiltotta őt: %s</string>
|
||||
<string name="snd_group_event_member_blocked">ön letiltotta őt: %s</string>
|
||||
<string name="error_blocking_member_for_all">Hiba a tag mindenki számára való letiltásakor</string>
|
||||
<string name="message_too_large">Az üzenet túl nagy</string>
|
||||
<string name="welcome_message_is_too_long">Az üdvözlőüzenet túl hosszú</string>
|
||||
@@ -1646,14 +1652,14 @@
|
||||
<string name="migrate_from_device_error_saving_settings">Hiba a beállítások mentésekor</string>
|
||||
<string name="migrate_to_device_error_downloading_archive">Hiba az archívum letöltésekor</string>
|
||||
<string name="migrate_from_device_error_uploading_archive">Hiba az archívum feltöltésekor</string>
|
||||
<string name="migrate_from_device_error_verifying_passphrase">Hiba a jelmondat hitelesítésekor:</string>
|
||||
<string name="migrate_from_device_error_verifying_passphrase">Hiba a jelmondat ellenőrzésekor:</string>
|
||||
<string name="migrate_from_device_exported_file_doesnt_exist">Az exportált fájl nem létezik</string>
|
||||
<string name="migrate_to_device_file_delete_or_link_invalid">A fájl törlésre került, vagy érvénytelen hivatkozás</string>
|
||||
<string name="migrate_to_device_bytes_downloaded">%s letöltve</string>
|
||||
<string name="migrate_to_device_importing_archive">Archívum importálása</string>
|
||||
<string name="migrate_from_device_database_init">Feltöltés előkészítése</string>
|
||||
<string name="migrate_from_device_verify_database_passphrase">Az adatbázis jelmondatának hitelesítése</string>
|
||||
<string name="migrate_from_device_verify_passphrase">Jelmondat hitelesítése</string>
|
||||
<string name="migrate_from_device_verify_database_passphrase">Az adatbázis jelmondatának ellenőrzése</string>
|
||||
<string name="migrate_from_device_verify_passphrase">Jelmondat ellenőrzése</string>
|
||||
<string name="set_passphrase">Jelmondat beállítása</string>
|
||||
<string name="v5_6_picture_in_picture_calls">Kép a képben hívások</string>
|
||||
<string name="v5_6_safer_groups">Biztonságosabb csoportok</string>
|
||||
@@ -1753,7 +1759,7 @@
|
||||
<string name="settings_section_title_profile_images">Profilképek</string>
|
||||
<string name="v5_7_shape_profile_images">Profilkép alakzat</string>
|
||||
<string name="v5_7_shape_profile_images_descr">Négyzet, kör vagy bármi a kettő között.</string>
|
||||
<string name="snd_error_relay">Célkiszolgáló-hiba: %1$s</string>
|
||||
<string name="snd_error_relay">Célkiszolgáló hiba: %1$s</string>
|
||||
<string name="snd_error_proxy">Továbbító kiszolgáló: %1$s
|
||||
\nHiba: %2$s</string>
|
||||
<string name="snd_error_expired">Hálózati problémák - az üzenet többszöri elküldési kísérlet után lejárt.</string>
|
||||
@@ -1778,14 +1784,14 @@
|
||||
<string name="network_smp_proxy_mode_private_routing">Privát útválasztás</string>
|
||||
<string name="network_smp_proxy_mode_unknown_description">Használjon privát útválasztást ismeretlen kiszolgálókkal.</string>
|
||||
<string name="network_smp_proxy_mode_always_description">Mindig használjon privát útválasztást.</string>
|
||||
<string name="update_network_smp_proxy_mode_question">Üzenet-útválasztási mód</string>
|
||||
<string name="network_smp_proxy_fallback_allow_protected_description">Közvetlen üzenetküldés, ha az IP-cím védett és az Ön kiszolgálója vagy a célkiszolgáló nem támogatja a privát útválasztást.</string>
|
||||
<string name="network_smp_proxy_fallback_allow_description">Közvetlen üzenetküldés, ha az Ön kiszolgálója vagy a célkiszolgáló nem támogatja a privát útválasztást.</string>
|
||||
<string name="update_network_smp_proxy_mode_question">Üzenet útválasztási mód</string>
|
||||
<string name="network_smp_proxy_fallback_allow_protected_description">Közvetlen üzenetküldés, ha az IP-cím védett és az ön kiszolgálója vagy a célkiszolgáló nem támogatja a privát útválasztást.</string>
|
||||
<string name="network_smp_proxy_fallback_allow_description">Közvetlen üzenetküldés, ha az ön kiszolgálója vagy a célkiszolgáló nem támogatja a privát útválasztást.</string>
|
||||
<string name="private_routing_explanation">Az IP-cím védelmének érdekében a privát útválasztás az SMP-kiszolgálókat használja az üzenetek kézbesítéséhez.</string>
|
||||
<string name="update_network_smp_proxy_fallback_question">Üzenet-útválasztási tartalék</string>
|
||||
<string name="settings_section_title_private_message_routing">PRIVÁT ÜZENET-ÚTVÁLASZTÁS</string>
|
||||
<string name="network_smp_proxy_mode_unprotected_description">Használjon privát útválasztást ismeretlen kiszolgálókkal, ha az IP-cím nem védett.</string>
|
||||
<string name="network_smp_proxy_fallback_prohibit_description">Ne küldjön üzeneteket közvetlenül, még akkor sem, ha az Ön kiszolgálója vagy a célkiszolgáló nem támogatja a privát útválasztást.</string>
|
||||
<string name="update_network_smp_proxy_fallback_question">Üzenet útválasztási tartalék</string>
|
||||
<string name="settings_section_title_private_message_routing">PRIVÁT ÜZENET ÚTVÁLASZTÁS</string>
|
||||
<string name="network_smp_proxy_mode_unprotected_description">Privát útválasztás használata ismeretlen kiszolgálókkal, ha az IP-cím nem védett.</string>
|
||||
<string name="network_smp_proxy_fallback_prohibit_description">Ne küldjön üzeneteket közvetlenül, még akkor sem, ha az ön kiszolgálója vagy a célkiszolgáló nem támogatja a privát útválasztást.</string>
|
||||
<string name="without_tor_or_vpn_ip_address_will_be_visible_to_file_servers">Tor vagy VPN nélkül az IP-címe látható lesz a fájlkiszolgálók számára.</string>
|
||||
<string name="settings_section_title_files">FÁJLOK</string>
|
||||
<string name="protect_ip_address">IP-cím védelem</string>
|
||||
@@ -1811,12 +1817,12 @@
|
||||
<string name="chat_list_always_visible">Csevegőlista megjelenítése új ablakban</string>
|
||||
<string name="color_mode_light">Világos</string>
|
||||
<string name="chat_theme_apply_to_light_mode">Világos mód</string>
|
||||
<string name="color_received_quote">Fogadott válaszüzenet-buborék színe</string>
|
||||
<string name="color_received_quote">Fogadott válasz</string>
|
||||
<string name="theme_remove_image">Kép eltávolítása</string>
|
||||
<string name="wallpaper_scale_repeat">Mozaik</string>
|
||||
<string name="reset_single_color">Szín visszaállítása</string>
|
||||
<string name="wallpaper_scale">Méretezés</string>
|
||||
<string name="color_sent_quote">Válaszüzenet-buborék színe</string>
|
||||
<string name="color_sent_quote">Elküldött válasz</string>
|
||||
<string name="chat_theme_set_default_theme">Alapértelmezett téma beállítása</string>
|
||||
<string name="color_mode_system">Rendszer</string>
|
||||
<string name="color_wallpaper_tint">Háttérkép kiemelés</string>
|
||||
@@ -1831,7 +1837,7 @@
|
||||
<string name="chat_theme_reset_to_app_theme">Alkalmazás témájának visszaállítása</string>
|
||||
<string name="v5_8_chat_themes_descr">Tegye egyedivé a csevegéseit!</string>
|
||||
<string name="v5_8_chat_themes">Új csevegési témák</string>
|
||||
<string name="v5_8_private_routing">Privát üzenet-útválasztás 🚀</string>
|
||||
<string name="v5_8_private_routing">Privát üzenet útválasztás 🚀</string>
|
||||
<string name="v5_8_safe_files">Fájlok biztonságos fogadása</string>
|
||||
<string name="v5_8_message_delivery_descr">Csökkentett akkumulátor-használattal.</string>
|
||||
<string name="error_initializing_web_view">Hiba a WebView előkészítésekor. Frissítse rendszerét az új verzióra. Lépjen kapcsolatba a fejlesztőkkel.
|
||||
@@ -2030,7 +2036,7 @@
|
||||
<string name="chat_database_exported_continue">Folytatás</string>
|
||||
<string name="v6_0_connection_servers_status">Ellenőrízze a hálózatát</string>
|
||||
<string name="media_and_file_servers">Média- és fájlkiszolgálók</string>
|
||||
<string name="v6_0_delete_many_messages_descr">Legfeljebb 20 üzenet egyszerre való törlése.</string>
|
||||
<string name="v6_0_delete_many_messages_descr">Legfeljebb 20 üzenet törlése egyszerre.</string>
|
||||
<string name="v6_0_private_routing_descr">Védi az IP-címét és a kapcsolatait.</string>
|
||||
<string name="v6_0_reachable_chat_toolbar">Könnyen elérhető eszköztár</string>
|
||||
<string name="message_servers">Üzenetkiszolgálók</string>
|
||||
@@ -2096,24 +2102,4 @@
|
||||
<string name="icon_descr_sound_muted">Hang elnémítva</string>
|
||||
<string name="error_initializing_web_view_wrong_arch">Hiba a WebView előkészítésekor. Győződjön meg arról, hogy a WebView telepítve van-e, és támogatja-e az arm64 architektúrát.
|
||||
\nHiba: %s</string>
|
||||
<string name="settings_message_shape_corner">Sarok</string>
|
||||
<string name="settings_section_title_message_shape">Üzenetbuborék alakja</string>
|
||||
<string name="settings_message_shape_tail">Farok</string>
|
||||
<string name="network_session_mode_server">Kiszolgáló</string>
|
||||
<string name="network_session_mode_session_description">Minden alkalommal, amikor elindítja az alkalmazást, új SOCKS-hitelesítő-adatokat fog használni.</string>
|
||||
<string name="network_session_mode_session">Alkalmazás munkamenete</string>
|
||||
<string name="network_session_mode_server_description">Minden egyes kiszolgálóhoz új SOCKS-hitelesítő-adatok legyenek használva.</string>
|
||||
<string name="call_desktop_permission_denied_chrome">Kattintson a címmező melletti info gombra a mikrofon használatának engedélyezéséhez.</string>
|
||||
<string name="call_desktop_permission_denied_safari">Nyissa meg a Safari Beállítások / Weboldalak / Mikrofon menüt, majd válassza a helyi kiszolgálók engedélyezése lehetőséget.</string>
|
||||
<string name="call_desktop_permission_denied_title">Hívások kezdeményezéséhez engedélyezze a mikrofon használatát. Fejezze be a hívást, és próbálja meg a hívást újra.</string>
|
||||
<string name="v6_1_better_calls">Továbbfejlesztett hívásélmény</string>
|
||||
<string name="v6_1_message_dates_descr">Továbbfejlesztett üzenetdátumok.</string>
|
||||
<string name="v6_1_better_user_experience">Továbbfejlesztett felhasználói élmény</string>
|
||||
<string name="v6_1_customizable_message_descr">Testreszabható üzenetbuborékok.</string>
|
||||
<string name="v6_1_delete_many_messages_descr">Legfeljebb 200 üzenet egyszerre való törlése, vagy moderálása.</string>
|
||||
<string name="v6_1_forward_many_messages_descr">Legfeljebb 20 üzenet egyszerre való továbbítása.</string>
|
||||
<string name="v6_1_better_calls_descr">Hang/Videó váltása hívás közben.</string>
|
||||
<string name="v6_1_switch_chat_profile_descr">Csevegési profilváltás az egyszer használható meghívókhoz.</string>
|
||||
<string name="v6_1_better_security">Továbbfejlesztett biztonság ✅</string>
|
||||
<string name="v6_1_better_security_descr">A SimpleX Chat biztonsága a Trail of Bits által lett újraauditálva.</string>
|
||||
</resources>
|
||||
@@ -1 +0,0 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" height="24px" viewBox="0 -960 960 960" width="24px" fill="#000000"><path d="M182-85q-22.97 0-40.23-17.27-17.27-17.26-17.27-40.23v-616q0-22.97 17.27-40.23Q159.03-816 182-816h67.5v-60H312v60h336v-60h62.5v60H778q22.97 0 40.23 17.27 17.27 17.26 17.27 40.23v616q0 22.97-17.27 40.23Q800.97-85 778-85H182Zm0-57.5h596V-569H182v426.5Zm0-484h596v-132H182v132Zm0 0v-132 132Zm298.05 226q-16.76 0-28.16-11.34-11.39-11.34-11.39-28.11 0-16.76 11.34-28.16 11.34-11.39 28.11-11.39 16.76 0 28.16 11.34 11.39 11.34 11.39 28.11 0 16.76-11.34 28.16-11.34 11.39-28.11 11.39Zm-160 0q-16.76 0-28.16-11.34-11.39-11.34-11.39-28.11 0-16.76 11.34-28.16 11.34-11.39 28.11-11.39 16.76 0 28.16 11.34 11.39 11.34 11.39 28.11 0 16.76-11.34 28.16-11.34 11.39-28.11 11.39Zm320 0q-16.76 0-28.16-11.34-11.39-11.34-11.39-28.11 0-16.76 11.34-28.16 11.34-11.39 28.11-11.39 16.76 0 28.16 11.34 11.39 11.34 11.39 28.11 0 16.76-11.34 28.16-11.34 11.39-28.11 11.39Zm-160 160q-16.76 0-28.16-11.34-11.39-11.34-11.39-28.11 0-16.76 11.34-28.16 11.34-11.39 28.11-11.39 16.76 0 28.16 11.34 11.39 11.34 11.39 28.11 0 16.76-11.34 28.16-11.34 11.39-28.11 11.39Zm-160 0q-16.76 0-28.16-11.34-11.39-11.34-11.39-28.11 0-16.76 11.34-28.16 11.34-11.39 28.11-11.39 16.76 0 28.16 11.34 11.39 11.34 11.39 28.11 0 16.76-11.34 28.16-11.34 11.39-28.11 11.39Zm320 0q-16.76 0-28.16-11.34-11.39-11.34-11.39-28.11 0-16.76 11.34-28.16 11.34-11.39 28.11-11.39 16.76 0 28.16 11.34 11.39 11.34 11.39 28.11 0 16.76-11.34 28.16-11.34 11.39-28.11 11.39Z"/></svg>
|
||||
|
Before Width: | Height: | Size: 1.5 KiB |
@@ -262,5 +262,4 @@
|
||||
<string name="only_your_contact_can_make_calls">Hanya kontak kamu yang dapat melakukan panggilan.</string>
|
||||
<string name="allow_to_send_files">Izinkan untuk mengirim file dan media.</string>
|
||||
<string name="all_your_contacts_will_remain_connected">Semua kontak kamu akan tetap terhubung.</string>
|
||||
<string name="forward_files_missing_desc">%1$d berkas telah dihapus.</string>
|
||||
</resources>
|
||||
@@ -2108,24 +2108,4 @@
|
||||
<string name="icon_descr_sound_muted">Audio silenziato</string>
|
||||
<string name="error_initializing_web_view_wrong_arch">Errore di inizializzazione di WebView. Assicurati di avere WebView installato e che la sua architettura supportata sia arm64.
|
||||
\nErrore: %s</string>
|
||||
<string name="settings_message_shape_corner">Angolo</string>
|
||||
<string name="settings_section_title_message_shape">Forma del messaggio</string>
|
||||
<string name="settings_message_shape_tail">Coda</string>
|
||||
<string name="network_session_mode_session">Sessione dell\'app</string>
|
||||
<string name="network_session_mode_session_description">Le nuove credenziali SOCKS verranno usate ogni volta che avvii l\'app.</string>
|
||||
<string name="network_session_mode_server_description">Le nuove credenziali SOCKS verranno usate per ogni server.</string>
|
||||
<string name="network_session_mode_server">Server</string>
|
||||
<string name="call_desktop_permission_denied_safari">Apri le impostazioni di Safari / Siti web / Microfono, quindi scegli Consenti per localhost.</string>
|
||||
<string name="call_desktop_permission_denied_chrome">Clicca il pulsante info vicino al campo indirizzo per consentire l\'uso del microfono.</string>
|
||||
<string name="call_desktop_permission_denied_title">Per effettuare chiamate, consenti di usare il microfono. Termina la chiamata e cerca di richiamare.</string>
|
||||
<string name="v6_1_better_calls">Chiamate migliorate</string>
|
||||
<string name="v6_1_message_dates_descr">Date dei messaggi migliorate.</string>
|
||||
<string name="v6_1_better_security">Sicurezza migliorata ✅</string>
|
||||
<string name="v6_1_better_user_experience">Esperienza utente migliorata</string>
|
||||
<string name="v6_1_customizable_message_descr">Forma dei messaggi personalizzabile.</string>
|
||||
<string name="v6_1_better_security_descr">Protocolli di SimpleX esaminati da Trail of Bits.</string>
|
||||
<string name="v6_1_better_calls_descr">Cambia tra audio e video durante la chiamata.</string>
|
||||
<string name="v6_1_switch_chat_profile_descr">Cambia profilo di chat per inviti una tantum.</string>
|
||||
<string name="v6_1_delete_many_messages_descr">Elimina o modera fino a 200 messaggi.</string>
|
||||
<string name="v6_1_forward_many_messages_descr">Inoltra fino a 20 messaggi alla volta.</string>
|
||||
</resources>
|
||||
@@ -791,7 +791,7 @@
|
||||
<string name="group_invitation_tap_to_join_incognito">Tik hier om incognito lid te worden</string>
|
||||
<string name="youve_accepted_group_invitation_connecting_to_inviting_group_member">Je bent lid geworden van deze groep. Verbinding maken met uitnodigend lid.</string>
|
||||
<string name="you_sent_group_invitation">Je hebt een groep uitnodiging verzonden</string>
|
||||
<string name="snd_group_event_user_left">je bent vertrokken</string>
|
||||
<string name="snd_group_event_user_left">jij bent vertrokken</string>
|
||||
<string name="snd_conn_event_switch_queue_phase_completed">je bent van adres veranderd</string>
|
||||
<string name="select_contacts">Selecteer contacten</string>
|
||||
<string name="skip_inviting_button">Sla het uitnodigen van leden over</string>
|
||||
@@ -950,7 +950,7 @@
|
||||
<string name="initial_member_role">Initiële rol</string>
|
||||
<string name="group_member_role_observer">Waarnemer</string>
|
||||
<string name="observer_cant_send_message_title">Je kunt geen berichten versturen!</string>
|
||||
<string name="you_are_observer">je bent waarnemer</string>
|
||||
<string name="you_are_observer">jij bent waarnemer</string>
|
||||
<string name="language_system">Systeem</string>
|
||||
<string name="v4_6_audio_video_calls">Audio en video oproepen</string>
|
||||
<string name="confirm_password">Bevestig wachtwoord</string>
|
||||
@@ -2104,25 +2104,4 @@
|
||||
<string name="network_proxy_incorrect_config_desc">Zorg ervoor dat de proxyconfiguratie correct is.</string>
|
||||
<string name="network_proxy_password">Wachtwoord</string>
|
||||
<string name="icon_descr_sound_muted">Geluid gedempt</string>
|
||||
<string name="error_initializing_web_view_wrong_arch">Fout bij initialiseren van WebView. Zorg ervoor dat WebView geïnstalleerd is en de ondersteunde architectuur is arm64.\nFout: %s</string>
|
||||
<string name="settings_message_shape_corner">Hoek</string>
|
||||
<string name="settings_section_title_message_shape">Berichtvorm</string>
|
||||
<string name="network_session_mode_session">Appsessie</string>
|
||||
<string name="network_session_mode_session_description">Elke keer dat u de app start, worden er nieuwe SOCKS-inloggegevens gebruikt.</string>
|
||||
<string name="network_session_mode_server_description">Voor elke server worden nieuwe SOCKS-inloggegevens gebruikt.</string>
|
||||
<string name="network_session_mode_server">Server</string>
|
||||
<string name="settings_message_shape_tail">Staart</string>
|
||||
<string name="call_desktop_permission_denied_chrome">Klik op de infoknop naast het adresveld om het gebruik van de microfoon toe te staan.</string>
|
||||
<string name="call_desktop_permission_denied_safari">Open Safari Instellingen / Websites / Microfoon en kies Toestaan voor localhost.</string>
|
||||
<string name="call_desktop_permission_denied_title">Als u wilt bellen, geeft u toestemming om uw microfoon te gebruiken. Beëindig het gesprek en probeer opnieuw te bellen.</string>
|
||||
<string name="v6_1_better_security">Betere beveiliging ✅</string>
|
||||
<string name="v6_1_better_security_descr">SimpleX-protocollen beoordeeld door Trail of Bits.</string>
|
||||
<string name="v6_1_message_dates_descr">Betere datums voor berichten.</string>
|
||||
<string name="v6_1_better_user_experience">Betere gebruikerservaring</string>
|
||||
<string name="v6_1_customizable_message_descr">Aanpasbare berichtvorm.</string>
|
||||
<string name="v6_1_better_calls_descr">Wissel tussen audio en video tijdens het gesprek.</string>
|
||||
<string name="v6_1_switch_chat_profile_descr">Wijzig chatprofiel voor eenmalige uitnodigingen.</string>
|
||||
<string name="v6_1_delete_many_messages_descr">Maximaal 200 berichten verwijderen of modereren.</string>
|
||||
<string name="v6_1_forward_many_messages_descr">Stuur maximaal 20 berichten tegelijk door.</string>
|
||||
<string name="v6_1_better_calls">Betere gesprekken</string>
|
||||
</resources>
|
||||
@@ -2084,46 +2084,4 @@
|
||||
<string name="forward_files_failed_to_receive_desc">%1$d plik(ów/i) nie udało się pobrać.</string>
|
||||
<string name="switching_profile_error_title">Błąd zmiany profilu</string>
|
||||
<string name="settings_section_title_chat_database">BAZA CZATU</string>
|
||||
<string name="n_file_errors">%1$d błędów plików:\n%2$s</string>
|
||||
<string name="n_other_file_errors">%1$d innych błędów plików.</string>
|
||||
<string name="forward_files_messages_deleted_after_selection_desc">Wiadomości zostały usunięte po wybraniu ich.</string>
|
||||
<string name="forward_alert_title_nothing_to_forward">Nic do przekazania!</string>
|
||||
<string name="forward_files_not_accepted_receive_files">Pobierz</string>
|
||||
<string name="compose_save_messages_n">Zapisywanie %1$s wiadomości</string>
|
||||
<string name="network_proxy_auth">Uwierzytelnianie proxy</string>
|
||||
<string name="network_proxy_password">Hasło</string>
|
||||
<string name="error_initializing_web_view_wrong_arch">Błąd inicjalizacji WebView. Upewnij się, że WebView jest zainstalowany, a jego obsługiwana architektura to arm64.\nBłąd: %s</string>
|
||||
<string name="delete_messages_cannot_be_undone_warning">Wiadomości zostaną usunięte - nie można tego cofnąć!</string>
|
||||
<string name="migrate_from_device_remove_archive_question">Usunąć archiwum?</string>
|
||||
<string name="settings_message_shape_corner">Róg</string>
|
||||
<string name="settings_section_title_message_shape">Kształt wiadomości</string>
|
||||
<string name="network_session_mode_session">Sesja aplikacji</string>
|
||||
<string name="network_session_mode_session_description">Nowe poświadczenia SOCKS będą używane przy każdym uruchomieniu aplikacji.</string>
|
||||
<string name="network_session_mode_server_description">Dla każdego serwera zostaną użyte nowe poświadczenia SOCKS.</string>
|
||||
<string name="call_desktop_permission_denied_chrome">Kliknij przycisk informacji przy polu adresu, aby zezwolić na korzystanie z mikrofonu.</string>
|
||||
<string name="call_desktop_permission_denied_safari">Otwórz Safari Ustawienia / Strony internetowe / Mikrofon, a następnie wybierz opcję Zezwalaj dla localhost.</string>
|
||||
<string name="network_proxy_auth_mode_isolate_by_auth_entity">Użyj różnych poświadczeń proxy dla każdego połączenia.</string>
|
||||
<string name="network_proxy_auth_mode_isolate_by_auth_user">Użyj różnych poświadczeń proxy dla każdego profilu.</string>
|
||||
<string name="network_proxy_random_credentials">Użyj losowych poświadczeń</string>
|
||||
<string name="network_proxy_username">Nazwa użytkownika</string>
|
||||
<string name="network_proxy_auth_mode_username_password">Twoje poświadczenia mogą zostać wysłane niezaszyfrowane.</string>
|
||||
<string name="icon_descr_sound_muted">Dźwięk wyciszony</string>
|
||||
<string name="select_chat_profile">Wybierz profil czatu</string>
|
||||
<string name="new_chat_share_profile">Udostępnij profil</string>
|
||||
<string name="switching_profile_error_message">Twoje połączenie zostało przeniesione do %s, ale podczas przekierowania do profilu wystąpił nieoczekiwany błąd.</string>
|
||||
<string name="system_mode_toast">Tryb systemu</string>
|
||||
<string name="migrate_from_device_uploaded_archive_will_be_removed">Przesłane archiwum bazy danych zostanie trwale usunięte z serwerów.</string>
|
||||
<string name="network_session_mode_server">Serwer</string>
|
||||
<string name="settings_message_shape_tail">Ogon</string>
|
||||
<string name="call_desktop_permission_denied_title">Aby wykonywać połączenia, zezwól na korzystanie z mikrofonu. Zakończ połączenie i spróbuj zadzwonić ponownie.</string>
|
||||
<string name="v6_1_better_security">Lepsze bezpieczeństwo ✅</string>
|
||||
<string name="v6_1_message_dates_descr">Lepsze daty wiadomości.</string>
|
||||
<string name="v6_1_customizable_message_descr">Możliwość dostosowania kształtu wiadomości.</string>
|
||||
<string name="v6_1_better_calls">Lepsze połączenia</string>
|
||||
<string name="v6_1_better_user_experience">Lepsze doświadczenie użytkownika</string>
|
||||
<string name="v6_1_better_security_descr">Protokoły SimpleX sprawdzone przez Trail of Bits.</string>
|
||||
<string name="v6_1_better_calls_descr">Przełączanie audio i wideo podczas połączenia.</string>
|
||||
<string name="v6_1_delete_many_messages_descr">Usuń lub moderuj do 200 wiadomości.</string>
|
||||
<string name="v6_1_forward_many_messages_descr">Przekazywanie do 20 wiadomości jednocześnie.</string>
|
||||
<string name="v6_1_switch_chat_profile_descr">Przełącz profil czatu dla zaproszeń jednorazowych.</string>
|
||||
</resources>
|
||||
@@ -49,7 +49,7 @@
|
||||
<string name="accept_feature">Aceitar</string>
|
||||
<string name="allow_your_contacts_to_send_disappearing_messages">Permitir que seus contatos enviem mensagens que desaparecem.</string>
|
||||
<string name="accept_feature_set_1_day">Definir 1 dia</string>
|
||||
<string name="allow_irreversible_message_deletion_only_if">Permitir a exclusão irreversível de mensagens apenas se o seu contato permitir. (24 horas)</string>
|
||||
<string name="allow_irreversible_message_deletion_only_if">Permitir a exclusão irreversível de mensagens apenas se o seu contato permitir.</string>
|
||||
<string name="allow_your_contacts_irreversibly_delete">Permitir que seus contatos eliminem de forma irreversível mensagens enviadas.</string>
|
||||
<string name="allow_voice_messages_only_if">Permitir mensagens de voz apenas se o contato permitir.</string>
|
||||
<string name="allow_your_contacts_to_send_voice_messages">Permitir que seus contatos enviem mensagens de voz.</string>
|
||||
@@ -130,7 +130,7 @@
|
||||
<string name="network_enable_socks_info">Aceder aos servidores via proxy SOCKS no porto %d\? O proxy tem de iniciar antes de ativar esta opção.</string>
|
||||
<string name="smp_servers_add_to_another_device">Adicionar a outro dispositivo</string>
|
||||
<string name="group_member_role_admin">administrador</string>
|
||||
<string name="allow_to_delete_messages">Permitir apagar irreversivelmente as mensagens enviadas. (24 horas)</string>
|
||||
<string name="allow_to_delete_messages">Permitir apagar irreversivelmente as mensagens enviadas.</string>
|
||||
<string name="delete_address__question">Eliminar endereço\?</string>
|
||||
<string name="delete_after">Eliminar após</string>
|
||||
<string name="delete_verb">Eliminar</string>
|
||||
@@ -565,7 +565,7 @@
|
||||
<string name="v4_3_voice_messages_desc">Máximo de 40 segundos, recebido instantaneamente.</string>
|
||||
<string name="icon_descr_more_button">Mais</string>
|
||||
<string name="network_and_servers">Rede e servidores</string>
|
||||
<string name="network_settings_title">Configurações avançadas</string>
|
||||
<string name="network_settings_title">Definições de rede</string>
|
||||
<string name="settings_section_title_experimenta">EXPERIMENTAL</string>
|
||||
<string name="you_can_start_chat_via_setting_or_by_restarting_the_app">Você pode iniciar a conversa através das Definições da aplicação / Base de Dados ou reiniciando a aplicação.</string>
|
||||
<string name="update_network_settings_confirmation">Atualizar</string>
|
||||
@@ -968,15 +968,4 @@
|
||||
<string name="abort_switch_receiving_address_desc">Mudança de endereço será cancelada. Antigo endereço de recebimento será usado.</string>
|
||||
<string name="allow_calls_question">Permitir ligações?</string>
|
||||
<string name="servers_info_subscriptions_connections_subscribed">Conexões ativas</string>
|
||||
<string name="migrate_from_device_all_data_will_be_uploaded">Todos os seus contatos, conversas e arquivos serão encriptados e enviados em chunks para relays XFTP configurados.</string>
|
||||
<string name="n_other_file_errors">%1$d erro(s) de outro arquivo.</string>
|
||||
<string name="forward_files_messages_deleted_after_selection_title">%1$s mensagens não encaminhadas</string>
|
||||
<string name="network_smp_proxy_mode_always">Sempre</string>
|
||||
<string name="network_smp_proxy_mode_always_description">Sempre use uma rota privata.</string>
|
||||
<string name="allow_to_send_simplex_links">Permitir o envio de links SimpleX.</string>
|
||||
<string name="moderated_items_description">%1$d mensagens moderadas por %2$s</string>
|
||||
<string name="rcv_group_and_other_events">e %d outros</string>
|
||||
<string name="all_users">Todos os perfis</string>
|
||||
<string name="connect_plan_already_connecting">Já conectando!</string>
|
||||
<string name="connect_plan_already_joining_the_group">Já entrando no grupo!</string>
|
||||
</resources>
|
||||
@@ -445,7 +445,7 @@
|
||||
<string name="this_string_is_not_a_connection_link">Эта строка не является ссылкой-приглашением!</string>
|
||||
<string name="you_can_also_connect_by_clicking_the_link"><![CDATA[Вы также можете соединиться, открыв ссылку там, где Вы её получили. Если ссылка откроется в браузере, нажмите кнопку <b>Открыть в приложении</b>.]]></string>
|
||||
<!-- CICallStatus -->
|
||||
<string name="callstatus_calling">звонок…</string>
|
||||
<string name="callstatus_calling">входящий звонок…</string>
|
||||
<string name="callstatus_missed">пропущенный звонок</string>
|
||||
<string name="callstatus_rejected">отклоненный звонок</string>
|
||||
<string name="callstatus_accepted">принятый звонок</string>
|
||||
@@ -2150,63 +2150,4 @@
|
||||
<string name="v6_0_chat_list_media">Открыть из списка чатов.</string>
|
||||
<string name="reset_all_hints">Сбросить все подсказки.</string>
|
||||
<string name="one_hand_ui_change_instruction">Вы можете изменить это в настройках Интерфейса.</string>
|
||||
<string name="compose_forward_messages_n">Пересылка %1$s сообщений</string>
|
||||
<string name="compose_save_messages_n">Сохранение %1$s сообщений</string>
|
||||
<string name="network_proxy_incorrect_config_desc">Убедитесь, что конфигурация прокси правильная.</string>
|
||||
<string name="network_proxy_auth">Аутентификация прокси</string>
|
||||
<string name="network_proxy_random_credentials">Использовать случайные учетные данные</string>
|
||||
<string name="system_mode_toast">Режим системы</string>
|
||||
<string name="error_forwarding_messages">Ошибка пересылки сообщений</string>
|
||||
<string name="n_file_errors">%1$d ошибок файлов:\n%2$s</string>
|
||||
<string name="n_other_file_errors">%1$d других ошибок файлов.</string>
|
||||
<string name="forward_alert_title_messages_to_forward">Переслать %1$s сообщение(й)?</string>
|
||||
<string name="forward_alert_forward_messages_without_files">Переслать сообщения без файлов?</string>
|
||||
<string name="forward_files_messages_deleted_after_selection_desc">Сообщения были удалены после того, как вы их выбрали.</string>
|
||||
<string name="forward_alert_title_nothing_to_forward">Нет сообщений, которые можно переслать!</string>
|
||||
<string name="forward_files_in_progress_desc">%1$d файл(ов) загружаются.</string>
|
||||
<string name="forward_files_failed_to_receive_desc">%1$d файл(ов) не удалось загрузить.</string>
|
||||
<string name="forward_files_missing_desc">%1$d файлов было удалено.</string>
|
||||
<string name="forward_files_not_accepted_desc">%1$d файлов не было загружено.</string>
|
||||
<string name="forward_files_not_accepted_receive_files">Загрузить</string>
|
||||
<string name="forward_files_messages_deleted_after_selection_title">%1$s сообщений не переслано</string>
|
||||
<string name="forward_multiple">Переслать сообщения…</string>
|
||||
<string name="error_parsing_uri_desc">Проверьте правильность ссылки SimpleX.</string>
|
||||
<string name="error_parsing_uri_title">Неверная ссылка</string>
|
||||
<string name="settings_section_title_chat_database">БАЗА ДАННЫХ</string>
|
||||
<string name="error_initializing_web_view_wrong_arch">Ошибка инициализации WebView. Убедитесь, что у вас установлен WebView и его поддерживаемая архитектура – arm64.\nОшибка: %s</string>
|
||||
<string name="icon_descr_sound_muted">Звук отключен</string>
|
||||
<string name="delete_messages_cannot_be_undone_warning">Сообщения будут удалены — это нельзя отменить!</string>
|
||||
<string name="switching_profile_error_title">Ошибка переключения профиля</string>
|
||||
<string name="select_chat_profile">Выберите профиль чата</string>
|
||||
<string name="new_chat_share_profile">Поделиться профилем</string>
|
||||
<string name="switching_profile_error_message">Соединение было перемещено на %s, но при смене профиля произошла неожиданная ошибка.</string>
|
||||
<string name="settings_message_shape_corner">Угол</string>
|
||||
<string name="network_session_mode_session">Сессия приложения</string>
|
||||
<string name="network_session_mode_session_description">Новые учетные данные SOCKS будут использоваться при каждом запуске приложения.</string>
|
||||
<string name="network_session_mode_server_description">Новые учетные данные SOCKS будут использоваться для каждого сервера.</string>
|
||||
<string name="network_session_mode_server">Сервер</string>
|
||||
<string name="settings_section_title_message_shape">Форма сообщений</string>
|
||||
<string name="settings_message_shape_tail">Хвост</string>
|
||||
<string name="call_desktop_permission_denied_chrome">Нажмите кнопку информации рядом с адресной строкой, чтобы разрешить микрофон.</string>
|
||||
<string name="call_desktop_permission_denied_safari">Откройте Настройки Safari / Веб-сайты / Микрофон, затем выберите Разрешить для localhost.</string>
|
||||
<string name="v6_1_better_calls">Улучшенные звонки</string>
|
||||
<string name="v6_1_message_dates_descr">Улучшенные даты сообщений.</string>
|
||||
<string name="v6_1_better_security">Улучшенная безопасность ✅</string>
|
||||
<string name="v6_1_better_user_experience">Улучшенный интерфейс</string>
|
||||
<string name="v6_1_customizable_message_descr">Настраиваемая форма сообщений.</string>
|
||||
<string name="v6_1_delete_many_messages_descr">Удаляйте или модерируйте до 200 сообщений.</string>
|
||||
<string name="v6_1_forward_many_messages_descr">Пересылайте до 20 сообщений за раз.</string>
|
||||
<string name="v6_1_better_calls_descr">Переключайте звук и видео во время звонка.</string>
|
||||
<string name="v6_1_switch_chat_profile_descr">Переключайте профиль чата для одноразовых приглашений.</string>
|
||||
<string name="v6_1_better_security_descr">Анализ безопасности протоколов SimpleX от Trail of Bits.</string>
|
||||
<string name="call_desktop_permission_denied_title">Чтобы совершать звонки, разрешите использовать микрофон. Завершите вызов и попробуйте позвонить снова.</string>
|
||||
<string name="network_proxy_auth_mode_no_auth">Не использовать учетные данные с прокси.</string>
|
||||
<string name="network_proxy_incorrect_config_title">Ошибка сохранения прокси</string>
|
||||
<string name="network_proxy_password">Пароль</string>
|
||||
<string name="network_proxy_auth_mode_isolate_by_auth_entity">Использовать разные учетные данные прокси для каждого соединения.</string>
|
||||
<string name="network_proxy_auth_mode_isolate_by_auth_user">Использовать разные учетные данные прокси для каждого профиля.</string>
|
||||
<string name="network_proxy_username">Имя пользователя</string>
|
||||
<string name="network_proxy_auth_mode_username_password">Ваши учетные данные могут быть отправлены в незашифрованном виде.</string>
|
||||
<string name="migrate_from_device_remove_archive_question">Удалить архив?</string>
|
||||
<string name="migrate_from_device_uploaded_archive_will_be_removed">Загруженный архив базы данных будет навсегда удален с серверов.</string>
|
||||
</resources>
|
||||
@@ -22,7 +22,7 @@
|
||||
<string name="appearance_settings">Görünüm</string>
|
||||
<string name="your_settings">Ayarlarınız</string>
|
||||
<string name="mute_chat">Sessize al</string>
|
||||
<string name="unmute_chat">Susturmayı kaldır</string>
|
||||
<string name="unmute_chat">Sessizden çıkar</string>
|
||||
<string name="abort_switch_receiving_address_confirm">İptal</string>
|
||||
<string name="abort_switch_receiving_address_question">Adres değişikliğini iptal et\?</string>
|
||||
<string name="send_disappearing_message_30_seconds">30 saniye</string>
|
||||
@@ -94,7 +94,7 @@
|
||||
<string name="save_preferences_question">Tercihleri kaydet\?</string>
|
||||
<string name="save_profile_password">Profil parolasını kaydet</string>
|
||||
<string name="profile_is_only_shared_with_your_contacts">Profil sadece konuştuğun kişilerle paylaşılır.</string>
|
||||
<string name="next_generation_of_private_messaging">Gizli iletişimin\ngelecek kuşağı</string>
|
||||
<string name="next_generation_of_private_messaging">Gizli iletişimin gelecek kuşağı</string>
|
||||
<string name="icon_descr_audio_off">Ses kapalı</string>
|
||||
<string name="authentication_cancelled">Doğrulama iptal edildi</string>
|
||||
<string name="settings_restart_app">Yeniden başlat</string>
|
||||
@@ -757,7 +757,7 @@
|
||||
<string name="callstatus_connecting">aramaya bağlanılıyor…</string>
|
||||
<string name="delivery_receipts_are_disabled">Gönderildi bilgisi kapalı!</string>
|
||||
<string name="v5_2_more_things">Birkaç şey daha</string>
|
||||
<string name="onboarding_notifications_mode_service_desc"><![CDATA[<b>Daha fazla pil kullanır</b>! Uygulama her zaman arka planda çalışır - bildirimler anında gösterilir.]]></string>
|
||||
<string name="onboarding_notifications_mode_service_desc"><![CDATA[<b>Daha fazla pil kullanır</b>! Arka plan hizmeti her zaman çalışır - mesajlar gelir gelmez bildirim gönderilir.]]></string>
|
||||
<string name="in_developing_title">Çok yakında!</string>
|
||||
<string name="delete_contact_all_messages_deleted_cannot_undo_warning">Kişi ve tüm mesajlar silinecektir - bu geri alınamaz!</string>
|
||||
<string name="alert_title_contact_connection_pending">Kişi henüz bağlanmadı!</string>
|
||||
@@ -914,7 +914,7 @@
|
||||
<string name="ok">TAMAM</string>
|
||||
<string name="icon_descr_more_button">Daha fazla</string>
|
||||
<string name="one_time_link">Tek seferlik davet bağlantısı</string>
|
||||
<string name="network_settings_title">Gelişmiş ayarlar</string>
|
||||
<string name="network_settings_title">Ağ ayarları</string>
|
||||
<string name="shutdown_alert_desc">Siz uygulamayı yeniden başlatana kadar bildirimler çalışmayacaktır</string>
|
||||
<string name="la_mode_off">Kapalı</string>
|
||||
<string name="self_destruct_new_display_name">Yeni görünen ad:</string>
|
||||
@@ -989,7 +989,7 @@
|
||||
<string name="v4_5_private_filenames_descr">Zaman dilimi, görsel/ses korumak için UTC kullan.</string>
|
||||
<string name="v4_5_private_filenames">Özel dosya adları</string>
|
||||
<string name="to_start_a_new_chat_help_header">Yeni bir sohbet başlatmak için</string>
|
||||
<string name="people_can_connect_only_via_links_you_share">Kimin bağlanabileceğine siz karar verirsiniz.</string>
|
||||
<string name="people_can_connect_only_via_links_you_share">İnsanlar size sadece paylaştığınız bağlantılar üzerinden ulaşabilir.</string>
|
||||
<string name="privacy_redefined">Gizlilik yeniden tanımlanıyor</string>
|
||||
<string name="read_more_in_github">GitHub repomuzda daha fazlasını okuyun.</string>
|
||||
<string name="onboarding_notifications_mode_periodic">Periyodik</string>
|
||||
@@ -1109,7 +1109,7 @@
|
||||
<string name="notification_preview_mode_message_desc">Kişiyi ve mesajı göster</string>
|
||||
<string name="v5_4_better_groups">Daha iyi gruplar</string>
|
||||
<string name="video_decoding_exception_desc">Videonun kodu çözülemiyor. Lütfen farklı bir video deneyin veya geliştiricilerle iletişime geçin.</string>
|
||||
<string name="non_fatal_errors_occured_during_import">İçe aktarma sırasında bazı önemli olmayan hatalar oluştu:</string>
|
||||
<string name="non_fatal_errors_occured_during_import">İçe aktarma sırasında bir takım hatlar oluştu - daha fazla detay için sohbet konsoluna bakabilirsiniz.</string>
|
||||
<string name="show_developer_options">Geliştirici seçeneklerini göster</string>
|
||||
<string name="rcv_group_event_1_member_connected">%s bağlandı</string>
|
||||
<string name="network_disable_socks_info">Onaylarsanız, mesajlaşma sunucuları IP adresinizi ve sağlayıcınızı - hangi sunuculara bağlandığınızı - görebilecektir.</string>
|
||||
@@ -1777,7 +1777,7 @@
|
||||
<string name="srv_error_version">Sunucu sürümü ağ ayarlarıyla uyumlu değil.</string>
|
||||
<string name="snd_error_auth">Yanlış anahtar veya bilinmeyen bağlantı - büyük olasılıkla bu bağlantı silinmiştir.</string>
|
||||
<string name="network_smp_proxy_mode_private_routing">Gizli yönlendirme</string>
|
||||
<string name="network_smp_proxy_mode_unknown">Bilinmeyen sunucular</string>
|
||||
<string name="network_smp_proxy_mode_unknown">Bilinmeyen yönlendiriciler</string>
|
||||
<string name="network_smp_proxy_mode_always_description">Her zaman gizli yönlendirmeyi kullan.</string>
|
||||
<string name="network_smp_proxy_mode_never_description">Gizli yönlendirmeyi KULLANMA.</string>
|
||||
<string name="update_network_smp_proxy_mode_question">Mesaj yönlendirme modu</string>
|
||||
@@ -1887,7 +1887,7 @@
|
||||
<string name="select_chat_profile">Sohbet profili seç</string>
|
||||
<string name="xftp_servers_configured">XFTP sunucuları yapılandırıldı</string>
|
||||
<string name="media_and_file_servers">Medya ve dosya sunucuları</string>
|
||||
<string name="network_proxy_auth_mode_no_auth">Kimlik bilgilerini proxy ile kullanmayın.</string>
|
||||
<string name="network_proxy_auth_mode_no_auth">Proxy ile bilgeleri kullanma</string>
|
||||
<string name="network_proxy_incorrect_config_title">Proxy kayıt edilirken hata oluştu.</string>
|
||||
<string name="network_proxy_incorrect_config_desc">Proxy konfigürasyonunun doğru olduğundan emin olun.</string>
|
||||
<string name="network_proxy_password">Şifre</string>
|
||||
@@ -1919,7 +1919,7 @@
|
||||
<string name="download_errors">İndirme hataları</string>
|
||||
<string name="info_row_message_status">Mesaj durumu</string>
|
||||
<string name="error_parsing_uri_title">Geçersiz link</string>
|
||||
<string name="error_parsing_uri_desc">Lütfen SimpleX bağlantısının doğru olup olmadığını kontrol edin.</string>
|
||||
<string name="error_parsing_uri_desc">Lütfen SimpleX linki doğru mu kontrol edin.</string>
|
||||
<string name="proxy_destination_error_broker_host">Varış sunucusu ardesi (%1$s) yönlendirme sunucusu (%2$s) ile uyumsuz.</string>
|
||||
<string name="proxy_destination_error_broker_version">Varış sunucusu sürümü (%1$s) yönlendirme sunucusu (%2$s) ile uyumsuz.</string>
|
||||
<string name="message_forwarded_title">Mesaj iletildi</string>
|
||||
@@ -1941,7 +1941,7 @@
|
||||
<string name="v6_0_new_media_options">Yeni medya seçenekleri</string>
|
||||
<string name="v6_0_privacy_blur">Daha iyi gizlilik için bulanıklaştır.</string>
|
||||
<string name="v6_0_connect_faster_descr">Arkadaşlarınıza daha hızlı bağlanın</string>
|
||||
<string name="v6_0_delete_many_messages_descr">Tek seferde en fazla 20 mesaj silin.</string>
|
||||
<string name="v6_0_delete_many_messages_descr">Aynı anda yirmiye kadar mesaj silin.</string>
|
||||
<string name="v6_0_chat_list_media">Sohbet listesinden oynat.</string>
|
||||
<string name="migrate_from_device_remove_archive_question">Arşiv kaldırılsın mı ?</string>
|
||||
<string name="servers_info_sessions_connected">Bağlandı</string>
|
||||
@@ -1975,7 +1975,7 @@
|
||||
<string name="chat_database_exported_title">Veritabanı dışa aktarıldı</string>
|
||||
<string name="chunks_deleted">Parçalar silindi</string>
|
||||
<string name="chunks_downloaded">Parçalar indirildi</string>
|
||||
<string name="servers_info_connected_servers_section_header">Bağlı sunucular</string>
|
||||
<string name="servers_info_connected_servers_section_header">Sunucuayı bağlandı</string>
|
||||
<string name="cant_call_contact_connecting_wait_alert_text">Kişiye bağlanılıyor, lütfen bekleyin ya da daha sonra kontrol edin.</string>
|
||||
<string name="copy_error">Kopyalama hatası</string>
|
||||
<string name="delete_without_notification">Bildirim göndermeden sil</string>
|
||||
@@ -1984,14 +1984,14 @@
|
||||
<string name="smp_proxy_error_broker_host">Yönlendirme sunucu adresi (%1$s) ağ ayarlarıyla uyumsuz.</string>
|
||||
<string name="info_row_file_status">Dosya durumu</string>
|
||||
<string name="proxy_destination_error_failed_to_connect">Yönlendirme sunucusu (%1$s) varış sunucusuna (%2$s) bağlanamadı. Lütfen daha sonra tekrar deneyin.</string>
|
||||
<string name="smp_proxy_error_broker_version">Yönlendirme suncusu sürümü ağ ayarlarıyla uyumsuz: %1$s</string>
|
||||
<string name="smp_proxy_error_broker_version">Yönlendirme suncusu sürümü ağ ayarlarıyla uyumsuz. %1$s</string>
|
||||
<string name="servers_info_subscriptions_connections_pending">Bekliyor</string>
|
||||
<string name="calls_prohibited_ask_to_enable_calls_alert_text">Lütfen kişinizden çağrılara izin vermesini isteyin.</string>
|
||||
<string name="servers_info_previously_connected_servers_section_header">Önceden bağlanılmış sunucular</string>
|
||||
<string name="cant_call_contact_alert_title">Kişi aranamıyor</string>
|
||||
<string name="network_options_save_and_reconnect">Kayıt et ve yeniden bağlan</string>
|
||||
<string name="delete_messages_cannot_be_undone_warning">Mesajlar silinecek - bu geri alınamaz!</string>
|
||||
<string name="delete_messages_mark_deleted_warning">Mesajlar silinmek üzere işaretlendi. Alıcı (lar) bu mesajları görebilecek.</string>
|
||||
<string name="delete_messages_mark_deleted_warning">Mesajlar silinmek üzere işaretlendi. Alıcılar bu mesajları görebilecek.</string>
|
||||
<string name="delete_members_messages__question">Üylerin %d mesajı silinsin mi ?</string>
|
||||
<string name="member_inactive_title">Üye inaktif</string>
|
||||
<string name="message_forwarded_desc">Henüz direkt bağlantı yok mesaj admin tarafından yönlendirildi.</string>
|
||||
@@ -2020,108 +2020,4 @@
|
||||
<string name="cannot_share_message_alert_text">Seçilen sohbet tercihleri bu mesajı yasakladı.</string>
|
||||
<string name="servers_info_reset_stats">Tüm istatistikleri sıfırla</string>
|
||||
<string name="reset_all_hints">Tüm ip uçlarını sıfırla</string>
|
||||
<string name="n_file_errors">%1$d dosya hata(ları)\n%2$s</string>
|
||||
<string name="forward_files_in_progress_desc">%1$d dosya(lar) hala indiriliyor.</string>
|
||||
<string name="forward_files_failed_to_receive_desc">%1$d dosyası (ları) indirilemedi.</string>
|
||||
<string name="forward_files_missing_desc">%1$d dosyası (ları) silindi.</string>
|
||||
<string name="n_other_file_errors">%1$d diğer dosya hatası(ları).</string>
|
||||
<string name="forward_files_not_accepted_desc">%1$d dosyası (ları) indirilemedi.</string>
|
||||
<string name="forward_files_messages_deleted_after_selection_title">%1$s mesajları iletilemedi</string>
|
||||
<string name="privacy_media_blur_radius_medium">Orta</string>
|
||||
<string name="servers_info_subscriptions_section_header">Mesaj alındısı</string>
|
||||
<string name="acknowledged">Onaylandı</string>
|
||||
<string name="error_initializing_web_view_wrong_arch">WebView başlatılırken hata oluştu. WebView\'in yüklü olduğundan ve desteklenen mimarisinin arm64 olduğundan emin olun.\nHata: %s</string>
|
||||
<string name="network_session_mode_session_description">Uygulamayı her başlattığınızda yeni SOCKS kimlik bilgileri kullanılacaktır.</string>
|
||||
<string name="network_session_mode_server_description">Her sunucu için yeni SOCKS kimlik bilgileri kullanılacaktır.</string>
|
||||
<string name="app_check_for_updates_button_download">İndir %s (%s)</string>
|
||||
<string name="settings_section_title_message_shape">Mesaj şekli</string>
|
||||
<string name="subscription_percentage">Yüzdeyi göster</string>
|
||||
<string name="app_check_for_updates_canceled">Güncelleme indirme işlemi iptal edildi</string>
|
||||
<string name="subscription_errors">Abone olurken hata</string>
|
||||
<string name="moderate_messages_will_be_deleted_warning">Mesajlar tüm üyeler için silinecektir.</string>
|
||||
<string name="moderate_messages_will_be_marked_warning">Mesajlar tüm üyeler için moderasyonlu olarak işaretlenecektir.</string>
|
||||
<string name="file_error_auth">Yanlış anahtar veya bilinmeyen dosya yığın adresi - büyük olasılıkla dosya silinmiştir.</string>
|
||||
<string name="toolbar_settings">Ayarlar</string>
|
||||
<string name="new_chat_share_profile">Profil paylaş</string>
|
||||
<string name="switching_profile_error_message">Bağlantınız %s\'ye taşındı ancak sizi profile yönlendirirken beklenmedik bir hata oluştu.</string>
|
||||
<string name="network_proxy_auth">Proxy kimlik doğrulaması</string>
|
||||
<string name="network_proxy_random_credentials">Rastgele kimlik bilgileri kullan</string>
|
||||
<string name="network_proxy_auth_mode_isolate_by_auth_entity">Her bağlantı için farklı proxy kimlik bilgileri kullan.</string>
|
||||
<string name="network_proxy_auth_mode_isolate_by_auth_user">Her profil için farklı proxy kimlik bilgileri kullan.</string>
|
||||
<string name="network_proxy_auth_mode_username_password">Kimlik bilgileriniz şifrelenmeden gönderilebilir.</string>
|
||||
<string name="network_proxy_username">Kullanıcı Adı</string>
|
||||
<string name="app_check_for_updates_button_skip">Bu sürümü atlayın</string>
|
||||
<string name="app_check_for_updates_notice_desc">Yeni sürümlerden haberdar olmak için Kararlı veya Beta sürümleri için periyodik kontrolü açın.</string>
|
||||
<string name="privacy_media_blur_radius_soft">Yumuşak</string>
|
||||
<string name="chat_database_exported_not_all_files">Bazı dosya(lar) dışa aktarılmadı</string>
|
||||
<string name="appearance_zoom">Zoom</string>
|
||||
<string name="v6_0_upgrade_app">Uygulamayı otomatik olarak yükselt</string>
|
||||
<string name="uploaded_files">Yüklenen dosyalar</string>
|
||||
<string name="size">Boyut</string>
|
||||
<string name="subscribed">Abone olundu</string>
|
||||
<string name="subscription_results_ignored">Abonelikler göz ardı edildi</string>
|
||||
<string name="contact_list_header_title">Bağlantılarınız</string>
|
||||
<string name="icon_descr_sound_muted">Ses kapatıldı</string>
|
||||
<string name="servers_info_uploaded">Yüklendi</string>
|
||||
<string name="servers_info_reset_stats_alert_message">Sunucu istatistikleri sıfırlanacaktır - bu geri alınamaz!</string>
|
||||
<string name="one_hand_ui">Erişilebilir sohbet araç çubuğu</string>
|
||||
<string name="one_hand_ui_change_instruction">Görünüm ayarlarından değiştirebilirsiniz.</string>
|
||||
<string name="one_hand_ui_card_title">Sohbet listesini değiştir:</string>
|
||||
<string name="system_mode_toast">Sistem modu</string>
|
||||
<string name="v6_0_reachable_chat_toolbar">Erişilebilir sohbet araç çubuğu</string>
|
||||
<string name="servers_info_target">İçin bilgi gösteriliyor</string>
|
||||
<string name="servers_info_statistics_section_header">İstatistikler</string>
|
||||
<string name="servers_info_private_data_disclaimer">%s\'den başlayarak.\nTüm veriler cihazınıza özeldir.</string>
|
||||
<string name="sent_via_proxy">Bir proxy aracılığıyla gönderildi</string>
|
||||
<string name="server_address">Sunucu adresi</string>
|
||||
<string name="upload_errors">Yükleme hataları</string>
|
||||
<string name="network_option_tcp_connection">TCP bağlantısı</string>
|
||||
<string name="network_socks_proxy">SOCKS proxy</string>
|
||||
<string name="servers_info_proxied_servers_section_header">Proxy sunucuları</string>
|
||||
<string name="temporary_file_error">Geçici dosya hatası</string>
|
||||
<string name="info_view_video_button">Video</string>
|
||||
<string name="you_can_still_send_messages_to_contact">Arşivlenen kişilerden %1$s\'e mesaj gönderebilirsiniz.</string>
|
||||
<string name="you_can_still_view_conversation_with_contact">Sohbetler listesinde %1$s ile yapılan konuşmayı hala görüntüleyebilirsiniz.</string>
|
||||
<string name="xftp_server">XFTP sunucusu</string>
|
||||
<string name="servers_info_detailed_statistics_receive_errors">Alım sırasında hata</string>
|
||||
<string name="smp_server">SMP sunucusu</string>
|
||||
<string name="network_error_broker_host_desc">Sunucu adresi ağ ayarlarıyla uyumsuz: %1$s.</string>
|
||||
<string name="network_error_broker_version_desc">Sunucu sürümü uygulamanızla uyumlu değil: %1$s.</string>
|
||||
<string name="you_need_to_allow_calls">Kendiniz arayabilmeniz için önce irtibat kişinizin sizi aramasına izin vermelisiniz.</string>
|
||||
<string name="servers_info_starting_from">%s\'den başlayarak.</string>
|
||||
<string name="acknowledgement_errors">Onay hataları</string>
|
||||
<string name="secured">Güvenli</string>
|
||||
<string name="network_session_mode_session">Uygulama oturumu</string>
|
||||
<string name="network_session_mode_server">Sunucu</string>
|
||||
<string name="app_check_for_updates_stable">Stabil</string>
|
||||
<string name="app_check_for_updates_update_available">Güncelleme mevcut: %s</string>
|
||||
<string name="remote_ctrl_connection_stopped_identity_desc">Bu bağlantı başka bir mobil cihazda kullanıldı, lütfen masaüstünde yeni bir bağlantı oluşturun.</string>
|
||||
<string name="call_desktop_permission_denied_chrome">Mikrofon kullanımına izin vermek için adres alanının yanındaki bilgi düğmesine tıklayın.</string>
|
||||
<string name="call_desktop_permission_denied_safari">Safari Ayarları / Web Siteleri / Mikrofon\'u açın, ardından localhost için İzin Ver\'i seçin.</string>
|
||||
<string name="call_desktop_permission_denied_title">Arama yapmak için mikrofonunuzu kullanmanıza izin verin. Aramayı sonlandırın ve tekrar aramayı deneyin.</string>
|
||||
<string name="settings_message_shape_tail">Konuşma balonu</string>
|
||||
<string name="privacy_media_blur_radius_strong">Güçlü</string>
|
||||
<string name="v6_0_reachable_chat_toolbar_descr">Uygulamayı tek elle kullan.</string>
|
||||
<string name="servers_info">Sunucu bilgileri</string>
|
||||
<string name="servers_info_subscriptions_total">Toplam</string>
|
||||
<string name="servers_info_proxied_servers_section_footer">Bu sunuculara bağlı değilsiniz. Mesajları onlara iletmek için özel yönlendirme kullanılır.</string>
|
||||
<string name="servers_info_subscriptions_connections_subscribed">Aktif bağlantılar</string>
|
||||
<string name="settings_message_shape_corner">Köşeleri yuvarlama</string>
|
||||
<string name="migrate_from_device_uploaded_archive_will_be_removed">Yüklenen veritabanı arşivi sunuculardan kalıcı olarak kaldırılacaktır.</string>
|
||||
<string name="proxied">Proxyli</string>
|
||||
<string name="servers_info_transport_sessions_section_header">Taşıma oturumları</string>
|
||||
<string name="chat_database_exported_migrate">Dışa aktarılan veritabanını taşıyabilirsiniz.</string>
|
||||
<string name="chat_database_exported_save">Dışa aktarılan arşivi kaydedebilirsiniz.</string>
|
||||
<string name="servers_info_detailed_statistics_sent_messages_total">Gönderilen tüm mesajların toplamı</string>
|
||||
<string name="servers_info_detailed_statistics_sent_messages_header">Gönderilen mesajlar</string>
|
||||
<string name="v6_1_message_dates_descr">Daha iyi mesaj tarihleri.</string>
|
||||
<string name="v6_1_customizable_message_descr">Özelleştirilebilir mesaj şekli.</string>
|
||||
<string name="v6_1_forward_many_messages_descr">Aynı anda en fazla 20 mesaj iletin.</string>
|
||||
<string name="v6_1_better_calls_descr">Görüşme sırasında ses ve görüntüyü değiştirin.</string>
|
||||
<string name="v6_1_switch_chat_profile_descr">Sohbet profilini 1 kerelik davetler için değiştirin.</string>
|
||||
<string name="v6_1_better_calls">Daha iyi aramalar</string>
|
||||
<string name="v6_1_better_user_experience">Daha iyi kullanıcı deneyimi</string>
|
||||
<string name="v6_1_delete_many_messages_descr">200\'e kadar mesajı silin veya düzenleyin.</string>
|
||||
<string name="v6_1_better_security">Daha iyi güvenlik ✅</string>
|
||||
<string name="v6_1_better_security_descr">SimpleX protokolleri Trail of Bits tarafından incelenmiştir.</string>
|
||||
</resources>
|
||||
@@ -2104,15 +2104,4 @@
|
||||
<string name="forward_files_messages_deleted_after_selection_desc">Повідомлення були видалені після того, як ви їх вибрали.</string>
|
||||
<string name="error_forwarding_messages">Помилка при пересиланні повідомлень</string>
|
||||
<string name="icon_descr_sound_muted">Звук вимкнено</string>
|
||||
<string name="error_initializing_web_view_wrong_arch">Помилка ініціалізації WebView. Переконайтеся, що WebView встановлено, і його підтримувана архітектура — arm64. \nПомилка: %s</string>
|
||||
<string name="settings_message_shape_tail">Хвіст</string>
|
||||
<string name="settings_message_shape_corner">Куточок</string>
|
||||
<string name="settings_section_title_message_shape">Форма повідомлення</string>
|
||||
<string name="network_session_mode_session">Сесія додатку</string>
|
||||
<string name="network_session_mode_session_description">Нові облікові дані SOCKS будуть використовуватись щоразу, коли ви запускаєте додаток.</string>
|
||||
<string name="network_session_mode_server_description">Нові облікові дані SOCKS будуть використовуватись для кожного сервера.</string>
|
||||
<string name="network_session_mode_server">Сервер</string>
|
||||
<string name="call_desktop_permission_denied_chrome">Натисніть кнопку інформації поруч із полем адреси, щоб дозволити використання мікрофона.</string>
|
||||
<string name="call_desktop_permission_denied_safari">Відкрийте Налаштування Safari / Сайти / Мікрофон, а потім виберіть \"Дозволити для localhost\".</string>
|
||||
<string name="call_desktop_permission_denied_title">Щоб здійснювати дзвінки, дозволіть використовувати ваш мікрофон. Завершіть дзвінок і спробуйте зателефонувати знову.</string>
|
||||
</resources>
|
||||
@@ -884,24 +884,4 @@
|
||||
<string name="edit_history">Lịch sử</string>
|
||||
<string name="alert_title_no_group">Không tìm thấy nhóm!</string>
|
||||
<string name="v4_6_hidden_chat_profiles">Hồ sơ trò chuyện ẩn</string>
|
||||
<string name="how_to_use_simplex_chat">Cách sử dụng</string>
|
||||
<string name="how_it_works">Cách thức hoạt động</string>
|
||||
<string name="how_simplex_works">Cách thức SimpleX hoạt động</string>
|
||||
<string name="how_to">Cách làm</string>
|
||||
<string name="error_initializing_web_view_wrong_arch">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</string>
|
||||
<string name="custom_time_unit_hours">giờ</string>
|
||||
<string name="host_verb">Lưu trữ</string>
|
||||
<string name="network_session_mode_session">Phiên làm việc trên ứng dụng</string>
|
||||
<string name="how_to_use_markdown">Cách sử dụng markdown</string>
|
||||
<string name="call_desktop_permission_denied_chrome">Nhấn nút thông tin gần trường địa chỉ để cho phép sử dụng microphone.</string>
|
||||
<string name="v6_1_better_calls">Trải nghiệm cuộc gọi tốt hơn</string>
|
||||
<string name="v6_1_better_security">Bảo mật hơn ✅</string>
|
||||
<string name="v6_1_better_user_experience">Trải nghiệm người dùng tuyệt vời hơn</string>
|
||||
<string name="v6_1_customizable_message_descr">Hình dạng tin nhắn có thể tùy chỉnh được.</string>
|
||||
<string name="v6_1_message_dates_descr">Mô tả thời gian tin nhắn tốt hơn.</string>
|
||||
<string name="v6_1_delete_many_messages_descr">Xóa hay kiểm duyệt tối đa 200 tin nhắn.</string>
|
||||
<string name="settings_message_shape_corner">Góc</string>
|
||||
<string name="v6_1_forward_many_messages_descr">Chuyển tiếp tối đa 20 tin nhắn cùng một lúc.</string>
|
||||
<string name="how_to_use_your_servers">Cách sử dụng máy chủ của bạn</string>
|
||||
<string name="v5_5_new_interface_languages">Giao diện Hungary và Thổ Nhĩ Kỳ</string>
|
||||
</resources>
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user