mirror of
https://github.com/simplex-chat/simplex-chat.git
synced 2024-12-17 17:20:21 +01:00
Compare commits
139 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 16edc24c16 | |||
| 1cb3c25478 | |||
| 13912a4af9 | |||
| 601b4cd619 | |||
| d2b4b7bed6 | |||
| fa95e4e9ad | |||
| 88fdc1ef75 | |||
| 7ab6e44a6e | |||
| 26986686ca | |||
| e76dc33cf0 | |||
| aa2eafdacb | |||
| 2c3c97f5cc | |||
| 83f42704ea | |||
| 7ff6ef09fe | |||
| dbe4504f05 | |||
| 9a87f344b5 | |||
| 2127c7dcce | |||
| e3528d3ffe | |||
| ec014d721e | |||
| 75bacb7923 | |||
| 0d8c179861 | |||
| e9a99dfb3c | |||
| baa585357f | |||
| cebb4aa93b | |||
| df53ae9d4f | |||
| 21b1904b0e | |||
| b1ef442f1e | |||
| 4020cb074f | |||
| 0c69f6553a | |||
| 03865b4a18 | |||
| ac5f0bc7bb | |||
| 12423f4afa | |||
| fabbe0285d | |||
| b01efd9d0a | |||
| fc28ff0f15 | |||
| 213f6cf372 | |||
| a764e1906d | |||
| 54b40a5838 | |||
| 35fc0544a0 | |||
| 6907f02ea6 | |||
| c6ece8afdd | |||
| a00e5901de | |||
| ad2a0024f2 | |||
| c5261a416f | |||
| 193e17f7af | |||
| 87fd642951 | |||
| fb044000d2 | |||
| 69791dbdcf | |||
| dc11202250 | |||
| 96ac0a7715 | |||
| bdb6bd6e20 | |||
| 7ccd80bf23 | |||
| f0d6f15393 | |||
| 49c91283d8 | |||
| 55de5b9ce9 | |||
| 8727d3b91b | |||
| bb2a6ec65d | |||
| 6118fca000 | |||
| 026a8022e0 | |||
| dc1106afad | |||
| cc9b4f3bb3 | |||
| 533d0e40ac | |||
| d9ad755474 | |||
| 15ca662805 | |||
| ab034e626f | |||
| fc83bc692a | |||
| d20d444e6e | |||
| fc0879ebb7 | |||
| f048ddb922 | |||
| 0e39a62ab1 | |||
| 53f0fe9ca4 | |||
| 95c1d8d798 | |||
| 4a39b481b1 | |||
| 65c7ecbddf | |||
| 67472b6285 | |||
| 9199fbffd5 | |||
| 6e5eb697a2 | |||
| e2e6935e5b | |||
| 769ef25c31 | |||
| 2f730d54e9 | |||
| fe0013c4a9 | |||
| 5261886b31 | |||
| 93ab3076d4 | |||
| 3b88ddbd4f | |||
| 54ff95f350 | |||
| d6dc35738e | |||
| 5b3aba9db2 | |||
| 4526afe7e9 | |||
| c67302a5bb | |||
| 3685c85743 | |||
| 0f301adc57 | |||
| 1f226dda64 | |||
| 981cbb8bf9 | |||
| d5507f2fa3 | |||
| 55d180466a | |||
| 8a906485d1 | |||
| e79fa136a4 | |||
| 560b521673 | |||
| c849f5356d | |||
| 33e12e35a0 | |||
| 8a70bad9af | |||
| efb7fc6c3b | |||
| 630fea42c3 | |||
| 68e570656d | |||
| 3cbb2c2d71 | |||
| 5ca27f63e6 | |||
| 63d1b2060e | |||
| 25fb099c44 | |||
| d69e222b7b | |||
| f7cb6f2796 | |||
| c5813b3489 | |||
| 10ded1530c | |||
| 255538e5d7 | |||
| acc9be1a5b | |||
| d47ff3597d | |||
| 529921e16a | |||
| 0a4667304c | |||
| 17a0f3a210 | |||
| c13e8e4037 | |||
| 3a61290730 | |||
| 166082c021 | |||
| 69bbe0ae91 | |||
| 0d9ef4e567 | |||
| 17b55c51c5 | |||
| 665d9dcd00 | |||
| c13c7baaaf | |||
| af993529f9 | |||
| 05aab35a1f | |||
| 40e93cc61e | |||
| ea320f531f | |||
| 4f99075b14 | |||
| de7882c904 | |||
| 0cad378bc5 | |||
| da058ca376 | |||
| c22d23750f | |||
| b5f91f2d31 | |||
| c6ab8ec6b3 | |||
| 4447b66b4e | |||
| 2539255957 |
@@ -72,7 +72,7 @@ You must:
|
||||
|
||||
Messages not following these rules will be deleted, the right to send messages may be revoked, and the access to the new members to the group may be temporarily restricted, to prevent re-joining under a different name - our imperfect group moderation does not have a better solution at the moment.
|
||||
|
||||
You can join an English-speaking users group if you want to ask any questions: [#SimpleX users group](https://simplex.chat/contact#/?v=1-4&smp=smp%3A%2F%2FPQUV2eL0t7OStZOoAsPEV2QYWt4-xilbakvGUGOItUo%3D%40smp6.simplex.im%2Fos8FftfoV8zjb2T89fUEjJtF7y64p5av%23%2F%3Fv%3D1-2%26dh%3DMCowBQYDK2VuAyEAQqMgh0fw2lPhjn3PDIEfAKA_E0-gf8Hr8zzhYnDivRs%253D%26srv%3Dbylepyau3ty4czmn77q4fglvperknl4bi2eb2fdy2bh4jxtf32kf73yd.onion&data=%7B%22type%22%3A%22group%22%2C%22groupLinkId%22%3A%22lBPiveK2mjfUH43SN77R0w%3D%3D%22%7D)
|
||||
You can join an English-speaking users group if you want to ask any questions: [#SimpleX users group](https://simplex.chat/contact#/?v=2-4&smp=smp%3A%2F%2FPQUV2eL0t7OStZOoAsPEV2QYWt4-xilbakvGUGOItUo%3D%40smp6.simplex.im%2Fos8FftfoV8zjb2T89fUEjJtF7y64p5av%23%2F%3Fv%3D1-2%26dh%3DMCowBQYDK2VuAyEAQqMgh0fw2lPhjn3PDIEfAKA_E0-gf8Hr8zzhYnDivRs%253D%26srv%3Dbylepyau3ty4czmn77q4fglvperknl4bi2eb2fdy2bh4jxtf32kf73yd.onion&data=%7B%22type%22%3A%22group%22%2C%22groupLinkId%22%3A%22lBPiveK2mjfUH43SN77R0w%3D%3D%22%7D)
|
||||
|
||||
There is also a group [#simplex-devs](https://simplex.chat/contact#/?v=1-4&smp=smp%3A%2F%2FPQUV2eL0t7OStZOoAsPEV2QYWt4-xilbakvGUGOItUo%3D%40smp6.simplex.im%2FvYCRjIflKNMGYlfTkuHe4B40qSlQ0439%23%2F%3Fv%3D1-2%26dh%3DMCowBQYDK2VuAyEAHNdcqNbzXZhyMoSBjT2R0-Eb1EPaLyUg3KZjn-kmM1w%253D%26srv%3Dbylepyau3ty4czmn77q4fglvperknl4bi2eb2fdy2bh4jxtf32kf73yd.onion&data=%7B%22type%22%3A%22group%22%2C%22groupLinkId%22%3A%22PD20tcXjw7IpkkMCfR6HLA%3D%3D%22%7D) for developers who build on SimpleX platform:
|
||||
|
||||
@@ -83,7 +83,7 @@ There is also a group [#simplex-devs](https://simplex.chat/contact#/?v=1-4&smp=s
|
||||
|
||||
There are groups in other languages, that we have the apps interface translated into. These groups are for testing, and asking questions to other SimpleX Chat users:
|
||||
|
||||
[\#SimpleX-DE](https://simplex.chat/contact#/?v=1-2&smp=smp%3A%2F%2FPQUV2eL0t7OStZOoAsPEV2QYWt4-xilbakvGUGOItUo%3D%40smp6.simplex.im%2FkIEl7OQzcp-J6aDmjdlQbRJwqkcZE7XR%23%2F%3Fv%3D1-2%26dh%3DMCowBQYDK2VuAyEAR16PCu02MobRmKAsjzhDWMZcWP9hS8l5AUZi-Gs8z18%253D%26srv%3Dbylepyau3ty4czmn77q4fglvperknl4bi2eb2fdy2bh4jxtf32kf73yd.onion&data=%7B%22type%22%3A%22group%22%2C%22groupLinkId%22%3A%22puYPMCQt11yPUvgmI5jCiw%3D%3D%22%7D) (German-speaking), [\#SimpleX-ES](https://simplex.chat/contact#/?v=1-2&smp=smp%3A%2F%2FPQUV2eL0t7OStZOoAsPEV2QYWt4-xilbakvGUGOItUo%3D%40smp6.simplex.im%2FaJ8O1O8A8GbeoaHTo_V8dcefaCl7ouPb%23%2F%3Fv%3D1-2%26dh%3DMCowBQYDK2VuAyEA034qWTA3sWcTsi6aWhNf9BA34vKVCFaEBdP2R66z6Ao%253D%26srv%3Dbylepyau3ty4czmn77q4fglvperknl4bi2eb2fdy2bh4jxtf32kf73yd.onion&data=%7B%22type%22%3A%22group%22%2C%22groupLinkId%22%3A%22wiZ1v_wNjLPlT-nCSB-bRA%3D%3D%22%7D) (Spanish-speaking), [\#SimpleX-FR](https://simplex.chat/contact#/?v=1-2&smp=smp%3A%2F%2Fhpq7_4gGJiilmz5Rf-CswuU5kZGkm_zOIooSw6yALRg%3D%40smp5.simplex.im%2FvIHQDxTor53nwnWWTy5cHNwQQAdWN5Hw%23%2F%3Fv%3D1-2%26dh%3DMCowBQYDK2VuAyEAPdgK1eBnETmgiqEQufbUkydKBJafoRx4iRrtrC2NAGc%253D%26srv%3Djjbyvoemxysm7qxap7m5d5m35jzv5qq6gnlv7s4rsn7tdwwmuqciwpid.onion&data=%7B%22type%22%3A%22group%22%2C%22groupLinkId%22%3A%221FyUryBPza-1ZFFE80Ekbg%3D%3D%22%7D) (French-speaking), [\#SimpleX-RU](https://simplex.chat/contact#/?v=1-2&smp=smp%3A%2F%2FPQUV2eL0t7OStZOoAsPEV2QYWt4-xilbakvGUGOItUo%3D%40smp6.simplex.im%2FXZyt3hJmWsycpN7Dqve_wbrAqb6myk1R%23%2F%3Fv%3D1-2%26dh%3DMCowBQYDK2VuAyEAMFVIoytozTEa_QXOgoZFq_oe0IwZBYKvW50trSFXzXo%253D%26srv%3Dbylepyau3ty4czmn77q4fglvperknl4bi2eb2fdy2bh4jxtf32kf73yd.onion&data=%7B%22type%22%3A%22group%22%2C%22groupLinkId%22%3A%22xz05ngjA3pNIxLZ32a8Vxg%3D%3D%22%7D) (Russian-speaking), [\#SimpleX-IT](https://simplex.chat/contact#/?v=1-2&smp=smp%3A%2F%2Fu2dS9sG8nMNURyZwqASV4yROM28Er0luVTx5X1CsMrU%3D%40smp4.simplex.im%2F0weR-ZgDUl7ruOtI_8TZwEsnJP6UiImA%23%2F%3Fv%3D1-2%26dh%3DMCowBQYDK2VuAyEAq4PSThO9Fvb5ydF48wB0yNbpzCbuQJCW3vZ9BGUfcxk%253D%26srv%3Do5vmywmrnaxalvz6wi3zicyftgio6psuvyniis6gco6bp6ekl4cqj4id.onion&data=%7B%22type%22%3A%22group%22%2C%22groupLinkId%22%3A%22e-iceLA0SctC62eARgYDWg%3D%3D%22%7D) (Italian-speaking).
|
||||
[\#SimpleX-DE](https://simplex.chat/contact#/?v=1-4&smp=smp%3A%2F%2FPQUV2eL0t7OStZOoAsPEV2QYWt4-xilbakvGUGOItUo%3D%40smp6.simplex.im%2FmfiivxDKWFuowXrQOp11jsY8TuP__rBL%23%2F%3Fv%3D1-2%26dh%3DMCowBQYDK2VuAyEAiz3pKNwvKudckFYMUfgoT0s96B0jfZ7ALHAu7rtE9HQ%253D%26srv%3Dbylepyau3ty4czmn77q4fglvperknl4bi2eb2fdy2bh4jxtf32kf73yd.onion&data=%7B%22type%22%3A%22group%22%2C%22groupLinkId%22%3A%22jZeJpXGrRXQJU_-MSJ_v2A%3D%3D%22%7D) (German-speaking), [\#SimpleX-ES](https://simplex.chat/contact#/?v=2-4&smp=smp%3A%2F%2Fhpq7_4gGJiilmz5Rf-CswuU5kZGkm_zOIooSw6yALRg%3D%40smp5.simplex.im%2FJ5ES83pJimY2BRklS8fvy_iQwIU37xra%23%2F%3Fv%3D1-2%26dh%3DMCowBQYDK2VuAyEA0F0STP6UqN_12_k2cjjTrIjFgBGeWhOAmbY1qlk3pnM%253D%26srv%3Djjbyvoemxysm7qxap7m5d5m35jzv5qq6gnlv7s4rsn7tdwwmuqciwpid.onion&data=%7B%22type%22%3A%22group%22%2C%22groupLinkId%22%3A%22VmUU0fqmYdCRmVCyvStvHA%3D%3D%22%7D) (Spanish-speaking), [\#SimpleX-FR](https://simplex.chat/contact#/?v=2-7&smp=smp%3A%2F%2FPQUV2eL0t7OStZOoAsPEV2QYWt4-xilbakvGUGOItUo%3D%40smp6.simplex.im%2FxCHBE_6PBRMqNEpm4UQDHXb9cz-mN7dd%23%2F%3Fv%3D1-3%26dh%3DMCowBQYDK2VuAyEAetqlcM7zTCRw-iatnwCrvpJSto7lq5Yv6AsBMWv7GSM%253D%26srv%3Dbylepyau3ty4czmn77q4fglvperknl4bi2eb2fdy2bh4jxtf32kf73yd.onion&data=%7B%22type%22%3A%22group%22%2C%22groupLinkId%22%3A%22foO5Xw4hhjOa_x7zET7otw%3D%3D%22%7D) (French-speaking), [\#SimpleX-RU](https://simplex.chat/contact#/?v=2-4&smp=smp%3A%2F%2Fhpq7_4gGJiilmz5Rf-CswuU5kZGkm_zOIooSw6yALRg%3D%40smp5.simplex.im%2FVXQTB0J2lLjYkgjWByhl6-1qmb5fgZHh%23%2F%3Fv%3D1-2%26dh%3DMCowBQYDK2VuAyEAI6JaEWezfSwvcoTEkk6au-gkjrXR2ew2OqZYMYBvayk%253D%26srv%3Djjbyvoemxysm7qxap7m5d5m35jzv5qq6gnlv7s4rsn7tdwwmuqciwpid.onion&data=%7B%22type%22%3A%22group%22%2C%22groupLinkId%22%3A%22ORH9OEe8Duissh-hslfeVg%3D%3D%22%7D) (Russian-speaking), [\#SimpleX-IT](https://simplex.chat/contact#/?v=2-7&smp=smp%3A%2F%2Fhpq7_4gGJiilmz5Rf-CswuU5kZGkm_zOIooSw6yALRg%3D%40smp5.simplex.im%2FqpHu0psOUdYfc11yQCzSyq5JhijrBzZT%23%2F%3Fv%3D1-3%26dh%3DMCowBQYDK2VuAyEACZ_7fbwlM45wl6cGif8cY47oPQ_AMdP0ATqOYLA6zHY%253D%26srv%3Djjbyvoemxysm7qxap7m5d5m35jzv5qq6gnlv7s4rsn7tdwwmuqciwpid.onion&data=%7B%22type%22%3A%22group%22%2C%22groupLinkId%22%3A%229uRQRTir3ealdcSfB0zsrw%3D%3D%22%7D) (Italian-speaking).
|
||||
|
||||
You can join either by opening these links in the app or by opening them in a desktop browser and scanning the QR code.
|
||||
|
||||
|
||||
@@ -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 !showSettings, let la = chatModel.laRequest {
|
||||
if chatListUserPickerSheet == nil, let la = chatModel.laRequest {
|
||||
LocalAuthView(authRequest: la)
|
||||
.onDisappear {
|
||||
// this flag is separate from accessAuthenticated to show initializationView while we wait for authentication
|
||||
@@ -109,9 +109,6 @@ 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 }
|
||||
@@ -253,7 +250,7 @@ struct ContentView: View {
|
||||
|
||||
private func mainView() -> some View {
|
||||
ZStack(alignment: .top) {
|
||||
ChatListView(showSettings: $showSettings).privacySensitive(protectScreen)
|
||||
ChatListView(activeUserPickerSheet: $chatListUserPickerSheet).privacySensitive(protectScreen)
|
||||
.onAppear {
|
||||
requestNtfAuthorization()
|
||||
// Local Authentication notice is to be shown on next start after onboarding is complete
|
||||
@@ -300,9 +297,18 @@ struct ContentView: View {
|
||||
if let contactId = contacts?.first?.personHandle?.value,
|
||||
let chat = chatModel.getChat(contactId),
|
||||
case let .direct(contact) = chat.chatInfo {
|
||||
logger.debug("callToRecentContact: schedule call")
|
||||
DispatchQueue.main.asyncAfter(deadline: .now() + 1) {
|
||||
CallController.shared.startCall(contact, mediaType)
|
||||
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)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -526,7 +526,7 @@ final class ChatModel: ObservableObject {
|
||||
}
|
||||
|
||||
func updateCurrentUserUiThemes(uiThemes: ThemeModeOverrides?) {
|
||||
guard var current = currentUser else { return }
|
||||
guard var current = currentUser, current.uiThemes != uiThemes else { return }
|
||||
current.uiThemes = uiThemes
|
||||
let i = users.firstIndex(where: { $0.user.userId == current.userId })
|
||||
if let i {
|
||||
|
||||
@@ -357,6 +357,12 @@ func apiGetChatItemInfo(type: ChatType, id: Int64, itemId: Int64) async throws -
|
||||
throw r
|
||||
}
|
||||
|
||||
func apiPlanForwardChatItems(type: ChatType, id: Int64, itemIds: [Int64]) async throws -> ([Int64], ForwardConfirmation?) {
|
||||
let r = await chatSendCmd(.apiPlanForwardChatItems(toChatType: type, toChatId: id, itemIds: itemIds))
|
||||
if case let .forwardPlan(_, chatItemIds, forwardConfimation) = r { return (chatItemIds, forwardConfimation) }
|
||||
throw r
|
||||
}
|
||||
|
||||
func apiForwardChatItems(toChatType: ChatType, toChatId: Int64, fromChatType: ChatType, fromChatId: Int64, itemIds: [Int64], ttl: Int?) async -> [ChatItem]? {
|
||||
let cmd: ChatCommand = .apiForwardChatItems(toChatType: toChatType, toChatId: toChatId, fromChatType: fromChatType, fromChatId: fromChatId, itemIds: itemIds, ttl: ttl)
|
||||
return await processSendMessageCmd(toChatType: toChatType, cmd: cmd)
|
||||
@@ -456,7 +462,7 @@ func apiGetNtfToken() -> (DeviceToken?, NtfTknStatus?, NotificationsMode, String
|
||||
let r = chatSendCmdSync(.apiGetNtfToken)
|
||||
switch r {
|
||||
case let .ntfToken(token, status, ntfMode, ntfServer): return (token, status, ntfMode, ntfServer)
|
||||
case .chatCmdError(_, .errorAgent(.CMD(.PROHIBITED))): return (nil, nil, .off, nil)
|
||||
case .chatCmdError(_, .errorAgent(.CMD(.PROHIBITED, _))): return (nil, nil, .off, nil)
|
||||
default:
|
||||
logger.debug("apiGetNtfToken response: \(String(describing: r))")
|
||||
return (nil, nil, .off, nil)
|
||||
@@ -579,12 +585,18 @@ func apiContactInfo(_ contactId: Int64) async throws -> (ConnectionStats?, Profi
|
||||
throw r
|
||||
}
|
||||
|
||||
func apiGroupMemberInfo(_ groupId: Int64, _ groupMemberId: Int64) throws -> (GroupMember, ConnectionStats?) {
|
||||
func apiGroupMemberInfoSync(_ 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) }
|
||||
@@ -639,8 +651,8 @@ func apiGetContactCode(_ contactId: Int64) async throws -> (Contact, String) {
|
||||
throw r
|
||||
}
|
||||
|
||||
func apiGetGroupMemberCode(_ groupId: Int64, _ groupMemberId: Int64) throws -> (GroupMember, String) {
|
||||
let r = chatSendCmdSync(.apiGetGroupMemberCode(groupId: groupId, groupMemberId: groupMemberId))
|
||||
func apiGetGroupMemberCode(_ groupId: Int64, _ groupMemberId: Int64) async throws -> (GroupMember, String) {
|
||||
let r = await chatSendCmd(.apiGetGroupMemberCode(groupId: groupId, groupMemberId: groupMemberId))
|
||||
if case let .groupMemberCode(_, _, member, connectionCode) = r { return (member, connectionCode) }
|
||||
throw r
|
||||
}
|
||||
@@ -1039,77 +1051,122 @@ func standaloneFileInfo(url: String, ctrl: chat_ctrl? = nil) async -> MigrationF
|
||||
}
|
||||
|
||||
func receiveFile(user: any UserLike, fileId: Int64, userApprovedRelays: Bool = false, auto: Bool = false) async {
|
||||
if let chatItem = await apiReceiveFile(
|
||||
fileId: fileId,
|
||||
userApprovedRelays: userApprovedRelays || !privacyAskToApproveRelaysGroupDefault.get(),
|
||||
encrypted: privacyEncryptLocalFilesGroupDefault.get(),
|
||||
await receiveFiles(
|
||||
user: user,
|
||||
fileIds: [fileId],
|
||||
userApprovedRelays: userApprovedRelays,
|
||||
auto: auto
|
||||
) {
|
||||
await chatItemSimpleUpdate(user, chatItem)
|
||||
}
|
||||
)
|
||||
}
|
||||
|
||||
func apiReceiveFile(fileId: Int64, userApprovedRelays: Bool, encrypted: Bool, inline: Bool? = nil, auto: Bool = false) async -> AChatItem? {
|
||||
let r = await chatSendCmd(.receiveFile(fileId: fileId, userApprovedRelays: userApprovedRelays, encrypted: encrypted, inline: inline))
|
||||
let am = AlertManager.shared
|
||||
if case let .rcvFileAccepted(_, chatItem) = r { return chatItem }
|
||||
if case .rcvFileAcceptedSndCancelled = r {
|
||||
logger.debug("apiReceiveFile error: sender cancelled file transfer")
|
||||
if !auto {
|
||||
am.showAlertMsg(
|
||||
title: "Cannot receive file",
|
||||
message: "Sender cancelled file transfer."
|
||||
func receiveFiles(user: any UserLike, fileIds: [Int64], userApprovedRelays: Bool = false, auto: Bool = false) async {
|
||||
var fileIdsToApprove = [Int64]()
|
||||
var srvsToApprove = Set<String>()
|
||||
var otherFileErrs = [ChatResponse]()
|
||||
|
||||
for fileId in fileIds {
|
||||
let r = await chatSendCmd(
|
||||
.receiveFile(
|
||||
fileId: fileId,
|
||||
userApprovedRelays: userApprovedRelays || !privacyAskToApproveRelaysGroupDefault.get(),
|
||||
encrypted: privacyEncryptLocalFilesGroupDefault.get(),
|
||||
inline: nil
|
||||
)
|
||||
)
|
||||
switch r {
|
||||
case let .rcvFileAccepted(_, chatItem):
|
||||
await chatItemSimpleUpdate(user, chatItem)
|
||||
default:
|
||||
if let chatError = chatError(r) {
|
||||
switch chatError {
|
||||
case let .fileNotApproved(fileId, unknownServers):
|
||||
fileIdsToApprove.append(fileId)
|
||||
srvsToApprove.formUnion(unknownServers)
|
||||
default:
|
||||
otherFileErrs.append(r)
|
||||
}
|
||||
}
|
||||
}
|
||||
} else if let networkErrorAlert = networkErrorAlert(r) {
|
||||
logger.error("apiReceiveFile network error: \(String(describing: r))")
|
||||
if !auto {
|
||||
am.showAlert(networkErrorAlert)
|
||||
}
|
||||
|
||||
if !auto {
|
||||
let otherErrsStr = if otherFileErrs.isEmpty {
|
||||
""
|
||||
} else if otherFileErrs.count == 1 {
|
||||
"\(otherFileErrs[0])"
|
||||
} else if otherFileErrs.count == 2 {
|
||||
"\(otherFileErrs[0])\n\(otherFileErrs[1])"
|
||||
} else {
|
||||
"\(otherFileErrs[0])\n\(otherFileErrs[1])\nand \(otherFileErrs.count - 2) other error(s)"
|
||||
}
|
||||
} else {
|
||||
switch chatError(r) {
|
||||
case .fileCancelled:
|
||||
logger.debug("apiReceiveFile ignoring fileCancelled error")
|
||||
case .fileAlreadyReceiving:
|
||||
logger.debug("apiReceiveFile ignoring fileAlreadyReceiving error")
|
||||
case let .fileNotApproved(fileId, unknownServers):
|
||||
logger.debug("apiReceiveFile fileNotApproved error")
|
||||
if !auto {
|
||||
let srvs = unknownServers.map { s in
|
||||
|
||||
// If there are not approved files, alert is shown the same way both in case of singular and plural files reception
|
||||
if !fileIdsToApprove.isEmpty {
|
||||
let srvs = srvsToApprove
|
||||
.map { s in
|
||||
if let srv = parseServerAddress(s), !srv.hostnames.isEmpty {
|
||||
srv.hostnames[0]
|
||||
} else {
|
||||
serverHost(s)
|
||||
}
|
||||
}
|
||||
am.showAlert(Alert(
|
||||
title: Text("Unknown servers!"),
|
||||
message: Text("Without Tor or VPN, your IP address will be visible to these XFTP relays: \(srvs.sorted().joined(separator: ", "))."),
|
||||
primaryButton: .default(
|
||||
Text("Download"),
|
||||
action: {
|
||||
Task {
|
||||
logger.debug("apiReceiveFile fileNotApproved alert - in Task")
|
||||
if let user = ChatModel.shared.currentUser {
|
||||
await receiveFile(user: user, fileId: fileId, userApprovedRelays: true)
|
||||
}
|
||||
.sorted()
|
||||
.joined(separator: ", ")
|
||||
let fIds = fileIdsToApprove
|
||||
await MainActor.run {
|
||||
showAlert(
|
||||
title: NSLocalizedString("Unknown servers!", comment: "alert title"),
|
||||
message: (
|
||||
String.localizedStringWithFormat(NSLocalizedString("Without Tor or VPN, your IP address will be visible to these XFTP relays: %@.", comment: "alert message"), srvs) +
|
||||
(otherErrsStr != "" ? "\n\n" + String.localizedStringWithFormat(NSLocalizedString("Other file errors:\n%@", comment: "alert message"), otherErrsStr) : "")
|
||||
),
|
||||
buttonTitle: NSLocalizedString("Download", comment: "alert button"),
|
||||
buttonAction: {
|
||||
Task {
|
||||
logger.debug("apiReceiveFile fileNotApproved alert - in Task")
|
||||
if let user = ChatModel.shared.currentUser {
|
||||
await receiveFiles(user: user, fileIds: fIds, userApprovedRelays: true)
|
||||
}
|
||||
}
|
||||
),
|
||||
secondaryButton: .cancel()
|
||||
))
|
||||
},
|
||||
cancelButton: true
|
||||
)
|
||||
}
|
||||
default:
|
||||
logger.error("apiReceiveFile error: \(String(describing: r))")
|
||||
if !auto {
|
||||
am.showAlertMsg(
|
||||
title: "Error receiving file",
|
||||
message: "Error: \(responseError(r))"
|
||||
} else if otherFileErrs.count == 1 { // If there is a single other error, we differentiate on it
|
||||
let errorResponse = otherFileErrs.first!
|
||||
switch errorResponse {
|
||||
case let .rcvFileAcceptedSndCancelled(_, rcvFileTransfer):
|
||||
logger.debug("receiveFiles error: sender cancelled file transfer \(rcvFileTransfer.fileId)")
|
||||
await MainActor.run {
|
||||
showAlert(
|
||||
NSLocalizedString("Cannot receive file", comment: "alert title"),
|
||||
message: NSLocalizedString("Sender cancelled file transfer.", comment: "alert message")
|
||||
)
|
||||
}
|
||||
default:
|
||||
if let chatError = chatError(errorResponse) {
|
||||
switch chatError {
|
||||
case .fileCancelled, .fileAlreadyReceiving:
|
||||
logger.debug("receiveFiles ignoring FileCancelled or FileAlreadyReceiving error")
|
||||
default:
|
||||
await MainActor.run {
|
||||
showAlert(
|
||||
NSLocalizedString("Error receiving file", comment: "alert title"),
|
||||
message: responseError(errorResponse)
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
} else if otherFileErrs.count > 1 { // If there are multiple other errors, we show general alert
|
||||
await MainActor.run {
|
||||
showAlert(
|
||||
NSLocalizedString("Error receiving file", comment: "alert title"),
|
||||
message: String.localizedStringWithFormat(NSLocalizedString("File errors:\n%@", comment: "alert message"), otherErrsStr)
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func cancelFile(user: User, fileId: Int64) async {
|
||||
@@ -1821,23 +1878,25 @@ func processReceivedMsg(_ res: ChatResponse) async {
|
||||
NtfManager.shared.notifyMessageReceived(user, cInfo, cItem)
|
||||
}
|
||||
}
|
||||
case let .chatItemStatusUpdated(user, aChatItem):
|
||||
let cInfo = aChatItem.chatInfo
|
||||
let cItem = aChatItem.chatItem
|
||||
if !cItem.isDeletedContent && active(user) {
|
||||
await MainActor.run { m.updateChatItem(cInfo, cItem, status: cItem.meta.itemStatus) }
|
||||
}
|
||||
if let endTask = m.messageDelivery[cItem.id] {
|
||||
switch cItem.meta.itemStatus {
|
||||
case .sndNew: ()
|
||||
case .sndSent: endTask()
|
||||
case .sndRcvd: endTask()
|
||||
case .sndErrorAuth: endTask()
|
||||
case .sndError: endTask()
|
||||
case .sndWarning: endTask()
|
||||
case .rcvNew: ()
|
||||
case .rcvRead: ()
|
||||
case .invalid: ()
|
||||
case let .chatItemsStatusesUpdated(user, chatItems):
|
||||
for chatItem in chatItems {
|
||||
let cInfo = chatItem.chatInfo
|
||||
let cItem = chatItem.chatItem
|
||||
if !cItem.isDeletedContent && active(user) {
|
||||
await MainActor.run { m.updateChatItem(cInfo, cItem, status: cItem.meta.itemStatus) }
|
||||
}
|
||||
if let endTask = m.messageDelivery[cItem.id] {
|
||||
switch cItem.meta.itemStatus {
|
||||
case .sndNew: ()
|
||||
case .sndSent: endTask()
|
||||
case .sndRcvd: endTask()
|
||||
case .sndErrorAuth: endTask()
|
||||
case .sndError: endTask()
|
||||
case .sndWarning: endTask()
|
||||
case .rcvNew: ()
|
||||
case .rcvRead: ()
|
||||
case .invalid: ()
|
||||
}
|
||||
}
|
||||
}
|
||||
case let .chatItemUpdated(user, aChatItem):
|
||||
@@ -2031,7 +2090,6 @@ 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)
|
||||
|
||||
@@ -122,7 +122,7 @@ extension ThemeWallpaper {
|
||||
let preset: String? = if case let WallpaperType.preset(filename, _) = type { filename } else { nil }
|
||||
let scale: Float? = if case let WallpaperType.preset(_, scale) = type { scale } else { if case let WallpaperType.image(_, scale, _) = type { scale } else { 1.0 } }
|
||||
let scaleType: WallpaperScaleType? = if case let WallpaperType.image(_, _, scaleType) = type { scaleType } else { nil }
|
||||
let image: String? = if case WallpaperType.image = type, let image = type.uiImage { resizeImageToStrSize(image, maxDataSize: 5_000_000) } else { nil }
|
||||
let image: String? = if case WallpaperType.image = type, let image = type.uiImage { resizeImageToStrSizeSync(image, maxDataSize: 5_000_000) } else { nil }
|
||||
return ThemeWallpaper (
|
||||
preset: preset,
|
||||
scale: scale,
|
||||
|
||||
@@ -197,7 +197,7 @@ class ThemeManager {
|
||||
var themeIds = currentThemeIdsDefault.get()
|
||||
themeIds[nonSystemThemeName] = prevValue.themeId
|
||||
currentThemeIdsDefault.set(themeIds)
|
||||
applyTheme(nonSystemThemeName)
|
||||
applyTheme(currentThemeDefault.get())
|
||||
}
|
||||
|
||||
static func copyFromSameThemeOverrides(_ type: WallpaperType?, _ lowerLevelOverride: ThemeModeOverride?, _ pref: Binding<ThemeModeOverride>) -> Bool {
|
||||
|
||||
@@ -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,24 +27,39 @@ struct ActiveCallView: View {
|
||||
var body: some View {
|
||||
ZStack(alignment: .topLeading) {
|
||||
ZStack(alignment: .bottom) {
|
||||
if let client = client, [call.peerMedia, call.localMedia].contains(.video), activeCall != nil {
|
||||
if let client = client, call.hasVideo {
|
||||
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.supportsVideo) {
|
||||
if let call = m.activeCall, let client = client, (!pipShown || !call.hasVideo) {
|
||||
ActiveCallOverlay(call: call, client: client)
|
||||
}
|
||||
}
|
||||
@@ -54,6 +69,9 @@ 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()
|
||||
@@ -84,7 +102,7 @@ struct ActiveCallView: View {
|
||||
|
||||
private func createWebRTCClient() {
|
||||
if client == nil && canConnectCall {
|
||||
client = WebRTCClient($activeCall, { msg in await MainActor.run { processRtcMessage(msg: msg) } }, $localRendererAspectRatio)
|
||||
client = WebRTCClient({ msg in await MainActor.run { processRtcMessage(msg: msg) } }, $localRendererAspectRatio)
|
||||
Task {
|
||||
await m.callCommand.setClient(client)
|
||||
}
|
||||
@@ -99,7 +117,7 @@ struct ActiveCallView: View {
|
||||
logger.debug("ActiveCallView: response \(msg.resp.respType)")
|
||||
switch msg.resp {
|
||||
case let .capabilities(capabilities):
|
||||
let callType = CallType(media: call.localMedia, capabilities: capabilities)
|
||||
let callType = CallType(media: call.initialCallType, capabilities: capabilities)
|
||||
Task {
|
||||
do {
|
||||
try await apiSendCallInvitation(call.contact, callType)
|
||||
@@ -110,7 +128,7 @@ struct ActiveCallView: View {
|
||||
call.callState = .invitationSent
|
||||
call.localCapabilities = capabilities
|
||||
}
|
||||
if call.supportsVideo && !AVAudioSession.sharedInstance().hasExternalAudioDevice() {
|
||||
if call.hasVideo && !AVAudioSession.sharedInstance().hasExternalAudioDevice() {
|
||||
try? AVAudioSession.sharedInstance().setCategory(.playback, options: [.allowBluetooth, .allowAirPlay, .allowBluetoothA2DP])
|
||||
}
|
||||
CallSoundsPlayer.shared.startConnectingCallSound()
|
||||
@@ -120,7 +138,7 @@ struct ActiveCallView: View {
|
||||
Task {
|
||||
do {
|
||||
try await apiSendCallOffer(call.contact, offer, iceCandidates,
|
||||
media: call.localMedia, capabilities: capabilities)
|
||||
media: call.initialCallType, capabilities: capabilities)
|
||||
} catch {
|
||||
logger.error("apiSendCallOffer \(responseError(error))")
|
||||
}
|
||||
@@ -164,6 +182,9 @@ 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
|
||||
}
|
||||
@@ -182,6 +203,14 @@ 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
|
||||
@@ -214,16 +243,38 @@ struct ActiveCallView: View {
|
||||
ChatReceiver.shared.messagesChannel = nil
|
||||
return
|
||||
}
|
||||
if case let .chatItemStatusUpdated(_, msg) = msg,
|
||||
msg.chatInfo.id == call.contact.id,
|
||||
case .sndCall = msg.chatItem.content,
|
||||
case .sndRcvd = msg.chatItem.meta.itemStatus {
|
||||
if case let .chatItemsStatusesUpdated(_, chatItems) = msg,
|
||||
chatItems.contains(where: { ci in
|
||||
ci.chatInfo.id == call.contact.id &&
|
||||
ci.chatItem.content.isSndCall &&
|
||||
ci.chatItem.meta.itemStatus.isSndRcvd
|
||||
}) {
|
||||
CallSoundsPlayer.shared.startInCallSound()
|
||||
ChatReceiver.shared.messagesChannel = nil
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
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
|
||||
@@ -239,44 +290,16 @@ struct ActiveCallOverlay: View {
|
||||
|
||||
var body: some View {
|
||||
VStack {
|
||||
switch call.localMedia {
|
||||
case .video:
|
||||
switch call.hasVideo {
|
||||
case true:
|
||||
videoCallInfoView(call)
|
||||
.foregroundColor(.white)
|
||||
.opacity(0.8)
|
||||
.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:
|
||||
.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:
|
||||
ZStack(alignment: .topLeading) {
|
||||
Button {
|
||||
chatModel.activeCallViewIsCollapsed = true
|
||||
@@ -291,35 +314,32 @@ struct ActiveCallOverlay: View {
|
||||
}
|
||||
.foregroundColor(.white)
|
||||
.opacity(0.8)
|
||||
.padding()
|
||||
.padding(.horizontal)
|
||||
.padding(.vertical, 10)
|
||||
.frame(maxHeight: .infinity)
|
||||
}
|
||||
|
||||
Spacer()
|
||||
|
||||
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)
|
||||
}
|
||||
}
|
||||
.padding(.bottom, 60)
|
||||
.padding(.horizontal, 48)
|
||||
}
|
||||
|
||||
Spacer()
|
||||
|
||||
HStack {
|
||||
toggleMicButton()
|
||||
Spacer()
|
||||
audioDeviceButton()
|
||||
Spacer()
|
||||
endCallButton()
|
||||
Spacer()
|
||||
if call.localMediaSources.camera {
|
||||
flipCameraButton()
|
||||
} else {
|
||||
Color.clear.frame(width: 60, height: 60)
|
||||
}
|
||||
Spacer()
|
||||
toggleCameraButton()
|
||||
}
|
||||
.padding(.horizontal, 20)
|
||||
.padding(.bottom, 16)
|
||||
.frame(maxWidth: 440, alignment: .center)
|
||||
}
|
||||
.frame(maxWidth: .infinity)
|
||||
.onAppear {
|
||||
@@ -381,36 +401,54 @@ struct ActiveCallOverlay: View {
|
||||
|
||||
private func endCallButton() -> some View {
|
||||
let cc = CallController.shared
|
||||
return callButton("phone.down.fill", width: 60, height: 60) {
|
||||
return callButton("phone.down.fill", .red, padding: 10) {
|
||||
if let uuid = call.callUUID {
|
||||
cc.endCall(callUUID: uuid)
|
||||
} else {
|
||||
cc.endCall(call: call) {}
|
||||
}
|
||||
}
|
||||
.foregroundColor(.red)
|
||||
}
|
||||
|
||||
private func toggleAudioButton() -> some View {
|
||||
controlButton(call, call.audioEnabled ? "mic.fill" : "mic.slash") {
|
||||
private func toggleMicButton() -> some View {
|
||||
controlButton(call, call.localMediaSources.mic ? "mic.fill" : "mic.slash", padding: 14) {
|
||||
Task {
|
||||
client.setAudioEnabled(!call.audioEnabled)
|
||||
DispatchQueue.main.async {
|
||||
call.audioEnabled = !call.audioEnabled
|
||||
}
|
||||
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
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private func toggleSpeakerButton() -> some View {
|
||||
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
|
||||
}
|
||||
}
|
||||
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
|
||||
}
|
||||
.onAppear {
|
||||
deviceManager.call = call
|
||||
@@ -418,53 +456,67 @@ struct ActiveCallOverlay: View {
|
||||
}
|
||||
}
|
||||
|
||||
private func toggleVideoButton() -> some View {
|
||||
controlButton(call, call.videoEnabled ? "video.fill" : "video.slash") {
|
||||
private func toggleCameraButton() -> some View {
|
||||
controlButton(call, call.localMediaSources.camera ? "video.fill" : "video.slash", padding: call.localMediaSources.camera ? 16 : 14) {
|
||||
Task {
|
||||
client.setVideoEnabled(!call.videoEnabled)
|
||||
DispatchQueue.main.async {
|
||||
call.videoEnabled = !call.videoEnabled
|
||||
}
|
||||
if await WebRTCClient.isAuthorized(for: .video) {
|
||||
client.setCameraEnabled(!call.localMediaSources.camera)
|
||||
} else { WebRTCClient.showUnauthorizedAlert(for: .video) }
|
||||
}
|
||||
}
|
||||
.disabled(call.initialCallType == .audio && client.activeCall?.peerHasOldVersion == true)
|
||||
}
|
||||
|
||||
@ViewBuilder private func flipCameraButton() -> some View {
|
||||
controlButton(call, "arrow.triangle.2.circlepath") {
|
||||
controlButton(call, "arrow.triangle.2.circlepath", padding: 12) {
|
||||
Task {
|
||||
client.flipCamera()
|
||||
if await WebRTCClient.isAuthorized(for: .video) {
|
||||
client.flipCamera()
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@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 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)
|
||||
}
|
||||
|
||||
private func callButton(_ imageName: String, width: CGFloat, height: CGFloat, _ perform: @escaping () -> Void) -> some View {
|
||||
@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 {
|
||||
Button {
|
||||
perform()
|
||||
} label: {
|
||||
Image(systemName: imageName)
|
||||
.resizable()
|
||||
.scaledToFit()
|
||||
.frame(maxWidth: width, maxHeight: height)
|
||||
.padding(padding)
|
||||
.frame(width: 60, height: 60)
|
||||
.background(background)
|
||||
}
|
||||
.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, localMedia: .video), client: WebRTCClient(Binding.constant(nil), { _ in }, Binding.constant(nil)))
|
||||
ActiveCallOverlay(call: Call(direction: .incoming, contact: Contact.sampleData, callUUID: UUID().uuidString.lowercased(), callState: .offerSent, initialCallType: .video), client: WebRTCClient({ _ in }, Binding.constant(nil)))
|
||||
.background(.black)
|
||||
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)))
|
||||
ActiveCallOverlay(call: Call(direction: .incoming, contact: Contact.sampleData, callUUID: UUID().uuidString.lowercased(), callState: .offerSent, initialCallType: .audio), client: WebRTCClient({ _ 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(media: .audio, enable: !action.isMuted, callUUID: action.callUUID.uuidString.lowercased()) {
|
||||
if callManager.enableMedia(source: .mic, 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 supportsVideo = ChatModel.shared.activeCall?.supportsVideo == true
|
||||
if supportsVideo {
|
||||
let hasVideo = ChatModel.shared.activeCall?.hasVideo == true
|
||||
if hasVideo {
|
||||
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 supportsVideo {
|
||||
} else if hasVideo {
|
||||
await MainActor.run { try? audioSession.overrideOutputAudioPort(.speaker) }
|
||||
}
|
||||
}
|
||||
@@ -357,11 +357,9 @@ class CallController: NSObject, CXProviderDelegate, PKPushRegistryDelegate, Obse
|
||||
self.provider.reportCall(with: uuid, updated: update)
|
||||
}
|
||||
} else if callManager.startOutgoingCall(callUUID: callUUID) {
|
||||
if callManager.startOutgoingCall(callUUID: callUUID) {
|
||||
logger.debug("CallController.startCall: call started")
|
||||
} else {
|
||||
logger.error("CallController.startCall: no active call")
|
||||
}
|
||||
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, localMedia: media)
|
||||
let call = Call(direction: .outgoing, contact: contact, callUUID: uuid, callState: .waitCapabilities, initialCallType: 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.localMedia)) }
|
||||
Task { await m.callCommand.processCommand(.capabilities(media: call.initialCallType)) }
|
||||
return true
|
||||
}
|
||||
return false
|
||||
@@ -44,7 +44,7 @@ class CallManager {
|
||||
contact: invitation.contact,
|
||||
callUUID: invitation.callUUID,
|
||||
callState: .invitationAccepted,
|
||||
localMedia: invitation.callType.media,
|
||||
initialCallType: invitation.callType.media,
|
||||
sharedKey: invitation.sharedKey
|
||||
)
|
||||
call.speakerEnabled = invitation.callType.media == .video
|
||||
@@ -68,10 +68,10 @@ class CallManager {
|
||||
}
|
||||
}
|
||||
|
||||
func enableMedia(media: CallMediaType, enable: Bool, callUUID: String) -> Bool {
|
||||
func enableMedia(source: CallMediaSource, enable: Bool, callUUID: String) -> Bool {
|
||||
if let call = ChatModel.shared.activeCall, call.callUUID == callUUID {
|
||||
let m = ChatModel.shared
|
||||
Task { await m.callCommand.processCommand(.media(media: media, enable: enable)) }
|
||||
Task { await m.callCommand.processCommand(.media(source: source, enable: enable)) }
|
||||
return true
|
||||
}
|
||||
return false
|
||||
|
||||
@@ -10,40 +10,49 @@ import AVKit
|
||||
|
||||
struct CallViewRemote: UIViewRepresentable {
|
||||
var client: WebRTCClient
|
||||
var activeCall: Binding<WebRTCClient.Call?>
|
||||
@ObservedObject var call: 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()
|
||||
if let call = activeCall.wrappedValue {
|
||||
let remoteRenderer = RTCMTLVideoView(frame: view.frame)
|
||||
remoteRenderer.videoContentMode = .scaleAspectFill
|
||||
client.addRemoteRenderer(call, remoteRenderer)
|
||||
addSubviewAndResize(remoteRenderer, into: view)
|
||||
let remoteCameraRenderer = RTCMTLVideoView(frame: view.frame)
|
||||
remoteCameraRenderer.videoContentMode = contentMode
|
||||
remoteCameraRenderer.tag = 0
|
||||
|
||||
if AVPictureInPictureController.isPictureInPictureSupported() {
|
||||
makeViewWithRTCRenderer(call, remoteRenderer, view, context)
|
||||
}
|
||||
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)
|
||||
}
|
||||
return view
|
||||
}
|
||||
|
||||
func makeViewWithRTCRenderer(_ call: WebRTCClient.Call, _ remoteRenderer: RTCMTLVideoView, _ view: UIView, _ context: Context) {
|
||||
let pipRemoteRenderer = RTCMTLVideoView(frame: view.frame)
|
||||
pipRemoteRenderer.videoContentMode = .scaleAspectFill
|
||||
|
||||
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
|
||||
|
||||
let pipVideoCallViewController = AVPictureInPictureVideoCallViewController()
|
||||
pipVideoCallViewController.preferredContentSize = CGSize(width: 1080, height: 1920)
|
||||
addSubviewAndResize(pipRemoteRenderer, into: pipVideoCallViewController.view)
|
||||
let pipContentSource = AVPictureInPictureController.ContentSource(
|
||||
activeVideoCallSourceView: view,
|
||||
contentViewController: pipVideoCallViewController
|
||||
@@ -55,7 +64,9 @@ struct CallViewRemote: UIViewRepresentable {
|
||||
context.coordinator.pipController = pipController
|
||||
context.coordinator.willShowHide = { show in
|
||||
if show {
|
||||
client.addRemoteRenderer(call, pipRemoteRenderer)
|
||||
client.addRemoteCameraRenderer(pipRemoteCameraRenderer)
|
||||
client.addRemoteScreenRenderer(pipRemoteScreenRenderer)
|
||||
context.coordinator.relayout()
|
||||
DispatchQueue.main.asyncAfter(deadline: .now() + 0.1) {
|
||||
activeCallViewIsCollapsed = true
|
||||
}
|
||||
@@ -67,13 +78,29 @@ struct CallViewRemote: UIViewRepresentable {
|
||||
}
|
||||
context.coordinator.didShowHide = { show in
|
||||
if show {
|
||||
remoteRenderer.isHidden = true
|
||||
remoteCameraRenderer.isHidden = true
|
||||
remoteScreenRenderer.isHidden = true
|
||||
} else {
|
||||
client.removeRemoteRenderer(call, pipRemoteRenderer)
|
||||
remoteRenderer.isHidden = false
|
||||
client.removeRemoteCameraRenderer(pipRemoteCameraRenderer)
|
||||
client.removeRemoteScreenRenderer(pipRemoteScreenRenderer)
|
||||
remoteCameraRenderer.isHidden = false
|
||||
remoteScreenRenderer.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 */ {
|
||||
@@ -88,24 +115,50 @@ struct CallViewRemote: UIViewRepresentable {
|
||||
}
|
||||
|
||||
func makeCoordinator() -> Coordinator {
|
||||
Coordinator()
|
||||
Coordinator(client)
|
||||
}
|
||||
|
||||
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)
|
||||
}
|
||||
@@ -127,11 +180,20 @@ 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)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -148,51 +210,109 @@ 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, activeCall: Binding<WebRTCClient.Call?>, localRendererAspectRatio: Binding<CGFloat?>, pipShown: Binding<Bool>) {
|
||||
init(client: WebRTCClient, 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()
|
||||
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
|
||||
}
|
||||
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
|
||||
}
|
||||
}
|
||||
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(_ view: UIView, into containerView: UIView) {
|
||||
containerView.addSubview(view)
|
||||
view.translatesAutoresizingMaskIntoConstraints = false
|
||||
containerView.addConstraints(NSLayoutConstraint.constraints(withVisualFormat: "H:|[view]|",
|
||||
options: [],
|
||||
metrics: nil,
|
||||
views: ["view": view]))
|
||||
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.addConstraints(NSLayoutConstraint.constraints(withVisualFormat: "V:|[view]|",
|
||||
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]|",
|
||||
options: [],
|
||||
metrics: nil,
|
||||
views: ["view": view]))
|
||||
views: ["fullscreen": fullscreen]
|
||||
)
|
||||
let constraintFullscreenH = NSLayoutConstraint.constraints(
|
||||
withVisualFormat: "H:|[fullscreen]|",
|
||||
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)
|
||||
}
|
||||
containerView.layoutIfNeeded()
|
||||
}
|
||||
|
||||
@@ -19,14 +19,13 @@ class Call: ObservableObject, Equatable {
|
||||
var direction: CallDirection
|
||||
var contact: Contact
|
||||
var callUUID: String?
|
||||
var localMedia: CallMediaType
|
||||
var initialCallType: CallMediaType
|
||||
@Published var localMediaSources: CallMediaSources
|
||||
@Published var callState: CallState
|
||||
@Published var localCapabilities: CallCapabilities?
|
||||
@Published var peerMedia: CallMediaType?
|
||||
@Published var peerMediaSources: CallMediaSources = CallMediaSources()
|
||||
@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
|
||||
|
||||
@@ -35,32 +34,33 @@ class Call: ObservableObject, Equatable {
|
||||
contact: Contact,
|
||||
callUUID: String?,
|
||||
callState: CallState,
|
||||
localMedia: CallMediaType,
|
||||
initialCallType: CallMediaType,
|
||||
sharedKey: String? = nil
|
||||
) {
|
||||
self.direction = direction
|
||||
self.contact = contact
|
||||
self.callUUID = callUUID
|
||||
self.callState = callState
|
||||
self.localMedia = localMedia
|
||||
self.initialCallType = initialCallType
|
||||
self.sharedKey = sharedKey
|
||||
self.videoEnabled = localMedia == .video
|
||||
self.localMediaSources = CallMediaSources(
|
||||
mic: AVCaptureDevice.authorizationStatus(for: .audio) == .authorized,
|
||||
camera: initialCallType == .video && AVCaptureDevice.authorizationStatus(for: .video) == .authorized)
|
||||
}
|
||||
|
||||
var encrypted: Bool { get { localEncrypted && sharedKey != nil } }
|
||||
var localEncrypted: Bool { get { localCapabilities?.encryption ?? false } }
|
||||
private 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 hasMedia: Bool { get { callState == .offerSent || callState == .negotiated || callState == .connected } }
|
||||
var supportsVideo: Bool { get { peerMedia == .video || localMedia == .video } }
|
||||
var hasVideo: Bool { get { localMediaSources.hasVideo || peerMediaSources.hasVideo } }
|
||||
}
|
||||
|
||||
enum CallDirection {
|
||||
@@ -105,18 +105,28 @@ 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(media: CallMediaType, enable: Bool)
|
||||
case media(source: CallMediaSource, enable: Bool)
|
||||
case end
|
||||
|
||||
enum CodingKeys: String, CodingKey {
|
||||
case type
|
||||
case media
|
||||
case source
|
||||
case aesKey
|
||||
case offer
|
||||
case answer
|
||||
@@ -167,9 +177,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(media, enable):
|
||||
case let .media(source, enable):
|
||||
try container.encode("media", forKey: .type)
|
||||
try container.encode(media, forKey: .media)
|
||||
try container.encode(source, forKey: .media)
|
||||
try container.encode(enable, forKey: .enable)
|
||||
case .end:
|
||||
try container.encode("end", forKey: .type)
|
||||
@@ -205,9 +215,9 @@ enum WCallCommand: Equatable, Encodable, Decodable {
|
||||
let iceCandidates = try container.decode(String.self, forKey: CodingKeys.iceCandidates)
|
||||
self = .ice(iceCandidates: iceCandidates)
|
||||
case "media":
|
||||
let media = try container.decode(CallMediaType.self, forKey: CodingKeys.media)
|
||||
let source = try container.decode(CallMediaSource.self, forKey: CodingKeys.source)
|
||||
let enable = try container.decode(Bool.self, forKey: CodingKeys.enable)
|
||||
self = .media(media: media, enable: enable)
|
||||
self = .media(source: source, enable: enable)
|
||||
case "end":
|
||||
self = .end
|
||||
default:
|
||||
@@ -224,6 +234,7 @@ 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)
|
||||
@@ -238,6 +249,8 @@ enum WCallResponse: Equatable, Decodable {
|
||||
case state
|
||||
case connectionInfo
|
||||
case message
|
||||
case source
|
||||
case enabled
|
||||
}
|
||||
|
||||
var respType: String {
|
||||
@@ -249,6 +262,7 @@ 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"
|
||||
@@ -283,6 +297,10 @@ 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":
|
||||
@@ -324,6 +342,10 @@ 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:
|
||||
@@ -376,7 +398,7 @@ actor WebRTCCommandProcessor {
|
||||
func shouldRunCommand(_ client: WebRTCClient, _ c: WCallCommand) -> Bool {
|
||||
switch c {
|
||||
case .capabilities, .start, .offer, .end: true
|
||||
default: client.activeCall.wrappedValue != nil
|
||||
default: client.activeCall != nil
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -23,15 +23,24 @@ final class WebRTCClient: NSObject, RTCVideoViewDelegate, RTCFrameEncryptorDeleg
|
||||
struct Call {
|
||||
var connection: RTCPeerConnection
|
||||
var iceCandidates: IceCandidates
|
||||
var localMedia: CallMediaType
|
||||
var localCamera: RTCVideoCapturer?
|
||||
var localVideoSource: RTCVideoSource?
|
||||
var localStream: RTCVideoTrack?
|
||||
var remoteStream: RTCVideoTrack?
|
||||
var device: AVCaptureDevice.Position = .front
|
||||
var localAudioTrack: RTCAudioTrack?
|
||||
var localVideoTrack: RTCVideoTrack?
|
||||
var remoteAudioTrack: RTCAudioTrack?
|
||||
var remoteVideoTrack: RTCVideoTrack?
|
||||
var remoteScreenAudioTrack: RTCAudioTrack?
|
||||
var remoteScreenVideoTrack: RTCVideoTrack?
|
||||
var device: AVCaptureDevice.Position
|
||||
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 {
|
||||
@@ -51,17 +60,20 @@ 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: Binding<Call?>
|
||||
var activeCall: Call?
|
||||
var notConnectedCall: NotConnectedCall?
|
||||
private var localRendererAspectRatio: Binding<CGFloat?>
|
||||
|
||||
var cameraRenderers: [RTCVideoRenderer] = []
|
||||
var screenRenderers: [RTCVideoRenderer] = []
|
||||
|
||||
@available(*, unavailable)
|
||||
override init() {
|
||||
fatalError("Unimplemented")
|
||||
}
|
||||
|
||||
required init(_ activeCall: Binding<Call?>, _ sendCallResponse: @escaping (WVAPIMessage) async -> Void, _ localRendererAspectRatio: Binding<CGFloat?>) {
|
||||
required init(_ 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()
|
||||
@@ -78,39 +90,45 @@ 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
|
||||
createAudioSender(connection)
|
||||
var localStream: RTCVideoTrack? = nil
|
||||
var remoteStream: RTCVideoTrack? = nil
|
||||
let device = notConnectedCall?.device ?? .front
|
||||
var localCamera: RTCVideoCapturer? = nil
|
||||
var localVideoSource: RTCVideoSource? = nil
|
||||
if mediaType == .video {
|
||||
(localStream, remoteStream, localCamera, localVideoSource) = createVideoSender(connection)
|
||||
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)
|
||||
}
|
||||
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,
|
||||
localVideoSource: localVideoSource,
|
||||
localStream: localStream,
|
||||
remoteStream: remoteStream,
|
||||
localAudioTrack: localAudioTrack,
|
||||
localVideoTrack: localVideoTrack,
|
||||
device: device,
|
||||
aesKey: aesKey,
|
||||
frameEncryptor: frameEncryptor,
|
||||
frameDecryptor: frameDecryptor
|
||||
frameDecryptor: frameDecryptor,
|
||||
peerHasOldVersion: false
|
||||
)
|
||||
}
|
||||
|
||||
@@ -151,18 +169,24 @@ final class WebRTCClient: NSObject, RTCVideoViewDelegate, RTCFrameEncryptorDeleg
|
||||
|
||||
func sendCallCommand(command: WCallCommand) async {
|
||||
var resp: WCallResponse? = nil
|
||||
let pc = activeCall.wrappedValue?.connection
|
||||
let pc = activeCall?.connection
|
||||
switch command {
|
||||
case .capabilities:
|
||||
case let .capabilities(media): // outgoing
|
||||
let localCameraAndTrack: (RTCVideoCapturer, RTCVideoTrack)? = media == .video
|
||||
? createVideoTrackAndStartCapture(.front)
|
||||
: nil
|
||||
notConnectedCall = NotConnectedCall(audioTrack: createAudioTrack(), localCameraAndTrack: localCameraAndTrack, device: .front)
|
||||
resp = .capabilities(capabilities: CallCapabilities(encryption: WebRTCClient.enableEncryption))
|
||||
case let .start(media: media, aesKey, iceServers, relay):
|
||||
case let .start(media: media, aesKey, iceServers, relay): // incoming
|
||||
logger.debug("starting incoming call - create webrtc session")
|
||||
if activeCall.wrappedValue != nil { endCall() }
|
||||
if activeCall != nil { endCall() }
|
||||
let encryption = WebRTCClient.enableEncryption
|
||||
let call = initializeCall(iceServers?.toWebRTCIceServers(), media, encryption ? aesKey : nil, relay)
|
||||
activeCall.wrappedValue = call
|
||||
activeCall = call
|
||||
setupLocalTracks(true, 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())),
|
||||
@@ -172,18 +196,24 @@ 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):
|
||||
if activeCall.wrappedValue != nil {
|
||||
case let .offer(offer, iceCandidates, media, aesKey, iceServers, relay): // outgoing
|
||||
if activeCall != 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.wrappedValue = call
|
||||
activeCall = 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)
|
||||
@@ -200,7 +230,7 @@ final class WebRTCClient: NSObject, RTCVideoViewDelegate, RTCFrameEncryptorDeleg
|
||||
}
|
||||
}
|
||||
}
|
||||
case let .answer(answer, iceCandidates):
|
||||
case let .answer(answer, iceCandidates): // incoming
|
||||
if pc == nil {
|
||||
resp = .error(message: "answer: call not started")
|
||||
} else if pc?.localDescription == nil {
|
||||
@@ -212,6 +242,9 @@ 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 {
|
||||
@@ -226,13 +259,11 @@ final class WebRTCClient: NSObject, RTCVideoViewDelegate, RTCFrameEncryptorDeleg
|
||||
} else {
|
||||
resp = .error(message: "ice: call not started")
|
||||
}
|
||||
case let .media(media, enable):
|
||||
if activeCall.wrappedValue == nil {
|
||||
case let .media(source, enable):
|
||||
if activeCall == nil {
|
||||
resp = .error(message: "media: call not started")
|
||||
} else if activeCall.wrappedValue?.localMedia == .audio && media == .video {
|
||||
resp = .error(message: "media: no video")
|
||||
} else {
|
||||
enableMedia(media, enable)
|
||||
await enableMedia(source, enable)
|
||||
resp = .ok
|
||||
}
|
||||
case .end:
|
||||
@@ -247,7 +278,7 @@ final class WebRTCClient: NSObject, RTCVideoViewDelegate, RTCFrameEncryptorDeleg
|
||||
|
||||
func getInitialIceCandidates() async -> [RTCIceCandidate] {
|
||||
await untilIceComplete(timeoutMs: 750, stepMs: 150) {}
|
||||
let candidates = await activeCall.wrappedValue?.iceCandidates.getAndClear() ?? []
|
||||
let candidates = await activeCall?.iceCandidates.getAndClear() ?? []
|
||||
logger.debug("WebRTCClient: sending initial ice candidates: \(candidates.count)")
|
||||
return candidates
|
||||
}
|
||||
@@ -255,7 +286,7 @@ final class WebRTCClient: NSObject, RTCVideoViewDelegate, RTCFrameEncryptorDeleg
|
||||
func waitForMoreIceCandidates() {
|
||||
Task {
|
||||
await untilIceComplete(timeoutMs: 12000, stepMs: 1500) {
|
||||
let candidates = await self.activeCall.wrappedValue?.iceCandidates.getAndClear() ?? []
|
||||
let candidates = await self.activeCall?.iceCandidates.getAndClear() ?? []
|
||||
if candidates.count > 0 {
|
||||
logger.debug("WebRTCClient: sending more ice candidates: \(candidates.count)")
|
||||
await self.sendIceCandidates(candidates)
|
||||
@@ -272,25 +303,202 @@ final class WebRTCClient: NSObject, RTCVideoViewDelegate, RTCFrameEncryptorDeleg
|
||||
)
|
||||
}
|
||||
|
||||
func enableMedia(_ media: CallMediaType, _ enable: Bool) {
|
||||
logger.debug("WebRTCClient: enabling media \(media.rawValue) \(enable)")
|
||||
media == .video ? setVideoEnabled(enable) : setAudioEnabled(enable)
|
||||
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 addLocalRenderer(_ activeCall: Call, _ renderer: RTCEAGLVideoView) {
|
||||
activeCall.localStream?.add(renderer)
|
||||
@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)
|
||||
}
|
||||
}
|
||||
// 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.wrappedValue?.aesKey?.cString(using: .utf8),
|
||||
if var key: [CChar] = activeCall?.aesKey?.cString(using: .utf8),
|
||||
let pointer: UnsafeMutableRawPointer = malloc(encrypted.count) {
|
||||
memcpy(pointer, (encrypted as NSData).bytes, encrypted.count)
|
||||
let isKeyFrame = encrypted[0] & 1 == 0
|
||||
@@ -304,7 +512,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.wrappedValue?.aesKey?.cString(using: .utf8),
|
||||
if var key: [CChar] = activeCall?.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
|
||||
@@ -327,18 +535,42 @@ final class WebRTCClient: NSObject, RTCVideoViewDelegate, RTCFrameEncryptorDeleg
|
||||
}
|
||||
}
|
||||
|
||||
func addRemoteRenderer(_ activeCall: Call, _ renderer: RTCVideoRenderer) {
|
||||
activeCall.remoteStream?.add(renderer)
|
||||
func addRemoteCameraRenderer(_ renderer: RTCVideoRenderer) {
|
||||
if activeCall?.remoteVideoTrack != nil {
|
||||
activeCall?.remoteVideoTrack?.add(renderer)
|
||||
} else {
|
||||
cameraRenderers.append(renderer)
|
||||
}
|
||||
}
|
||||
|
||||
func removeRemoteRenderer(_ activeCall: Call, _ renderer: RTCVideoRenderer) {
|
||||
activeCall.remoteStream?.remove(renderer)
|
||||
func removeRemoteCameraRenderer(_ renderer: RTCVideoRenderer) {
|
||||
if activeCall?.remoteVideoTrack != nil {
|
||||
activeCall?.remoteVideoTrack?.remove(renderer)
|
||||
} else {
|
||||
cameraRenderers.removeAll(where: { $0.isEqual(renderer) })
|
||||
}
|
||||
}
|
||||
|
||||
func startCaptureLocalVideo(_ activeCall: Call) {
|
||||
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?) {
|
||||
#if targetEnvironment(simulator)
|
||||
guard
|
||||
let capturer = activeCall.localCamera as? RTCFileVideoCapturer
|
||||
let capturer = (activeCall?.localCamera ?? notConnectedCall?.localCameraAndTrack?.0) as? RTCFileVideoCapturer
|
||||
else {
|
||||
logger.error("Unable to work with a file capturer")
|
||||
return
|
||||
@@ -348,10 +580,10 @@ final class WebRTCClient: NSObject, RTCVideoViewDelegate, RTCFrameEncryptorDeleg
|
||||
capturer.startCapturing(fromFileNamed: "sounds/video.mp4")
|
||||
#else
|
||||
guard
|
||||
let capturer = activeCall.localCamera as? RTCCameraVideoCapturer,
|
||||
let camera = (RTCCameraVideoCapturer.captureDevices().first { $0.position == activeCall.device })
|
||||
let capturer = capturer as? RTCCameraVideoCapturer,
|
||||
let camera = (RTCCameraVideoCapturer.captureDevices().first { $0.position == device })
|
||||
else {
|
||||
logger.error("Unable to find a camera")
|
||||
logger.error("Unable to find a camera or local track")
|
||||
return
|
||||
}
|
||||
|
||||
@@ -377,19 +609,6 @@ 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)
|
||||
@@ -397,7 +616,7 @@ final class WebRTCClient: NSObject, RTCVideoViewDelegate, RTCFrameEncryptorDeleg
|
||||
return audioTrack
|
||||
}
|
||||
|
||||
private func createVideoTrack() -> (RTCVideoTrack, RTCVideoCapturer, RTCVideoSource) {
|
||||
private func createVideoTrackAndStartCapture(_ device: AVCaptureDevice.Position) -> (RTCVideoCapturer, RTCVideoTrack) {
|
||||
let localVideoSource = WebRTCClient.factory.videoSource()
|
||||
|
||||
#if targetEnvironment(simulator)
|
||||
@@ -407,7 +626,8 @@ final class WebRTCClient: NSObject, RTCVideoViewDelegate, RTCFrameEncryptorDeleg
|
||||
#endif
|
||||
|
||||
let localVideoTrack = WebRTCClient.factory.videoTrack(with: localVideoSource, trackId: "video0")
|
||||
return (localVideoTrack, localCamera, localVideoSource)
|
||||
startCaptureLocalVideo(device, localCamera)
|
||||
return (localCamera, localVideoTrack)
|
||||
}
|
||||
|
||||
func endCall() {
|
||||
@@ -420,15 +640,16 @@ final class WebRTCClient: NSObject, RTCVideoViewDelegate, RTCFrameEncryptorDeleg
|
||||
}
|
||||
|
||||
private func _endCall() {
|
||||
guard let call = activeCall.wrappedValue else { return }
|
||||
(notConnectedCall?.localCameraAndTrack?.0 as? RTCCameraVideoCapturer)?.stopCapture()
|
||||
guard let call = activeCall 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 {
|
||||
@@ -437,7 +658,7 @@ final class WebRTCClient: NSObject, RTCVideoViewDelegate, RTCFrameEncryptorDeleg
|
||||
_ = try? await Task.sleep(nanoseconds: stepMs * 1000000)
|
||||
t += stepMs
|
||||
await action()
|
||||
} while t < timeoutMs && activeCall.wrappedValue?.connection.iceGatheringState != .complete
|
||||
} while t < timeoutMs && activeCall?.connection.iceGatheringState != .complete
|
||||
}
|
||||
}
|
||||
|
||||
@@ -498,11 +719,40 @@ 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 call = activeCall.wrappedValue,
|
||||
let connectionStateString = newState.toString(),
|
||||
guard let connectionStateString = newState.toString(),
|
||||
let iceConnectionStateString = connection.iceConnectionState.toString(),
|
||||
let iceGatheringStateString = connection.iceGatheringState.toString(),
|
||||
let signalingStateString = connection.signalingState.toString()
|
||||
@@ -523,18 +773,14 @@ extension WebRTCClient: RTCPeerConnectionDelegate {
|
||||
|
||||
switch newState {
|
||||
case .checking:
|
||||
if let frameDecryptor = activeCall.wrappedValue?.frameDecryptor {
|
||||
if let frameDecryptor = activeCall?.frameDecryptor {
|
||||
connection.receivers.forEach { $0.setRtcFrameDecryptor(frameDecryptor) }
|
||||
}
|
||||
let enableSpeaker: Bool
|
||||
switch call.localMedia {
|
||||
case .video: enableSpeaker = true
|
||||
default: enableSpeaker = false
|
||||
}
|
||||
let enableSpeaker: Bool = ChatModel.shared.activeCall?.localMediaSources.hasVideo == true
|
||||
setSpeakerEnabledAndConfigureSession(enableSpeaker)
|
||||
case .connected: sendConnectedEvent(connection)
|
||||
case .disconnected, .failed: endCall()
|
||||
default: do {}
|
||||
default: ()
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -546,7 +792,7 @@ extension WebRTCClient: RTCPeerConnectionDelegate {
|
||||
func peerConnection(_ connection: RTCPeerConnection, didGenerate candidate: WebRTC.RTCIceCandidate) {
|
||||
// logger.debug("Connection generated candidate \(candidate.debugDescription)")
|
||||
Task {
|
||||
await self.activeCall.wrappedValue?.iceCandidates.append(candidate.toCandidate(nil, nil))
|
||||
await self.activeCall?.iceCandidates.append(candidate.toCandidate(nil, nil))
|
||||
}
|
||||
}
|
||||
|
||||
@@ -601,11 +847,42 @@ extension WebRTCClient: RTCPeerConnectionDelegate {
|
||||
}
|
||||
|
||||
extension WebRTCClient {
|
||||
func setAudioEnabled(_ enabled: Bool) {
|
||||
setTrackEnabled(RTCAudioTrack.self, enabled)
|
||||
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 setSpeakerEnabledAndConfigureSession( _ enabled: Bool) {
|
||||
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) {
|
||||
logger.debug("WebRTCClient: configuring session with speaker enabled \(enabled)")
|
||||
audioQueue.async { [weak self] in
|
||||
guard let self = self else { return }
|
||||
@@ -618,7 +895,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, let preferred = self.rtcAudioSession.session.preferredInputDevice() {
|
||||
if hasExternalAudioDevice && !skipExternalDevice, let preferred = self.rtcAudioSession.session.preferredInputDevice() {
|
||||
try self.rtcAudioSession.setPreferredInput(preferred)
|
||||
} else {
|
||||
try self.rtcAudioSession.overrideOutputAudioPort(.speaker)
|
||||
@@ -628,7 +905,7 @@ extension WebRTCClient {
|
||||
try self.rtcAudioSession.setMode(AVAudioSession.Mode.voiceChat.rawValue)
|
||||
try self.rtcAudioSession.overrideOutputAudioPort(.none)
|
||||
}
|
||||
if hasExternalAudioDevice {
|
||||
if hasExternalAudioDevice && !skipExternalDevice {
|
||||
logger.debug("WebRTCClient: configuring session with external device available, skip configuring speaker")
|
||||
}
|
||||
try self.rtcAudioSession.setActive(true)
|
||||
@@ -659,25 +936,59 @@ extension WebRTCClient {
|
||||
}
|
||||
}
|
||||
|
||||
func setVideoEnabled(_ enabled: Bool) {
|
||||
setTrackEnabled(RTCVideoTrack.self, enabled)
|
||||
@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 flipCamera() {
|
||||
switch activeCall.wrappedValue?.device {
|
||||
case .front: activeCall.wrappedValue?.device = .back
|
||||
case .back: activeCall.wrappedValue?.device = .front
|
||||
default: ()
|
||||
let device = activeCall?.device ?? notConnectedCall?.device
|
||||
if activeCall != nil {
|
||||
activeCall?.device = device == .front ? .back : .front
|
||||
} else {
|
||||
notConnectedCall?.device = device == .front ? .back : .front
|
||||
}
|
||||
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 }
|
||||
startCaptureLocalVideo(
|
||||
activeCall?.device ?? notConnectedCall?.device,
|
||||
(activeCall?.localCamera ?? notConnectedCall?.localCameraAndTrack?.0) as? RTCCameraVideoCapturer
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -75,9 +75,14 @@ enum MetaColorMode {
|
||||
}
|
||||
}
|
||||
|
||||
var statusSpacer: Text {
|
||||
func statusSpacer(_ sent: Bool) -> Text {
|
||||
switch self {
|
||||
case .normal, .transparent: Text(Image(systemName: "circlebadge.fill")).foregroundColor(.clear)
|
||||
case .normal, .transparent:
|
||||
Text(
|
||||
sent
|
||||
? Image("checkmark.wide")
|
||||
: Image(systemName: "circlebadge.fill")
|
||||
).foregroundColor(.clear)
|
||||
case .invertedMaterial: Text(" ").kerning(13)
|
||||
}
|
||||
}
|
||||
@@ -130,10 +135,10 @@ func ciMetaText(
|
||||
colorMode.resolve(statusColor)
|
||||
}
|
||||
r = r + colored(Text(image), metaColor)
|
||||
space = Text(" ")
|
||||
} else if !meta.disappearing {
|
||||
space = colorMode.statusSpacer + Text(" ")
|
||||
r = r + colorMode.statusSpacer(meta.itemStatus.sent)
|
||||
}
|
||||
space = Text(" ")
|
||||
}
|
||||
if let enc = encrypted {
|
||||
appendSpace()
|
||||
|
||||
@@ -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 apiGroupMemberInfo(groupInfo.apiId, groupMember.groupMemberId)
|
||||
let (member, stats) = try apiGroupMemberInfoSync(groupInfo.apiId, groupMember.groupMemberId)
|
||||
if let s = stats {
|
||||
m.updateGroupMemberConnectionStats(groupInfo, member, s)
|
||||
}
|
||||
|
||||
@@ -14,12 +14,11 @@ struct ChatItemForwardingView: View {
|
||||
@EnvironmentObject var theme: AppTheme
|
||||
@Environment(\.dismiss) var dismiss
|
||||
|
||||
var ci: ChatItem
|
||||
var chatItems: [ChatItem]
|
||||
var fromChatInfo: ChatInfo
|
||||
@Binding var composeState: ComposeState
|
||||
|
||||
@State private var searchText: String = ""
|
||||
@FocusState private var searchFocused
|
||||
@State private var alert: SomeAlert?
|
||||
private let chatsToForwardTo = filterChatsToForwardTo(chats: ChatModel.shared.chats)
|
||||
|
||||
@@ -46,8 +45,6 @@ struct ChatItemForwardingView: View {
|
||||
VStack(alignment: .leading) {
|
||||
if !chatsToForwardTo.isEmpty {
|
||||
List {
|
||||
searchFieldView(text: $searchText, focussed: $searchFocused, theme.colors.onBackground, theme.colors.secondary)
|
||||
.padding(.leading, 2)
|
||||
let s = searchText.trimmingCharacters(in: .whitespaces).localizedLowercase
|
||||
let chats = s == "" ? chatsToForwardTo : chatsToForwardTo.filter { foundChat($0, s) }
|
||||
ForEach(chats) { chat in
|
||||
@@ -55,6 +52,7 @@ struct ChatItemForwardingView: View {
|
||||
.disabled(chatModel.deletedChats.contains(chat.chatInfo.id))
|
||||
}
|
||||
}
|
||||
.searchable(text: $searchText, placement: .navigationBarDrawer(displayMode: .always))
|
||||
.modifier(ThemedBackground(grouped: true))
|
||||
} else {
|
||||
ZStack {
|
||||
@@ -73,11 +71,14 @@ struct ChatItemForwardingView: View {
|
||||
}
|
||||
|
||||
@ViewBuilder private func forwardListChatView(_ chat: Chat) -> some View {
|
||||
let prohibited = chat.prohibitedByPref(
|
||||
hasSimplexLink: hasSimplexLink(ci.content.msgContent?.text),
|
||||
isMediaOrFileAttachment: ci.content.msgContent?.isMediaOrFileAttachment ?? false,
|
||||
isVoice: ci.content.msgContent?.isVoice ?? false
|
||||
)
|
||||
let prohibited = chatItems.map { ci in
|
||||
chat.prohibitedByPref(
|
||||
hasSimplexLink: hasSimplexLink(ci.content.msgContent?.text),
|
||||
isMediaOrFileAttachment: ci.content.msgContent?.isMediaOrFileAttachment ?? false,
|
||||
isVoice: ci.content.msgContent?.isVoice ?? false
|
||||
)
|
||||
}.contains(true)
|
||||
|
||||
Button {
|
||||
if prohibited {
|
||||
alert = SomeAlert(
|
||||
@@ -93,10 +94,10 @@ struct ChatItemForwardingView: View {
|
||||
composeState = ComposeState(
|
||||
message: composeState.message,
|
||||
preview: composeState.linkPreview != nil ? composeState.preview : .noPreview,
|
||||
contextItem: .forwardingItem(chatItem: ci, fromChatInfo: fromChatInfo)
|
||||
contextItem: .forwardingItems(chatItems: chatItems, fromChatInfo: fromChatInfo)
|
||||
)
|
||||
} else {
|
||||
composeState = ComposeState.init(forwardingItem: ci, fromChatInfo: fromChatInfo)
|
||||
composeState = ComposeState.init(forwardingItems: chatItems, fromChatInfo: fromChatInfo)
|
||||
ItemsModel.shared.loadOpenChat(chat.id)
|
||||
}
|
||||
}
|
||||
@@ -123,7 +124,7 @@ struct ChatItemForwardingView: View {
|
||||
|
||||
#Preview {
|
||||
ChatItemForwardingView(
|
||||
ci: ChatItem.getSample(1, .directSnd, .now, "hello"),
|
||||
chatItems: [ChatItem.getSample(1, .directSnd, .now, "hello")],
|
||||
fromChatInfo: .direct(contact: Contact.sampleData),
|
||||
composeState: Binding.constant(ComposeState(message: "hello"))
|
||||
).environmentObject(CurrentColors.toAppTheme())
|
||||
|
||||
@@ -42,6 +42,7 @@ struct ChatView: View {
|
||||
@State private var showGroupLinkSheet: Bool = false
|
||||
@State private var groupLink: String?
|
||||
@State private var groupLinkMemberRole: GroupMemberRole = .member
|
||||
@State private var forwardedChatItems: [ChatItem] = []
|
||||
@State private var selectedChatItems: Set<Int64>? = nil
|
||||
@State private var showDeleteSelectedMessages: Bool = false
|
||||
@State private var allowToDeleteSelectedMessagesForAll: Bool = false
|
||||
@@ -98,7 +99,8 @@ struct ChatView: View {
|
||||
if case let .group(groupInfo) = chat.chatInfo {
|
||||
showModerateSelectedMessagesAlert(groupInfo)
|
||||
}
|
||||
}
|
||||
},
|
||||
forwardItems: forwardSelectedMessages
|
||||
)
|
||||
}
|
||||
}
|
||||
@@ -135,6 +137,30 @@ 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
|
||||
if !isPresented {
|
||||
forwardedChatItems = []
|
||||
selectedChatItems = nil
|
||||
}
|
||||
}
|
||||
)) {
|
||||
if #available(iOS 16.0, *) {
|
||||
ChatItemForwardingView(chatItems: forwardedChatItems, fromChatInfo: chat.chatInfo, composeState: $composeState)
|
||||
.presentationDetents([.fraction(0.8)])
|
||||
} else {
|
||||
ChatItemForwardingView(chatItems: forwardedChatItems, fromChatInfo: chat.chatInfo, composeState: $composeState)
|
||||
}
|
||||
}
|
||||
.onAppear {
|
||||
selectedChatItems = nil
|
||||
initChatView()
|
||||
@@ -286,9 +312,6 @@ struct ChatView: View {
|
||||
}
|
||||
} else {
|
||||
addMembersButton()
|
||||
.appSheet(isPresented: $showAddMembersSheet) {
|
||||
AddGroupMembersView(chat: chat, groupInfo: groupInfo)
|
||||
}
|
||||
}
|
||||
}
|
||||
Menu {
|
||||
@@ -411,7 +434,8 @@ struct ChatView: View {
|
||||
composeState: $composeState,
|
||||
selectedMember: $selectedMember,
|
||||
revealedChatItem: $revealedChatItem,
|
||||
selectedChatItems: $selectedChatItems
|
||||
selectedChatItems: $selectedChatItems,
|
||||
forwardedChatItems: $forwardedChatItems
|
||||
)
|
||||
.id(ci.id) // Required to trigger `onAppear` on iOS15
|
||||
} loadPage: {
|
||||
@@ -603,7 +627,11 @@ struct ChatView: View {
|
||||
Text(String.localizedStringWithFormat(
|
||||
NSLocalizedString("%@, %@", comment: "format for date separator in chat"),
|
||||
date.formatted(.dateTime.weekday(.abbreviated)),
|
||||
date.formatted(.dateTime.day().month(.abbreviated))
|
||||
date.formatted(
|
||||
Calendar.current.isDate(date, equalTo: .now, toGranularity: .year)
|
||||
? .dateTime.day().month(.abbreviated)
|
||||
: .dateTime.day().month(.abbreviated).year()
|
||||
)
|
||||
))
|
||||
.font(.callout)
|
||||
.fontWeight(.medium)
|
||||
@@ -701,6 +729,116 @@ struct ChatView: View {
|
||||
}
|
||||
}
|
||||
|
||||
private func forwardSelectedMessages() {
|
||||
Task {
|
||||
do {
|
||||
if let selectedChatItems {
|
||||
let (validItems, confirmation) = try await apiPlanForwardChatItems(
|
||||
type: chat.chatInfo.chatType,
|
||||
id: chat.chatInfo.apiId,
|
||||
itemIds: Array(selectedChatItems)
|
||||
)
|
||||
if let confirmation {
|
||||
if validItems.count > 0 {
|
||||
showAlert(
|
||||
String.localizedStringWithFormat(
|
||||
NSLocalizedString("Forward %d message(s)?", comment: "alert title"),
|
||||
validItems.count
|
||||
),
|
||||
message: forwardConfirmationText(confirmation) + "\n" +
|
||||
NSLocalizedString("Forward messages without files?", comment: "alert message")
|
||||
) {
|
||||
switch confirmation {
|
||||
case let .filesNotAccepted(fileIds):
|
||||
[forwardAction(validItems), downloadAction(fileIds), cancelAlertAction]
|
||||
default:
|
||||
[forwardAction(validItems), cancelAlertAction]
|
||||
}
|
||||
}
|
||||
} else {
|
||||
showAlert(
|
||||
NSLocalizedString("Nothing to forward!", comment: "alert title"),
|
||||
message: forwardConfirmationText(confirmation)
|
||||
) {
|
||||
switch confirmation {
|
||||
case let .filesNotAccepted(fileIds):
|
||||
[downloadAction(fileIds), cancelAlertAction]
|
||||
default:
|
||||
[okAlertAction]
|
||||
}
|
||||
}
|
||||
}
|
||||
} else {
|
||||
await openForwardingSheet(validItems)
|
||||
}
|
||||
}
|
||||
} catch {
|
||||
logger.error("Plan forward chat items failed: \(error.localizedDescription)")
|
||||
}
|
||||
}
|
||||
|
||||
func forwardConfirmationText(_ fc: ForwardConfirmation) -> String {
|
||||
switch fc {
|
||||
case let .filesNotAccepted(fileIds):
|
||||
String.localizedStringWithFormat(
|
||||
NSLocalizedString("%d file(s) were not downloaded.", comment: "forward confirmation reason"),
|
||||
fileIds.count
|
||||
)
|
||||
case let .filesInProgress(filesCount):
|
||||
String.localizedStringWithFormat(
|
||||
NSLocalizedString("%d file(s) are still being downloaded.", comment: "forward confirmation reason"),
|
||||
filesCount
|
||||
)
|
||||
case let .filesMissing(filesCount):
|
||||
String.localizedStringWithFormat(
|
||||
NSLocalizedString("%d file(s) were deleted.", comment: "forward confirmation reason"),
|
||||
filesCount
|
||||
)
|
||||
case let .filesFailed(filesCount):
|
||||
String.localizedStringWithFormat(
|
||||
NSLocalizedString("%d file(s) failed to download.", comment: "forward confirmation reason"),
|
||||
filesCount
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
func forwardAction(_ items: [Int64]) -> UIAlertAction {
|
||||
UIAlertAction(
|
||||
title: NSLocalizedString("Forward messages", comment: "alert action"),
|
||||
style: .default,
|
||||
handler: { _ in Task { await openForwardingSheet(items) } }
|
||||
)
|
||||
}
|
||||
|
||||
func downloadAction(_ fileIds: [Int64]) -> UIAlertAction {
|
||||
UIAlertAction(
|
||||
title: NSLocalizedString("Download files", comment: "alert action"),
|
||||
style: .default,
|
||||
handler: { _ in
|
||||
Task {
|
||||
if let user = ChatModel.shared.currentUser {
|
||||
await receiveFiles(user: user, fileIds: fileIds)
|
||||
}
|
||||
}
|
||||
}
|
||||
)
|
||||
}
|
||||
|
||||
func openForwardingSheet(_ items: [Int64]) async {
|
||||
let im = ItemsModel.shared
|
||||
var items = Set(items)
|
||||
var fci = [ChatItem]()
|
||||
for reversedChatItem in im.reversedChatItems {
|
||||
if items.contains(reversedChatItem.id) {
|
||||
items.remove(reversedChatItem.id)
|
||||
fci.insert(reversedChatItem, at: 0)
|
||||
}
|
||||
if items.isEmpty { break }
|
||||
}
|
||||
await MainActor.run { forwardedChatItems = fci }
|
||||
}
|
||||
}
|
||||
|
||||
private func loadChatItems(_ cInfo: ChatInfo) {
|
||||
Task {
|
||||
if loadingItems || firstPage { return }
|
||||
@@ -762,10 +900,10 @@ struct ChatView: View {
|
||||
@State private var showDeleteMessages = false
|
||||
@State private var showChatItemInfoSheet: Bool = false
|
||||
@State private var chatItemInfo: ChatItemInfo?
|
||||
@State private var showForwardingSheet: Bool = false
|
||||
@State private var msgWidth: CGFloat = 0
|
||||
|
||||
@Binding var selectedChatItems: Set<Int64>?
|
||||
@Binding var forwardedChatItems: [ChatItem]
|
||||
|
||||
@State private var allowMenu: Bool = true
|
||||
@State private var markedRead = false
|
||||
@@ -1049,7 +1187,7 @@ struct ChatView: View {
|
||||
allowMenu: $allowMenu
|
||||
)
|
||||
.environment(\.showTimestamp, itemSeparation.timestamp)
|
||||
.modifier(ChatItemClipped(ci, tailVisible: itemSeparation.largeGap))
|
||||
.modifier(ChatItemClipped(ci, tailVisible: itemSeparation.largeGap && (ci.meta.itemDeleted == nil || revealed)))
|
||||
.contextMenu { menu(ci, range, live: composeState.liveMessage != nil) }
|
||||
.accessibilityLabel("")
|
||||
if ci.content.msgContent != nil && (ci.meta.itemDeleted == nil || revealed) && ci.reactions.count > 0 {
|
||||
@@ -1079,14 +1217,6 @@ struct ChatView: View {
|
||||
}) {
|
||||
ChatItemInfoView(ci: ci, chatItemInfo: $chatItemInfo)
|
||||
}
|
||||
.sheet(isPresented: $showForwardingSheet) {
|
||||
if #available(iOS 16.0, *) {
|
||||
ChatItemForwardingView(ci: ci, fromChatInfo: chat.chatInfo, composeState: $composeState)
|
||||
.presentationDetents([.fraction(0.8)])
|
||||
} else {
|
||||
ChatItemForwardingView(ci: ci, fromChatInfo: chat.chatInfo, composeState: $composeState)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private func showMemberImage(_ member: GroupMember, _ prevItem: ChatItem?) -> Bool {
|
||||
@@ -1227,7 +1357,7 @@ struct ChatView: View {
|
||||
|
||||
var forwardButton: Button<some View> {
|
||||
Button {
|
||||
showForwardingSheet = true
|
||||
forwardedChatItems = [chatItem]
|
||||
} label: {
|
||||
Label(
|
||||
NSLocalizedString("Forward", comment: "chat item action"),
|
||||
|
||||
@@ -23,7 +23,7 @@ enum ComposeContextItem {
|
||||
case noContextItem
|
||||
case quotedItem(chatItem: ChatItem)
|
||||
case editingItem(chatItem: ChatItem)
|
||||
case forwardingItem(chatItem: ChatItem, fromChatInfo: ChatInfo)
|
||||
case forwardingItems(chatItems: [ChatItem], fromChatInfo: ChatInfo)
|
||||
}
|
||||
|
||||
enum VoiceMessageRecordingState {
|
||||
@@ -73,10 +73,10 @@ struct ComposeState {
|
||||
}
|
||||
}
|
||||
|
||||
init(forwardingItem: ChatItem, fromChatInfo: ChatInfo) {
|
||||
init(forwardingItems: [ChatItem], fromChatInfo: ChatInfo) {
|
||||
self.message = ""
|
||||
self.preview = .noPreview
|
||||
self.contextItem = .forwardingItem(chatItem: forwardingItem, fromChatInfo: fromChatInfo)
|
||||
self.contextItem = .forwardingItems(chatItems: forwardingItems, fromChatInfo: fromChatInfo)
|
||||
self.voiceMessageRecordingState = .noRecording
|
||||
}
|
||||
|
||||
@@ -112,7 +112,7 @@ struct ComposeState {
|
||||
|
||||
var forwarding: Bool {
|
||||
switch contextItem {
|
||||
case .forwardingItem: return true
|
||||
case .forwardingItems: return true
|
||||
default: return false
|
||||
}
|
||||
}
|
||||
@@ -167,6 +167,13 @@ struct ComposeState {
|
||||
}
|
||||
}
|
||||
|
||||
var manyMediaPreviews: Bool {
|
||||
switch preview {
|
||||
case let .mediaPreviews(mediaPreviews): return mediaPreviews.count > 1
|
||||
default: return false
|
||||
}
|
||||
}
|
||||
|
||||
var attachmentDisabled: Bool {
|
||||
if editing || forwarding || liveMessage != nil || inProgress { return true }
|
||||
switch preview {
|
||||
@@ -452,7 +459,7 @@ struct ComposeView: View {
|
||||
Task {
|
||||
var media: [(String, UploadContent)] = []
|
||||
for content in selected {
|
||||
if let img = resizeImageToStrSize(content.uiImage, maxDataSize: 14000) {
|
||||
if let img = await resizeImageToStrSize(content.uiImage, maxDataSize: 14000) {
|
||||
media.append((img, content))
|
||||
await MainActor.run {
|
||||
composeState = composeState.copy(preview: .mediaPreviews(mediaPreviews: media))
|
||||
@@ -544,7 +551,7 @@ struct ComposeView: View {
|
||||
}
|
||||
|
||||
private func addMediaContent(_ content: UploadContent) async {
|
||||
if let img = resizeImageToStrSize(content.uiImage, maxDataSize: 14000) {
|
||||
if let img = await resizeImageToStrSize(content.uiImage, maxDataSize: 14000) {
|
||||
var newMedia: [(String, UploadContent?)] = []
|
||||
if case var .mediaPreviews(media) = composeState.preview {
|
||||
media.append((img, content))
|
||||
@@ -687,7 +694,7 @@ struct ComposeView: View {
|
||||
case let .quotedItem(chatItem: quotedItem):
|
||||
ContextItemView(
|
||||
chat: chat,
|
||||
contextItem: quotedItem,
|
||||
contextItems: [quotedItem],
|
||||
contextIcon: "arrowshape.turn.up.left",
|
||||
cancelContextItem: { composeState = composeState.copy(contextItem: .noContextItem) }
|
||||
)
|
||||
@@ -695,18 +702,17 @@ struct ComposeView: View {
|
||||
case let .editingItem(chatItem: editingItem):
|
||||
ContextItemView(
|
||||
chat: chat,
|
||||
contextItem: editingItem,
|
||||
contextItems: [editingItem],
|
||||
contextIcon: "pencil",
|
||||
cancelContextItem: { clearState() }
|
||||
)
|
||||
Divider()
|
||||
case let .forwardingItem(chatItem: forwardedItem, _):
|
||||
case let .forwardingItems(chatItems, _):
|
||||
ContextItemView(
|
||||
chat: chat,
|
||||
contextItem: forwardedItem,
|
||||
contextItems: chatItems,
|
||||
contextIcon: "arrowshape.turn.up.forward",
|
||||
cancelContextItem: { composeState = composeState.copy(contextItem: .noContextItem) },
|
||||
showSender: false
|
||||
cancelContextItem: { composeState = composeState.copy(contextItem: .noContextItem) }
|
||||
)
|
||||
Divider()
|
||||
}
|
||||
@@ -730,10 +736,11 @@ struct ComposeView: View {
|
||||
}
|
||||
if chat.chatInfo.contact?.nextSendGrpInv ?? false {
|
||||
await sendMemberContactInvitation()
|
||||
} else if case let .forwardingItem(ci, fromChatInfo) = composeState.contextItem {
|
||||
sent = await forwardItem(ci, fromChatInfo, ttl)
|
||||
} else if case let .forwardingItems(chatItems, fromChatInfo) = composeState.contextItem {
|
||||
// Composed text is send as a reply to the last forwarded item
|
||||
sent = await forwardItems(chatItems, fromChatInfo, ttl).last
|
||||
if !composeState.message.isEmpty {
|
||||
sent = await send(checkLinkPreview(), quoted: sent?.id, live: false, ttl: ttl)
|
||||
_ = await send(checkLinkPreview(), quoted: sent?.id, live: false, ttl: ttl)
|
||||
}
|
||||
} else if case let .editingItem(ci) = composeState.contextItem {
|
||||
sent = await updateMessage(ci, live: live)
|
||||
@@ -750,27 +757,28 @@ struct ComposeView: View {
|
||||
sent = await send(.text(msgText), quoted: quoted, live: live, ttl: ttl)
|
||||
case .linkPreview:
|
||||
sent = await send(checkLinkPreview(), quoted: quoted, live: live, ttl: ttl)
|
||||
case let .mediaPreviews(mediaPreviews: media):
|
||||
// TODO batch send: batch media previews
|
||||
case let .mediaPreviews(media):
|
||||
let last = media.count - 1
|
||||
var msgs: [ComposedMessage] = []
|
||||
if last >= 0 {
|
||||
for i in 0..<last {
|
||||
if case (_, .video(_, _, _)) = media[i] {
|
||||
sent = await sendVideo(media[i], ttl: ttl)
|
||||
} else {
|
||||
sent = await sendImage(media[i], ttl: ttl)
|
||||
if i > 0 {
|
||||
// Sleep to allow `progressByTimeout` update be rendered
|
||||
try? await Task.sleep(nanoseconds: 100_000000)
|
||||
}
|
||||
if let (fileSource, msgContent) = mediaContent(media[i], text: "") {
|
||||
msgs.append(ComposedMessage(fileSource: fileSource, msgContent: msgContent))
|
||||
}
|
||||
_ = try? await Task.sleep(nanoseconds: 100_000000)
|
||||
}
|
||||
if case (_, .video(_, _, _)) = media[last] {
|
||||
sent = await sendVideo(media[last], text: msgText, quoted: quoted, live: live, ttl: ttl)
|
||||
} else {
|
||||
sent = await sendImage(media[last], text: msgText, quoted: quoted, live: live, ttl: ttl)
|
||||
if let (fileSource, msgContent) = mediaContent(media[last], text: msgText) {
|
||||
msgs.append(ComposedMessage(fileSource: fileSource, quotedItemId: quoted, msgContent: msgContent))
|
||||
}
|
||||
}
|
||||
if sent == nil {
|
||||
sent = await send(.text(msgText), quoted: quoted, live: live, ttl: ttl)
|
||||
if msgs.isEmpty {
|
||||
msgs = [ComposedMessage(quotedItemId: quoted, msgContent: .text(msgText))]
|
||||
}
|
||||
sent = await send(msgs, live: live, ttl: ttl).last
|
||||
|
||||
case let .voicePreview(recordingFileName, duration):
|
||||
stopPlayback.toggle()
|
||||
let file = voiceCryptoFile(recordingFileName)
|
||||
@@ -792,6 +800,20 @@ struct ComposeView: View {
|
||||
}
|
||||
return sent
|
||||
|
||||
func mediaContent(_ media: (String, UploadContent?), text: String) -> (CryptoFile?, MsgContent)? {
|
||||
let (previewImage, uploadContent) = media
|
||||
return switch uploadContent {
|
||||
case let .simpleImage(image):
|
||||
(saveImage(image), .image(text: text, image: previewImage))
|
||||
case let .animatedImage(image):
|
||||
(saveAnimImage(image), .image(text: text, image: previewImage))
|
||||
case let .video(_, url, duration):
|
||||
(moveTempFileFromURL(url), .video(text: text, image: previewImage, duration: duration))
|
||||
case .none:
|
||||
nil
|
||||
}
|
||||
}
|
||||
|
||||
func sending() async {
|
||||
await MainActor.run { composeState.inProgress = true }
|
||||
}
|
||||
@@ -855,23 +877,6 @@ struct ComposeView: View {
|
||||
}
|
||||
}
|
||||
|
||||
func sendImage(_ imageData: (String, UploadContent?), text: String = "", quoted: Int64? = nil, live: Bool = false, ttl: Int?) async -> ChatItem? {
|
||||
let (image, data) = imageData
|
||||
if let data = data, let savedFile = saveAnyImage(data) {
|
||||
return await send(.image(text: text, image: image), quoted: quoted, file: savedFile, live: live, ttl: ttl)
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func sendVideo(_ imageData: (String, UploadContent?), text: String = "", quoted: Int64? = nil, live: Bool = false, ttl: Int?) async -> ChatItem? {
|
||||
let (image, data) = imageData
|
||||
if case let .video(_, url, duration) = data, let savedFile = moveTempFileFromURL(url) {
|
||||
ChatModel.shared.filesToDelete.remove(url)
|
||||
return await send(.video(text: text, image: image, duration: duration), quoted: quoted, file: savedFile, live: live, ttl: ttl)
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func voiceCryptoFile(_ fileName: String) -> CryptoFile? {
|
||||
if !privacyEncryptLocalFilesGroupDefault.get() {
|
||||
return CryptoFile.plain(fileName)
|
||||
@@ -888,17 +893,22 @@ struct ComposeView: View {
|
||||
}
|
||||
|
||||
func send(_ mc: MsgContent, quoted: Int64?, file: CryptoFile? = nil, live: Bool = false, ttl: Int?) async -> ChatItem? {
|
||||
await send(
|
||||
[ComposedMessage(fileSource: file, quotedItemId: quoted, msgContent: mc)],
|
||||
live: live,
|
||||
ttl: ttl
|
||||
).first
|
||||
}
|
||||
|
||||
func send(_ msgs: [ComposedMessage], live: Bool, ttl: Int?) async -> [ChatItem] {
|
||||
if let chatItems = chat.chatInfo.chatType == .local
|
||||
? await apiCreateChatItems(
|
||||
noteFolderId: chat.chatInfo.apiId,
|
||||
composedMessages: [ComposedMessage(fileSource: file, msgContent: mc)]
|
||||
)
|
||||
? await apiCreateChatItems(noteFolderId: chat.chatInfo.apiId, composedMessages: msgs)
|
||||
: await apiSendMessages(
|
||||
type: chat.chatInfo.chatType,
|
||||
id: chat.chatInfo.apiId,
|
||||
live: live,
|
||||
ttl: ttl,
|
||||
composedMessages: [ComposedMessage(fileSource: file, quotedItemId: quoted, msgContent: mc)]
|
||||
composedMessages: msgs
|
||||
) {
|
||||
await MainActor.run {
|
||||
chatModel.removeLiveDummy(animated: false)
|
||||
@@ -906,33 +916,43 @@ struct ComposeView: View {
|
||||
chatModel.addChatItem(chat.chatInfo, chatItem)
|
||||
}
|
||||
}
|
||||
// UI only supports sending one item at a time
|
||||
return chatItems.first
|
||||
return chatItems
|
||||
}
|
||||
if let file = file {
|
||||
removeFile(file.filePath)
|
||||
for msg in msgs {
|
||||
if let file = msg.fileSource {
|
||||
removeFile(file.filePath)
|
||||
}
|
||||
}
|
||||
return nil
|
||||
return []
|
||||
}
|
||||
|
||||
func forwardItem(_ forwardedItem: ChatItem, _ fromChatInfo: ChatInfo, _ ttl: Int?) async -> ChatItem? {
|
||||
func forwardItems(_ forwardedItems: [ChatItem], _ fromChatInfo: ChatInfo, _ ttl: Int?) async -> [ChatItem] {
|
||||
if let chatItems = await apiForwardChatItems(
|
||||
toChatType: chat.chatInfo.chatType,
|
||||
toChatId: chat.chatInfo.apiId,
|
||||
fromChatType: fromChatInfo.chatType,
|
||||
fromChatId: fromChatInfo.apiId,
|
||||
itemIds: [forwardedItem.id],
|
||||
itemIds: forwardedItems.map { $0.id },
|
||||
ttl: ttl
|
||||
) {
|
||||
await MainActor.run {
|
||||
for chatItem in chatItems {
|
||||
chatModel.addChatItem(chat.chatInfo, chatItem)
|
||||
}
|
||||
if forwardedItems.count != chatItems.count {
|
||||
showAlert(
|
||||
String.localizedStringWithFormat(
|
||||
NSLocalizedString("%d messages not forwarded", comment: "alert title"),
|
||||
forwardedItems.count - chatItems.count
|
||||
),
|
||||
message: NSLocalizedString("Messages were deleted after you selected them.", comment: "alert message")
|
||||
)
|
||||
}
|
||||
}
|
||||
// TODO batch send: forward multiple messages
|
||||
return chatItems.first
|
||||
return chatItems
|
||||
} else {
|
||||
return []
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func checkLinkPreview() -> MsgContent {
|
||||
@@ -949,14 +969,6 @@ struct ComposeView: View {
|
||||
return .text(msgText)
|
||||
}
|
||||
}
|
||||
|
||||
func saveAnyImage(_ img: UploadContent) -> CryptoFile? {
|
||||
switch img {
|
||||
case let .simpleImage(image): return saveImage(image)
|
||||
case let .animatedImage(image): return saveAnimImage(image)
|
||||
default: return nil
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private func startVoiceMessageRecording() async {
|
||||
|
||||
@@ -12,7 +12,7 @@ import SimpleXChat
|
||||
struct ContextItemView: View {
|
||||
@EnvironmentObject var theme: AppTheme
|
||||
@ObservedObject var chat: Chat
|
||||
let contextItem: ChatItem
|
||||
let contextItems: [ChatItem]
|
||||
let contextIcon: String
|
||||
let cancelContextItem: () -> Void
|
||||
var showSender: Bool = true
|
||||
@@ -24,13 +24,22 @@ struct ContextItemView: View {
|
||||
.aspectRatio(contentMode: .fit)
|
||||
.frame(width: 16, height: 16)
|
||||
.foregroundColor(theme.colors.secondary)
|
||||
if showSender, let sender = contextItem.memberDisplayName {
|
||||
VStack(alignment: .leading, spacing: 4) {
|
||||
Text(sender).font(.caption).foregroundColor(theme.colors.secondary)
|
||||
msgContentView(lines: 2)
|
||||
}
|
||||
if let singleItem = contextItems.first, contextItems.count == 1 {
|
||||
if showSender, let sender = singleItem.memberDisplayName {
|
||||
VStack(alignment: .leading, spacing: 4) {
|
||||
Text(sender).font(.caption).foregroundColor(theme.colors.secondary)
|
||||
msgContentView(lines: 2, contextItem: singleItem)
|
||||
}
|
||||
} else {
|
||||
msgContentView(lines: 3, contextItem: singleItem)
|
||||
}
|
||||
} else {
|
||||
msgContentView(lines: 3)
|
||||
Text(
|
||||
chat.chatInfo.chatType == .local
|
||||
? "Saving \(contextItems.count) messages"
|
||||
: "Forwarding \(contextItems.count) messages"
|
||||
)
|
||||
.italic()
|
||||
}
|
||||
Spacer()
|
||||
Button {
|
||||
@@ -45,23 +54,32 @@ struct ContextItemView: View {
|
||||
.padding(12)
|
||||
.frame(minHeight: 54)
|
||||
.frame(maxWidth: .infinity)
|
||||
.background(chatItemFrameColor(contextItem, theme))
|
||||
.background(background)
|
||||
}
|
||||
|
||||
private func msgContentView(lines: Int) -> some View {
|
||||
contextMsgPreview()
|
||||
private var background: Color {
|
||||
contextItems.first
|
||||
.map { chatItemFrameColor($0, theme) }
|
||||
?? Color(uiColor: .tertiarySystemBackground)
|
||||
}
|
||||
|
||||
private func msgContentView(lines: Int, contextItem: ChatItem) -> some View {
|
||||
contextMsgPreview(contextItem)
|
||||
.multilineTextAlignment(isRightToLeft(contextItem.text) ? .trailing : .leading)
|
||||
.lineLimit(lines)
|
||||
}
|
||||
|
||||
private func contextMsgPreview() -> Text {
|
||||
private func contextMsgPreview(_ contextItem: ChatItem) -> Text {
|
||||
return attachment() + messageText(contextItem.text, contextItem.formattedText, nil, preview: true, showSecrets: false, secondaryColor: theme.colors.secondary)
|
||||
|
||||
func attachment() -> Text {
|
||||
let isFileLoaded = if let fileSource = getLoadedFileSource(contextItem.file) {
|
||||
FileManager.default.fileExists(atPath: getAppFilePath(fileSource.filePath).path)
|
||||
} else { false }
|
||||
switch contextItem.content.msgContent {
|
||||
case .file: return image("doc.fill")
|
||||
case .file: return isFileLoaded ? image("doc.fill") : Text("")
|
||||
case .image: return image("photo")
|
||||
case .voice: return image("play.fill")
|
||||
case .voice: return isFileLoaded ? image("play.fill") : Text("")
|
||||
default: return Text("")
|
||||
}
|
||||
}
|
||||
@@ -75,6 +93,6 @@ struct ContextItemView: View {
|
||||
struct ContextItemView_Previews: PreviewProvider {
|
||||
static var previews: some View {
|
||||
let contextItem: ChatItem = ChatItem.getSample(1, .directSnd, .now, "hello")
|
||||
return ContextItemView(chat: Chat.sampleData, contextItem: contextItem, contextIcon: "pencil.circle", cancelContextItem: {})
|
||||
return ContextItemView(chat: Chat.sampleData, contextItems: [contextItem], contextIcon: "pencil.circle", cancelContextItem: {})
|
||||
}
|
||||
}
|
||||
|
||||
@@ -227,6 +227,7 @@ struct SendMessageView: View {
|
||||
!composeState.editing {
|
||||
if case .noContextItem = composeState.contextItem,
|
||||
!composeState.voicePreview,
|
||||
!composeState.manyMediaPreviews,
|
||||
let send = sendLiveMessage,
|
||||
let update = updateLiveMessage {
|
||||
Button {
|
||||
|
||||
@@ -105,8 +105,10 @@ struct AddGroupMembersViewCommon: View {
|
||||
.padding(.leading, 2)
|
||||
let s = searchText.trimmingCharacters(in: .whitespaces).localizedLowercase
|
||||
let members = s == "" ? membersToAdd : membersToAdd.filter { $0.chatViewName.localizedLowercase.contains(s) }
|
||||
ForEach(members) { contact in
|
||||
contactCheckView(contact)
|
||||
ForEach(members + [dummyContact]) { contact in
|
||||
if contact.contactId != dummyContact.contactId {
|
||||
contactCheckView(contact)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -130,6 +132,14 @@ struct AddGroupMembersViewCommon: View {
|
||||
.modifier(ThemedBackground(grouped: true))
|
||||
}
|
||||
|
||||
// Resolves keyboard losing focus bug in iOS16 and iOS17,
|
||||
// when there are no items inside `ForEach(memebers)` loop
|
||||
private let dummyContact: Contact = {
|
||||
var dummy = Contact.sampleData
|
||||
dummy.contactId = -1
|
||||
return dummy
|
||||
}()
|
||||
|
||||
private func inviteMembersButton() -> some View {
|
||||
Button {
|
||||
inviteMembers()
|
||||
|
||||
@@ -18,6 +18,7 @@ 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?
|
||||
@@ -94,129 +95,137 @@ struct GroupMemberInfoView: View {
|
||||
.listRowSeparator(.hidden)
|
||||
.listRowInsets(EdgeInsets(top: 0, leading: 0, bottom: 0, trailing: 0))
|
||||
|
||||
if member.memberActive {
|
||||
Section {
|
||||
if let code = connectionCode { verifyCodeButton(code) }
|
||||
if let connStats = connectionStats,
|
||||
connStats.ratchetSyncAllowed {
|
||||
synchronizeConnectionButton()
|
||||
}
|
||||
// } else if developerTools {
|
||||
// synchronizeConnectionButtonForce()
|
||||
// }
|
||||
}
|
||||
}
|
||||
if connectionLoaded {
|
||||
|
||||
if let contactLink = member.contactLink {
|
||||
Section {
|
||||
SimpleXLinkQRCode(uri: contactLink)
|
||||
Button {
|
||||
showShareSheet(items: [simplexChatLink(contactLink)])
|
||||
} label: {
|
||||
Label("Share address", systemImage: "square.and.arrow.up")
|
||||
if member.memberActive {
|
||||
Section {
|
||||
if let code = connectionCode { verifyCodeButton(code) }
|
||||
if let connStats = connectionStats,
|
||||
connStats.ratchetSyncAllowed {
|
||||
synchronizeConnectionButton()
|
||||
}
|
||||
// } else if developerTools {
|
||||
// synchronizeConnectionButtonForce()
|
||||
// }
|
||||
}
|
||||
if let contactId = member.memberContactId {
|
||||
if knownDirectChat(contactId) == nil && !groupInfo.fullGroupPreferences.directMessages.on(for: groupInfo.membership) {
|
||||
}
|
||||
|
||||
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 {
|
||||
connectViaAddressButton(contactLink)
|
||||
}
|
||||
} else {
|
||||
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)
|
||||
}
|
||||
} 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)
|
||||
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)
|
||||
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)
|
||||
}
|
||||
.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
|
||||
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 && !$0.canAbortSwitch }
|
||||
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 && !$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)
|
||||
.onAppear {
|
||||
.task {
|
||||
if #unavailable(iOS 16) {
|
||||
// this condition prevents re-setting picker
|
||||
if !justOpened { return }
|
||||
}
|
||||
justOpened = false
|
||||
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)
|
||||
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 {
|
||||
_ = chatModel.upsertGroupMember(groupInfo, mem)
|
||||
connectionStats = stats
|
||||
connectionCode = code
|
||||
} catch let error {
|
||||
logger.error("apiGroupMemberInfo or apiGetGroupMemberCode error: \(responseError(error))")
|
||||
connectionLoaded = true
|
||||
}
|
||||
} catch let error {
|
||||
await MainActor.run {
|
||||
connectionLoaded = true
|
||||
}
|
||||
logger.error("apiGroupMemberInfo or apiGetGroupMemberCode error: \(responseError(error))")
|
||||
}
|
||||
}
|
||||
.onChange(of: newRole) { newRole in
|
||||
|
||||
@@ -110,10 +110,13 @@ struct GroupProfileView: View {
|
||||
}
|
||||
}
|
||||
.onChange(of: chosenImage) { image in
|
||||
if let image = image {
|
||||
groupProfile.image = resizeImageToStrSize(cropToSquare(image), maxDataSize: 12500)
|
||||
} else {
|
||||
groupProfile.image = nil
|
||||
Task {
|
||||
let resized: String? = if let image {
|
||||
await resizeImageToStrSize(cropToSquare(image), maxDataSize: 12500)
|
||||
} else {
|
||||
nil
|
||||
}
|
||||
await MainActor.run { groupProfile.image = resized }
|
||||
}
|
||||
}
|
||||
.onAppear {
|
||||
|
||||
@@ -32,13 +32,17 @@ struct SelectedItemsBottomToolbar: View {
|
||||
var deleteItems: (Bool) -> Void
|
||||
var moderateItems: () -> Void
|
||||
//var shareItems: () -> Void
|
||||
var forwardItems: () -> Void
|
||||
@State var deleteEnabled: Bool = false
|
||||
@State var deleteForEveryoneEnabled: Bool = false
|
||||
|
||||
@State var canModerate: Bool = false
|
||||
@State var moderateEnabled: Bool = false
|
||||
|
||||
@State var allButtonsDisabled = false
|
||||
@State var forwardEnabled: Bool = false
|
||||
|
||||
@State var deleteCountProhibited = false
|
||||
@State var forwardCountProhibited = false
|
||||
|
||||
var body: some View {
|
||||
VStack(spacing: 0) {
|
||||
@@ -50,10 +54,11 @@ struct SelectedItemsBottomToolbar: View {
|
||||
} label: {
|
||||
Image(systemName: "trash")
|
||||
.resizable()
|
||||
.scaledToFit()
|
||||
.frame(width: 20, height: 20, alignment: .center)
|
||||
.foregroundColor(!deleteEnabled || allButtonsDisabled ? theme.colors.secondary: .red)
|
||||
.foregroundColor(!deleteEnabled || deleteCountProhibited ? theme.colors.secondary: .red)
|
||||
}
|
||||
.disabled(!deleteEnabled || allButtonsDisabled)
|
||||
.disabled(!deleteEnabled || deleteCountProhibited)
|
||||
|
||||
Spacer()
|
||||
Button {
|
||||
@@ -61,24 +66,24 @@ struct SelectedItemsBottomToolbar: View {
|
||||
} label: {
|
||||
Image(systemName: "flag")
|
||||
.resizable()
|
||||
.scaledToFit()
|
||||
.frame(width: 20, height: 20, alignment: .center)
|
||||
.foregroundColor(!moderateEnabled || allButtonsDisabled ? theme.colors.secondary : .red)
|
||||
.foregroundColor(!moderateEnabled || deleteCountProhibited ? theme.colors.secondary : .red)
|
||||
}
|
||||
.disabled(!moderateEnabled || allButtonsDisabled)
|
||||
.disabled(!moderateEnabled || deleteCountProhibited)
|
||||
.opacity(canModerate ? 1 : 0)
|
||||
|
||||
|
||||
Spacer()
|
||||
Button {
|
||||
//shareItems()
|
||||
forwardItems()
|
||||
} label: {
|
||||
Image(systemName: "square.and.arrow.up")
|
||||
Image(systemName: "arrowshape.turn.up.forward")
|
||||
.resizable()
|
||||
.scaledToFit()
|
||||
.frame(width: 20, height: 20, alignment: .center)
|
||||
.foregroundColor(allButtonsDisabled ? theme.colors.secondary : theme.colors.primary)
|
||||
.foregroundColor(!forwardEnabled || forwardCountProhibited ? theme.colors.secondary : theme.colors.primary)
|
||||
}
|
||||
.disabled(allButtonsDisabled)
|
||||
.opacity(0)
|
||||
.disabled(!forwardEnabled || forwardCountProhibited)
|
||||
}
|
||||
.frame(maxHeight: .infinity)
|
||||
.padding([.leading, .trailing], 12)
|
||||
@@ -101,20 +106,22 @@ struct SelectedItemsBottomToolbar: View {
|
||||
|
||||
private func recheckItems(_ chatInfo: ChatInfo, _ chatItems: [ChatItem], _ selectedItems: Set<Int64>?) {
|
||||
let count = selectedItems?.count ?? 0
|
||||
allButtonsDisabled = count == 0 || count > 20
|
||||
deleteCountProhibited = count == 0 || count > 200
|
||||
forwardCountProhibited = count == 0 || count > 20
|
||||
canModerate = possibleToModerate(chatInfo)
|
||||
if let selected = selectedItems {
|
||||
let me: Bool
|
||||
let onlyOwnGroupItems: Bool
|
||||
(deleteEnabled, deleteForEveryoneEnabled, me, onlyOwnGroupItems, selectedChatItems) = chatItems.reduce((true, true, true, true, [])) { (r, ci) in
|
||||
(deleteEnabled, deleteForEveryoneEnabled, me, onlyOwnGroupItems, forwardEnabled, selectedChatItems) = chatItems.reduce((true, true, true, true, true, [])) { (r, ci) in
|
||||
if selected.contains(ci.id) {
|
||||
var (de, dee, me, onlyOwnGroupItems, sel) = r
|
||||
var (de, dee, me, onlyOwnGroupItems, fe, sel) = r
|
||||
de = de && ci.canBeDeletedForSelf
|
||||
dee = dee && ci.meta.deletable && !ci.localNote
|
||||
onlyOwnGroupItems = onlyOwnGroupItems && ci.chatDir == .groupSnd
|
||||
me = me && ci.content.msgContent != nil && ci.memberToModerate(chatInfo) != nil
|
||||
fe = fe && ci.content.msgContent != nil && ci.meta.itemDeleted == nil && !ci.isLiveDummy
|
||||
sel.insert(ci.id) // we are collecting new selected items here to account for any changes in chat items list
|
||||
return (de, dee, me, onlyOwnGroupItems, sel)
|
||||
return (de, dee, me, onlyOwnGroupItems, fe, sel)
|
||||
} else {
|
||||
return r
|
||||
}
|
||||
|
||||
@@ -10,7 +10,7 @@ import SwiftUI
|
||||
|
||||
struct ChatHelp: View {
|
||||
@EnvironmentObject var chatModel: ChatModel
|
||||
@Binding var showSettings: Bool
|
||||
let dismissSettingsSheet: DismissAction
|
||||
|
||||
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.") {
|
||||
showSettings = false
|
||||
dismissSettingsSheet()
|
||||
DispatchQueue.main.async {
|
||||
UIApplication.shared.open(simplexTeamURL)
|
||||
}
|
||||
@@ -61,8 +61,9 @@ struct ChatHelp: View {
|
||||
}
|
||||
|
||||
struct ChatHelp_Previews: PreviewProvider {
|
||||
@Environment(\.dismiss) static var mockDismiss
|
||||
|
||||
static var previews: some View {
|
||||
@State var showSettings = false
|
||||
return ChatHelp(showSettings: $showSettings)
|
||||
ChatHelp(dismissSettingsSheet: mockDismiss)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -18,19 +18,77 @@ 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 showSettings: Bool
|
||||
@Binding var activeUserPickerSheet: UserPickerSheet?
|
||||
@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
|
||||
@@ -58,43 +116,20 @@ struct ChatListView: View {
|
||||
destination: chatView
|
||||
) { chatListView }
|
||||
}
|
||||
.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("Public address")
|
||||
.navigationBarTitleDisplayMode(.large)
|
||||
.modifier(ThemedBackground(grouped: true))
|
||||
}
|
||||
case .chatProfiles:
|
||||
NavigationView {
|
||||
UserProfilesView()
|
||||
}
|
||||
case .currentProfile:
|
||||
NavigationView {
|
||||
UserProfile()
|
||||
.navigationTitle("Your current profile")
|
||||
.modifier(ThemedBackground())
|
||||
}
|
||||
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)
|
||||
}
|
||||
}
|
||||
.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
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -402,7 +437,7 @@ struct SubsStatusIndicator: View {
|
||||
private func startTask() {
|
||||
task = Task {
|
||||
while !Task.isCancelled {
|
||||
if AppChatState.shared.value == .active {
|
||||
if AppChatState.shared.value == .active, ChatModel.shared.chatRunning == true {
|
||||
do {
|
||||
let (subs, hasSess) = try await getAgentSubsTotal()
|
||||
await MainActor.run {
|
||||
@@ -544,6 +579,8 @@ func chatStoppedIcon() -> some View {
|
||||
}
|
||||
|
||||
struct ChatListView_Previews: PreviewProvider {
|
||||
@State static var userPickerSheet: UserPickerSheet? = .none
|
||||
|
||||
static var previews: some View {
|
||||
let chatModel = ChatModel()
|
||||
chatModel.updateChats([
|
||||
@@ -562,9 +599,9 @@ struct ChatListView_Previews: PreviewProvider {
|
||||
|
||||
])
|
||||
return Group {
|
||||
ChatListView(showSettings: Binding.constant(false))
|
||||
ChatListView(activeUserPickerSheet: $userPickerSheet)
|
||||
.environmentObject(chatModel)
|
||||
ChatListView(showSettings: Binding.constant(false))
|
||||
ChatListView(activeUserPickerSheet: $userPickerSheet)
|
||||
.environmentObject(ChatModel())
|
||||
}
|
||||
}
|
||||
|
||||
@@ -35,11 +35,16 @@ struct ChatPreviewView: View {
|
||||
}
|
||||
.padding(.leading, 4)
|
||||
|
||||
let chatTs = if let cItem {
|
||||
cItem.meta.itemTs
|
||||
} else {
|
||||
chat.chatInfo.chatTs
|
||||
}
|
||||
VStack(spacing: 0) {
|
||||
HStack(alignment: .top) {
|
||||
chatPreviewTitle()
|
||||
Spacer()
|
||||
(cItem?.timestampText ?? formatTimestampText(chat.chatInfo.chatTs))
|
||||
(formatTimestampText(chatTs))
|
||||
.font(.subheadline)
|
||||
.frame(minWidth: 60, alignment: .trailing)
|
||||
.foregroundColor(theme.colors.secondary)
|
||||
|
||||
@@ -407,12 +407,18 @@ struct ServersSummaryView: View {
|
||||
|
||||
struct SubscriptionStatusIndicatorView: View {
|
||||
@EnvironmentObject var m: ChatModel
|
||||
@EnvironmentObject var theme: AppTheme
|
||||
var subs: SMPServerSubs
|
||||
var hasSess: Bool
|
||||
|
||||
var body: some View {
|
||||
let onionHosts = networkUseOnionHostsGroupDefault.get()
|
||||
let (color, variableValue, opacity, _) = subscriptionStatusColorAndPercentage(m.networkInfo.online, onionHosts, subs, hasSess)
|
||||
let (color, variableValue, opacity, _) = subscriptionStatusColorAndPercentage(
|
||||
online: m.networkInfo.online,
|
||||
usesProxy: networkUseOnionHostsGroupDefault.get() != .no || groupDefaults.string(forKey: GROUP_DEFAULT_NETWORK_SOCKS_PROXY) != nil,
|
||||
subs: subs,
|
||||
hasSess: hasSess,
|
||||
primaryColor: theme.colors.primary
|
||||
)
|
||||
if #available(iOS 16.0, *) {
|
||||
Image(systemName: "dot.radiowaves.up.forward", variableValue: variableValue)
|
||||
.foregroundColor(color)
|
||||
@@ -425,26 +431,32 @@ struct SubscriptionStatusIndicatorView: View {
|
||||
|
||||
struct SubscriptionStatusPercentageView: View {
|
||||
@EnvironmentObject var m: ChatModel
|
||||
@EnvironmentObject var theme: AppTheme
|
||||
var subs: SMPServerSubs
|
||||
var hasSess: Bool
|
||||
|
||||
var body: some View {
|
||||
let onionHosts = networkUseOnionHostsGroupDefault.get()
|
||||
let (_, _, _, statusPercent) = subscriptionStatusColorAndPercentage(m.networkInfo.online, onionHosts, subs, hasSess)
|
||||
let (_, _, _, statusPercent) = subscriptionStatusColorAndPercentage(
|
||||
online: m.networkInfo.online,
|
||||
usesProxy: networkUseOnionHostsGroupDefault.get() != .no || groupDefaults.string(forKey: GROUP_DEFAULT_NETWORK_SOCKS_PROXY) != nil,
|
||||
subs: subs,
|
||||
hasSess: hasSess,
|
||||
primaryColor: theme.colors.primary
|
||||
)
|
||||
Text(verbatim: "\(Int(floor(statusPercent * 100)))%")
|
||||
.foregroundColor(.secondary)
|
||||
.font(.caption)
|
||||
}
|
||||
}
|
||||
|
||||
func subscriptionStatusColorAndPercentage(_ online: Bool, _ onionHosts: OnionHosts, _ subs: SMPServerSubs, _ hasSess: Bool) -> (Color, Double, Double, Double) {
|
||||
func subscriptionStatusColorAndPercentage(online: Bool, usesProxy: Bool, subs: SMPServerSubs, hasSess: Bool, primaryColor: Color) -> (Color, Double, Double, Double) {
|
||||
func roundedToQuarter(_ n: Double) -> Double {
|
||||
n >= 1 ? 1
|
||||
: n <= 0 ? 0
|
||||
: (n * 4).rounded() / 4
|
||||
}
|
||||
|
||||
let activeColor: Color = onionHosts == .require ? .indigo : .accentColor
|
||||
let activeColor: Color = usesProxy ? .indigo : primaryColor
|
||||
let noConnColorAndPercent: (Color, Double, Double, Double) = (Color(uiColor: .tertiaryLabel), 1, 1, 0)
|
||||
let activeSubsRounded = roundedToQuarter(subs.shareOfActive)
|
||||
|
||||
|
||||
@@ -12,202 +12,162 @@ struct UserPicker: View {
|
||||
@Environment(\.dynamicTypeSize) private var userFont: DynamicTypeSize
|
||||
@Environment(\.scenePhase) private var scenePhase: ScenePhase
|
||||
@Environment(\.colorScheme) private var colorScheme: ColorScheme
|
||||
@Environment(\.dismiss) private var dismiss: DismissAction
|
||||
@Binding var userPickerShown: Bool
|
||||
@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(420)])
|
||||
if #available(iOS 16.4, *) {
|
||||
v.scrollBounceBehavior(.basedOnSize)
|
||||
} else {
|
||||
v
|
||||
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) {
|
||||
if let user = m.currentUser {
|
||||
StickyScrollView(resetScroll: $resetScroll) {
|
||||
HStack(spacing: rowPadding) {
|
||||
HStack {
|
||||
ProfileImage(imageStr: user.image, size: imageSize, color: Color(uiColor: .tertiarySystemGroupedBackground))
|
||||
.padding(.trailing, 6)
|
||||
profileName(user).lineLimit(1)
|
||||
}
|
||||
.padding(rowPadding)
|
||||
.frame(width: otherUsers.isEmpty ? sectionWidth : currentUserWidth, alignment: .leading)
|
||||
.modifier(ListRow { activeSheet = .currentProfile })
|
||||
.clipShape(sectionShape)
|
||||
.disabled(stopped)
|
||||
.opacity(stopped ? 0.4 : 1)
|
||||
ForEach(otherUsers) { u in
|
||||
userView(u, size: imageSize)
|
||||
.frame(maxWidth: sectionWidth * 0.618)
|
||||
.fixedSize()
|
||||
.disabled(stopped)
|
||||
.opacity(stopped ? 0.4 : 1)
|
||||
}
|
||||
}
|
||||
.padding(.horizontal, sectionHorizontalPadding)
|
||||
}
|
||||
.frame(height: 2 * rowPadding + imageSize)
|
||||
.padding(.top, sectionSpacing)
|
||||
.overlay(DetermineWidth())
|
||||
.onPreferenceChange(DetermineWidth.Key.self) { frameWidth = $0 }
|
||||
}
|
||||
} else {
|
||||
viewBody
|
||||
}
|
||||
}
|
||||
|
||||
private var viewBody: some View {
|
||||
let otherUsers = m.users.filter { u in !u.user.hidden && u.user.userId != m.currentUser?.userId }
|
||||
return List {
|
||||
Section(header: Text("You").foregroundColor(theme.colors.secondary)) {
|
||||
if let user = m.currentUser {
|
||||
openSheetOnTap(label: {
|
||||
ZStack {
|
||||
let v = ProfilePreview(profileOf: user)
|
||||
.foregroundColor(.primary)
|
||||
.padding(.leading, -8)
|
||||
if #available(iOS 16.0, *) {
|
||||
v
|
||||
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")
|
||||
.resizable()
|
||||
.scaledToFit()
|
||||
.symbolRenderingMode(.monochrome)
|
||||
.foregroundColor(theme.colors.secondary)
|
||||
.frame(maxWidth: 20, maxHeight: .infinity)
|
||||
.padding(.horizontal, rowPadding)
|
||||
.background(Color(.systemBackground).opacity(0.01))
|
||||
.onTapGesture {
|
||||
if (colorScheme == .light) {
|
||||
ThemeManager.applyTheme(systemDarkThemeDefault.get())
|
||||
} else {
|
||||
v.padding(.vertical, 4)
|
||||
ThemeManager.applyTheme(DefaultTheme.LIGHT.themeName)
|
||||
}
|
||||
}
|
||||
}) {
|
||||
activeSheet = .currentProfile
|
||||
}
|
||||
|
||||
openSheetOnTap(title: m.userAddress == nil ? "Create public address" : "Your public address", icon: "qrcode") {
|
||||
activeSheet = .address
|
||||
}
|
||||
|
||||
openSheetOnTap(title: "Chat preferences", icon: "switch.2") {
|
||||
activeSheet = .chatPreferences
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Section {
|
||||
if otherUsers.isEmpty {
|
||||
openSheetOnTap(title: "Your chat profiles", icon: "person.crop.rectangle.stack") {
|
||||
activeSheet = .chatProfiles
|
||||
}
|
||||
} else {
|
||||
let v = userPickerRow(otherUsers, size: 44)
|
||||
.padding(.leading, -11)
|
||||
if #available(iOS 16.0, *) {
|
||||
v
|
||||
} else {
|
||||
v.padding(.vertical, 4)
|
||||
}
|
||||
}
|
||||
|
||||
openSheetOnTap(title: "Use from desktop", icon: "desktopcomputer") {
|
||||
activeSheet = .useFromDesktop
|
||||
}
|
||||
|
||||
ZStack(alignment: .trailing) {
|
||||
openSheetOnTap(title: "Settings", icon: "gearshape") {
|
||||
activeSheet = .settings
|
||||
}
|
||||
Label {} icon: {
|
||||
Image(systemName: colorScheme == .light ? "sun.max" : "moon.fill")
|
||||
.resizable()
|
||||
.symbolRenderingMode(.monochrome)
|
||||
.foregroundColor(theme.colors.secondary)
|
||||
.frame(maxWidth: 20, maxHeight: 20)
|
||||
}
|
||||
.onTapGesture {
|
||||
if (colorScheme == .light) {
|
||||
ThemeManager.applyTheme(systemDarkThemeDefault.get())
|
||||
} else {
|
||||
ThemeManager.applyTheme(DefaultTheme.LIGHT.themeName)
|
||||
.onLongPressGesture {
|
||||
ThemeManager.applyTheme(DefaultTheme.SYSTEM_THEME_NAME)
|
||||
}
|
||||
}
|
||||
.onLongPressGesture {
|
||||
ThemeManager.applyTheme(DefaultTheme.SYSTEM_THEME_NAME)
|
||||
}
|
||||
}
|
||||
}
|
||||
.clipShape(sectionShape)
|
||||
.padding(.horizontal, sectionHorizontalPadding)
|
||||
.padding(.bottom, sectionSpacing)
|
||||
}
|
||||
.frame(maxWidth: .infinity, maxHeight: .infinity, alignment: .topLeading)
|
||||
.onAppear {
|
||||
// This check prevents the call of listUsers after the app is suspended, and the database is closed.
|
||||
if case .active = scenePhase {
|
||||
currentUser = m.currentUser?.userId
|
||||
Task {
|
||||
do {
|
||||
let users = try await listUsersAsync()
|
||||
await MainActor.run { m.users = users }
|
||||
await MainActor.run {
|
||||
m.users = users
|
||||
currentUser = m.currentUser?.userId
|
||||
}
|
||||
} catch {
|
||||
logger.error("Error loading users \(responseError(error))")
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
.onChange(of: userPickerShown) {
|
||||
if !$0 { resetScroll() }
|
||||
}
|
||||
.modifier(ThemedBackground(grouped: true))
|
||||
.disabled(switchingProfile)
|
||||
}
|
||||
|
||||
private func userPickerRow(_ users: [UserInfo], size: CGFloat) -> some View {
|
||||
HStack(spacing: 6) {
|
||||
let s = ScrollView(.horizontal) {
|
||||
HStack(spacing: 27) {
|
||||
ForEach(users) { u in
|
||||
if !u.user.hidden && u.user.userId != m.currentUser?.userId {
|
||||
userView(u, size: size)
|
||||
}
|
||||
}
|
||||
}
|
||||
.padding(.leading, 4)
|
||||
.padding(.trailing, 22)
|
||||
}
|
||||
ZStack(alignment: .trailing) {
|
||||
if #available(iOS 16.0, *) {
|
||||
s.scrollIndicators(.hidden)
|
||||
} else {
|
||||
s
|
||||
}
|
||||
LinearGradient(
|
||||
colors: [.clear, .black],
|
||||
startPoint: .leading,
|
||||
endPoint: .trailing
|
||||
)
|
||||
.frame(width: size, height: size + 3)
|
||||
.blendMode(.destinationOut)
|
||||
.allowsHitTesting(false)
|
||||
}
|
||||
.compositingGroup()
|
||||
.padding(.top, -3) // to fit unread badge
|
||||
Spacer()
|
||||
Image(systemName: "chevron.right")
|
||||
.foregroundColor(theme.colors.secondary)
|
||||
.padding(.trailing, 4)
|
||||
.onTapGesture {
|
||||
activeSheet = .chatProfiles
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private func userView(_ u: UserInfo, size: CGFloat) -> some View {
|
||||
ZStack(alignment: .topTrailing) {
|
||||
ProfileImage(imageStr: u.user.image, size: size, color: Color(uiColor: .tertiarySystemGroupedBackground))
|
||||
.padding([.top, .trailing], 3)
|
||||
if (u.unreadCount > 0) {
|
||||
unreadBadge(u)
|
||||
HStack {
|
||||
ZStack(alignment: .topTrailing) {
|
||||
ProfileImage(imageStr: u.user.image, size: size, color: Color(uiColor: .tertiarySystemGroupedBackground))
|
||||
if (u.unreadCount > 0) {
|
||||
unreadBadge(u).offset(x: 4, y: -4)
|
||||
}
|
||||
}
|
||||
.padding(.trailing, 6)
|
||||
Text(u.user.displayName).font(.title2).lineLimit(1)
|
||||
}
|
||||
.frame(width: size)
|
||||
.onTapGesture {
|
||||
.padding(rowPadding)
|
||||
.modifier(ListRow {
|
||||
switchingProfile = true
|
||||
Task {
|
||||
do {
|
||||
try await changeActiveUserAsync_(u.user.userId, viewPwd: nil)
|
||||
await MainActor.run {
|
||||
switchingProfile = false
|
||||
dismiss()
|
||||
userPickerShown = false
|
||||
}
|
||||
} catch {
|
||||
await MainActor.run {
|
||||
switchingProfile = false
|
||||
AlertManager.shared.showAlertMsg(
|
||||
title: "Error switching profile!",
|
||||
message: "Error: \(responseError(error))"
|
||||
showAlert(
|
||||
NSLocalizedString("Error switching profile!", comment: "alertTitle"),
|
||||
message: String.localizedStringWithFormat(NSLocalizedString("Error: %@", comment: "alert message"), responseError(error))
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
})
|
||||
.clipShape(sectionShape)
|
||||
}
|
||||
|
||||
private func openSheetOnTap(title: LocalizedStringKey, icon: String, action: @escaping () -> Void) -> some View {
|
||||
openSheetOnTap(label: {
|
||||
ZStack(alignment: .leading) {
|
||||
Image(systemName: icon).frame(maxWidth: 24, maxHeight: 24, alignment: .center)
|
||||
.symbolRenderingMode(.monochrome)
|
||||
.foregroundColor(theme.colors.secondary)
|
||||
Text(title)
|
||||
.foregroundColor(.primary)
|
||||
.padding(.leading, 36)
|
||||
|
||||
private func openSheetOnTap(_ icon: String, title: LocalizedStringKey, sheet: UserPickerSheet, showDivider: Bool = true, disabled: Bool = false) -> some View {
|
||||
ZStack(alignment: .bottom) {
|
||||
settingsRow(icon, color: theme.colors.secondary) {
|
||||
Text(title).foregroundColor(.primary).opacity(disabled ? 0.4 : 1)
|
||||
}
|
||||
}, action: action)
|
||||
}
|
||||
|
||||
private func openSheetOnTap<V: View>(label: () -> V, action: @escaping () -> Void) -> some View {
|
||||
Button(action: action, label: label)
|
||||
.frame(maxWidth: .infinity, alignment: .leading)
|
||||
.contentShape(Rectangle())
|
||||
.frame(maxWidth: .infinity, alignment: .leading)
|
||||
.padding(.horizontal, rowPadding)
|
||||
.padding(.vertical, rowVerticalPadding)
|
||||
.modifier(ListRow { activeSheet = sheet })
|
||||
.disabled(disabled)
|
||||
if showDivider {
|
||||
Divider().padding(.leading, 52)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private func unreadBadge(_ u: UserInfo) -> some View {
|
||||
@@ -222,6 +182,92 @@ 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?
|
||||
@@ -229,6 +275,7 @@ 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
|
||||
@Binding var showSettings: Bool
|
||||
let dismissSettingsSheet: DismissAction
|
||||
@State private var runChat = false
|
||||
@State private var alert: DatabaseAlert? = nil
|
||||
@State private var showFileImporter = false
|
||||
@@ -270,12 +270,12 @@ struct DatabaseView: View {
|
||||
case let .archiveImportedWithErrors(errs):
|
||||
return Alert(
|
||||
title: Text("Chat database imported"),
|
||||
message: Text("Restart the app to use imported chat database") + Text(verbatim: "\n\n") + Text("Some non-fatal errors occurred during import:") + archiveErrorsText(errs)
|
||||
message: Text("Restart the app to use imported chat database") + Text(verbatim: "\n") + Text("Some non-fatal errors occurred during import:") + archiveErrorsText(errs)
|
||||
)
|
||||
case let .archiveExportedWithErrors(archivePath, errs):
|
||||
return Alert(
|
||||
title: Text("Chat database exported"),
|
||||
message: Text("You may save the exported archive.") + Text(verbatim: "\n\n") + Text("Some file(s) were not exported:") + archiveErrorsText(errs),
|
||||
message: Text("You may save the exported archive.") + Text(verbatim: "\n") + Text("Some file(s) were not exported:") + archiveErrorsText(errs),
|
||||
dismissButton: .default(Text("Continue")) {
|
||||
showShareSheet(items: [archivePath])
|
||||
}
|
||||
@@ -439,7 +439,7 @@ struct DatabaseView: View {
|
||||
|
||||
private func startChat() {
|
||||
if m.chatDbChanged {
|
||||
showSettings = false
|
||||
dismissSettingsSheet()
|
||||
DispatchQueue.main.asyncAfter(deadline: .now() + 1) {
|
||||
resetChatCtrl()
|
||||
do {
|
||||
@@ -533,7 +533,9 @@ func deleteChatAsync() async throws {
|
||||
}
|
||||
|
||||
struct DatabaseView_Previews: PreviewProvider {
|
||||
@Environment(\.dismiss) static var mockDismiss
|
||||
|
||||
static var previews: some View {
|
||||
DatabaseView(showSettings: Binding.constant(false), chatItemTTL: .none)
|
||||
DatabaseView(dismissSettingsSheet: mockDismiss, chatItemTTL: .none)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -36,12 +36,7 @@ struct ChatItemClipped: ViewModifier {
|
||||
.sndMsgContent,
|
||||
.rcvMsgContent,
|
||||
.rcvDecryptionError,
|
||||
.sndDeleted,
|
||||
.rcvDeleted,
|
||||
.rcvIntegrityError,
|
||||
.sndModerated,
|
||||
.rcvModerated,
|
||||
.rcvBlocked,
|
||||
.invalidJSON:
|
||||
let tail = if let mc = ci.content.msgContent, mc.isImageOrVideo && mc.text.isEmpty {
|
||||
false
|
||||
|
||||
@@ -47,8 +47,24 @@ func showAlert(
|
||||
buttonAction()
|
||||
})
|
||||
if cancelButton {
|
||||
alert.addAction(UIAlertAction(title: NSLocalizedString("Cancel", comment: "alert button"), style: .cancel))
|
||||
alert.addAction(cancelAlertAction)
|
||||
}
|
||||
topController.present(alert, animated: true)
|
||||
}
|
||||
}
|
||||
|
||||
func showAlert(
|
||||
_ title: String,
|
||||
message: String? = nil,
|
||||
actions: () -> [UIAlertAction] = { [okAlertAction] }
|
||||
) {
|
||||
if let topController = getTopViewController() {
|
||||
let alert = UIAlertController(title: title, message: message, preferredStyle: .alert)
|
||||
for action in actions() { alert.addAction(action) }
|
||||
topController.present(alert, animated: true)
|
||||
}
|
||||
}
|
||||
|
||||
let okAlertAction = UIAlertAction(title: NSLocalizedString("Ok", comment: "alert button"), style: .default)
|
||||
|
||||
let cancelAlertAction = UIAlertAction(title: NSLocalizedString("Cancel", comment: "alert button"), style: .cancel)
|
||||
|
||||
@@ -0,0 +1,188 @@
|
||||
//
|
||||
// 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
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,61 @@
|
||||
//
|
||||
// StickyScrollView.swift
|
||||
// SimpleX (iOS)
|
||||
//
|
||||
// Created by user on 20/09/2024.
|
||||
// Copyright © 2024 SimpleX Chat. All rights reserved.
|
||||
//
|
||||
|
||||
import SwiftUI
|
||||
|
||||
struct StickyScrollView<Content: View>: UIViewRepresentable {
|
||||
@Binding var resetScroll: ResetScrollAction
|
||||
@ViewBuilder let content: () -> Content
|
||||
|
||||
func makeUIView(context: Context) -> UIScrollView {
|
||||
let hc = context.coordinator.hostingController
|
||||
hc.view.backgroundColor = .clear
|
||||
let sv = UIScrollView()
|
||||
sv.showsHorizontalScrollIndicator = false
|
||||
sv.addSubview(hc.view)
|
||||
sv.delegate = context.coordinator
|
||||
DispatchQueue.main.async {
|
||||
resetScroll = ResetScrollAction { sv.setContentOffset(.zero, animated: false) }
|
||||
}
|
||||
return sv
|
||||
}
|
||||
|
||||
func updateUIView(_ scrollView: UIScrollView, context: Context) {
|
||||
let hc = context.coordinator.hostingController
|
||||
hc.rootView = content()
|
||||
hc.view.frame.size = hc.view.intrinsicContentSize
|
||||
scrollView.contentSize = hc.view.intrinsicContentSize
|
||||
}
|
||||
|
||||
func makeCoordinator() -> Coordinator {
|
||||
Coordinator(content: content())
|
||||
}
|
||||
|
||||
class Coordinator: NSObject, UIScrollViewDelegate {
|
||||
let hostingController: UIHostingController<Content>
|
||||
|
||||
init(content: Content) {
|
||||
self.hostingController = UIHostingController(rootView: content)
|
||||
}
|
||||
|
||||
func scrollViewWillEndDragging(
|
||||
_ scrollView: UIScrollView,
|
||||
withVelocity velocity: CGPoint,
|
||||
targetContentOffset: UnsafeMutablePointer<CGPoint>
|
||||
) {
|
||||
if targetContentOffset.pointee.x < 32 {
|
||||
targetContentOffset.pointee.x = 0
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
struct ResetScrollAction {
|
||||
var action = { }
|
||||
func callAsFunction() { action() }
|
||||
}
|
||||
@@ -177,7 +177,7 @@ struct MigrateFromDevice: View {
|
||||
case let .archiveExportedWithErrors(archivePath, errs):
|
||||
return Alert(
|
||||
title: Text("Chat database exported"),
|
||||
message: Text("You may migrate the exported database.") + Text(verbatim: "\n\n") + Text("Some file(s) were not exported:") + archiveErrorsText(errs),
|
||||
message: Text("You may migrate the exported database.") + Text(verbatim: "\n") + Text("Some file(s) were not exported:") + archiveErrorsText(errs),
|
||||
dismissButton: .default(Text("Continue")) {
|
||||
Task { await uploadArchive(path: archivePath) }
|
||||
}
|
||||
@@ -529,9 +529,15 @@ struct MigrateFromDevice: View {
|
||||
}
|
||||
case let .sndStandaloneFileComplete(_, fileTransferMeta, rcvURIs):
|
||||
let cfg = getNetCfg()
|
||||
let proxy: NetworkProxy? = if cfg.socksProxy == nil {
|
||||
nil
|
||||
} else {
|
||||
networkProxyDefault.get()
|
||||
}
|
||||
let data = MigrationFileLinkData.init(
|
||||
networkConfig: MigrationFileLinkData.NetworkConfig(
|
||||
socksProxy: cfg.socksProxy,
|
||||
networkProxy: proxy,
|
||||
hostMode: cfg.hostMode,
|
||||
requiredHostMode: cfg.requiredHostMode
|
||||
)
|
||||
|
||||
@@ -571,7 +571,7 @@ struct MigrateToDevice: View {
|
||||
AlertManager.shared.showAlert(
|
||||
Alert(
|
||||
title: Text("Error migrating settings"),
|
||||
message: Text ("Not all settings were migrated. Repeat migration if you need them.") + Text("\n\n") + Text(responseError(error)))
|
||||
message: Text ("Some app settings were not migrated.") + Text("\n") + Text(responseError(error)))
|
||||
)
|
||||
}
|
||||
hideView()
|
||||
|
||||
@@ -137,10 +137,13 @@ struct AddGroupView: View {
|
||||
createInvalidNameAlert(mkValidName(profile.displayName), $profile.displayName)
|
||||
}
|
||||
.onChange(of: chosenImage) { image in
|
||||
if let image = image {
|
||||
profile.image = resizeImageToStrSize(cropToSquare(image), maxDataSize: 12500)
|
||||
} else {
|
||||
profile.image = nil
|
||||
Task {
|
||||
let resized: String? = if let image {
|
||||
await resizeImageToStrSize(cropToSquare(image), maxDataSize: 12500)
|
||||
} else {
|
||||
nil
|
||||
}
|
||||
await MainActor.run { profile.image = resized }
|
||||
}
|
||||
}
|
||||
.modifier(ThemedBackground(grouped: true))
|
||||
|
||||
@@ -14,7 +14,8 @@ enum ContactType: Int {
|
||||
}
|
||||
|
||||
struct NewChatMenuButton: View {
|
||||
@EnvironmentObject var chatModel: ChatModel
|
||||
// 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
|
||||
@State private var showNewChatSheet = false
|
||||
@State private var alert: SomeAlert? = nil
|
||||
@State private var pendingConnection: PendingContactConnection? = nil
|
||||
@@ -32,7 +33,7 @@ struct NewChatMenuButton: View {
|
||||
NewChatSheet(pendingConnection: $pendingConnection)
|
||||
.environment(\EnvironmentValues.refresh as! WritableKeyPath<EnvironmentValues, RefreshAction?>, nil)
|
||||
.onDisappear {
|
||||
alert = cleanupPendingConnection(chatModel: chatModel, contactConnection: pendingConnection)
|
||||
alert = cleanupPendingConnection(contactConnection: pendingConnection)
|
||||
pendingConnection = nil
|
||||
}
|
||||
}
|
||||
|
||||
@@ -45,10 +45,10 @@ enum NewChatOption: Identifiable {
|
||||
var id: Self { self }
|
||||
}
|
||||
|
||||
func cleanupPendingConnection(chatModel: ChatModel, contactConnection: PendingContactConnection?) -> SomeAlert? {
|
||||
func cleanupPendingConnection(contactConnection: PendingContactConnection?) -> SomeAlert? {
|
||||
var alert: SomeAlert? = nil
|
||||
|
||||
if !(chatModel.showingInvitation?.connChatUsed ?? true),
|
||||
if !(ChatModel.shared.showingInvitation?.connChatUsed ?? true),
|
||||
let conn = contactConnection {
|
||||
alert = SomeAlert(
|
||||
alert: Alert(
|
||||
@@ -68,7 +68,7 @@ func cleanupPendingConnection(chatModel: ChatModel, contactConnection: PendingCo
|
||||
)
|
||||
}
|
||||
|
||||
chatModel.showingInvitation = nil
|
||||
ChatModel.shared.showingInvitation = nil
|
||||
|
||||
return alert
|
||||
}
|
||||
@@ -97,6 +97,11 @@ 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
|
||||
@@ -152,7 +157,7 @@ struct NewChatView: View {
|
||||
}
|
||||
.onDisappear {
|
||||
if !choosingProfile {
|
||||
parentAlert = cleanupPendingConnection(chatModel: m, contactConnection: contactConnection)
|
||||
parentAlert = cleanupPendingConnection(contactConnection: contactConnection)
|
||||
contactConnection = nil
|
||||
}
|
||||
}
|
||||
@@ -241,7 +246,6 @@ 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 {
|
||||
@@ -693,6 +697,7 @@ 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")
|
||||
@@ -712,21 +717,26 @@ struct ScannerInView: View {
|
||||
.disabled(cameraAuthorizationStatus == .restricted)
|
||||
}
|
||||
}
|
||||
.onAppear {
|
||||
.task {
|
||||
let status = AVCaptureDevice.authorizationStatus(for: .video)
|
||||
cameraAuthorizationStatus = status
|
||||
if showQRCodeScanner {
|
||||
switch status {
|
||||
case .notDetermined: askCameraAuthorization()
|
||||
case .notDetermined: await askCameraAuthorizationAsync()
|
||||
case .restricted: showQRCodeScanner = false
|
||||
case .denied: showQRCodeScanner = false
|
||||
case .authorized: ()
|
||||
@unknown default: askCameraAuthorization()
|
||||
@unknown default: await askCameraAuthorizationAsync()
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
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?()
|
||||
.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)
|
||||
}
|
||||
.frame(width: geo.size.width, height: geo.size.height)
|
||||
} else {
|
||||
Color.clear.aspectRatio(1, contentMode: .fit)
|
||||
}
|
||||
}
|
||||
.onTapGesture(perform: makeScreenshotFunc)
|
||||
.onAppear {
|
||||
image = image ?? generateImage(uri, tintColor: tintColor)
|
||||
}
|
||||
.task { image = await 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) -> UIImage? {
|
||||
private func generateImage(_ uri: String, tintColor: UIColor) async -> UIImage? {
|
||||
let context = CIContext()
|
||||
let filter = CIFilter.qrCodeGenerator()
|
||||
filter.message = Data(uri.utf8)
|
||||
|
||||
@@ -467,6 +467,39 @@ 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,7 +14,6 @@ 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
|
||||
@@ -57,16 +56,6 @@ 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) {
|
||||
|
||||
@@ -36,6 +36,10 @@ struct AdvancedNetworkSettings: View {
|
||||
@State private var showSettingsAlert: NetworkSettingsAlert?
|
||||
@State private var onionHosts: OnionHosts = .no
|
||||
@State private var showSaveDialog = false
|
||||
@State private var netProxy = networkProxyDefault.get()
|
||||
@State private var currentNetProxy = networkProxyDefault.get()
|
||||
@State private var useNetProxy = false
|
||||
@State private var netProxyAuth = false
|
||||
|
||||
var body: some View {
|
||||
VStack {
|
||||
@@ -102,6 +106,76 @@ struct AdvancedNetworkSettings: View {
|
||||
.foregroundColor(theme.colors.secondary)
|
||||
}
|
||||
|
||||
Section {
|
||||
Toggle("Use SOCKS proxy", isOn: $useNetProxy)
|
||||
Group {
|
||||
TextField("IP address", text: $netProxy.host)
|
||||
TextField(
|
||||
"Port",
|
||||
text: Binding(
|
||||
get: { netProxy.port > 0 ? "\(netProxy.port)" : "" },
|
||||
set: { s in
|
||||
netProxy.port = if let port = Int(s), port > 0 {
|
||||
port
|
||||
} else {
|
||||
0
|
||||
}
|
||||
}
|
||||
)
|
||||
)
|
||||
Toggle("Proxy requires password", isOn: $netProxyAuth)
|
||||
if netProxyAuth {
|
||||
TextField("Username", text: $netProxy.username)
|
||||
PassphraseField(
|
||||
key: $netProxy.password,
|
||||
placeholder: "Password",
|
||||
valid: NetworkProxy.validCredential(netProxy.password)
|
||||
)
|
||||
}
|
||||
}
|
||||
.if(!useNetProxy) { $0.foregroundColor(theme.colors.secondary) }
|
||||
.disabled(!useNetProxy)
|
||||
} header: {
|
||||
HStack {
|
||||
Text("SOCKS proxy").foregroundColor(theme.colors.secondary)
|
||||
if useNetProxy && !netProxy.valid {
|
||||
Spacer()
|
||||
Image(systemName: "exclamationmark.circle.fill").foregroundColor(.red)
|
||||
}
|
||||
}
|
||||
} footer: {
|
||||
if netProxyAuth {
|
||||
Text("Your credentials may be sent unencrypted.")
|
||||
.foregroundColor(theme.colors.secondary)
|
||||
} else {
|
||||
Text("Do not use credentials with proxy.")
|
||||
.foregroundColor(theme.colors.secondary)
|
||||
}
|
||||
}
|
||||
.onChange(of: useNetProxy) { useNetProxy in
|
||||
netCfg.socksProxy = useNetProxy && currentNetProxy.valid
|
||||
? currentNetProxy.toProxyString()
|
||||
: nil
|
||||
netProxy = currentNetProxy
|
||||
netProxyAuth = netProxy.username != "" || netProxy.password != ""
|
||||
}
|
||||
.onChange(of: netProxyAuth) { netProxyAuth in
|
||||
if netProxyAuth {
|
||||
netProxy.auth = currentNetProxy.auth
|
||||
netProxy.username = currentNetProxy.username
|
||||
netProxy.password = currentNetProxy.password
|
||||
} else {
|
||||
netProxy.auth = .username
|
||||
netProxy.username = ""
|
||||
netProxy.password = ""
|
||||
}
|
||||
}
|
||||
.onChange(of: netProxy) { netProxy in
|
||||
netCfg.socksProxy = useNetProxy && netProxy.valid
|
||||
? netProxy.toProxyString()
|
||||
: nil
|
||||
}
|
||||
|
||||
Section {
|
||||
Picker("Use .onion hosts", selection: $onionHosts) {
|
||||
ForEach(OnionHosts.values, id: \.self) { Text($0.text) }
|
||||
@@ -122,11 +196,14 @@ struct AdvancedNetworkSettings: View {
|
||||
if developerTools {
|
||||
Section {
|
||||
Picker("Transport isolation", selection: $netCfg.sessionMode) {
|
||||
ForEach(TransportSessionMode.values, id: \.self) { Text($0.text) }
|
||||
let modes = TransportSessionMode.values.contains(netCfg.sessionMode)
|
||||
? TransportSessionMode.values
|
||||
: TransportSessionMode.values + [netCfg.sessionMode]
|
||||
ForEach(modes, id: \.self) { Text($0.text) }
|
||||
}
|
||||
.frame(height: 36)
|
||||
} footer: {
|
||||
Text(sessionModeInfo(netCfg.sessionMode))
|
||||
sessionModeInfo(netCfg.sessionMode)
|
||||
.foregroundColor(theme.colors.secondary)
|
||||
}
|
||||
}
|
||||
@@ -156,19 +233,19 @@ struct AdvancedNetworkSettings: View {
|
||||
|
||||
Section {
|
||||
Button("Reset to defaults") {
|
||||
updateNetCfgView(NetCfg.defaults)
|
||||
updateNetCfgView(NetCfg.defaults, NetworkProxy.def)
|
||||
}
|
||||
.disabled(netCfg == NetCfg.defaults)
|
||||
|
||||
Button("Set timeouts for proxy/VPN") {
|
||||
updateNetCfgView(netCfg.withProxyTimeouts)
|
||||
updateNetCfgView(netCfg.withProxyTimeouts, netProxy)
|
||||
}
|
||||
.disabled(netCfg.hasProxyTimeouts)
|
||||
|
||||
Button("Save and reconnect") {
|
||||
showSettingsAlert = .update
|
||||
}
|
||||
.disabled(netCfg == currentNetCfg)
|
||||
.disabled(netCfg == currentNetCfg || (useNetProxy && !netProxy.valid))
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -182,7 +259,8 @@ struct AdvancedNetworkSettings: View {
|
||||
if cfgLoaded { return }
|
||||
cfgLoaded = true
|
||||
currentNetCfg = getNetCfg()
|
||||
updateNetCfgView(currentNetCfg)
|
||||
currentNetProxy = networkProxyDefault.get()
|
||||
updateNetCfgView(currentNetCfg, currentNetProxy)
|
||||
}
|
||||
.alert(item: $showSettingsAlert) { a in
|
||||
switch a {
|
||||
@@ -206,7 +284,7 @@ struct AdvancedNetworkSettings: View {
|
||||
if netCfg == currentNetCfg {
|
||||
dismiss()
|
||||
cfgLoaded = false
|
||||
} else {
|
||||
} else if !useNetProxy || netProxy.valid {
|
||||
showSaveDialog = true
|
||||
}
|
||||
})
|
||||
@@ -221,18 +299,26 @@ struct AdvancedNetworkSettings: View {
|
||||
}
|
||||
}
|
||||
|
||||
private func updateNetCfgView(_ cfg: NetCfg) {
|
||||
private func updateNetCfgView(_ cfg: NetCfg, _ proxy: NetworkProxy) {
|
||||
netCfg = cfg
|
||||
netProxy = proxy
|
||||
onionHosts = OnionHosts(netCfg: netCfg)
|
||||
enableKeepAlive = netCfg.enableKeepAlive
|
||||
keepAliveOpts = netCfg.tcpKeepAlive ?? KeepAliveOpts.defaults
|
||||
useNetProxy = netCfg.socksProxy != nil
|
||||
netProxyAuth = switch netProxy.auth {
|
||||
case .username: netProxy.username != "" || netProxy.password != ""
|
||||
case .isolate: false
|
||||
}
|
||||
}
|
||||
|
||||
private func saveNetCfg() -> Bool {
|
||||
do {
|
||||
try setNetworkConfig(netCfg)
|
||||
currentNetCfg = netCfg
|
||||
setNetCfg(netCfg)
|
||||
setNetCfg(netCfg, networkProxy: useNetProxy ? netProxy : nil)
|
||||
currentNetProxy = netProxy
|
||||
networkProxyDefault.set(netProxy)
|
||||
return true
|
||||
} catch let error {
|
||||
let err = responseError(error)
|
||||
@@ -270,10 +356,13 @@ struct AdvancedNetworkSettings: View {
|
||||
}
|
||||
}
|
||||
|
||||
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."
|
||||
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.")
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -19,9 +19,15 @@ extension AppSettings {
|
||||
val.hostMode = .publicHost
|
||||
val.requiredHostMode = true
|
||||
}
|
||||
val.socksProxy = nil
|
||||
setNetCfg(val)
|
||||
if val.socksProxy != nil {
|
||||
val.socksProxy = networkProxy?.toProxyString()
|
||||
setNetCfg(val, networkProxy: networkProxy)
|
||||
} else {
|
||||
val.socksProxy = nil
|
||||
setNetCfg(val, networkProxy: nil)
|
||||
}
|
||||
}
|
||||
if let val = networkProxy { networkProxyDefault.set(val) }
|
||||
if let val = privacyEncryptLocalFiles { privacyEncryptLocalFilesGroupDefault.set(val) }
|
||||
if let val = privacyAskToApproveRelays { privacyAskToApproveRelaysGroupDefault.set(val) }
|
||||
if let val = privacyAcceptImages {
|
||||
@@ -52,6 +58,8 @@ extension AppSettings {
|
||||
profileImageCornerRadiusGroupDefault.set(val)
|
||||
def.setValue(val, forKey: DEFAULT_PROFILE_IMAGE_CORNER_RADIUS)
|
||||
}
|
||||
if let val = uiChatItemRoundness { def.setValue(val, forKey: DEFAULT_CHAT_ITEM_ROUNDNESS)}
|
||||
if let val = uiChatItemTail { def.setValue(val, forKey: DEFAULT_CHAT_ITEM_TAIL)}
|
||||
if let val = uiColorScheme { currentThemeDefault.set(val) }
|
||||
if let val = uiDarkColorScheme { systemDarkThemeDefault.set(val) }
|
||||
if let val = uiCurrentThemeIds { currentThemeIdsDefault.set(val) }
|
||||
@@ -63,6 +71,7 @@ extension AppSettings {
|
||||
let def = UserDefaults.standard
|
||||
var c = AppSettings.defaults
|
||||
c.networkConfig = getNetCfg()
|
||||
c.networkProxy = networkProxyDefault.get()
|
||||
c.privacyEncryptLocalFiles = privacyEncryptLocalFilesGroupDefault.get()
|
||||
c.privacyAskToApproveRelays = privacyAskToApproveRelaysGroupDefault.get()
|
||||
c.privacyAcceptImages = privacyAcceptImagesGroupDefault.get()
|
||||
@@ -84,6 +93,8 @@ extension AppSettings {
|
||||
c.iosCallKitEnabled = callKitEnabledGroupDefault.get()
|
||||
c.iosCallKitCallsInRecents = def.bool(forKey: DEFAULT_CALL_KIT_CALLS_IN_RECENTS)
|
||||
c.uiProfileImageCornerRadius = def.double(forKey: DEFAULT_PROFILE_IMAGE_CORNER_RADIUS)
|
||||
c.uiChatItemRoundness = def.double(forKey: DEFAULT_CHAT_ITEM_ROUNDNESS)
|
||||
c.uiChatItemTail = def.bool(forKey: DEFAULT_CHAT_ITEM_TAIL)
|
||||
c.uiColorScheme = currentThemeDefault.get()
|
||||
c.uiDarkColorScheme = systemDarkThemeDefault.get()
|
||||
c.uiCurrentThemeIds = currentThemeIdsDefault.get()
|
||||
|
||||
@@ -808,7 +808,7 @@ struct ThemeDestinationPicker: View {
|
||||
@Binding var customizeThemeIsOpen: Bool
|
||||
|
||||
var body: some View {
|
||||
let values = [(nil, "All profiles")] + m.users.filter { $0.user.activeUser }.map { ($0.user.userId, $0.user.chatViewName)}
|
||||
let values = [(nil, NSLocalizedString("All profiles", comment: "profile dropdown"))] + m.users.filter { $0.user.activeUser }.map { ($0.user.userId, $0.user.chatViewName)}
|
||||
|
||||
if values.contains(where: { (userId, text) in userId == themeUserDestination?.0 }) {
|
||||
Picker("Apply to", selection: $themeUserDest) {
|
||||
|
||||
@@ -75,6 +75,8 @@ let DEFAULT_SYSTEM_DARK_THEME = "systemDarkTheme"
|
||||
let DEFAULT_CURRENT_THEME_IDS = "currentThemeIds"
|
||||
let DEFAULT_THEME_OVERRIDES = "themeOverrides"
|
||||
|
||||
let DEFAULT_NETWORK_PROXY = "networkProxy"
|
||||
|
||||
let ANDROID_DEFAULT_CALL_ON_LOCK_SCREEN = "androidCallOnLockScreen"
|
||||
|
||||
let defaultChatItemRoundness: Double = 0.75
|
||||
@@ -251,26 +253,22 @@ public class CodableDefault<T: Codable> {
|
||||
}
|
||||
}
|
||||
|
||||
let networkProxyDefault: CodableDefault<NetworkProxy> = CodableDefault(defaults: UserDefaults.standard, forKey: DEFAULT_NETWORK_PROXY, withDefault: NetworkProxy.def)
|
||||
|
||||
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 {
|
||||
NavigationView {
|
||||
settingsView()
|
||||
}
|
||||
settingsView()
|
||||
if showProgress {
|
||||
progressView()
|
||||
}
|
||||
if let la = chatModel.laRequest {
|
||||
LocalAuthView(authRequest: la)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -344,7 +342,7 @@ struct SettingsView: View {
|
||||
Section(header: Text("Help").foregroundColor(theme.colors.secondary)) {
|
||||
if let user = user {
|
||||
NavigationLink {
|
||||
ChatHelp(showSettings: $showSettings)
|
||||
ChatHelp(dismissSettingsSheet: dismiss)
|
||||
.navigationTitle("Welcome \(user.displayName)!")
|
||||
.modifier(ThemedBackground())
|
||||
.frame(maxHeight: .infinity, alignment: .top)
|
||||
@@ -369,7 +367,7 @@ struct SettingsView: View {
|
||||
}
|
||||
settingsRow("number", color: theme.colors.secondary) {
|
||||
Button("Send questions and ideas") {
|
||||
showSettings = false
|
||||
dismiss()
|
||||
DispatchQueue.main.async {
|
||||
UIApplication.shared.open(simplexTeamURL)
|
||||
}
|
||||
@@ -426,7 +424,7 @@ struct SettingsView: View {
|
||||
|
||||
private func chatDatabaseRow() -> some View {
|
||||
NavigationLink {
|
||||
DatabaseView(showSettings: $showSettings, chatItemTTL: chatModel.chatItemTTL)
|
||||
DatabaseView(dismissSettingsSheet: dismiss, chatItemTTL: chatModel.chatItemTTL)
|
||||
.navigationTitle("Your chat database")
|
||||
.modifier(ThemedBackground(grouped: true))
|
||||
} label: {
|
||||
@@ -504,27 +502,25 @@ struct ProfilePreview: View {
|
||||
HStack {
|
||||
ProfileImage(imageStr: profileOf.image, size: 44, color: color)
|
||||
.padding(.trailing, 6)
|
||||
profileName().lineLimit(1)
|
||||
profileName(profileOf).lineLimit(1)
|
||||
}
|
||||
}
|
||||
|
||||
private func profileName() -> Text {
|
||||
var t = Text(profileOf.displayName).fontWeight(.semibold).font(.title2)
|
||||
if profileOf.fullName != "" && profileOf.fullName != profileOf.displayName {
|
||||
t = t + Text(" (" + profileOf.fullName + ")")
|
||||
}
|
||||
|
||||
func profileName(_ profileOf: NamedChat) -> Text {
|
||||
var t = Text(profileOf.displayName).fontWeight(.semibold).font(.title2)
|
||||
if profileOf.fullName != "" && profileOf.fullName != profileOf.displayName {
|
||||
t = t + Text(" (" + profileOf.fullName + ")")
|
||||
// .font(.callout)
|
||||
}
|
||||
return t
|
||||
}
|
||||
}
|
||||
return t
|
||||
}
|
||||
|
||||
struct SettingsView_Previews: PreviewProvider {
|
||||
static var previews: some View {
|
||||
let chatModel = ChatModel()
|
||||
chatModel.currentUser = User.sampleData
|
||||
@State var showSettings = false
|
||||
|
||||
return SettingsView(showSettings: $showSettings)
|
||||
return SettingsView()
|
||||
.environmentObject(chatModel)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -229,7 +229,7 @@ struct UserAddressView: View {
|
||||
}
|
||||
}
|
||||
} label: {
|
||||
Label("Create public address", systemImage: "qrcode")
|
||||
Label("Create SimpleX address", systemImage: "qrcode")
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
File diff suppressed because one or more lines are too long
@@ -161,11 +161,31 @@
|
||||
<target>%d дни</target>
|
||||
<note>time interval</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="%d file(s) are still being downloaded." xml:space="preserve">
|
||||
<source>%d file(s) are still being downloaded.</source>
|
||||
<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>
|
||||
<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>
|
||||
<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>
|
||||
<note>forward confirmation reason</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="%d hours" xml:space="preserve">
|
||||
<source>%d hours</source>
|
||||
<target>%d часа</target>
|
||||
<note>time interval</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="%d messages not forwarded" xml:space="preserve">
|
||||
<source>%d messages not forwarded</source>
|
||||
<note>alert title</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="%d min" xml:space="preserve">
|
||||
<source>%d min</source>
|
||||
<target>%d мин.</target>
|
||||
@@ -717,7 +737,7 @@
|
||||
</trans-unit>
|
||||
<trans-unit id="All profiles" xml:space="preserve">
|
||||
<source>All profiles</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
<note>profile dropdown</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="All your contacts will remain connected." xml:space="preserve">
|
||||
<source>All your contacts will remain connected.</source>
|
||||
@@ -905,6 +925,10 @@
|
||||
<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>
|
||||
@@ -1007,6 +1031,10 @@
|
||||
<target>Автоматично приемане на изображения</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Auto-accept settings" xml:space="preserve">
|
||||
<source>Auto-accept settings</source>
|
||||
<note>alert title</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Back" xml:space="preserve">
|
||||
<source>Back</source>
|
||||
<target>Назад</target>
|
||||
@@ -1031,11 +1059,19 @@
|
||||
<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>
|
||||
@@ -1045,6 +1081,18 @@
|
||||
<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>
|
||||
@@ -1171,7 +1219,7 @@
|
||||
<trans-unit id="Cancel" xml:space="preserve">
|
||||
<source>Cancel</source>
|
||||
<target>Отказ</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
<note>alert button</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Cancel migration" xml:space="preserve">
|
||||
<source>Cancel migration</source>
|
||||
@@ -1190,7 +1238,7 @@
|
||||
<trans-unit id="Cannot receive file" xml:space="preserve">
|
||||
<source>Cannot receive file</source>
|
||||
<target>Файлът не може да бъде получен</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
<note>alert title</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Capacity exceeded - recipient did not receive previously sent messages." xml:space="preserve">
|
||||
<source>Capacity exceeded - recipient did not receive previously sent messages.</source>
|
||||
@@ -1314,6 +1362,15 @@
|
||||
<target>Чат настройки</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Chat preferences were changed." xml:space="preserve">
|
||||
<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>
|
||||
@@ -1816,6 +1873,10 @@ 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>
|
||||
@@ -2105,6 +2166,10 @@ 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>
|
||||
@@ -2342,6 +2407,10 @@ This is your own one-time link!</source>
|
||||
<target>Не изпращай история на нови членове.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Do not use credentials with proxy." xml:space="preserve">
|
||||
<source>Do not use credentials with proxy.</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Don't create address" xml:space="preserve">
|
||||
<source>Don't create address</source>
|
||||
<target>Не създавай адрес</target>
|
||||
@@ -2365,7 +2434,8 @@ This is your own one-time link!</source>
|
||||
<trans-unit id="Download" xml:space="preserve">
|
||||
<source>Download</source>
|
||||
<target>Изтегли</target>
|
||||
<note>chat item action</note>
|
||||
<note>alert button
|
||||
chat item action</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Download errors" xml:space="preserve">
|
||||
<source>Download errors</source>
|
||||
@@ -2381,6 +2451,10 @@ This is your own one-time link!</source>
|
||||
<target>Свали файл</target>
|
||||
<note>server test step</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Download files" xml:space="preserve">
|
||||
<source>Download files</source>
|
||||
<note>alert action</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Downloaded" xml:space="preserve">
|
||||
<source>Downloaded</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
@@ -2789,6 +2863,10 @@ This is your own one-time link!</source>
|
||||
<target>Грешка при зареждане на %@ сървъри</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Error migrating settings" xml:space="preserve">
|
||||
<source>Error migrating settings</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Error opening chat" xml:space="preserve">
|
||||
<source>Error opening chat</source>
|
||||
<target>Грешка при отваряне на чата</target>
|
||||
@@ -2797,7 +2875,7 @@ This is your own one-time link!</source>
|
||||
<trans-unit id="Error receiving file" xml:space="preserve">
|
||||
<source>Error receiving file</source>
|
||||
<target>Грешка при получаване на файл</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
<note>alert title</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Error reconnecting server" xml:space="preserve">
|
||||
<source>Error reconnecting server</source>
|
||||
@@ -2893,7 +2971,7 @@ This is your own one-time link!</source>
|
||||
<trans-unit id="Error switching profile!" xml:space="preserve">
|
||||
<source>Error switching profile!</source>
|
||||
<target>Грешка при смяна на профил!</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
<note>alertTitle</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Error synchronizing connection" xml:space="preserve">
|
||||
<source>Error synchronizing connection</source>
|
||||
@@ -2938,8 +3016,7 @@ This is your own one-time link!</source>
|
||||
<trans-unit id="Error: %@" xml:space="preserve">
|
||||
<source>Error: %@</source>
|
||||
<target>Грешка: %@</target>
|
||||
<note>file error text
|
||||
snd error text</note>
|
||||
<note>alert message</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Error: URL is invalid" xml:space="preserve">
|
||||
<source>Error: URL is invalid</source>
|
||||
@@ -3023,6 +3100,11 @@ This is your own one-time link!</source>
|
||||
<source>File error</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="File errors: %@" xml:space="preserve">
|
||||
<source>File errors:
|
||||
%@</source>
|
||||
<note>alert message</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="File not found - most likely file was deleted or cancelled." xml:space="preserve">
|
||||
<source>File not found - most likely file was deleted or cancelled.</source>
|
||||
<note>file error text</note>
|
||||
@@ -3153,11 +3235,27 @@ This is your own one-time link!</source>
|
||||
<target>Препрати</target>
|
||||
<note>chat item action</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Forward %d message(s)?" xml:space="preserve">
|
||||
<source>Forward %d message(s)?</source>
|
||||
<note>alert title</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Forward and save messages" xml:space="preserve">
|
||||
<source>Forward and save messages</source>
|
||||
<target>Препращане и запазване на съобщения</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Forward messages" xml:space="preserve">
|
||||
<source>Forward messages</source>
|
||||
<note>alert action</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Forward messages without files?" xml:space="preserve">
|
||||
<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>
|
||||
@@ -3168,6 +3266,10 @@ This is your own one-time link!</source>
|
||||
<target>Препратено от</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Forwarding %lld messages" xml:space="preserve">
|
||||
<source>Forwarding %lld messages</source>
|
||||
<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">
|
||||
<source>Forwarding server %@ failed to connect to destination server %@. Please try later.</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
@@ -3210,11 +3312,6 @@ Error: %2$@</source>
|
||||
<target>Пълно име (незадължително)</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Full name:" xml:space="preserve">
|
||||
<source>Full name:</source>
|
||||
<target>Пълно име:</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Fully decentralized – visible only to members." xml:space="preserve">
|
||||
<source>Fully decentralized – visible only to members.</source>
|
||||
<target>Напълно децентрализирана – видима е само за членовете.</target>
|
||||
@@ -3458,6 +3555,10 @@ Error: %2$@</source>
|
||||
<target>ICE сървъри (по един на ред)</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="IP address" xml:space="preserve">
|
||||
<source>IP address</source>
|
||||
<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">
|
||||
<source>If you can't meet in person, show QR code in a video call, or share the link.</source>
|
||||
<target>Ако не можете да се срещнете лично, покажете QR код във видеоразговора или споделете линка.</target>
|
||||
@@ -3532,6 +3633,11 @@ 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>
|
||||
@@ -4139,6 +4245,10 @@ This is your link for group %@!</source>
|
||||
<source>Messages sent</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Messages were deleted after you selected them." xml:space="preserve">
|
||||
<source>Messages were deleted after you selected them.</source>
|
||||
<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">
|
||||
<source>Messages, files and calls are protected by **end-to-end encryption** with perfect forward secrecy, repudiation and break-in recovery.</source>
|
||||
<target>Съобщенията, файловете и разговорите са защитени чрез **криптиране от край до край** с перфектна секретност при препращане, правдоподобно опровержение и възстановяване при взлом.</target>
|
||||
@@ -4293,6 +4403,14 @@ 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>
|
||||
@@ -4409,6 +4527,14 @@ 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>
|
||||
@@ -4428,6 +4554,10 @@ This is your link for group %@!</source>
|
||||
<source>Nothing selected</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Nothing to forward!" xml:space="preserve">
|
||||
<source>Nothing to forward!</source>
|
||||
<note>alert title</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Notifications" xml:space="preserve">
|
||||
<source>Notifications</source>
|
||||
<target>Известия</target>
|
||||
@@ -4460,7 +4590,7 @@ This is your link for group %@!</source>
|
||||
<trans-unit id="Ok" xml:space="preserve">
|
||||
<source>Ok</source>
|
||||
<target>Ок</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
<note>alert button</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Old database" xml:space="preserve">
|
||||
<source>Old database</source>
|
||||
@@ -4648,6 +4778,11 @@ Requires compatible VPN.</source>
|
||||
<source>Other %@ servers</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Other file errors: %@" xml:space="preserve">
|
||||
<source>Other file errors:
|
||||
%@</source>
|
||||
<note>alert message</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="PING count" xml:space="preserve">
|
||||
<source>PING count</source>
|
||||
<target>PING бройка</target>
|
||||
@@ -4683,6 +4818,10 @@ Requires compatible VPN.</source>
|
||||
<target>Кодът за достъп е зададен!</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Password" xml:space="preserve">
|
||||
<source>Password</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Password to show" xml:space="preserve">
|
||||
<source>Password to show</source>
|
||||
<target>Парола за показване</target>
|
||||
@@ -4827,6 +4966,10 @@ Error: %@</source>
|
||||
<target>Полски интерфейс</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Port" xml:space="preserve">
|
||||
<source>Port</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</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>Въжможно е пръстовият отпечатък на сертификата в адреса на сървъра да е неправилен</target>
|
||||
@@ -4907,16 +5050,6 @@ Error: %@</source>
|
||||
<target>Профилни изображения</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Profile name" xml:space="preserve">
|
||||
<source>Profile name</source>
|
||||
<target>Име на профила</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Profile name:" xml:space="preserve">
|
||||
<source>Profile name:</source>
|
||||
<target>Име на профила:</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Profile password" xml:space="preserve">
|
||||
<source>Profile password</source>
|
||||
<target>Профилна парола</target>
|
||||
@@ -5013,6 +5146,10 @@ Enable in *Network & servers* settings.</source>
|
||||
<source>Proxied servers</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Proxy requires password" xml:space="preserve">
|
||||
<source>Proxy requires password</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Push notifications" xml:space="preserve">
|
||||
<source>Push notifications</source>
|
||||
<target>Push известия</target>
|
||||
@@ -5224,6 +5361,10 @@ Enable in *Network & servers* settings.</source>
|
||||
<target>Премахване</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Remove archive?" xml:space="preserve">
|
||||
<source>Remove archive?</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Remove image" xml:space="preserve">
|
||||
<source>Remove image</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
@@ -5397,6 +5538,10 @@ Enable in *Network & servers* settings.</source>
|
||||
<source>SMP server</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="SOCKS proxy" xml:space="preserve">
|
||||
<source>SOCKS proxy</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Safely receive files" xml:space="preserve">
|
||||
<source>Safely receive files</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
@@ -5409,12 +5554,13 @@ Enable in *Network & servers* settings.</source>
|
||||
<trans-unit id="Save" xml:space="preserve">
|
||||
<source>Save</source>
|
||||
<target>Запази</target>
|
||||
<note>chat item action</note>
|
||||
<note>alert button
|
||||
chat item action</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Save (and notify contacts)" xml:space="preserve">
|
||||
<source>Save (and notify contacts)</source>
|
||||
<target>Запази (и уведоми контактите)</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
<note>alert button</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Save and notify contact" xml:space="preserve">
|
||||
<source>Save and notify contact</source>
|
||||
@@ -5440,11 +5586,6 @@ Enable in *Network & servers* settings.</source>
|
||||
<target>Запази архив</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Save auto-accept settings" xml:space="preserve">
|
||||
<source>Save auto-accept settings</source>
|
||||
<target>Запази настройките за автоматично приемане</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Save group profile" xml:space="preserve">
|
||||
<source>Save group profile</source>
|
||||
<target>Запази профила на групата</target>
|
||||
@@ -5480,16 +5621,15 @@ Enable in *Network & servers* settings.</source>
|
||||
<target>Запази сървърите?</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Save settings?" xml:space="preserve">
|
||||
<source>Save settings?</source>
|
||||
<target>Запази настройките?</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Save welcome message?" xml:space="preserve">
|
||||
<source>Save welcome message?</source>
|
||||
<target>Запази съобщението при посрещане?</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Save your profile?" xml:space="preserve">
|
||||
<source>Save your profile?</source>
|
||||
<note>alert title</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Saved" xml:space="preserve">
|
||||
<source>Saved</source>
|
||||
<target>Запазено</target>
|
||||
@@ -5510,6 +5650,10 @@ Enable in *Network & servers* settings.</source>
|
||||
<target>Запазено съобщение</target>
|
||||
<note>message info title</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Saving %lld messages" xml:space="preserve">
|
||||
<source>Saving %lld messages</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Scale" xml:space="preserve">
|
||||
<source>Scale</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
@@ -5702,7 +5846,7 @@ Enable in *Network & servers* settings.</source>
|
||||
<trans-unit id="Sender cancelled file transfer." xml:space="preserve">
|
||||
<source>Sender cancelled file transfer.</source>
|
||||
<target>Подателят отмени прехвърлянето на файла.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
<note>alert message</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Sender may have deleted the connection request." xml:space="preserve">
|
||||
<source>Sender may have deleted the connection request.</source>
|
||||
@@ -5794,6 +5938,10 @@ 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>
|
||||
@@ -5905,6 +6053,10 @@ Enable in *Network & servers* settings.</source>
|
||||
<target>Настройки</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Settings were changed." xml:space="preserve">
|
||||
<source>Settings were changed.</source>
|
||||
<note>alert message</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Shape profile images" xml:space="preserve">
|
||||
<source>Shape profile images</source>
|
||||
<target>Променете формата на профилните изображения</target>
|
||||
@@ -6073,6 +6225,10 @@ 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>
|
||||
@@ -6101,6 +6257,10 @@ Enable in *Network & servers* settings.</source>
|
||||
<source>Soft</source>
|
||||
<note>blur media</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Some app settings were not migrated." xml:space="preserve">
|
||||
<source>Some app settings were not migrated.</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Some file(s) were not exported:" xml:space="preserve">
|
||||
<source>Some file(s) were not exported:</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
@@ -6233,6 +6393,14 @@ 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>
|
||||
@@ -6459,6 +6627,10 @@ It can happen because of some bug or when the connection is compromised.</source
|
||||
<target>Текстът, който поставихте, не е SimpleX линк за връзка.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</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>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Themes" xml:space="preserve">
|
||||
<source>Themes</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
@@ -6582,6 +6754,14 @@ 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>
|
||||
@@ -6730,7 +6910,7 @@ You will be prompted to complete authentication before this feature is enabled.<
|
||||
</trans-unit>
|
||||
<trans-unit id="Unknown servers!" xml:space="preserve">
|
||||
<source>Unknown servers!</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
<note>alert title</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Unless you use iOS call interface, enable Do Not Disturb mode to avoid interruptions." xml:space="preserve">
|
||||
<source>Unless you use iOS call interface, enable Do Not Disturb mode to avoid interruptions.</source>
|
||||
@@ -6840,6 +7020,10 @@ To connect, please ask your contact to create another connection link and check
|
||||
<target>Използвай .onion хостове</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Use SOCKS proxy" xml:space="preserve">
|
||||
<source>Use SOCKS proxy</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Use SimpleX Chat servers?" xml:space="preserve">
|
||||
<source>Use SimpleX Chat servers?</source>
|
||||
<target>Използвай сървърите на SimpleX Chat?</target>
|
||||
@@ -6902,15 +7086,14 @@ 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>
|
||||
</trans-unit>
|
||||
<trans-unit id="Username" xml:space="preserve">
|
||||
<source>Username</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Using SimpleX Chat servers." xml:space="preserve">
|
||||
<source>Using SimpleX Chat servers.</source>
|
||||
<target>Използват се сървърите на SimpleX Chat.</target>
|
||||
@@ -7140,7 +7323,7 @@ To connect, please ask your contact to create another connection link and check
|
||||
</trans-unit>
|
||||
<trans-unit id="Without Tor or VPN, your IP address will be visible to these XFTP relays: %@." xml:space="preserve">
|
||||
<source>Without Tor or VPN, your IP address will be visible to these XFTP relays: %@.</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
<note>alert message</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Wrong database passphrase" xml:space="preserve">
|
||||
<source>Wrong database passphrase</source>
|
||||
@@ -7164,11 +7347,6 @@ To connect, please ask your contact to create another connection link and check
|
||||
<source>XFTP server</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="You" xml:space="preserve">
|
||||
<source>You</source>
|
||||
<target>Вие</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="You **must not** use the same database on two devices." xml:space="preserve">
|
||||
<source>You **must not** use the same database on two devices.</source>
|
||||
<target>**Не трябва** да използвате една и съща база данни на две устройства.</target>
|
||||
@@ -7511,6 +7689,10 @@ Repeat connection request?</source>
|
||||
<target>Вашата чат база данни не е криптирана - задайте парола, за да я криптирате.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Your chat preferences" xml:space="preserve">
|
||||
<source>Your chat preferences</source>
|
||||
<note>alert title</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Your chat profiles" xml:space="preserve">
|
||||
<source>Your chat profiles</source>
|
||||
<target>Вашите чат профили</target>
|
||||
@@ -7535,6 +7717,10 @@ Repeat connection request?</source>
|
||||
<target>Вашите контакти ще останат свързани.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Your credentials may be sent unencrypted." xml:space="preserve">
|
||||
<source>Your credentials may be sent unencrypted.</source>
|
||||
<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">
|
||||
<source>Your current chat database will be DELETED and REPLACED with the imported one.</source>
|
||||
<target>Вашата текуща чат база данни ще бъде ИЗТРИТА и ЗАМЕНЕНА с импортираната.</target>
|
||||
@@ -7565,13 +7751,15 @@ Repeat connection request?</source>
|
||||
<target>Вашият профил **%@** ще бъде споделен.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Your profile is stored on your device and shared only with your contacts. SimpleX servers cannot see your profile." xml:space="preserve">
|
||||
<source>Your profile is stored on your device and shared only with your contacts.
|
||||
SimpleX servers cannot see your profile.</source>
|
||||
<target>Вашият профил се съхранява на вашето устройство и се споделя само с вашите контакти.
|
||||
SimpleX сървърите не могат да видят вашия профил.</target>
|
||||
<trans-unit id="Your profile is stored on your device and shared only with your contacts. SimpleX servers cannot see your profile." xml:space="preserve">
|
||||
<source>Your profile is stored on your device and shared only with your contacts. SimpleX servers cannot see your profile.</source>
|
||||
<target>Вашият профил се съхранява на вашето устройство и се споделя само с вашите контакти. SimpleX сървърите не могат да видят вашия профил.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</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>
|
||||
<note>alert message</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Your profile, contacts and delivered messages are stored on your device." xml:space="preserve">
|
||||
<source>Your profile, contacts and delivered messages are stored on your device.</source>
|
||||
<target>Вашият профил, контакти и доставени съобщения се съхраняват на вашето устройство.</target>
|
||||
|
||||
@@ -158,11 +158,31 @@
|
||||
<target>%d dní</target>
|
||||
<note>time interval</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="%d file(s) are still being downloaded." xml:space="preserve">
|
||||
<source>%d file(s) are still being downloaded.</source>
|
||||
<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>
|
||||
<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>
|
||||
<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>
|
||||
<note>forward confirmation reason</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="%d hours" xml:space="preserve">
|
||||
<source>%d hours</source>
|
||||
<target>%d hodin</target>
|
||||
<note>time interval</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="%d messages not forwarded" xml:space="preserve">
|
||||
<source>%d messages not forwarded</source>
|
||||
<note>alert title</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="%d min" xml:space="preserve">
|
||||
<source>%d min</source>
|
||||
<target>%d minuty</target>
|
||||
@@ -695,7 +715,7 @@
|
||||
</trans-unit>
|
||||
<trans-unit id="All profiles" xml:space="preserve">
|
||||
<source>All profiles</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
<note>profile dropdown</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="All your contacts will remain connected." xml:space="preserve">
|
||||
<source>All your contacts will remain connected.</source>
|
||||
@@ -878,6 +898,10 @@
|
||||
<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>
|
||||
@@ -977,6 +1001,10 @@
|
||||
<target>Automaticky přijímat obrázky</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Auto-accept settings" xml:space="preserve">
|
||||
<source>Auto-accept settings</source>
|
||||
<note>alert title</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Back" xml:space="preserve">
|
||||
<source>Back</source>
|
||||
<target>Zpět</target>
|
||||
@@ -1000,10 +1028,18 @@
|
||||
<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>
|
||||
@@ -1013,6 +1049,18 @@
|
||||
<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>
|
||||
@@ -1131,7 +1179,7 @@
|
||||
<trans-unit id="Cancel" xml:space="preserve">
|
||||
<source>Cancel</source>
|
||||
<target>Zrušit</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
<note>alert button</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Cancel migration" xml:space="preserve">
|
||||
<source>Cancel migration</source>
|
||||
@@ -1149,7 +1197,7 @@
|
||||
<trans-unit id="Cannot receive file" xml:space="preserve">
|
||||
<source>Cannot receive file</source>
|
||||
<target>Nelze přijmout soubor</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
<note>alert title</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Capacity exceeded - recipient did not receive previously sent messages." xml:space="preserve">
|
||||
<source>Capacity exceeded - recipient did not receive previously sent messages.</source>
|
||||
@@ -1270,6 +1318,15 @@
|
||||
<target>Předvolby chatu</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Chat preferences were changed." xml:space="preserve">
|
||||
<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>
|
||||
@@ -1746,6 +1803,10 @@ 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>
|
||||
@@ -2032,6 +2093,10 @@ 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>
|
||||
@@ -2263,6 +2328,10 @@ This is your own one-time link!</source>
|
||||
<source>Do not send history to new members.</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Do not use credentials with proxy." xml:space="preserve">
|
||||
<source>Do not use credentials with proxy.</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Don't create address" xml:space="preserve">
|
||||
<source>Don't create address</source>
|
||||
<target>Nevytvářet adresu</target>
|
||||
@@ -2285,7 +2354,8 @@ This is your own one-time link!</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="Download" xml:space="preserve">
|
||||
<source>Download</source>
|
||||
<note>chat item action</note>
|
||||
<note>alert button
|
||||
chat item action</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Download errors" xml:space="preserve">
|
||||
<source>Download errors</source>
|
||||
@@ -2300,6 +2370,10 @@ This is your own one-time link!</source>
|
||||
<target>Stáhnout soubor</target>
|
||||
<note>server test step</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Download files" xml:space="preserve">
|
||||
<source>Download files</source>
|
||||
<note>alert action</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Downloaded" xml:space="preserve">
|
||||
<source>Downloaded</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
@@ -2694,6 +2768,10 @@ This is your own one-time link!</source>
|
||||
<target>Chyba načítání %@ serverů</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Error migrating settings" xml:space="preserve">
|
||||
<source>Error migrating settings</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Error opening chat" xml:space="preserve">
|
||||
<source>Error opening chat</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
@@ -2701,7 +2779,7 @@ This is your own one-time link!</source>
|
||||
<trans-unit id="Error receiving file" xml:space="preserve">
|
||||
<source>Error receiving file</source>
|
||||
<target>Chyba při příjmu souboru</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
<note>alert title</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Error reconnecting server" xml:space="preserve">
|
||||
<source>Error reconnecting server</source>
|
||||
@@ -2795,7 +2873,7 @@ This is your own one-time link!</source>
|
||||
<trans-unit id="Error switching profile!" xml:space="preserve">
|
||||
<source>Error switching profile!</source>
|
||||
<target>Chyba při přepínání profilu!</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
<note>alertTitle</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Error synchronizing connection" xml:space="preserve">
|
||||
<source>Error synchronizing connection</source>
|
||||
@@ -2838,8 +2916,7 @@ This is your own one-time link!</source>
|
||||
<trans-unit id="Error: %@" xml:space="preserve">
|
||||
<source>Error: %@</source>
|
||||
<target>Chyba: %@</target>
|
||||
<note>file error text
|
||||
snd error text</note>
|
||||
<note>alert message</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Error: URL is invalid" xml:space="preserve">
|
||||
<source>Error: URL is invalid</source>
|
||||
@@ -2920,6 +2997,11 @@ This is your own one-time link!</source>
|
||||
<source>File error</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="File errors: %@" xml:space="preserve">
|
||||
<source>File errors:
|
||||
%@</source>
|
||||
<note>alert message</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="File not found - most likely file was deleted or cancelled." xml:space="preserve">
|
||||
<source>File not found - most likely file was deleted or cancelled.</source>
|
||||
<note>file error text</note>
|
||||
@@ -3046,10 +3128,26 @@ This is your own one-time link!</source>
|
||||
<source>Forward</source>
|
||||
<note>chat item action</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Forward %d message(s)?" xml:space="preserve">
|
||||
<source>Forward %d message(s)?</source>
|
||||
<note>alert title</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Forward and save messages" xml:space="preserve">
|
||||
<source>Forward and save messages</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Forward messages" xml:space="preserve">
|
||||
<source>Forward messages</source>
|
||||
<note>alert action</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Forward messages without files?" xml:space="preserve">
|
||||
<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>
|
||||
@@ -3058,6 +3156,10 @@ This is your own one-time link!</source>
|
||||
<source>Forwarded from</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Forwarding %lld messages" xml:space="preserve">
|
||||
<source>Forwarding %lld messages</source>
|
||||
<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">
|
||||
<source>Forwarding server %@ failed to connect to destination server %@. Please try later.</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
@@ -3099,11 +3201,6 @@ Error: %2$@</source>
|
||||
<target>Celé jméno (volitelně)</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Full name:" xml:space="preserve">
|
||||
<source>Full name:</source>
|
||||
<target>Celé jméno:</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Fully decentralized – visible only to members." xml:space="preserve">
|
||||
<source>Fully decentralized – visible only to members.</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
@@ -3341,6 +3438,10 @@ Error: %2$@</source>
|
||||
<target>Servery ICE (jeden na řádek)</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="IP address" xml:space="preserve">
|
||||
<source>IP address</source>
|
||||
<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">
|
||||
<source>If you can't meet in person, show QR code in a video call, or share the link.</source>
|
||||
<target>Pokud se nemůžete setkat osobně, zobrazte QR kód ve videohovoru nebo sdílejte odkaz.</target>
|
||||
@@ -3413,6 +3514,11 @@ 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>
|
||||
@@ -3995,6 +4101,10 @@ This is your link for group %@!</source>
|
||||
<source>Messages sent</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Messages were deleted after you selected them." xml:space="preserve">
|
||||
<source>Messages were deleted after you selected them.</source>
|
||||
<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">
|
||||
<source>Messages, files and calls are protected by **end-to-end encryption** with perfect forward secrecy, repudiation and break-in recovery.</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
@@ -4137,6 +4247,14 @@ 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>
|
||||
@@ -4251,6 +4369,14 @@ 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>
|
||||
@@ -4269,6 +4395,10 @@ This is your link for group %@!</source>
|
||||
<source>Nothing selected</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Nothing to forward!" xml:space="preserve">
|
||||
<source>Nothing to forward!</source>
|
||||
<note>alert title</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Notifications" xml:space="preserve">
|
||||
<source>Notifications</source>
|
||||
<target>Oznámení</target>
|
||||
@@ -4300,7 +4430,7 @@ This is your link for group %@!</source>
|
||||
<trans-unit id="Ok" xml:space="preserve">
|
||||
<source>Ok</source>
|
||||
<target>Ok</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
<note>alert button</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Old database" xml:space="preserve">
|
||||
<source>Old database</source>
|
||||
@@ -4480,6 +4610,11 @@ Vyžaduje povolení sítě VPN.</target>
|
||||
<source>Other %@ servers</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Other file errors: %@" xml:space="preserve">
|
||||
<source>Other file errors:
|
||||
%@</source>
|
||||
<note>alert message</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="PING count" xml:space="preserve">
|
||||
<source>PING count</source>
|
||||
<target>Počet PING</target>
|
||||
@@ -4515,6 +4650,10 @@ Vyžaduje povolení sítě VPN.</target>
|
||||
<target>Heslo nastaveno!</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Password" xml:space="preserve">
|
||||
<source>Password</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Password to show" xml:space="preserve">
|
||||
<source>Password to show</source>
|
||||
<target>Heslo k zobrazení</target>
|
||||
@@ -4651,6 +4790,10 @@ Error: %@</source>
|
||||
<target>Polské rozhraní</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Port" xml:space="preserve">
|
||||
<source>Port</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</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>Je možné, že otisk certifikátu v adrese serveru je nesprávný</target>
|
||||
@@ -4729,14 +4872,6 @@ Error: %@</source>
|
||||
<source>Profile images</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Profile name" xml:space="preserve">
|
||||
<source>Profile name</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Profile name:" xml:space="preserve">
|
||||
<source>Profile name:</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Profile password" xml:space="preserve">
|
||||
<source>Profile password</source>
|
||||
<target>Heslo profilu</target>
|
||||
@@ -4832,6 +4967,10 @@ Enable in *Network & servers* settings.</source>
|
||||
<source>Proxied servers</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Proxy requires password" xml:space="preserve">
|
||||
<source>Proxy requires password</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Push notifications" xml:space="preserve">
|
||||
<source>Push notifications</source>
|
||||
<target>Nabízená oznámení</target>
|
||||
@@ -5038,6 +5177,10 @@ Enable in *Network & servers* settings.</source>
|
||||
<target>Odstranit</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Remove archive?" xml:space="preserve">
|
||||
<source>Remove archive?</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Remove image" xml:space="preserve">
|
||||
<source>Remove image</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
@@ -5205,6 +5348,10 @@ Enable in *Network & servers* settings.</source>
|
||||
<source>SMP server</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="SOCKS proxy" xml:space="preserve">
|
||||
<source>SOCKS proxy</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Safely receive files" xml:space="preserve">
|
||||
<source>Safely receive files</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
@@ -5216,12 +5363,13 @@ Enable in *Network & servers* settings.</source>
|
||||
<trans-unit id="Save" xml:space="preserve">
|
||||
<source>Save</source>
|
||||
<target>Uložit</target>
|
||||
<note>chat item action</note>
|
||||
<note>alert button
|
||||
chat item action</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Save (and notify contacts)" xml:space="preserve">
|
||||
<source>Save (and notify contacts)</source>
|
||||
<target>Uložit (a informovat kontakty)</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
<note>alert button</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Save and notify contact" xml:space="preserve">
|
||||
<source>Save and notify contact</source>
|
||||
@@ -5247,11 +5395,6 @@ Enable in *Network & servers* settings.</source>
|
||||
<target>Uložit archiv</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Save auto-accept settings" xml:space="preserve">
|
||||
<source>Save auto-accept settings</source>
|
||||
<target>Uložit nastavení automatického přijímání</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Save group profile" xml:space="preserve">
|
||||
<source>Save group profile</source>
|
||||
<target>Uložení profilu skupiny</target>
|
||||
@@ -5287,16 +5430,15 @@ Enable in *Network & servers* settings.</source>
|
||||
<target>Uložit servery?</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Save settings?" xml:space="preserve">
|
||||
<source>Save settings?</source>
|
||||
<target>Uložit nastavení?</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Save welcome message?" xml:space="preserve">
|
||||
<source>Save welcome message?</source>
|
||||
<target>Uložit uvítací zprávu?</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Save your profile?" xml:space="preserve">
|
||||
<source>Save your profile?</source>
|
||||
<note>alert title</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Saved" xml:space="preserve">
|
||||
<source>Saved</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
@@ -5314,6 +5456,10 @@ Enable in *Network & servers* settings.</source>
|
||||
<source>Saved message</source>
|
||||
<note>message info title</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Saving %lld messages" xml:space="preserve">
|
||||
<source>Saving %lld messages</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Scale" xml:space="preserve">
|
||||
<source>Scale</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
@@ -5502,7 +5648,7 @@ Enable in *Network & servers* settings.</source>
|
||||
<trans-unit id="Sender cancelled file transfer." xml:space="preserve">
|
||||
<source>Sender cancelled file transfer.</source>
|
||||
<target>Odesílatel zrušil přenos souboru.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
<note>alert message</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Sender may have deleted the connection request." xml:space="preserve">
|
||||
<source>Sender may have deleted the connection request.</source>
|
||||
@@ -5594,6 +5740,10 @@ 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>
|
||||
@@ -5703,6 +5853,10 @@ Enable in *Network & servers* settings.</source>
|
||||
<target>Nastavení</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Settings were changed." xml:space="preserve">
|
||||
<source>Settings were changed.</source>
|
||||
<note>alert message</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Shape profile images" xml:space="preserve">
|
||||
<source>Shape profile images</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
@@ -5866,6 +6020,10 @@ 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>
|
||||
@@ -5894,6 +6052,10 @@ Enable in *Network & servers* settings.</source>
|
||||
<source>Soft</source>
|
||||
<note>blur media</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Some app settings were not migrated." xml:space="preserve">
|
||||
<source>Some app settings were not migrated.</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Some file(s) were not exported:" xml:space="preserve">
|
||||
<source>Some file(s) were not exported:</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
@@ -6022,6 +6184,14 @@ 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>
|
||||
@@ -6243,6 +6413,10 @@ Může se to stát kvůli nějaké chybě, nebo pokud je spojení kompromitován
|
||||
<source>The text you pasted is not a SimpleX link.</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</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>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Themes" xml:space="preserve">
|
||||
<source>Themes</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
@@ -6359,6 +6533,14 @@ 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>
|
||||
@@ -6501,7 +6683,7 @@ Před zapnutím této funkce budete vyzváni k dokončení ověření.</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="Unknown servers!" xml:space="preserve">
|
||||
<source>Unknown servers!</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
<note>alert title</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Unless you use iOS call interface, enable Do Not Disturb mode to avoid interruptions." xml:space="preserve">
|
||||
<source>Unless you use iOS call interface, enable Do Not Disturb mode to avoid interruptions.</source>
|
||||
@@ -6606,6 +6788,10 @@ Chcete-li se připojit, požádejte svůj kontakt o vytvoření dalšího odkazu
|
||||
<target>Použít hostitele .onion</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Use SOCKS proxy" xml:space="preserve">
|
||||
<source>Use SOCKS proxy</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Use SimpleX Chat servers?" xml:space="preserve">
|
||||
<source>Use SimpleX Chat servers?</source>
|
||||
<target>Používat servery SimpleX Chat?</target>
|
||||
@@ -6665,15 +6851,14 @@ 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>
|
||||
</trans-unit>
|
||||
<trans-unit id="Username" xml:space="preserve">
|
||||
<source>Username</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Using SimpleX Chat servers." xml:space="preserve">
|
||||
<source>Using SimpleX Chat servers.</source>
|
||||
<target>Používat servery SimpleX Chat.</target>
|
||||
@@ -6886,7 +7071,7 @@ Chcete-li se připojit, požádejte svůj kontakt o vytvoření dalšího odkazu
|
||||
</trans-unit>
|
||||
<trans-unit id="Without Tor or VPN, your IP address will be visible to these XFTP relays: %@." xml:space="preserve">
|
||||
<source>Without Tor or VPN, your IP address will be visible to these XFTP relays: %@.</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
<note>alert message</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Wrong database passphrase" xml:space="preserve">
|
||||
<source>Wrong database passphrase</source>
|
||||
@@ -6910,11 +7095,6 @@ Chcete-li se připojit, požádejte svůj kontakt o vytvoření dalšího odkazu
|
||||
<source>XFTP server</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="You" xml:space="preserve">
|
||||
<source>You</source>
|
||||
<target>Vy</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="You **must not** use the same database on two devices." xml:space="preserve">
|
||||
<source>You **must not** use the same database on two devices.</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
@@ -7240,6 +7420,10 @@ Repeat connection request?</source>
|
||||
<target>Vaše chat databáze není šifrována – nastavte přístupovou frázi pro její šifrování.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Your chat preferences" xml:space="preserve">
|
||||
<source>Your chat preferences</source>
|
||||
<note>alert title</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Your chat profiles" xml:space="preserve">
|
||||
<source>Your chat profiles</source>
|
||||
<target>Vaše chat profily</target>
|
||||
@@ -7264,6 +7448,10 @@ Repeat connection request?</source>
|
||||
<target>Vaše kontakty zůstanou připojeny.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Your credentials may be sent unencrypted." xml:space="preserve">
|
||||
<source>Your credentials may be sent unencrypted.</source>
|
||||
<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">
|
||||
<source>Your current chat database will be DELETED and REPLACED with the imported one.</source>
|
||||
<target>Vaše aktuální chat databáze bude ODSTRANĚNA a NAHRAZENA importovanou.</target>
|
||||
@@ -7293,13 +7481,15 @@ Repeat connection request?</source>
|
||||
<target>Váš profil **%@** bude sdílen.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Your profile is stored on your device and shared only with your contacts. SimpleX servers cannot see your profile." xml:space="preserve">
|
||||
<source>Your profile is stored on your device and shared only with your contacts.
|
||||
SimpleX servers cannot see your profile.</source>
|
||||
<target>Váš profil je uložen ve vašem zařízení a sdílen pouze s vašimi kontakty.
|
||||
Servery SimpleX nevidí váš profil.</target>
|
||||
<trans-unit id="Your profile is stored on your device and shared only with your contacts. SimpleX servers cannot see your profile." xml:space="preserve">
|
||||
<source>Your profile is stored on your device and shared only with your contacts. SimpleX servers cannot see your profile.</source>
|
||||
<target>Váš profil je uložen ve vašem zařízení a sdílen pouze s vašimi kontakty. Servery SimpleX nevidí váš profil.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</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>
|
||||
<note>alert message</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Your profile, contacts and delivered messages are stored on your device." xml:space="preserve">
|
||||
<source>Your profile, contacts and delivered messages are stored on your device.</source>
|
||||
<target>Váš profil, kontakty a doručené zprávy jsou uloženy ve vašem zařízení.</target>
|
||||
|
||||
@@ -139,6 +139,7 @@
|
||||
</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">
|
||||
@@ -161,11 +162,36 @@
|
||||
<target>%d Tage</target>
|
||||
<note>time interval</note>
|
||||
</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 Datei(en) wird/werden immer noch heruntergeladen.</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>Bei %d Datei(en) ist das Herunterladen fehlgeschlagen.</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 Datei(en) wurde(n) gelöscht.</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 Datei(en) wurde(n) nicht heruntergeladen.</target>
|
||||
<note>forward confirmation reason</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="%d hours" xml:space="preserve">
|
||||
<source>%d hours</source>
|
||||
<target>%d Stunden</target>
|
||||
<note>time interval</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="%d messages not forwarded" xml:space="preserve">
|
||||
<source>%d messages not forwarded</source>
|
||||
<target>%d Nachrichten wurden nicht weitergeleitet</target>
|
||||
<note>alert title</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="%d min" xml:space="preserve">
|
||||
<source>%d min</source>
|
||||
<target>%d min</target>
|
||||
@@ -727,7 +753,7 @@
|
||||
<trans-unit id="All profiles" xml:space="preserve">
|
||||
<source>All profiles</source>
|
||||
<target>Alle Profile</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
<note>profile dropdown</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="All your contacts will remain connected." xml:space="preserve">
|
||||
<source>All your contacts will remain connected.</source>
|
||||
@@ -919,6 +945,11 @@
|
||||
<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>
|
||||
@@ -1024,6 +1055,11 @@
|
||||
<target>Bilder automatisch akzeptieren</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Auto-accept settings" xml:space="preserve">
|
||||
<source>Auto-accept settings</source>
|
||||
<target>Einstellungen automatisch akzeptieren</target>
|
||||
<note>alert title</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Back" xml:space="preserve">
|
||||
<source>Back</source>
|
||||
<target>Zurück</target>
|
||||
@@ -1049,11 +1085,21 @@
|
||||
<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>
|
||||
<target>Verbesserte Anrufe</target>
|
||||
<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>
|
||||
<target>Verbesserte Nachrichten-Datumsinformation</target>
|
||||
<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>
|
||||
@@ -1064,6 +1110,21 @@
|
||||
<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>
|
||||
<target>Verbesserte Benachrichtigungen</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Better security ✅" xml:space="preserve">
|
||||
<source>Better security ✅</source>
|
||||
<target>Verbesserte Sicherheit ✅</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>Verbesserte Nutzer-Erfahrung</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Black" xml:space="preserve">
|
||||
<source>Black</source>
|
||||
<target>Schwarz</target>
|
||||
@@ -1197,7 +1258,7 @@
|
||||
<trans-unit id="Cancel" xml:space="preserve">
|
||||
<source>Cancel</source>
|
||||
<target>Abbrechen</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
<note>alert button</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Cancel migration" xml:space="preserve">
|
||||
<source>Cancel migration</source>
|
||||
@@ -1217,7 +1278,7 @@
|
||||
<trans-unit id="Cannot receive file" xml:space="preserve">
|
||||
<source>Cannot receive file</source>
|
||||
<target>Datei kann nicht empfangen werden</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
<note>alert title</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Capacity exceeded - recipient did not receive previously sent messages." xml:space="preserve">
|
||||
<source>Capacity exceeded - recipient did not receive previously sent messages.</source>
|
||||
@@ -1345,6 +1406,16 @@
|
||||
<target>Chat-Präferenzen</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Chat preferences were changed." xml:space="preserve">
|
||||
<source>Chat preferences were changed.</source>
|
||||
<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>
|
||||
@@ -1397,22 +1468,22 @@
|
||||
</trans-unit>
|
||||
<trans-unit id="Clear" xml:space="preserve">
|
||||
<source>Clear</source>
|
||||
<target>Löschen</target>
|
||||
<target>Entfernen</target>
|
||||
<note>swipe action</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Clear conversation" xml:space="preserve">
|
||||
<source>Clear conversation</source>
|
||||
<target>Chatinhalte löschen</target>
|
||||
<target>Chat-Inhalte entfernen</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Clear conversation?" xml:space="preserve">
|
||||
<source>Clear conversation?</source>
|
||||
<target>Unterhaltung löschen?</target>
|
||||
<target>Chat-Inhalte entfernen?</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Clear private notes?" xml:space="preserve">
|
||||
<source>Clear private notes?</source>
|
||||
<target>Private Notizen löschen?</target>
|
||||
<target>Private Notizen entfernen?</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Clear verification" xml:space="preserve">
|
||||
@@ -1726,7 +1797,7 @@ Das ist Ihr eigener Einmal-Link!</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="Conversation deleted!" xml:space="preserve">
|
||||
<source>Conversation deleted!</source>
|
||||
<target>Unterhaltung gelöscht!</target>
|
||||
<target>Chat-Inhalte entfernt!</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Copy" xml:space="preserve">
|
||||
@@ -1746,6 +1817,7 @@ Das ist Ihr eigener Einmal-Link!</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="Corner" xml:space="preserve">
|
||||
<source>Corner</source>
|
||||
<target>Abrundung Ecken</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Correct name to %@?" xml:space="preserve">
|
||||
@@ -1873,6 +1945,11 @@ 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>
|
||||
<target>Anpassbares Format des Nachrichtenfelds</target>
|
||||
<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>
|
||||
@@ -2167,6 +2244,11 @@ 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>
|
||||
<target>Bis zu 200 Nachrichten löschen oder moderieren</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>Ausstehende Verbindung löschen?</target>
|
||||
@@ -2417,6 +2499,11 @@ Das ist Ihr eigener Einmal-Link!</target>
|
||||
<target>Den Nachrichtenverlauf nicht an neue Mitglieder senden.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Do not use credentials with proxy." xml:space="preserve">
|
||||
<source>Do not use credentials with proxy.</source>
|
||||
<target>Verwenden Sie keine Anmeldeinformationen mit einem Proxy.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Don't create address" xml:space="preserve">
|
||||
<source>Don't create address</source>
|
||||
<target>Keine Adresse erstellt</target>
|
||||
@@ -2440,7 +2527,8 @@ Das ist Ihr eigener Einmal-Link!</target>
|
||||
<trans-unit id="Download" xml:space="preserve">
|
||||
<source>Download</source>
|
||||
<target>Herunterladen</target>
|
||||
<note>chat item action</note>
|
||||
<note>alert button
|
||||
chat item action</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Download errors" xml:space="preserve">
|
||||
<source>Download errors</source>
|
||||
@@ -2457,6 +2545,11 @@ Das ist Ihr eigener Einmal-Link!</target>
|
||||
<target>Datei herunterladen</target>
|
||||
<note>server test step</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Download files" xml:space="preserve">
|
||||
<source>Download files</source>
|
||||
<target>Dateien herunterladen</target>
|
||||
<note>alert action</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Downloaded" xml:space="preserve">
|
||||
<source>Downloaded</source>
|
||||
<target>Heruntergeladen</target>
|
||||
@@ -2734,6 +2827,7 @@ Das ist Ihr eigener Einmal-Link!</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="Error changing connection profile" xml:space="preserve">
|
||||
<source>Error changing connection profile</source>
|
||||
<target>Fehler beim Wechseln des Verbindungs-Profils</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Error changing role" xml:space="preserve">
|
||||
@@ -2748,6 +2842,7 @@ Das ist Ihr eigener Einmal-Link!</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="Error changing to incognito!" xml:space="preserve">
|
||||
<source>Error changing to incognito!</source>
|
||||
<target>Fehler beim Wechseln zum Inkognito-Profil!</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Error connecting to forwarding server %@. Please try later." xml:space="preserve">
|
||||
@@ -2870,6 +2965,11 @@ Das ist Ihr eigener Einmal-Link!</target>
|
||||
<target>Fehler beim Laden von %@ Servern</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Error migrating settings" xml:space="preserve">
|
||||
<source>Error migrating settings</source>
|
||||
<target>Fehler beim Migrieren der Einstellungen</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Error opening chat" xml:space="preserve">
|
||||
<source>Error opening chat</source>
|
||||
<target>Fehler beim Öffnen des Chats</target>
|
||||
@@ -2878,7 +2978,7 @@ Das ist Ihr eigener Einmal-Link!</target>
|
||||
<trans-unit id="Error receiving file" xml:space="preserve">
|
||||
<source>Error receiving file</source>
|
||||
<target>Fehler beim Empfangen der Datei</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
<note>alert title</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Error reconnecting server" xml:space="preserve">
|
||||
<source>Error reconnecting server</source>
|
||||
@@ -2972,12 +3072,13 @@ Das ist Ihr eigener Einmal-Link!</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="Error switching profile" xml:space="preserve">
|
||||
<source>Error switching profile</source>
|
||||
<target>Fehler beim Wechseln des Profils</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Error switching profile!" xml:space="preserve">
|
||||
<source>Error switching profile!</source>
|
||||
<target>Fehler beim Umschalten des Profils!</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
<note>alertTitle</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Error synchronizing connection" xml:space="preserve">
|
||||
<source>Error synchronizing connection</source>
|
||||
@@ -3022,8 +3123,7 @@ Das ist Ihr eigener Einmal-Link!</target>
|
||||
<trans-unit id="Error: %@" xml:space="preserve">
|
||||
<source>Error: %@</source>
|
||||
<target>Fehler: %@</target>
|
||||
<note>file error text
|
||||
snd error text</note>
|
||||
<note>alert message</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Error: URL is invalid" xml:space="preserve">
|
||||
<source>Error: URL is invalid</source>
|
||||
@@ -3110,6 +3210,13 @@ Das ist Ihr eigener Einmal-Link!</target>
|
||||
<target>Datei-Fehler</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="File errors: %@" xml:space="preserve">
|
||||
<source>File errors:
|
||||
%@</source>
|
||||
<target>Datei-Fehler:
|
||||
%@</target>
|
||||
<note>alert message</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="File not found - most likely file was deleted or cancelled." xml:space="preserve">
|
||||
<source>File not found - most likely file was deleted or cancelled.</source>
|
||||
<target>Datei nicht gefunden - höchstwahrscheinlich wurde die Datei gelöscht oder der Transfer abgebrochen.</target>
|
||||
@@ -3245,11 +3352,31 @@ Das ist Ihr eigener Einmal-Link!</target>
|
||||
<target>Weiterleiten</target>
|
||||
<note>chat item action</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Forward %d message(s)?" xml:space="preserve">
|
||||
<source>Forward %d message(s)?</source>
|
||||
<target>%d Nachricht(en) weiterleiten?</target>
|
||||
<note>alert title</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Forward and save messages" xml:space="preserve">
|
||||
<source>Forward and save messages</source>
|
||||
<target>Nachrichten weiterleiten und speichern</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Forward messages" xml:space="preserve">
|
||||
<source>Forward messages</source>
|
||||
<target>Nachrichten weiterleiten</target>
|
||||
<note>alert action</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Forward messages without files?" xml:space="preserve">
|
||||
<source>Forward messages without files?</source>
|
||||
<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>
|
||||
<target>Bis zu 20 Nachrichten auf einmal weiterleiten</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Forwarded" xml:space="preserve">
|
||||
<source>Forwarded</source>
|
||||
<target>Weitergeleitet</target>
|
||||
@@ -3260,6 +3387,11 @@ Das ist Ihr eigener Einmal-Link!</target>
|
||||
<target>Weitergeleitet aus</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Forwarding %lld messages" xml:space="preserve">
|
||||
<source>Forwarding %lld messages</source>
|
||||
<target>%lld Nachricht(en) wird/werden weitergeleitet</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">
|
||||
<source>Forwarding server %@ failed to connect to destination server %@. Please try later.</source>
|
||||
<target>Weiterleitungsserver %@ konnte sich nicht mit dem Zielserver %@ verbinden. Bitte versuchen Sie es später erneut.</target>
|
||||
@@ -3309,11 +3441,6 @@ Fehler: %2$@</target>
|
||||
<target>Vollständiger Name (optional)</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Full name:" xml:space="preserve">
|
||||
<source>Full name:</source>
|
||||
<target>Vollständiger Name:</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Fully decentralized – visible only to members." xml:space="preserve">
|
||||
<source>Fully decentralized – visible only to members.</source>
|
||||
<target>Vollständig dezentralisiert – nur für Mitglieder sichtbar.</target>
|
||||
@@ -3471,7 +3598,7 @@ Fehler: %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>Die Gruppe wird für Sie gelöscht. Dies kann nicht rückgängig gemacht werden!</target>
|
||||
<target>Die Gruppe wird nur bei Ihnen gelöscht. Dies kann nicht rückgängig gemacht werden!</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Help" xml:space="preserve">
|
||||
@@ -3559,6 +3686,11 @@ Fehler: %2$@</target>
|
||||
<target>ICE-Server (einer pro Zeile)</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="IP address" xml:space="preserve">
|
||||
<source>IP address</source>
|
||||
<target>IP-Adresse</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">
|
||||
<source>If you can't meet in person, show QR code in a video call, or share the link.</source>
|
||||
<target>Falls Sie sich nicht persönlich treffen können, zeigen Sie den QR-Code in einem Videoanruf oder teilen Sie den Link.</target>
|
||||
@@ -3634,6 +3766,13 @@ 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>
|
||||
<target>Verbesserte Nachrichten-Auslieferung und verringerter Datenverbrauch.
|
||||
Weitere Verbesserungen sind bald verfügbar!</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>Verbesserte Zustellung von Nachrichten</target>
|
||||
@@ -3926,7 +4065,7 @@ Das ist Ihr Link für die Gruppe %@!</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="Keep conversation" xml:space="preserve">
|
||||
<source>Keep conversation</source>
|
||||
<target>Unterhaltung behalten</target>
|
||||
<target>Chat-Inhalte beibehalten</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Keep the app open to use it from desktop" xml:space="preserve">
|
||||
@@ -4206,6 +4345,7 @@ Das ist Ihr Link für die Gruppe %@!</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="Message shape" xml:space="preserve">
|
||||
<source>Message shape</source>
|
||||
<target>Nachrichten-Form</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Message source remains private." xml:space="preserve">
|
||||
@@ -4258,6 +4398,11 @@ Das ist Ihr Link für die Gruppe %@!</target>
|
||||
<target>Gesendete Nachrichten</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</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>Die Nachrichten wurden gelöscht, nachdem Sie sie ausgewählt hatten.</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">
|
||||
<source>Messages, files and calls are protected by **end-to-end encryption** with perfect forward secrecy, repudiation and break-in recovery.</source>
|
||||
<target>Nachrichten, Dateien und Anrufe sind durch **Ende-zu-Ende-Verschlüsselung** mit Perfect Forward Secrecy, Ablehnung und Einbruchs-Wiederherstellung geschützt.</target>
|
||||
@@ -4413,6 +4558,16 @@ 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>
|
||||
@@ -4533,6 +4688,16 @@ 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>
|
||||
@@ -4553,6 +4718,11 @@ Das ist Ihr Link für die Gruppe %@!</target>
|
||||
<target>Nichts ausgewählt</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Nothing to forward!" xml:space="preserve">
|
||||
<source>Nothing to forward!</source>
|
||||
<target>Es gibt nichts zum Weiterleiten!</target>
|
||||
<note>alert title</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Notifications" xml:space="preserve">
|
||||
<source>Notifications</source>
|
||||
<target>Benachrichtigungen</target>
|
||||
@@ -4585,7 +4755,7 @@ Das ist Ihr Link für die Gruppe %@!</target>
|
||||
<trans-unit id="Ok" xml:space="preserve">
|
||||
<source>Ok</source>
|
||||
<target>Ok</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
<note>alert button</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Old database" xml:space="preserve">
|
||||
<source>Old database</source>
|
||||
@@ -4628,7 +4798,7 @@ Dies erfordert die Aktivierung eines VPNs.</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="Only delete conversation" xml:space="preserve">
|
||||
<source>Only delete conversation</source>
|
||||
<target>Nur die Unterhaltung löschen</target>
|
||||
<target>Nur die Chat-Inhalte löschen</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Only group owners can change group preferences." xml:space="preserve">
|
||||
@@ -4776,6 +4946,13 @@ Dies erfordert die Aktivierung eines VPNs.</target>
|
||||
<target>Andere %@ Server</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Other file errors: %@" xml:space="preserve">
|
||||
<source>Other file errors:
|
||||
%@</source>
|
||||
<target>Andere(r) Datei-Fehler:
|
||||
%@</target>
|
||||
<note>alert message</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="PING count" xml:space="preserve">
|
||||
<source>PING count</source>
|
||||
<target>PING-Zähler</target>
|
||||
@@ -4811,6 +4988,11 @@ Dies erfordert die Aktivierung eines VPNs.</target>
|
||||
<target>Zugangscode eingestellt!</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Password" xml:space="preserve">
|
||||
<source>Password</source>
|
||||
<target>Passwort</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Password to show" xml:space="preserve">
|
||||
<source>Password to show</source>
|
||||
<target>Passwort anzeigen</target>
|
||||
@@ -4960,6 +5142,11 @@ Fehler: %@</target>
|
||||
<target>Polnische Bedienoberfläche</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</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">
|
||||
<source>Possibly, certificate fingerprint in server address is incorrect</source>
|
||||
<target>Der Fingerabdruck des Zertifikats in der Serveradresse ist wahrscheinlich ungültig</target>
|
||||
@@ -5045,16 +5232,6 @@ Fehler: %@</target>
|
||||
<target>Profil-Bilder</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Profile name" xml:space="preserve">
|
||||
<source>Profile name</source>
|
||||
<target>Profilname</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Profile name:" xml:space="preserve">
|
||||
<source>Profile name:</source>
|
||||
<target>Profilname:</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Profile password" xml:space="preserve">
|
||||
<source>Profile password</source>
|
||||
<target>Passwort für Profil</target>
|
||||
@@ -5157,6 +5334,11 @@ Aktivieren Sie es in den *Netzwerk & Server* Einstellungen.</target>
|
||||
<target>Proxy-Server</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Proxy requires password" xml:space="preserve">
|
||||
<source>Proxy requires password</source>
|
||||
<target>Der Proxy benötigt ein Passwort</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Push notifications" xml:space="preserve">
|
||||
<source>Push notifications</source>
|
||||
<target>Push-Benachrichtigungen</target>
|
||||
@@ -5179,7 +5361,7 @@ Aktivieren Sie es in den *Netzwerk & Server* Einstellungen.</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="Reachable chat toolbar" xml:space="preserve">
|
||||
<source>Reachable chat toolbar</source>
|
||||
<target>Erreichbare Chat-Symbolleiste</target>
|
||||
<target>Chat-Symbolleiste unten</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="React…" xml:space="preserve">
|
||||
@@ -5378,6 +5560,11 @@ Aktivieren Sie es in den *Netzwerk & Server* Einstellungen.</target>
|
||||
<target>Entfernen</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Remove archive?" xml:space="preserve">
|
||||
<source>Remove archive?</source>
|
||||
<target>Archiv entfernen?</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Remove image" xml:space="preserve">
|
||||
<source>Remove image</source>
|
||||
<target>Bild entfernen</target>
|
||||
@@ -5558,6 +5745,11 @@ Aktivieren Sie es in den *Netzwerk & Server* Einstellungen.</target>
|
||||
<target>SMP-Server</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="SOCKS proxy" xml:space="preserve">
|
||||
<source>SOCKS proxy</source>
|
||||
<target>SOCKS-Proxy</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Safely receive files" xml:space="preserve">
|
||||
<source>Safely receive files</source>
|
||||
<target>Dateien sicher empfangen</target>
|
||||
@@ -5571,12 +5763,13 @@ Aktivieren Sie es in den *Netzwerk & Server* Einstellungen.</target>
|
||||
<trans-unit id="Save" xml:space="preserve">
|
||||
<source>Save</source>
|
||||
<target>Speichern</target>
|
||||
<note>chat item action</note>
|
||||
<note>alert button
|
||||
chat item action</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Save (and notify contacts)" xml:space="preserve">
|
||||
<source>Save (and notify contacts)</source>
|
||||
<target>Speichern (und Kontakte benachrichtigen)</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
<note>alert button</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Save and notify contact" xml:space="preserve">
|
||||
<source>Save and notify contact</source>
|
||||
@@ -5603,11 +5796,6 @@ Aktivieren Sie es in den *Netzwerk & Server* Einstellungen.</target>
|
||||
<target>Archiv speichern</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Save auto-accept settings" xml:space="preserve">
|
||||
<source>Save auto-accept settings</source>
|
||||
<target>Einstellungen von "Automatisch akzeptieren" speichern</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Save group profile" xml:space="preserve">
|
||||
<source>Save group profile</source>
|
||||
<target>Gruppenprofil speichern</target>
|
||||
@@ -5643,16 +5831,16 @@ Aktivieren Sie es in den *Netzwerk & Server* Einstellungen.</target>
|
||||
<target>Alle Server speichern?</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Save settings?" xml:space="preserve">
|
||||
<source>Save settings?</source>
|
||||
<target>Einstellungen speichern?</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Save welcome message?" xml:space="preserve">
|
||||
<source>Save welcome message?</source>
|
||||
<target>Begrüßungsmeldung speichern?</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Save your profile?" xml:space="preserve">
|
||||
<source>Save your profile?</source>
|
||||
<target>Ihr Profil speichern?</target>
|
||||
<note>alert title</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Saved" xml:space="preserve">
|
||||
<source>Saved</source>
|
||||
<target>Abgespeichert</target>
|
||||
@@ -5673,6 +5861,11 @@ Aktivieren Sie es in den *Netzwerk & Server* Einstellungen.</target>
|
||||
<target>Gespeicherte Nachricht</target>
|
||||
<note>message info title</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Saving %lld messages" xml:space="preserve">
|
||||
<source>Saving %lld messages</source>
|
||||
<target>Es wird/werden %lld Nachricht(en) gesichert</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Scale" xml:space="preserve">
|
||||
<source>Scale</source>
|
||||
<target>Skalieren</target>
|
||||
@@ -5720,7 +5913,7 @@ Aktivieren Sie es in den *Netzwerk & Server* Einstellungen.</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="Search or paste SimpleX link" xml:space="preserve">
|
||||
<source>Search or paste SimpleX link</source>
|
||||
<target>Suchen oder fügen Sie den SimpleX-Link ein</target>
|
||||
<target>Suchen oder SimpleX-Link einfügen</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Secondary" xml:space="preserve">
|
||||
@@ -5755,6 +5948,7 @@ Aktivieren Sie es in den *Netzwerk & Server* Einstellungen.</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="Select chat profile" xml:space="preserve">
|
||||
<source>Select chat profile</source>
|
||||
<target>Chat-Profil auswählen</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Selected %lld" xml:space="preserve">
|
||||
@@ -5875,7 +6069,7 @@ Aktivieren Sie es in den *Netzwerk & Server* Einstellungen.</target>
|
||||
<trans-unit id="Sender cancelled file transfer." xml:space="preserve">
|
||||
<source>Sender cancelled file transfer.</source>
|
||||
<target>Der Absender hat die Dateiübertragung abgebrochen.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
<note>alert message</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Sender may have deleted the connection request." xml:space="preserve">
|
||||
<source>Sender may have deleted the connection request.</source>
|
||||
@@ -5972,6 +6166,11 @@ 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>
|
||||
@@ -6092,6 +6291,11 @@ Aktivieren Sie es in den *Netzwerk & Server* Einstellungen.</target>
|
||||
<target>Einstellungen</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Settings were changed." xml:space="preserve">
|
||||
<source>Settings were changed.</source>
|
||||
<target>Die Einstellungen wurden geändert.</target>
|
||||
<note>alert message</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Shape profile images" xml:space="preserve">
|
||||
<source>Shape profile images</source>
|
||||
<target>Form der Profil-Bilder</target>
|
||||
@@ -6129,6 +6333,7 @@ Aktivieren Sie es in den *Netzwerk & Server* Einstellungen.</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="Share profile" xml:space="preserve">
|
||||
<source>Share profile</source>
|
||||
<target>Profil teilen</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Share this 1-time invite link" xml:space="preserve">
|
||||
@@ -6266,6 +6471,11 @@ 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>
|
||||
<target>Die SimpleX-Protokolle wurden von Trail of Bits überprüft.</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>Vereinfachter Inkognito-Modus</target>
|
||||
@@ -6296,6 +6506,11 @@ Aktivieren Sie es in den *Netzwerk & Server* Einstellungen.</target>
|
||||
<target>Weich</target>
|
||||
<note>blur media</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Some app settings were not migrated." xml:space="preserve">
|
||||
<source>Some app settings were not migrated.</source>
|
||||
<target>Einige App-Einstellungen wurden nicht migriert.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Some file(s) were not exported:" xml:space="preserve">
|
||||
<source>Some file(s) were not exported:</source>
|
||||
<target>Einzelne Datei(en) wurde(n) nicht exportiert:</target>
|
||||
@@ -6436,6 +6651,16 @@ 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>
|
||||
<target>Während des Anrufs zwischen Audio und Video wechseln</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>Das Chat-Profil für Einmal-Einladungen wechseln</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="System" xml:space="preserve">
|
||||
<source>System</source>
|
||||
<target>System</target>
|
||||
@@ -6473,6 +6698,7 @@ Aktivieren Sie es in den *Netzwerk & Server* Einstellungen.</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="Tail" xml:space="preserve">
|
||||
<source>Tail</source>
|
||||
<target>Sprechblasen-Format</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Take picture" xml:space="preserve">
|
||||
@@ -6624,7 +6850,7 @@ Dies kann passieren, wenn es einen Fehler gegeben hat oder die Verbindung kompro
|
||||
</trans-unit>
|
||||
<trans-unit id="The messages will be deleted for all members." xml:space="preserve">
|
||||
<source>The messages will be deleted for all members.</source>
|
||||
<target>Die Nachrichten werden für alle Mitglieder gelöscht werden.</target>
|
||||
<target>Die Nachrichten werden für alle Gruppenmitglieder gelöscht.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="The messages will be marked as moderated for all members." xml:space="preserve">
|
||||
@@ -6667,6 +6893,11 @@ Dies kann passieren, wenn es einen Fehler gegeben hat oder die Verbindung kompro
|
||||
<target>Der von Ihnen eingefügte Text ist kein SimpleX-Link.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</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>Das hochgeladene Datenbank-Archiv wird dauerhaft von den Servern entfernt.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Themes" xml:space="preserve">
|
||||
<source>Themes</source>
|
||||
<target>Design</target>
|
||||
@@ -6794,6 +7025,16 @@ 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>
|
||||
@@ -6947,7 +7188,7 @@ Sie werden aufgefordert, die Authentifizierung abzuschließen, bevor diese Funkt
|
||||
<trans-unit id="Unknown servers!" xml:space="preserve">
|
||||
<source>Unknown servers!</source>
|
||||
<target>Unbekannte Server!</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
<note>alert title</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Unless you use iOS call interface, enable Do Not Disturb mode to avoid interruptions." xml:space="preserve">
|
||||
<source>Unless you use iOS call interface, enable Do Not Disturb mode to avoid interruptions.</source>
|
||||
@@ -7061,6 +7302,11 @@ Bitten Sie Ihren Kontakt darum einen weiteren Verbindungs-Link zu erzeugen, um s
|
||||
<target>Verwende .onion-Hosts</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Use SOCKS proxy" xml:space="preserve">
|
||||
<source>Use SOCKS proxy</source>
|
||||
<target>SOCKS-Proxy nutzen</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Use SimpleX Chat servers?" xml:space="preserve">
|
||||
<source>Use SimpleX Chat servers?</source>
|
||||
<target>Verwenden Sie SimpleX-Chat-Server?</target>
|
||||
@@ -7123,12 +7369,7 @@ Bitten Sie Ihren Kontakt darum einen weiteren Verbindungs-Link zu erzeugen, um s
|
||||
</trans-unit>
|
||||
<trans-unit id="Use the app with one hand." xml:space="preserve">
|
||||
<source>Use the app with one hand.</source>
|
||||
<target>Die App mit einer Hand nutzen.</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>
|
||||
<target>Die App mit einer Hand bedienen.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="User selection" xml:space="preserve">
|
||||
@@ -7136,6 +7377,11 @@ Bitten Sie Ihren Kontakt darum einen weiteren Verbindungs-Link zu erzeugen, um s
|
||||
<target>Benutzer-Auswahl</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Username" xml:space="preserve">
|
||||
<source>Username</source>
|
||||
<target>Benutzername</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Using SimpleX Chat servers." xml:space="preserve">
|
||||
<source>Using SimpleX Chat servers.</source>
|
||||
<target>Verwendung von SimpleX-Chat-Servern.</target>
|
||||
@@ -7369,7 +7615,7 @@ Bitten Sie Ihren Kontakt darum einen weiteren Verbindungs-Link zu erzeugen, um s
|
||||
<trans-unit id="Without Tor or VPN, your IP address will be visible to these XFTP relays: %@." xml:space="preserve">
|
||||
<source>Without Tor or VPN, your IP address will be visible to these XFTP relays: %@.</source>
|
||||
<target>Ohne Tor- oder VPN-Nutzung wird Ihre IP-Adresse für diese XFTP-Relais sichtbar sein: %@.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
<note>alert message</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Wrong database passphrase" xml:space="preserve">
|
||||
<source>Wrong database passphrase</source>
|
||||
@@ -7396,11 +7642,6 @@ Bitten Sie Ihren Kontakt darum einen weiteren Verbindungs-Link zu erzeugen, um s
|
||||
<target>XFTP-Server</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="You" xml:space="preserve">
|
||||
<source>You</source>
|
||||
<target>Profil</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="You **must not** use the same database on two devices." xml:space="preserve">
|
||||
<source>You **must not** use the same database on two devices.</source>
|
||||
<target>Sie dürfen die selbe Datenbank **nicht** auf zwei Geräten nutzen.</target>
|
||||
@@ -7555,7 +7796,7 @@ Verbindungsanfrage wiederholen?</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="You can still view conversation with %@ in the list of chats." xml:space="preserve">
|
||||
<source>You can still view conversation with %@ in the list of chats.</source>
|
||||
<target>Sie können in der Chatliste weiterhin die Unterhaltung mit %@ einsehen.</target>
|
||||
<target>Sie können in der Chat-Liste weiterhin die Unterhaltung mit %@ einsehen.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="You can turn on SimpleX Lock via Settings." xml:space="preserve">
|
||||
@@ -7750,6 +7991,11 @@ Verbindungsanfrage wiederholen?</target>
|
||||
<target>Ihre Chat-Datenbank ist nicht verschlüsselt. Bitte legen Sie ein Passwort fest, um sie zu schützen.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Your chat preferences" xml:space="preserve">
|
||||
<source>Your chat preferences</source>
|
||||
<target>Ihre Chat-Präferenzen</target>
|
||||
<note>alert title</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Your chat profiles" xml:space="preserve">
|
||||
<source>Your chat profiles</source>
|
||||
<target>Ihre Chat-Profile</target>
|
||||
@@ -7757,6 +8003,7 @@ Verbindungsanfrage wiederholen?</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>Ihre Verbindung wurde auf %@ verschoben. Während Sie auf das Profil weitergeleitet wurden trat aber ein unerwarteter Fehler auf.</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">
|
||||
@@ -7774,6 +8021,11 @@ Verbindungsanfrage wiederholen?</target>
|
||||
<target>Ihre Kontakte bleiben weiterhin verbunden.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Your credentials may be sent unencrypted." xml:space="preserve">
|
||||
<source>Your credentials may be sent unencrypted.</source>
|
||||
<target>Ihre Anmeldeinformationen können unverschlüsselt versendet werden.</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">
|
||||
<source>Your current chat database will be DELETED and REPLACED with the imported one.</source>
|
||||
<target>Ihre aktuelle Chat-Datenbank wird GELÖSCHT und durch die Importierte ERSETZT.</target>
|
||||
@@ -7804,13 +8056,16 @@ Verbindungsanfrage wiederholen?</target>
|
||||
<target>Ihr Profil **%@** wird geteilt.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Your profile is stored on your device and shared only with your contacts. SimpleX servers cannot see your profile." xml:space="preserve">
|
||||
<source>Your profile is stored on your device and shared only with your contacts.
|
||||
SimpleX servers cannot see your profile.</source>
|
||||
<target>Ihr Profil wird auf Ihrem Gerät gespeichert und nur mit Ihren Kontakten geteilt.
|
||||
SimpleX-Server können Ihr Profil nicht einsehen.</target>
|
||||
<trans-unit id="Your profile is stored on your device and shared only with your contacts. SimpleX servers cannot see your profile." xml:space="preserve">
|
||||
<source>Your profile is stored on your device and shared only with your contacts. SimpleX servers cannot see your profile.</source>
|
||||
<target>Ihr Profil wird auf Ihrem Gerät gespeichert und nur mit Ihren Kontakten geteilt. SimpleX-Server können Ihr Profil nicht einsehen.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</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>Ihr Profil wurde geändert. Wenn Sie es speichern, wird das aktualisierte Profil an alle Ihre Kontakte gesendet.</target>
|
||||
<note>alert message</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Your profile, contacts and delivered messages are stored on your device." xml:space="preserve">
|
||||
<source>Your profile, contacts and delivered messages are stored on your device.</source>
|
||||
<target>Ihr Profil, Ihre Kontakte und zugestellten Nachrichten werden auf Ihrem Gerät gespeichert.</target>
|
||||
@@ -8248,7 +8503,7 @@ SimpleX-Server können Ihr Profil nicht einsehen.</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">
|
||||
@@ -8480,7 +8735,7 @@ SimpleX-Server können Ihr Profil nicht einsehen.</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">
|
||||
|
||||
@@ -162,11 +162,36 @@
|
||||
<target>%d days</target>
|
||||
<note>time interval</note>
|
||||
</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 file(s) are still being downloaded.</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 file(s) failed to download.</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 file(s) were deleted.</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 file(s) were not downloaded.</target>
|
||||
<note>forward confirmation reason</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="%d hours" xml:space="preserve">
|
||||
<source>%d hours</source>
|
||||
<target>%d hours</target>
|
||||
<note>time interval</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="%d messages not forwarded" xml:space="preserve">
|
||||
<source>%d messages not forwarded</source>
|
||||
<target>%d messages not forwarded</target>
|
||||
<note>alert title</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="%d min" xml:space="preserve">
|
||||
<source>%d min</source>
|
||||
<target>%d min</target>
|
||||
@@ -728,7 +753,7 @@
|
||||
<trans-unit id="All profiles" xml:space="preserve">
|
||||
<source>All profiles</source>
|
||||
<target>All profiles</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
<note>profile dropdown</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="All your contacts will remain connected." xml:space="preserve">
|
||||
<source>All your contacts will remain connected.</source>
|
||||
@@ -920,6 +945,11 @@
|
||||
<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>
|
||||
@@ -1025,6 +1055,11 @@
|
||||
<target>Auto-accept images</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Auto-accept settings" xml:space="preserve">
|
||||
<source>Auto-accept settings</source>
|
||||
<target>Auto-accept settings</target>
|
||||
<note>alert title</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Back" xml:space="preserve">
|
||||
<source>Back</source>
|
||||
<target>Back</target>
|
||||
@@ -1050,11 +1085,21 @@
|
||||
<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>
|
||||
@@ -1065,6 +1110,21 @@
|
||||
<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>
|
||||
@@ -1198,7 +1258,7 @@
|
||||
<trans-unit id="Cancel" xml:space="preserve">
|
||||
<source>Cancel</source>
|
||||
<target>Cancel</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
<note>alert button</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Cancel migration" xml:space="preserve">
|
||||
<source>Cancel migration</source>
|
||||
@@ -1218,7 +1278,7 @@
|
||||
<trans-unit id="Cannot receive file" xml:space="preserve">
|
||||
<source>Cannot receive file</source>
|
||||
<target>Cannot receive file</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
<note>alert title</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Capacity exceeded - recipient did not receive previously sent messages." xml:space="preserve">
|
||||
<source>Capacity exceeded - recipient did not receive previously sent messages.</source>
|
||||
@@ -1346,6 +1406,16 @@
|
||||
<target>Chat preferences</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Chat preferences were changed." xml:space="preserve">
|
||||
<source>Chat preferences were changed.</source>
|
||||
<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>
|
||||
@@ -1875,6 +1945,11 @@ 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>
|
||||
@@ -2169,6 +2244,11 @@ 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>
|
||||
@@ -2419,6 +2499,11 @@ This is your own one-time link!</target>
|
||||
<target>Do not send history to new members.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Do not use credentials with proxy." xml:space="preserve">
|
||||
<source>Do not use credentials with proxy.</source>
|
||||
<target>Do not use credentials with proxy.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Don't create address" xml:space="preserve">
|
||||
<source>Don't create address</source>
|
||||
<target>Don't create address</target>
|
||||
@@ -2442,7 +2527,8 @@ This is your own one-time link!</target>
|
||||
<trans-unit id="Download" xml:space="preserve">
|
||||
<source>Download</source>
|
||||
<target>Download</target>
|
||||
<note>chat item action</note>
|
||||
<note>alert button
|
||||
chat item action</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Download errors" xml:space="preserve">
|
||||
<source>Download errors</source>
|
||||
@@ -2459,6 +2545,11 @@ This is your own one-time link!</target>
|
||||
<target>Download file</target>
|
||||
<note>server test step</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Download files" xml:space="preserve">
|
||||
<source>Download files</source>
|
||||
<target>Download files</target>
|
||||
<note>alert action</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Downloaded" xml:space="preserve">
|
||||
<source>Downloaded</source>
|
||||
<target>Downloaded</target>
|
||||
@@ -2874,6 +2965,11 @@ This is your own one-time link!</target>
|
||||
<target>Error loading %@ servers</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Error migrating settings" xml:space="preserve">
|
||||
<source>Error migrating settings</source>
|
||||
<target>Error migrating settings</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Error opening chat" xml:space="preserve">
|
||||
<source>Error opening chat</source>
|
||||
<target>Error opening chat</target>
|
||||
@@ -2882,7 +2978,7 @@ This is your own one-time link!</target>
|
||||
<trans-unit id="Error receiving file" xml:space="preserve">
|
||||
<source>Error receiving file</source>
|
||||
<target>Error receiving file</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
<note>alert title</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Error reconnecting server" xml:space="preserve">
|
||||
<source>Error reconnecting server</source>
|
||||
@@ -2982,7 +3078,7 @@ This is your own one-time link!</target>
|
||||
<trans-unit id="Error switching profile!" xml:space="preserve">
|
||||
<source>Error switching profile!</source>
|
||||
<target>Error switching profile!</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
<note>alertTitle</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Error synchronizing connection" xml:space="preserve">
|
||||
<source>Error synchronizing connection</source>
|
||||
@@ -3027,8 +3123,7 @@ This is your own one-time link!</target>
|
||||
<trans-unit id="Error: %@" xml:space="preserve">
|
||||
<source>Error: %@</source>
|
||||
<target>Error: %@</target>
|
||||
<note>file error text
|
||||
snd error text</note>
|
||||
<note>alert message</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Error: URL is invalid" xml:space="preserve">
|
||||
<source>Error: URL is invalid</source>
|
||||
@@ -3115,6 +3210,13 @@ This is your own one-time link!</target>
|
||||
<target>File error</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="File errors: %@" xml:space="preserve">
|
||||
<source>File errors:
|
||||
%@</source>
|
||||
<target>File errors:
|
||||
%@</target>
|
||||
<note>alert message</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="File not found - most likely file was deleted or cancelled." xml:space="preserve">
|
||||
<source>File not found - most likely file was deleted or cancelled.</source>
|
||||
<target>File not found - most likely file was deleted or cancelled.</target>
|
||||
@@ -3250,11 +3352,31 @@ This is your own one-time link!</target>
|
||||
<target>Forward</target>
|
||||
<note>chat item action</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Forward %d message(s)?" xml:space="preserve">
|
||||
<source>Forward %d message(s)?</source>
|
||||
<target>Forward %d message(s)?</target>
|
||||
<note>alert title</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Forward and save messages" xml:space="preserve">
|
||||
<source>Forward and save messages</source>
|
||||
<target>Forward and save messages</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Forward messages" xml:space="preserve">
|
||||
<source>Forward messages</source>
|
||||
<target>Forward messages</target>
|
||||
<note>alert action</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Forward messages without files?" xml:space="preserve">
|
||||
<source>Forward messages without files?</source>
|
||||
<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>
|
||||
@@ -3265,6 +3387,11 @@ This is your own one-time link!</target>
|
||||
<target>Forwarded from</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Forwarding %lld messages" xml:space="preserve">
|
||||
<source>Forwarding %lld messages</source>
|
||||
<target>Forwarding %lld messages</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">
|
||||
<source>Forwarding server %@ failed to connect to destination server %@. Please try later.</source>
|
||||
<target>Forwarding server %@ failed to connect to destination server %@. Please try later.</target>
|
||||
@@ -3314,11 +3441,6 @@ Error: %2$@</target>
|
||||
<target>Full name (optional)</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Full name:" xml:space="preserve">
|
||||
<source>Full name:</source>
|
||||
<target>Full name:</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Fully decentralized – visible only to members." xml:space="preserve">
|
||||
<source>Fully decentralized – visible only to members.</source>
|
||||
<target>Fully decentralized – visible only to members.</target>
|
||||
@@ -3564,6 +3686,11 @@ Error: %2$@</target>
|
||||
<target>ICE servers (one per line)</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="IP address" xml:space="preserve">
|
||||
<source>IP address</source>
|
||||
<target>IP address</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">
|
||||
<source>If you can't meet in person, show QR code in a video call, or share the link.</source>
|
||||
<target>If you can't meet in person, show QR code in a video call, or share the link.</target>
|
||||
@@ -3639,6 +3766,13 @@ 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>
|
||||
@@ -4264,6 +4398,11 @@ This is your link for group %@!</target>
|
||||
<target>Messages sent</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</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>Messages were deleted after you selected them.</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">
|
||||
<source>Messages, files and calls are protected by **end-to-end encryption** with perfect forward secrecy, repudiation and break-in recovery.</source>
|
||||
<target>Messages, files and calls are protected by **end-to-end encryption** with perfect forward secrecy, repudiation and break-in recovery.</target>
|
||||
@@ -4419,6 +4558,16 @@ 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>
|
||||
@@ -4539,6 +4688,16 @@ 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>
|
||||
@@ -4559,6 +4718,11 @@ This is your link for group %@!</target>
|
||||
<target>Nothing selected</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Nothing to forward!" xml:space="preserve">
|
||||
<source>Nothing to forward!</source>
|
||||
<target>Nothing to forward!</target>
|
||||
<note>alert title</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Notifications" xml:space="preserve">
|
||||
<source>Notifications</source>
|
||||
<target>Notifications</target>
|
||||
@@ -4591,7 +4755,7 @@ This is your link for group %@!</target>
|
||||
<trans-unit id="Ok" xml:space="preserve">
|
||||
<source>Ok</source>
|
||||
<target>Ok</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
<note>alert button</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Old database" xml:space="preserve">
|
||||
<source>Old database</source>
|
||||
@@ -4782,6 +4946,13 @@ Requires compatible VPN.</target>
|
||||
<target>Other %@ servers</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Other file errors: %@" xml:space="preserve">
|
||||
<source>Other file errors:
|
||||
%@</source>
|
||||
<target>Other file errors:
|
||||
%@</target>
|
||||
<note>alert message</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="PING count" xml:space="preserve">
|
||||
<source>PING count</source>
|
||||
<target>PING count</target>
|
||||
@@ -4817,6 +4988,11 @@ Requires compatible VPN.</target>
|
||||
<target>Passcode set!</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Password" xml:space="preserve">
|
||||
<source>Password</source>
|
||||
<target>Password</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Password to show" xml:space="preserve">
|
||||
<source>Password to show</source>
|
||||
<target>Password to show</target>
|
||||
@@ -4966,6 +5142,11 @@ Error: %@</target>
|
||||
<target>Polish interface</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</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">
|
||||
<source>Possibly, certificate fingerprint in server address is incorrect</source>
|
||||
<target>Possibly, certificate fingerprint in server address is incorrect</target>
|
||||
@@ -5051,16 +5232,6 @@ Error: %@</target>
|
||||
<target>Profile images</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Profile name" xml:space="preserve">
|
||||
<source>Profile name</source>
|
||||
<target>Profile name</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Profile name:" xml:space="preserve">
|
||||
<source>Profile name:</source>
|
||||
<target>Profile name:</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Profile password" xml:space="preserve">
|
||||
<source>Profile password</source>
|
||||
<target>Profile password</target>
|
||||
@@ -5163,6 +5334,11 @@ Enable in *Network & servers* settings.</target>
|
||||
<target>Proxied servers</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Proxy requires password" xml:space="preserve">
|
||||
<source>Proxy requires password</source>
|
||||
<target>Proxy requires password</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Push notifications" xml:space="preserve">
|
||||
<source>Push notifications</source>
|
||||
<target>Push notifications</target>
|
||||
@@ -5384,6 +5560,11 @@ Enable in *Network & servers* settings.</target>
|
||||
<target>Remove</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Remove archive?" xml:space="preserve">
|
||||
<source>Remove archive?</source>
|
||||
<target>Remove archive?</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Remove image" xml:space="preserve">
|
||||
<source>Remove image</source>
|
||||
<target>Remove image</target>
|
||||
@@ -5564,6 +5745,11 @@ Enable in *Network & servers* settings.</target>
|
||||
<target>SMP server</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="SOCKS proxy" xml:space="preserve">
|
||||
<source>SOCKS proxy</source>
|
||||
<target>SOCKS proxy</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Safely receive files" xml:space="preserve">
|
||||
<source>Safely receive files</source>
|
||||
<target>Safely receive files</target>
|
||||
@@ -5577,12 +5763,13 @@ Enable in *Network & servers* settings.</target>
|
||||
<trans-unit id="Save" xml:space="preserve">
|
||||
<source>Save</source>
|
||||
<target>Save</target>
|
||||
<note>chat item action</note>
|
||||
<note>alert button
|
||||
chat item action</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Save (and notify contacts)" xml:space="preserve">
|
||||
<source>Save (and notify contacts)</source>
|
||||
<target>Save (and notify contacts)</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
<note>alert button</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Save and notify contact" xml:space="preserve">
|
||||
<source>Save and notify contact</source>
|
||||
@@ -5609,11 +5796,6 @@ Enable in *Network & servers* settings.</target>
|
||||
<target>Save archive</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Save auto-accept settings" xml:space="preserve">
|
||||
<source>Save auto-accept settings</source>
|
||||
<target>Save auto-accept settings</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Save group profile" xml:space="preserve">
|
||||
<source>Save group profile</source>
|
||||
<target>Save group profile</target>
|
||||
@@ -5649,16 +5831,16 @@ Enable in *Network & servers* settings.</target>
|
||||
<target>Save servers?</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Save settings?" xml:space="preserve">
|
||||
<source>Save settings?</source>
|
||||
<target>Save settings?</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Save welcome message?" xml:space="preserve">
|
||||
<source>Save welcome message?</source>
|
||||
<target>Save welcome message?</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Save your profile?" xml:space="preserve">
|
||||
<source>Save your profile?</source>
|
||||
<target>Save your profile?</target>
|
||||
<note>alert title</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Saved" xml:space="preserve">
|
||||
<source>Saved</source>
|
||||
<target>Saved</target>
|
||||
@@ -5679,6 +5861,11 @@ Enable in *Network & servers* settings.</target>
|
||||
<target>Saved message</target>
|
||||
<note>message info title</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Saving %lld messages" xml:space="preserve">
|
||||
<source>Saving %lld messages</source>
|
||||
<target>Saving %lld messages</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Scale" xml:space="preserve">
|
||||
<source>Scale</source>
|
||||
<target>Scale</target>
|
||||
@@ -5882,7 +6069,7 @@ Enable in *Network & servers* settings.</target>
|
||||
<trans-unit id="Sender cancelled file transfer." xml:space="preserve">
|
||||
<source>Sender cancelled file transfer.</source>
|
||||
<target>Sender cancelled file transfer.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
<note>alert message</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Sender may have deleted the connection request." xml:space="preserve">
|
||||
<source>Sender may have deleted the connection request.</source>
|
||||
@@ -5979,6 +6166,11 @@ 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>
|
||||
@@ -6099,6 +6291,11 @@ Enable in *Network & servers* settings.</target>
|
||||
<target>Settings</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Settings were changed." xml:space="preserve">
|
||||
<source>Settings were changed.</source>
|
||||
<target>Settings were changed.</target>
|
||||
<note>alert message</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Shape profile images" xml:space="preserve">
|
||||
<source>Shape profile images</source>
|
||||
<target>Shape profile images</target>
|
||||
@@ -6274,6 +6471,11 @@ 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>
|
||||
@@ -6304,6 +6506,11 @@ Enable in *Network & servers* settings.</target>
|
||||
<target>Soft</target>
|
||||
<note>blur media</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Some app settings were not migrated." xml:space="preserve">
|
||||
<source>Some app settings were not migrated.</source>
|
||||
<target>Some app settings were not migrated.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Some file(s) were not exported:" xml:space="preserve">
|
||||
<source>Some file(s) were not exported:</source>
|
||||
<target>Some file(s) were not exported:</target>
|
||||
@@ -6444,6 +6651,16 @@ 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>
|
||||
@@ -6676,6 +6893,11 @@ It can happen because of some bug or when the connection is compromised.</target
|
||||
<target>The text you pasted is not a SimpleX link.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</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>The uploaded database archive will be permanently removed from the servers.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Themes" xml:space="preserve">
|
||||
<source>Themes</source>
|
||||
<target>Themes</target>
|
||||
@@ -6803,6 +7025,16 @@ 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>
|
||||
@@ -6956,7 +7188,7 @@ You will be prompted to complete authentication before this feature is enabled.<
|
||||
<trans-unit id="Unknown servers!" xml:space="preserve">
|
||||
<source>Unknown servers!</source>
|
||||
<target>Unknown servers!</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
<note>alert title</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Unless you use iOS call interface, enable Do Not Disturb mode to avoid interruptions." xml:space="preserve">
|
||||
<source>Unless you use iOS call interface, enable Do Not Disturb mode to avoid interruptions.</source>
|
||||
@@ -7070,6 +7302,11 @@ To connect, please ask your contact to create another connection link and check
|
||||
<target>Use .onion hosts</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Use SOCKS proxy" xml:space="preserve">
|
||||
<source>Use SOCKS proxy</source>
|
||||
<target>Use SOCKS proxy</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Use SimpleX Chat servers?" xml:space="preserve">
|
||||
<source>Use SimpleX Chat servers?</source>
|
||||
<target>Use SimpleX Chat servers?</target>
|
||||
@@ -7135,16 +7372,16 @@ 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>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Username" xml:space="preserve">
|
||||
<source>Username</source>
|
||||
<target>Username</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Using SimpleX Chat servers." xml:space="preserve">
|
||||
<source>Using SimpleX Chat servers.</source>
|
||||
<target>Using SimpleX Chat servers.</target>
|
||||
@@ -7378,7 +7615,7 @@ To connect, please ask your contact to create another connection link and check
|
||||
<trans-unit id="Without Tor or VPN, your IP address will be visible to these XFTP relays: %@." xml:space="preserve">
|
||||
<source>Without Tor or VPN, your IP address will be visible to these XFTP relays: %@.</source>
|
||||
<target>Without Tor or VPN, your IP address will be visible to these XFTP relays: %@.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
<note>alert message</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Wrong database passphrase" xml:space="preserve">
|
||||
<source>Wrong database passphrase</source>
|
||||
@@ -7405,11 +7642,6 @@ To connect, please ask your contact to create another connection link and check
|
||||
<target>XFTP server</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="You" xml:space="preserve">
|
||||
<source>You</source>
|
||||
<target>You</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="You **must not** use the same database on two devices." xml:space="preserve">
|
||||
<source>You **must not** use the same database on two devices.</source>
|
||||
<target>You **must not** use the same database on two devices.</target>
|
||||
@@ -7759,6 +7991,11 @@ Repeat connection request?</target>
|
||||
<target>Your chat database is not encrypted - set passphrase to encrypt it.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Your chat preferences" xml:space="preserve">
|
||||
<source>Your chat preferences</source>
|
||||
<target>Your chat preferences</target>
|
||||
<note>alert title</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Your chat profiles" xml:space="preserve">
|
||||
<source>Your chat profiles</source>
|
||||
<target>Your chat profiles</target>
|
||||
@@ -7784,6 +8021,11 @@ Repeat connection request?</target>
|
||||
<target>Your contacts will remain connected.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Your credentials may be sent unencrypted." xml:space="preserve">
|
||||
<source>Your credentials may be sent unencrypted.</source>
|
||||
<target>Your credentials may be sent unencrypted.</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">
|
||||
<source>Your current chat database will be DELETED and REPLACED with the imported one.</source>
|
||||
<target>Your current chat database will be DELETED and REPLACED with the imported one.</target>
|
||||
@@ -7814,13 +8056,16 @@ Repeat connection request?</target>
|
||||
<target>Your profile **%@** will be shared.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Your profile is stored on your device and shared only with your contacts. SimpleX servers cannot see your profile." xml:space="preserve">
|
||||
<source>Your profile is stored on your device and shared only with your contacts.
|
||||
SimpleX servers cannot see your profile.</source>
|
||||
<target>Your profile is stored on your device and shared only with your contacts.
|
||||
SimpleX servers cannot see your profile.</target>
|
||||
<trans-unit id="Your profile is stored on your device and shared only with your contacts. SimpleX servers cannot see your profile." xml:space="preserve">
|
||||
<source>Your profile is stored on your device and shared only with your contacts. SimpleX servers cannot see your profile.</source>
|
||||
<target>Your profile is stored on your device and shared only with your contacts. SimpleX servers cannot see your profile.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</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>Your profile was changed. If you save it, the updated profile will be sent to all your contacts.</target>
|
||||
<note>alert message</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Your profile, contacts and delivered messages are stored on your device." xml:space="preserve">
|
||||
<source>Your profile, contacts and delivered messages are stored on your device.</source>
|
||||
<target>Your profile, contacts and delivered messages are stored on your device.</target>
|
||||
|
||||
@@ -139,6 +139,7 @@
|
||||
</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">
|
||||
@@ -161,11 +162,36 @@
|
||||
<target>%d días</target>
|
||||
<note>time interval</note>
|
||||
</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 archivo(s) se está(n) descargando todavía.</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>La descarga ha fallado para %d archivo(s).</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 archivo(s) ha(n) sido eliminado(s).</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 archivo(s) no se ha(n) descargado.</target>
|
||||
<note>forward confirmation reason</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="%d hours" xml:space="preserve">
|
||||
<source>%d hours</source>
|
||||
<target>%d horas</target>
|
||||
<note>time interval</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="%d messages not forwarded" xml:space="preserve">
|
||||
<source>%d messages not forwarded</source>
|
||||
<target>%d mensajes no enviados</target>
|
||||
<note>alert title</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="%d min" xml:space="preserve">
|
||||
<source>%d min</source>
|
||||
<target>%d minutos</target>
|
||||
@@ -511,7 +537,7 @@
|
||||
</trans-unit>
|
||||
<trans-unit id="A new random profile will be shared." xml:space="preserve">
|
||||
<source>A new random profile will be shared.</source>
|
||||
<target>Se compartirá un perfil nuevo aleatorio.</target>
|
||||
<target>Compartirás un perfil nuevo aleatorio.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="A separate TCP connection will be used **for each chat profile you have in the app**." xml:space="preserve">
|
||||
@@ -727,7 +753,7 @@
|
||||
<trans-unit id="All profiles" xml:space="preserve">
|
||||
<source>All profiles</source>
|
||||
<target>Todos los perfiles</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
<note>profile dropdown</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="All your contacts will remain connected." xml:space="preserve">
|
||||
<source>All your contacts will remain connected.</source>
|
||||
@@ -919,6 +945,11 @@
|
||||
<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>
|
||||
@@ -1024,6 +1055,11 @@
|
||||
<target>Aceptar imágenes automáticamente</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Auto-accept settings" xml:space="preserve">
|
||||
<source>Auto-accept settings</source>
|
||||
<target>Auto aceptar configuración</target>
|
||||
<note>alert title</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Back" xml:space="preserve">
|
||||
<source>Back</source>
|
||||
<target>Volver</target>
|
||||
@@ -1049,11 +1085,21 @@
|
||||
<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>
|
||||
<target>Llamadas mejoradas</target>
|
||||
<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>
|
||||
<target>Sistema de fechas mejorado.</target>
|
||||
<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>
|
||||
@@ -1064,6 +1110,21 @@
|
||||
<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>
|
||||
<target>Notificaciones mejoradas</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Better security ✅" xml:space="preserve">
|
||||
<source>Better security ✅</source>
|
||||
<target>Seguridad mejorada ✅</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>Experiencia de usuario mejorada</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Black" xml:space="preserve">
|
||||
<source>Black</source>
|
||||
<target>Negro</target>
|
||||
@@ -1197,7 +1258,7 @@
|
||||
<trans-unit id="Cancel" xml:space="preserve">
|
||||
<source>Cancel</source>
|
||||
<target>Cancelar</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
<note>alert button</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Cancel migration" xml:space="preserve">
|
||||
<source>Cancel migration</source>
|
||||
@@ -1217,7 +1278,7 @@
|
||||
<trans-unit id="Cannot receive file" xml:space="preserve">
|
||||
<source>Cannot receive file</source>
|
||||
<target>No se puede recibir el archivo</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
<note>alert title</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Capacity exceeded - recipient did not receive previously sent messages." xml:space="preserve">
|
||||
<source>Capacity exceeded - recipient did not receive previously sent messages.</source>
|
||||
@@ -1345,6 +1406,16 @@
|
||||
<target>Preferencias de Chat</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Chat preferences were changed." xml:space="preserve">
|
||||
<source>Chat preferences were changed.</source>
|
||||
<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>
|
||||
@@ -1497,7 +1568,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 confirma que recuerdas la frase de contraseña de la base de datos.</target>
|
||||
<target>Para migrar la base de datos confirma que recuerdas la frase de contraseña.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Confirm upload" xml:space="preserve">
|
||||
@@ -1746,6 +1817,7 @@ This is your own one-time link!</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="Corner" xml:space="preserve">
|
||||
<source>Corner</source>
|
||||
<target>Esquina</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Correct name to %@?" xml:space="preserve">
|
||||
@@ -1873,6 +1945,11 @@ 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>
|
||||
<target>Forma personalizable de los mensajes.</target>
|
||||
<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>
|
||||
@@ -1954,7 +2031,7 @@ This is your own one-time link!</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="Database passphrase is different from saved in the keychain." xml:space="preserve">
|
||||
<source>Database passphrase is different from saved in the keychain.</source>
|
||||
<target>La contraseña es distinta a la almacenada en Keychain.</target>
|
||||
<target>La contraseña es diferente a la almacenada en Keychain.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Database passphrase is required to open chat." xml:space="preserve">
|
||||
@@ -2167,6 +2244,11 @@ 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>
|
||||
<target>Borra o modera hasta 200 mensajes a la vez.</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>¿Eliminar conexión pendiente?</target>
|
||||
@@ -2379,7 +2461,7 @@ This is your own one-time link!</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="Disconnect desktop?" xml:space="preserve">
|
||||
<source>Disconnect desktop?</source>
|
||||
<target>¿Desconectar ordenador?</target>
|
||||
<target>¿Desconectar del ordenador?</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Discover and join groups" xml:space="preserve">
|
||||
@@ -2417,6 +2499,11 @@ This is your own one-time link!</source>
|
||||
<target>No se envía el historial a los miembros nuevos.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Do not use credentials with proxy." xml:space="preserve">
|
||||
<source>Do not use credentials with proxy.</source>
|
||||
<target>No uses credenciales con proxy.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Don't create address" xml:space="preserve">
|
||||
<source>Don't create address</source>
|
||||
<target>No crear dirección SimpleX</target>
|
||||
@@ -2429,7 +2516,7 @@ This is your own one-time link!</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="Don't show again" xml:space="preserve">
|
||||
<source>Don't show again</source>
|
||||
<target>No mostrar de nuevo</target>
|
||||
<target>No volver a mostrar</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Downgrade and open chat" xml:space="preserve">
|
||||
@@ -2440,7 +2527,8 @@ This is your own one-time link!</source>
|
||||
<trans-unit id="Download" xml:space="preserve">
|
||||
<source>Download</source>
|
||||
<target>Descargar</target>
|
||||
<note>chat item action</note>
|
||||
<note>alert button
|
||||
chat item action</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Download errors" xml:space="preserve">
|
||||
<source>Download errors</source>
|
||||
@@ -2457,6 +2545,11 @@ This is your own one-time link!</source>
|
||||
<target>Descargar archivo</target>
|
||||
<note>server test step</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Download files" xml:space="preserve">
|
||||
<source>Download files</source>
|
||||
<target>Descargar archivos</target>
|
||||
<note>alert action</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Downloaded" xml:space="preserve">
|
||||
<source>Downloaded</source>
|
||||
<target>Descargado</target>
|
||||
@@ -2734,6 +2827,7 @@ 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>Error al cambiar el perfil de conexión</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Error changing role" xml:space="preserve">
|
||||
@@ -2748,6 +2842,7 @@ 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>¡Error al cambiar a incógnito!</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Error connecting to forwarding server %@. Please try later." xml:space="preserve">
|
||||
@@ -2870,6 +2965,11 @@ This is your own one-time link!</source>
|
||||
<target>Error al cargar servidores %@</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Error migrating settings" xml:space="preserve">
|
||||
<source>Error migrating settings</source>
|
||||
<target>Error al migrar la configuración</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Error opening chat" xml:space="preserve">
|
||||
<source>Error opening chat</source>
|
||||
<target>Error al abrir chat</target>
|
||||
@@ -2878,7 +2978,7 @@ This is your own one-time link!</source>
|
||||
<trans-unit id="Error receiving file" xml:space="preserve">
|
||||
<source>Error receiving file</source>
|
||||
<target>Error al recibir archivo</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
<note>alert title</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Error reconnecting server" xml:space="preserve">
|
||||
<source>Error reconnecting server</source>
|
||||
@@ -2972,12 +3072,13 @@ 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>Error al cambiar perfil</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Error switching profile!" xml:space="preserve">
|
||||
<source>Error switching profile!</source>
|
||||
<target>¡Error al cambiar perfil!</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
<note>alertTitle</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Error synchronizing connection" xml:space="preserve">
|
||||
<source>Error synchronizing connection</source>
|
||||
@@ -3022,8 +3123,7 @@ This is your own one-time link!</source>
|
||||
<trans-unit id="Error: %@" xml:space="preserve">
|
||||
<source>Error: %@</source>
|
||||
<target>Error: %@</target>
|
||||
<note>file error text
|
||||
snd error text</note>
|
||||
<note>alert message</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Error: URL is invalid" xml:space="preserve">
|
||||
<source>Error: URL is invalid</source>
|
||||
@@ -3110,6 +3210,13 @@ This is your own one-time link!</source>
|
||||
<target>Error de archivo</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="File errors: %@" xml:space="preserve">
|
||||
<source>File errors:
|
||||
%@</source>
|
||||
<target>Error(es) de archivo
|
||||
%@</target>
|
||||
<note>alert message</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="File not found - most likely file was deleted or cancelled." xml:space="preserve">
|
||||
<source>File not found - most likely file was deleted or cancelled.</source>
|
||||
<target>Archivo no encontrado, probablemente haya sido borrado o cancelado.</target>
|
||||
@@ -3245,11 +3352,31 @@ This is your own one-time link!</source>
|
||||
<target>Reenviar</target>
|
||||
<note>chat item action</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Forward %d message(s)?" xml:space="preserve">
|
||||
<source>Forward %d message(s)?</source>
|
||||
<target>¿Reenviar %d mensaje(s)?</target>
|
||||
<note>alert title</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Forward and save messages" xml:space="preserve">
|
||||
<source>Forward and save messages</source>
|
||||
<target>Reenviar y guardar mensajes</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Forward messages" xml:space="preserve">
|
||||
<source>Forward messages</source>
|
||||
<target>Reenviar mensajes</target>
|
||||
<note>alert action</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Forward messages without files?" xml:space="preserve">
|
||||
<source>Forward messages without files?</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>
|
||||
<target>Desplazamiento de hasta 20 mensajes.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Forwarded" xml:space="preserve">
|
||||
<source>Forwarded</source>
|
||||
<target>Reenviado</target>
|
||||
@@ -3260,6 +3387,11 @@ This is your own one-time link!</source>
|
||||
<target>Reenviado por</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Forwarding %lld messages" xml:space="preserve">
|
||||
<source>Forwarding %lld messages</source>
|
||||
<target>Reenviando %lld mensajes</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">
|
||||
<source>Forwarding server %@ failed to connect to destination server %@. Please try later.</source>
|
||||
<target>El servidor de reenvío %@ no ha podido conectarse al servidor de destino %@. Por favor, intentalo más tarde.</target>
|
||||
@@ -3309,19 +3441,14 @@ Error: %2$@</target>
|
||||
<target>Nombre completo (opcional)</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Full name:" xml:space="preserve">
|
||||
<source>Full name:</source>
|
||||
<target>Nombre completo:</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Fully decentralized – visible only to members." xml:space="preserve">
|
||||
<source>Fully decentralized – visible only to members.</source>
|
||||
<target>Completamente descentralizado y sólo visible para los miembros.</target>
|
||||
<target>Totalmente descentralizado. Visible sólo para los miembros.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Fully re-implemented - work in background!" xml:space="preserve">
|
||||
<source>Fully re-implemented - work in background!</source>
|
||||
<target>Completamente reimplementado: ¡funciona en segundo plano!</target>
|
||||
<target>Totalmente revisado. ¡Funciona en segundo plano!</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Further reduced battery usage" xml:space="preserve">
|
||||
@@ -3559,6 +3686,11 @@ Error: %2$@</target>
|
||||
<target>Servidores ICE (uno por línea)</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="IP address" xml:space="preserve">
|
||||
<source>IP address</source>
|
||||
<target>Dirección 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">
|
||||
<source>If you can't meet in person, show QR code in a video call, or share the link.</source>
|
||||
<target>Si no puedes reunirte en persona, muestra el código QR por videollamada o comparte el enlace.</target>
|
||||
@@ -3634,6 +3766,13 @@ 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>
|
||||
<target>Reducción del tráfico y entrega mejorada.
|
||||
¡Pronto habrá nuevas mejoras!</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>Entrega de mensajes mejorada</target>
|
||||
@@ -4036,7 +4175,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>Sólo datos del perfil local</target>
|
||||
<target>Eliminar sólo el perfil</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Lock after" xml:space="preserve">
|
||||
@@ -4206,6 +4345,7 @@ This is your link for group %@!</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="Message shape" xml:space="preserve">
|
||||
<source>Message shape</source>
|
||||
<target>Forma del mensaje</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Message source remains private." xml:space="preserve">
|
||||
@@ -4258,6 +4398,11 @@ This is your link for group %@!</source>
|
||||
<target>Mensajes enviados</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</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>Los mensajes han sido borrados después de seleccionarlos.</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">
|
||||
<source>Messages, files and calls are protected by **end-to-end encryption** with perfect forward secrecy, repudiation and break-in recovery.</source>
|
||||
<target>Los mensajes, archivos y llamadas están protegidos mediante **cifrado de extremo a extremo** con secreto perfecto hacía adelante, repudio y recuperación tras ataque.</target>
|
||||
@@ -4413,6 +4558,16 @@ 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>
|
||||
@@ -4533,6 +4688,16 @@ 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>
|
||||
@@ -4553,6 +4718,11 @@ This is your link for group %@!</source>
|
||||
<target>Nada seleccionado</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Nothing to forward!" xml:space="preserve">
|
||||
<source>Nothing to forward!</source>
|
||||
<target>¡Nada para reenviar!</target>
|
||||
<note>alert title</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Notifications" xml:space="preserve">
|
||||
<source>Notifications</source>
|
||||
<target>Notificaciones</target>
|
||||
@@ -4585,7 +4755,7 @@ This is your link for group %@!</source>
|
||||
<trans-unit id="Ok" xml:space="preserve">
|
||||
<source>Ok</source>
|
||||
<target>Ok</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
<note>alert button</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Old database" xml:space="preserve">
|
||||
<source>Old database</source>
|
||||
@@ -4776,6 +4946,13 @@ Requiere activación de la VPN.</target>
|
||||
<target>Otros servidores %@</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Other file errors: %@" xml:space="preserve">
|
||||
<source>Other file errors:
|
||||
%@</source>
|
||||
<target>Otro(s) error(es) de archivo.
|
||||
%@</target>
|
||||
<note>alert message</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="PING count" xml:space="preserve">
|
||||
<source>PING count</source>
|
||||
<target>Contador PING</target>
|
||||
@@ -4811,6 +4988,11 @@ Requiere activación de la VPN.</target>
|
||||
<target>¡Código de acceso guardado!</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Password" xml:space="preserve">
|
||||
<source>Password</source>
|
||||
<target>Contraseña</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Password to show" xml:space="preserve">
|
||||
<source>Password to show</source>
|
||||
<target>Contraseña para hacerlo visible</target>
|
||||
@@ -4960,9 +5142,14 @@ Error: %@</target>
|
||||
<target>Interfaz en polaco</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Port" xml:space="preserve">
|
||||
<source>Port</source>
|
||||
<target>Puerto</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</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 digital del certificado en la dirección del servidor es incorrecta</target>
|
||||
<target>Posiblemente la huella 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">
|
||||
@@ -5032,7 +5219,7 @@ Error: %@</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="Profile and server connections" xml:space="preserve">
|
||||
<source>Profile and server connections</source>
|
||||
<target>Datos del perfil y conexiones</target>
|
||||
<target>Eliminar perfil y conexiones</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Profile image" xml:space="preserve">
|
||||
@@ -5045,16 +5232,6 @@ Error: %@</target>
|
||||
<target>Forma de los perfiles</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Profile name" xml:space="preserve">
|
||||
<source>Profile name</source>
|
||||
<target>Nombre del perfil</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Profile name:" xml:space="preserve">
|
||||
<source>Profile name:</source>
|
||||
<target>Nombre del perfil:</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Profile password" xml:space="preserve">
|
||||
<source>Profile password</source>
|
||||
<target>Contraseña del perfil</target>
|
||||
@@ -5157,6 +5334,11 @@ Actívalo en ajustes de *Servidores y Redes*.</target>
|
||||
<target>Servidores con proxy</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Proxy requires password" xml:space="preserve">
|
||||
<source>Proxy requires password</source>
|
||||
<target>El proxy requiere contraseña</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Push notifications" xml:space="preserve">
|
||||
<source>Push notifications</source>
|
||||
<target>Notificaciones automáticas</target>
|
||||
@@ -5378,6 +5560,11 @@ Actívalo en ajustes de *Servidores y Redes*.</target>
|
||||
<target>Eliminar</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Remove archive?" xml:space="preserve">
|
||||
<source>Remove archive?</source>
|
||||
<target>¿Eliminar archivo?</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Remove image" xml:space="preserve">
|
||||
<source>Remove image</source>
|
||||
<target>Eliminar imagen</target>
|
||||
@@ -5558,6 +5745,11 @@ Actívalo en ajustes de *Servidores y Redes*.</target>
|
||||
<target>Servidor SMP</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</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">
|
||||
<source>Safely receive files</source>
|
||||
<target>Recibe archivos de forma segura</target>
|
||||
@@ -5571,12 +5763,13 @@ Actívalo en ajustes de *Servidores y Redes*.</target>
|
||||
<trans-unit id="Save" xml:space="preserve">
|
||||
<source>Save</source>
|
||||
<target>Guardar</target>
|
||||
<note>chat item action</note>
|
||||
<note>alert button
|
||||
chat item action</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Save (and notify contacts)" xml:space="preserve">
|
||||
<source>Save (and notify contacts)</source>
|
||||
<target>Guardar (y notificar contactos)</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
<note>alert button</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Save and notify contact" xml:space="preserve">
|
||||
<source>Save and notify contact</source>
|
||||
@@ -5603,11 +5796,6 @@ Actívalo en ajustes de *Servidores y Redes*.</target>
|
||||
<target>Guardar archivo</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Save auto-accept settings" xml:space="preserve">
|
||||
<source>Save auto-accept settings</source>
|
||||
<target>Guardar configuración de auto aceptar</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Save group profile" xml:space="preserve">
|
||||
<source>Save group profile</source>
|
||||
<target>Guardar perfil de grupo</target>
|
||||
@@ -5643,16 +5831,16 @@ Actívalo en ajustes de *Servidores y Redes*.</target>
|
||||
<target>¿Guardar servidores?</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Save settings?" xml:space="preserve">
|
||||
<source>Save settings?</source>
|
||||
<target>¿Guardar configuración?</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Save welcome message?" xml:space="preserve">
|
||||
<source>Save welcome message?</source>
|
||||
<target>¿Guardar mensaje de bienvenida?</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Save your profile?" xml:space="preserve">
|
||||
<source>Save your profile?</source>
|
||||
<target>¿Guardar tu perfil?</target>
|
||||
<note>alert title</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Saved" xml:space="preserve">
|
||||
<source>Saved</source>
|
||||
<target>Guardado</target>
|
||||
@@ -5673,6 +5861,11 @@ Actívalo en ajustes de *Servidores y Redes*.</target>
|
||||
<target>Mensaje guardado</target>
|
||||
<note>message info title</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Saving %lld messages" xml:space="preserve">
|
||||
<source>Saving %lld messages</source>
|
||||
<target>Guardando %lld mensajes</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Scale" xml:space="preserve">
|
||||
<source>Scale</source>
|
||||
<target>Escala</target>
|
||||
@@ -5755,6 +5948,7 @@ Actívalo en ajustes de *Servidores y Redes*.</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="Select chat profile" xml:space="preserve">
|
||||
<source>Select chat profile</source>
|
||||
<target>Selecciona perfil de chat</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Selected %lld" xml:space="preserve">
|
||||
@@ -5804,7 +5998,7 @@ Actívalo en ajustes de *Servidores y Redes*.</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="Send direct message to connect" xml:space="preserve">
|
||||
<source>Send direct message to connect</source>
|
||||
<target>Envia un mensaje para conectar</target>
|
||||
<target>Envía un mensaje para conectar</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Send disappearing message" xml:space="preserve">
|
||||
@@ -5875,7 +6069,7 @@ Actívalo en ajustes de *Servidores y Redes*.</target>
|
||||
<trans-unit id="Sender cancelled file transfer." xml:space="preserve">
|
||||
<source>Sender cancelled file transfer.</source>
|
||||
<target>El remitente ha cancelado la transferencia de archivos.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
<note>alert message</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Sender may have deleted the connection request." xml:space="preserve">
|
||||
<source>Sender may have deleted the connection request.</source>
|
||||
@@ -5972,6 +6166,11 @@ 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>
|
||||
@@ -5999,7 +6198,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>¡Error en prueba del servidor!</target>
|
||||
<target>¡Prueba no superada!</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Server type" xml:space="preserve">
|
||||
@@ -6092,6 +6291,11 @@ Actívalo en ajustes de *Servidores y Redes*.</target>
|
||||
<target>Configuración</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Settings were changed." xml:space="preserve">
|
||||
<source>Settings were changed.</source>
|
||||
<target>La configuración ha sido modificada.</target>
|
||||
<note>alert message</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Shape profile images" xml:space="preserve">
|
||||
<source>Shape profile images</source>
|
||||
<target>Dar forma a las imágenes de perfil</target>
|
||||
@@ -6129,6 +6333,7 @@ Actívalo en ajustes de *Servidores y Redes*.</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="Share profile" xml:space="preserve">
|
||||
<source>Share profile</source>
|
||||
<target>Comparte perfil</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Share this 1-time invite link" xml:space="preserve">
|
||||
@@ -6266,6 +6471,11 @@ 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>
|
||||
<target>Protocolos de SimpleX auditados por 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>Modo incógnito simplificado</target>
|
||||
@@ -6296,6 +6506,11 @@ Actívalo en ajustes de *Servidores y Redes*.</target>
|
||||
<target>Suave</target>
|
||||
<note>blur media</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Some app settings were not migrated." xml:space="preserve">
|
||||
<source>Some app settings were not migrated.</source>
|
||||
<target>Algunas configuraciones de la app no han sido migradas.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Some file(s) were not exported:" xml:space="preserve">
|
||||
<source>Some file(s) were not exported:</source>
|
||||
<target>Algunos archivos no han sido exportados:</target>
|
||||
@@ -6436,6 +6651,16 @@ 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>
|
||||
<target>Intercambia audio y video durante la llamada.</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>Cambia el perfil de chat para invitaciones de un solo uso.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="System" xml:space="preserve">
|
||||
<source>System</source>
|
||||
<target>Sistema</target>
|
||||
@@ -6473,6 +6698,7 @@ Actívalo en ajustes de *Servidores y Redes*.</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="Tail" xml:space="preserve">
|
||||
<source>Tail</source>
|
||||
<target>Cola</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Take picture" xml:space="preserve">
|
||||
@@ -6522,7 +6748,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>La prueba ha fallado en el paso %@.</target>
|
||||
<target>Prueba no superada en el paso %@.</target>
|
||||
<note>server test failure</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Test server" xml:space="preserve">
|
||||
@@ -6537,7 +6763,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 fallidas!</target>
|
||||
<target>¡Pruebas no superadas!</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Thank you for installing SimpleX Chat!" xml:space="preserve">
|
||||
@@ -6667,6 +6893,11 @@ Puede ocurrir por algún bug o cuando la conexión está comprometida.</target>
|
||||
<target>El texto pegado no es un enlace SimpleX.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</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>El archivo de bases de datos subido será eliminado permanentemente de los servidores.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Themes" xml:space="preserve">
|
||||
<source>Themes</source>
|
||||
<target>Temas</target>
|
||||
@@ -6794,6 +7025,16 @@ 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>
|
||||
@@ -6947,7 +7188,7 @@ Se te pedirá que completes la autenticación antes de activar esta función.</t
|
||||
<trans-unit id="Unknown servers!" xml:space="preserve">
|
||||
<source>Unknown servers!</source>
|
||||
<target>¡Servidores desconocidos!</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
<note>alert title</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Unless you use iOS call interface, enable Do Not Disturb mode to avoid interruptions." xml:space="preserve">
|
||||
<source>Unless you use iOS call interface, enable Do Not Disturb mode to avoid interruptions.</source>
|
||||
@@ -7061,6 +7302,11 @@ Para conectarte pide a tu contacto que cree otro enlace y comprueba la conexión
|
||||
<target>Usar hosts .onion</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Use SOCKS proxy" xml:space="preserve">
|
||||
<source>Use SOCKS proxy</source>
|
||||
<target>Usar proxy SOCKS</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Use SimpleX Chat servers?" xml:space="preserve">
|
||||
<source>Use SimpleX Chat servers?</source>
|
||||
<target>¿Usar servidores SimpleX Chat?</target>
|
||||
@@ -7126,16 +7372,16 @@ 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>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Username" xml:space="preserve">
|
||||
<source>Username</source>
|
||||
<target>Nombre de usuario</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Using SimpleX Chat servers." xml:space="preserve">
|
||||
<source>Using SimpleX Chat servers.</source>
|
||||
<target>Usar servidores SimpleX Chat.</target>
|
||||
@@ -7369,7 +7615,7 @@ Para conectarte pide a tu contacto que cree otro enlace y comprueba la conexión
|
||||
<trans-unit id="Without Tor or VPN, your IP address will be visible to these XFTP relays: %@." xml:space="preserve">
|
||||
<source>Without Tor or VPN, your IP address will be visible to these XFTP relays: %@.</source>
|
||||
<target>Sin Tor o VPN, tu dirección IP será visible para estos servidores XFTP: %@.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
<note>alert message</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Wrong database passphrase" xml:space="preserve">
|
||||
<source>Wrong database passphrase</source>
|
||||
@@ -7396,11 +7642,6 @@ Para conectarte pide a tu contacto que cree otro enlace y comprueba la conexión
|
||||
<target>Servidor XFTP</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="You" xml:space="preserve">
|
||||
<source>You</source>
|
||||
<target>Tú</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="You **must not** use the same database on two devices." xml:space="preserve">
|
||||
<source>You **must not** use the same database on two devices.</source>
|
||||
<target>**No debes** usar la misma base de datos en dos dispositivos.</target>
|
||||
@@ -7750,6 +7991,11 @@ Repeat connection request?</source>
|
||||
<target>La base de datos no está cifrada - establece una contraseña para cifrarla.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Your chat preferences" xml:space="preserve">
|
||||
<source>Your chat preferences</source>
|
||||
<target>Tus preferencias de chat</target>
|
||||
<note>alert title</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Your chat profiles" xml:space="preserve">
|
||||
<source>Your chat profiles</source>
|
||||
<target>Mis perfiles</target>
|
||||
@@ -7757,6 +8003,7 @@ 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>Tu conexión ha sido trasladada a %@ pero ha ocurrido un error inesperado al redirigirte al perfil.</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">
|
||||
@@ -7774,6 +8021,11 @@ Repeat connection request?</source>
|
||||
<target>Tus contactos permanecerán conectados.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Your credentials may be sent unencrypted." xml:space="preserve">
|
||||
<source>Your credentials may be sent unencrypted.</source>
|
||||
<target>Tus credenciales podrían ser enviadas sin cifrar.</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">
|
||||
<source>Your current chat database will be DELETED and REPLACED with the imported one.</source>
|
||||
<target>La base de datos actual será ELIMINADA y SUSTITUIDA por la importada.</target>
|
||||
@@ -7804,13 +8056,16 @@ Repeat connection request?</source>
|
||||
<target>El perfil **%@** será compartido.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Your profile is stored on your device and shared only with your contacts. SimpleX servers cannot see your profile." xml:space="preserve">
|
||||
<source>Your profile is stored on your device and shared only with your contacts.
|
||||
SimpleX servers cannot see your profile.</source>
|
||||
<target>Tu perfil es almacenado en tu dispositivo y solamente se comparte con tus contactos.
|
||||
Los servidores SimpleX no pueden ver tu perfil.</target>
|
||||
<trans-unit id="Your profile is stored on your device and shared only with your contacts. SimpleX servers cannot see your profile." xml:space="preserve">
|
||||
<source>Your profile is stored on your device and shared only with your contacts. SimpleX servers cannot see your profile.</source>
|
||||
<target>Tu perfil es almacenado en tu dispositivo y solamente se comparte con tus contactos. Los servidores SimpleX no pueden ver tu perfil.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</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>Tu perfil ha sido modificado. Si lo guardas la actualización será enviada a todos tus contactos.</target>
|
||||
<note>alert message</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Your profile, contacts and delivered messages are stored on your device." xml:space="preserve">
|
||||
<source>Your profile, contacts and delivered messages are stored on your device.</source>
|
||||
<target>Tu perfil, contactos y mensajes se almacenan en tu dispositivo.</target>
|
||||
@@ -7828,7 +8083,7 @@ Los servidores SimpleX no pueden ver tu perfil.</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="Your server address" xml:space="preserve">
|
||||
<source>Your server address</source>
|
||||
<target>Dirección de tu servidor</target>
|
||||
<target>Dirección del servidor</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Your settings" xml:space="preserve">
|
||||
@@ -8540,7 +8795,7 @@ Los servidores SimpleX no pueden ver tu perfil.</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="removed profile picture" xml:space="preserve">
|
||||
<source>removed profile picture</source>
|
||||
<target>imagen de perfil eliminada</target>
|
||||
<target>ha eliminado la imagen del perfil</target>
|
||||
<note>profile update event chat item</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="removed you" xml:space="preserve">
|
||||
@@ -8604,7 +8859,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>nueva imagen de perfil</target>
|
||||
<target>tiene nueva imagen del perfil</target>
|
||||
<note>profile update event chat item</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="standard end-to-end encryption" xml:space="preserve">
|
||||
@@ -8952,7 +9207,7 @@ last received msg: %2$@</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="Database passphrase is different from saved in the keychain." xml:space="preserve">
|
||||
<source>Database passphrase is different from saved in the keychain.</source>
|
||||
<target>La contraseña de la base de datos es distinta a la almacenada en keychain.</target>
|
||||
<target>La contraseña de la base de datos es diferente a la almacenada en keychain.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Database passphrase is required to open chat." xml:space="preserve">
|
||||
|
||||
@@ -156,11 +156,31 @@
|
||||
<target>%d päivää</target>
|
||||
<note>time interval</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="%d file(s) are still being downloaded." xml:space="preserve">
|
||||
<source>%d file(s) are still being downloaded.</source>
|
||||
<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>
|
||||
<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>
|
||||
<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>
|
||||
<note>forward confirmation reason</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="%d hours" xml:space="preserve">
|
||||
<source>%d hours</source>
|
||||
<target>%d tuntia</target>
|
||||
<note>time interval</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="%d messages not forwarded" xml:space="preserve">
|
||||
<source>%d messages not forwarded</source>
|
||||
<note>alert title</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="%d min" xml:space="preserve">
|
||||
<source>%d min</source>
|
||||
<target>%d min</target>
|
||||
@@ -690,7 +710,7 @@
|
||||
</trans-unit>
|
||||
<trans-unit id="All profiles" xml:space="preserve">
|
||||
<source>All profiles</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
<note>profile dropdown</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="All your contacts will remain connected." xml:space="preserve">
|
||||
<source>All your contacts will remain connected.</source>
|
||||
@@ -872,6 +892,10 @@
|
||||
<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>
|
||||
@@ -971,6 +995,10 @@
|
||||
<target>Hyväksy kuvat automaattisesti</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Auto-accept settings" xml:space="preserve">
|
||||
<source>Auto-accept settings</source>
|
||||
<note>alert title</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Back" xml:space="preserve">
|
||||
<source>Back</source>
|
||||
<target>Takaisin</target>
|
||||
@@ -994,10 +1022,18 @@
|
||||
<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>
|
||||
@@ -1007,6 +1043,18 @@
|
||||
<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>
|
||||
@@ -1124,7 +1172,7 @@
|
||||
<trans-unit id="Cancel" xml:space="preserve">
|
||||
<source>Cancel</source>
|
||||
<target>Peruuta</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
<note>alert button</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Cancel migration" xml:space="preserve">
|
||||
<source>Cancel migration</source>
|
||||
@@ -1142,7 +1190,7 @@
|
||||
<trans-unit id="Cannot receive file" xml:space="preserve">
|
||||
<source>Cannot receive file</source>
|
||||
<target>Tiedostoa ei voi vastaanottaa</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
<note>alert title</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Capacity exceeded - recipient did not receive previously sent messages." xml:space="preserve">
|
||||
<source>Capacity exceeded - recipient did not receive previously sent messages.</source>
|
||||
@@ -1263,6 +1311,15 @@
|
||||
<target>Chat-asetukset</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Chat preferences were changed." xml:space="preserve">
|
||||
<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>
|
||||
@@ -1739,6 +1796,10 @@ 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>
|
||||
@@ -2025,6 +2086,10 @@ 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>
|
||||
@@ -2256,6 +2321,10 @@ This is your own one-time link!</source>
|
||||
<source>Do not send history to new members.</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Do not use credentials with proxy." xml:space="preserve">
|
||||
<source>Do not use credentials with proxy.</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Don't create address" xml:space="preserve">
|
||||
<source>Don't create address</source>
|
||||
<target>Älä luo osoitetta</target>
|
||||
@@ -2278,7 +2347,8 @@ This is your own one-time link!</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="Download" xml:space="preserve">
|
||||
<source>Download</source>
|
||||
<note>chat item action</note>
|
||||
<note>alert button
|
||||
chat item action</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Download errors" xml:space="preserve">
|
||||
<source>Download errors</source>
|
||||
@@ -2293,6 +2363,10 @@ This is your own one-time link!</source>
|
||||
<target>Lataa tiedosto</target>
|
||||
<note>server test step</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Download files" xml:space="preserve">
|
||||
<source>Download files</source>
|
||||
<note>alert action</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Downloaded" xml:space="preserve">
|
||||
<source>Downloaded</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
@@ -2685,6 +2759,10 @@ This is your own one-time link!</source>
|
||||
<target>Virhe %@-palvelimien lataamisessa</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Error migrating settings" xml:space="preserve">
|
||||
<source>Error migrating settings</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Error opening chat" xml:space="preserve">
|
||||
<source>Error opening chat</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
@@ -2692,7 +2770,7 @@ This is your own one-time link!</source>
|
||||
<trans-unit id="Error receiving file" xml:space="preserve">
|
||||
<source>Error receiving file</source>
|
||||
<target>Virhe tiedoston vastaanottamisessa</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
<note>alert title</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Error reconnecting server" xml:space="preserve">
|
||||
<source>Error reconnecting server</source>
|
||||
@@ -2785,7 +2863,7 @@ This is your own one-time link!</source>
|
||||
<trans-unit id="Error switching profile!" xml:space="preserve">
|
||||
<source>Error switching profile!</source>
|
||||
<target>Virhe profiilin vaihdossa!</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
<note>alertTitle</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Error synchronizing connection" xml:space="preserve">
|
||||
<source>Error synchronizing connection</source>
|
||||
@@ -2828,8 +2906,7 @@ This is your own one-time link!</source>
|
||||
<trans-unit id="Error: %@" xml:space="preserve">
|
||||
<source>Error: %@</source>
|
||||
<target>Virhe: %@</target>
|
||||
<note>file error text
|
||||
snd error text</note>
|
||||
<note>alert message</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Error: URL is invalid" xml:space="preserve">
|
||||
<source>Error: URL is invalid</source>
|
||||
@@ -2910,6 +2987,11 @@ This is your own one-time link!</source>
|
||||
<source>File error</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="File errors: %@" xml:space="preserve">
|
||||
<source>File errors:
|
||||
%@</source>
|
||||
<note>alert message</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="File not found - most likely file was deleted or cancelled." xml:space="preserve">
|
||||
<source>File not found - most likely file was deleted or cancelled.</source>
|
||||
<note>file error text</note>
|
||||
@@ -3036,10 +3118,26 @@ This is your own one-time link!</source>
|
||||
<source>Forward</source>
|
||||
<note>chat item action</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Forward %d message(s)?" xml:space="preserve">
|
||||
<source>Forward %d message(s)?</source>
|
||||
<note>alert title</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Forward and save messages" xml:space="preserve">
|
||||
<source>Forward and save messages</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Forward messages" xml:space="preserve">
|
||||
<source>Forward messages</source>
|
||||
<note>alert action</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Forward messages without files?" xml:space="preserve">
|
||||
<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>
|
||||
@@ -3048,6 +3146,10 @@ This is your own one-time link!</source>
|
||||
<source>Forwarded from</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Forwarding %lld messages" xml:space="preserve">
|
||||
<source>Forwarding %lld messages</source>
|
||||
<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">
|
||||
<source>Forwarding server %@ failed to connect to destination server %@. Please try later.</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
@@ -3089,11 +3191,6 @@ Error: %2$@</source>
|
||||
<target>Koko nimi (valinnainen)</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Full name:" xml:space="preserve">
|
||||
<source>Full name:</source>
|
||||
<target>Koko nimi:</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Fully decentralized – visible only to members." xml:space="preserve">
|
||||
<source>Fully decentralized – visible only to members.</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
@@ -3331,6 +3428,10 @@ Error: %2$@</source>
|
||||
<target>ICE-palvelimet (yksi per rivi)</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="IP address" xml:space="preserve">
|
||||
<source>IP address</source>
|
||||
<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">
|
||||
<source>If you can't meet in person, show QR code in a video call, or share the link.</source>
|
||||
<target>Jos et voi tavata henkilökohtaisesti, näytä QR-koodi videopuhelussa tai jaa linkki.</target>
|
||||
@@ -3403,6 +3504,11 @@ 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>
|
||||
@@ -3985,6 +4091,10 @@ This is your link for group %@!</source>
|
||||
<source>Messages sent</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Messages were deleted after you selected them." xml:space="preserve">
|
||||
<source>Messages were deleted after you selected them.</source>
|
||||
<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">
|
||||
<source>Messages, files and calls are protected by **end-to-end encryption** with perfect forward secrecy, repudiation and break-in recovery.</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
@@ -4127,6 +4237,14 @@ 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>
|
||||
@@ -4240,6 +4358,14 @@ 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>
|
||||
@@ -4258,6 +4384,10 @@ This is your link for group %@!</source>
|
||||
<source>Nothing selected</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Nothing to forward!" xml:space="preserve">
|
||||
<source>Nothing to forward!</source>
|
||||
<note>alert title</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Notifications" xml:space="preserve">
|
||||
<source>Notifications</source>
|
||||
<target>Ilmoitukset</target>
|
||||
@@ -4289,7 +4419,7 @@ This is your link for group %@!</source>
|
||||
<trans-unit id="Ok" xml:space="preserve">
|
||||
<source>Ok</source>
|
||||
<target>Ok</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
<note>alert button</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Old database" xml:space="preserve">
|
||||
<source>Old database</source>
|
||||
@@ -4468,6 +4598,11 @@ Edellyttää VPN:n sallimista.</target>
|
||||
<source>Other %@ servers</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Other file errors: %@" xml:space="preserve">
|
||||
<source>Other file errors:
|
||||
%@</source>
|
||||
<note>alert message</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="PING count" xml:space="preserve">
|
||||
<source>PING count</source>
|
||||
<target>PING-määrä</target>
|
||||
@@ -4503,6 +4638,10 @@ Edellyttää VPN:n sallimista.</target>
|
||||
<target>Pääsykoodi asetettu!</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Password" xml:space="preserve">
|
||||
<source>Password</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Password to show" xml:space="preserve">
|
||||
<source>Password to show</source>
|
||||
<target>Salasana näytettäväksi</target>
|
||||
@@ -4639,6 +4778,10 @@ Error: %@</source>
|
||||
<target>Puolalainen käyttöliittymä</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Port" xml:space="preserve">
|
||||
<source>Port</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</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>Palvelimen osoitteen varmenteen sormenjälki on mahdollisesti virheellinen</target>
|
||||
@@ -4717,14 +4860,6 @@ Error: %@</source>
|
||||
<source>Profile images</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Profile name" xml:space="preserve">
|
||||
<source>Profile name</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Profile name:" xml:space="preserve">
|
||||
<source>Profile name:</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Profile password" xml:space="preserve">
|
||||
<source>Profile password</source>
|
||||
<target>Profiilin salasana</target>
|
||||
@@ -4820,6 +4955,10 @@ Enable in *Network & servers* settings.</source>
|
||||
<source>Proxied servers</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Proxy requires password" xml:space="preserve">
|
||||
<source>Proxy requires password</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Push notifications" xml:space="preserve">
|
||||
<source>Push notifications</source>
|
||||
<target>Push-ilmoitukset</target>
|
||||
@@ -5026,6 +5165,10 @@ Enable in *Network & servers* settings.</source>
|
||||
<target>Poista</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Remove archive?" xml:space="preserve">
|
||||
<source>Remove archive?</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Remove image" xml:space="preserve">
|
||||
<source>Remove image</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
@@ -5193,6 +5336,10 @@ Enable in *Network & servers* settings.</source>
|
||||
<source>SMP server</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="SOCKS proxy" xml:space="preserve">
|
||||
<source>SOCKS proxy</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Safely receive files" xml:space="preserve">
|
||||
<source>Safely receive files</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
@@ -5204,12 +5351,13 @@ Enable in *Network & servers* settings.</source>
|
||||
<trans-unit id="Save" xml:space="preserve">
|
||||
<source>Save</source>
|
||||
<target>Tallenna</target>
|
||||
<note>chat item action</note>
|
||||
<note>alert button
|
||||
chat item action</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Save (and notify contacts)" xml:space="preserve">
|
||||
<source>Save (and notify contacts)</source>
|
||||
<target>Tallenna (ja ilmoita kontakteille)</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
<note>alert button</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Save and notify contact" xml:space="preserve">
|
||||
<source>Save and notify contact</source>
|
||||
@@ -5235,11 +5383,6 @@ Enable in *Network & servers* settings.</source>
|
||||
<target>Tallenna arkisto</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Save auto-accept settings" xml:space="preserve">
|
||||
<source>Save auto-accept settings</source>
|
||||
<target>Tallenna automaattisen hyväksynnän asetukset</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Save group profile" xml:space="preserve">
|
||||
<source>Save group profile</source>
|
||||
<target>Tallenna ryhmäprofiili</target>
|
||||
@@ -5275,16 +5418,15 @@ Enable in *Network & servers* settings.</source>
|
||||
<target>Tallenna palvelimet?</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Save settings?" xml:space="preserve">
|
||||
<source>Save settings?</source>
|
||||
<target>Tallenna asetukset?</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Save welcome message?" xml:space="preserve">
|
||||
<source>Save welcome message?</source>
|
||||
<target>Tallenna tervetuloviesti?</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Save your profile?" xml:space="preserve">
|
||||
<source>Save your profile?</source>
|
||||
<note>alert title</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Saved" xml:space="preserve">
|
||||
<source>Saved</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
@@ -5302,6 +5444,10 @@ Enable in *Network & servers* settings.</source>
|
||||
<source>Saved message</source>
|
||||
<note>message info title</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Saving %lld messages" xml:space="preserve">
|
||||
<source>Saving %lld messages</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Scale" xml:space="preserve">
|
||||
<source>Scale</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
@@ -5489,7 +5635,7 @@ Enable in *Network & servers* settings.</source>
|
||||
<trans-unit id="Sender cancelled file transfer." xml:space="preserve">
|
||||
<source>Sender cancelled file transfer.</source>
|
||||
<target>Lähettäjä peruutti tiedoston siirron.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
<note>alert message</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Sender may have deleted the connection request." xml:space="preserve">
|
||||
<source>Sender may have deleted the connection request.</source>
|
||||
@@ -5581,6 +5727,10 @@ 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>
|
||||
@@ -5690,6 +5840,10 @@ Enable in *Network & servers* settings.</source>
|
||||
<target>Asetukset</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Settings were changed." xml:space="preserve">
|
||||
<source>Settings were changed.</source>
|
||||
<note>alert message</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Shape profile images" xml:space="preserve">
|
||||
<source>Shape profile images</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
@@ -5853,6 +6007,10 @@ 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>
|
||||
@@ -5880,6 +6038,10 @@ Enable in *Network & servers* settings.</source>
|
||||
<source>Soft</source>
|
||||
<note>blur media</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Some app settings were not migrated." xml:space="preserve">
|
||||
<source>Some app settings were not migrated.</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Some file(s) were not exported:" xml:space="preserve">
|
||||
<source>Some file(s) were not exported:</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
@@ -6008,6 +6170,14 @@ 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>
|
||||
@@ -6229,6 +6399,10 @@ Tämä voi johtua jostain virheestä tai siitä, että yhteys on vaarantunut.</t
|
||||
<source>The text you pasted is not a SimpleX link.</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</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>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Themes" xml:space="preserve">
|
||||
<source>Themes</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
@@ -6345,6 +6519,14 @@ 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>
|
||||
@@ -6486,7 +6668,7 @@ Sinua kehotetaan suorittamaan todennus loppuun, ennen kuin tämä ominaisuus ote
|
||||
</trans-unit>
|
||||
<trans-unit id="Unknown servers!" xml:space="preserve">
|
||||
<source>Unknown servers!</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
<note>alert title</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Unless you use iOS call interface, enable Do Not Disturb mode to avoid interruptions." xml:space="preserve">
|
||||
<source>Unless you use iOS call interface, enable Do Not Disturb mode to avoid interruptions.</source>
|
||||
@@ -6591,6 +6773,10 @@ Jos haluat muodostaa yhteyden, pyydä kontaktiasi luomaan toinen yhteyslinkki ja
|
||||
<target>Käytä .onion-isäntiä</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Use SOCKS proxy" xml:space="preserve">
|
||||
<source>Use SOCKS proxy</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Use SimpleX Chat servers?" xml:space="preserve">
|
||||
<source>Use SimpleX Chat servers?</source>
|
||||
<target>Käytä SimpleX Chat palvelimia?</target>
|
||||
@@ -6650,15 +6836,14 @@ 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>
|
||||
</trans-unit>
|
||||
<trans-unit id="Username" xml:space="preserve">
|
||||
<source>Username</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Using SimpleX Chat servers." xml:space="preserve">
|
||||
<source>Using SimpleX Chat servers.</source>
|
||||
<target>Käyttää SimpleX Chat -palvelimia.</target>
|
||||
@@ -6871,7 +7056,7 @@ Jos haluat muodostaa yhteyden, pyydä kontaktiasi luomaan toinen yhteyslinkki ja
|
||||
</trans-unit>
|
||||
<trans-unit id="Without Tor or VPN, your IP address will be visible to these XFTP relays: %@." xml:space="preserve">
|
||||
<source>Without Tor or VPN, your IP address will be visible to these XFTP relays: %@.</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
<note>alert message</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Wrong database passphrase" xml:space="preserve">
|
||||
<source>Wrong database passphrase</source>
|
||||
@@ -6895,11 +7080,6 @@ Jos haluat muodostaa yhteyden, pyydä kontaktiasi luomaan toinen yhteyslinkki ja
|
||||
<source>XFTP server</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="You" xml:space="preserve">
|
||||
<source>You</source>
|
||||
<target>Sinä</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="You **must not** use the same database on two devices." xml:space="preserve">
|
||||
<source>You **must not** use the same database on two devices.</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
@@ -7225,6 +7405,10 @@ Repeat connection request?</source>
|
||||
<target>Keskustelut-tietokantasi ei ole salattu - aseta tunnuslause sen salaamiseksi.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Your chat preferences" xml:space="preserve">
|
||||
<source>Your chat preferences</source>
|
||||
<note>alert title</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Your chat profiles" xml:space="preserve">
|
||||
<source>Your chat profiles</source>
|
||||
<target>Keskusteluprofiilisi</target>
|
||||
@@ -7249,6 +7433,10 @@ Repeat connection request?</source>
|
||||
<target>Kontaktisi pysyvät yhdistettyinä.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Your credentials may be sent unencrypted." xml:space="preserve">
|
||||
<source>Your credentials may be sent unencrypted.</source>
|
||||
<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">
|
||||
<source>Your current chat database will be DELETED and REPLACED with the imported one.</source>
|
||||
<target>Nykyinen keskustelut-tietokantasi poistetaan ja korvataan tuodulla tietokannalla.</target>
|
||||
@@ -7278,13 +7466,15 @@ Repeat connection request?</source>
|
||||
<target>Profiilisi **%@** jaetaan.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Your profile is stored on your device and shared only with your contacts. SimpleX servers cannot see your profile." xml:space="preserve">
|
||||
<source>Your profile is stored on your device and shared only with your contacts.
|
||||
SimpleX servers cannot see your profile.</source>
|
||||
<target>Profiilisi tallennetaan laitteeseesi ja jaetaan vain yhteystietojesi kanssa.
|
||||
SimpleX-palvelimet eivät näe profiiliasi.</target>
|
||||
<trans-unit id="Your profile is stored on your device and shared only with your contacts. SimpleX servers cannot see your profile." xml:space="preserve">
|
||||
<source>Your profile is stored on your device and shared only with your contacts. SimpleX servers cannot see your profile.</source>
|
||||
<target>Profiilisi tallennetaan laitteeseesi ja jaetaan vain yhteystietojesi kanssa. SimpleX-palvelimet eivät näe profiiliasi.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</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>
|
||||
<note>alert message</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Your profile, contacts and delivered messages are stored on your device." xml:space="preserve">
|
||||
<source>Your profile, contacts and delivered messages are stored on your device.</source>
|
||||
<target>Profiilisi, kontaktisi ja toimitetut viestit tallennetaan laitteellesi.</target>
|
||||
|
||||
@@ -161,11 +161,31 @@
|
||||
<target>%d jours</target>
|
||||
<note>time interval</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="%d file(s) are still being downloaded." xml:space="preserve">
|
||||
<source>%d file(s) are still being downloaded.</source>
|
||||
<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>
|
||||
<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>
|
||||
<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>
|
||||
<note>forward confirmation reason</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="%d hours" xml:space="preserve">
|
||||
<source>%d hours</source>
|
||||
<target>%d heures</target>
|
||||
<note>time interval</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="%d messages not forwarded" xml:space="preserve">
|
||||
<source>%d messages not forwarded</source>
|
||||
<note>alert title</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="%d min" xml:space="preserve">
|
||||
<source>%d min</source>
|
||||
<target>%d min</target>
|
||||
@@ -727,7 +747,7 @@
|
||||
<trans-unit id="All profiles" xml:space="preserve">
|
||||
<source>All profiles</source>
|
||||
<target>Tous les profiles</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
<note>profile dropdown</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="All your contacts will remain connected." xml:space="preserve">
|
||||
<source>All your contacts will remain connected.</source>
|
||||
@@ -919,6 +939,10 @@
|
||||
<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>
|
||||
@@ -1024,6 +1048,10 @@
|
||||
<target>Images auto-acceptées</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Auto-accept settings" xml:space="preserve">
|
||||
<source>Auto-accept settings</source>
|
||||
<note>alert title</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Back" xml:space="preserve">
|
||||
<source>Back</source>
|
||||
<target>Retour</target>
|
||||
@@ -1049,11 +1077,19 @@
|
||||
<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>
|
||||
@@ -1064,6 +1100,18 @@
|
||||
<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>
|
||||
@@ -1197,7 +1245,7 @@
|
||||
<trans-unit id="Cancel" xml:space="preserve">
|
||||
<source>Cancel</source>
|
||||
<target>Annuler</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
<note>alert button</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Cancel migration" xml:space="preserve">
|
||||
<source>Cancel migration</source>
|
||||
@@ -1217,7 +1265,7 @@
|
||||
<trans-unit id="Cannot receive file" xml:space="preserve">
|
||||
<source>Cannot receive file</source>
|
||||
<target>Impossible de recevoir le fichier</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
<note>alert title</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Capacity exceeded - recipient did not receive previously sent messages." xml:space="preserve">
|
||||
<source>Capacity exceeded - recipient did not receive previously sent messages.</source>
|
||||
@@ -1345,6 +1393,15 @@
|
||||
<target>Préférences de chat</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Chat preferences were changed." xml:space="preserve">
|
||||
<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>
|
||||
@@ -1873,6 +1930,10 @@ 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>
|
||||
@@ -2167,6 +2228,10 @@ 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>
|
||||
@@ -2417,6 +2482,10 @@ Il s'agit de votre propre lien unique !</target>
|
||||
<target>Ne pas envoyer d'historique aux nouveaux membres.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Do not use credentials with proxy." xml:space="preserve">
|
||||
<source>Do not use credentials with proxy.</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Don't create address" xml:space="preserve">
|
||||
<source>Don't create address</source>
|
||||
<target>Ne pas créer d'adresse</target>
|
||||
@@ -2440,7 +2509,8 @@ Il s'agit de votre propre lien unique !</target>
|
||||
<trans-unit id="Download" xml:space="preserve">
|
||||
<source>Download</source>
|
||||
<target>Télécharger</target>
|
||||
<note>chat item action</note>
|
||||
<note>alert button
|
||||
chat item action</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Download errors" xml:space="preserve">
|
||||
<source>Download errors</source>
|
||||
@@ -2457,6 +2527,10 @@ Il s'agit de votre propre lien unique !</target>
|
||||
<target>Télécharger le fichier</target>
|
||||
<note>server test step</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Download files" xml:space="preserve">
|
||||
<source>Download files</source>
|
||||
<note>alert action</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Downloaded" xml:space="preserve">
|
||||
<source>Downloaded</source>
|
||||
<target>Téléchargé</target>
|
||||
@@ -2870,6 +2944,10 @@ Il s'agit de votre propre lien unique !</target>
|
||||
<target>Erreur lors du chargement des serveurs %@</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Error migrating settings" xml:space="preserve">
|
||||
<source>Error migrating settings</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Error opening chat" xml:space="preserve">
|
||||
<source>Error opening chat</source>
|
||||
<target>Erreur lors de l'ouverture du chat</target>
|
||||
@@ -2878,7 +2956,7 @@ Il s'agit de votre propre lien unique !</target>
|
||||
<trans-unit id="Error receiving file" xml:space="preserve">
|
||||
<source>Error receiving file</source>
|
||||
<target>Erreur lors de la réception du fichier</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
<note>alert title</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Error reconnecting server" xml:space="preserve">
|
||||
<source>Error reconnecting server</source>
|
||||
@@ -2977,7 +3055,7 @@ Il s'agit de votre propre lien unique !</target>
|
||||
<trans-unit id="Error switching profile!" xml:space="preserve">
|
||||
<source>Error switching profile!</source>
|
||||
<target>Erreur lors du changement de profil !</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
<note>alertTitle</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Error synchronizing connection" xml:space="preserve">
|
||||
<source>Error synchronizing connection</source>
|
||||
@@ -3022,8 +3100,7 @@ Il s'agit de votre propre lien unique !</target>
|
||||
<trans-unit id="Error: %@" xml:space="preserve">
|
||||
<source>Error: %@</source>
|
||||
<target>Erreur : %@</target>
|
||||
<note>file error text
|
||||
snd error text</note>
|
||||
<note>alert message</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Error: URL is invalid" xml:space="preserve">
|
||||
<source>Error: URL is invalid</source>
|
||||
@@ -3110,6 +3187,11 @@ Il s'agit de votre propre lien unique !</target>
|
||||
<target>Erreur de fichier</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="File errors: %@" xml:space="preserve">
|
||||
<source>File errors:
|
||||
%@</source>
|
||||
<note>alert message</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="File not found - most likely file was deleted or cancelled." xml:space="preserve">
|
||||
<source>File not found - most likely file was deleted or cancelled.</source>
|
||||
<target>Fichier introuvable - le fichier a probablement été supprimé ou annulé.</target>
|
||||
@@ -3245,11 +3327,27 @@ Il s'agit de votre propre lien unique !</target>
|
||||
<target>Transférer</target>
|
||||
<note>chat item action</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Forward %d message(s)?" xml:space="preserve">
|
||||
<source>Forward %d message(s)?</source>
|
||||
<note>alert title</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Forward and save messages" xml:space="preserve">
|
||||
<source>Forward and save messages</source>
|
||||
<target>Transférer et sauvegarder des messages</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Forward messages" xml:space="preserve">
|
||||
<source>Forward messages</source>
|
||||
<note>alert action</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Forward messages without files?" xml:space="preserve">
|
||||
<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>
|
||||
@@ -3260,6 +3358,10 @@ Il s'agit de votre propre lien unique !</target>
|
||||
<target>Transféré depuis</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Forwarding %lld messages" xml:space="preserve">
|
||||
<source>Forwarding %lld messages</source>
|
||||
<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">
|
||||
<source>Forwarding server %@ failed to connect to destination server %@. Please try later.</source>
|
||||
<target>Le serveur de redirection %@ n'a pas réussi à se connecter au serveur de destination %@. Veuillez réessayer plus tard.</target>
|
||||
@@ -3309,11 +3411,6 @@ Erreur : %2$@</target>
|
||||
<target>Nom complet (optionnel)</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Full name:" xml:space="preserve">
|
||||
<source>Full name:</source>
|
||||
<target>Nom complet :</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Fully decentralized – visible only to members." xml:space="preserve">
|
||||
<source>Fully decentralized – visible only to members.</source>
|
||||
<target>Entièrement décentralisé – visible que par ses membres.</target>
|
||||
@@ -3559,6 +3656,10 @@ Erreur : %2$@</target>
|
||||
<target>Serveurs ICE (un par ligne)</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="IP address" xml:space="preserve">
|
||||
<source>IP address</source>
|
||||
<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">
|
||||
<source>If you can't meet in person, show QR code in a video call, or share the link.</source>
|
||||
<target>Si vous ne pouvez pas vous rencontrer en personne, montrez le code QR lors d'un appel vidéo ou partagez le lien.</target>
|
||||
@@ -3634,6 +3735,11 @@ 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>
|
||||
@@ -4258,6 +4364,10 @@ Voici votre lien pour le groupe %@ !</target>
|
||||
<target>Messages envoyés</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Messages were deleted after you selected them." xml:space="preserve">
|
||||
<source>Messages were deleted after you selected them.</source>
|
||||
<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">
|
||||
<source>Messages, files and calls are protected by **end-to-end encryption** with perfect forward secrecy, repudiation and break-in recovery.</source>
|
||||
<target>Les messages, fichiers et appels sont protégés par un chiffrement **de bout en bout** avec une confidentialité persistante, une répudiation et une récupération en cas d'effraction.</target>
|
||||
@@ -4413,6 +4523,14 @@ 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>
|
||||
@@ -4533,6 +4651,14 @@ 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>
|
||||
@@ -4553,6 +4679,10 @@ Voici votre lien pour le groupe %@ !</target>
|
||||
<target>Aucune sélection</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Nothing to forward!" xml:space="preserve">
|
||||
<source>Nothing to forward!</source>
|
||||
<note>alert title</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Notifications" xml:space="preserve">
|
||||
<source>Notifications</source>
|
||||
<target>Notifications</target>
|
||||
@@ -4585,7 +4715,7 @@ Voici votre lien pour le groupe %@ !</target>
|
||||
<trans-unit id="Ok" xml:space="preserve">
|
||||
<source>Ok</source>
|
||||
<target>Ok</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
<note>alert button</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Old database" xml:space="preserve">
|
||||
<source>Old database</source>
|
||||
@@ -4776,6 +4906,11 @@ Nécessite l'activation d'un VPN.</target>
|
||||
<target>Autres serveurs %@</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Other file errors: %@" xml:space="preserve">
|
||||
<source>Other file errors:
|
||||
%@</source>
|
||||
<note>alert message</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="PING count" xml:space="preserve">
|
||||
<source>PING count</source>
|
||||
<target>Nombre de PING</target>
|
||||
@@ -4811,6 +4946,10 @@ Nécessite l'activation d'un VPN.</target>
|
||||
<target>Code d'accès défini !</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Password" xml:space="preserve">
|
||||
<source>Password</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Password to show" xml:space="preserve">
|
||||
<source>Password to show</source>
|
||||
<target>Mot de passe à entrer</target>
|
||||
@@ -4960,6 +5099,10 @@ Erreur : %@</target>
|
||||
<target>Interface en polonais</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Port" xml:space="preserve">
|
||||
<source>Port</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</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>Il est possible que l'empreinte du certificat dans l'adresse du serveur soit incorrecte</target>
|
||||
@@ -5045,16 +5188,6 @@ Erreur : %@</target>
|
||||
<target>Images de profil</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Profile name" xml:space="preserve">
|
||||
<source>Profile name</source>
|
||||
<target>Nom du profil</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Profile name:" xml:space="preserve">
|
||||
<source>Profile name:</source>
|
||||
<target>Nom du profil :</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Profile password" xml:space="preserve">
|
||||
<source>Profile password</source>
|
||||
<target>Mot de passe de profil</target>
|
||||
@@ -5157,6 +5290,10 @@ Activez-le dans les paramètres *Réseau et serveurs*.</target>
|
||||
<target>Serveurs routés via des proxy</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Proxy requires password" xml:space="preserve">
|
||||
<source>Proxy requires password</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Push notifications" xml:space="preserve">
|
||||
<source>Push notifications</source>
|
||||
<target>Notifications push</target>
|
||||
@@ -5378,6 +5515,10 @@ Activez-le dans les paramètres *Réseau et serveurs*.</target>
|
||||
<target>Supprimer</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Remove archive?" xml:space="preserve">
|
||||
<source>Remove archive?</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Remove image" xml:space="preserve">
|
||||
<source>Remove image</source>
|
||||
<target>Enlever l'image</target>
|
||||
@@ -5558,6 +5699,10 @@ Activez-le dans les paramètres *Réseau et serveurs*.</target>
|
||||
<target>Serveur SMP</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="SOCKS proxy" xml:space="preserve">
|
||||
<source>SOCKS proxy</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Safely receive files" xml:space="preserve">
|
||||
<source>Safely receive files</source>
|
||||
<target>Réception de fichiers en toute sécurité</target>
|
||||
@@ -5571,12 +5716,13 @@ Activez-le dans les paramètres *Réseau et serveurs*.</target>
|
||||
<trans-unit id="Save" xml:space="preserve">
|
||||
<source>Save</source>
|
||||
<target>Enregistrer</target>
|
||||
<note>chat item action</note>
|
||||
<note>alert button
|
||||
chat item action</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Save (and notify contacts)" xml:space="preserve">
|
||||
<source>Save (and notify contacts)</source>
|
||||
<target>Enregistrer (et en informer les contacts)</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
<note>alert button</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Save and notify contact" xml:space="preserve">
|
||||
<source>Save and notify contact</source>
|
||||
@@ -5603,11 +5749,6 @@ Activez-le dans les paramètres *Réseau et serveurs*.</target>
|
||||
<target>Enregistrer l'archive</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Save auto-accept settings" xml:space="preserve">
|
||||
<source>Save auto-accept settings</source>
|
||||
<target>Enregistrer les paramètres de validation automatique</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Save group profile" xml:space="preserve">
|
||||
<source>Save group profile</source>
|
||||
<target>Enregistrer le profil du groupe</target>
|
||||
@@ -5643,16 +5784,15 @@ Activez-le dans les paramètres *Réseau et serveurs*.</target>
|
||||
<target>Enregistrer les serveurs ?</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Save settings?" xml:space="preserve">
|
||||
<source>Save settings?</source>
|
||||
<target>Enregistrer les paramètres ?</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Save welcome message?" xml:space="preserve">
|
||||
<source>Save welcome message?</source>
|
||||
<target>Enregistrer le message d'accueil ?</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Save your profile?" xml:space="preserve">
|
||||
<source>Save your profile?</source>
|
||||
<note>alert title</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Saved" xml:space="preserve">
|
||||
<source>Saved</source>
|
||||
<target>Enregistré</target>
|
||||
@@ -5673,6 +5813,10 @@ Activez-le dans les paramètres *Réseau et serveurs*.</target>
|
||||
<target>Message enregistré</target>
|
||||
<note>message info title</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Saving %lld messages" xml:space="preserve">
|
||||
<source>Saving %lld messages</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Scale" xml:space="preserve">
|
||||
<source>Scale</source>
|
||||
<target>Échelle</target>
|
||||
@@ -5875,7 +6019,7 @@ Activez-le dans les paramètres *Réseau et serveurs*.</target>
|
||||
<trans-unit id="Sender cancelled file transfer." xml:space="preserve">
|
||||
<source>Sender cancelled file transfer.</source>
|
||||
<target>L'expéditeur a annulé le transfert de fichiers.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
<note>alert message</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Sender may have deleted the connection request." xml:space="preserve">
|
||||
<source>Sender may have deleted the connection request.</source>
|
||||
@@ -5972,6 +6116,10 @@ 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>
|
||||
@@ -6092,6 +6240,10 @@ Activez-le dans les paramètres *Réseau et serveurs*.</target>
|
||||
<target>Paramètres</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Settings were changed." xml:space="preserve">
|
||||
<source>Settings were changed.</source>
|
||||
<note>alert message</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Shape profile images" xml:space="preserve">
|
||||
<source>Shape profile images</source>
|
||||
<target>Images de profil modelable</target>
|
||||
@@ -6266,6 +6418,10 @@ 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>
|
||||
@@ -6296,6 +6452,10 @@ Activez-le dans les paramètres *Réseau et serveurs*.</target>
|
||||
<target>Léger</target>
|
||||
<note>blur media</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Some app settings were not migrated." xml:space="preserve">
|
||||
<source>Some app settings were not migrated.</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Some file(s) were not exported:" xml:space="preserve">
|
||||
<source>Some file(s) were not exported:</source>
|
||||
<target>Certains fichiers n'ont pas été exportés :</target>
|
||||
@@ -6436,6 +6596,14 @@ 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>
|
||||
@@ -6667,6 +6835,10 @@ Cela peut se produire en raison d'un bug ou lorsque la connexion est compromise.
|
||||
<target>Le texte collé n'est pas un lien SimpleX.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</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>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Themes" xml:space="preserve">
|
||||
<source>Themes</source>
|
||||
<target>Thèmes</target>
|
||||
@@ -6794,6 +6966,14 @@ 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>
|
||||
@@ -6947,7 +7127,7 @@ Vous serez invité à confirmer l'authentification avant que cette fonction ne s
|
||||
<trans-unit id="Unknown servers!" xml:space="preserve">
|
||||
<source>Unknown servers!</source>
|
||||
<target>Serveurs inconnus !</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
<note>alert title</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Unless you use iOS call interface, enable Do Not Disturb mode to avoid interruptions." xml:space="preserve">
|
||||
<source>Unless you use iOS call interface, enable Do Not Disturb mode to avoid interruptions.</source>
|
||||
@@ -7061,6 +7241,10 @@ Pour vous connecter, veuillez demander à votre contact de créer un autre lien
|
||||
<target>Utiliser les hôtes .onions</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Use SOCKS proxy" xml:space="preserve">
|
||||
<source>Use SOCKS proxy</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Use SimpleX Chat servers?" xml:space="preserve">
|
||||
<source>Use SimpleX Chat servers?</source>
|
||||
<target>Utiliser les serveurs SimpleX Chat ?</target>
|
||||
@@ -7126,16 +7310,15 @@ 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>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Username" xml:space="preserve">
|
||||
<source>Username</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Using SimpleX Chat servers." xml:space="preserve">
|
||||
<source>Using SimpleX Chat servers.</source>
|
||||
<target>Vous utilisez les serveurs SimpleX.</target>
|
||||
@@ -7369,7 +7552,7 @@ Pour vous connecter, veuillez demander à votre contact de créer un autre lien
|
||||
<trans-unit id="Without Tor or VPN, your IP address will be visible to these XFTP relays: %@." xml:space="preserve">
|
||||
<source>Without Tor or VPN, your IP address will be visible to these XFTP relays: %@.</source>
|
||||
<target>Sans Tor ni VPN, votre adresse IP sera visible par ces relais XFTP : %@.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
<note>alert message</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Wrong database passphrase" xml:space="preserve">
|
||||
<source>Wrong database passphrase</source>
|
||||
@@ -7396,11 +7579,6 @@ Pour vous connecter, veuillez demander à votre contact de créer un autre lien
|
||||
<target>Serveur XFTP</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="You" xml:space="preserve">
|
||||
<source>You</source>
|
||||
<target>Vous</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="You **must not** use the same database on two devices." xml:space="preserve">
|
||||
<source>You **must not** use the same database on two devices.</source>
|
||||
<target>Vous **ne devez pas** utiliser la même base de données sur deux appareils.</target>
|
||||
@@ -7750,6 +7928,10 @@ Répéter la demande de connexion ?</target>
|
||||
<target>Votre base de données de chat n'est pas chiffrée - définisez une phrase secrète.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Your chat preferences" xml:space="preserve">
|
||||
<source>Your chat preferences</source>
|
||||
<note>alert title</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Your chat profiles" xml:space="preserve">
|
||||
<source>Your chat profiles</source>
|
||||
<target>Vos profils de chat</target>
|
||||
@@ -7774,6 +7956,10 @@ Répéter la demande de connexion ?</target>
|
||||
<target>Vos contacts resteront connectés.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Your credentials may be sent unencrypted." xml:space="preserve">
|
||||
<source>Your credentials may be sent unencrypted.</source>
|
||||
<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">
|
||||
<source>Your current chat database will be DELETED and REPLACED with the imported one.</source>
|
||||
<target>Votre base de données de chat actuelle va être SUPPRIMEE et REMPLACEE par celle importée.</target>
|
||||
@@ -7804,13 +7990,15 @@ Répéter la demande de connexion ?</target>
|
||||
<target>Votre profil **%@** sera partagé.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Your profile is stored on your device and shared only with your contacts. SimpleX servers cannot see your profile." xml:space="preserve">
|
||||
<source>Your profile is stored on your device and shared only with your contacts.
|
||||
SimpleX servers cannot see your profile.</source>
|
||||
<target>Votre profil est stocké sur votre appareil et est seulement partagé avec vos contacts.
|
||||
Les serveurs SimpleX ne peuvent pas voir votre profil.</target>
|
||||
<trans-unit id="Your profile is stored on your device and shared only with your contacts. SimpleX servers cannot see your profile." xml:space="preserve">
|
||||
<source>Your profile is stored on your device and shared only with your contacts. SimpleX servers cannot see your profile.</source>
|
||||
<target>Votre profil est stocké sur votre appareil et est seulement partagé avec vos contacts. Les serveurs SimpleX ne peuvent pas voir votre profil.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</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>
|
||||
<note>alert message</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Your profile, contacts and delivered messages are stored on your device." xml:space="preserve">
|
||||
<source>Your profile, contacts and delivered messages are stored on your device.</source>
|
||||
<target>Votre profil, vos contacts et les messages reçus sont stockés sur votre appareil.</target>
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -139,6 +139,7 @@
|
||||
</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">
|
||||
@@ -161,11 +162,36 @@
|
||||
<target>%d giorni</target>
|
||||
<note>time interval</note>
|
||||
</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 file è/sono ancora in scaricamento.</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 file ha/hanno fallito lo scaricamento.</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 file è/sono stato/i eliminato/i.</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 file non è/sono stato/i scaricato/i.</target>
|
||||
<note>forward confirmation reason</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="%d hours" xml:space="preserve">
|
||||
<source>%d hours</source>
|
||||
<target>%d ore</target>
|
||||
<note>time interval</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="%d messages not forwarded" xml:space="preserve">
|
||||
<source>%d messages not forwarded</source>
|
||||
<target>%d messaggi non inoltrati</target>
|
||||
<note>alert title</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="%d min" xml:space="preserve">
|
||||
<source>%d min</source>
|
||||
<target>%d min</target>
|
||||
@@ -727,7 +753,7 @@
|
||||
<trans-unit id="All profiles" xml:space="preserve">
|
||||
<source>All profiles</source>
|
||||
<target>Tutti gli profili</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
<note>profile dropdown</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="All your contacts will remain connected." xml:space="preserve">
|
||||
<source>All your contacts will remain connected.</source>
|
||||
@@ -919,6 +945,11 @@
|
||||
<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>
|
||||
@@ -1024,6 +1055,11 @@
|
||||
<target>Auto-accetta immagini</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Auto-accept settings" xml:space="preserve">
|
||||
<source>Auto-accept settings</source>
|
||||
<target>Accetta automaticamente le impostazioni</target>
|
||||
<note>alert title</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Back" xml:space="preserve">
|
||||
<source>Back</source>
|
||||
<target>Indietro</target>
|
||||
@@ -1049,11 +1085,21 @@
|
||||
<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>
|
||||
<target>Chiamate migliorate</target>
|
||||
<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>
|
||||
<target>Date dei messaggi migliorate.</target>
|
||||
<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>
|
||||
@@ -1064,6 +1110,21 @@
|
||||
<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>
|
||||
<target>Notifiche migliorate</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Better security ✅" xml:space="preserve">
|
||||
<source>Better security ✅</source>
|
||||
<target>Sicurezza migliorata ✅</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>Esperienza utente migliorata</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Black" xml:space="preserve">
|
||||
<source>Black</source>
|
||||
<target>Nero</target>
|
||||
@@ -1197,7 +1258,7 @@
|
||||
<trans-unit id="Cancel" xml:space="preserve">
|
||||
<source>Cancel</source>
|
||||
<target>Annulla</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
<note>alert button</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Cancel migration" xml:space="preserve">
|
||||
<source>Cancel migration</source>
|
||||
@@ -1217,7 +1278,7 @@
|
||||
<trans-unit id="Cannot receive file" xml:space="preserve">
|
||||
<source>Cannot receive file</source>
|
||||
<target>Impossibile ricevere il file</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
<note>alert title</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Capacity exceeded - recipient did not receive previously sent messages." xml:space="preserve">
|
||||
<source>Capacity exceeded - recipient did not receive previously sent messages.</source>
|
||||
@@ -1345,6 +1406,16 @@
|
||||
<target>Preferenze della chat</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Chat preferences were changed." xml:space="preserve">
|
||||
<source>Chat preferences were changed.</source>
|
||||
<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>
|
||||
@@ -1746,6 +1817,7 @@ Questo è il tuo link una tantum!</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="Corner" xml:space="preserve">
|
||||
<source>Corner</source>
|
||||
<target>Angolo</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Correct name to %@?" xml:space="preserve">
|
||||
@@ -1873,6 +1945,11 @@ 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>
|
||||
<target>Forma dei messaggi personalizzabile.</target>
|
||||
<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>
|
||||
@@ -2167,6 +2244,11 @@ 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>
|
||||
<target>Elimina o modera fino a 200 messaggi.</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>Eliminare la connessione in attesa?</target>
|
||||
@@ -2417,6 +2499,11 @@ Questo è il tuo link una tantum!</target>
|
||||
<target>Non inviare la cronologia ai nuovi membri.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Do not use credentials with proxy." xml:space="preserve">
|
||||
<source>Do not use credentials with proxy.</source>
|
||||
<target>Non usare credenziali con proxy.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Don't create address" xml:space="preserve">
|
||||
<source>Don't create address</source>
|
||||
<target>Non creare un indirizzo</target>
|
||||
@@ -2440,7 +2527,8 @@ Questo è il tuo link una tantum!</target>
|
||||
<trans-unit id="Download" xml:space="preserve">
|
||||
<source>Download</source>
|
||||
<target>Scarica</target>
|
||||
<note>chat item action</note>
|
||||
<note>alert button
|
||||
chat item action</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Download errors" xml:space="preserve">
|
||||
<source>Download errors</source>
|
||||
@@ -2457,6 +2545,11 @@ Questo è il tuo link una tantum!</target>
|
||||
<target>Scarica file</target>
|
||||
<note>server test step</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Download files" xml:space="preserve">
|
||||
<source>Download files</source>
|
||||
<target>Scarica i file</target>
|
||||
<note>alert action</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Downloaded" xml:space="preserve">
|
||||
<source>Downloaded</source>
|
||||
<target>Scaricato</target>
|
||||
@@ -2734,6 +2827,7 @@ Questo è il tuo link una tantum!</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="Error changing connection profile" xml:space="preserve">
|
||||
<source>Error changing connection profile</source>
|
||||
<target>Errore nel cambio di profilo di connessione</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Error changing role" xml:space="preserve">
|
||||
@@ -2748,6 +2842,7 @@ Questo è il tuo link una tantum!</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="Error changing to incognito!" xml:space="preserve">
|
||||
<source>Error changing to incognito!</source>
|
||||
<target>Errore nel passaggio a 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">
|
||||
@@ -2870,6 +2965,11 @@ Questo è il tuo link una tantum!</target>
|
||||
<target>Errore nel caricamento dei server %@</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Error migrating settings" xml:space="preserve">
|
||||
<source>Error migrating settings</source>
|
||||
<target>Errore nella migrazione delle impostazioni</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Error opening chat" xml:space="preserve">
|
||||
<source>Error opening chat</source>
|
||||
<target>Errore di apertura della chat</target>
|
||||
@@ -2878,7 +2978,7 @@ Questo è il tuo link una tantum!</target>
|
||||
<trans-unit id="Error receiving file" xml:space="preserve">
|
||||
<source>Error receiving file</source>
|
||||
<target>Errore nella ricezione del file</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
<note>alert title</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Error reconnecting server" xml:space="preserve">
|
||||
<source>Error reconnecting server</source>
|
||||
@@ -2972,12 +3072,13 @@ Questo è il tuo link una tantum!</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="Error switching profile" xml:space="preserve">
|
||||
<source>Error switching profile</source>
|
||||
<target>Errore nel cambio di profilo</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Error switching profile!" xml:space="preserve">
|
||||
<source>Error switching profile!</source>
|
||||
<target>Errore nel cambio di profilo!</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
<note>alertTitle</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Error synchronizing connection" xml:space="preserve">
|
||||
<source>Error synchronizing connection</source>
|
||||
@@ -3022,8 +3123,7 @@ Questo è il tuo link una tantum!</target>
|
||||
<trans-unit id="Error: %@" xml:space="preserve">
|
||||
<source>Error: %@</source>
|
||||
<target>Errore: %@</target>
|
||||
<note>file error text
|
||||
snd error text</note>
|
||||
<note>alert message</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Error: URL is invalid" xml:space="preserve">
|
||||
<source>Error: URL is invalid</source>
|
||||
@@ -3110,6 +3210,13 @@ Questo è il tuo link una tantum!</target>
|
||||
<target>Errore del file</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="File errors: %@" xml:space="preserve">
|
||||
<source>File errors:
|
||||
%@</source>
|
||||
<target>Errori di file:
|
||||
%@</target>
|
||||
<note>alert message</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="File not found - most likely file was deleted or cancelled." xml:space="preserve">
|
||||
<source>File not found - most likely file was deleted or cancelled.</source>
|
||||
<target>File non trovato - probabilmente è stato eliminato o annullato.</target>
|
||||
@@ -3245,11 +3352,31 @@ Questo è il tuo link una tantum!</target>
|
||||
<target>Inoltra</target>
|
||||
<note>chat item action</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Forward %d message(s)?" xml:space="preserve">
|
||||
<source>Forward %d message(s)?</source>
|
||||
<target>Inoltrare %d messaggio/i?</target>
|
||||
<note>alert title</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Forward and save messages" xml:space="preserve">
|
||||
<source>Forward and save messages</source>
|
||||
<target>Inoltra e salva i messaggi</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Forward messages" xml:space="preserve">
|
||||
<source>Forward messages</source>
|
||||
<target>Inoltra i messaggi</target>
|
||||
<note>alert action</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Forward messages without files?" xml:space="preserve">
|
||||
<source>Forward messages without files?</source>
|
||||
<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>
|
||||
<target>Inoltra fino a 20 messaggi alla volta.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Forwarded" xml:space="preserve">
|
||||
<source>Forwarded</source>
|
||||
<target>Inoltrato</target>
|
||||
@@ -3260,6 +3387,11 @@ Questo è il tuo link una tantum!</target>
|
||||
<target>Inoltrato da</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Forwarding %lld messages" xml:space="preserve">
|
||||
<source>Forwarding %lld messages</source>
|
||||
<target>Inoltro di %lld messaggi</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">
|
||||
<source>Forwarding server %@ failed to connect to destination server %@. Please try later.</source>
|
||||
<target>Il server di inoltro %@ non è riuscito a connettersi al server di destinazione %@. Riprova più tardi.</target>
|
||||
@@ -3309,11 +3441,6 @@ Errore: %2$@</target>
|
||||
<target>Nome completo (facoltativo)</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Full name:" xml:space="preserve">
|
||||
<source>Full name:</source>
|
||||
<target>Nome completo:</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Fully decentralized – visible only to members." xml:space="preserve">
|
||||
<source>Fully decentralized – visible only to members.</source>
|
||||
<target>Completamente decentralizzato: visibile solo ai membri.</target>
|
||||
@@ -3559,6 +3686,11 @@ Errore: %2$@</target>
|
||||
<target>Server ICE (uno per riga)</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="IP address" xml:space="preserve">
|
||||
<source>IP address</source>
|
||||
<target>Indirizzo 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">
|
||||
<source>If you can't meet in person, show QR code in a video call, or share the link.</source>
|
||||
<target>Se non potete incontrarvi di persona, mostra il codice QR in una videochiamata o condividi il link.</target>
|
||||
@@ -3634,6 +3766,13 @@ 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>
|
||||
<target>Consegna migliorata, utilizzo di traffico ridotto.
|
||||
Altri miglioramenti sono in arrivo!</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>Consegna dei messaggi migliorata</target>
|
||||
@@ -4206,6 +4345,7 @@ Questo è il tuo link per il gruppo %@!</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="Message shape" xml:space="preserve">
|
||||
<source>Message shape</source>
|
||||
<target>Forma del messaggio</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Message source remains private." xml:space="preserve">
|
||||
@@ -4258,6 +4398,11 @@ Questo è il tuo link per il gruppo %@!</target>
|
||||
<target>Messaggi inviati</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</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>I messaggi sono stati eliminati dopo che li hai selezionati.</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">
|
||||
<source>Messages, files and calls are protected by **end-to-end encryption** with perfect forward secrecy, repudiation and break-in recovery.</source>
|
||||
<target>I messaggi, i file e le chiamate sono protetti da **crittografia end-to-end** con perfect forward secrecy, ripudio e recupero da intrusione.</target>
|
||||
@@ -4413,6 +4558,16 @@ 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>
|
||||
@@ -4533,6 +4688,16 @@ 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>
|
||||
@@ -4553,6 +4718,11 @@ Questo è il tuo link per il gruppo %@!</target>
|
||||
<target>Nessuna selezione</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Nothing to forward!" xml:space="preserve">
|
||||
<source>Nothing to forward!</source>
|
||||
<target>Niente da inoltrare!</target>
|
||||
<note>alert title</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Notifications" xml:space="preserve">
|
||||
<source>Notifications</source>
|
||||
<target>Notifiche</target>
|
||||
@@ -4585,7 +4755,7 @@ Questo è il tuo link per il gruppo %@!</target>
|
||||
<trans-unit id="Ok" xml:space="preserve">
|
||||
<source>Ok</source>
|
||||
<target>Ok</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
<note>alert button</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Old database" xml:space="preserve">
|
||||
<source>Old database</source>
|
||||
@@ -4776,6 +4946,13 @@ Richiede l'attivazione della VPN.</target>
|
||||
<target>Altri %@ server</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Other file errors: %@" xml:space="preserve">
|
||||
<source>Other file errors:
|
||||
%@</source>
|
||||
<target>Altri errori di file:
|
||||
%@</target>
|
||||
<note>alert message</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="PING count" xml:space="preserve">
|
||||
<source>PING count</source>
|
||||
<target>Conteggio PING</target>
|
||||
@@ -4811,6 +4988,11 @@ Richiede l'attivazione della VPN.</target>
|
||||
<target>Codice di accesso impostato!</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Password" xml:space="preserve">
|
||||
<source>Password</source>
|
||||
<target>Password</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Password to show" xml:space="preserve">
|
||||
<source>Password to show</source>
|
||||
<target>Password per mostrare</target>
|
||||
@@ -4960,6 +5142,11 @@ Errore: %@</target>
|
||||
<target>Interfaccia polacca</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Port" xml:space="preserve">
|
||||
<source>Port</source>
|
||||
<target>Porta</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</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>Probabilmente l'impronta del certificato nell'indirizzo del server è sbagliata</target>
|
||||
@@ -5045,16 +5232,6 @@ Errore: %@</target>
|
||||
<target>Immagini del profilo</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Profile name" xml:space="preserve">
|
||||
<source>Profile name</source>
|
||||
<target>Nome del profilo</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Profile name:" xml:space="preserve">
|
||||
<source>Profile name:</source>
|
||||
<target>Nome del profilo:</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Profile password" xml:space="preserve">
|
||||
<source>Profile password</source>
|
||||
<target>Password del profilo</target>
|
||||
@@ -5157,6 +5334,11 @@ Attivalo nelle impostazioni *Rete e server*.</target>
|
||||
<target>Server via proxy</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Proxy requires password" xml:space="preserve">
|
||||
<source>Proxy requires password</source>
|
||||
<target>Il proxy richiede una password</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Push notifications" xml:space="preserve">
|
||||
<source>Push notifications</source>
|
||||
<target>Notifiche push</target>
|
||||
@@ -5378,6 +5560,11 @@ Attivalo nelle impostazioni *Rete e server*.</target>
|
||||
<target>Rimuovi</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Remove archive?" xml:space="preserve">
|
||||
<source>Remove archive?</source>
|
||||
<target>Rimuovere l'archivio?</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Remove image" xml:space="preserve">
|
||||
<source>Remove image</source>
|
||||
<target>Rimuovi immagine</target>
|
||||
@@ -5558,6 +5745,11 @@ Attivalo nelle impostazioni *Rete e server*.</target>
|
||||
<target>Server SMP</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</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">
|
||||
<source>Safely receive files</source>
|
||||
<target>Ricevi i file in sicurezza</target>
|
||||
@@ -5571,12 +5763,13 @@ Attivalo nelle impostazioni *Rete e server*.</target>
|
||||
<trans-unit id="Save" xml:space="preserve">
|
||||
<source>Save</source>
|
||||
<target>Salva</target>
|
||||
<note>chat item action</note>
|
||||
<note>alert button
|
||||
chat item action</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Save (and notify contacts)" xml:space="preserve">
|
||||
<source>Save (and notify contacts)</source>
|
||||
<target>Salva (e avvisa i contatti)</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
<note>alert button</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Save and notify contact" xml:space="preserve">
|
||||
<source>Save and notify contact</source>
|
||||
@@ -5603,11 +5796,6 @@ Attivalo nelle impostazioni *Rete e server*.</target>
|
||||
<target>Salva archivio</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Save auto-accept settings" xml:space="preserve">
|
||||
<source>Save auto-accept settings</source>
|
||||
<target>Salva le impostazioni di accettazione automatica</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Save group profile" xml:space="preserve">
|
||||
<source>Save group profile</source>
|
||||
<target>Salva il profilo del gruppo</target>
|
||||
@@ -5643,16 +5831,16 @@ Attivalo nelle impostazioni *Rete e server*.</target>
|
||||
<target>Salvare i server?</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Save settings?" xml:space="preserve">
|
||||
<source>Save settings?</source>
|
||||
<target>Salvare le impostazioni?</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Save welcome message?" xml:space="preserve">
|
||||
<source>Save welcome message?</source>
|
||||
<target>Salvare il messaggio di benvenuto?</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Save your profile?" xml:space="preserve">
|
||||
<source>Save your profile?</source>
|
||||
<target>Salvare il profilo?</target>
|
||||
<note>alert title</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Saved" xml:space="preserve">
|
||||
<source>Saved</source>
|
||||
<target>Salvato</target>
|
||||
@@ -5673,6 +5861,11 @@ Attivalo nelle impostazioni *Rete e server*.</target>
|
||||
<target>Messaggio salvato</target>
|
||||
<note>message info title</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Saving %lld messages" xml:space="preserve">
|
||||
<source>Saving %lld messages</source>
|
||||
<target>Salvataggio di %lld messaggi</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Scale" xml:space="preserve">
|
||||
<source>Scale</source>
|
||||
<target>Scala</target>
|
||||
@@ -5755,6 +5948,7 @@ Attivalo nelle impostazioni *Rete e server*.</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="Select chat profile" xml:space="preserve">
|
||||
<source>Select chat profile</source>
|
||||
<target>Seleziona il profilo di chat</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Selected %lld" xml:space="preserve">
|
||||
@@ -5875,7 +6069,7 @@ Attivalo nelle impostazioni *Rete e server*.</target>
|
||||
<trans-unit id="Sender cancelled file transfer." xml:space="preserve">
|
||||
<source>Sender cancelled file transfer.</source>
|
||||
<target>Il mittente ha annullato il trasferimento del file.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
<note>alert message</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Sender may have deleted the connection request." xml:space="preserve">
|
||||
<source>Sender may have deleted the connection request.</source>
|
||||
@@ -5972,6 +6166,11 @@ 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>
|
||||
@@ -6092,6 +6291,11 @@ Attivalo nelle impostazioni *Rete e server*.</target>
|
||||
<target>Impostazioni</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Settings were changed." xml:space="preserve">
|
||||
<source>Settings were changed.</source>
|
||||
<target>Le impostazioni sono state cambiate.</target>
|
||||
<note>alert message</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Shape profile images" xml:space="preserve">
|
||||
<source>Shape profile images</source>
|
||||
<target>Forma delle immagini del profilo</target>
|
||||
@@ -6129,6 +6333,7 @@ Attivalo nelle impostazioni *Rete e server*.</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="Share profile" xml:space="preserve">
|
||||
<source>Share profile</source>
|
||||
<target>Condividi il profilo</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Share this 1-time invite link" xml:space="preserve">
|
||||
@@ -6266,6 +6471,11 @@ 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>
|
||||
<target>Protocolli di SimpleX esaminati da 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>Modalità incognito semplificata</target>
|
||||
@@ -6296,6 +6506,11 @@ Attivalo nelle impostazioni *Rete e server*.</target>
|
||||
<target>Leggera</target>
|
||||
<note>blur media</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Some app settings were not migrated." xml:space="preserve">
|
||||
<source>Some app settings were not migrated.</source>
|
||||
<target>Alcune impostazioni dell'app non sono state migrate.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Some file(s) were not exported:" xml:space="preserve">
|
||||
<source>Some file(s) were not exported:</source>
|
||||
<target>Alcuni file non sono stati esportati:</target>
|
||||
@@ -6436,6 +6651,16 @@ 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>
|
||||
<target>Cambia tra audio e video durante la chiamata.</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>Cambia profilo di chat per inviti una tantum.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="System" xml:space="preserve">
|
||||
<source>System</source>
|
||||
<target>Sistema</target>
|
||||
@@ -6473,6 +6698,7 @@ Attivalo nelle impostazioni *Rete e server*.</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="Tail" xml:space="preserve">
|
||||
<source>Tail</source>
|
||||
<target>Coda</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Take picture" xml:space="preserve">
|
||||
@@ -6667,6 +6893,11 @@ Può accadere a causa di qualche bug o quando la connessione è compromessa.</ta
|
||||
<target>Il testo che hai incollato non è un link SimpleX.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</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>L'archivio del database caricato verrà rimosso definitivamente dai server.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Themes" xml:space="preserve">
|
||||
<source>Themes</source>
|
||||
<target>Temi</target>
|
||||
@@ -6794,6 +7025,16 @@ 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>
|
||||
@@ -6947,7 +7188,7 @@ Ti verrà chiesto di completare l'autenticazione prima di attivare questa funzio
|
||||
<trans-unit id="Unknown servers!" xml:space="preserve">
|
||||
<source>Unknown servers!</source>
|
||||
<target>Server sconosciuti!</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
<note>alert title</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Unless you use iOS call interface, enable Do Not Disturb mode to avoid interruptions." xml:space="preserve">
|
||||
<source>Unless you use iOS call interface, enable Do Not Disturb mode to avoid interruptions.</source>
|
||||
@@ -7061,6 +7302,11 @@ Per connetterti, chiedi al tuo contatto di creare un altro link di connessione e
|
||||
<target>Usa gli host .onion</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Use SOCKS proxy" xml:space="preserve">
|
||||
<source>Use SOCKS proxy</source>
|
||||
<target>Usa proxy SOCKS</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Use SimpleX Chat servers?" xml:space="preserve">
|
||||
<source>Use SimpleX Chat servers?</source>
|
||||
<target>Usare i server di SimpleX Chat?</target>
|
||||
@@ -7126,16 +7372,16 @@ 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>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Username" xml:space="preserve">
|
||||
<source>Username</source>
|
||||
<target>Nome utente</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Using SimpleX Chat servers." xml:space="preserve">
|
||||
<source>Using SimpleX Chat servers.</source>
|
||||
<target>Utilizzo dei server SimpleX Chat.</target>
|
||||
@@ -7369,7 +7615,7 @@ Per connetterti, chiedi al tuo contatto di creare un altro link di connessione e
|
||||
<trans-unit id="Without Tor or VPN, your IP address will be visible to these XFTP relays: %@." xml:space="preserve">
|
||||
<source>Without Tor or VPN, your IP address will be visible to these XFTP relays: %@.</source>
|
||||
<target>Senza Tor o VPN, il tuo indirizzo IP sarà visibile a questi relay XFTP: %@.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
<note>alert message</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Wrong database passphrase" xml:space="preserve">
|
||||
<source>Wrong database passphrase</source>
|
||||
@@ -7396,11 +7642,6 @@ Per connetterti, chiedi al tuo contatto di creare un altro link di connessione e
|
||||
<target>Server XFTP</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="You" xml:space="preserve">
|
||||
<source>You</source>
|
||||
<target>Tu</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="You **must not** use the same database on two devices." xml:space="preserve">
|
||||
<source>You **must not** use the same database on two devices.</source>
|
||||
<target>**Non devi** usare lo stesso database su due dispositivi.</target>
|
||||
@@ -7750,6 +7991,11 @@ Ripetere la richiesta di connessione?</target>
|
||||
<target>Il tuo database della chat non è crittografato: imposta la password per crittografarlo.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Your chat preferences" xml:space="preserve">
|
||||
<source>Your chat preferences</source>
|
||||
<target>Le tue preferenze della chat</target>
|
||||
<note>alert title</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Your chat profiles" xml:space="preserve">
|
||||
<source>Your chat profiles</source>
|
||||
<target>I tuoi profili di chat</target>
|
||||
@@ -7757,6 +8003,7 @@ Ripetere la richiesta di connessione?</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>La tua connessione è stata spostata a %@, ma si è verificato un errore imprevisto durante il reindirizzamento al profilo.</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">
|
||||
@@ -7774,6 +8021,11 @@ Ripetere la richiesta di connessione?</target>
|
||||
<target>I tuoi contatti resteranno connessi.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Your credentials may be sent unencrypted." xml:space="preserve">
|
||||
<source>Your credentials may be sent unencrypted.</source>
|
||||
<target>Le credenziali potrebbero essere inviate in chiaro.</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">
|
||||
<source>Your current chat database will be DELETED and REPLACED with the imported one.</source>
|
||||
<target>Il tuo attuale database della chat verrà ELIMINATO e SOSTITUITO con quello importato.</target>
|
||||
@@ -7804,13 +8056,16 @@ Ripetere la richiesta di connessione?</target>
|
||||
<target>Verrà condiviso il tuo profilo **%@**.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Your profile is stored on your device and shared only with your contacts. SimpleX servers cannot see your profile." xml:space="preserve">
|
||||
<source>Your profile is stored on your device and shared only with your contacts.
|
||||
SimpleX servers cannot see your profile.</source>
|
||||
<target>Il tuo profilo è memorizzato sul tuo dispositivo e condiviso solo con i tuoi contatti.
|
||||
I server di SimpleX non possono vedere il tuo profilo.</target>
|
||||
<trans-unit id="Your profile is stored on your device and shared only with your contacts. SimpleX servers cannot see your profile." xml:space="preserve">
|
||||
<source>Your profile is stored on your device and shared only with your contacts. SimpleX servers cannot see your profile.</source>
|
||||
<target>Il tuo profilo è memorizzato sul tuo dispositivo e condiviso solo con i tuoi contatti. I server di SimpleX non possono vedere il tuo profilo.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</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>Il tuo profilo è stato cambiato. Se lo salvi, il profilo aggiornato verrà inviato a tutti i tuoi contatti.</target>
|
||||
<note>alert message</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Your profile, contacts and delivered messages are stored on your device." xml:space="preserve">
|
||||
<source>Your profile, contacts and delivered messages are stored on your device.</source>
|
||||
<target>Il tuo profilo, i contatti e i messaggi recapitati sono memorizzati sul tuo dispositivo.</target>
|
||||
@@ -7988,7 +8243,7 @@ I server di SimpleX non possono vedere il tuo profilo.</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="changed your role to %@" xml:space="preserve">
|
||||
<source>changed your role to %@</source>
|
||||
<target>cambiato il tuo ruolo in %@</target>
|
||||
<target>ha cambiato il tuo ruolo in %@</target>
|
||||
<note>rcv group event chat item</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="changing address for %@…" xml:space="preserve">
|
||||
|
||||
@@ -161,11 +161,31 @@
|
||||
<target>%d 日</target>
|
||||
<note>time interval</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="%d file(s) are still being downloaded." xml:space="preserve">
|
||||
<source>%d file(s) are still being downloaded.</source>
|
||||
<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>
|
||||
<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>
|
||||
<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>
|
||||
<note>forward confirmation reason</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="%d hours" xml:space="preserve">
|
||||
<source>%d hours</source>
|
||||
<target>%d 時</target>
|
||||
<note>time interval</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="%d messages not forwarded" xml:space="preserve">
|
||||
<source>%d messages not forwarded</source>
|
||||
<note>alert title</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="%d min" xml:space="preserve">
|
||||
<source>%d min</source>
|
||||
<target>%d 分</target>
|
||||
@@ -707,7 +727,7 @@
|
||||
</trans-unit>
|
||||
<trans-unit id="All profiles" xml:space="preserve">
|
||||
<source>All profiles</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
<note>profile dropdown</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="All your contacts will remain connected." xml:space="preserve">
|
||||
<source>All your contacts will remain connected.</source>
|
||||
@@ -895,6 +915,10 @@
|
||||
<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>
|
||||
@@ -994,6 +1018,10 @@
|
||||
<target>画像を自動的に受信</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Auto-accept settings" xml:space="preserve">
|
||||
<source>Auto-accept settings</source>
|
||||
<note>alert title</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Back" xml:space="preserve">
|
||||
<source>Back</source>
|
||||
<target>戻る</target>
|
||||
@@ -1017,10 +1045,18 @@
|
||||
<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>
|
||||
@@ -1030,6 +1066,18 @@
|
||||
<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>
|
||||
@@ -1148,7 +1196,7 @@
|
||||
<trans-unit id="Cancel" xml:space="preserve">
|
||||
<source>Cancel</source>
|
||||
<target>中止</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
<note>alert button</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Cancel migration" xml:space="preserve">
|
||||
<source>Cancel migration</source>
|
||||
@@ -1166,7 +1214,7 @@
|
||||
<trans-unit id="Cannot receive file" xml:space="preserve">
|
||||
<source>Cannot receive file</source>
|
||||
<target>ファイル受信ができません</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
<note>alert title</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Capacity exceeded - recipient did not receive previously sent messages." xml:space="preserve">
|
||||
<source>Capacity exceeded - recipient did not receive previously sent messages.</source>
|
||||
@@ -1287,6 +1335,15 @@
|
||||
<target>チャット設定</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Chat preferences were changed." xml:space="preserve">
|
||||
<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>
|
||||
@@ -1763,6 +1820,10 @@ 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>
|
||||
@@ -2049,6 +2110,10 @@ 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>
|
||||
@@ -2280,6 +2345,10 @@ This is your own one-time link!</source>
|
||||
<source>Do not send history to new members.</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Do not use credentials with proxy." xml:space="preserve">
|
||||
<source>Do not use credentials with proxy.</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Don't create address" xml:space="preserve">
|
||||
<source>Don't create address</source>
|
||||
<target>アドレスを作成しないでください</target>
|
||||
@@ -2302,7 +2371,8 @@ This is your own one-time link!</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="Download" xml:space="preserve">
|
||||
<source>Download</source>
|
||||
<note>chat item action</note>
|
||||
<note>alert button
|
||||
chat item action</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Download errors" xml:space="preserve">
|
||||
<source>Download errors</source>
|
||||
@@ -2317,6 +2387,10 @@ This is your own one-time link!</source>
|
||||
<target>ファイルをダウンロード</target>
|
||||
<note>server test step</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Download files" xml:space="preserve">
|
||||
<source>Download files</source>
|
||||
<note>alert action</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Downloaded" xml:space="preserve">
|
||||
<source>Downloaded</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
@@ -2710,6 +2784,10 @@ This is your own one-time link!</source>
|
||||
<target>%@ サーバーのロード中にエラーが発生</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Error migrating settings" xml:space="preserve">
|
||||
<source>Error migrating settings</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Error opening chat" xml:space="preserve">
|
||||
<source>Error opening chat</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
@@ -2717,7 +2795,7 @@ This is your own one-time link!</source>
|
||||
<trans-unit id="Error receiving file" xml:space="preserve">
|
||||
<source>Error receiving file</source>
|
||||
<target>ファイル受信にエラー発生</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
<note>alert title</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Error reconnecting server" xml:space="preserve">
|
||||
<source>Error reconnecting server</source>
|
||||
@@ -2810,7 +2888,7 @@ This is your own one-time link!</source>
|
||||
<trans-unit id="Error switching profile!" xml:space="preserve">
|
||||
<source>Error switching profile!</source>
|
||||
<target>プロフィール切り替えにエラー発生!</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
<note>alertTitle</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Error synchronizing connection" xml:space="preserve">
|
||||
<source>Error synchronizing connection</source>
|
||||
@@ -2853,8 +2931,7 @@ This is your own one-time link!</source>
|
||||
<trans-unit id="Error: %@" xml:space="preserve">
|
||||
<source>Error: %@</source>
|
||||
<target>エラー : %@</target>
|
||||
<note>file error text
|
||||
snd error text</note>
|
||||
<note>alert message</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Error: URL is invalid" xml:space="preserve">
|
||||
<source>Error: URL is invalid</source>
|
||||
@@ -2935,6 +3012,11 @@ This is your own one-time link!</source>
|
||||
<source>File error</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="File errors: %@" xml:space="preserve">
|
||||
<source>File errors:
|
||||
%@</source>
|
||||
<note>alert message</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="File not found - most likely file was deleted or cancelled." xml:space="preserve">
|
||||
<source>File not found - most likely file was deleted or cancelled.</source>
|
||||
<note>file error text</note>
|
||||
@@ -3061,10 +3143,26 @@ This is your own one-time link!</source>
|
||||
<source>Forward</source>
|
||||
<note>chat item action</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Forward %d message(s)?" xml:space="preserve">
|
||||
<source>Forward %d message(s)?</source>
|
||||
<note>alert title</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Forward and save messages" xml:space="preserve">
|
||||
<source>Forward and save messages</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Forward messages" xml:space="preserve">
|
||||
<source>Forward messages</source>
|
||||
<note>alert action</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Forward messages without files?" xml:space="preserve">
|
||||
<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>
|
||||
@@ -3073,6 +3171,10 @@ This is your own one-time link!</source>
|
||||
<source>Forwarded from</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Forwarding %lld messages" xml:space="preserve">
|
||||
<source>Forwarding %lld messages</source>
|
||||
<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">
|
||||
<source>Forwarding server %@ failed to connect to destination server %@. Please try later.</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
@@ -3114,11 +3216,6 @@ Error: %2$@</source>
|
||||
<target>フルネーム (任意):</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Full name:" xml:space="preserve">
|
||||
<source>Full name:</source>
|
||||
<target>フルネーム:</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Fully decentralized – visible only to members." xml:space="preserve">
|
||||
<source>Fully decentralized – visible only to members.</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
@@ -3356,6 +3453,10 @@ Error: %2$@</source>
|
||||
<target>ICEサーバ (1行に1サーバ)</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="IP address" xml:space="preserve">
|
||||
<source>IP address</source>
|
||||
<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">
|
||||
<source>If you can't meet in person, show QR code in a video call, or share the link.</source>
|
||||
<target>直接会えない場合は、ビデオ通話で QR コードを表示するか、リンクを共有してください。</target>
|
||||
@@ -3428,6 +3529,11 @@ 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>
|
||||
@@ -4009,12 +4115,18 @@ This is your link for group %@!</source>
|
||||
<source>Messages sent</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Messages were deleted after you selected them." xml:space="preserve">
|
||||
<source>Messages were deleted after you selected them.</source>
|
||||
<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">
|
||||
<source>Messages, files and calls are protected by **end-to-end encryption** with perfect forward secrecy, repudiation and break-in recovery.</source>
|
||||
<target>メッセージ、ファイル、通話は、前方秘匿性、否認可能性および侵入復元性を備えた**エンドツーエンドの暗号化**によって保護されます。</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Messages, files and calls are protected by **quantum resistant e2e encryption** with perfect forward secrecy, repudiation and break-in recovery." xml:space="preserve">
|
||||
<source>Messages, files and calls are protected by **quantum resistant e2e encryption** with perfect forward secrecy, repudiation and break-in recovery.</source>
|
||||
<target>メッセージ、ファイル、通話は、前方秘匿性、否認可能性および侵入復元性を備えた**耐量子E2E暗号化**によって保護されます。</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Migrate device" xml:space="preserve">
|
||||
@@ -4151,6 +4263,14 @@ 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>
|
||||
@@ -4265,6 +4385,14 @@ 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>
|
||||
@@ -4283,6 +4411,10 @@ This is your link for group %@!</source>
|
||||
<source>Nothing selected</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Nothing to forward!" xml:space="preserve">
|
||||
<source>Nothing to forward!</source>
|
||||
<note>alert title</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Notifications" xml:space="preserve">
|
||||
<source>Notifications</source>
|
||||
<target>通知</target>
|
||||
@@ -4314,7 +4446,7 @@ This is your link for group %@!</source>
|
||||
<trans-unit id="Ok" xml:space="preserve">
|
||||
<source>Ok</source>
|
||||
<target>OK</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
<note>alert button</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Old database" xml:space="preserve">
|
||||
<source>Old database</source>
|
||||
@@ -4494,6 +4626,11 @@ VPN を有効にする必要があります。</target>
|
||||
<source>Other %@ servers</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Other file errors: %@" xml:space="preserve">
|
||||
<source>Other file errors:
|
||||
%@</source>
|
||||
<note>alert message</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="PING count" xml:space="preserve">
|
||||
<source>PING count</source>
|
||||
<target>PING回数</target>
|
||||
@@ -4529,6 +4666,10 @@ VPN を有効にする必要があります。</target>
|
||||
<target>パスコードを設定しました!</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Password" xml:space="preserve">
|
||||
<source>Password</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Password to show" xml:space="preserve">
|
||||
<source>Password to show</source>
|
||||
<target>パスワードを表示する</target>
|
||||
@@ -4665,6 +4806,10 @@ Error: %@</source>
|
||||
<target>ポーランド語UI</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Port" xml:space="preserve">
|
||||
<source>Port</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</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>サーバアドレスの証明証IDが正しくないかもしれません</target>
|
||||
@@ -4743,14 +4888,6 @@ Error: %@</source>
|
||||
<source>Profile images</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Profile name" xml:space="preserve">
|
||||
<source>Profile name</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Profile name:" xml:space="preserve">
|
||||
<source>Profile name:</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Profile password" xml:space="preserve">
|
||||
<source>Profile password</source>
|
||||
<target>プロフィールのパスワード</target>
|
||||
@@ -4846,6 +4983,10 @@ Enable in *Network & servers* settings.</source>
|
||||
<source>Proxied servers</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Proxy requires password" xml:space="preserve">
|
||||
<source>Proxy requires password</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Push notifications" xml:space="preserve">
|
||||
<source>Push notifications</source>
|
||||
<target>プッシュ通知</target>
|
||||
@@ -5051,6 +5192,10 @@ Enable in *Network & servers* settings.</source>
|
||||
<target>削除</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Remove archive?" xml:space="preserve">
|
||||
<source>Remove archive?</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Remove image" xml:space="preserve">
|
||||
<source>Remove image</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
@@ -5218,6 +5363,10 @@ Enable in *Network & servers* settings.</source>
|
||||
<source>SMP server</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="SOCKS proxy" xml:space="preserve">
|
||||
<source>SOCKS proxy</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Safely receive files" xml:space="preserve">
|
||||
<source>Safely receive files</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
@@ -5229,12 +5378,13 @@ Enable in *Network & servers* settings.</source>
|
||||
<trans-unit id="Save" xml:space="preserve">
|
||||
<source>Save</source>
|
||||
<target>保存</target>
|
||||
<note>chat item action</note>
|
||||
<note>alert button
|
||||
chat item action</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Save (and notify contacts)" xml:space="preserve">
|
||||
<source>Save (and notify contacts)</source>
|
||||
<target>保存(連絡先に通知)</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
<note>alert button</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Save and notify contact" xml:space="preserve">
|
||||
<source>Save and notify contact</source>
|
||||
@@ -5260,11 +5410,6 @@ Enable in *Network & servers* settings.</source>
|
||||
<target>アーカイブを保存</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Save auto-accept settings" xml:space="preserve">
|
||||
<source>Save auto-accept settings</source>
|
||||
<target>自動受け入れ設定を保存する</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Save group profile" xml:space="preserve">
|
||||
<source>Save group profile</source>
|
||||
<target>グループプロフィールの保存</target>
|
||||
@@ -5300,16 +5445,15 @@ Enable in *Network & servers* settings.</source>
|
||||
<target>サーバを保存しますか?</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Save settings?" xml:space="preserve">
|
||||
<source>Save settings?</source>
|
||||
<target>設定を保存しますか?</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Save welcome message?" xml:space="preserve">
|
||||
<source>Save welcome message?</source>
|
||||
<target>ウェルカムメッセージを保存しますか?</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Save your profile?" xml:space="preserve">
|
||||
<source>Save your profile?</source>
|
||||
<note>alert title</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Saved" xml:space="preserve">
|
||||
<source>Saved</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
@@ -5327,6 +5471,10 @@ Enable in *Network & servers* settings.</source>
|
||||
<source>Saved message</source>
|
||||
<note>message info title</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Saving %lld messages" xml:space="preserve">
|
||||
<source>Saving %lld messages</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Scale" xml:space="preserve">
|
||||
<source>Scale</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
@@ -5513,7 +5661,7 @@ Enable in *Network & servers* settings.</source>
|
||||
<trans-unit id="Sender cancelled file transfer." xml:space="preserve">
|
||||
<source>Sender cancelled file transfer.</source>
|
||||
<target>送信者がファイル転送をキャンセルしました。</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
<note>alert message</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Sender may have deleted the connection request." xml:space="preserve">
|
||||
<source>Sender may have deleted the connection request.</source>
|
||||
@@ -5599,6 +5747,10 @@ 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>
|
||||
@@ -5708,6 +5860,10 @@ Enable in *Network & servers* settings.</source>
|
||||
<target>設定</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Settings were changed." xml:space="preserve">
|
||||
<source>Settings were changed.</source>
|
||||
<note>alert message</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Shape profile images" xml:space="preserve">
|
||||
<source>Shape profile images</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
@@ -5871,6 +6027,10 @@ 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>
|
||||
@@ -5899,6 +6059,10 @@ Enable in *Network & servers* settings.</source>
|
||||
<source>Soft</source>
|
||||
<note>blur media</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Some app settings were not migrated." xml:space="preserve">
|
||||
<source>Some app settings were not migrated.</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Some file(s) were not exported:" xml:space="preserve">
|
||||
<source>Some file(s) were not exported:</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
@@ -6027,6 +6191,14 @@ 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>
|
||||
@@ -6248,6 +6420,10 @@ It can happen because of some bug or when the connection is compromised.</source
|
||||
<source>The text you pasted is not a SimpleX link.</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</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>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Themes" xml:space="preserve">
|
||||
<source>Themes</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
@@ -6363,6 +6539,14 @@ 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>
|
||||
@@ -6504,7 +6688,7 @@ You will be prompted to complete authentication before this feature is enabled.<
|
||||
</trans-unit>
|
||||
<trans-unit id="Unknown servers!" xml:space="preserve">
|
||||
<source>Unknown servers!</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
<note>alert title</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Unless you use iOS call interface, enable Do Not Disturb mode to avoid interruptions." xml:space="preserve">
|
||||
<source>Unless you use iOS call interface, enable Do Not Disturb mode to avoid interruptions.</source>
|
||||
@@ -6609,6 +6793,10 @@ To connect, please ask your contact to create another connection link and check
|
||||
<target>.onionホストを使う</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Use SOCKS proxy" xml:space="preserve">
|
||||
<source>Use SOCKS proxy</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Use SimpleX Chat servers?" xml:space="preserve">
|
||||
<source>Use SimpleX Chat servers?</source>
|
||||
<target>SimpleX チャット サーバーを使用しますか?</target>
|
||||
@@ -6668,15 +6856,14 @@ 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>
|
||||
</trans-unit>
|
||||
<trans-unit id="Username" xml:space="preserve">
|
||||
<source>Username</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Using SimpleX Chat servers." xml:space="preserve">
|
||||
<source>Using SimpleX Chat servers.</source>
|
||||
<target>SimpleX チャット サーバーを使用する。</target>
|
||||
@@ -6889,7 +7076,7 @@ To connect, please ask your contact to create another connection link and check
|
||||
</trans-unit>
|
||||
<trans-unit id="Without Tor or VPN, your IP address will be visible to these XFTP relays: %@." xml:space="preserve">
|
||||
<source>Without Tor or VPN, your IP address will be visible to these XFTP relays: %@.</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
<note>alert message</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Wrong database passphrase" xml:space="preserve">
|
||||
<source>Wrong database passphrase</source>
|
||||
@@ -6913,11 +7100,6 @@ To connect, please ask your contact to create another connection link and check
|
||||
<source>XFTP server</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="You" xml:space="preserve">
|
||||
<source>You</source>
|
||||
<target>あなた</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="You **must not** use the same database on two devices." xml:space="preserve">
|
||||
<source>You **must not** use the same database on two devices.</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
@@ -7243,6 +7425,10 @@ Repeat connection request?</source>
|
||||
<target>チャット データベースは暗号化されていません - 暗号化するにはパスフレーズを設定してください。</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Your chat preferences" xml:space="preserve">
|
||||
<source>Your chat preferences</source>
|
||||
<note>alert title</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Your chat profiles" xml:space="preserve">
|
||||
<source>Your chat profiles</source>
|
||||
<target>あなたのチャットプロフィール</target>
|
||||
@@ -7267,6 +7453,10 @@ Repeat connection request?</source>
|
||||
<target>連絡先は接続されたままになります。</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Your credentials may be sent unencrypted." xml:space="preserve">
|
||||
<source>Your credentials may be sent unencrypted.</source>
|
||||
<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">
|
||||
<source>Your current chat database will be DELETED and REPLACED with the imported one.</source>
|
||||
<target>現在のチャット データベースは削除され、インポートされたデータベースに置き換えられます。</target>
|
||||
@@ -7296,13 +7486,15 @@ Repeat connection request?</source>
|
||||
<target>あなたのプロファイル **%@** が共有されます。</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Your profile is stored on your device and shared only with your contacts. SimpleX servers cannot see your profile." xml:space="preserve">
|
||||
<source>Your profile is stored on your device and shared only with your contacts.
|
||||
SimpleX servers cannot see your profile.</source>
|
||||
<target>プロフィールはデバイスに保存され、連絡先とのみ共有されます。
|
||||
SimpleX サーバーはあなたのプロファイルを参照できません。</target>
|
||||
<trans-unit id="Your profile is stored on your device and shared only with your contacts. SimpleX servers cannot see your profile." xml:space="preserve">
|
||||
<source>Your profile is stored on your device and shared only with your contacts. SimpleX servers cannot see your profile.</source>
|
||||
<target>プロフィールはデバイスに保存され、連絡先とのみ共有されます。 SimpleX サーバーはあなたのプロファイルを参照できません。</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</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>
|
||||
<note>alert message</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Your profile, contacts and delivered messages are stored on your device." xml:space="preserve">
|
||||
<source>Your profile, contacts and delivered messages are stored on your device.</source>
|
||||
<target>あなたのプロフィール、連絡先、送信したメッセージがご自分の端末に保存されます。</target>
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -139,6 +139,7 @@
|
||||
</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">
|
||||
@@ -161,11 +162,36 @@
|
||||
<target>%d dni</target>
|
||||
<note>time interval</note>
|
||||
</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">
|
||||
<source>%d hours</source>
|
||||
<target>%d godzin</target>
|
||||
<note>time interval</note>
|
||||
</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">
|
||||
<source>%d min</source>
|
||||
<target>%d min</target>
|
||||
@@ -727,7 +753,7 @@
|
||||
<trans-unit id="All profiles" xml:space="preserve">
|
||||
<source>All profiles</source>
|
||||
<target>Wszystkie profile</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
<note>profile dropdown</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="All your contacts will remain connected." xml:space="preserve">
|
||||
<source>All your contacts will remain connected.</source>
|
||||
@@ -919,6 +945,11 @@
|
||||
<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>
|
||||
@@ -1024,6 +1055,11 @@
|
||||
<target>Automatyczne akceptowanie obrazów</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</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">
|
||||
<source>Back</source>
|
||||
<target>Wstecz</target>
|
||||
@@ -1049,11 +1085,19 @@
|
||||
<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>
|
||||
@@ -1064,6 +1108,18 @@
|
||||
<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>
|
||||
@@ -1197,7 +1253,7 @@
|
||||
<trans-unit id="Cancel" xml:space="preserve">
|
||||
<source>Cancel</source>
|
||||
<target>Anuluj</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
<note>alert button</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Cancel migration" xml:space="preserve">
|
||||
<source>Cancel migration</source>
|
||||
@@ -1217,7 +1273,7 @@
|
||||
<trans-unit id="Cannot receive file" xml:space="preserve">
|
||||
<source>Cannot receive file</source>
|
||||
<target>Nie można odebrać pliku</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
<note>alert title</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Capacity exceeded - recipient did not receive previously sent messages." xml:space="preserve">
|
||||
<source>Capacity exceeded - recipient did not receive previously sent messages.</source>
|
||||
@@ -1345,6 +1401,16 @@
|
||||
<target>Preferencje czatu</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</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>
|
||||
@@ -1746,6 +1812,7 @@ 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">
|
||||
@@ -1873,6 +1940,10 @@ 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>
|
||||
@@ -2167,6 +2238,10 @@ 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>
|
||||
@@ -2417,6 +2492,11 @@ To jest twój jednorazowy link!</target>
|
||||
<target>Nie wysyłaj historii do nowych członków.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</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">
|
||||
<source>Don't create address</source>
|
||||
<target>Nie twórz adresu</target>
|
||||
@@ -2440,7 +2520,8 @@ To jest twój jednorazowy link!</target>
|
||||
<trans-unit id="Download" xml:space="preserve">
|
||||
<source>Download</source>
|
||||
<target>Pobierz</target>
|
||||
<note>chat item action</note>
|
||||
<note>alert button
|
||||
chat item action</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Download errors" xml:space="preserve">
|
||||
<source>Download errors</source>
|
||||
@@ -2457,6 +2538,11 @@ To jest twój jednorazowy link!</target>
|
||||
<target>Pobierz plik</target>
|
||||
<note>server test step</note>
|
||||
</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">
|
||||
<source>Downloaded</source>
|
||||
<target>Pobrane</target>
|
||||
@@ -2734,6 +2820,7 @@ 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">
|
||||
@@ -2748,6 +2835,7 @@ 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">
|
||||
@@ -2870,6 +2958,11 @@ To jest twój jednorazowy link!</target>
|
||||
<target>Błąd ładowania %@ serwerów</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</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">
|
||||
<source>Error opening chat</source>
|
||||
<target>Błąd otwierania czatu</target>
|
||||
@@ -2878,7 +2971,7 @@ To jest twój jednorazowy link!</target>
|
||||
<trans-unit id="Error receiving file" xml:space="preserve">
|
||||
<source>Error receiving file</source>
|
||||
<target>Błąd odbioru pliku</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
<note>alert title</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Error reconnecting server" xml:space="preserve">
|
||||
<source>Error reconnecting server</source>
|
||||
@@ -2972,12 +3065,13 @@ 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">
|
||||
<source>Error switching profile!</source>
|
||||
<target>Błąd przełączania profilu!</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
<note>alertTitle</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Error synchronizing connection" xml:space="preserve">
|
||||
<source>Error synchronizing connection</source>
|
||||
@@ -3022,8 +3116,7 @@ To jest twój jednorazowy link!</target>
|
||||
<trans-unit id="Error: %@" xml:space="preserve">
|
||||
<source>Error: %@</source>
|
||||
<target>Błąd: %@</target>
|
||||
<note>file error text
|
||||
snd error text</note>
|
||||
<note>alert message</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Error: URL is invalid" xml:space="preserve">
|
||||
<source>Error: URL is invalid</source>
|
||||
@@ -3110,6 +3203,13 @@ To jest twój jednorazowy link!</target>
|
||||
<target>Błąd pliku</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<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">
|
||||
<source>File not found - most likely file was deleted or cancelled.</source>
|
||||
<target>Nie odnaleziono pliku - najprawdopodobniej plik został usunięty lub anulowany.</target>
|
||||
@@ -3245,11 +3345,30 @@ To jest twój jednorazowy link!</target>
|
||||
<target>Przekaż dalej</target>
|
||||
<note>chat item action</note>
|
||||
</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">
|
||||
<source>Forward and save messages</source>
|
||||
<target>Przesyłaj dalej i zapisuj wiadomości</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</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>
|
||||
@@ -3260,6 +3379,11 @@ To jest twój jednorazowy link!</target>
|
||||
<target>Przekazane dalej od</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</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">
|
||||
<source>Forwarding server %@ failed to connect to destination server %@. Please try later.</source>
|
||||
<target>Serwer przekazujący %@ nie mógł połączyć się z serwerem docelowym %@. Spróbuj ponownie później.</target>
|
||||
@@ -3309,11 +3433,6 @@ Błąd: %2$@</target>
|
||||
<target>Pełna nazwa (opcjonalna)</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Full name:" xml:space="preserve">
|
||||
<source>Full name:</source>
|
||||
<target>Pełna nazwa:</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Fully decentralized – visible only to members." xml:space="preserve">
|
||||
<source>Fully decentralized – visible only to members.</source>
|
||||
<target>W pełni zdecentralizowana – widoczna tylko dla członków.</target>
|
||||
@@ -3559,6 +3678,11 @@ Błąd: %2$@</target>
|
||||
<target>Serwery ICE (po jednym na linię)</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</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">
|
||||
<source>If you can't meet in person, show QR code in a video call, or share the link.</source>
|
||||
<target>Jeśli nie możesz spotkać się osobiście, pokaż kod QR w rozmowie wideo lub udostępnij link.</target>
|
||||
@@ -3634,6 +3758,11 @@ 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>
|
||||
@@ -4206,6 +4335,7 @@ 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">
|
||||
@@ -4258,6 +4388,11 @@ To jest twój link do grupy %@!</target>
|
||||
<target>Wysłane wiadomości</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</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">
|
||||
<source>Messages, files and calls are protected by **end-to-end encryption** with perfect forward secrecy, repudiation and break-in recovery.</source>
|
||||
<target>Wiadomości, pliki i połączenia są chronione przez **szyfrowanie end-to-end** z doskonałym utajnianiem z wyprzedzeniem i odzyskiem po złamaniu.</target>
|
||||
@@ -4413,6 +4548,16 @@ 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>
|
||||
@@ -4533,6 +4678,16 @@ 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>
|
||||
@@ -4553,6 +4708,11 @@ To jest twój link do grupy %@!</target>
|
||||
<target>Nic nie jest zaznaczone</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</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">
|
||||
<source>Notifications</source>
|
||||
<target>Powiadomienia</target>
|
||||
@@ -4585,7 +4745,7 @@ To jest twój link do grupy %@!</target>
|
||||
<trans-unit id="Ok" xml:space="preserve">
|
||||
<source>Ok</source>
|
||||
<target>Ok</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
<note>alert button</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Old database" xml:space="preserve">
|
||||
<source>Old database</source>
|
||||
@@ -4776,6 +4936,13 @@ Wymaga włączenia VPN.</target>
|
||||
<target>Inne %@ serwery</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<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">
|
||||
<source>PING count</source>
|
||||
<target>Liczba PINGÓW</target>
|
||||
@@ -4811,6 +4978,11 @@ Wymaga włączenia VPN.</target>
|
||||
<target>Pin ustawiony!</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</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">
|
||||
<source>Password to show</source>
|
||||
<target>Hasło do wyświetlenia</target>
|
||||
@@ -4960,6 +5132,11 @@ Błąd: %@</target>
|
||||
<target>Polski interfejs</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</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">
|
||||
<source>Possibly, certificate fingerprint in server address is incorrect</source>
|
||||
<target>Możliwe, że odcisk palca certyfikatu w adresie serwera jest nieprawidłowy</target>
|
||||
@@ -5045,16 +5222,6 @@ Błąd: %@</target>
|
||||
<target>Zdjęcia profilowe</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Profile name" xml:space="preserve">
|
||||
<source>Profile name</source>
|
||||
<target>Nazwa profilu</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Profile name:" xml:space="preserve">
|
||||
<source>Profile name:</source>
|
||||
<target>Nazwa profilu:</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Profile password" xml:space="preserve">
|
||||
<source>Profile password</source>
|
||||
<target>Hasło profilu</target>
|
||||
@@ -5157,6 +5324,11 @@ Włącz w ustawianiach *Sieć i serwery* .</target>
|
||||
<target>Serwery trasowane przez proxy</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</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">
|
||||
<source>Push notifications</source>
|
||||
<target>Powiadomienia push</target>
|
||||
@@ -5378,6 +5550,11 @@ Włącz w ustawianiach *Sieć i serwery* .</target>
|
||||
<target>Usuń</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</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">
|
||||
<source>Remove image</source>
|
||||
<target>Usuń obraz</target>
|
||||
@@ -5558,6 +5735,11 @@ Włącz w ustawianiach *Sieć i serwery* .</target>
|
||||
<target>Serwer SMP</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</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">
|
||||
<source>Safely receive files</source>
|
||||
<target>Bezpiecznie otrzymuj pliki</target>
|
||||
@@ -5571,12 +5753,13 @@ Włącz w ustawianiach *Sieć i serwery* .</target>
|
||||
<trans-unit id="Save" xml:space="preserve">
|
||||
<source>Save</source>
|
||||
<target>Zapisz</target>
|
||||
<note>chat item action</note>
|
||||
<note>alert button
|
||||
chat item action</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Save (and notify contacts)" xml:space="preserve">
|
||||
<source>Save (and notify contacts)</source>
|
||||
<target>Zapisz (i powiadom kontakty)</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
<note>alert button</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Save and notify contact" xml:space="preserve">
|
||||
<source>Save and notify contact</source>
|
||||
@@ -5603,11 +5786,6 @@ Włącz w ustawianiach *Sieć i serwery* .</target>
|
||||
<target>Zapisz archiwum</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Save auto-accept settings" xml:space="preserve">
|
||||
<source>Save auto-accept settings</source>
|
||||
<target>Zapisz ustawienia automatycznej akceptacji</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Save group profile" xml:space="preserve">
|
||||
<source>Save group profile</source>
|
||||
<target>Zapisz profil grupy</target>
|
||||
@@ -5643,16 +5821,16 @@ Włącz w ustawianiach *Sieć i serwery* .</target>
|
||||
<target>Zapisać serwery?</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Save settings?" xml:space="preserve">
|
||||
<source>Save settings?</source>
|
||||
<target>Zapisać ustawienia?</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Save welcome message?" xml:space="preserve">
|
||||
<source>Save welcome message?</source>
|
||||
<target>Zapisać wiadomość powitalną?</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</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">
|
||||
<source>Saved</source>
|
||||
<target>Zapisane</target>
|
||||
@@ -5673,6 +5851,11 @@ Włącz w ustawianiach *Sieć i serwery* .</target>
|
||||
<target>Zachowano wiadomość</target>
|
||||
<note>message info title</note>
|
||||
</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">
|
||||
<source>Scale</source>
|
||||
<target>Skaluj</target>
|
||||
@@ -5755,6 +5938,7 @@ 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">
|
||||
@@ -5875,7 +6059,7 @@ Włącz w ustawianiach *Sieć i serwery* .</target>
|
||||
<trans-unit id="Sender cancelled file transfer." xml:space="preserve">
|
||||
<source>Sender cancelled file transfer.</source>
|
||||
<target>Nadawca anulował transfer pliku.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
<note>alert message</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Sender may have deleted the connection request." xml:space="preserve">
|
||||
<source>Sender may have deleted the connection request.</source>
|
||||
@@ -5972,6 +6156,11 @@ 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>
|
||||
@@ -6092,6 +6281,11 @@ Włącz w ustawianiach *Sieć i serwery* .</target>
|
||||
<target>Ustawienia</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</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">
|
||||
<source>Shape profile images</source>
|
||||
<target>Kształtuj obrazy profilowe</target>
|
||||
@@ -6129,6 +6323,7 @@ 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">
|
||||
@@ -6266,6 +6461,10 @@ 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>
|
||||
@@ -6296,6 +6495,11 @@ Włącz w ustawianiach *Sieć i serwery* .</target>
|
||||
<target>Łagodny</target>
|
||||
<note>blur media</note>
|
||||
</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">
|
||||
<source>Some file(s) were not exported:</source>
|
||||
<target>Niektóre plik(i) nie zostały wyeksportowane:</target>
|
||||
@@ -6436,6 +6640,14 @@ 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>
|
||||
@@ -6473,6 +6685,7 @@ 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">
|
||||
@@ -6667,6 +6880,11 @@ Może się to zdarzyć z powodu jakiegoś błędu lub gdy połączenie jest skom
|
||||
<target>Tekst, który wkleiłeś nie jest linkiem SimpleX.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</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">
|
||||
<source>Themes</source>
|
||||
<target>Motywy</target>
|
||||
@@ -6794,6 +7012,16 @@ 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>
|
||||
@@ -6947,7 +7175,7 @@ Przed włączeniem tej funkcji zostanie wyświetlony monit uwierzytelniania.</ta
|
||||
<trans-unit id="Unknown servers!" xml:space="preserve">
|
||||
<source>Unknown servers!</source>
|
||||
<target>Nieznane serwery!</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
<note>alert title</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Unless you use iOS call interface, enable Do Not Disturb mode to avoid interruptions." xml:space="preserve">
|
||||
<source>Unless you use iOS call interface, enable Do Not Disturb mode to avoid interruptions.</source>
|
||||
@@ -7061,6 +7289,11 @@ Aby się połączyć, poproś Twój kontakt o utworzenie kolejnego linku połąc
|
||||
<target>Użyj hostów .onion</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</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">
|
||||
<source>Use SimpleX Chat servers?</source>
|
||||
<target>Użyć serwerów SimpleX Chat?</target>
|
||||
@@ -7126,16 +7359,16 @@ 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>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</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">
|
||||
<source>Using SimpleX Chat servers.</source>
|
||||
<target>Używanie serwerów SimpleX Chat.</target>
|
||||
@@ -7369,7 +7602,7 @@ Aby się połączyć, poproś Twój kontakt o utworzenie kolejnego linku połąc
|
||||
<trans-unit id="Without Tor or VPN, your IP address will be visible to these XFTP relays: %@." xml:space="preserve">
|
||||
<source>Without Tor or VPN, your IP address will be visible to these XFTP relays: %@.</source>
|
||||
<target>Bez Tor lub VPN, Twój adres IP będzie widoczny dla tych przekaźników XFTP: %@.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
<note>alert message</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Wrong database passphrase" xml:space="preserve">
|
||||
<source>Wrong database passphrase</source>
|
||||
@@ -7396,11 +7629,6 @@ Aby się połączyć, poproś Twój kontakt o utworzenie kolejnego linku połąc
|
||||
<target>Serwer XFTP</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="You" xml:space="preserve">
|
||||
<source>You</source>
|
||||
<target>Ty</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="You **must not** use the same database on two devices." xml:space="preserve">
|
||||
<source>You **must not** use the same database on two devices.</source>
|
||||
<target>**Nie możesz** używać tej samej bazy na dwóch urządzeniach.</target>
|
||||
@@ -7750,6 +7978,11 @@ Powtórzyć prośbę połączenia?</target>
|
||||
<target>Baza danych czatu nie jest szyfrowana - ustaw hasło, aby ją zaszyfrować.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</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">
|
||||
<source>Your chat profiles</source>
|
||||
<target>Twoje profile czatu</target>
|
||||
@@ -7757,6 +7990,7 @@ 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">
|
||||
@@ -7774,6 +8008,11 @@ Powtórzyć prośbę połączenia?</target>
|
||||
<target>Twoje kontakty pozostaną połączone.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</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">
|
||||
<source>Your current chat database will be DELETED and REPLACED with the imported one.</source>
|
||||
<target>Twoja obecna baza danych czatu zostanie usunięta i zastąpiona zaimportowaną.</target>
|
||||
@@ -7804,13 +8043,16 @@ Powtórzyć prośbę połączenia?</target>
|
||||
<target>Twój profil **%@** zostanie udostępniony.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Your profile is stored on your device and shared only with your contacts. SimpleX servers cannot see your profile." xml:space="preserve">
|
||||
<source>Your profile is stored on your device and shared only with your contacts.
|
||||
SimpleX servers cannot see your profile.</source>
|
||||
<target>Twój profil jest przechowywany na urządzeniu i udostępniany tylko Twoim kontaktom.
|
||||
Serwery SimpleX nie mogą zobaczyć Twojego profilu.</target>
|
||||
<trans-unit id="Your profile is stored on your device and shared only with your contacts. SimpleX servers cannot see your profile." xml:space="preserve">
|
||||
<source>Your profile is stored on your device and shared only with your contacts. SimpleX servers cannot see your profile.</source>
|
||||
<target>Twój profil jest przechowywany na urządzeniu i udostępniany tylko Twoim kontaktom. Serwery SimpleX nie mogą zobaczyć Twojego profilu.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</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">
|
||||
<source>Your profile, contacts and delivered messages are stored on your device.</source>
|
||||
<target>Twój profil, kontakty i dostarczone wiadomości są przechowywane na Twoim urządzeniu.</target>
|
||||
|
||||
@@ -5502,6 +5502,74 @@ Isso pode acontecer por causa de algum bug ou quando a conexão está comprometi
|
||||
<source>Archived contacts</source>
|
||||
<target state="translated">Contatos arquivados</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="Cellular" xml:space="preserve" approved="no">
|
||||
<source>Cellular</source>
|
||||
<target state="translated">Rede móvel</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="%d file(s) failed to download." xml:space="preserve" approved="no">
|
||||
<source>%d file(s) failed to download.</source>
|
||||
<target state="translated">%d arquivo(s) falharam ao ser baixados.</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="%d file(s) were deleted." xml:space="preserve" approved="no">
|
||||
<source>%d file(s) were deleted.</source>
|
||||
<target state="translated">%d arquivo(s) foram apagados.</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="%d messages not forwarded" xml:space="preserve" approved="no">
|
||||
<source>%d messages not forwarded</source>
|
||||
<target state="translated">%d mensagens não encaminhadas</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="Bad desktop address" xml:space="preserve" approved="no">
|
||||
<source>Bad desktop address</source>
|
||||
<target state="translated">Endereço de desktop incorreto</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="Blur for better privacy." xml:space="preserve" approved="no">
|
||||
<source>Blur for better privacy.</source>
|
||||
<target state="translated">Borrar para melhor privacidade.</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="%d file(s) are still being downloaded." xml:space="preserve" approved="no">
|
||||
<source>%d file(s) are still being downloaded.</source>
|
||||
<target state="translated">%d arquivo(s) ainda estão sendo baixados.</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="%d file(s) were not downloaded." xml:space="preserve" approved="no">
|
||||
<source>%d file(s) were not downloaded.</source>
|
||||
<target state="translated">%d arquivo(s) não foram baixados.</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="Chat colors" xml:space="preserve" approved="no">
|
||||
<source>Chat colors</source>
|
||||
<target state="translated">Cores do chat</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="%lld group events" xml:space="preserve" approved="no">
|
||||
<source>%lld group events</source>
|
||||
<target state="translated">%lld eventos do grupo</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="%lld messages moderated by %@" xml:space="preserve" approved="no">
|
||||
<source>%lld messages moderated by %@</source>
|
||||
<target state="translated">%lld mensagens moderadas por %@</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="%@, %@" xml:space="preserve" approved="no">
|
||||
<source>%1$@, %2$@</source>
|
||||
<target state="translated">%1$@, %2$@</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="%lld new interface languages" xml:space="preserve" approved="no">
|
||||
<source>%lld new interface languages</source>
|
||||
<target state="translated">%lld novos idiomas de interface</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="Better networking" xml:space="preserve" approved="no">
|
||||
<source>Better networking</source>
|
||||
<target state="translated">Melhores redes</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="Bulgarian, Finnish, Thai and Ukrainian - thanks to the users and [Weblate](https://github.com/simplex-chat/simplex-chat/tree/stable#help-translating-simplex-chat)!" xml:space="preserve" approved="no">
|
||||
<source>Bulgarian, Finnish, Thai and Ukrainian - thanks to the users and [Weblate](https://github.com/simplex-chat/simplex-chat/tree/stable#help-translating-simplex-chat)!</source>
|
||||
<target state="translated">Búlgaro, Finlandês, Tailandês e Ucraniano - obrigado aos usuários e [Weblate](https://github.com/simplex-chat/simplex-chat/tree/stable#help-translating-simplex-chat)!</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="Better groups" xml:space="preserve" approved="no">
|
||||
<source>Better groups</source>
|
||||
<target state="translated">Melhores grupos</target>
|
||||
</trans-unit>
|
||||
<trans-unit id="Capacity exceeded - recipient did not receive previously sent messages." xml:space="preserve" approved="no">
|
||||
<source>Capacity exceeded - recipient did not receive previously sent messages.</source>
|
||||
<target state="translated">Capacidade excedida - o destinatário não recebeu as mensagens enviadas anteriormente.</target>
|
||||
</trans-unit>
|
||||
</body>
|
||||
</file>
|
||||
<file original="en.lproj/SimpleX--iOS--InfoPlist.strings" source-language="en" target-language="pt-BR" datatype="plaintext">
|
||||
|
||||
@@ -139,6 +139,7 @@
|
||||
</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">
|
||||
@@ -161,11 +162,36 @@
|
||||
<target>%d дней</target>
|
||||
<note>time interval</note>
|
||||
</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">
|
||||
<source>%d hours</source>
|
||||
<target>%d ч.</target>
|
||||
<note>time interval</note>
|
||||
</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">
|
||||
<source>%d min</source>
|
||||
<target>%d мин</target>
|
||||
@@ -727,7 +753,7 @@
|
||||
<trans-unit id="All profiles" xml:space="preserve">
|
||||
<source>All profiles</source>
|
||||
<target>Все профили</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
<note>profile dropdown</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="All your contacts will remain connected." xml:space="preserve">
|
||||
<source>All your contacts will remain connected.</source>
|
||||
@@ -919,6 +945,11 @@
|
||||
<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>
|
||||
@@ -1024,6 +1055,11 @@
|
||||
<target>Автоприем изображений</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</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">
|
||||
<source>Back</source>
|
||||
<target>Назад</target>
|
||||
@@ -1049,11 +1085,21 @@
|
||||
<target>Ошибка хэш сообщения</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Better calls" xml:space="preserve">
|
||||
<source>Better calls</source>
|
||||
<target>Улучшенные звонки</target>
|
||||
<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>
|
||||
<target>Улучшенные даты сообщений.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Better messages" xml:space="preserve">
|
||||
<source>Better messages</source>
|
||||
<target>Улучшенные сообщения</target>
|
||||
@@ -1064,6 +1110,21 @@
|
||||
<target>Улучшенные сетевые функции</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Better notifications" xml:space="preserve">
|
||||
<source>Better notifications</source>
|
||||
<target>Улучшенные уведомления</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Better security ✅" xml:space="preserve">
|
||||
<source>Better security ✅</source>
|
||||
<target>Улучшенная безопасность ✅</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>Улучшенный интерфейс</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Black" xml:space="preserve">
|
||||
<source>Black</source>
|
||||
<target>Черная</target>
|
||||
@@ -1197,7 +1258,7 @@
|
||||
<trans-unit id="Cancel" xml:space="preserve">
|
||||
<source>Cancel</source>
|
||||
<target>Отменить</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
<note>alert button</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Cancel migration" xml:space="preserve">
|
||||
<source>Cancel migration</source>
|
||||
@@ -1217,7 +1278,7 @@
|
||||
<trans-unit id="Cannot receive file" xml:space="preserve">
|
||||
<source>Cannot receive file</source>
|
||||
<target>Невозможно получить файл</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
<note>alert title</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Capacity exceeded - recipient did not receive previously sent messages." xml:space="preserve">
|
||||
<source>Capacity exceeded - recipient did not receive previously sent messages.</source>
|
||||
@@ -1345,6 +1406,16 @@
|
||||
<target>Предпочтения</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</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>
|
||||
@@ -1746,6 +1817,7 @@ 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">
|
||||
@@ -1873,6 +1945,11 @@ 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>
|
||||
<target>Настраиваемая форма сообщений.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Customize theme" xml:space="preserve">
|
||||
<source>Customize theme</source>
|
||||
<target>Настроить тему</target>
|
||||
@@ -2167,6 +2244,11 @@ 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>
|
||||
<target>Удаляйте или модерируйте до 200 сообщений.</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>Удалить ожидаемое соединение?</target>
|
||||
@@ -2417,6 +2499,11 @@ This is your own one-time link!</source>
|
||||
<target>Не отправлять историю новым членам.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</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">
|
||||
<source>Don't create address</source>
|
||||
<target>Не создавать адрес</target>
|
||||
@@ -2440,7 +2527,8 @@ This is your own one-time link!</source>
|
||||
<trans-unit id="Download" xml:space="preserve">
|
||||
<source>Download</source>
|
||||
<target>Загрузить</target>
|
||||
<note>chat item action</note>
|
||||
<note>alert button
|
||||
chat item action</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Download errors" xml:space="preserve">
|
||||
<source>Download errors</source>
|
||||
@@ -2457,6 +2545,11 @@ This is your own one-time link!</source>
|
||||
<target>Загрузка файла</target>
|
||||
<note>server test step</note>
|
||||
</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">
|
||||
<source>Downloaded</source>
|
||||
<target>Принято</target>
|
||||
@@ -2734,6 +2827,7 @@ 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">
|
||||
@@ -2748,6 +2842,7 @@ 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">
|
||||
@@ -2870,6 +2965,11 @@ This is your own one-time link!</source>
|
||||
<target>Ошибка загрузки %@ серверов</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</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">
|
||||
<source>Error opening chat</source>
|
||||
<target>Ошибка доступа к чату</target>
|
||||
@@ -2878,7 +2978,7 @@ This is your own one-time link!</source>
|
||||
<trans-unit id="Error receiving file" xml:space="preserve">
|
||||
<source>Error receiving file</source>
|
||||
<target>Ошибка при получении файла</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
<note>alert title</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Error reconnecting server" xml:space="preserve">
|
||||
<source>Error reconnecting server</source>
|
||||
@@ -2972,12 +3072,13 @@ 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">
|
||||
<source>Error switching profile!</source>
|
||||
<target>Ошибка выбора профиля!</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
<note>alertTitle</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Error synchronizing connection" xml:space="preserve">
|
||||
<source>Error synchronizing connection</source>
|
||||
@@ -3022,8 +3123,7 @@ This is your own one-time link!</source>
|
||||
<trans-unit id="Error: %@" xml:space="preserve">
|
||||
<source>Error: %@</source>
|
||||
<target>Ошибка: %@</target>
|
||||
<note>file error text
|
||||
snd error text</note>
|
||||
<note>alert message</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Error: URL is invalid" xml:space="preserve">
|
||||
<source>Error: URL is invalid</source>
|
||||
@@ -3110,6 +3210,13 @@ This is your own one-time link!</source>
|
||||
<target>Ошибка файла</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<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">
|
||||
<source>File not found - most likely file was deleted or cancelled.</source>
|
||||
<target>Файл не найден - скорее всего, файл был удален или отменен.</target>
|
||||
@@ -3245,11 +3352,31 @@ This is your own one-time link!</source>
|
||||
<target>Переслать</target>
|
||||
<note>chat item action</note>
|
||||
</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">
|
||||
<source>Forward and save messages</source>
|
||||
<target>Переслать и сохранить сообщение</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</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>
|
||||
<target>Пересылайте до 20 сообщений за раз.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Forwarded" xml:space="preserve">
|
||||
<source>Forwarded</source>
|
||||
<target>Переслано</target>
|
||||
@@ -3260,6 +3387,11 @@ This is your own one-time link!</source>
|
||||
<target>Переслано из</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</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">
|
||||
<source>Forwarding server %@ failed to connect to destination server %@. Please try later.</source>
|
||||
<target>Пересылающий сервер %@ не смог подключиться к серверу назначения %@. Попробуйте позже.</target>
|
||||
@@ -3309,11 +3441,6 @@ Error: %2$@</source>
|
||||
<target>Полное имя (не обязательно)</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Full name:" xml:space="preserve">
|
||||
<source>Full name:</source>
|
||||
<target>Полное имя:</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Fully decentralized – visible only to members." xml:space="preserve">
|
||||
<source>Fully decentralized – visible only to members.</source>
|
||||
<target>Группа полностью децентрализована – она видна только членам.</target>
|
||||
@@ -3559,6 +3686,11 @@ Error: %2$@</source>
|
||||
<target>ICE серверы (один на строке)</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</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">
|
||||
<source>If you can't meet in person, show QR code in a video call, or share the link.</source>
|
||||
<target>Если Вы не можете встретиться лично, покажите QR-код во время видеозвонка или поделитесь ссылкой.</target>
|
||||
@@ -3634,6 +3766,12 @@ 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>
|
||||
<target>Улучшенная доставка, меньше трафик.</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>Улучшенная доставка сообщений</target>
|
||||
@@ -4206,6 +4344,7 @@ 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">
|
||||
@@ -4258,6 +4397,11 @@ This is your link for group %@!</source>
|
||||
<target>Сообщений отправлено</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</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">
|
||||
<source>Messages, files and calls are protected by **end-to-end encryption** with perfect forward secrecy, repudiation and break-in recovery.</source>
|
||||
<target>Сообщения, файлы и звонки защищены **end-to-end шифрованием** с прямой секретностью (PFS), правдоподобным отрицанием и восстановлением от взлома.</target>
|
||||
@@ -4413,6 +4557,16 @@ 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>
|
||||
@@ -4533,6 +4687,16 @@ 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>
|
||||
@@ -4553,6 +4717,11 @@ This is your link for group %@!</source>
|
||||
<target>Ничего не выбрано</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</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">
|
||||
<source>Notifications</source>
|
||||
<target>Уведомления</target>
|
||||
@@ -4585,7 +4754,7 @@ This is your link for group %@!</source>
|
||||
<trans-unit id="Ok" xml:space="preserve">
|
||||
<source>Ok</source>
|
||||
<target>Ок</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
<note>alert button</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Old database" xml:space="preserve">
|
||||
<source>Old database</source>
|
||||
@@ -4776,6 +4945,13 @@ Requires compatible VPN.</source>
|
||||
<target>Другие %@ серверы</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<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">
|
||||
<source>PING count</source>
|
||||
<target>Количество PING</target>
|
||||
@@ -4811,6 +4987,11 @@ Requires compatible VPN.</source>
|
||||
<target>Код доступа установлен!</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</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">
|
||||
<source>Password to show</source>
|
||||
<target>Пароль чтобы раскрыть</target>
|
||||
@@ -4960,6 +5141,11 @@ Error: %@</source>
|
||||
<target>Польский интерфейс</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</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">
|
||||
<source>Possibly, certificate fingerprint in server address is incorrect</source>
|
||||
<target>Возможно, хэш сертификата в адресе сервера неверный</target>
|
||||
@@ -5045,16 +5231,6 @@ Error: %@</source>
|
||||
<target>Картинки профилей</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Profile name" xml:space="preserve">
|
||||
<source>Profile name</source>
|
||||
<target>Имя профиля</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Profile name:" xml:space="preserve">
|
||||
<source>Profile name:</source>
|
||||
<target>Имя профиля:</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Profile password" xml:space="preserve">
|
||||
<source>Profile password</source>
|
||||
<target>Пароль профиля</target>
|
||||
@@ -5157,6 +5333,11 @@ Enable in *Network & servers* settings.</source>
|
||||
<target>Проксированные серверы</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</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">
|
||||
<source>Push notifications</source>
|
||||
<target>Доставка уведомлений</target>
|
||||
@@ -5378,6 +5559,11 @@ Enable in *Network & servers* settings.</source>
|
||||
<target>Удалить</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</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">
|
||||
<source>Remove image</source>
|
||||
<target>Удалить изображение</target>
|
||||
@@ -5558,6 +5744,11 @@ Enable in *Network & servers* settings.</source>
|
||||
<target>SMP сервер</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</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">
|
||||
<source>Safely receive files</source>
|
||||
<target>Получайте файлы безопасно</target>
|
||||
@@ -5571,12 +5762,13 @@ Enable in *Network & servers* settings.</source>
|
||||
<trans-unit id="Save" xml:space="preserve">
|
||||
<source>Save</source>
|
||||
<target>Сохранить</target>
|
||||
<note>chat item action</note>
|
||||
<note>alert button
|
||||
chat item action</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Save (and notify contacts)" xml:space="preserve">
|
||||
<source>Save (and notify contacts)</source>
|
||||
<target>Сохранить (и уведомить контакты)</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
<note>alert button</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Save and notify contact" xml:space="preserve">
|
||||
<source>Save and notify contact</source>
|
||||
@@ -5603,11 +5795,6 @@ Enable in *Network & servers* settings.</source>
|
||||
<target>Сохранить архив</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Save auto-accept settings" xml:space="preserve">
|
||||
<source>Save auto-accept settings</source>
|
||||
<target>Сохранить настройки автоприема</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Save group profile" xml:space="preserve">
|
||||
<source>Save group profile</source>
|
||||
<target>Сохранить профиль группы</target>
|
||||
@@ -5643,16 +5830,16 @@ Enable in *Network & servers* settings.</source>
|
||||
<target>Сохранить серверы?</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Save settings?" xml:space="preserve">
|
||||
<source>Save settings?</source>
|
||||
<target>Сохранить настройки?</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Save welcome message?" xml:space="preserve">
|
||||
<source>Save welcome message?</source>
|
||||
<target>Сохранить приветственное сообщение?</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</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">
|
||||
<source>Saved</source>
|
||||
<target>Сохранено</target>
|
||||
@@ -5673,6 +5860,11 @@ Enable in *Network & servers* settings.</source>
|
||||
<target>Сохраненное сообщение</target>
|
||||
<note>message info title</note>
|
||||
</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">
|
||||
<source>Scale</source>
|
||||
<target>Масштаб</target>
|
||||
@@ -5755,6 +5947,7 @@ 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">
|
||||
@@ -5875,7 +6068,7 @@ Enable in *Network & servers* settings.</source>
|
||||
<trans-unit id="Sender cancelled file transfer." xml:space="preserve">
|
||||
<source>Sender cancelled file transfer.</source>
|
||||
<target>Отправитель отменил передачу файла.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
<note>alert message</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Sender may have deleted the connection request." xml:space="preserve">
|
||||
<source>Sender may have deleted the connection request.</source>
|
||||
@@ -5972,6 +6165,11 @@ 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>
|
||||
@@ -6092,6 +6290,11 @@ Enable in *Network & servers* settings.</source>
|
||||
<target>Настройки</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</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">
|
||||
<source>Shape profile images</source>
|
||||
<target>Форма картинок профилей</target>
|
||||
@@ -6129,6 +6332,7 @@ 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">
|
||||
@@ -6266,6 +6470,11 @@ 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>
|
||||
<target>Аудит SimpleX протоколов от 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>Упрощенный режим Инкогнито</target>
|
||||
@@ -6296,6 +6505,11 @@ Enable in *Network & servers* settings.</source>
|
||||
<target>Слабое</target>
|
||||
<note>blur media</note>
|
||||
</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">
|
||||
<source>Some file(s) were not exported:</source>
|
||||
<target>Некоторые файл(ы) не были экспортированы:</target>
|
||||
@@ -6436,6 +6650,16 @@ 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>
|
||||
<target>Переключайте звук и видео во время звонка.</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>Переключайте профиль чата для одноразовых приглашений.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="System" xml:space="preserve">
|
||||
<source>System</source>
|
||||
<target>Системная</target>
|
||||
@@ -6473,6 +6697,7 @@ 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">
|
||||
@@ -6667,6 +6892,11 @@ It can happen because of some bug or when the connection is compromised.</source
|
||||
<target>Вставленный текст не является SimpleX-ссылкой.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</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">
|
||||
<source>Themes</source>
|
||||
<target>Темы</target>
|
||||
@@ -6794,6 +7024,16 @@ 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>
|
||||
@@ -6947,7 +7187,7 @@ You will be prompted to complete authentication before this feature is enabled.<
|
||||
<trans-unit id="Unknown servers!" xml:space="preserve">
|
||||
<source>Unknown servers!</source>
|
||||
<target>Неизвестные серверы!</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
<note>alert title</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Unless you use iOS call interface, enable Do Not Disturb mode to avoid interruptions." xml:space="preserve">
|
||||
<source>Unless you use iOS call interface, enable Do Not Disturb mode to avoid interruptions.</source>
|
||||
@@ -7061,6 +7301,11 @@ To connect, please ask your contact to create another connection link and check
|
||||
<target>Использовать .onion хосты</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</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">
|
||||
<source>Use SimpleX Chat servers?</source>
|
||||
<target>Использовать серверы предосталенные SimpleX Chat?</target>
|
||||
@@ -7126,16 +7371,16 @@ 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>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</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">
|
||||
<source>Using SimpleX Chat servers.</source>
|
||||
<target>Используются серверы, предоставленные SimpleX Chat.</target>
|
||||
@@ -7369,7 +7614,7 @@ To connect, please ask your contact to create another connection link and check
|
||||
<trans-unit id="Without Tor or VPN, your IP address will be visible to these XFTP relays: %@." xml:space="preserve">
|
||||
<source>Without Tor or VPN, your IP address will be visible to these XFTP relays: %@.</source>
|
||||
<target>Без Тора или ВПН, Ваш IP адрес будет доступен этим серверам файлов: %@.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
<note>alert message</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Wrong database passphrase" xml:space="preserve">
|
||||
<source>Wrong database passphrase</source>
|
||||
@@ -7396,11 +7641,6 @@ To connect, please ask your contact to create another connection link and check
|
||||
<target>XFTP сервер</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="You" xml:space="preserve">
|
||||
<source>You</source>
|
||||
<target>Вы</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="You **must not** use the same database on two devices." xml:space="preserve">
|
||||
<source>You **must not** use the same database on two devices.</source>
|
||||
<target>Вы **не должны** использовать одну и ту же базу данных на двух устройствах.</target>
|
||||
@@ -7750,6 +7990,11 @@ Repeat connection request?</source>
|
||||
<target>База данных НЕ зашифрована. Установите пароль, чтобы защитить Ваши данные.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</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">
|
||||
<source>Your chat profiles</source>
|
||||
<target>Ваши профили чата</target>
|
||||
@@ -7757,6 +8002,7 @@ 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">
|
||||
@@ -7774,6 +8020,11 @@ Repeat connection request?</source>
|
||||
<target>Ваши контакты сохранятся.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</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">
|
||||
<source>Your current chat database will be DELETED and REPLACED with the imported one.</source>
|
||||
<target>Текущие данные Вашего чата будет УДАЛЕНЫ и ЗАМЕНЕНЫ импортированными.</target>
|
||||
@@ -7804,13 +8055,16 @@ Repeat connection request?</source>
|
||||
<target>Будет отправлен Ваш профиль **%@**.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Your profile is stored on your device and shared only with your contacts. SimpleX servers cannot see your profile." xml:space="preserve">
|
||||
<source>Your profile is stored on your device and shared only with your contacts.
|
||||
SimpleX servers cannot see your profile.</source>
|
||||
<target>Ваш профиль хранится на Вашем устройстве и отправляется только Вашим контактам.
|
||||
SimpleX серверы не могут получить доступ к Вашему профилю.</target>
|
||||
<trans-unit id="Your profile is stored on your device and shared only with your contacts. SimpleX servers cannot see your profile." xml:space="preserve">
|
||||
<source>Your profile is stored on your device and shared only with your contacts. SimpleX servers cannot see your profile.</source>
|
||||
<target>Ваш профиль хранится на Вашем устройстве и отправляется только Вашим контактам. SimpleX серверы не могут получить доступ к Вашему профилю.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</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">
|
||||
<source>Your profile, contacts and delivered messages are stored on your device.</source>
|
||||
<target>Ваш профиль, контакты и доставленные сообщения хранятся на Вашем устройстве.</target>
|
||||
|
||||
@@ -151,11 +151,31 @@
|
||||
<target>%d วัน</target>
|
||||
<note>time interval</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="%d file(s) are still being downloaded." xml:space="preserve">
|
||||
<source>%d file(s) are still being downloaded.</source>
|
||||
<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>
|
||||
<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>
|
||||
<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>
|
||||
<note>forward confirmation reason</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="%d hours" xml:space="preserve">
|
||||
<source>%d hours</source>
|
||||
<target>%d ชั่วโมง</target>
|
||||
<note>time interval</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="%d messages not forwarded" xml:space="preserve">
|
||||
<source>%d messages not forwarded</source>
|
||||
<note>alert title</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="%d min" xml:space="preserve">
|
||||
<source>%d min</source>
|
||||
<target>%d นาที</target>
|
||||
@@ -682,7 +702,7 @@
|
||||
</trans-unit>
|
||||
<trans-unit id="All profiles" xml:space="preserve">
|
||||
<source>All profiles</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
<note>profile dropdown</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="All your contacts will remain connected." xml:space="preserve">
|
||||
<source>All your contacts will remain connected.</source>
|
||||
@@ -864,6 +884,10 @@
|
||||
<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>
|
||||
@@ -963,6 +987,10 @@
|
||||
<target>ยอมรับภาพอัตโนมัติ</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Auto-accept settings" xml:space="preserve">
|
||||
<source>Auto-accept settings</source>
|
||||
<note>alert title</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Back" xml:space="preserve">
|
||||
<source>Back</source>
|
||||
<target>กลับ</target>
|
||||
@@ -986,10 +1014,18 @@
|
||||
<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>
|
||||
@@ -999,6 +1035,18 @@
|
||||
<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>
|
||||
@@ -1116,7 +1164,7 @@
|
||||
<trans-unit id="Cancel" xml:space="preserve">
|
||||
<source>Cancel</source>
|
||||
<target>ยกเลิก</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
<note>alert button</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Cancel migration" xml:space="preserve">
|
||||
<source>Cancel migration</source>
|
||||
@@ -1134,7 +1182,7 @@
|
||||
<trans-unit id="Cannot receive file" xml:space="preserve">
|
||||
<source>Cannot receive file</source>
|
||||
<target>ไม่สามารถรับไฟล์ได้</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
<note>alert title</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Capacity exceeded - recipient did not receive previously sent messages." xml:space="preserve">
|
||||
<source>Capacity exceeded - recipient did not receive previously sent messages.</source>
|
||||
@@ -1255,6 +1303,15 @@
|
||||
<target>ค่ากําหนดในการแชท</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Chat preferences were changed." xml:space="preserve">
|
||||
<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>
|
||||
@@ -1728,6 +1785,10 @@ 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>
|
||||
@@ -2014,6 +2075,10 @@ 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>
|
||||
@@ -2243,6 +2308,10 @@ This is your own one-time link!</source>
|
||||
<source>Do not send history to new members.</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Do not use credentials with proxy." xml:space="preserve">
|
||||
<source>Do not use credentials with proxy.</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Don't create address" xml:space="preserve">
|
||||
<source>Don't create address</source>
|
||||
<target>อย่าสร้างที่อยู่</target>
|
||||
@@ -2265,7 +2334,8 @@ This is your own one-time link!</source>
|
||||
</trans-unit>
|
||||
<trans-unit id="Download" xml:space="preserve">
|
||||
<source>Download</source>
|
||||
<note>chat item action</note>
|
||||
<note>alert button
|
||||
chat item action</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Download errors" xml:space="preserve">
|
||||
<source>Download errors</source>
|
||||
@@ -2280,6 +2350,10 @@ This is your own one-time link!</source>
|
||||
<target>ดาวน์โหลดไฟล์</target>
|
||||
<note>server test step</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Download files" xml:space="preserve">
|
||||
<source>Download files</source>
|
||||
<note>alert action</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Downloaded" xml:space="preserve">
|
||||
<source>Downloaded</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
@@ -2670,6 +2744,10 @@ This is your own one-time link!</source>
|
||||
<target>โหลดเซิร์ฟเวอร์ %@ ผิดพลาด</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Error migrating settings" xml:space="preserve">
|
||||
<source>Error migrating settings</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Error opening chat" xml:space="preserve">
|
||||
<source>Error opening chat</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
@@ -2677,7 +2755,7 @@ This is your own one-time link!</source>
|
||||
<trans-unit id="Error receiving file" xml:space="preserve">
|
||||
<source>Error receiving file</source>
|
||||
<target>เกิดข้อผิดพลาดในการรับไฟล์</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
<note>alert title</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Error reconnecting server" xml:space="preserve">
|
||||
<source>Error reconnecting server</source>
|
||||
@@ -2770,7 +2848,7 @@ This is your own one-time link!</source>
|
||||
<trans-unit id="Error switching profile!" xml:space="preserve">
|
||||
<source>Error switching profile!</source>
|
||||
<target>เกิดข้อผิดพลาดในการเปลี่ยนโปรไฟล์!</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
<note>alertTitle</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Error synchronizing connection" xml:space="preserve">
|
||||
<source>Error synchronizing connection</source>
|
||||
@@ -2813,8 +2891,7 @@ This is your own one-time link!</source>
|
||||
<trans-unit id="Error: %@" xml:space="preserve">
|
||||
<source>Error: %@</source>
|
||||
<target>ข้อผิดพลาด: % @</target>
|
||||
<note>file error text
|
||||
snd error text</note>
|
||||
<note>alert message</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Error: URL is invalid" xml:space="preserve">
|
||||
<source>Error: URL is invalid</source>
|
||||
@@ -2895,6 +2972,11 @@ This is your own one-time link!</source>
|
||||
<source>File error</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="File errors: %@" xml:space="preserve">
|
||||
<source>File errors:
|
||||
%@</source>
|
||||
<note>alert message</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="File not found - most likely file was deleted or cancelled." xml:space="preserve">
|
||||
<source>File not found - most likely file was deleted or cancelled.</source>
|
||||
<note>file error text</note>
|
||||
@@ -3021,10 +3103,26 @@ This is your own one-time link!</source>
|
||||
<source>Forward</source>
|
||||
<note>chat item action</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Forward %d message(s)?" xml:space="preserve">
|
||||
<source>Forward %d message(s)?</source>
|
||||
<note>alert title</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Forward and save messages" xml:space="preserve">
|
||||
<source>Forward and save messages</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Forward messages" xml:space="preserve">
|
||||
<source>Forward messages</source>
|
||||
<note>alert action</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Forward messages without files?" xml:space="preserve">
|
||||
<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>
|
||||
@@ -3033,6 +3131,10 @@ This is your own one-time link!</source>
|
||||
<source>Forwarded from</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Forwarding %lld messages" xml:space="preserve">
|
||||
<source>Forwarding %lld messages</source>
|
||||
<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">
|
||||
<source>Forwarding server %@ failed to connect to destination server %@. Please try later.</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
@@ -3074,11 +3176,6 @@ Error: %2$@</source>
|
||||
<target>ชื่อเต็ม (ไม่บังคับ)</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Full name:" xml:space="preserve">
|
||||
<source>Full name:</source>
|
||||
<target>ชื่อเต็ม:</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Fully decentralized – visible only to members." xml:space="preserve">
|
||||
<source>Fully decentralized – visible only to members.</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
@@ -3316,6 +3413,10 @@ Error: %2$@</source>
|
||||
<target>เซิร์ฟเวอร์ ICE (หนึ่งเครื่องต่อสาย)</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="IP address" xml:space="preserve">
|
||||
<source>IP address</source>
|
||||
<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">
|
||||
<source>If you can't meet in person, show QR code in a video call, or share the link.</source>
|
||||
<target>หากคุณไม่สามารถพบกันในชีวิตจริงได้ ให้แสดงคิวอาร์โค้ดในวิดีโอคอล หรือแชร์ลิงก์</target>
|
||||
@@ -3388,6 +3489,11 @@ 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>
|
||||
@@ -3968,6 +4074,10 @@ This is your link for group %@!</source>
|
||||
<source>Messages sent</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Messages were deleted after you selected them." xml:space="preserve">
|
||||
<source>Messages were deleted after you selected them.</source>
|
||||
<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">
|
||||
<source>Messages, files and calls are protected by **end-to-end encryption** with perfect forward secrecy, repudiation and break-in recovery.</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
@@ -4109,6 +4219,14 @@ 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>
|
||||
@@ -4221,6 +4339,14 @@ 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>
|
||||
@@ -4239,6 +4365,10 @@ This is your link for group %@!</source>
|
||||
<source>Nothing selected</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Nothing to forward!" xml:space="preserve">
|
||||
<source>Nothing to forward!</source>
|
||||
<note>alert title</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Notifications" xml:space="preserve">
|
||||
<source>Notifications</source>
|
||||
<target>การแจ้งเตือน</target>
|
||||
@@ -4270,7 +4400,7 @@ This is your link for group %@!</source>
|
||||
<trans-unit id="Ok" xml:space="preserve">
|
||||
<source>Ok</source>
|
||||
<target>ตกลง</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
<note>alert button</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Old database" xml:space="preserve">
|
||||
<source>Old database</source>
|
||||
@@ -4447,6 +4577,11 @@ Requires compatible VPN.</source>
|
||||
<source>Other %@ servers</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Other file errors: %@" xml:space="preserve">
|
||||
<source>Other file errors:
|
||||
%@</source>
|
||||
<note>alert message</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="PING count" xml:space="preserve">
|
||||
<source>PING count</source>
|
||||
<target>จํานวน PING</target>
|
||||
@@ -4482,6 +4617,10 @@ Requires compatible VPN.</source>
|
||||
<target>ตั้งรหัสผ่านเรียบร้อยแล้ว!</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Password" xml:space="preserve">
|
||||
<source>Password</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Password to show" xml:space="preserve">
|
||||
<source>Password to show</source>
|
||||
<target>รหัสผ่านที่จะแสดง</target>
|
||||
@@ -4618,6 +4757,10 @@ Error: %@</source>
|
||||
<target>อินเตอร์เฟซภาษาโปแลนด์</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Port" xml:space="preserve">
|
||||
<source>Port</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</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>อาจเป็นไปได้ว่าลายนิ้วมือของ certificate ในที่อยู่เซิร์ฟเวอร์ไม่ถูกต้อง</target>
|
||||
@@ -4696,14 +4839,6 @@ Error: %@</source>
|
||||
<source>Profile images</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Profile name" xml:space="preserve">
|
||||
<source>Profile name</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Profile name:" xml:space="preserve">
|
||||
<source>Profile name:</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Profile password" xml:space="preserve">
|
||||
<source>Profile password</source>
|
||||
<target>รหัสผ่านโปรไฟล์</target>
|
||||
@@ -4799,6 +4934,10 @@ Enable in *Network & servers* settings.</source>
|
||||
<source>Proxied servers</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Proxy requires password" xml:space="preserve">
|
||||
<source>Proxy requires password</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Push notifications" xml:space="preserve">
|
||||
<source>Push notifications</source>
|
||||
<target>การแจ้งเตือนแบบทันที</target>
|
||||
@@ -5003,6 +5142,10 @@ Enable in *Network & servers* settings.</source>
|
||||
<target>ลบ</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Remove archive?" xml:space="preserve">
|
||||
<source>Remove archive?</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Remove image" xml:space="preserve">
|
||||
<source>Remove image</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
@@ -5170,6 +5313,10 @@ Enable in *Network & servers* settings.</source>
|
||||
<source>SMP server</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="SOCKS proxy" xml:space="preserve">
|
||||
<source>SOCKS proxy</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Safely receive files" xml:space="preserve">
|
||||
<source>Safely receive files</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
@@ -5181,12 +5328,13 @@ Enable in *Network & servers* settings.</source>
|
||||
<trans-unit id="Save" xml:space="preserve">
|
||||
<source>Save</source>
|
||||
<target>บันทึก</target>
|
||||
<note>chat item action</note>
|
||||
<note>alert button
|
||||
chat item action</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Save (and notify contacts)" xml:space="preserve">
|
||||
<source>Save (and notify contacts)</source>
|
||||
<target>บันทึก (และแจ้งผู้ติดต่อ)</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
<note>alert button</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Save and notify contact" xml:space="preserve">
|
||||
<source>Save and notify contact</source>
|
||||
@@ -5212,11 +5360,6 @@ Enable in *Network & servers* settings.</source>
|
||||
<target>บันทึกไฟล์เก็บถาวร</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Save auto-accept settings" xml:space="preserve">
|
||||
<source>Save auto-accept settings</source>
|
||||
<target>บันทึกการตั้งค่าการยอมรับอัตโนมัติ</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Save group profile" xml:space="preserve">
|
||||
<source>Save group profile</source>
|
||||
<target>บันทึกโปรไฟล์กลุ่ม</target>
|
||||
@@ -5252,16 +5395,15 @@ Enable in *Network & servers* settings.</source>
|
||||
<target>บันทึกเซิร์ฟเวอร์?</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Save settings?" xml:space="preserve">
|
||||
<source>Save settings?</source>
|
||||
<target>บันทึกการตั้งค่า?</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Save welcome message?" xml:space="preserve">
|
||||
<source>Save welcome message?</source>
|
||||
<target>บันทึกข้อความต้อนรับ?</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Save your profile?" xml:space="preserve">
|
||||
<source>Save your profile?</source>
|
||||
<note>alert title</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Saved" xml:space="preserve">
|
||||
<source>Saved</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
@@ -5279,6 +5421,10 @@ Enable in *Network & servers* settings.</source>
|
||||
<source>Saved message</source>
|
||||
<note>message info title</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Saving %lld messages" xml:space="preserve">
|
||||
<source>Saving %lld messages</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Scale" xml:space="preserve">
|
||||
<source>Scale</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
@@ -5466,7 +5612,7 @@ Enable in *Network & servers* settings.</source>
|
||||
<trans-unit id="Sender cancelled file transfer." xml:space="preserve">
|
||||
<source>Sender cancelled file transfer.</source>
|
||||
<target>ผู้ส่งยกเลิกการโอนไฟล์</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
<note>alert message</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Sender may have deleted the connection request." xml:space="preserve">
|
||||
<source>Sender may have deleted the connection request.</source>
|
||||
@@ -5556,6 +5702,10 @@ 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>
|
||||
@@ -5665,6 +5815,10 @@ Enable in *Network & servers* settings.</source>
|
||||
<target>การตั้งค่า</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Settings were changed." xml:space="preserve">
|
||||
<source>Settings were changed.</source>
|
||||
<note>alert message</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Shape profile images" xml:space="preserve">
|
||||
<source>Shape profile images</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
@@ -5827,6 +5981,10 @@ 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>
|
||||
@@ -5853,6 +6011,10 @@ Enable in *Network & servers* settings.</source>
|
||||
<source>Soft</source>
|
||||
<note>blur media</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Some app settings were not migrated." xml:space="preserve">
|
||||
<source>Some app settings were not migrated.</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Some file(s) were not exported:" xml:space="preserve">
|
||||
<source>Some file(s) were not exported:</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
@@ -5981,6 +6143,14 @@ 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>
|
||||
@@ -6203,6 +6373,10 @@ It can happen because of some bug or when the connection is compromised.</source
|
||||
<source>The text you pasted is not a SimpleX link.</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</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>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Themes" xml:space="preserve">
|
||||
<source>Themes</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
@@ -6317,6 +6491,14 @@ 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>
|
||||
@@ -6458,7 +6640,7 @@ You will be prompted to complete authentication before this feature is enabled.<
|
||||
</trans-unit>
|
||||
<trans-unit id="Unknown servers!" xml:space="preserve">
|
||||
<source>Unknown servers!</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
<note>alert title</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Unless you use iOS call interface, enable Do Not Disturb mode to avoid interruptions." xml:space="preserve">
|
||||
<source>Unless you use iOS call interface, enable Do Not Disturb mode to avoid interruptions.</source>
|
||||
@@ -6563,6 +6745,10 @@ To connect, please ask your contact to create another connection link and check
|
||||
<target>ใช้โฮสต์ .onion</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Use SOCKS proxy" xml:space="preserve">
|
||||
<source>Use SOCKS proxy</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Use SimpleX Chat servers?" xml:space="preserve">
|
||||
<source>Use SimpleX Chat servers?</source>
|
||||
<target>ใช้เซิร์ฟเวอร์ SimpleX Chat ไหม?</target>
|
||||
@@ -6620,15 +6806,14 @@ 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>
|
||||
</trans-unit>
|
||||
<trans-unit id="Username" xml:space="preserve">
|
||||
<source>Username</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Using SimpleX Chat servers." xml:space="preserve">
|
||||
<source>Using SimpleX Chat servers.</source>
|
||||
<target>กำลังใช้เซิร์ฟเวอร์ SimpleX Chat อยู่</target>
|
||||
@@ -6841,7 +7026,7 @@ To connect, please ask your contact to create another connection link and check
|
||||
</trans-unit>
|
||||
<trans-unit id="Without Tor or VPN, your IP address will be visible to these XFTP relays: %@." xml:space="preserve">
|
||||
<source>Without Tor or VPN, your IP address will be visible to these XFTP relays: %@.</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
<note>alert message</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Wrong database passphrase" xml:space="preserve">
|
||||
<source>Wrong database passphrase</source>
|
||||
@@ -6865,11 +7050,6 @@ To connect, please ask your contact to create another connection link and check
|
||||
<source>XFTP server</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="You" xml:space="preserve">
|
||||
<source>You</source>
|
||||
<target>คุณ</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="You **must not** use the same database on two devices." xml:space="preserve">
|
||||
<source>You **must not** use the same database on two devices.</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
@@ -7194,6 +7374,10 @@ Repeat connection request?</source>
|
||||
<target>ฐานข้อมูลการแชทของคุณไม่ได้ถูก encrypt - ตั้งรหัสผ่านเพื่อ encrypt</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Your chat preferences" xml:space="preserve">
|
||||
<source>Your chat preferences</source>
|
||||
<note>alert title</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Your chat profiles" xml:space="preserve">
|
||||
<source>Your chat profiles</source>
|
||||
<target>โปรไฟล์แชทของคุณ</target>
|
||||
@@ -7218,6 +7402,10 @@ Repeat connection request?</source>
|
||||
<target>ผู้ติดต่อของคุณจะยังคงเชื่อมต่ออยู่</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Your credentials may be sent unencrypted." xml:space="preserve">
|
||||
<source>Your credentials may be sent unencrypted.</source>
|
||||
<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">
|
||||
<source>Your current chat database will be DELETED and REPLACED with the imported one.</source>
|
||||
<target>ฐานข้อมูลแชทปัจจุบันของคุณจะถูกลบและแทนที่ด้วยฐานข้อมูลที่นำเข้า</target>
|
||||
@@ -7246,13 +7434,15 @@ Repeat connection request?</source>
|
||||
<source>Your profile **%@** will be shared.</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Your profile is stored on your device and shared only with your contacts. SimpleX servers cannot see your profile." xml:space="preserve">
|
||||
<source>Your profile is stored on your device and shared only with your contacts.
|
||||
SimpleX servers cannot see your profile.</source>
|
||||
<target>โปรไฟล์ของคุณจะถูกจัดเก็บไว้ในอุปกรณ์ของคุณและแชร์กับผู้ติดต่อของคุณเท่านั้น
|
||||
เซิร์ฟเวอร์ SimpleX ไม่สามารถดูโปรไฟล์ของคุณได้</target>
|
||||
<trans-unit id="Your profile is stored on your device and shared only with your contacts. SimpleX servers cannot see your profile." xml:space="preserve">
|
||||
<source>Your profile is stored on your device and shared only with your contacts. SimpleX servers cannot see your profile.</source>
|
||||
<target>โปรไฟล์ของคุณจะถูกจัดเก็บไว้ในอุปกรณ์ของคุณและแชร์กับผู้ติดต่อของคุณเท่านั้น เซิร์ฟเวอร์ SimpleX ไม่สามารถดูโปรไฟล์ของคุณได้</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</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>
|
||||
<note>alert message</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Your profile, contacts and delivered messages are stored on your device." xml:space="preserve">
|
||||
<source>Your profile, contacts and delivered messages are stored on your device.</source>
|
||||
<target>โปรไฟล์ รายชื่อผู้ติดต่อ และข้อความที่ส่งของคุณจะถูกจัดเก็บไว้ในอุปกรณ์ของคุณ</target>
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -161,11 +161,31 @@
|
||||
<target>%d днів</target>
|
||||
<note>time interval</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="%d file(s) are still being downloaded." xml:space="preserve">
|
||||
<source>%d file(s) are still being downloaded.</source>
|
||||
<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>
|
||||
<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>
|
||||
<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>
|
||||
<note>forward confirmation reason</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="%d hours" xml:space="preserve">
|
||||
<source>%d hours</source>
|
||||
<target>%d годин</target>
|
||||
<note>time interval</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="%d messages not forwarded" xml:space="preserve">
|
||||
<source>%d messages not forwarded</source>
|
||||
<note>alert title</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="%d min" xml:space="preserve">
|
||||
<source>%d min</source>
|
||||
<target>%d хв</target>
|
||||
@@ -727,7 +747,7 @@
|
||||
<trans-unit id="All profiles" xml:space="preserve">
|
||||
<source>All profiles</source>
|
||||
<target>Всі профілі</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
<note>profile dropdown</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="All your contacts will remain connected." xml:space="preserve">
|
||||
<source>All your contacts will remain connected.</source>
|
||||
@@ -919,6 +939,10 @@
|
||||
<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>
|
||||
@@ -1024,6 +1048,10 @@
|
||||
<target>Автоматичне прийняття зображень</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Auto-accept settings" xml:space="preserve">
|
||||
<source>Auto-accept settings</source>
|
||||
<note>alert title</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Back" xml:space="preserve">
|
||||
<source>Back</source>
|
||||
<target>Назад</target>
|
||||
@@ -1049,11 +1077,19 @@
|
||||
<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>
|
||||
@@ -1064,6 +1100,18 @@
|
||||
<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>
|
||||
@@ -1197,7 +1245,7 @@
|
||||
<trans-unit id="Cancel" xml:space="preserve">
|
||||
<source>Cancel</source>
|
||||
<target>Скасувати</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
<note>alert button</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Cancel migration" xml:space="preserve">
|
||||
<source>Cancel migration</source>
|
||||
@@ -1217,7 +1265,7 @@
|
||||
<trans-unit id="Cannot receive file" xml:space="preserve">
|
||||
<source>Cannot receive file</source>
|
||||
<target>Не вдається отримати файл</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
<note>alert title</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Capacity exceeded - recipient did not receive previously sent messages." xml:space="preserve">
|
||||
<source>Capacity exceeded - recipient did not receive previously sent messages.</source>
|
||||
@@ -1345,6 +1393,15 @@
|
||||
<target>Налаштування чату</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Chat preferences were changed." xml:space="preserve">
|
||||
<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>
|
||||
@@ -1873,6 +1930,10 @@ 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>
|
||||
@@ -2167,6 +2228,10 @@ 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>
|
||||
@@ -2417,6 +2482,10 @@ This is your own one-time link!</source>
|
||||
<target>Не надсилайте історію новим користувачам.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Do not use credentials with proxy." xml:space="preserve">
|
||||
<source>Do not use credentials with proxy.</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Don't create address" xml:space="preserve">
|
||||
<source>Don't create address</source>
|
||||
<target>Не створювати адресу</target>
|
||||
@@ -2440,7 +2509,8 @@ This is your own one-time link!</source>
|
||||
<trans-unit id="Download" xml:space="preserve">
|
||||
<source>Download</source>
|
||||
<target>Завантажити</target>
|
||||
<note>chat item action</note>
|
||||
<note>alert button
|
||||
chat item action</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Download errors" xml:space="preserve">
|
||||
<source>Download errors</source>
|
||||
@@ -2457,6 +2527,10 @@ This is your own one-time link!</source>
|
||||
<target>Завантажити файл</target>
|
||||
<note>server test step</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Download files" xml:space="preserve">
|
||||
<source>Download files</source>
|
||||
<note>alert action</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Downloaded" xml:space="preserve">
|
||||
<source>Downloaded</source>
|
||||
<target>Завантажено</target>
|
||||
@@ -2870,6 +2944,10 @@ This is your own one-time link!</source>
|
||||
<target>Помилка завантаження %@ серверів</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Error migrating settings" xml:space="preserve">
|
||||
<source>Error migrating settings</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Error opening chat" xml:space="preserve">
|
||||
<source>Error opening chat</source>
|
||||
<target>Помилка відкриття чату</target>
|
||||
@@ -2878,7 +2956,7 @@ This is your own one-time link!</source>
|
||||
<trans-unit id="Error receiving file" xml:space="preserve">
|
||||
<source>Error receiving file</source>
|
||||
<target>Помилка отримання файлу</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
<note>alert title</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Error reconnecting server" xml:space="preserve">
|
||||
<source>Error reconnecting server</source>
|
||||
@@ -2977,7 +3055,7 @@ This is your own one-time link!</source>
|
||||
<trans-unit id="Error switching profile!" xml:space="preserve">
|
||||
<source>Error switching profile!</source>
|
||||
<target>Помилка перемикання профілю!</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
<note>alertTitle</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Error synchronizing connection" xml:space="preserve">
|
||||
<source>Error synchronizing connection</source>
|
||||
@@ -3022,8 +3100,7 @@ This is your own one-time link!</source>
|
||||
<trans-unit id="Error: %@" xml:space="preserve">
|
||||
<source>Error: %@</source>
|
||||
<target>Помилка: %@</target>
|
||||
<note>file error text
|
||||
snd error text</note>
|
||||
<note>alert message</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Error: URL is invalid" xml:space="preserve">
|
||||
<source>Error: URL is invalid</source>
|
||||
@@ -3110,6 +3187,11 @@ This is your own one-time link!</source>
|
||||
<target>Помилка файлу</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="File errors: %@" xml:space="preserve">
|
||||
<source>File errors:
|
||||
%@</source>
|
||||
<note>alert message</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="File not found - most likely file was deleted or cancelled." xml:space="preserve">
|
||||
<source>File not found - most likely file was deleted or cancelled.</source>
|
||||
<target>Файл не знайдено - найімовірніше, файл було видалено або скасовано.</target>
|
||||
@@ -3245,11 +3327,27 @@ This is your own one-time link!</source>
|
||||
<target>Пересилання</target>
|
||||
<note>chat item action</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Forward %d message(s)?" xml:space="preserve">
|
||||
<source>Forward %d message(s)?</source>
|
||||
<note>alert title</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Forward and save messages" xml:space="preserve">
|
||||
<source>Forward and save messages</source>
|
||||
<target>Пересилання та збереження повідомлень</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Forward messages" xml:space="preserve">
|
||||
<source>Forward messages</source>
|
||||
<note>alert action</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Forward messages without files?" xml:space="preserve">
|
||||
<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>
|
||||
@@ -3260,6 +3358,10 @@ This is your own one-time link!</source>
|
||||
<target>Переслано з</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Forwarding %lld messages" xml:space="preserve">
|
||||
<source>Forwarding %lld messages</source>
|
||||
<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">
|
||||
<source>Forwarding server %@ failed to connect to destination server %@. Please try later.</source>
|
||||
<target>Серверу переадресації %@ не вдалося з'єднатися з сервером призначення %@. Спробуйте пізніше.</target>
|
||||
@@ -3309,11 +3411,6 @@ Error: %2$@</source>
|
||||
<target>Повне ім'я (необов'язково)</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Full name:" xml:space="preserve">
|
||||
<source>Full name:</source>
|
||||
<target>Повне ім'я:</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Fully decentralized – visible only to members." xml:space="preserve">
|
||||
<source>Fully decentralized – visible only to members.</source>
|
||||
<target>Повністю децентралізована - видима лише для учасників.</target>
|
||||
@@ -3559,6 +3656,10 @@ Error: %2$@</source>
|
||||
<target>Сервери ICE (по одному на лінію)</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="IP address" xml:space="preserve">
|
||||
<source>IP address</source>
|
||||
<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">
|
||||
<source>If you can't meet in person, show QR code in a video call, or share the link.</source>
|
||||
<target>Якщо ви не можете зустрітися особисто, покажіть QR-код у відеодзвінку або поділіться посиланням.</target>
|
||||
@@ -3634,6 +3735,11 @@ 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>
|
||||
@@ -4258,6 +4364,10 @@ This is your link for group %@!</source>
|
||||
<target>Надіслані повідомлення</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Messages were deleted after you selected them." xml:space="preserve">
|
||||
<source>Messages were deleted after you selected them.</source>
|
||||
<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">
|
||||
<source>Messages, files and calls are protected by **end-to-end encryption** with perfect forward secrecy, repudiation and break-in recovery.</source>
|
||||
<target>Повідомлення, файли та дзвінки захищені **наскрізним шифруванням** з ідеальною секретністю переадресації, відмовою та відновленням після злому.</target>
|
||||
@@ -4413,6 +4523,14 @@ 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>
|
||||
@@ -4533,6 +4651,14 @@ 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>
|
||||
@@ -4553,6 +4679,10 @@ This is your link for group %@!</source>
|
||||
<target>Нічого не вибрано</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Nothing to forward!" xml:space="preserve">
|
||||
<source>Nothing to forward!</source>
|
||||
<note>alert title</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Notifications" xml:space="preserve">
|
||||
<source>Notifications</source>
|
||||
<target>Сповіщення</target>
|
||||
@@ -4585,7 +4715,7 @@ This is your link for group %@!</source>
|
||||
<trans-unit id="Ok" xml:space="preserve">
|
||||
<source>Ok</source>
|
||||
<target>Гаразд</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
<note>alert button</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Old database" xml:space="preserve">
|
||||
<source>Old database</source>
|
||||
@@ -4776,6 +4906,11 @@ Requires compatible VPN.</source>
|
||||
<target>Інші сервери %@</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Other file errors: %@" xml:space="preserve">
|
||||
<source>Other file errors:
|
||||
%@</source>
|
||||
<note>alert message</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="PING count" xml:space="preserve">
|
||||
<source>PING count</source>
|
||||
<target>Кількість PING</target>
|
||||
@@ -4811,6 +4946,10 @@ Requires compatible VPN.</source>
|
||||
<target>Пароль встановлено!</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Password" xml:space="preserve">
|
||||
<source>Password</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Password to show" xml:space="preserve">
|
||||
<source>Password to show</source>
|
||||
<target>Показати пароль</target>
|
||||
@@ -4960,6 +5099,10 @@ Error: %@</source>
|
||||
<target>Польський інтерфейс</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Port" xml:space="preserve">
|
||||
<source>Port</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</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>Можливо, в адресі сервера неправильно вказано відбиток сертифіката</target>
|
||||
@@ -5045,16 +5188,6 @@ Error: %@</source>
|
||||
<target>Зображення профілю</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Profile name" xml:space="preserve">
|
||||
<source>Profile name</source>
|
||||
<target>Назва профілю</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Profile name:" xml:space="preserve">
|
||||
<source>Profile name:</source>
|
||||
<target>Ім'я профілю:</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Profile password" xml:space="preserve">
|
||||
<source>Profile password</source>
|
||||
<target>Пароль до профілю</target>
|
||||
@@ -5157,6 +5290,10 @@ Enable in *Network & servers* settings.</source>
|
||||
<target>Проксі-сервери</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Proxy requires password" xml:space="preserve">
|
||||
<source>Proxy requires password</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Push notifications" xml:space="preserve">
|
||||
<source>Push notifications</source>
|
||||
<target>Push-повідомлення</target>
|
||||
@@ -5378,6 +5515,10 @@ Enable in *Network & servers* settings.</source>
|
||||
<target>Видалити</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Remove archive?" xml:space="preserve">
|
||||
<source>Remove archive?</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Remove image" xml:space="preserve">
|
||||
<source>Remove image</source>
|
||||
<target>Видалити зображення</target>
|
||||
@@ -5558,6 +5699,10 @@ Enable in *Network & servers* settings.</source>
|
||||
<target>Сервер SMP</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="SOCKS proxy" xml:space="preserve">
|
||||
<source>SOCKS proxy</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Safely receive files" xml:space="preserve">
|
||||
<source>Safely receive files</source>
|
||||
<target>Безпечне отримання файлів</target>
|
||||
@@ -5571,12 +5716,13 @@ Enable in *Network & servers* settings.</source>
|
||||
<trans-unit id="Save" xml:space="preserve">
|
||||
<source>Save</source>
|
||||
<target>Зберегти</target>
|
||||
<note>chat item action</note>
|
||||
<note>alert button
|
||||
chat item action</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Save (and notify contacts)" xml:space="preserve">
|
||||
<source>Save (and notify contacts)</source>
|
||||
<target>Зберегти (і повідомити контактам)</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
<note>alert button</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Save and notify contact" xml:space="preserve">
|
||||
<source>Save and notify contact</source>
|
||||
@@ -5603,11 +5749,6 @@ Enable in *Network & servers* settings.</source>
|
||||
<target>Зберегти архів</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Save auto-accept settings" xml:space="preserve">
|
||||
<source>Save auto-accept settings</source>
|
||||
<target>Зберегти налаштування автоприйому</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Save group profile" xml:space="preserve">
|
||||
<source>Save group profile</source>
|
||||
<target>Зберегти профіль групи</target>
|
||||
@@ -5643,16 +5784,15 @@ Enable in *Network & servers* settings.</source>
|
||||
<target>Зберегти сервери?</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Save settings?" xml:space="preserve">
|
||||
<source>Save settings?</source>
|
||||
<target>Зберегти налаштування?</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Save welcome message?" xml:space="preserve">
|
||||
<source>Save welcome message?</source>
|
||||
<target>Зберегти вітальне повідомлення?</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Save your profile?" xml:space="preserve">
|
||||
<source>Save your profile?</source>
|
||||
<note>alert title</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Saved" xml:space="preserve">
|
||||
<source>Saved</source>
|
||||
<target>Збережено</target>
|
||||
@@ -5673,6 +5813,10 @@ Enable in *Network & servers* settings.</source>
|
||||
<target>Збережене повідомлення</target>
|
||||
<note>message info title</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Saving %lld messages" xml:space="preserve">
|
||||
<source>Saving %lld messages</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Scale" xml:space="preserve">
|
||||
<source>Scale</source>
|
||||
<target>Масштаб</target>
|
||||
@@ -5875,7 +6019,7 @@ Enable in *Network & servers* settings.</source>
|
||||
<trans-unit id="Sender cancelled file transfer." xml:space="preserve">
|
||||
<source>Sender cancelled file transfer.</source>
|
||||
<target>Відправник скасував передачу файлу.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
<note>alert message</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Sender may have deleted the connection request." xml:space="preserve">
|
||||
<source>Sender may have deleted the connection request.</source>
|
||||
@@ -5972,6 +6116,10 @@ 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>
|
||||
@@ -6092,6 +6240,10 @@ Enable in *Network & servers* settings.</source>
|
||||
<target>Налаштування</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Settings were changed." xml:space="preserve">
|
||||
<source>Settings were changed.</source>
|
||||
<note>alert message</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Shape profile images" xml:space="preserve">
|
||||
<source>Shape profile images</source>
|
||||
<target>Сформуйте зображення профілю</target>
|
||||
@@ -6266,6 +6418,10 @@ 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>
|
||||
@@ -6296,6 +6452,10 @@ Enable in *Network & servers* settings.</source>
|
||||
<target>М'який</target>
|
||||
<note>blur media</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Some app settings were not migrated." xml:space="preserve">
|
||||
<source>Some app settings were not migrated.</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Some file(s) were not exported:" xml:space="preserve">
|
||||
<source>Some file(s) were not exported:</source>
|
||||
<target>Деякі файли не було експортовано:</target>
|
||||
@@ -6436,6 +6596,14 @@ 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>
|
||||
@@ -6667,6 +6835,10 @@ It can happen because of some bug or when the connection is compromised.</source
|
||||
<target>Текст, який ви вставили, не є посиланням SimpleX.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</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>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Themes" xml:space="preserve">
|
||||
<source>Themes</source>
|
||||
<target>Теми</target>
|
||||
@@ -6794,6 +6966,14 @@ 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>
|
||||
@@ -6947,7 +7127,7 @@ You will be prompted to complete authentication before this feature is enabled.<
|
||||
<trans-unit id="Unknown servers!" xml:space="preserve">
|
||||
<source>Unknown servers!</source>
|
||||
<target>Невідомі сервери!</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
<note>alert title</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Unless you use iOS call interface, enable Do Not Disturb mode to avoid interruptions." xml:space="preserve">
|
||||
<source>Unless you use iOS call interface, enable Do Not Disturb mode to avoid interruptions.</source>
|
||||
@@ -7061,6 +7241,10 @@ To connect, please ask your contact to create another connection link and check
|
||||
<target>Використовуйте хости .onion</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Use SOCKS proxy" xml:space="preserve">
|
||||
<source>Use SOCKS proxy</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Use SimpleX Chat servers?" xml:space="preserve">
|
||||
<source>Use SimpleX Chat servers?</source>
|
||||
<target>Використовувати сервери SimpleX Chat?</target>
|
||||
@@ -7126,16 +7310,15 @@ 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>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Username" xml:space="preserve">
|
||||
<source>Username</source>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Using SimpleX Chat servers." xml:space="preserve">
|
||||
<source>Using SimpleX Chat servers.</source>
|
||||
<target>Використання серверів SimpleX Chat.</target>
|
||||
@@ -7369,7 +7552,7 @@ To connect, please ask your contact to create another connection link and check
|
||||
<trans-unit id="Without Tor or VPN, your IP address will be visible to these XFTP relays: %@." xml:space="preserve">
|
||||
<source>Without Tor or VPN, your IP address will be visible to these XFTP relays: %@.</source>
|
||||
<target>Без Tor або VPN ваша IP-адреса буде видимою для цих XFTP-ретрансляторів: %@.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
<note>alert message</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Wrong database passphrase" xml:space="preserve">
|
||||
<source>Wrong database passphrase</source>
|
||||
@@ -7396,11 +7579,6 @@ To connect, please ask your contact to create another connection link and check
|
||||
<target>XFTP-сервер</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="You" xml:space="preserve">
|
||||
<source>You</source>
|
||||
<target>Ти</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="You **must not** use the same database on two devices." xml:space="preserve">
|
||||
<source>You **must not** use the same database on two devices.</source>
|
||||
<target>Ви **не повинні використовувати** одну і ту ж базу даних на двох пристроях.</target>
|
||||
@@ -7750,6 +7928,10 @@ Repeat connection request?</source>
|
||||
<target>Ваша база даних чату не зашифрована - встановіть ключову фразу, щоб зашифрувати її.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Your chat preferences" xml:space="preserve">
|
||||
<source>Your chat preferences</source>
|
||||
<note>alert title</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Your chat profiles" xml:space="preserve">
|
||||
<source>Your chat profiles</source>
|
||||
<target>Ваші профілі чату</target>
|
||||
@@ -7774,6 +7956,10 @@ Repeat connection request?</source>
|
||||
<target>Ваші контакти залишаться на зв'язку.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Your credentials may be sent unencrypted." xml:space="preserve">
|
||||
<source>Your credentials may be sent unencrypted.</source>
|
||||
<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">
|
||||
<source>Your current chat database will be DELETED and REPLACED with the imported one.</source>
|
||||
<target>Ваша поточна база даних чату буде ВИДАЛЕНА і ЗАМІНЕНА імпортованою.</target>
|
||||
@@ -7804,13 +7990,15 @@ Repeat connection request?</source>
|
||||
<target>Ваш профіль **%@** буде опублікований.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Your profile is stored on your device and shared only with your contacts. SimpleX servers cannot see your profile." xml:space="preserve">
|
||||
<source>Your profile is stored on your device and shared only with your contacts.
|
||||
SimpleX servers cannot see your profile.</source>
|
||||
<target>Ваш профіль зберігається на вашому пристрої і доступний лише вашим контактам.
|
||||
Сервери SimpleX не бачать ваш профіль.</target>
|
||||
<trans-unit id="Your profile is stored on your device and shared only with your contacts. SimpleX servers cannot see your profile." xml:space="preserve">
|
||||
<source>Your profile is stored on your device and shared only with your contacts. SimpleX servers cannot see your profile.</source>
|
||||
<target>Ваш профіль зберігається на вашому пристрої і доступний лише вашим контактам. Сервери SimpleX не бачать ваш профіль.</target>
|
||||
<note>No comment provided by engineer.</note>
|
||||
</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>
|
||||
<note>alert message</note>
|
||||
</trans-unit>
|
||||
<trans-unit id="Your profile, contacts and delivered messages are stored on your device." xml:space="preserve">
|
||||
<source>Your profile, contacts and delivered messages are stored on your device.</source>
|
||||
<target>Ваш профіль, контакти та доставлені повідомлення зберігаються на вашому пристрої.</target>
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -26,7 +26,7 @@ enum NSENotification {
|
||||
case nse(UNMutableNotificationContent)
|
||||
case callkit(RcvCallInvitation)
|
||||
case empty
|
||||
case msgInfo(NtfMsgInfo)
|
||||
case msgInfo(NtfMsgAckInfo)
|
||||
|
||||
var isCallInvitation: Bool {
|
||||
switch self {
|
||||
@@ -119,7 +119,9 @@ 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?
|
||||
@@ -191,17 +193,21 @@ 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.ntfMessage_ == nil ? 0 : 1))")
|
||||
logger.debug("NotificationService: receiveNtfMessages: apiGetNtfMessage \(String(describing: ntfInfo.receivedMsg_ == nil ? 0 : 1))")
|
||||
if let connEntity = ntfInfo.connEntity_ {
|
||||
setBestAttemptNtf(
|
||||
ntfInfo.ntfsEnabled
|
||||
? .nse(createConnectionEventNtf(ntfInfo.user, connEntity))
|
||||
: .empty
|
||||
)
|
||||
if let id = connEntity.id, ntfInfo.msgTs != nil {
|
||||
if let id = connEntity.id, ntfInfo.expectedMsg_ != nil {
|
||||
notificationInfo = ntfInfo
|
||||
receiveEntityId = id
|
||||
expectedMessage = ntfInfo.ntfMessage_.flatMap { $0.msgId }
|
||||
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
|
||||
shouldProcessNtf = true
|
||||
return
|
||||
}
|
||||
@@ -219,22 +225,34 @@ class NotificationService: UNNotificationServiceExtension {
|
||||
}
|
||||
|
||||
func processReceivedNtf(_ ntf: NSENotification) -> Bool {
|
||||
guard let ntfInfo = notificationInfo, let msgTs = ntfInfo.msgTs else { return false }
|
||||
guard let ntfInfo = notificationInfo, let expectedMsgTs = ntfInfo.expectedMsg_?.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")
|
||||
logger.debug("NotificationService processNtf: msgInfo msgId = \(info.msgId, privacy: .private): expected")
|
||||
self.deliverBestAttemptNtf()
|
||||
return true
|
||||
} else if info.msgTs > msgTs {
|
||||
logger.debug("NotificationService processNtf: unexpected msgInfo, let other instance to process it, stopping this one")
|
||||
} 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")
|
||||
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: unknown message, let other instance to process it")
|
||||
logger.debug("NotificationService processNtf: msgInfo msgId = \(info.msgId, privacy: .private): unknown message, let other instance to process it")
|
||||
self.deliverBestAttemptNtf()
|
||||
return false
|
||||
}
|
||||
} else if ntfInfo.user.showNotifications {
|
||||
@@ -692,9 +710,9 @@ func apiGetNtfMessage(nonce: String, encNtfInfo: String) -> NtfMessages? {
|
||||
return nil
|
||||
}
|
||||
let r = sendSimpleXCmd(.apiGetNtfMessage(nonce: nonce, encNtfInfo: encNtfInfo))
|
||||
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_)
|
||||
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_)
|
||||
} else if case let .chatCmdError(_, error) = r {
|
||||
logger.debug("apiGetNtfMessage error response: \(String.init(describing: error))")
|
||||
} else {
|
||||
@@ -703,6 +721,20 @@ 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))
|
||||
@@ -740,8 +772,8 @@ func setNetworkConfig(_ cfg: NetCfg) throws {
|
||||
struct NtfMessages {
|
||||
var user: User
|
||||
var connEntity_: ConnectionEntity?
|
||||
var msgTs: Date?
|
||||
var ntfMessage_: NtfMsgInfo?
|
||||
var expectedMsg_: NtfMsgInfo?
|
||||
var receivedMsg_: NtfMsgInfo?
|
||||
|
||||
var ntfsEnabled: Bool {
|
||||
user.showNotifications && (connEntity_?.ntfsEnabled ?? false)
|
||||
|
||||
@@ -320,7 +320,8 @@ class ShareModel: ObservableObject {
|
||||
}
|
||||
await ch.completeFile()
|
||||
if await !ch.isRunning { break }
|
||||
case let .chatItemStatusUpdated(_, ci):
|
||||
case let .chatItemsStatusesUpdated(_, chatItems):
|
||||
guard let ci = chatItems.last else { continue }
|
||||
guard isMessage(for: ci) else { continue }
|
||||
if let (title, message) = ci.chatItem.meta.itemStatus.statusInfo {
|
||||
// `title` and `message` already localized and interpolated
|
||||
@@ -416,7 +417,7 @@ fileprivate func getSharedContent(_ ip: NSItemProvider) async -> Result<SharedCo
|
||||
let data = try? Data(contentsOf: url),
|
||||
let image = UIImage(data: data),
|
||||
let cryptoFile = saveFile(data, generateNewFileName("IMG", "gif"), encrypted: privacyEncryptLocalFilesGroupDefault.get()),
|
||||
let preview = resizeImageToStrSize(image, maxDataSize: MAX_DATA_SIZE) {
|
||||
let preview = await resizeImageToStrSize(image, maxDataSize: MAX_DATA_SIZE) {
|
||||
.success(.image(preview: preview, cryptoFile: cryptoFile))
|
||||
} else { .failure(ErrorAlert("Error preparing message")) }
|
||||
|
||||
@@ -424,7 +425,7 @@ fileprivate func getSharedContent(_ ip: NSItemProvider) async -> Result<SharedCo
|
||||
} else {
|
||||
if let image = await staticImage(),
|
||||
let cryptoFile = saveImage(image),
|
||||
let preview = resizeImageToStrSize(image, maxDataSize: MAX_DATA_SIZE) {
|
||||
let preview = await resizeImageToStrSize(image, maxDataSize: MAX_DATA_SIZE) {
|
||||
.success(.image(preview: preview, cryptoFile: cryptoFile))
|
||||
} else { .failure(ErrorAlert("Error preparing message")) }
|
||||
}
|
||||
@@ -434,7 +435,7 @@ fileprivate func getSharedContent(_ ip: NSItemProvider) async -> Result<SharedCo
|
||||
if let url = try? await inPlaceUrl(type: type),
|
||||
let trancodedUrl = await transcodeVideo(from: url),
|
||||
let (image, duration) = AVAsset(url: trancodedUrl).generatePreview(),
|
||||
let preview = resizeImageToStrSize(image, maxDataSize: MAX_DATA_SIZE),
|
||||
let preview = await resizeImageToStrSize(image, maxDataSize: MAX_DATA_SIZE),
|
||||
let cryptoFile = moveTempFileFromURL(trancodedUrl) {
|
||||
try? FileManager.default.removeItem(at: trancodedUrl)
|
||||
return .success(.movie(preview: preview, duration: duration, cryptoFile: cryptoFile))
|
||||
|
||||
@@ -29,7 +29,7 @@
|
||||
"Database error" = "Error en base de datos";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Database passphrase is different from saved in the keychain." = "La contraseña de la base de datos es distinta a la almacenada en keychain.";
|
||||
"Database passphrase is different from saved in the keychain." = "La contraseña de la base de datos es diferente a la almacenada en keychain.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Database passphrase is required to open chat." = "Se requiere la contraseña de la base de datos para abrir la aplicación.";
|
||||
|
||||
@@ -17,7 +17,7 @@
|
||||
"Comment" = "Hozzászólás";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Currently maximum supported file size is %@." = "Jelenleg a maximális támogatott fájlméret %@.";
|
||||
"Currently maximum supported file size is %@." = "Jelenleg a maximálisan támogatott fájlméret: %@.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Database downgrade required" = "Adatbázis visszafejlesztése szükséges";
|
||||
@@ -26,13 +26,13 @@
|
||||
"Database encrypted!" = "Adatbázis titkosítva!";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Database error" = "Adatbázis hiba";
|
||||
"Database error" = "Adatbázishiba";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Database passphrase is different from saved in the keychain." = "Az adatbázis jelmondata eltér a kulcstartóban lévőtől.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Database passphrase is required to open chat." = "Adatbázis jelmondat szükséges a csevegés megnyitásához.";
|
||||
"Database passphrase is required to open chat." = "Adatbázis-jelmondat szükséges a csevegés megnyitásához.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Database upgrade required" = "Adatbázis fejlesztése szükséges";
|
||||
@@ -50,13 +50,13 @@
|
||||
"File error" = "Fájlhiba";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Incompatible database version" = "Nem kompatibilis adatbázis verzió";
|
||||
"Incompatible database version" = "Nem kompatibilis adatbázis-verzió";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"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!";
|
||||
@@ -95,7 +95,7 @@
|
||||
"Slow network?" = "Lassú internetkapcsolat?";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Unknown database error: %@" = "Ismeretlen adatbázis hiba: %@";
|
||||
"Unknown database error: %@" = "Ismeretlen adatbázishiba: %@";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Unsupported format" = "Nem támogatott formátum";
|
||||
@@ -104,8 +104,8 @@
|
||||
"Wait" = "Várjon";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Wrong database passphrase" = "Hibás adatbázis jelmondat";
|
||||
"Wrong database passphrase" = "Hibás adatbázis-jelmondat";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"You can allow sharing in Privacy & Security / SimpleX Lock settings." = "A megosztást az Adatvédelem és biztonság / SimpleX zár menüben engedélyezheti.";
|
||||
"You can allow sharing in Privacy & Security / SimpleX Lock settings." = "A megosztást az Adatvédelem és biztonság / SimpleX-zár menüben engedélyezheti.";
|
||||
|
||||
|
||||
@@ -32,7 +32,7 @@
|
||||
"Database passphrase is different from saved in the keychain." = "Het wachtwoord van de database verschilt van het wachtwoord die in de keychain is opgeslagen.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Database passphrase is required to open chat." = "Database wachtwoord is vereist om je gesprekken te openen.";
|
||||
"Database passphrase is required to open chat." = "Database wachtwoord is vereist om je chats te openen.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Database upgrade required" = "Database upgrade vereist";
|
||||
|
||||
@@ -1,7 +1,9 @@
|
||||
/*
|
||||
InfoPlist.strings
|
||||
SimpleX
|
||||
/* 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.";
|
||||
|
||||
Created by EP on 30/07/2024.
|
||||
Copyright © 2024 SimpleX Chat. All rights reserved.
|
||||
*/
|
||||
|
||||
@@ -1,7 +1,111 @@
|
||||
/*
|
||||
Localizable.strings
|
||||
SimpleX
|
||||
/* 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.";
|
||||
|
||||
Created by EP on 30/07/2024.
|
||||
Copyright © 2024 SimpleX Chat. All rights reserved.
|
||||
*/
|
||||
|
||||
@@ -1,7 +1,9 @@
|
||||
/*
|
||||
InfoPlist.strings
|
||||
SimpleX
|
||||
/* Bundle display name */
|
||||
"CFBundleDisplayName" = "SimpleX SE";
|
||||
|
||||
/* Bundle name */
|
||||
"CFBundleName" = "SimpleX SE";
|
||||
|
||||
/* Copyright (human-readable) */
|
||||
"NSHumanReadableCopyright" = "版权所有 © 2024 SimpleX Chat。保留所有权利。";
|
||||
|
||||
Created by EP on 30/07/2024.
|
||||
Copyright © 2024 SimpleX Chat. All rights reserved.
|
||||
*/
|
||||
|
||||
@@ -1,7 +1,111 @@
|
||||
/*
|
||||
Localizable.strings
|
||||
SimpleX
|
||||
/* No comment provided by engineer. */
|
||||
"%@" = "%@";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"App is locked!" = "应用程序已锁定!";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Cancel" = "取消";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Cannot access keychain to save database password" = "无法访问钥匙串以保存数据库密码";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Cannot forward message" = "无法转发消息";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Comment" = "评论";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Currently maximum supported file size is %@." = "当前支持的最大文件大小为 %@。";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Database downgrade required" = "需要数据库降级";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Database encrypted!" = "数据库已加密!";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Database error" = "数据库错误";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Database passphrase is different from saved in the keychain." = "数据库密码与保存在钥匙串中的密码不同。";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Database passphrase is required to open chat." = "需要数据库密码才能打开聊天。";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Database upgrade required" = "需要升级数据库";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Error preparing file" = "准备文件时出错";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Error preparing message" = "准备消息时出错";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Error: %@" = "错误:%@";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"File error" = "文件错误";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Incompatible database version" = "不兼容的数据库版本";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Invalid migration confirmation" = "无效的迁移确认";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Keychain error" = "钥匙串错误";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Large file!" = "大文件!";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"No active profile" = "无活动配置文件";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Ok" = "好的";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Open the app to downgrade the database." = "打开应用程序以降级数据库。";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Open the app to upgrade the database." = "打开应用程序以升级数据库。";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Passphrase" = "密码";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Please create a profile in the SimpleX app" = "请在 SimpleX 应用程序中创建配置文件";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Selected chat preferences prohibit this message." = "选定的聊天首选项禁止此消息。";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Sending a message takes longer than expected." = "发送消息所需的时间比预期的要长。";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Sending message…" = "正在发送消息…";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Share" = "共享";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Slow network?" = "网络速度慢?";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Unknown database error: %@" = "未知数据库错误: %@";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Unsupported format" = "不支持的格式";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Wait" = "等待";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Wrong database passphrase" = "数据库密码错误";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"You can allow sharing in Privacy & Security / SimpleX Lock settings." = "您可以在 \"隐私与安全\"/\"SimpleX Lock \"设置中允许共享。";
|
||||
|
||||
Created by EP on 30/07/2024.
|
||||
Copyright © 2024 SimpleX Chat. All rights reserved.
|
||||
*/
|
||||
|
||||
@@ -167,11 +167,6 @@
|
||||
648679AB2BC96A74006456E7 /* ChatItemForwardingView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 648679AA2BC96A74006456E7 /* ChatItemForwardingView.swift */; };
|
||||
649BCDA0280460FD00C3A862 /* ComposeImageView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 649BCD9F280460FD00C3A862 /* ComposeImageView.swift */; };
|
||||
649BCDA22805D6EF00C3A862 /* CIImageView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 649BCDA12805D6EF00C3A862 /* CIImageView.swift */; };
|
||||
64A208622C8F2CCC00AE9D01 /* libgmpxx.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 64A2085D2C8F2CCB00AE9D01 /* libgmpxx.a */; };
|
||||
64A208632C8F2CCC00AE9D01 /* libffi.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 64A2085E2C8F2CCB00AE9D01 /* libffi.a */; };
|
||||
64A208642C8F2CCC00AE9D01 /* libgmp.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 64A2085F2C8F2CCB00AE9D01 /* libgmp.a */; };
|
||||
64A208652C8F2CCC00AE9D01 /* libHSsimplex-chat-6.1.0.0-G2fNFSEVU486aN7U9YSuO7-ghc9.6.3.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 64A208602C8F2CCC00AE9D01 /* libHSsimplex-chat-6.1.0.0-G2fNFSEVU486aN7U9YSuO7-ghc9.6.3.a */; };
|
||||
64A208662C8F2CCC00AE9D01 /* libHSsimplex-chat-6.1.0.0-G2fNFSEVU486aN7U9YSuO7.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 64A208612C8F2CCC00AE9D01 /* libHSsimplex-chat-6.1.0.0-G2fNFSEVU486aN7U9YSuO7.a */; };
|
||||
64AA1C6927EE10C800AC7277 /* ContextItemView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 64AA1C6827EE10C800AC7277 /* ContextItemView.swift */; };
|
||||
64AA1C6C27F3537400AC7277 /* DeletedItemView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 64AA1C6B27F3537400AC7277 /* DeletedItemView.swift */; };
|
||||
64C06EB52A0A4A7C00792D4D /* ChatItemInfoView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 64C06EB42A0A4A7C00792D4D /* ChatItemInfoView.swift */; };
|
||||
@@ -209,12 +204,14 @@
|
||||
CE38A29C2C3FCD72005ED185 /* SwiftyGif in Frameworks */ = {isa = PBXBuildFile; productRef = CE38A29B2C3FCD72005ED185 /* SwiftyGif */; };
|
||||
CE75480A2C622630009579B7 /* SwipeLabel.swift in Sources */ = {isa = PBXBuildFile; fileRef = CE7548092C622630009579B7 /* SwipeLabel.swift */; };
|
||||
CE984D4B2C36C5D500E3AEFF /* ChatItemClipShape.swift in Sources */ = {isa = PBXBuildFile; fileRef = CE984D4A2C36C5D500E3AEFF /* ChatItemClipShape.swift */; };
|
||||
CEDB245B2C9CD71800FBC5F6 /* StickyScrollView.swift in Sources */ = {isa = PBXBuildFile; fileRef = CEDB245A2C9CD71800FBC5F6 /* StickyScrollView.swift */; };
|
||||
CEDE70222C48FD9500233B1F /* SEChatState.swift in Sources */ = {isa = PBXBuildFile; fileRef = CEDE70212C48FD9500233B1F /* SEChatState.swift */; };
|
||||
CEE723AA2C3BD3D70009AE93 /* ShareViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = CEE723A92C3BD3D70009AE93 /* ShareViewController.swift */; };
|
||||
CEE723B12C3BD3D70009AE93 /* SimpleX SE.appex in Embed App Extensions */ = {isa = PBXBuildFile; fileRef = CEE723A72C3BD3D70009AE93 /* SimpleX SE.appex */; settings = {ATTRIBUTES = (RemoveHeadersOnCopy, ); }; };
|
||||
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 */; };
|
||||
@@ -226,6 +223,11 @@
|
||||
E5DCF9712C590272007928CC /* Localizable.strings in Resources */ = {isa = PBXBuildFile; fileRef = E5DCF96F2C590272007928CC /* Localizable.strings */; };
|
||||
E5DCF9842C5902CE007928CC /* Localizable.strings in Resources */ = {isa = PBXBuildFile; fileRef = E5DCF9822C5902CE007928CC /* Localizable.strings */; };
|
||||
E5DCF9982C5906FF007928CC /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = E5DCF9962C5906FF007928CC /* InfoPlist.strings */; };
|
||||
E5E997C92CBA891A00D7A2FA /* libgmpxx.a in Frameworks */ = {isa = PBXBuildFile; fileRef = E5E997C42CBA891A00D7A2FA /* libgmpxx.a */; };
|
||||
E5E997CA2CBA891A00D7A2FA /* libgmp.a in Frameworks */ = {isa = PBXBuildFile; fileRef = E5E997C52CBA891A00D7A2FA /* libgmp.a */; };
|
||||
E5E997CB2CBA891A00D7A2FA /* libHSsimplex-chat-6.1.0.9-3X73OucN19a19eYgUK66sv-ghc9.6.3.a in Frameworks */ = {isa = PBXBuildFile; fileRef = E5E997C62CBA891A00D7A2FA /* libHSsimplex-chat-6.1.0.9-3X73OucN19a19eYgUK66sv-ghc9.6.3.a */; };
|
||||
E5E997CC2CBA891A00D7A2FA /* libffi.a in Frameworks */ = {isa = PBXBuildFile; fileRef = E5E997C72CBA891A00D7A2FA /* libffi.a */; };
|
||||
E5E997CD2CBA891A00D7A2FA /* libHSsimplex-chat-6.1.0.9-3X73OucN19a19eYgUK66sv.a in Frameworks */ = {isa = PBXBuildFile; fileRef = E5E997C82CBA891A00D7A2FA /* libHSsimplex-chat-6.1.0.9-3X73OucN19a19eYgUK66sv.a */; };
|
||||
/* End PBXBuildFile section */
|
||||
|
||||
/* Begin PBXContainerItemProxy section */
|
||||
@@ -508,11 +510,6 @@
|
||||
6493D667280ED77F007A76FB /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/Localizable.strings; sourceTree = "<group>"; };
|
||||
649BCD9F280460FD00C3A862 /* ComposeImageView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ComposeImageView.swift; sourceTree = "<group>"; };
|
||||
649BCDA12805D6EF00C3A862 /* CIImageView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CIImageView.swift; sourceTree = "<group>"; };
|
||||
64A2085D2C8F2CCB00AE9D01 /* libgmpxx.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = libgmpxx.a; sourceTree = "<group>"; };
|
||||
64A2085E2C8F2CCB00AE9D01 /* libffi.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = libffi.a; sourceTree = "<group>"; };
|
||||
64A2085F2C8F2CCB00AE9D01 /* libgmp.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = libgmp.a; sourceTree = "<group>"; };
|
||||
64A208602C8F2CCC00AE9D01 /* libHSsimplex-chat-6.1.0.0-G2fNFSEVU486aN7U9YSuO7-ghc9.6.3.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = "libHSsimplex-chat-6.1.0.0-G2fNFSEVU486aN7U9YSuO7-ghc9.6.3.a"; sourceTree = "<group>"; };
|
||||
64A208612C8F2CCC00AE9D01 /* libHSsimplex-chat-6.1.0.0-G2fNFSEVU486aN7U9YSuO7.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = "libHSsimplex-chat-6.1.0.0-G2fNFSEVU486aN7U9YSuO7.a"; sourceTree = "<group>"; };
|
||||
64AA1C6827EE10C800AC7277 /* ContextItemView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ContextItemView.swift; sourceTree = "<group>"; };
|
||||
64AA1C6B27F3537400AC7277 /* DeletedItemView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DeletedItemView.swift; sourceTree = "<group>"; };
|
||||
64C06EB42A0A4A7C00792D4D /* ChatItemInfoView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ChatItemInfoView.swift; sourceTree = "<group>"; };
|
||||
@@ -548,6 +545,7 @@
|
||||
CE3097FA2C4C0C9F00180898 /* ErrorAlert.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ErrorAlert.swift; sourceTree = "<group>"; };
|
||||
CE7548092C622630009579B7 /* SwipeLabel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SwipeLabel.swift; sourceTree = "<group>"; };
|
||||
CE984D4A2C36C5D500E3AEFF /* ChatItemClipShape.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ChatItemClipShape.swift; sourceTree = "<group>"; };
|
||||
CEDB245A2C9CD71800FBC5F6 /* StickyScrollView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = StickyScrollView.swift; sourceTree = "<group>"; };
|
||||
CEDE70212C48FD9500233B1F /* SEChatState.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SEChatState.swift; sourceTree = "<group>"; };
|
||||
CEE723A72C3BD3D70009AE93 /* SimpleX SE.appex */ = {isa = PBXFileReference; explicitFileType = "wrapper.app-extension"; includeInIndex = 0; path = "SimpleX SE.appex"; sourceTree = BUILT_PRODUCTS_DIR; };
|
||||
CEE723A92C3BD3D70009AE93 /* ShareViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ShareViewController.swift; sourceTree = "<group>"; };
|
||||
@@ -556,6 +554,7 @@
|
||||
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; };
|
||||
@@ -613,6 +612,11 @@
|
||||
E5DCF9A62C590731007928CC /* th */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = th; path = th.lproj/InfoPlist.strings; sourceTree = "<group>"; };
|
||||
E5DCF9A72C590732007928CC /* tr */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = tr; path = tr.lproj/InfoPlist.strings; sourceTree = "<group>"; };
|
||||
E5DCF9A82C590732007928CC /* uk */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = uk; path = uk.lproj/InfoPlist.strings; sourceTree = "<group>"; };
|
||||
E5E997C42CBA891A00D7A2FA /* libgmpxx.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = libgmpxx.a; sourceTree = "<group>"; };
|
||||
E5E997C52CBA891A00D7A2FA /* libgmp.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = libgmp.a; sourceTree = "<group>"; };
|
||||
E5E997C62CBA891A00D7A2FA /* libHSsimplex-chat-6.1.0.9-3X73OucN19a19eYgUK66sv-ghc9.6.3.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = "libHSsimplex-chat-6.1.0.9-3X73OucN19a19eYgUK66sv-ghc9.6.3.a"; sourceTree = "<group>"; };
|
||||
E5E997C72CBA891A00D7A2FA /* libffi.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = libffi.a; sourceTree = "<group>"; };
|
||||
E5E997C82CBA891A00D7A2FA /* libHSsimplex-chat-6.1.0.9-3X73OucN19a19eYgUK66sv.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = "libHSsimplex-chat-6.1.0.9-3X73OucN19a19eYgUK66sv.a"; sourceTree = "<group>"; };
|
||||
/* End PBXFileReference section */
|
||||
|
||||
/* Begin PBXFrameworksBuildPhase section */
|
||||
@@ -651,14 +655,14 @@
|
||||
isa = PBXFrameworksBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
files = (
|
||||
64A208662C8F2CCC00AE9D01 /* libHSsimplex-chat-6.1.0.0-G2fNFSEVU486aN7U9YSuO7.a in Frameworks */,
|
||||
64A208622C8F2CCC00AE9D01 /* libgmpxx.a in Frameworks */,
|
||||
64A208652C8F2CCC00AE9D01 /* libHSsimplex-chat-6.1.0.0-G2fNFSEVU486aN7U9YSuO7-ghc9.6.3.a in Frameworks */,
|
||||
E5E997C92CBA891A00D7A2FA /* libgmpxx.a in Frameworks */,
|
||||
E5E997CB2CBA891A00D7A2FA /* libHSsimplex-chat-6.1.0.9-3X73OucN19a19eYgUK66sv-ghc9.6.3.a in Frameworks */,
|
||||
E5E997CA2CBA891A00D7A2FA /* libgmp.a in Frameworks */,
|
||||
5CE2BA93284534B000EC33A6 /* libiconv.tbd in Frameworks */,
|
||||
E5E997CC2CBA891A00D7A2FA /* libffi.a in Frameworks */,
|
||||
5CE2BA94284534BB00EC33A6 /* libz.tbd in Frameworks */,
|
||||
64A208632C8F2CCC00AE9D01 /* libffi.a in Frameworks */,
|
||||
64A208642C8F2CCC00AE9D01 /* libgmp.a in Frameworks */,
|
||||
CE38A29C2C3FCD72005ED185 /* SwiftyGif in Frameworks */,
|
||||
E5E997CD2CBA891A00D7A2FA /* libHSsimplex-chat-6.1.0.9-3X73OucN19a19eYgUK66sv.a in Frameworks */,
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
};
|
||||
@@ -735,11 +739,11 @@
|
||||
5C764E5C279C70B7000C6508 /* Libraries */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
64A2085E2C8F2CCB00AE9D01 /* libffi.a */,
|
||||
64A2085F2C8F2CCB00AE9D01 /* libgmp.a */,
|
||||
64A2085D2C8F2CCB00AE9D01 /* libgmpxx.a */,
|
||||
64A208602C8F2CCC00AE9D01 /* libHSsimplex-chat-6.1.0.0-G2fNFSEVU486aN7U9YSuO7-ghc9.6.3.a */,
|
||||
64A208612C8F2CCC00AE9D01 /* libHSsimplex-chat-6.1.0.0-G2fNFSEVU486aN7U9YSuO7.a */,
|
||||
E5E997C72CBA891A00D7A2FA /* libffi.a */,
|
||||
E5E997C52CBA891A00D7A2FA /* libgmp.a */,
|
||||
E5E997C42CBA891A00D7A2FA /* libgmpxx.a */,
|
||||
E5E997C62CBA891A00D7A2FA /* libHSsimplex-chat-6.1.0.9-3X73OucN19a19eYgUK66sv-ghc9.6.3.a */,
|
||||
E5E997C82CBA891A00D7A2FA /* libHSsimplex-chat-6.1.0.9-3X73OucN19a19eYgUK66sv.a */,
|
||||
);
|
||||
path = Libraries;
|
||||
sourceTree = "<group>";
|
||||
@@ -796,6 +800,8 @@
|
||||
CE984D4A2C36C5D500E3AEFF /* ChatItemClipShape.swift */,
|
||||
CE7548092C622630009579B7 /* SwipeLabel.swift */,
|
||||
CE176F1F2C87014C00145DBC /* InvertedForegroundStyle.swift */,
|
||||
CEDB245A2C9CD71800FBC5F6 /* StickyScrollView.swift */,
|
||||
CEFB2EDE2CA1BCC7004B1ECE /* SheetRepresentable.swift */,
|
||||
);
|
||||
path = Helpers;
|
||||
sourceTree = "<group>";
|
||||
@@ -1446,6 +1452,7 @@
|
||||
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 */,
|
||||
@@ -1496,6 +1503,7 @@
|
||||
5C93293F2928E0FD0090FFF9 /* AudioRecPlay.swift in Sources */,
|
||||
5C029EA82837DBB3004A9677 /* CICallItemView.swift in Sources */,
|
||||
5CE4407227ADB1D0007B033A /* Emoji.swift in Sources */,
|
||||
CEDB245B2C9CD71800FBC5F6 /* StickyScrollView.swift in Sources */,
|
||||
5C9CC7A928C532AB00BEF955 /* DatabaseErrorView.swift in Sources */,
|
||||
5C1A4C1E27A715B700EAD5AD /* ChatItemView.swift in Sources */,
|
||||
64AA1C6927EE10C800AC7277 /* ContextItemView.swift in Sources */,
|
||||
@@ -1891,7 +1899,7 @@
|
||||
CLANG_TIDY_MISC_REDUNDANT_EXPRESSION = YES;
|
||||
CODE_SIGN_ENTITLEMENTS = "SimpleX (iOS).entitlements";
|
||||
CODE_SIGN_STYLE = Automatic;
|
||||
CURRENT_PROJECT_VERSION = 236;
|
||||
CURRENT_PROJECT_VERSION = 244;
|
||||
DEAD_CODE_STRIPPING = YES;
|
||||
DEVELOPMENT_TEAM = 5NN7GUYB6T;
|
||||
ENABLE_BITCODE = NO;
|
||||
@@ -1916,7 +1924,7 @@
|
||||
"@executable_path/Frameworks",
|
||||
);
|
||||
LLVM_LTO = YES_THIN;
|
||||
MARKETING_VERSION = 6.0.4;
|
||||
MARKETING_VERSION = 6.1;
|
||||
PRODUCT_BUNDLE_IDENTIFIER = chat.simplex.app;
|
||||
PRODUCT_NAME = SimpleX;
|
||||
SDKROOT = iphoneos;
|
||||
@@ -1940,7 +1948,7 @@
|
||||
CLANG_TIDY_MISC_REDUNDANT_EXPRESSION = YES;
|
||||
CODE_SIGN_ENTITLEMENTS = "SimpleX (iOS).entitlements";
|
||||
CODE_SIGN_STYLE = Automatic;
|
||||
CURRENT_PROJECT_VERSION = 236;
|
||||
CURRENT_PROJECT_VERSION = 244;
|
||||
DEAD_CODE_STRIPPING = YES;
|
||||
DEVELOPMENT_TEAM = 5NN7GUYB6T;
|
||||
ENABLE_BITCODE = NO;
|
||||
@@ -1965,7 +1973,7 @@
|
||||
"@executable_path/Frameworks",
|
||||
);
|
||||
LLVM_LTO = YES;
|
||||
MARKETING_VERSION = 6.0.4;
|
||||
MARKETING_VERSION = 6.1;
|
||||
PRODUCT_BUNDLE_IDENTIFIER = chat.simplex.app;
|
||||
PRODUCT_NAME = SimpleX;
|
||||
SDKROOT = iphoneos;
|
||||
@@ -1981,11 +1989,11 @@
|
||||
buildSettings = {
|
||||
ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES;
|
||||
CODE_SIGN_STYLE = Automatic;
|
||||
CURRENT_PROJECT_VERSION = 236;
|
||||
CURRENT_PROJECT_VERSION = 244;
|
||||
DEVELOPMENT_TEAM = 5NN7GUYB6T;
|
||||
GENERATE_INFOPLIST_FILE = YES;
|
||||
IPHONEOS_DEPLOYMENT_TARGET = 15.0;
|
||||
MARKETING_VERSION = 6.0.4;
|
||||
MARKETING_VERSION = 6.1;
|
||||
PRODUCT_BUNDLE_IDENTIFIER = "chat.simplex.Tests-iOS";
|
||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||
SDKROOT = iphoneos;
|
||||
@@ -2001,11 +2009,11 @@
|
||||
buildSettings = {
|
||||
ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES;
|
||||
CODE_SIGN_STYLE = Automatic;
|
||||
CURRENT_PROJECT_VERSION = 236;
|
||||
CURRENT_PROJECT_VERSION = 244;
|
||||
DEVELOPMENT_TEAM = 5NN7GUYB6T;
|
||||
GENERATE_INFOPLIST_FILE = YES;
|
||||
IPHONEOS_DEPLOYMENT_TARGET = 15.0;
|
||||
MARKETING_VERSION = 6.0.4;
|
||||
MARKETING_VERSION = 6.1;
|
||||
PRODUCT_BUNDLE_IDENTIFIER = "chat.simplex.Tests-iOS";
|
||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||
SDKROOT = iphoneos;
|
||||
@@ -2026,7 +2034,7 @@
|
||||
CODE_SIGN_ENTITLEMENTS = "SimpleX NSE/SimpleX NSE.entitlements";
|
||||
CODE_SIGN_IDENTITY = "Apple Development";
|
||||
CODE_SIGN_STYLE = Automatic;
|
||||
CURRENT_PROJECT_VERSION = 236;
|
||||
CURRENT_PROJECT_VERSION = 244;
|
||||
DEVELOPMENT_TEAM = 5NN7GUYB6T;
|
||||
ENABLE_BITCODE = NO;
|
||||
GCC_OPTIMIZATION_LEVEL = s;
|
||||
@@ -2041,7 +2049,7 @@
|
||||
"@executable_path/../../Frameworks",
|
||||
);
|
||||
LLVM_LTO = YES;
|
||||
MARKETING_VERSION = 6.0.4;
|
||||
MARKETING_VERSION = 6.1;
|
||||
PRODUCT_BUNDLE_IDENTIFIER = "chat.simplex.app.SimpleX-NSE";
|
||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||
PROVISIONING_PROFILE_SPECIFIER = "";
|
||||
@@ -2063,7 +2071,7 @@
|
||||
CODE_SIGN_ENTITLEMENTS = "SimpleX NSE/SimpleX NSE.entitlements";
|
||||
CODE_SIGN_IDENTITY = "Apple Development";
|
||||
CODE_SIGN_STYLE = Automatic;
|
||||
CURRENT_PROJECT_VERSION = 236;
|
||||
CURRENT_PROJECT_VERSION = 244;
|
||||
DEVELOPMENT_TEAM = 5NN7GUYB6T;
|
||||
ENABLE_BITCODE = NO;
|
||||
ENABLE_CODE_COVERAGE = NO;
|
||||
@@ -2078,7 +2086,7 @@
|
||||
"@executable_path/../../Frameworks",
|
||||
);
|
||||
LLVM_LTO = YES;
|
||||
MARKETING_VERSION = 6.0.4;
|
||||
MARKETING_VERSION = 6.1;
|
||||
PRODUCT_BUNDLE_IDENTIFIER = "chat.simplex.app.SimpleX-NSE";
|
||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||
PROVISIONING_PROFILE_SPECIFIER = "";
|
||||
@@ -2100,7 +2108,7 @@
|
||||
CLANG_TIDY_BUGPRONE_REDUNDANT_BRANCH_CONDITION = YES;
|
||||
CLANG_TIDY_MISC_REDUNDANT_EXPRESSION = YES;
|
||||
CODE_SIGN_STYLE = Automatic;
|
||||
CURRENT_PROJECT_VERSION = 236;
|
||||
CURRENT_PROJECT_VERSION = 244;
|
||||
DEFINES_MODULE = YES;
|
||||
DEVELOPMENT_TEAM = 5NN7GUYB6T;
|
||||
DYLIB_COMPATIBILITY_VERSION = 1;
|
||||
@@ -2126,7 +2134,7 @@
|
||||
"$(PROJECT_DIR)/Libraries/sim",
|
||||
);
|
||||
LLVM_LTO = YES;
|
||||
MARKETING_VERSION = 6.0.4;
|
||||
MARKETING_VERSION = 6.1;
|
||||
PRODUCT_BUNDLE_IDENTIFIER = chat.simplex.SimpleXChat;
|
||||
PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)";
|
||||
SDKROOT = iphoneos;
|
||||
@@ -2151,7 +2159,7 @@
|
||||
CLANG_TIDY_BUGPRONE_REDUNDANT_BRANCH_CONDITION = YES;
|
||||
CLANG_TIDY_MISC_REDUNDANT_EXPRESSION = YES;
|
||||
CODE_SIGN_STYLE = Automatic;
|
||||
CURRENT_PROJECT_VERSION = 236;
|
||||
CURRENT_PROJECT_VERSION = 244;
|
||||
DEFINES_MODULE = YES;
|
||||
DEVELOPMENT_TEAM = 5NN7GUYB6T;
|
||||
DYLIB_COMPATIBILITY_VERSION = 1;
|
||||
@@ -2177,7 +2185,7 @@
|
||||
"$(PROJECT_DIR)/Libraries/sim",
|
||||
);
|
||||
LLVM_LTO = YES;
|
||||
MARKETING_VERSION = 6.0.4;
|
||||
MARKETING_VERSION = 6.1;
|
||||
PRODUCT_BUNDLE_IDENTIFIER = chat.simplex.SimpleXChat;
|
||||
PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)";
|
||||
SDKROOT = iphoneos;
|
||||
@@ -2202,7 +2210,7 @@
|
||||
CLANG_CXX_LANGUAGE_STANDARD = "gnu++20";
|
||||
CODE_SIGN_ENTITLEMENTS = "SimpleX SE/SimpleX SE.entitlements";
|
||||
CODE_SIGN_STYLE = Automatic;
|
||||
CURRENT_PROJECT_VERSION = 236;
|
||||
CURRENT_PROJECT_VERSION = 244;
|
||||
DEVELOPMENT_TEAM = 5NN7GUYB6T;
|
||||
ENABLE_USER_SCRIPT_SANDBOXING = YES;
|
||||
GCC_C_LANGUAGE_STANDARD = gnu17;
|
||||
@@ -2217,7 +2225,7 @@
|
||||
"@executable_path/../../Frameworks",
|
||||
);
|
||||
LOCALIZATION_PREFERS_STRING_CATALOGS = YES;
|
||||
MARKETING_VERSION = 6.0.4;
|
||||
MARKETING_VERSION = 6.1;
|
||||
PRODUCT_BUNDLE_IDENTIFIER = "chat.simplex.app.SimpleX-SE";
|
||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||
SDKROOT = iphoneos;
|
||||
@@ -2236,7 +2244,7 @@
|
||||
CLANG_CXX_LANGUAGE_STANDARD = "gnu++20";
|
||||
CODE_SIGN_ENTITLEMENTS = "SimpleX SE/SimpleX SE.entitlements";
|
||||
CODE_SIGN_STYLE = Automatic;
|
||||
CURRENT_PROJECT_VERSION = 236;
|
||||
CURRENT_PROJECT_VERSION = 244;
|
||||
DEVELOPMENT_TEAM = 5NN7GUYB6T;
|
||||
ENABLE_USER_SCRIPT_SANDBOXING = YES;
|
||||
GCC_C_LANGUAGE_STANDARD = gnu17;
|
||||
@@ -2251,7 +2259,7 @@
|
||||
"@executable_path/../../Frameworks",
|
||||
);
|
||||
LOCALIZATION_PREFERS_STRING_CATALOGS = YES;
|
||||
MARKETING_VERSION = 6.0.4;
|
||||
MARKETING_VERSION = 6.1;
|
||||
PRODUCT_BUNDLE_IDENTIFIER = "chat.simplex.app.SimpleX-SE";
|
||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||
SDKROOT = iphoneos;
|
||||
|
||||
@@ -8,6 +8,7 @@
|
||||
|
||||
import Foundation
|
||||
import SwiftUI
|
||||
import Network
|
||||
|
||||
public let jsonDecoder = getJSONDecoder()
|
||||
public let jsonEncoder = getJSONEncoder()
|
||||
@@ -48,12 +49,14 @@ public enum ChatCommand {
|
||||
case apiDeleteChatItem(type: ChatType, id: Int64, itemIds: [Int64], mode: CIDeleteMode)
|
||||
case apiDeleteMemberChatItem(groupId: Int64, itemIds: [Int64])
|
||||
case apiChatItemReaction(type: ChatType, id: Int64, itemId: Int64, add: Bool, reaction: MsgReaction)
|
||||
case apiPlanForwardChatItems(toChatType: ChatType, toChatId: Int64, itemIds: [Int64])
|
||||
case apiForwardChatItems(toChatType: ChatType, toChatId: Int64, fromChatType: ChatType, fromChatId: Int64, itemIds: [Int64], ttl: Int?)
|
||||
case apiGetNtfToken
|
||||
case apiRegisterToken(token: DeviceToken, notificationMode: NotificationsMode)
|
||||
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)
|
||||
@@ -203,6 +206,7 @@ public enum ChatCommand {
|
||||
case let .apiDeleteChatItem(type, id, itemIds, mode): return "/_delete item \(ref(type, id)) \(itemIds.map({ "\($0)" }).joined(separator: ",")) \(mode.rawValue)"
|
||||
case let .apiDeleteMemberChatItem(groupId, itemIds): return "/_delete member item #\(groupId) \(itemIds.map({ "\($0)" }).joined(separator: ","))"
|
||||
case let .apiChatItemReaction(type, id, itemId, add, reaction): return "/_reaction \(ref(type, id)) \(itemId) \(onOff(add)) \(encodeJSON(reaction))"
|
||||
case let .apiPlanForwardChatItems(type, id, itemIds): return "/_forward plan \(ref(type, id)) \(itemIds.map({ "\($0)" }).joined(separator: ","))"
|
||||
case let .apiForwardChatItems(toChatType, toChatId, fromChatType, fromChatId, itemIds, ttl):
|
||||
let ttlStr = ttl != nil ? "\(ttl!)" : "default"
|
||||
return "/_forward \(ref(toChatType, toChatId)) \(ref(fromChatType, fromChatId)) \(itemIds.map({ "\($0)" }).joined(separator: ",")) ttl=\(ttlStr)"
|
||||
@@ -211,6 +215,7 @@ 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)"
|
||||
@@ -358,12 +363,14 @@ public enum ChatCommand {
|
||||
case .apiConnectContactViaAddress: return "apiConnectContactViaAddress"
|
||||
case .apiDeleteMemberChatItem: return "apiDeleteMemberChatItem"
|
||||
case .apiChatItemReaction: return "apiChatItemReaction"
|
||||
case .apiPlanForwardChatItems: return "apiPlanForwardChatItems"
|
||||
case .apiForwardChatItems: return "apiForwardChatItems"
|
||||
case .apiGetNtfToken: return "apiGetNtfToken"
|
||||
case .apiRegisterToken: return "apiRegisterToken"
|
||||
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"
|
||||
@@ -600,7 +607,8 @@ public enum ChatResponse: Decodable, Error {
|
||||
case groupEmpty(user: UserRef, groupInfo: GroupInfo)
|
||||
case userContactLinkSubscribed
|
||||
case newChatItems(user: UserRef, chatItems: [AChatItem])
|
||||
case chatItemStatusUpdated(user: UserRef, chatItem: AChatItem)
|
||||
case forwardPlan(user: UserRef, chatItemIds: [Int64], forwardConfirmation: ForwardConfirmation?)
|
||||
case chatItemsStatusesUpdated(user: UserRef, chatItems: [AChatItem])
|
||||
case chatItemUpdated(user: UserRef, chatItem: AChatItem)
|
||||
case chatItemNotChanged(user: UserRef, chatItem: AChatItem)
|
||||
case chatItemReaction(user: UserRef, added: Bool, reaction: ACIReaction)
|
||||
@@ -674,8 +682,9 @@ 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?, msgTs: Date?, ntfMessage_: NtfMsgInfo?)
|
||||
case ntfMessage(user: UserRef, connEntity: ConnectionEntity, ntfMessage: NtfMsgInfo)
|
||||
case ntfMessages(user_: User?, connEntity_: ConnectionEntity?, expectedMsg_: NtfMsgInfo?, receivedMsg_: NtfMsgInfo?)
|
||||
case connNtfMessage(receivedMsg_: NtfMsgInfo?)
|
||||
case ntfMessage(user: UserRef, connEntity: ConnectionEntity, ntfMessage: NtfMsgAckInfo)
|
||||
case contactConnectionDeleted(user: UserRef, connection: PendingContactConnection)
|
||||
case contactDisabled(user: UserRef, contact: Contact)
|
||||
// remote desktop responses/events
|
||||
@@ -771,7 +780,8 @@ public enum ChatResponse: Decodable, Error {
|
||||
case .groupEmpty: return "groupEmpty"
|
||||
case .userContactLinkSubscribed: return "userContactLinkSubscribed"
|
||||
case .newChatItems: return "newChatItems"
|
||||
case .chatItemStatusUpdated: return "chatItemStatusUpdated"
|
||||
case .forwardPlan: return "forwardPlan"
|
||||
case .chatItemsStatusesUpdated: return "chatItemsStatusesUpdated"
|
||||
case .chatItemUpdated: return "chatItemUpdated"
|
||||
case .chatItemNotChanged: return "chatItemNotChanged"
|
||||
case .chatItemReaction: return "chatItemReaction"
|
||||
@@ -842,6 +852,7 @@ 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"
|
||||
@@ -942,7 +953,10 @@ public enum ChatResponse: Decodable, Error {
|
||||
case let .newChatItems(u, chatItems):
|
||||
let itemsString = chatItems.map { chatItem in String(describing: chatItem) }.joined(separator: "\n")
|
||||
return withUser(u, itemsString)
|
||||
case let .chatItemStatusUpdated(u, chatItem): return withUser(u, String(describing: chatItem))
|
||||
case let .forwardPlan(u, chatItemIds, forwardConfirmation): return withUser(u, "items: \(chatItemIds) forwardConfirmation: \(String(describing: forwardConfirmation))")
|
||||
case let .chatItemsStatusesUpdated(u, chatItems):
|
||||
let itemsString = chatItems.map { chatItem in String(describing: chatItem) }.joined(separator: "\n")
|
||||
return withUser(u, itemsString)
|
||||
case let .chatItemUpdated(u, chatItem): return withUser(u, String(describing: chatItem))
|
||||
case let .chatItemNotChanged(u, chatItem): return withUser(u, String(describing: chatItem))
|
||||
case let .chatItemReaction(u, added, reaction): return withUser(u, "added: \(added)\n\(String(describing: reaction))")
|
||||
@@ -1015,7 +1029,8 @@ 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, msgTs, ntfMessages): return withUser(u, "connEntity: \(String(describing: connEntity))\nmsgTs: \(String(describing: msgTs))\nntfMessages: \(String(describing: ntfMessages))")
|
||||
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 .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))
|
||||
@@ -1131,7 +1146,7 @@ public enum ChatPagination {
|
||||
public struct ComposedMessage: Encodable {
|
||||
public var fileSource: CryptoFile?
|
||||
var quotedItemId: Int64?
|
||||
var msgContent: MsgContent
|
||||
public var msgContent: MsgContent
|
||||
|
||||
public init(fileSource: CryptoFile? = nil, quotedItemId: Int64? = nil, msgContent: MsgContent) {
|
||||
self.fileSource = fileSource
|
||||
@@ -1344,6 +1359,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
|
||||
public var tcpConnectTimeout: Int // microseconds
|
||||
public var tcpTimeout: Int // microseconds
|
||||
public var tcpTimeoutPerKb: Int // microseconds
|
||||
@@ -1475,18 +1491,22 @@ 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 "User profile"
|
||||
case .user: return "Chat profile"
|
||||
case .session: return "App session"
|
||||
case .server: return "Server"
|
||||
case .entity: return "Connection"
|
||||
}
|
||||
}
|
||||
|
||||
public var id: TransportSessionMode { self }
|
||||
|
||||
public static let values: [TransportSessionMode] = [.user, .entity]
|
||||
public static let values: [TransportSessionMode] = [.user, .session, .server, .entity]
|
||||
}
|
||||
|
||||
public struct KeepAliveOpts: Codable, Equatable {
|
||||
@@ -1497,6 +1517,63 @@ public struct KeepAliveOpts: Codable, Equatable {
|
||||
public static let defaults: KeepAliveOpts = KeepAliveOpts(keepIdle: 30, keepIntvl: 15, keepCnt: 4)
|
||||
}
|
||||
|
||||
public struct NetworkProxy: Equatable, Codable {
|
||||
public var host: String = ""
|
||||
public var port: Int = 0
|
||||
public var auth: NetworkProxyAuth = .username
|
||||
public var username: String = ""
|
||||
public var password: String = ""
|
||||
|
||||
public static var def: NetworkProxy {
|
||||
NetworkProxy()
|
||||
}
|
||||
|
||||
public var valid: Bool {
|
||||
let hostOk = switch NWEndpoint.Host(host) {
|
||||
case .ipv4: true
|
||||
case .ipv6: true
|
||||
default: false
|
||||
}
|
||||
return hostOk &&
|
||||
port > 0 && port <= 65535 &&
|
||||
NetworkProxy.validCredential(username) && NetworkProxy.validCredential(password)
|
||||
}
|
||||
|
||||
public static func validCredential(_ s: String) -> Bool {
|
||||
!s.contains(":") && !s.contains("@")
|
||||
}
|
||||
|
||||
public func toProxyString() -> String? {
|
||||
if !valid { return nil }
|
||||
var res = ""
|
||||
switch auth {
|
||||
case .username:
|
||||
let usernameTrimmed = username.trimmingCharacters(in: .whitespaces)
|
||||
let passwordTrimmed = password.trimmingCharacters(in: .whitespaces)
|
||||
if usernameTrimmed != "" || passwordTrimmed != "" {
|
||||
res += usernameTrimmed + ":" + passwordTrimmed + "@"
|
||||
} else {
|
||||
res += "@"
|
||||
}
|
||||
case .isolate: ()
|
||||
}
|
||||
if host != "" {
|
||||
if host.contains(":") {
|
||||
res += "[\(host.trimmingCharacters(in: [" ", "[", "]"]))]"
|
||||
} else {
|
||||
res += host.trimmingCharacters(in: .whitespaces)
|
||||
}
|
||||
}
|
||||
res += ":\(port)"
|
||||
return res
|
||||
}
|
||||
}
|
||||
|
||||
public enum NetworkProxyAuth: String, Codable {
|
||||
case username
|
||||
case isolate
|
||||
}
|
||||
|
||||
public enum NetworkStatus: Decodable, Equatable {
|
||||
case unknown
|
||||
case connected
|
||||
@@ -1535,6 +1612,13 @@ public enum NetworkStatus: Decodable, Equatable {
|
||||
}
|
||||
}
|
||||
|
||||
public enum ForwardConfirmation: Decodable, Hashable {
|
||||
case filesNotAccepted(fileIds: [Int64])
|
||||
case filesInProgress(filesCount: Int)
|
||||
case filesMissing(filesCount: Int)
|
||||
case filesFailed(filesCount: Int)
|
||||
}
|
||||
|
||||
public struct ConnNetworkStatus: Decodable {
|
||||
public var agentConnId: String
|
||||
public var networkStatus: NetworkStatus
|
||||
@@ -1957,7 +2041,7 @@ public enum SQLiteError: Decodable, Hashable {
|
||||
}
|
||||
|
||||
public enum AgentErrorType: Decodable, Hashable {
|
||||
case CMD(cmdErr: CommandErrorType)
|
||||
case CMD(cmdErr: CommandErrorType, errContext: String)
|
||||
case CONN(connErr: ConnectionErrorType)
|
||||
case SMP(serverAddress: String, smpErr: ProtocolErrorType)
|
||||
case NTF(ntfErr: ProtocolErrorType)
|
||||
@@ -2120,11 +2204,13 @@ public struct MigrationFileLinkData: Codable {
|
||||
|
||||
public struct NetworkConfig: Codable {
|
||||
let socksProxy: String?
|
||||
let networkProxy: NetworkProxy?
|
||||
let hostMode: HostMode?
|
||||
let requiredHostMode: Bool?
|
||||
|
||||
public init(socksProxy: String?, hostMode: HostMode?, requiredHostMode: Bool?) {
|
||||
public init(socksProxy: String?, networkProxy: NetworkProxy?, hostMode: HostMode?, requiredHostMode: Bool?) {
|
||||
self.socksProxy = socksProxy
|
||||
self.networkProxy = networkProxy
|
||||
self.hostMode = hostMode
|
||||
self.requiredHostMode = requiredHostMode
|
||||
}
|
||||
@@ -2133,6 +2219,7 @@ public struct MigrationFileLinkData: Codable {
|
||||
return if let hostMode, let requiredHostMode {
|
||||
NetworkConfig(
|
||||
socksProxy: nil,
|
||||
networkProxy: nil,
|
||||
hostMode: hostMode == .onionViaSocks ? .onionHost : hostMode,
|
||||
requiredHostMode: requiredHostMode
|
||||
)
|
||||
@@ -2152,6 +2239,7 @@ public struct MigrationFileLinkData: Codable {
|
||||
|
||||
public struct AppSettings: Codable, Equatable {
|
||||
public var networkConfig: NetCfg? = nil
|
||||
public var networkProxy: NetworkProxy? = nil
|
||||
public var privacyEncryptLocalFiles: Bool? = nil
|
||||
public var privacyAskToApproveRelays: Bool? = nil
|
||||
public var privacyAcceptImages: Bool? = nil
|
||||
@@ -2173,6 +2261,8 @@ public struct AppSettings: Codable, Equatable {
|
||||
public var iosCallKitEnabled: Bool? = nil
|
||||
public var iosCallKitCallsInRecents: Bool? = nil
|
||||
public var uiProfileImageCornerRadius: Double? = nil
|
||||
public var uiChatItemRoundness: Double? = nil
|
||||
public var uiChatItemTail: Bool? = nil
|
||||
public var uiColorScheme: String? = nil
|
||||
public var uiDarkColorScheme: String? = nil
|
||||
public var uiCurrentThemeIds: [String: String]? = nil
|
||||
@@ -2183,6 +2273,7 @@ public struct AppSettings: Codable, Equatable {
|
||||
var empty = AppSettings()
|
||||
let def = AppSettings.defaults
|
||||
if networkConfig != def.networkConfig { empty.networkConfig = networkConfig }
|
||||
if networkProxy != def.networkProxy { empty.networkProxy = networkProxy }
|
||||
if privacyEncryptLocalFiles != def.privacyEncryptLocalFiles { empty.privacyEncryptLocalFiles = privacyEncryptLocalFiles }
|
||||
if privacyAskToApproveRelays != def.privacyAskToApproveRelays { empty.privacyAskToApproveRelays = privacyAskToApproveRelays }
|
||||
if privacyAcceptImages != def.privacyAcceptImages { empty.privacyAcceptImages = privacyAcceptImages }
|
||||
@@ -2204,6 +2295,8 @@ public struct AppSettings: Codable, Equatable {
|
||||
if iosCallKitEnabled != def.iosCallKitEnabled { empty.iosCallKitEnabled = iosCallKitEnabled }
|
||||
if iosCallKitCallsInRecents != def.iosCallKitCallsInRecents { empty.iosCallKitCallsInRecents = iosCallKitCallsInRecents }
|
||||
if uiProfileImageCornerRadius != def.uiProfileImageCornerRadius { empty.uiProfileImageCornerRadius = uiProfileImageCornerRadius }
|
||||
if uiChatItemRoundness != def.uiChatItemRoundness { empty.uiChatItemRoundness = uiChatItemRoundness }
|
||||
if uiChatItemTail != def.uiChatItemTail { empty.uiChatItemTail = uiChatItemTail }
|
||||
if uiColorScheme != def.uiColorScheme { empty.uiColorScheme = uiColorScheme }
|
||||
if uiDarkColorScheme != def.uiDarkColorScheme { empty.uiDarkColorScheme = uiDarkColorScheme }
|
||||
if uiCurrentThemeIds != def.uiCurrentThemeIds { empty.uiCurrentThemeIds = uiCurrentThemeIds }
|
||||
@@ -2215,6 +2308,7 @@ public struct AppSettings: Codable, Equatable {
|
||||
public static var defaults: AppSettings {
|
||||
AppSettings (
|
||||
networkConfig: NetCfg.defaults,
|
||||
networkProxy: NetworkProxy.def,
|
||||
privacyEncryptLocalFiles: true,
|
||||
privacyAskToApproveRelays: true,
|
||||
privacyAcceptImages: true,
|
||||
@@ -2236,6 +2330,8 @@ public struct AppSettings: Codable, Equatable {
|
||||
iosCallKitEnabled: true,
|
||||
iosCallKitCallsInRecents: false,
|
||||
uiProfileImageCornerRadius: 22.5,
|
||||
uiChatItemRoundness: 0.75,
|
||||
uiChatItemTail: true,
|
||||
uiColorScheme: DefaultTheme.SYSTEM_THEME_NAME,
|
||||
uiDarkColorScheme: DefaultTheme.SIMPLEX.themeName,
|
||||
uiCurrentThemeIds: nil as [String: String]?,
|
||||
|
||||
@@ -35,6 +35,7 @@ public let GROUP_DEFAULT_PRIVACY_ASK_TO_APPROVE_RELAYS = "privacyAskToApproveRel
|
||||
// replaces DEFAULT_PROFILE_IMAGE_CORNER_RADIUS
|
||||
public let GROUP_DEFAULT_PROFILE_IMAGE_CORNER_RADIUS = "profileImageCornerRadius"
|
||||
let GROUP_DEFAULT_NTF_BADGE_COUNT = "ntgBadgeCount"
|
||||
public let GROUP_DEFAULT_NETWORK_SOCKS_PROXY = "networkSocksProxy"
|
||||
let GROUP_DEFAULT_NETWORK_USE_ONION_HOSTS = "networkUseOnionHosts"
|
||||
let GROUP_DEFAULT_NETWORK_SESSION_MODE = "networkSessionMode"
|
||||
let GROUP_DEFAULT_NETWORK_SMP_PROXY_MODE = "networkSMPProxyMode"
|
||||
@@ -66,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.user.rawValue,
|
||||
GROUP_DEFAULT_NETWORK_SESSION_MODE: TransportSessionMode.session.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,
|
||||
@@ -84,7 +85,7 @@ public func registerGroupDefaults() {
|
||||
GROUP_DEFAULT_INITIAL_RANDOM_DB_PASSPHRASE: false,
|
||||
GROUP_DEFAULT_APP_LOCAL_AUTH_ENABLED: true,
|
||||
GROUP_DEFAULT_ALLOW_SHARE_EXTENSION: false,
|
||||
GROUP_DEFAULT_PRIVACY_LINK_PREVIEWS: false,
|
||||
GROUP_DEFAULT_PRIVACY_LINK_PREVIEWS: true,
|
||||
GROUP_DEFAULT_PRIVACY_ACCEPT_IMAGES: true,
|
||||
GROUP_DEFAULT_PRIVACY_TRANSFER_IMAGES_INLINE: false,
|
||||
GROUP_DEFAULT_PRIVACY_ENCRYPT_LOCAL_FILES: true,
|
||||
@@ -231,7 +232,7 @@ public let networkUseOnionHostsGroupDefault = EnumDefault<OnionHosts>(
|
||||
public let networkSessionModeGroupDefault = EnumDefault<TransportSessionMode>(
|
||||
defaults: groupDefaults,
|
||||
forKey: GROUP_DEFAULT_NETWORK_SESSION_MODE,
|
||||
withDefault: .user
|
||||
withDefault: .session
|
||||
)
|
||||
|
||||
public let networkSMPProxyModeGroupDefault = EnumDefault<SMPProxyMode>(
|
||||
@@ -327,6 +328,7 @@ public class Default<T> {
|
||||
}
|
||||
|
||||
public func getNetCfg() -> NetCfg {
|
||||
let socksProxy = groupDefaults.string(forKey: GROUP_DEFAULT_NETWORK_SOCKS_PROXY)
|
||||
let onionHosts = networkUseOnionHostsGroupDefault.get()
|
||||
let (hostMode, requiredHostMode) = onionHosts.hostMode
|
||||
let sessionMode = networkSessionModeGroupDefault.get()
|
||||
@@ -349,11 +351,13 @@ public func getNetCfg() -> NetCfg {
|
||||
tcpKeepAlive = nil
|
||||
}
|
||||
return NetCfg(
|
||||
socksProxy: socksProxy,
|
||||
hostMode: hostMode,
|
||||
requiredHostMode: requiredHostMode,
|
||||
sessionMode: sessionMode,
|
||||
smpProxyMode: smpProxyMode,
|
||||
smpProxyFallback: smpProxyFallback,
|
||||
smpWebPort: false,
|
||||
tcpConnectTimeout: tcpConnectTimeout,
|
||||
tcpTimeout: tcpTimeout,
|
||||
tcpTimeoutPerKb: tcpTimeoutPerKb,
|
||||
@@ -365,11 +369,13 @@ public func getNetCfg() -> NetCfg {
|
||||
)
|
||||
}
|
||||
|
||||
public func setNetCfg(_ cfg: NetCfg) {
|
||||
public func setNetCfg(_ cfg: NetCfg, networkProxy: NetworkProxy?) {
|
||||
networkUseOnionHostsGroupDefault.set(OnionHosts(netCfg: cfg))
|
||||
networkSessionModeGroupDefault.set(cfg.sessionMode)
|
||||
networkSMPProxyModeGroupDefault.set(cfg.smpProxyMode)
|
||||
networkSMPProxyFallbackGroupDefault.set(cfg.smpProxyFallback)
|
||||
let socksProxy = networkProxy?.toProxyString()
|
||||
groupDefaults.set(socksProxy, forKey: GROUP_DEFAULT_NETWORK_SOCKS_PROXY)
|
||||
groupDefaults.set(cfg.tcpConnectTimeout, forKey: GROUP_DEFAULT_NETWORK_TCP_CONNECT_TIMEOUT)
|
||||
groupDefaults.set(cfg.tcpTimeout, forKey: GROUP_DEFAULT_NETWORK_TCP_TIMEOUT)
|
||||
groupDefaults.set(cfg.tcpTimeoutPerKb, forKey: GROUP_DEFAULT_NETWORK_TCP_TIMEOUT_PER_KB)
|
||||
|
||||
@@ -80,6 +80,14 @@ 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"
|
||||
|
||||
@@ -17,6 +17,7 @@ public struct User: Identifiable, Decodable, UserLike, NamedChat, Hashable {
|
||||
public var profile: LocalProfile
|
||||
public var fullPreferences: FullPreferences
|
||||
public var activeUser: Bool
|
||||
public var activeOrder: Int64
|
||||
|
||||
public var displayName: String { get { profile.displayName } }
|
||||
public var fullName: String { get { profile.fullName } }
|
||||
@@ -49,6 +50,7 @@ public struct User: Identifiable, Decodable, UserLike, NamedChat, Hashable {
|
||||
profile: LocalProfile.sampleData,
|
||||
fullPreferences: FullPreferences.sampleData,
|
||||
activeUser: true,
|
||||
activeOrder: 0,
|
||||
showNtfs: true,
|
||||
sendRcptsContacts: true,
|
||||
sendRcptsSmallGroups: false
|
||||
@@ -1850,6 +1852,7 @@ public struct PendingContactConnection: Decodable, NamedChat, Hashable {
|
||||
|
||||
public enum ConnStatus: String, Decodable, Hashable {
|
||||
case new = "new"
|
||||
case prepared = "prepared"
|
||||
case joined = "joined"
|
||||
case requested = "requested"
|
||||
case accepted = "accepted"
|
||||
@@ -1861,6 +1864,7 @@ public enum ConnStatus: String, Decodable, Hashable {
|
||||
get {
|
||||
switch self {
|
||||
case .new: return true
|
||||
case .prepared: return false
|
||||
case .joined: return false
|
||||
case .requested: return true
|
||||
case .accepted: return true
|
||||
@@ -2238,32 +2242,42 @@ public struct MemberSubError: Decodable, Hashable {
|
||||
}
|
||||
|
||||
public enum ConnectionEntity: Decodable, Hashable {
|
||||
case rcvDirectMsgConnection(contact: Contact?)
|
||||
case rcvGroupMsgConnection(groupInfo: GroupInfo, groupMember: GroupMember)
|
||||
case sndFileConnection(sndFileTransfer: SndFileTransfer)
|
||||
case rcvFileConnection(rcvFileTransfer: RcvFileTransfer)
|
||||
case userContactConnection(userContact: UserContact)
|
||||
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)
|
||||
|
||||
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
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -2273,6 +2287,11 @@ 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
|
||||
@@ -2763,9 +2782,16 @@ public struct CITimed: Decodable, Hashable {
|
||||
|
||||
let msgTimeFormat = Date.FormatStyle.dateTime.hour().minute()
|
||||
let msgDateFormat = Date.FormatStyle.dateTime.day(.twoDigits).month(.twoDigits)
|
||||
let msgDateYearFormat = Date.FormatStyle.dateTime.day(.twoDigits).month(.twoDigits).year(.twoDigits)
|
||||
|
||||
public func formatTimestampText(_ date: Date) -> Text {
|
||||
Text(verbatim: date.formatted(recent(date) ? msgTimeFormat : msgDateFormat))
|
||||
Text(verbatim: date.formatted(
|
||||
recent(date)
|
||||
? msgTimeFormat
|
||||
: Calendar.current.isDate(date, equalTo: .now, toGranularity: .year)
|
||||
? msgDateFormat
|
||||
: msgDateYearFormat
|
||||
))
|
||||
}
|
||||
|
||||
public func formatTimestampMeta(_ date: Date) -> String {
|
||||
@@ -2811,6 +2837,20 @@ public enum CIStatus: Decodable, Hashable {
|
||||
case .invalid: return "invalid"
|
||||
}
|
||||
}
|
||||
|
||||
public var sent: Bool {
|
||||
switch self {
|
||||
case .sndNew: true
|
||||
case .sndSent: true
|
||||
case .sndRcvd: true
|
||||
case .sndErrorAuth: true
|
||||
case .sndError: true
|
||||
case .sndWarning: true
|
||||
case .rcvNew: false
|
||||
case .rcvRead: false
|
||||
case .invalid: false
|
||||
}
|
||||
}
|
||||
|
||||
public func statusIcon(_ metaColor: Color, _ paleMetaColor: Color, _ primaryColor: Color = .accentColor) -> (Image, Color)? {
|
||||
switch self {
|
||||
@@ -2856,6 +2896,13 @@ public enum CIStatus: Decodable, Hashable {
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
public var isSndRcvd: Bool {
|
||||
switch self {
|
||||
case .sndRcvd: return true
|
||||
default: return false
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public enum SndError: Decodable, Hashable {
|
||||
@@ -3152,6 +3199,13 @@ public enum CIContent: Decodable, ItemContent, Hashable {
|
||||
default: return false
|
||||
}
|
||||
}
|
||||
|
||||
public var isSndCall: Bool {
|
||||
switch self {
|
||||
case .sndCall: return true
|
||||
default: return false
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public enum MsgDecryptError: String, Decodable, Hashable {
|
||||
|
||||
@@ -100,7 +100,7 @@ public func resizeImageToDataSize(_ image: UIImage, maxDataSize: Int64, hasAlpha
|
||||
return data
|
||||
}
|
||||
|
||||
public func resizeImageToStrSize(_ image: UIImage, maxDataSize: Int64) -> String? {
|
||||
public func resizeImageToStrSizeSync(_ image: UIImage, maxDataSize: Int64) -> String? {
|
||||
var img = image
|
||||
let hasAlpha = imageHasAlpha(image)
|
||||
var str = compressImageStr(img, hasAlpha: hasAlpha)
|
||||
@@ -116,7 +116,15 @@ public func resizeImageToStrSize(_ image: UIImage, maxDataSize: Int64) -> String
|
||||
return str
|
||||
}
|
||||
|
||||
public func resizeImageToStrSize(_ image: UIImage, maxDataSize: Int64) async -> String? {
|
||||
resizeImageToStrSizeSync(image, maxDataSize: maxDataSize)
|
||||
}
|
||||
|
||||
public func compressImageStr(_ image: UIImage, _ compressionQuality: CGFloat = 0.85, hasAlpha: Bool) -> String? {
|
||||
// // Heavy workload to verify if UI gets blocked by the call
|
||||
// for i in 0..<100 {
|
||||
// print(image.jpegData(compressionQuality: Double(i) / 100)?.count ?? 0, terminator: ", ")
|
||||
// }
|
||||
let ext = hasAlpha ? "png" : "jpg"
|
||||
if let data = hasAlpha ? image.pngData() : image.jpegData(compressionQuality: compressionQuality) {
|
||||
return "data:image/\(ext);base64,\(data.base64EncodedString())"
|
||||
@@ -426,7 +434,7 @@ public func getLinkPreview(url: URL, cb: @escaping (LinkPreview?) -> Void) {
|
||||
logger.error("Couldn't load image preview from link metadata with error: \(error.localizedDescription)")
|
||||
} else {
|
||||
if let image = object as? UIImage,
|
||||
let resized = resizeImageToStrSize(image, maxDataSize: 14000),
|
||||
let resized = resizeImageToStrSizeSync(image, maxDataSize: 14000),
|
||||
let title = metadata.title,
|
||||
let uri = metadata.originalURL {
|
||||
linkPreview = LinkPreview(uri: uri, title: title, image: resized)
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -697,7 +697,7 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Can't invite contacts!" = "Не може да поканят контактите!";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
/* alert button */
|
||||
"Cancel" = "Отказ";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
@@ -709,7 +709,7 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Cannot access keychain to save database password" = "Няма достъп до Keychain за запазване на паролата за базата данни";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
/* alert title */
|
||||
"Cannot receive file" = "Файлът не може да бъде получен";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
@@ -791,6 +791,9 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Chat preferences" = "Чат настройки";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Chat profile" = "Потребителски профил";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Chats" = "Чатове";
|
||||
|
||||
@@ -1395,7 +1398,8 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Downgrade and open chat" = "Понижи версията и отвори чата";
|
||||
|
||||
/* chat item action */
|
||||
/* alert button
|
||||
chat item action */
|
||||
"Download" = "Изтегли";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
@@ -1683,7 +1687,7 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Error opening chat" = "Грешка при отваряне на чата";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
/* alert title */
|
||||
"Error receiving file" = "Грешка при получаване на файл";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
@@ -1731,7 +1735,7 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Error stopping chat" = "Грешка при спиране на чата";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
/* alertTitle */
|
||||
"Error switching profile!" = "Грешка при смяна на профил!";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
@@ -1758,8 +1762,7 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Error: " = "Грешка: ";
|
||||
|
||||
/* file error text
|
||||
snd error text */
|
||||
/* alert message */
|
||||
"Error: %@" = "Грешка: %@";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
@@ -1897,9 +1900,6 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Full name (optional)" = "Пълно име (незадължително)";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Full name:" = "Пълно име:";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Fully decentralized – visible only to members." = "Напълно децентрализирана – видима е само за членовете.";
|
||||
|
||||
@@ -2688,7 +2688,7 @@
|
||||
/* feature offered item */
|
||||
"offered %@: %@" = "предлага %1$@: %2$@";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
/* alert button */
|
||||
"Ok" = "Ок";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
@@ -2940,12 +2940,6 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Profile images" = "Профилни изображения";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Profile name" = "Име на профила";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Profile name:" = "Име на профила:";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Profile password" = "Профилна парола";
|
||||
|
||||
@@ -3211,10 +3205,11 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Safer groups" = "По-безопасни групи";
|
||||
|
||||
/* chat item action */
|
||||
/* alert button
|
||||
chat item action */
|
||||
"Save" = "Запази";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
/* alert button */
|
||||
"Save (and notify contacts)" = "Запази (и уведоми контактите)";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
@@ -3229,9 +3224,6 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Save archive" = "Запази архив";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Save auto-accept settings" = "Запази настройките за автоматично приемане";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Save group profile" = "Запази профила на групата";
|
||||
|
||||
@@ -3253,9 +3245,6 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Save servers?" = "Запази сървърите?";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Save settings?" = "Запази настройките?";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Save welcome message?" = "Запази съобщението при посрещане?";
|
||||
|
||||
@@ -3379,7 +3368,7 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Send up to 100 last messages to new members." = "Изпращане до последните 100 съобщения на нови членове.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
/* alert message */
|
||||
"Sender cancelled file transfer." = "Подателят отмени прехвърлянето на файла.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
@@ -4003,9 +3992,6 @@
|
||||
/* 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.";
|
||||
|
||||
@@ -4180,9 +4166,6 @@
|
||||
/* No comment provided by engineer. */
|
||||
"you" = "вие";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"You" = "Вие";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"You **must not** use the same database on two devices." = "**Не трябва** да използвате една и съща база данни на две устройства.";
|
||||
|
||||
@@ -4430,7 +4413,7 @@
|
||||
"Your profile **%@** will be shared." = "Вашият профил **%@** ще бъде споделен.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Your profile is stored on your device and shared only with your contacts.\nSimpleX servers cannot see your profile." = "Вашият профил се съхранява на вашето устройство и се споделя само с вашите контакти.\nSimpleX сървърите не могат да видят вашия профил.";
|
||||
"Your profile is stored on your device and shared only with your contacts. SimpleX servers cannot see your profile." = "Вашият профил се съхранява на вашето устройство и се споделя само с вашите контакти. SimpleX сървърите не могат да видят вашия профил.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Your profile, contacts and delivered messages are stored on your device." = "Вашият профил, контакти и доставени съобщения се съхраняват на вашето устройство.";
|
||||
|
||||
@@ -562,7 +562,7 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Can't invite contacts!" = "Nelze pozvat kontakty!";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
/* alert button */
|
||||
"Cancel" = "Zrušit";
|
||||
|
||||
/* feature offered item */
|
||||
@@ -571,7 +571,7 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Cannot access keychain to save database password" = "Nelze získat přístup ke klíčence pro uložení hesla databáze";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
/* alert title */
|
||||
"Cannot receive file" = "Nelze přijmout soubor";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
@@ -644,6 +644,9 @@
|
||||
/* 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";
|
||||
|
||||
@@ -1380,7 +1383,7 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Error loading %@ servers" = "Chyba načítání %@ serverů";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
/* alert title */
|
||||
"Error receiving file" = "Chyba při příjmu souboru";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
@@ -1422,7 +1425,7 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Error stopping chat" = "Chyba při zastavení chatu";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
/* alertTitle */
|
||||
"Error switching profile!" = "Chyba při přepínání profilu!";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
@@ -1443,8 +1446,7 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Error: " = "Chyba: ";
|
||||
|
||||
/* file error text
|
||||
snd error text */
|
||||
/* alert message */
|
||||
"Error: %@" = "Chyba: %@";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
@@ -1543,9 +1545,6 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Full name (optional)" = "Celé jméno (volitelně)";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Full name:" = "Celé jméno:";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Fully re-implemented - work in background!" = "Plně přepracováno, prácuje na pozadí!";
|
||||
|
||||
@@ -2190,7 +2189,7 @@
|
||||
/* feature offered item */
|
||||
"offered %@: %@" = "nabídl %1$@: %2$@";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
/* alert button */
|
||||
"Ok" = "Ok";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
@@ -2602,10 +2601,11 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Run chat" = "Spustit chat";
|
||||
|
||||
/* chat item action */
|
||||
/* alert button
|
||||
chat item action */
|
||||
"Save" = "Uložit";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
/* alert button */
|
||||
"Save (and notify contacts)" = "Uložit (a informovat kontakty)";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
@@ -2620,9 +2620,6 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Save archive" = "Uložit archiv";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Save auto-accept settings" = "Uložit nastavení automatického přijímání";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Save group profile" = "Uložení profilu skupiny";
|
||||
|
||||
@@ -2644,9 +2641,6 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Save servers?" = "Uložit servery?";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Save settings?" = "Uložit nastavení?";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Save welcome message?" = "Uložit uvítací zprávu?";
|
||||
|
||||
@@ -2743,7 +2737,7 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Send them from gallery or custom keyboards." = "Odeslat je z galerie nebo vlastní klávesnice.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
/* alert message */
|
||||
"Sender cancelled file transfer." = "Odesílatel zrušil přenos souboru.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
@@ -3238,9 +3232,6 @@
|
||||
/* 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.";
|
||||
|
||||
@@ -3358,9 +3349,6 @@
|
||||
/* pref value */
|
||||
"yes" = "ano";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"You" = "Vy";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"You accepted connection" = "Přijali jste spojení";
|
||||
|
||||
@@ -3554,7 +3542,7 @@
|
||||
"Your profile **%@** will be shared." = "Váš profil **%@** bude sdílen.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Your profile is stored on your device and shared only with your contacts.\nSimpleX servers cannot see your profile." = "Váš profil je uložen ve vašem zařízení a sdílen pouze s vašimi kontakty.\nServery SimpleX nevidí váš profil.";
|
||||
"Your profile is stored on your device and shared only with your contacts. SimpleX servers cannot see your profile." = "Váš profil je uložen ve vašem zařízení a sdílen pouze s vašimi kontakty. Servery SimpleX nevidí váš profil.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Your profile, contacts and delivered messages are stored on your device." = "Váš profil, kontakty a doručené zprávy jsou uloženy ve vašem zařízení.";
|
||||
|
||||
@@ -160,6 +160,9 @@
|
||||
/* notification title */
|
||||
"%@ wants to connect!" = "%@ will sich mit Ihnen verbinden!";
|
||||
|
||||
/* format for date separator in chat */
|
||||
"%@, %@" = "%1$@, %2$@";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"%@, %@ and %lld members" = "%@, %@ und %lld Mitglieder";
|
||||
|
||||
@@ -172,9 +175,24 @@
|
||||
/* time interval */
|
||||
"%d days" = "%d Tage";
|
||||
|
||||
/* forward confirmation reason */
|
||||
"%d file(s) are still being downloaded." = "%d Datei(en) wird/werden immer noch heruntergeladen.";
|
||||
|
||||
/* forward confirmation reason */
|
||||
"%d file(s) failed to download." = "Bei %d Datei(en) ist das Herunterladen fehlgeschlagen.";
|
||||
|
||||
/* forward confirmation reason */
|
||||
"%d file(s) were deleted." = "%d Datei(en) wurde(n) gelöscht.";
|
||||
|
||||
/* forward confirmation reason */
|
||||
"%d file(s) were not downloaded." = "%d Datei(en) wurde(n) nicht heruntergeladen.";
|
||||
|
||||
/* time interval */
|
||||
"%d hours" = "%d Stunden";
|
||||
|
||||
/* alert title */
|
||||
"%d messages not forwarded" = "%d Nachrichten wurden nicht weitergeleitet";
|
||||
|
||||
/* time interval */
|
||||
"%d min" = "%d min";
|
||||
|
||||
@@ -454,7 +472,7 @@
|
||||
/* No comment provided by engineer. */
|
||||
"All new messages from %@ will be hidden!" = "Von %@ werden alle neuen Nachrichten ausgeblendet!";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
/* profile dropdown */
|
||||
"All profiles" = "Alle Profile";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
@@ -577,6 +595,9 @@
|
||||
/* 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";
|
||||
|
||||
@@ -649,6 +670,9 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Auto-accept images" = "Bilder automatisch akzeptieren";
|
||||
|
||||
/* alert title */
|
||||
"Auto-accept settings" = "Einstellungen automatisch akzeptieren";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Back" = "Zurück";
|
||||
|
||||
@@ -670,15 +694,30 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Bad message ID" = "Falsche Nachrichten-ID";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Better calls" = "Verbesserte Anrufe";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Better groups" = "Bessere Gruppen";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Better message dates." = "Verbesserte Nachrichten-Datumsinformation";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Better messages" = "Verbesserungen bei Nachrichten";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Better networking" = "Kontrollieren Sie Ihr Netzwerk";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Better notifications" = "Verbesserte Benachrichtigungen";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Better security ✅" = "Verbesserte Sicherheit ✅";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Better user experience" = "Verbesserte Nutzer-Erfahrung";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Black" = "Schwarz";
|
||||
|
||||
@@ -781,7 +820,7 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Can't message member" = "Mitglied kann nicht benachrichtigt werden";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
/* alert button */
|
||||
"Cancel" = "Abbrechen";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
@@ -796,7 +835,7 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Cannot forward message" = "Die Nachricht kann nicht weitergeleitet werden";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
/* alert title */
|
||||
"Cannot receive file" = "Datei kann nicht empfangen werden";
|
||||
|
||||
/* snd error text */
|
||||
@@ -890,6 +929,12 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Chat preferences" = "Chat-Präferenzen";
|
||||
|
||||
/* 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";
|
||||
|
||||
@@ -921,16 +966,16 @@
|
||||
"Chunks uploaded" = "Daten-Pakete hochgeladen";
|
||||
|
||||
/* swipe action */
|
||||
"Clear" = "Löschen";
|
||||
"Clear" = "Entfernen";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Clear conversation" = "Chatinhalte löschen";
|
||||
"Clear conversation" = "Chat-Inhalte entfernen";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Clear conversation?" = "Unterhaltung löschen?";
|
||||
"Clear conversation?" = "Chat-Inhalte entfernen?";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Clear private notes?" = "Private Notizen löschen?";
|
||||
"Clear private notes?" = "Private Notizen entfernen?";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Clear verification" = "Überprüfung zurücknehmen";
|
||||
@@ -1167,7 +1212,7 @@
|
||||
"Continue" = "Weiter";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Conversation deleted!" = "Unterhaltung gelöscht!";
|
||||
"Conversation deleted!" = "Chat-Inhalte entfernt!";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Copy" = "Kopieren";
|
||||
@@ -1178,6 +1223,9 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Core version: v%@" = "Core Version: v%@";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Corner" = "Abrundung Ecken";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Correct name to %@?" = "Richtiger Name für %@?";
|
||||
|
||||
@@ -1259,6 +1307,9 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Custom time" = "Zeit anpassen";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Customizable message shape." = "Anpassbares Format des Nachrichtenfelds";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Customize theme" = "Design anpassen";
|
||||
|
||||
@@ -1449,6 +1500,9 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Delete old database?" = "Alte Datenbank löschen?";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Delete or moderate up to 200 messages." = "Bis zu 200 Nachrichten löschen oder moderieren";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Delete pending connection?" = "Ausstehende Verbindung löschen?";
|
||||
|
||||
@@ -1611,6 +1665,9 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Do NOT send messages directly, even if your or destination server does not support private routing." = "Nachrichten werden nicht direkt versendet, selbst wenn Ihr oder der Zielserver kein privates Routing unterstützt.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Do not use credentials with proxy." = "Verwenden Sie keine Anmeldeinformationen mit einem Proxy.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Do NOT use private routing." = "Sie nutzen KEIN privates Routing.";
|
||||
|
||||
@@ -1629,7 +1686,8 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Downgrade and open chat" = "Datenbank herabstufen und den Chat öffnen";
|
||||
|
||||
/* chat item action */
|
||||
/* alert button
|
||||
chat item action */
|
||||
"Download" = "Herunterladen";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
@@ -1641,6 +1699,9 @@
|
||||
/* server test step */
|
||||
"Download file" = "Datei herunterladen";
|
||||
|
||||
/* alert action */
|
||||
"Download files" = "Dateien herunterladen";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Downloaded" = "Heruntergeladen";
|
||||
|
||||
@@ -1857,12 +1918,18 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Error changing address" = "Fehler beim Wechseln der Empfängeradresse";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Error changing connection profile" = "Fehler beim Wechseln des Verbindungs-Profils";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Error changing role" = "Fehler beim Ändern der Rolle";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Error changing setting" = "Fehler beim Ändern der Einstellung";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Error changing to incognito!" = "Fehler beim Wechseln zum Inkognito-Profil!";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Error connecting to forwarding server %@. Please try later." = "Fehler beim Verbinden mit dem Weiterleitungsserver %@. Bitte versuchen Sie es später erneut.";
|
||||
|
||||
@@ -1936,9 +2003,12 @@
|
||||
"Error loading %@ servers" = "Fehler beim Laden von %@ Servern";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Error opening chat" = "Fehler beim Öffnen des Chats";
|
||||
"Error migrating settings" = "Fehler beim Migrieren der Einstellungen";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Error opening chat" = "Fehler beim Öffnen des Chats";
|
||||
|
||||
/* alert title */
|
||||
"Error receiving file" = "Fehler beim Empfangen der Datei";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
@@ -1996,6 +2066,9 @@
|
||||
"Error stopping chat" = "Fehler beim Beenden des Chats";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Error switching profile" = "Fehler beim Wechseln des Profils";
|
||||
|
||||
/* alertTitle */
|
||||
"Error switching profile!" = "Fehler beim Umschalten des Profils!";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
@@ -2022,8 +2095,7 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Error: " = "Fehler: ";
|
||||
|
||||
/* file error text
|
||||
snd error text */
|
||||
/* alert message */
|
||||
"Error: %@" = "Fehler: %@";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
@@ -2048,7 +2120,7 @@
|
||||
"Expand" = "Erweitern";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"expired" = "abgelaufen";
|
||||
"expired" = "Abgelaufen";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Export database" = "Datenbank exportieren";
|
||||
@@ -2083,6 +2155,9 @@
|
||||
/* No comment provided by engineer. */
|
||||
"File error" = "Datei-Fehler";
|
||||
|
||||
/* alert message */
|
||||
"File errors:\n%@" = "Datei-Fehler:\n%@";
|
||||
|
||||
/* file error text */
|
||||
"File not found - most likely file was deleted or cancelled." = "Datei nicht gefunden - höchstwahrscheinlich wurde die Datei gelöscht oder der Transfer abgebrochen.";
|
||||
|
||||
@@ -2164,9 +2239,21 @@
|
||||
/* chat item action */
|
||||
"Forward" = "Weiterleiten";
|
||||
|
||||
/* alert title */
|
||||
"Forward %d message(s)?" = "%d Nachricht(en) weiterleiten?";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Forward and save messages" = "Nachrichten weiterleiten und speichern";
|
||||
|
||||
/* alert action */
|
||||
"Forward messages" = "Nachrichten weiterleiten";
|
||||
|
||||
/* alert message */
|
||||
"Forward messages without files?" = "Nachrichten ohne Dateien weiterleiten?";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Forward up to 20 messages at once." = "Bis zu 20 Nachrichten auf einmal weiterleiten";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"forwarded" = "weitergeleitet";
|
||||
|
||||
@@ -2176,6 +2263,9 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Forwarded from" = "Weitergeleitet aus";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Forwarding %lld messages" = "%lld Nachricht(en) wird/werden weitergeleitet";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Forwarding server %@ failed to connect to destination server %@. Please try later." = "Weiterleitungsserver %@ konnte sich nicht mit dem Zielserver %@ verbinden. Bitte versuchen Sie es später erneut.";
|
||||
|
||||
@@ -2203,9 +2293,6 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Full name (optional)" = "Vollständiger Name (optional)";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Full name:" = "Vollständiger Name:";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Fully decentralized – visible only to members." = "Vollständig dezentralisiert – nur für Mitglieder sichtbar.";
|
||||
|
||||
@@ -2306,7 +2393,7 @@
|
||||
"Group will be deleted for all members - this cannot be undone!" = "Die Gruppe wird für alle Mitglieder gelöscht. Dies kann nicht rückgängig gemacht werden!";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Group will be deleted for you - this cannot be undone!" = "Die Gruppe wird für Sie gelöscht. Dies kann nicht rückgängig gemacht werden!";
|
||||
"Group will be deleted for you - this cannot be undone!" = "Die Gruppe wird nur bei Ihnen gelöscht. Dies kann nicht rückgängig gemacht werden!";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Help" = "Hilfe";
|
||||
@@ -2407,6 +2494,9 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Importing archive" = "Archiv wird importiert";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Improved delivery, reduced traffic usage.\nMore improvements are coming soon!" = "Verbesserte Nachrichten-Auslieferung und verringerter Datenverbrauch.\nWeitere Verbesserungen sind bald verfügbar!";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Improved message delivery" = "Verbesserte Zustellung von Nachrichten";
|
||||
|
||||
@@ -2566,6 +2656,9 @@
|
||||
/* 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." = "Für die sichere Speicherung des Passworts nach dem Neustart der App und dem Wechsel des Passworts wird der iOS Schlüsselbund verwendet - dies erlaubt den Empfang von Push-Benachrichtigungen.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"IP address" = "IP-Adresse";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Irreversible message deletion" = "Unwiederbringliches löschen einer Nachricht";
|
||||
|
||||
@@ -2630,7 +2723,7 @@
|
||||
"Keep" = "Behalten";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Keep conversation" = "Unterhaltung behalten";
|
||||
"Keep conversation" = "Chat-Inhalte beibehalten";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Keep the app open to use it from desktop" = "Die App muss geöffnet bleiben, um sie vom Desktop aus nutzen zu können";
|
||||
@@ -2818,6 +2911,9 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Message servers" = "Nachrichten-Server";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Message shape" = "Nachrichten-Form";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Message source remains private." = "Die Nachrichtenquelle bleibt privat.";
|
||||
|
||||
@@ -2848,6 +2944,9 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Messages sent" = "Gesendete Nachrichten";
|
||||
|
||||
/* alert message */
|
||||
"Messages were deleted after you selected them." = "Die Nachrichten wurden gelöscht, nachdem Sie sie ausgewählt hatten.";
|
||||
|
||||
/* 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." = "Nachrichten, Dateien und Anrufe sind durch **Ende-zu-Ende-Verschlüsselung** mit Perfect Forward Secrecy, Ablehnung und Einbruchs-Wiederherstellung geschützt.";
|
||||
|
||||
@@ -3001,6 +3100,12 @@
|
||||
/* 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";
|
||||
|
||||
@@ -3043,6 +3148,12 @@
|
||||
/* 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";
|
||||
|
||||
@@ -3058,6 +3169,9 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Nothing selected" = "Nichts ausgewählt";
|
||||
|
||||
/* alert title */
|
||||
"Nothing to forward!" = "Es gibt nichts zum Weiterleiten!";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Notifications" = "Benachrichtigungen";
|
||||
|
||||
@@ -3084,7 +3198,7 @@
|
||||
/* feature offered item */
|
||||
"offered %@: %@" = "angeboten %1$@: %2$@";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
/* alert button */
|
||||
"Ok" = "Ok";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
@@ -3115,7 +3229,7 @@
|
||||
"Only client devices store user profiles, contacts, groups, and messages sent with **2-layer end-to-end encryption**." = "Nur die Endgeräte speichern die Benutzerprofile, Kontakte, Gruppen und Nachrichten, welche über eine **2-Schichten Ende-zu-Ende-Verschlüsselung** gesendet werden.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Only delete conversation" = "Nur die Unterhaltung löschen";
|
||||
"Only delete conversation" = "Nur die Chat-Inhalte löschen";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Only group owners can change group preferences." = "Gruppen-Präferenzen können nur von Gruppen-Eigentümern geändert werden.";
|
||||
@@ -3199,7 +3313,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";
|
||||
@@ -3210,6 +3324,9 @@
|
||||
/* No comment provided by engineer. */
|
||||
"other errors" = "Andere Fehler";
|
||||
|
||||
/* alert message */
|
||||
"Other file errors:\n%@" = "Andere(r) Datei-Fehler:\n%@";
|
||||
|
||||
/* member role */
|
||||
"owner" = "Eigentümer";
|
||||
|
||||
@@ -3231,6 +3348,9 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Passcode set!" = "Zugangscode eingestellt!";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Password" = "Passwort";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Password to show" = "Passwort anzeigen";
|
||||
|
||||
@@ -3327,6 +3447,9 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Polish interface" = "Polnische Bedienoberfläche";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Port" = "Port";
|
||||
|
||||
/* server test error */
|
||||
"Possibly, certificate fingerprint in server address is incorrect" = "Der Fingerabdruck des Zertifikats in der Serveradresse ist wahrscheinlich ungültig";
|
||||
|
||||
@@ -3378,12 +3501,6 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Profile images" = "Profil-Bilder";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Profile name" = "Profilname";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Profile name:" = "Profilname:";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Profile password" = "Passwort für Profil";
|
||||
|
||||
@@ -3444,6 +3561,9 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Proxied servers" = "Proxy-Server";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Proxy requires password" = "Der Proxy benötigt ein Passwort";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Push notifications" = "Push-Benachrichtigungen";
|
||||
|
||||
@@ -3460,7 +3580,7 @@
|
||||
"Rate the app" = "Bewerten Sie die App";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Reachable chat toolbar" = "Erreichbare Chat-Symbolleiste";
|
||||
"Reachable chat toolbar" = "Chat-Symbolleiste unten";
|
||||
|
||||
/* chat item menu */
|
||||
"React…" = "Reagiere…";
|
||||
@@ -3589,6 +3709,9 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Remove" = "Entfernen";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Remove archive?" = "Archiv entfernen?";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Remove image" = "Bild entfernen";
|
||||
|
||||
@@ -3715,10 +3838,11 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Safer groups" = "Sicherere Gruppen";
|
||||
|
||||
/* chat item action */
|
||||
/* alert button
|
||||
chat item action */
|
||||
"Save" = "Speichern";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
/* alert button */
|
||||
"Save (and notify contacts)" = "Speichern (und Kontakte benachrichtigen)";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
@@ -3736,9 +3860,6 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Save archive" = "Archiv speichern";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Save auto-accept settings" = "Einstellungen von \"Automatisch akzeptieren\" speichern";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Save group profile" = "Gruppenprofil speichern";
|
||||
|
||||
@@ -3760,12 +3881,12 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Save servers?" = "Alle Server speichern?";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Save settings?" = "Einstellungen speichern?";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Save welcome message?" = "Begrüßungsmeldung speichern?";
|
||||
|
||||
/* alert title */
|
||||
"Save your profile?" = "Ihr Profil speichern?";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"saved" = "abgespeichert";
|
||||
|
||||
@@ -3784,6 +3905,9 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Saved WebRTC ICE servers will be removed" = "Gespeicherte WebRTC ICE-Server werden entfernt";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Saving %lld messages" = "Es wird/werden %lld Nachricht(en) gesichert";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Scale" = "Skalieren";
|
||||
|
||||
@@ -3815,7 +3939,7 @@
|
||||
"Search bar accepts invitation links." = "In der Suchleiste werden nun auch Einladungslinks akzeptiert.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Search or paste SimpleX link" = "Suchen oder fügen Sie den SimpleX-Link ein";
|
||||
"Search or paste SimpleX link" = "Suchen oder SimpleX-Link einfügen";
|
||||
|
||||
/* network option */
|
||||
"sec" = "sek";
|
||||
@@ -3847,6 +3971,9 @@
|
||||
/* chat item action */
|
||||
"Select" = "Auswählen";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Select chat profile" = "Chat-Profil auswählen";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Selected %lld" = "%lld ausgewählt";
|
||||
|
||||
@@ -3919,7 +4046,7 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Send up to 100 last messages to new members." = "Bis zu 100 der letzten Nachrichten an neue Gruppenmitglieder senden.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
/* alert message */
|
||||
"Sender cancelled file transfer." = "Der Absender hat die Dateiübertragung abgebrochen.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
@@ -3979,6 +4106,9 @@
|
||||
/* 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";
|
||||
|
||||
@@ -4060,6 +4190,9 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Settings" = "Einstellungen";
|
||||
|
||||
/* alert message */
|
||||
"Settings were changed." = "Die Einstellungen wurden geändert.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Shape profile images" = "Form der Profil-Bilder";
|
||||
|
||||
@@ -4081,6 +4214,9 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Share link" = "Link teilen";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Share profile" = "Profil teilen";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Share this 1-time invite link" = "Teilen Sie diesen Einmal-Einladungslink";
|
||||
|
||||
@@ -4162,6 +4298,9 @@
|
||||
/* simplex link type */
|
||||
"SimpleX one-time invitation" = "SimpleX-Einmal-Einladung";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"SimpleX protocols reviewed by Trail of Bits." = "Die SimpleX-Protokolle wurden von Trail of Bits überprüft.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Simplified incognito mode" = "Vereinfachter Inkognito-Modus";
|
||||
|
||||
@@ -4180,9 +4319,15 @@
|
||||
/* No comment provided by engineer. */
|
||||
"SMP server" = "SMP-Server";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"SOCKS proxy" = "SOCKS-Proxy";
|
||||
|
||||
/* blur media */
|
||||
"Soft" = "Weich";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Some app settings were not migrated." = "Einige App-Einstellungen wurden nicht migriert.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Some file(s) were not exported:" = "Einzelne Datei(en) wurde(n) nicht exportiert:";
|
||||
|
||||
@@ -4276,12 +4421,21 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Support SimpleX Chat" = "Unterstützung von SimpleX Chat";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Switch audio and video during the call." = "Während des Anrufs zwischen Audio und Video wechseln";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Switch chat profile for 1-time invitations." = "Das Chat-Profil für Einmal-Einladungen wechseln";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"System" = "System";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"System authentication" = "System-Authentifizierung";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Tail" = "Sprechblasen-Format";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Take picture" = "Machen Sie ein Foto";
|
||||
|
||||
@@ -4385,7 +4539,7 @@
|
||||
"The message will be marked as moderated for all members." = "Diese Nachricht wird für alle Mitglieder als moderiert gekennzeichnet.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"The messages will be deleted for all members." = "Die Nachrichten werden für alle Mitglieder gelöscht werden.";
|
||||
"The messages will be deleted for all members." = "Die Nachrichten werden für alle Gruppenmitglieder gelöscht.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"The messages will be marked as moderated for all members." = "Die Nachrichten werden für alle Mitglieder als moderiert gekennzeichnet werden.";
|
||||
@@ -4411,6 +4565,9 @@
|
||||
/* No comment provided by engineer. */
|
||||
"The text you pasted is not a SimpleX link." = "Der von Ihnen eingefügte Text ist kein SimpleX-Link.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"The uploaded database archive will be permanently removed from the servers." = "Das hochgeladene Datenbank-Archiv wird dauerhaft von den Servern entfernt.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Themes" = "Design";
|
||||
|
||||
@@ -4489,6 +4646,12 @@
|
||||
/* 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.";
|
||||
|
||||
@@ -4588,7 +4751,7 @@
|
||||
/* No comment provided by engineer. */
|
||||
"unknown servers" = "Unbekannte Relais";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
/* alert title */
|
||||
"Unknown servers!" = "Unbekannte Server!";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
@@ -4705,18 +4868,21 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Use SimpleX Chat servers?" = "Verwenden Sie SimpleX-Chat-Server?";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Use SOCKS proxy" = "SOCKS-Proxy nutzen";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Use the app while in the call." = "Die App kann während eines Anrufs genutzt werden.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Use the app with one hand." = "Die App mit einer Hand nutzen.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"User profile" = "Benutzerprofil";
|
||||
"Use the app with one hand." = "Die App mit einer Hand bedienen.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"User selection" = "Benutzer-Auswahl";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Username" = "Benutzername";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Using SimpleX Chat servers." = "Verwendung von SimpleX-Chat-Servern.";
|
||||
|
||||
@@ -4894,7 +5060,7 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Without Tor or VPN, your IP address will be visible to file servers." = "Ohne Tor- oder VPN-Nutzung wird Ihre IP-Adresse für Datei-Server sichtbar sein.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
/* alert message */
|
||||
"Without Tor or VPN, your IP address will be visible to these XFTP relays: %@." = "Ohne Tor- oder VPN-Nutzung wird Ihre IP-Adresse für diese XFTP-Relais sichtbar sein: %@.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
@@ -4918,9 +5084,6 @@
|
||||
/* No comment provided by engineer. */
|
||||
"you" = "Profil";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"You" = "Profil";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"You **must not** use the same database on two devices." = "Sie dürfen die selbe Datenbank **nicht** auf zwei Geräten nutzen.";
|
||||
|
||||
@@ -5021,7 +5184,7 @@
|
||||
"You can start chat via app Settings / Database or by restarting the app" = "Sie können den Chat über die App-Einstellungen / Datenbank oder durch Neustart der App starten";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"You can still view conversation with %@ in the list of chats." = "Sie können in der Chatliste weiterhin die Unterhaltung mit %@ einsehen.";
|
||||
"You can still view conversation with %@ in the list of chats." = "Sie können in der Chat-Liste weiterhin die Unterhaltung mit %@ einsehen.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"You can turn on SimpleX Lock via Settings." = "Sie können die SimpleX-Sperre über die Einstellungen aktivieren.";
|
||||
@@ -5155,9 +5318,15 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Your chat database is not encrypted - set passphrase to encrypt it." = "Ihre Chat-Datenbank ist nicht verschlüsselt. Bitte legen Sie ein Passwort fest, um sie zu schützen.";
|
||||
|
||||
/* alert title */
|
||||
"Your chat preferences" = "Ihre Chat-Präferenzen";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Your chat profiles" = "Ihre Chat-Profile";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Your connection was moved to %@ but an unexpected error occurred while redirecting you to the profile." = "Ihre Verbindung wurde auf %@ verschoben. Während Sie auf das Profil weitergeleitet wurden trat aber ein unerwarteter Fehler auf.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Your contact sent a file that is larger than currently supported maximum size (%@)." = "Ihr Kontakt hat eine Datei gesendet, die größer ist als die derzeit unterstützte maximale Größe (%@).";
|
||||
|
||||
@@ -5167,6 +5336,9 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Your contacts will remain connected." = "Ihre Kontakte bleiben weiterhin verbunden.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Your credentials may be sent unencrypted." = "Ihre Anmeldeinformationen können unverschlüsselt versendet werden.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Your current chat database will be DELETED and REPLACED with the imported one." = "Ihre aktuelle Chat-Datenbank wird GELÖSCHT und durch die Importierte ERSETZT.";
|
||||
|
||||
@@ -5189,7 +5361,10 @@
|
||||
"Your profile **%@** will be shared." = "Ihr Profil **%@** wird geteilt.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Your profile is stored on your device and shared only with your contacts.\nSimpleX servers cannot see your profile." = "Ihr Profil wird auf Ihrem Gerät gespeichert und nur mit Ihren Kontakten geteilt.\nSimpleX-Server können Ihr Profil nicht einsehen.";
|
||||
"Your profile is stored on your device and shared only with your contacts. SimpleX servers cannot see your profile." = "Ihr Profil wird auf Ihrem Gerät gespeichert und nur mit Ihren Kontakten geteilt. SimpleX-Server können Ihr Profil nicht einsehen.";
|
||||
|
||||
/* alert message */
|
||||
"Your profile was changed. If you save it, the updated profile will be sent to all your contacts." = "Ihr Profil wurde geändert. Wenn Sie es speichern, wird das aktualisierte Profil an alle Ihre Kontakte gesendet.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Your profile, contacts and delivered messages are stored on your device." = "Ihr Profil, Ihre Kontakte und zugestellten Nachrichten werden auf Ihrem Gerät gespeichert.";
|
||||
|
||||
@@ -160,6 +160,9 @@
|
||||
/* notification title */
|
||||
"%@ wants to connect!" = "¡ %@ quiere contactar!";
|
||||
|
||||
/* format for date separator in chat */
|
||||
"%@, %@" = "%1$@, %2$@";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"%@, %@ and %lld members" = "%@, %@ y %lld miembro(s) más";
|
||||
|
||||
@@ -172,9 +175,24 @@
|
||||
/* time interval */
|
||||
"%d days" = "%d días";
|
||||
|
||||
/* forward confirmation reason */
|
||||
"%d file(s) are still being downloaded." = "%d archivo(s) se está(n) descargando todavía.";
|
||||
|
||||
/* forward confirmation reason */
|
||||
"%d file(s) failed to download." = "La descarga ha fallado para %d archivo(s).";
|
||||
|
||||
/* forward confirmation reason */
|
||||
"%d file(s) were deleted." = "%d archivo(s) ha(n) sido eliminado(s).";
|
||||
|
||||
/* forward confirmation reason */
|
||||
"%d file(s) were not downloaded." = "%d archivo(s) no se ha(n) descargado.";
|
||||
|
||||
/* time interval */
|
||||
"%d hours" = "%d horas";
|
||||
|
||||
/* alert title */
|
||||
"%d messages not forwarded" = "%d mensajes no enviados";
|
||||
|
||||
/* time interval */
|
||||
"%d min" = "%d minutos";
|
||||
|
||||
@@ -305,7 +323,7 @@
|
||||
"A new contact" = "Contacto nuevo";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"A new random profile will be shared." = "Se compartirá un perfil nuevo aleatorio.";
|
||||
"A new random profile will be shared." = "Compartirás un perfil nuevo aleatorio.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"A separate TCP connection will be used **for each chat profile you have in the app**." = "Se usará una conexión TCP independiente **por cada perfil que tengas en la aplicación**.";
|
||||
@@ -454,7 +472,7 @@
|
||||
/* No comment provided by engineer. */
|
||||
"All new messages from %@ will be hidden!" = "¡Los mensajes nuevos de %@ estarán ocultos!";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
/* profile dropdown */
|
||||
"All profiles" = "Todos los perfiles";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
@@ -577,6 +595,9 @@
|
||||
/* 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";
|
||||
|
||||
@@ -649,6 +670,9 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Auto-accept images" = "Aceptar imágenes automáticamente";
|
||||
|
||||
/* alert title */
|
||||
"Auto-accept settings" = "Auto aceptar configuración";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Back" = "Volver";
|
||||
|
||||
@@ -670,15 +694,30 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Bad message ID" = "ID de mensaje incorrecto";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Better calls" = "Llamadas mejoradas";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Better groups" = "Grupos mejorados";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Better message dates." = "Sistema de fechas mejorado.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Better messages" = "Mensajes mejorados";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Better networking" = "Uso de red mejorado";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Better notifications" = "Notificaciones mejoradas";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Better security ✅" = "Seguridad mejorada ✅";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Better user experience" = "Experiencia de usuario mejorada";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Black" = "Negro";
|
||||
|
||||
@@ -781,7 +820,7 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Can't message member" = "No se pueden enviar mensajes al miembro";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
/* alert button */
|
||||
"Cancel" = "Cancelar";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
@@ -796,7 +835,7 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Cannot forward message" = "No se puede reenviar el mensaje";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
/* alert title */
|
||||
"Cannot receive file" = "No se puede recibir el archivo";
|
||||
|
||||
/* snd error text */
|
||||
@@ -890,6 +929,12 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Chat preferences" = "Preferencias de Chat";
|
||||
|
||||
/* 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";
|
||||
|
||||
@@ -987,7 +1032,7 @@
|
||||
"Confirm password" = "Confirmar contraseña";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Confirm that you remember database passphrase to migrate it." = "Para migrar confirma que recuerdas la frase de contraseña de la base de datos.";
|
||||
"Confirm that you remember database passphrase to migrate it." = "Para migrar la base de datos confirma que recuerdas la frase de contraseña.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Confirm upload" = "Confirmar subida";
|
||||
@@ -1178,6 +1223,9 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Core version: v%@" = "Versión Core: v%@";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Corner" = "Esquina";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Correct name to %@?" = "¿Corregir el nombre a %@?";
|
||||
|
||||
@@ -1259,6 +1307,9 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Custom time" = "Tiempo personalizado";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Customizable message shape." = "Forma personalizable de los mensajes.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Customize theme" = "Personalizar tema";
|
||||
|
||||
@@ -1305,7 +1356,7 @@
|
||||
"Database passphrase & export" = "Base de datos y contraseña";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Database passphrase is different from saved in the keychain." = "La contraseña es distinta a la almacenada en Keychain.";
|
||||
"Database passphrase is different from saved in the keychain." = "La contraseña es diferente a la almacenada en Keychain.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Database passphrase is required to open chat." = "Para abrir la aplicación se requiere la contraseña de la base de datos.";
|
||||
@@ -1449,6 +1500,9 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Delete old database?" = "¿Eliminar base de datos antigua?";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Delete or moderate up to 200 messages." = "Borra o modera hasta 200 mensajes a la vez.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Delete pending connection?" = "¿Eliminar conexión pendiente?";
|
||||
|
||||
@@ -1594,7 +1648,7 @@
|
||||
"Disconnect" = "Desconectar";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Disconnect desktop?" = "¿Desconectar ordenador?";
|
||||
"Disconnect desktop?" = "¿Desconectar del ordenador?";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Discover and join groups" = "Descubre y únete a grupos";
|
||||
@@ -1611,6 +1665,9 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Do NOT send messages directly, even if your or destination server does not support private routing." = "NO enviar mensajes directamente incluso si tu servidor o el de destino no soportan enrutamiento privado.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Do not use credentials with proxy." = "No uses credenciales con proxy.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Do NOT use private routing." = "NO usar enrutamiento privado.";
|
||||
|
||||
@@ -1624,12 +1681,13 @@
|
||||
"Don't enable" = "No activar";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Don't show again" = "No mostrar de nuevo";
|
||||
"Don't show again" = "No volver a mostrar";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Downgrade and open chat" = "Degradar y abrir Chat";
|
||||
|
||||
/* chat item action */
|
||||
/* alert button
|
||||
chat item action */
|
||||
"Download" = "Descargar";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
@@ -1641,6 +1699,9 @@
|
||||
/* server test step */
|
||||
"Download file" = "Descargar archivo";
|
||||
|
||||
/* alert action */
|
||||
"Download files" = "Descargar archivos";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Downloaded" = "Descargado";
|
||||
|
||||
@@ -1857,12 +1918,18 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Error changing address" = "Error al cambiar servidor";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Error changing connection profile" = "Error al cambiar el perfil de conexión";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Error changing role" = "Error al cambiar rol";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Error changing setting" = "Error cambiando configuración";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Error changing to incognito!" = "¡Error al cambiar a incógnito!";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Error connecting to forwarding server %@. Please try later." = "Error al conectar con el servidor de reenvío %@. Por favor, inténtalo más tarde.";
|
||||
|
||||
@@ -1936,9 +2003,12 @@
|
||||
"Error loading %@ servers" = "Error al cargar servidores %@";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Error opening chat" = "Error al abrir chat";
|
||||
"Error migrating settings" = "Error al migrar la configuración";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Error opening chat" = "Error al abrir chat";
|
||||
|
||||
/* alert title */
|
||||
"Error receiving file" = "Error al recibir archivo";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
@@ -1996,6 +2066,9 @@
|
||||
"Error stopping chat" = "Error al parar SimpleX";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Error switching profile" = "Error al cambiar perfil";
|
||||
|
||||
/* alertTitle */
|
||||
"Error switching profile!" = "¡Error al cambiar perfil!";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
@@ -2022,8 +2095,7 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Error: " = "Error: ";
|
||||
|
||||
/* file error text
|
||||
snd error text */
|
||||
/* alert message */
|
||||
"Error: %@" = "Error: %@";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
@@ -2083,6 +2155,9 @@
|
||||
/* No comment provided by engineer. */
|
||||
"File error" = "Error de archivo";
|
||||
|
||||
/* alert message */
|
||||
"File errors:\n%@" = "Error(es) de archivo\n%@";
|
||||
|
||||
/* file error text */
|
||||
"File not found - most likely file was deleted or cancelled." = "Archivo no encontrado, probablemente haya sido borrado o cancelado.";
|
||||
|
||||
@@ -2164,9 +2239,21 @@
|
||||
/* chat item action */
|
||||
"Forward" = "Reenviar";
|
||||
|
||||
/* alert title */
|
||||
"Forward %d message(s)?" = "¿Reenviar %d mensaje(s)?";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Forward and save messages" = "Reenviar y guardar mensajes";
|
||||
|
||||
/* alert action */
|
||||
"Forward messages" = "Reenviar mensajes";
|
||||
|
||||
/* alert message */
|
||||
"Forward messages without files?" = "¿Reenviar mensajes sin los archivos?";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Forward up to 20 messages at once." = "Desplazamiento de hasta 20 mensajes.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"forwarded" = "reenviado";
|
||||
|
||||
@@ -2176,6 +2263,9 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Forwarded from" = "Reenviado por";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Forwarding %lld messages" = "Reenviando %lld mensajes";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Forwarding server %@ failed to connect to destination server %@. Please try later." = "El servidor de reenvío %@ no ha podido conectarse al servidor de destino %@. Por favor, intentalo más tarde.";
|
||||
|
||||
@@ -2204,13 +2294,10 @@
|
||||
"Full name (optional)" = "Nombre completo (opcional)";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Full name:" = "Nombre completo:";
|
||||
"Fully decentralized – visible only to members." = "Totalmente descentralizado. Visible sólo para los miembros.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Fully decentralized – visible only to members." = "Completamente descentralizado y sólo visible para los miembros.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Fully re-implemented - work in background!" = "Completamente reimplementado: ¡funciona en segundo plano!";
|
||||
"Fully re-implemented - work in background!" = "Totalmente revisado. ¡Funciona en segundo plano!";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Further reduced battery usage" = "Reducción consumo de batería";
|
||||
@@ -2407,6 +2494,9 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Importing archive" = "Importando archivo";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Improved delivery, reduced traffic usage.\nMore improvements are coming soon!" = "Reducción del tráfico y entrega mejorada.\n¡Pronto habrá nuevas mejoras!";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Improved message delivery" = "Entrega de mensajes mejorada";
|
||||
|
||||
@@ -2566,6 +2656,9 @@
|
||||
/* 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 se usará para almacenar la contraseña de forma segura después de reiniciar la aplicación o cambiar la contraseña. Esto permitirá recibir notificaciones automáticas.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"IP address" = "Dirección IP";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Irreversible message deletion" = "Eliminación irreversible del mensaje";
|
||||
|
||||
@@ -2699,7 +2792,7 @@
|
||||
"Local name" = "Nombre local";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Local profile data only" = "Sólo datos del perfil local";
|
||||
"Local profile data only" = "Eliminar sólo el perfil";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Lock after" = "Bloquear en";
|
||||
@@ -2818,6 +2911,9 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Message servers" = "Servidores de mensajes";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Message shape" = "Forma del mensaje";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Message source remains private." = "El autor del mensaje se mantiene privado.";
|
||||
|
||||
@@ -2848,6 +2944,9 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Messages sent" = "Mensajes enviados";
|
||||
|
||||
/* alert message */
|
||||
"Messages were deleted after you selected them." = "Los mensajes han sido borrados después de seleccionarlos.";
|
||||
|
||||
/* 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." = "Los mensajes, archivos y llamadas están protegidos mediante **cifrado de extremo a extremo** con secreto perfecto hacía adelante, repudio y recuperación tras ataque.";
|
||||
|
||||
@@ -3001,6 +3100,12 @@
|
||||
/* 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";
|
||||
|
||||
@@ -3043,6 +3148,12 @@
|
||||
/* 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";
|
||||
|
||||
@@ -3058,6 +3169,9 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Nothing selected" = "Nada seleccionado";
|
||||
|
||||
/* alert title */
|
||||
"Nothing to forward!" = "¡Nada para reenviar!";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Notifications" = "Notificaciones";
|
||||
|
||||
@@ -3084,7 +3198,7 @@
|
||||
/* feature offered item */
|
||||
"offered %@: %@" = "ofrecido %1$@: %2$@";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
/* alert button */
|
||||
"Ok" = "Ok";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
@@ -3210,6 +3324,9 @@
|
||||
/* No comment provided by engineer. */
|
||||
"other errors" = "otros errores";
|
||||
|
||||
/* alert message */
|
||||
"Other file errors:\n%@" = "Otro(s) error(es) de archivo.\n%@";
|
||||
|
||||
/* member role */
|
||||
"owner" = "propietario";
|
||||
|
||||
@@ -3231,6 +3348,9 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Passcode set!" = "¡Código de acceso guardado!";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Password" = "Contraseña";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Password to show" = "Contraseña para hacerlo visible";
|
||||
|
||||
@@ -3327,8 +3447,11 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Polish interface" = "Interfaz en polaco";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Port" = "Puerto";
|
||||
|
||||
/* server test error */
|
||||
"Possibly, certificate fingerprint in server address is incorrect" = "Posiblemente la huella digital del certificado en la dirección del servidor es incorrecta";
|
||||
"Possibly, certificate fingerprint in server address is incorrect" = "Posiblemente la huella 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.";
|
||||
@@ -3370,7 +3493,7 @@
|
||||
"Private routing error" = "Error de enrutamiento privado";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Profile and server connections" = "Datos del perfil y conexiones";
|
||||
"Profile and server connections" = "Eliminar perfil y conexiones";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Profile image" = "Imagen del perfil";
|
||||
@@ -3378,12 +3501,6 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Profile images" = "Forma de los perfiles";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Profile name" = "Nombre del perfil";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Profile name:" = "Nombre del perfil:";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Profile password" = "Contraseña del perfil";
|
||||
|
||||
@@ -3444,6 +3561,9 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Proxied servers" = "Servidores con proxy";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Proxy requires password" = "El proxy requiere contraseña";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Push notifications" = "Notificaciones automáticas";
|
||||
|
||||
@@ -3589,6 +3709,9 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Remove" = "Eliminar";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Remove archive?" = "¿Eliminar archivo?";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Remove image" = "Eliminar imagen";
|
||||
|
||||
@@ -3611,7 +3734,7 @@
|
||||
"removed contact address" = "dirección de contacto eliminada";
|
||||
|
||||
/* profile update event chat item */
|
||||
"removed profile picture" = "imagen de perfil eliminada";
|
||||
"removed profile picture" = "ha eliminado la imagen del perfil";
|
||||
|
||||
/* rcv group event chat item */
|
||||
"removed you" = "te ha expulsado";
|
||||
@@ -3715,10 +3838,11 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Safer groups" = "Grupos más seguros";
|
||||
|
||||
/* chat item action */
|
||||
/* alert button
|
||||
chat item action */
|
||||
"Save" = "Guardar";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
/* alert button */
|
||||
"Save (and notify contacts)" = "Guardar (y notificar contactos)";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
@@ -3736,9 +3860,6 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Save archive" = "Guardar archivo";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Save auto-accept settings" = "Guardar configuración de auto aceptar";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Save group profile" = "Guardar perfil de grupo";
|
||||
|
||||
@@ -3760,12 +3881,12 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Save servers?" = "¿Guardar servidores?";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Save settings?" = "¿Guardar configuración?";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Save welcome message?" = "¿Guardar mensaje de bienvenida?";
|
||||
|
||||
/* alert title */
|
||||
"Save your profile?" = "¿Guardar tu perfil?";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"saved" = "guardado";
|
||||
|
||||
@@ -3784,6 +3905,9 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Saved WebRTC ICE servers will be removed" = "Los servidores WebRTC ICE guardados serán eliminados";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Saving %lld messages" = "Guardando %lld mensajes";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Scale" = "Escala";
|
||||
|
||||
@@ -3847,6 +3971,9 @@
|
||||
/* chat item action */
|
||||
"Select" = "Seleccionar";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Select chat profile" = "Selecciona perfil de chat";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Selected %lld" = "Seleccionados %lld";
|
||||
|
||||
@@ -3878,7 +4005,7 @@
|
||||
"send direct message" = "Enviar mensaje directo";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Send direct message to connect" = "Envia un mensaje para conectar";
|
||||
"Send direct message to connect" = "Envía un mensaje para conectar";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Send disappearing message" = "Enviar mensaje temporal";
|
||||
@@ -3919,7 +4046,7 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Send up to 100 last messages to new members." = "Se envían hasta 100 mensajes más recientes a los miembros nuevos.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
/* alert message */
|
||||
"Sender cancelled file transfer." = "El remitente ha cancelado la transferencia de archivos.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
@@ -3979,6 +4106,9 @@
|
||||
/* 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";
|
||||
|
||||
@@ -3998,7 +4128,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!" = "¡Error en prueba del servidor!";
|
||||
"Server test failed!" = "¡Prueba no superada!";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Server type" = "Tipo de servidor";
|
||||
@@ -4040,7 +4170,7 @@
|
||||
"set new contact address" = "nueva dirección de contacto";
|
||||
|
||||
/* profile update event chat item */
|
||||
"set new profile picture" = "nueva imagen de perfil";
|
||||
"set new profile picture" = "tiene nueva imagen del perfil";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Set passcode" = "Código autodestrucción";
|
||||
@@ -4060,6 +4190,9 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Settings" = "Configuración";
|
||||
|
||||
/* alert message */
|
||||
"Settings were changed." = "La configuración ha sido modificada.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Shape profile images" = "Dar forma a las imágenes de perfil";
|
||||
|
||||
@@ -4081,6 +4214,9 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Share link" = "Compartir enlace";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Share profile" = "Comparte perfil";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Share this 1-time invite link" = "Comparte este enlace de un solo uso";
|
||||
|
||||
@@ -4162,6 +4298,9 @@
|
||||
/* simplex link type */
|
||||
"SimpleX one-time invitation" = "Invitación SimpleX de un uso";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"SimpleX protocols reviewed by Trail of Bits." = "Protocolos de SimpleX auditados por Trail of Bits.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Simplified incognito mode" = "Modo incógnito simplificado";
|
||||
|
||||
@@ -4180,9 +4319,15 @@
|
||||
/* No comment provided by engineer. */
|
||||
"SMP server" = "Servidor SMP";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"SOCKS proxy" = "Proxy SOCKS";
|
||||
|
||||
/* blur media */
|
||||
"Soft" = "Suave";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Some app settings were not migrated." = "Algunas configuraciones de la app no han sido migradas.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Some file(s) were not exported:" = "Algunos archivos no han sido exportados:";
|
||||
|
||||
@@ -4276,12 +4421,21 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Support SimpleX Chat" = "Soporte SimpleX Chat";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Switch audio and video during the call." = "Intercambia audio y video durante la llamada.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Switch chat profile for 1-time invitations." = "Cambia el perfil de chat para invitaciones de un solo uso.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"System" = "Sistema";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"System authentication" = "Autenticación del sistema";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Tail" = "Cola";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Take picture" = "Tomar foto";
|
||||
|
||||
@@ -4325,7 +4479,7 @@
|
||||
"Temporary file error" = "Error en archivo temporal";
|
||||
|
||||
/* server test failure */
|
||||
"Test failed at step %@." = "La prueba ha fallado en el paso %@.";
|
||||
"Test failed at step %@." = "Prueba no superada en el paso %@.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Test server" = "Probar servidor";
|
||||
@@ -4334,7 +4488,7 @@
|
||||
"Test servers" = "Probar servidores";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Tests failed!" = "¡Pruebas fallidas!";
|
||||
"Tests failed!" = "¡Pruebas no superadas!";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Thank you for installing SimpleX Chat!" = "¡Gracias por instalar SimpleX Chat!";
|
||||
@@ -4411,6 +4565,9 @@
|
||||
/* No comment provided by engineer. */
|
||||
"The text you pasted is not a SimpleX link." = "El texto pegado no es un enlace SimpleX.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"The uploaded database archive will be permanently removed from the servers." = "El archivo de bases de datos subido será eliminado permanentemente de los servidores.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Themes" = "Temas";
|
||||
|
||||
@@ -4489,6 +4646,12 @@
|
||||
/* 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.";
|
||||
|
||||
@@ -4588,7 +4751,7 @@
|
||||
/* No comment provided by engineer. */
|
||||
"unknown servers" = "con servidores desconocidos";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
/* alert title */
|
||||
"Unknown servers!" = "¡Servidores desconocidos!";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
@@ -4705,6 +4868,9 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Use SimpleX Chat servers?" = "¿Usar servidores SimpleX Chat?";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Use SOCKS proxy" = "Usar proxy SOCKS";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Use the app while in the call." = "Usar la aplicación durante la llamada.";
|
||||
|
||||
@@ -4712,10 +4878,10 @@
|
||||
"Use the app with one hand." = "Usa la aplicación con una sola mano.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"User profile" = "Perfil de usuario";
|
||||
"User selection" = "Selección de usuarios";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"User selection" = "Selección de usuarios";
|
||||
"Username" = "Nombre de usuario";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Using SimpleX Chat servers." = "Usar servidores SimpleX Chat.";
|
||||
@@ -4894,7 +5060,7 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Without Tor or VPN, your IP address will be visible to file servers." = "Sin Tor o VPN, tu dirección IP será visible para los servidores de archivos.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
/* alert message */
|
||||
"Without Tor or VPN, your IP address will be visible to these XFTP relays: %@." = "Sin Tor o VPN, tu dirección IP será visible para estos servidores XFTP: %@.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
@@ -4918,9 +5084,6 @@
|
||||
/* No comment provided by engineer. */
|
||||
"you" = "tu";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"You" = "Tú";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"You **must not** use the same database on two devices." = "**No debes** usar la misma base de datos en dos dispositivos.";
|
||||
|
||||
@@ -5155,9 +5318,15 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Your chat database is not encrypted - set passphrase to encrypt it." = "La base de datos no está cifrada - establece una contraseña para cifrarla.";
|
||||
|
||||
/* alert title */
|
||||
"Your chat preferences" = "Tus preferencias de chat";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Your chat profiles" = "Mis perfiles";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Your connection was moved to %@ but an unexpected error occurred while redirecting you to the profile." = "Tu conexión ha sido trasladada a %@ pero ha ocurrido un error inesperado al redirigirte al perfil.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Your contact sent a file that is larger than currently supported maximum size (%@)." = "El contacto ha enviado un archivo mayor al máximo admitido (%@).";
|
||||
|
||||
@@ -5167,6 +5336,9 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Your contacts will remain connected." = "Tus contactos permanecerán conectados.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Your credentials may be sent unencrypted." = "Tus credenciales podrían ser enviadas sin cifrar.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Your current chat database will be DELETED and REPLACED with the imported one." = "La base de datos actual será ELIMINADA y SUSTITUIDA por la importada.";
|
||||
|
||||
@@ -5189,7 +5361,10 @@
|
||||
"Your profile **%@** will be shared." = "El perfil **%@** será compartido.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Your profile is stored on your device and shared only with your contacts.\nSimpleX servers cannot see your profile." = "Tu perfil es almacenado en tu dispositivo y solamente se comparte con tus contactos.\nLos servidores SimpleX no pueden ver tu perfil.";
|
||||
"Your profile is stored on your device and shared only with your contacts. SimpleX servers cannot see your profile." = "Tu perfil es almacenado en tu dispositivo y solamente se comparte con tus contactos. Los servidores SimpleX no pueden ver tu perfil.";
|
||||
|
||||
/* alert message */
|
||||
"Your profile was changed. If you save it, the updated profile will be sent to all your contacts." = "Tu perfil ha sido modificado. Si lo guardas la actualización será enviada a todos tus contactos.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Your profile, contacts and delivered messages are stored on your device." = "Tu perfil, contactos y mensajes se almacenan en tu dispositivo.";
|
||||
@@ -5201,7 +5376,7 @@
|
||||
"Your server" = "Tu servidor";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Your server address" = "Dirección de tu servidor";
|
||||
"Your server address" = "Dirección del servidor";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Your settings" = "Configuración";
|
||||
|
||||
@@ -547,7 +547,7 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Can't invite contacts!" = "Kontakteja ei voi kutsua!";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
/* alert button */
|
||||
"Cancel" = "Peruuta";
|
||||
|
||||
/* feature offered item */
|
||||
@@ -556,7 +556,7 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Cannot access keychain to save database password" = "Ei pääsyä avainnippuun tietokannan salasanan tallentamiseksi";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
/* alert title */
|
||||
"Cannot receive file" = "Tiedostoa ei voi vastaanottaa";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
@@ -629,6 +629,9 @@
|
||||
/* 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";
|
||||
|
||||
@@ -1356,7 +1359,7 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Error loading %@ servers" = "Virhe %@-palvelimien lataamisessa";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
/* alert title */
|
||||
"Error receiving file" = "Virhe tiedoston vastaanottamisessa";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
@@ -1395,7 +1398,7 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Error stopping chat" = "Virhe keskustelun lopettamisessa";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
/* alertTitle */
|
||||
"Error switching profile!" = "Virhe profiilin vaihdossa!";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
@@ -1416,8 +1419,7 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Error: " = "Virhe: ";
|
||||
|
||||
/* file error text
|
||||
snd error text */
|
||||
/* alert message */
|
||||
"Error: %@" = "Virhe: %@";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
@@ -1519,9 +1521,6 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Full name (optional)" = "Koko nimi (valinnainen)";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Full name:" = "Koko nimi:";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Fully re-implemented - work in background!" = "Täysin uudistettu - toimii taustalla!";
|
||||
|
||||
@@ -2163,7 +2162,7 @@
|
||||
/* feature offered item */
|
||||
"offered %@: %@" = "tarjottu %1$@: %2$@";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
/* alert button */
|
||||
"Ok" = "Ok";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
@@ -2572,10 +2571,11 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Run chat" = "Käynnistä chat";
|
||||
|
||||
/* chat item action */
|
||||
/* alert button
|
||||
chat item action */
|
||||
"Save" = "Tallenna";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
/* alert button */
|
||||
"Save (and notify contacts)" = "Tallenna (ja ilmoita kontakteille)";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
@@ -2590,9 +2590,6 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Save archive" = "Tallenna arkisto";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Save auto-accept settings" = "Tallenna automaattisen hyväksynnän asetukset";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Save group profile" = "Tallenna ryhmäprofiili";
|
||||
|
||||
@@ -2614,9 +2611,6 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Save servers?" = "Tallenna palvelimet?";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Save settings?" = "Tallenna asetukset?";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Save welcome message?" = "Tallenna tervetuloviesti?";
|
||||
|
||||
@@ -2707,7 +2701,7 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Send them from gallery or custom keyboards." = "Lähetä ne galleriasta tai mukautetuista näppäimistöistä.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
/* alert message */
|
||||
"Sender cancelled file transfer." = "Lähettäjä peruutti tiedoston siirron.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
@@ -3196,9 +3190,6 @@
|
||||
/* 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.";
|
||||
|
||||
@@ -3316,9 +3307,6 @@
|
||||
/* pref value */
|
||||
"yes" = "kyllä";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"You" = "Sinä";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"You accepted connection" = "Hyväksyit yhteyden";
|
||||
|
||||
@@ -3512,7 +3500,7 @@
|
||||
"Your profile **%@** will be shared." = "Profiilisi **%@** jaetaan.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Your profile is stored on your device and shared only with your contacts.\nSimpleX servers cannot see your profile." = "Profiilisi tallennetaan laitteeseesi ja jaetaan vain yhteystietojesi kanssa.\nSimpleX-palvelimet eivät näe profiiliasi.";
|
||||
"Your profile is stored on your device and shared only with your contacts. SimpleX servers cannot see your profile." = "Profiilisi tallennetaan laitteeseesi ja jaetaan vain yhteystietojesi kanssa. SimpleX-palvelimet eivät näe profiiliasi.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Your profile, contacts and delivered messages are stored on your device." = "Profiilisi, kontaktisi ja toimitetut viestit tallennetaan laitteellesi.";
|
||||
|
||||
@@ -454,7 +454,7 @@
|
||||
/* No comment provided by engineer. */
|
||||
"All new messages from %@ will be hidden!" = "Tous les nouveaux messages de %@ seront cachés !";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
/* profile dropdown */
|
||||
"All profiles" = "Tous les profiles";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
@@ -781,7 +781,7 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Can't message member" = "Impossible d'envoyer un message à ce membre";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
/* alert button */
|
||||
"Cancel" = "Annuler";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
@@ -796,7 +796,7 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Cannot forward message" = "Impossible de transférer le message";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
/* alert title */
|
||||
"Cannot receive file" = "Impossible de recevoir le fichier";
|
||||
|
||||
/* snd error text */
|
||||
@@ -890,6 +890,9 @@
|
||||
/* 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";
|
||||
|
||||
@@ -1629,7 +1632,8 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Downgrade and open chat" = "Rétrograder et ouvrir le chat";
|
||||
|
||||
/* chat item action */
|
||||
/* alert button
|
||||
chat item action */
|
||||
"Download" = "Télécharger";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
@@ -1938,7 +1942,7 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Error opening chat" = "Erreur lors de l'ouverture du chat";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
/* alert title */
|
||||
"Error receiving file" = "Erreur lors de la réception du fichier";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
@@ -1995,7 +1999,7 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Error stopping chat" = "Erreur lors de l'arrêt du chat";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
/* alertTitle */
|
||||
"Error switching profile!" = "Erreur lors du changement de profil !";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
@@ -2022,8 +2026,7 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Error: " = "Erreur : ";
|
||||
|
||||
/* file error text
|
||||
snd error text */
|
||||
/* alert message */
|
||||
"Error: %@" = "Erreur : %@";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
@@ -2203,9 +2206,6 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Full name (optional)" = "Nom complet (optionnel)";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Full name:" = "Nom complet :";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Fully decentralized – visible only to members." = "Entièrement décentralisé – visible que par ses membres.";
|
||||
|
||||
@@ -3084,7 +3084,7 @@
|
||||
/* feature offered item */
|
||||
"offered %@: %@" = "propose %1$@ : %2$@";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
/* alert button */
|
||||
"Ok" = "Ok";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
@@ -3378,12 +3378,6 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Profile images" = "Images de profil";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Profile name" = "Nom du profil";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Profile name:" = "Nom du profil :";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Profile password" = "Mot de passe de profil";
|
||||
|
||||
@@ -3715,10 +3709,11 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Safer groups" = "Groupes plus sûrs";
|
||||
|
||||
/* chat item action */
|
||||
/* alert button
|
||||
chat item action */
|
||||
"Save" = "Enregistrer";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
/* alert button */
|
||||
"Save (and notify contacts)" = "Enregistrer (et en informer les contacts)";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
@@ -3736,9 +3731,6 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Save archive" = "Enregistrer l'archive";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Save auto-accept settings" = "Enregistrer les paramètres de validation automatique";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Save group profile" = "Enregistrer le profil du groupe";
|
||||
|
||||
@@ -3760,9 +3752,6 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Save servers?" = "Enregistrer les serveurs ?";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Save settings?" = "Enregistrer les paramètres ?";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Save welcome message?" = "Enregistrer le message d'accueil ?";
|
||||
|
||||
@@ -3919,7 +3908,7 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Send up to 100 last messages to new members." = "Envoi des 100 derniers messages aux nouveaux membres.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
/* alert message */
|
||||
"Sender cancelled file transfer." = "L'expéditeur a annulé le transfert de fichiers.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
@@ -4588,7 +4577,7 @@
|
||||
/* No comment provided by engineer. */
|
||||
"unknown servers" = "relais inconnus";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
/* alert title */
|
||||
"Unknown servers!" = "Serveurs inconnus !";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
@@ -4711,9 +4700,6 @@
|
||||
/* 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";
|
||||
|
||||
@@ -4894,7 +4880,7 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Without Tor or VPN, your IP address will be visible to file servers." = "Sans Tor ou un VPN, votre adresse IP sera visible par les serveurs de fichiers.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
/* alert message */
|
||||
"Without Tor or VPN, your IP address will be visible to these XFTP relays: %@." = "Sans Tor ni VPN, votre adresse IP sera visible par ces relais XFTP : %@.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
@@ -4918,9 +4904,6 @@
|
||||
/* No comment provided by engineer. */
|
||||
"you" = "vous";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"You" = "Vous";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"You **must not** use the same database on two devices." = "Vous **ne devez pas** utiliser la même base de données sur deux appareils.";
|
||||
|
||||
@@ -5189,7 +5172,7 @@
|
||||
"Your profile **%@** will be shared." = "Votre profil **%@** sera partagé.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Your profile is stored on your device and shared only with your contacts.\nSimpleX servers cannot see your profile." = "Votre profil est stocké sur votre appareil et est seulement partagé avec vos contacts.\nLes serveurs SimpleX ne peuvent pas voir votre profil.";
|
||||
"Your profile is stored on your device and shared only with your contacts. SimpleX servers cannot see your profile." = "Votre profil est stocké sur votre appareil et est seulement partagé avec vos contacts. Les serveurs SimpleX ne peuvent pas voir votre profil.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Your profile, contacts and delivered messages are stored on your device." = "Votre profil, vos contacts et les messages reçus sont stockés sur votre appareil.";
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -2,7 +2,7 @@
|
||||
"CFBundleName" = "SimpleX";
|
||||
|
||||
/* Privacy - Camera Usage Description */
|
||||
"NSCameraUsageDescription" = "A SimpleX-nek kamera-hozzáférésre van szüksége a QR-kódok beolvasásához, hogy kapcsolódhasson más felhasználókhoz és videohívásokhoz.";
|
||||
"NSCameraUsageDescription" = "A SimpleXnek kamera-hozzáférésre van szüksége a QR-kódok beolvasásához, hogy kapcsolódhasson más felhasználókhoz és videohívásokhoz.";
|
||||
|
||||
/* Privacy - Face ID Usage Description */
|
||||
"NSFaceIDUsageDescription" = "A SimpleX Face ID-t használ a helyi hitelesítéshez";
|
||||
@@ -11,8 +11,8 @@
|
||||
"NSLocalNetworkUsageDescription" = "A SimpleX helyi hálózati hozzáférést használ, hogy lehetővé tegye a felhasználói csevegőprofil használatát számítógépen keresztül ugyanazon a hálózaton.";
|
||||
|
||||
/* Privacy - Microphone Usage Description */
|
||||
"NSMicrophoneUsageDescription" = "A SimpleX-nek mikrofon-hozzáférésre van szüksége hang- és videohívásokhoz, valamint hangüzenetek rögzítéséhez.";
|
||||
"NSMicrophoneUsageDescription" = "A SimpleXnek mikrofon-hozzáférésre van szüksége hang- és videohívásokhoz, valamint hangüzenetek rögzítéséhez.";
|
||||
|
||||
/* Privacy - Photo Library Additions Usage Description */
|
||||
"NSPhotoLibraryAddUsageDescription" = "A SimpleX-nek hozzáférésre van szüksége a Galériához a rögzített és fogadott média mentéséhez";
|
||||
"NSPhotoLibraryAddUsageDescription" = "A SimpleXnek galéria-hozzáférésre van szüksége a rögzített és fogadott média mentéséhez";
|
||||
|
||||
|
||||
@@ -160,6 +160,9 @@
|
||||
/* notification title */
|
||||
"%@ wants to connect!" = "%@ si vuole connettere!";
|
||||
|
||||
/* format for date separator in chat */
|
||||
"%@, %@" = "%1$@, %2$@";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"%@, %@ and %lld members" = "%@, %@ e %lld membri";
|
||||
|
||||
@@ -172,9 +175,24 @@
|
||||
/* time interval */
|
||||
"%d days" = "%d giorni";
|
||||
|
||||
/* forward confirmation reason */
|
||||
"%d file(s) are still being downloaded." = "%d file è/sono ancora in scaricamento.";
|
||||
|
||||
/* forward confirmation reason */
|
||||
"%d file(s) failed to download." = "%d file ha/hanno fallito lo scaricamento.";
|
||||
|
||||
/* forward confirmation reason */
|
||||
"%d file(s) were deleted." = "%d file è/sono stato/i eliminato/i.";
|
||||
|
||||
/* forward confirmation reason */
|
||||
"%d file(s) were not downloaded." = "%d file non è/sono stato/i scaricato/i.";
|
||||
|
||||
/* time interval */
|
||||
"%d hours" = "%d ore";
|
||||
|
||||
/* alert title */
|
||||
"%d messages not forwarded" = "%d messaggi non inoltrati";
|
||||
|
||||
/* time interval */
|
||||
"%d min" = "%d min";
|
||||
|
||||
@@ -454,7 +472,7 @@
|
||||
/* No comment provided by engineer. */
|
||||
"All new messages from %@ will be hidden!" = "Tutti i nuovi messaggi da %@ verrranno nascosti!";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
/* profile dropdown */
|
||||
"All profiles" = "Tutti gli profili";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
@@ -577,6 +595,9 @@
|
||||
/* 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";
|
||||
|
||||
@@ -649,6 +670,9 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Auto-accept images" = "Auto-accetta immagini";
|
||||
|
||||
/* alert title */
|
||||
"Auto-accept settings" = "Accetta automaticamente le impostazioni";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Back" = "Indietro";
|
||||
|
||||
@@ -670,15 +694,30 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Bad message ID" = "ID del messaggio errato";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Better calls" = "Chiamate migliorate";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Better groups" = "Gruppi migliorati";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Better message dates." = "Date dei messaggi migliorate.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Better messages" = "Messaggi migliorati";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Better networking" = "Rete migliorata";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Better notifications" = "Notifiche migliorate";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Better security ✅" = "Sicurezza migliorata ✅";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Better user experience" = "Esperienza utente migliorata";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Black" = "Nero";
|
||||
|
||||
@@ -781,7 +820,7 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Can't message member" = "Impossibile inviare un messaggio al membro";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
/* alert button */
|
||||
"Cancel" = "Annulla";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
@@ -796,7 +835,7 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Cannot forward message" = "Impossibile inoltrare il messaggio";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
/* alert title */
|
||||
"Cannot receive file" = "Impossibile ricevere il file";
|
||||
|
||||
/* snd error text */
|
||||
@@ -843,7 +882,7 @@
|
||||
"changed role of %@ to %@" = "ha cambiato il ruolo di %1$@ in %2$@";
|
||||
|
||||
/* rcv group event chat item */
|
||||
"changed your role to %@" = "cambiato il tuo ruolo in %@";
|
||||
"changed your role to %@" = "ha cambiato il tuo ruolo in %@";
|
||||
|
||||
/* chat item text */
|
||||
"changing address for %@…" = "cambio indirizzo per %@…";
|
||||
@@ -890,6 +929,12 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Chat preferences" = "Preferenze della chat";
|
||||
|
||||
/* 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";
|
||||
|
||||
@@ -1178,6 +1223,9 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Core version: v%@" = "Versione core: v%@";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Corner" = "Angolo";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Correct name to %@?" = "Correggere il nome a %@?";
|
||||
|
||||
@@ -1259,6 +1307,9 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Custom time" = "Tempo personalizzato";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Customizable message shape." = "Forma dei messaggi personalizzabile.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Customize theme" = "Personalizza il tema";
|
||||
|
||||
@@ -1449,6 +1500,9 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Delete old database?" = "Eliminare il database vecchio?";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Delete or moderate up to 200 messages." = "Elimina o modera fino a 200 messaggi.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Delete pending connection?" = "Eliminare la connessione in attesa?";
|
||||
|
||||
@@ -1611,6 +1665,9 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Do NOT send messages directly, even if your or destination server does not support private routing." = "NON inviare messaggi direttamente, anche se il tuo server o quello di destinazione non supporta l'instradamento privato.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Do not use credentials with proxy." = "Non usare credenziali con proxy.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Do NOT use private routing." = "NON usare l'instradamento privato.";
|
||||
|
||||
@@ -1629,7 +1686,8 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Downgrade and open chat" = "Esegui downgrade e apri chat";
|
||||
|
||||
/* chat item action */
|
||||
/* alert button
|
||||
chat item action */
|
||||
"Download" = "Scarica";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
@@ -1641,6 +1699,9 @@
|
||||
/* server test step */
|
||||
"Download file" = "Scarica file";
|
||||
|
||||
/* alert action */
|
||||
"Download files" = "Scarica i file";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Downloaded" = "Scaricato";
|
||||
|
||||
@@ -1857,12 +1918,18 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Error changing address" = "Errore nella modifica dell'indirizzo";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Error changing connection profile" = "Errore nel cambio di profilo di connessione";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Error changing role" = "Errore nel cambio di ruolo";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Error changing setting" = "Errore nella modifica dell'impostazione";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Error changing to incognito!" = "Errore nel passaggio a incognito!";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Error connecting to forwarding server %@. Please try later." = "Errore di connessione al server di inoltro %@. Riprova più tardi.";
|
||||
|
||||
@@ -1936,9 +2003,12 @@
|
||||
"Error loading %@ servers" = "Errore nel caricamento dei server %@";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Error opening chat" = "Errore di apertura della chat";
|
||||
"Error migrating settings" = "Errore nella migrazione delle impostazioni";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Error opening chat" = "Errore di apertura della chat";
|
||||
|
||||
/* alert title */
|
||||
"Error receiving file" = "Errore nella ricezione del file";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
@@ -1996,6 +2066,9 @@
|
||||
"Error stopping chat" = "Errore nell'interruzione della chat";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Error switching profile" = "Errore nel cambio di profilo";
|
||||
|
||||
/* alertTitle */
|
||||
"Error switching profile!" = "Errore nel cambio di profilo!";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
@@ -2022,8 +2095,7 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Error: " = "Errore: ";
|
||||
|
||||
/* file error text
|
||||
snd error text */
|
||||
/* alert message */
|
||||
"Error: %@" = "Errore: %@";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
@@ -2083,6 +2155,9 @@
|
||||
/* No comment provided by engineer. */
|
||||
"File error" = "Errore del file";
|
||||
|
||||
/* alert message */
|
||||
"File errors:\n%@" = "Errori di file:\n%@";
|
||||
|
||||
/* file error text */
|
||||
"File not found - most likely file was deleted or cancelled." = "File non trovato - probabilmente è stato eliminato o annullato.";
|
||||
|
||||
@@ -2164,9 +2239,21 @@
|
||||
/* chat item action */
|
||||
"Forward" = "Inoltra";
|
||||
|
||||
/* alert title */
|
||||
"Forward %d message(s)?" = "Inoltrare %d messaggio/i?";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Forward and save messages" = "Inoltra e salva i messaggi";
|
||||
|
||||
/* alert action */
|
||||
"Forward messages" = "Inoltra i messaggi";
|
||||
|
||||
/* alert message */
|
||||
"Forward messages without files?" = "Inoltrare i messaggi senza file?";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Forward up to 20 messages at once." = "Inoltra fino a 20 messaggi alla volta.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"forwarded" = "inoltrato";
|
||||
|
||||
@@ -2176,6 +2263,9 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Forwarded from" = "Inoltrato da";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Forwarding %lld messages" = "Inoltro di %lld messaggi";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Forwarding server %@ failed to connect to destination server %@. Please try later." = "Il server di inoltro %@ non è riuscito a connettersi al server di destinazione %@. Riprova più tardi.";
|
||||
|
||||
@@ -2203,9 +2293,6 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Full name (optional)" = "Nome completo (facoltativo)";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Full name:" = "Nome completo:";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Fully decentralized – visible only to members." = "Completamente decentralizzato: visibile solo ai membri.";
|
||||
|
||||
@@ -2407,6 +2494,9 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Importing archive" = "Importazione archivio";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Improved delivery, reduced traffic usage.\nMore improvements are coming soon!" = "Consegna migliorata, utilizzo di traffico ridotto.\nAltri miglioramenti sono in arrivo!";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Improved message delivery" = "Consegna dei messaggi migliorata";
|
||||
|
||||
@@ -2566,6 +2656,9 @@
|
||||
/* 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." = "Il portachiavi di iOS verrà usato per archiviare in modo sicuro la password dopo il riavvio dell'app o la modifica della password; consentirà di ricevere notifiche push.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"IP address" = "Indirizzo IP";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Irreversible message deletion" = "Eliminazione irreversibile del messaggio";
|
||||
|
||||
@@ -2818,6 +2911,9 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Message servers" = "Server dei messaggi";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Message shape" = "Forma del messaggio";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Message source remains private." = "La fonte del messaggio resta privata.";
|
||||
|
||||
@@ -2848,6 +2944,9 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Messages sent" = "Messaggi inviati";
|
||||
|
||||
/* alert message */
|
||||
"Messages were deleted after you selected them." = "I messaggi sono stati eliminati dopo che li hai selezionati.";
|
||||
|
||||
/* 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." = "I messaggi, i file e le chiamate sono protetti da **crittografia end-to-end** con perfect forward secrecy, ripudio e recupero da intrusione.";
|
||||
|
||||
@@ -3001,6 +3100,12 @@
|
||||
/* 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";
|
||||
|
||||
@@ -3043,6 +3148,12 @@
|
||||
/* 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";
|
||||
|
||||
@@ -3058,6 +3169,9 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Nothing selected" = "Nessuna selezione";
|
||||
|
||||
/* alert title */
|
||||
"Nothing to forward!" = "Niente da inoltrare!";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Notifications" = "Notifiche";
|
||||
|
||||
@@ -3084,7 +3198,7 @@
|
||||
/* feature offered item */
|
||||
"offered %@: %@" = "offerto %1$@: %2$@";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
/* alert button */
|
||||
"Ok" = "Ok";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
@@ -3210,6 +3324,9 @@
|
||||
/* No comment provided by engineer. */
|
||||
"other errors" = "altri errori";
|
||||
|
||||
/* alert message */
|
||||
"Other file errors:\n%@" = "Altri errori di file:\n%@";
|
||||
|
||||
/* member role */
|
||||
"owner" = "proprietario";
|
||||
|
||||
@@ -3231,6 +3348,9 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Passcode set!" = "Codice di accesso impostato!";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Password" = "Password";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Password to show" = "Password per mostrare";
|
||||
|
||||
@@ -3327,6 +3447,9 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Polish interface" = "Interfaccia polacca";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Port" = "Porta";
|
||||
|
||||
/* server test error */
|
||||
"Possibly, certificate fingerprint in server address is incorrect" = "Probabilmente l'impronta del certificato nell'indirizzo del server è sbagliata";
|
||||
|
||||
@@ -3378,12 +3501,6 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Profile images" = "Immagini del profilo";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Profile name" = "Nome del profilo";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Profile name:" = "Nome del profilo:";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Profile password" = "Password del profilo";
|
||||
|
||||
@@ -3444,6 +3561,9 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Proxied servers" = "Server via proxy";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Proxy requires password" = "Il proxy richiede una password";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Push notifications" = "Notifiche push";
|
||||
|
||||
@@ -3589,6 +3709,9 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Remove" = "Rimuovi";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Remove archive?" = "Rimuovere l'archivio?";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Remove image" = "Rimuovi immagine";
|
||||
|
||||
@@ -3715,10 +3838,11 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Safer groups" = "Gruppi più sicuri";
|
||||
|
||||
/* chat item action */
|
||||
/* alert button
|
||||
chat item action */
|
||||
"Save" = "Salva";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
/* alert button */
|
||||
"Save (and notify contacts)" = "Salva (e avvisa i contatti)";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
@@ -3736,9 +3860,6 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Save archive" = "Salva archivio";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Save auto-accept settings" = "Salva le impostazioni di accettazione automatica";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Save group profile" = "Salva il profilo del gruppo";
|
||||
|
||||
@@ -3760,12 +3881,12 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Save servers?" = "Salvare i server?";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Save settings?" = "Salvare le impostazioni?";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Save welcome message?" = "Salvare il messaggio di benvenuto?";
|
||||
|
||||
/* alert title */
|
||||
"Save your profile?" = "Salvare il profilo?";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"saved" = "salvato";
|
||||
|
||||
@@ -3784,6 +3905,9 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Saved WebRTC ICE servers will be removed" = "I server WebRTC ICE salvati verranno rimossi";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Saving %lld messages" = "Salvataggio di %lld messaggi";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Scale" = "Scala";
|
||||
|
||||
@@ -3847,6 +3971,9 @@
|
||||
/* chat item action */
|
||||
"Select" = "Seleziona";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Select chat profile" = "Seleziona il profilo di chat";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Selected %lld" = "%lld selezionato";
|
||||
|
||||
@@ -3919,7 +4046,7 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Send up to 100 last messages to new members." = "Invia fino a 100 ultimi messaggi ai nuovi membri.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
/* alert message */
|
||||
"Sender cancelled file transfer." = "Il mittente ha annullato il trasferimento del file.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
@@ -3979,6 +4106,9 @@
|
||||
/* 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";
|
||||
|
||||
@@ -4060,6 +4190,9 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Settings" = "Impostazioni";
|
||||
|
||||
/* alert message */
|
||||
"Settings were changed." = "Le impostazioni sono state cambiate.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Shape profile images" = "Forma delle immagini del profilo";
|
||||
|
||||
@@ -4081,6 +4214,9 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Share link" = "Condividi link";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Share profile" = "Condividi il profilo";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Share this 1-time invite link" = "Condividi questo link di invito una tantum";
|
||||
|
||||
@@ -4162,6 +4298,9 @@
|
||||
/* simplex link type */
|
||||
"SimpleX one-time invitation" = "Invito SimpleX una tantum";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"SimpleX protocols reviewed by Trail of Bits." = "Protocolli di SimpleX esaminati da Trail of Bits.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Simplified incognito mode" = "Modalità incognito semplificata";
|
||||
|
||||
@@ -4180,9 +4319,15 @@
|
||||
/* No comment provided by engineer. */
|
||||
"SMP server" = "Server SMP";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"SOCKS proxy" = "Proxy SOCKS";
|
||||
|
||||
/* blur media */
|
||||
"Soft" = "Leggera";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Some app settings were not migrated." = "Alcune impostazioni dell'app non sono state migrate.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Some file(s) were not exported:" = "Alcuni file non sono stati esportati:";
|
||||
|
||||
@@ -4276,12 +4421,21 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Support SimpleX Chat" = "Supporta SimpleX Chat";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Switch audio and video during the call." = "Cambia tra audio e video durante la chiamata.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Switch chat profile for 1-time invitations." = "Cambia profilo di chat per inviti una tantum.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"System" = "Sistema";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"System authentication" = "Autenticazione di sistema";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Tail" = "Coda";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Take picture" = "Scatta foto";
|
||||
|
||||
@@ -4411,6 +4565,9 @@
|
||||
/* No comment provided by engineer. */
|
||||
"The text you pasted is not a SimpleX link." = "Il testo che hai incollato non è un link SimpleX.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"The uploaded database archive will be permanently removed from the servers." = "L'archivio del database caricato verrà rimosso definitivamente dai server.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Themes" = "Temi";
|
||||
|
||||
@@ -4489,6 +4646,12 @@
|
||||
/* 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.";
|
||||
|
||||
@@ -4588,7 +4751,7 @@
|
||||
/* No comment provided by engineer. */
|
||||
"unknown servers" = "relay sconosciuti";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
/* alert title */
|
||||
"Unknown servers!" = "Server sconosciuti!";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
@@ -4705,6 +4868,9 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Use SimpleX Chat servers?" = "Usare i server di SimpleX Chat?";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Use SOCKS proxy" = "Usa proxy SOCKS";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Use the app while in the call." = "Usa l'app mentre sei in chiamata.";
|
||||
|
||||
@@ -4712,10 +4878,10 @@
|
||||
"Use the app with one hand." = "Usa l'app con una mano sola.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"User profile" = "Profilo utente";
|
||||
"User selection" = "Selezione utente";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"User selection" = "Selezione utente";
|
||||
"Username" = "Nome utente";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Using SimpleX Chat servers." = "Utilizzo dei server SimpleX Chat.";
|
||||
@@ -4894,7 +5060,7 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Without Tor or VPN, your IP address will be visible to file servers." = "Senza Tor o VPN, il tuo indirizzo IP sarà visibile ai server di file.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
/* alert message */
|
||||
"Without Tor or VPN, your IP address will be visible to these XFTP relays: %@." = "Senza Tor o VPN, il tuo indirizzo IP sarà visibile a questi relay XFTP: %@.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
@@ -4918,9 +5084,6 @@
|
||||
/* No comment provided by engineer. */
|
||||
"you" = "tu";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"You" = "Tu";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"You **must not** use the same database on two devices." = "**Non devi** usare lo stesso database su due dispositivi.";
|
||||
|
||||
@@ -5155,9 +5318,15 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Your chat database is not encrypted - set passphrase to encrypt it." = "Il tuo database della chat non è crittografato: imposta la password per crittografarlo.";
|
||||
|
||||
/* alert title */
|
||||
"Your chat preferences" = "Le tue preferenze della chat";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Your chat profiles" = "I tuoi profili di chat";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Your connection was moved to %@ but an unexpected error occurred while redirecting you to the profile." = "La tua connessione è stata spostata a %@, ma si è verificato un errore imprevisto durante il reindirizzamento al profilo.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Your contact sent a file that is larger than currently supported maximum size (%@)." = "Il tuo contatto ha inviato un file più grande della dimensione massima attualmente supportata (%@).";
|
||||
|
||||
@@ -5167,6 +5336,9 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Your contacts will remain connected." = "I tuoi contatti resteranno connessi.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Your credentials may be sent unencrypted." = "Le credenziali potrebbero essere inviate in chiaro.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Your current chat database will be DELETED and REPLACED with the imported one." = "Il tuo attuale database della chat verrà ELIMINATO e SOSTITUITO con quello importato.";
|
||||
|
||||
@@ -5189,7 +5361,10 @@
|
||||
"Your profile **%@** will be shared." = "Verrà condiviso il tuo profilo **%@**.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Your profile is stored on your device and shared only with your contacts.\nSimpleX servers cannot see your profile." = "Il tuo profilo è memorizzato sul tuo dispositivo e condiviso solo con i tuoi contatti.\nI server di SimpleX non possono vedere il tuo profilo.";
|
||||
"Your profile is stored on your device and shared only with your contacts. SimpleX servers cannot see your profile." = "Il tuo profilo è memorizzato sul tuo dispositivo e condiviso solo con i tuoi contatti. I server di SimpleX non possono vedere il tuo profilo.";
|
||||
|
||||
/* alert message */
|
||||
"Your profile was changed. If you save it, the updated profile will be sent to all your contacts." = "Il tuo profilo è stato cambiato. Se lo salvi, il profilo aggiornato verrà inviato a tutti i tuoi contatti.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Your profile, contacts and delivered messages are stored on your device." = "Il tuo profilo, i contatti e i messaggi recapitati sono memorizzati sul tuo dispositivo.";
|
||||
|
||||
@@ -619,7 +619,7 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Can't invite contacts!" = "連絡先を招待できません!";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
/* alert button */
|
||||
"Cancel" = "中止";
|
||||
|
||||
/* feature offered item */
|
||||
@@ -628,7 +628,7 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Cannot access keychain to save database password" = "データベースのパスワードを保存するためのキーチェーンにアクセスできません";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
/* alert title */
|
||||
"Cannot receive file" = "ファイル受信ができません";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
@@ -701,6 +701,9 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Chat preferences" = "チャット設定";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Chat profile" = "ユーザープロフィール";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Chats" = "チャット";
|
||||
|
||||
@@ -1431,7 +1434,7 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Error loading %@ servers" = "%@ サーバーのロード中にエラーが発生";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
/* alert title */
|
||||
"Error receiving file" = "ファイル受信にエラー発生";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
@@ -1470,7 +1473,7 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Error stopping chat" = "チャット停止にエラー発生";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
/* alertTitle */
|
||||
"Error switching profile!" = "プロフィール切り替えにエラー発生!";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
@@ -1491,8 +1494,7 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Error: " = "エラー : ";
|
||||
|
||||
/* file error text
|
||||
snd error text */
|
||||
/* alert message */
|
||||
"Error: %@" = "エラー : %@";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
@@ -1594,9 +1596,6 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Full name (optional)" = "フルネーム (任意):";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Full name:" = "フルネーム:";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Fully re-implemented - work in background!" = "完全に再実装されました - バックグラウンドで動作します!";
|
||||
|
||||
@@ -2068,6 +2067,12 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Messages & files" = "メッセージ & ファイル";
|
||||
|
||||
/* 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." = "メッセージ、ファイル、通話は、前方秘匿性、否認可能性および侵入復元性を備えた**エンドツーエンドの暗号化**によって保護されます。";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Messages, files and calls are protected by **quantum resistant e2e encryption** with perfect forward secrecy, repudiation and break-in recovery." = "メッセージ、ファイル、通話は、前方秘匿性、否認可能性および侵入復元性を備えた**耐量子E2E暗号化**によって保護されます。";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Migrating database archive…" = "データベースのアーカイブを移行しています…";
|
||||
|
||||
@@ -2238,7 +2243,7 @@
|
||||
/* feature offered item */
|
||||
"offered %@: %@" = "提供された %1$@: %2$@";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
/* alert button */
|
||||
"Ok" = "OK";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
@@ -2647,10 +2652,11 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Run chat" = "チャット起動";
|
||||
|
||||
/* chat item action */
|
||||
/* alert button
|
||||
chat item action */
|
||||
"Save" = "保存";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
/* alert button */
|
||||
"Save (and notify contacts)" = "保存(連絡先に通知)";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
@@ -2665,9 +2671,6 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Save archive" = "アーカイブを保存";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Save auto-accept settings" = "自動受け入れ設定を保存する";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Save group profile" = "グループプロフィールの保存";
|
||||
|
||||
@@ -2689,9 +2692,6 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Save servers?" = "サーバを保存しますか?";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Save settings?" = "設定を保存しますか?";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Save welcome message?" = "ウェルカムメッセージを保存しますか?";
|
||||
|
||||
@@ -2779,7 +2779,7 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Send them from gallery or custom keyboards." = "ギャラリーまたはカスタム キーボードから送信します。";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
/* alert message */
|
||||
"Sender cancelled file transfer." = "送信者がファイル転送をキャンセルしました。";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
@@ -3250,9 +3250,6 @@
|
||||
/* 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 チャット サーバーを使用する。";
|
||||
|
||||
@@ -3370,9 +3367,6 @@
|
||||
/* pref value */
|
||||
"yes" = "はい";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"You" = "あなた";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"You accepted connection" = "接続を承認しました";
|
||||
|
||||
@@ -3566,7 +3560,7 @@
|
||||
"Your profile **%@** will be shared." = "あなたのプロファイル **%@** が共有されます。";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Your profile is stored on your device and shared only with your contacts.\nSimpleX servers cannot see your profile." = "プロフィールはデバイスに保存され、連絡先とのみ共有されます。\nSimpleX サーバーはあなたのプロファイルを参照できません。";
|
||||
"Your profile is stored on your device and shared only with your contacts. SimpleX servers cannot see your profile." = "プロフィールはデバイスに保存され、連絡先とのみ共有されます。 SimpleX サーバーはあなたのプロファイルを参照できません。";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Your profile, contacts and delivered messages are stored on your device." = "あなたのプロフィール、連絡先、送信したメッセージがご自分の端末に保存されます。";
|
||||
|
||||
@@ -160,6 +160,9 @@
|
||||
/* notification title */
|
||||
"%@ wants to connect!" = "%@ wil verbinding maken!";
|
||||
|
||||
/* format for date separator in chat */
|
||||
"%@, %@" = "%1$@, %2$@";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"%@, %@ and %lld members" = "%@, %@ en %lld leden";
|
||||
|
||||
@@ -172,9 +175,24 @@
|
||||
/* time interval */
|
||||
"%d days" = "%d dagen";
|
||||
|
||||
/* forward confirmation reason */
|
||||
"%d file(s) are still being downloaded." = "%d bestand(en) worden nog gedownload.";
|
||||
|
||||
/* forward confirmation reason */
|
||||
"%d file(s) failed to download." = "%d bestand(en) konden niet worden gedownload.";
|
||||
|
||||
/* forward confirmation reason */
|
||||
"%d file(s) were deleted." = "%d bestand(en) zijn verwijderd.";
|
||||
|
||||
/* forward confirmation reason */
|
||||
"%d file(s) were not downloaded." = "%d bestand(en) zijn niet gedownload.";
|
||||
|
||||
/* time interval */
|
||||
"%d hours" = "%d uren";
|
||||
|
||||
/* alert title */
|
||||
"%d messages not forwarded" = "%d berichten niet doorgestuurd";
|
||||
|
||||
/* time interval */
|
||||
"%d min" = "%d min";
|
||||
|
||||
@@ -308,7 +326,7 @@
|
||||
"A new random profile will be shared." = "Een nieuw willekeurig profiel wordt gedeeld.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"A separate TCP connection will be used **for each chat profile you have in the app**." = "Er wordt een aparte TCP-verbinding gebruikt **voor elk chat profiel dat je in de app hebt**.";
|
||||
"A separate TCP connection will be used **for each chat profile you have in the app**." = "Er wordt een aparte TCP-verbinding gebruikt **voor elk chatprofiel dat je in de app hebt**.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"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." = "Er wordt een aparte TCP-verbinding gebruikt **voor elk contact en groepslid**.\n**Let op**: als u veel verbindingen heeft, kan uw batterij- en verkeersverbruik aanzienlijk hoger zijn en kunnen sommige verbindingen uitvallen.";
|
||||
@@ -454,7 +472,7 @@
|
||||
/* No comment provided by engineer. */
|
||||
"All new messages from %@ will be hidden!" = "Alle nieuwe berichten van %@ worden verborgen!";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
/* profile dropdown */
|
||||
"All profiles" = "Alle profielen";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
@@ -577,6 +595,9 @@
|
||||
/* 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";
|
||||
|
||||
@@ -649,6 +670,9 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Auto-accept images" = "Afbeeldingen automatisch accepteren";
|
||||
|
||||
/* alert title */
|
||||
"Auto-accept settings" = "Instellingen automatisch accepteren";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Back" = "Terug";
|
||||
|
||||
@@ -670,15 +694,30 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Bad message ID" = "Onjuiste bericht-ID";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Better calls" = "Betere gesprekken";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Better groups" = "Betere groepen";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Better message dates." = "Betere datums voor berichten.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Better messages" = "Betere berichten";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Better networking" = "Beter netwerk";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Better notifications" = "Betere meldingen";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Better security ✅" = "Betere beveiliging ✅";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Better user experience" = "Betere gebruikerservaring";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Black" = "Zwart";
|
||||
|
||||
@@ -740,7 +779,7 @@
|
||||
"Bulgarian, Finnish, Thai and Ukrainian - thanks to the users and [Weblate](https://github.com/simplex-chat/simplex-chat/tree/stable#help-translating-simplex-chat)!" = "Bulgaars, Fins, Thais en Oekraïens - dankzij de gebruikers en [Weblate](https://github.com/simplex-chat/simplex-chat/tree/stable#help-translating-simplex-chat)!";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"By chat profile (default) or [by connection](https://simplex.chat/blog/20230204-simplex-chat-v4-5-user-chat-profiles.html#transport-isolation) (BETA)." = "Via chat profiel (standaard) of [via verbinding](https://simplex.chat/blog/20230204-simplex-chat-v4-5-user-chat-profiles.html#transport-isolation) (BETA).";
|
||||
"By chat profile (default) or [by connection](https://simplex.chat/blog/20230204-simplex-chat-v4-5-user-chat-profiles.html#transport-isolation) (BETA)." = "Via chatprofiel (standaard) of [via verbinding](https://simplex.chat/blog/20230204-simplex-chat-v4-5-user-chat-profiles.html#transport-isolation) (BETA).";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"call" = "bellen";
|
||||
@@ -781,7 +820,7 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Can't message member" = "Kan geen bericht sturen naar lid";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
/* alert button */
|
||||
"Cancel" = "Annuleren";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
@@ -796,7 +835,7 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Cannot forward message" = "Kan bericht niet doorsturen";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
/* alert title */
|
||||
"Cannot receive file" = "Kan bestand niet ontvangen";
|
||||
|
||||
/* snd error text */
|
||||
@@ -890,11 +929,17 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Chat preferences" = "Gesprek voorkeuren";
|
||||
|
||||
/* 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";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Chats" = "Gesprekken";
|
||||
"Chats" = "Chats";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Check server address and try again." = "Controleer het server adres en probeer het opnieuw.";
|
||||
@@ -954,7 +999,7 @@
|
||||
"complete" = "compleet";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Completed" = "voltooid";
|
||||
"Completed" = "Voltooid";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Configure ICE servers" = "ICE servers configureren";
|
||||
@@ -1178,6 +1223,9 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Core version: v%@" = "Core versie: v% @";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Corner" = "Hoek";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Correct name to %@?" = "Juiste naam voor %@?";
|
||||
|
||||
@@ -1259,6 +1307,9 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Custom time" = "Aangepaste tijd";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Customizable message shape." = "Aanpasbare berichtvorm.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Customize theme" = "Thema aanpassen";
|
||||
|
||||
@@ -1308,7 +1359,7 @@
|
||||
"Database passphrase is different from saved in the keychain." = "Het wachtwoord van de database verschilt van het wachtwoord dat is opgeslagen in de keychain.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Database passphrase is required to open chat." = "Database wachtwoord is vereist om je gesprekken te openen.";
|
||||
"Database passphrase is required to open chat." = "Database wachtwoord is vereist om je chats te openen.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Database upgrade" = "Database upgrade";
|
||||
@@ -1381,10 +1432,10 @@
|
||||
"Delete chat archive?" = "Chat archief verwijderen?";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Delete chat profile" = "Chat profiel verwijderen";
|
||||
"Delete chat profile" = "Chatprofiel verwijderen";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Delete chat profile?" = "Chat profiel verwijderen?";
|
||||
"Delete chat profile?" = "Chatprofiel verwijderen?";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Delete connection" = "Verbinding verwijderen";
|
||||
@@ -1408,7 +1459,7 @@
|
||||
"Delete files and media?" = "Bestanden en media verwijderen?";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Delete files for all chat profiles" = "Verwijder bestanden voor alle chat profielen";
|
||||
"Delete files for all chat profiles" = "Verwijder bestanden voor alle chatprofielen";
|
||||
|
||||
/* chat feature */
|
||||
"Delete for everyone" = "Verwijderen voor iedereen";
|
||||
@@ -1449,6 +1500,9 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Delete old database?" = "Oude database verwijderen?";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Delete or moderate up to 200 messages." = "Maximaal 200 berichten verwijderen of modereren.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Delete pending connection?" = "Wachtende verbinding verwijderen?";
|
||||
|
||||
@@ -1611,6 +1665,9 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Do NOT send messages directly, even if your or destination server does not support private routing." = "Stuur GEEN berichten rechtstreeks, zelfs als uw of de bestemmingsserver geen privéroutering ondersteunt.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Do not use credentials with proxy." = "Gebruik geen inloggegevens met proxy.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Do NOT use private routing." = "Gebruik GEEN privéroutering.";
|
||||
|
||||
@@ -1629,7 +1686,8 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Downgrade and open chat" = "Downgraden en chat openen";
|
||||
|
||||
/* chat item action */
|
||||
/* alert button
|
||||
chat item action */
|
||||
"Download" = "Downloaden";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
@@ -1641,6 +1699,9 @@
|
||||
/* server test step */
|
||||
"Download file" = "Download bestand";
|
||||
|
||||
/* alert action */
|
||||
"Download files" = "‐Bestanden downloaden";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Downloaded" = "Gedownload";
|
||||
|
||||
@@ -1857,12 +1918,18 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Error changing address" = "Fout bij wijzigen van adres";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Error changing connection profile" = "Fout bij wijzigen van verbindingsprofiel";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Error changing role" = "Fout bij wisselen van rol";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Error changing setting" = "Fout bij wijzigen van instelling";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Error changing to incognito!" = "Fout bij het overschakelen naar incognito!";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Error connecting to forwarding server %@. Please try later." = "Fout bij het verbinden met doorstuurserver %@. Probeer het later opnieuw.";
|
||||
|
||||
@@ -1936,9 +2003,12 @@
|
||||
"Error loading %@ servers" = "Fout bij het laden van %@ servers";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Error opening chat" = "Fout bij het openen van de chat";
|
||||
"Error migrating settings" = "Fout bij migreren van instellingen";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Error opening chat" = "Fout bij het openen van de chat";
|
||||
|
||||
/* alert title */
|
||||
"Error receiving file" = "Fout bij ontvangen van bestand";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
@@ -1996,6 +2066,9 @@
|
||||
"Error stopping chat" = "Fout bij het stoppen van de chat";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Error switching profile" = "Fout bij wisselen van profiel";
|
||||
|
||||
/* alertTitle */
|
||||
"Error switching profile!" = "Fout bij wisselen van profiel!";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
@@ -2022,8 +2095,7 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Error: " = "Fout: ";
|
||||
|
||||
/* file error text
|
||||
snd error text */
|
||||
/* alert message */
|
||||
"Error: %@" = "Fout: %@";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
@@ -2083,6 +2155,9 @@
|
||||
/* No comment provided by engineer. */
|
||||
"File error" = "Bestandsfout";
|
||||
|
||||
/* alert message */
|
||||
"File errors:\n%@" = "Bestandsfouten:\n%@";
|
||||
|
||||
/* file error text */
|
||||
"File not found - most likely file was deleted or cancelled." = "Bestand niet gevonden - hoogstwaarschijnlijk is het bestand verwijderd of geannuleerd.";
|
||||
|
||||
@@ -2138,7 +2213,7 @@
|
||||
"Finally, we have them! 🚀" = "Eindelijk, we hebben ze! 🚀";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Find chats faster" = "Vind gesprekken sneller";
|
||||
"Find chats faster" = "Vind chats sneller";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Fix" = "Herstel";
|
||||
@@ -2164,9 +2239,21 @@
|
||||
/* chat item action */
|
||||
"Forward" = "Doorsturen";
|
||||
|
||||
/* alert title */
|
||||
"Forward %d message(s)?" = "%d bericht(en) doorsturen?";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Forward and save messages" = "Berichten doorsturen en opslaan";
|
||||
|
||||
/* alert action */
|
||||
"Forward messages" = "Berichten doorsturen";
|
||||
|
||||
/* alert message */
|
||||
"Forward messages without files?" = "Berichten doorsturen zonder bestanden?";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Forward up to 20 messages at once." = "Stuur maximaal 20 berichten tegelijk door.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"forwarded" = "doorgestuurd";
|
||||
|
||||
@@ -2176,6 +2263,9 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Forwarded from" = "Doorgestuurd vanuit";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Forwarding %lld messages" = "%lld berichten doorsturen";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Forwarding server %@ failed to connect to destination server %@. Please try later." = "De doorstuurserver %@ kon geen verbinding maken met de bestemmingsserver %@. Probeer het later opnieuw.";
|
||||
|
||||
@@ -2203,9 +2293,6 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Full name (optional)" = "Volledige naam (optioneel)";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Full name:" = "Volledige naam:";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Fully decentralized – visible only to members." = "Volledig gedecentraliseerd – alleen zichtbaar voor leden.";
|
||||
|
||||
@@ -2315,7 +2402,7 @@
|
||||
"Hidden" = "Verborgen";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Hidden chat profiles" = "Verborgen chat profielen";
|
||||
"Hidden chat profiles" = "Verborgen chatprofielen";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Hidden profile password" = "Verborgen profiel wachtwoord";
|
||||
@@ -2407,6 +2494,9 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Importing archive" = "Archief importeren";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Improved delivery, reduced traffic usage.\nMore improvements are coming soon!" = "Verbeterde levering, minder data gebruik.\nBinnenkort meer verbeteringen!";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Improved message delivery" = "Verbeterde berichtbezorging";
|
||||
|
||||
@@ -2566,6 +2656,9 @@
|
||||
/* 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 wordt gebruikt om het wachtwoord veilig op te slaan nadat u de app opnieuw hebt opgestart of het wachtwoord hebt gewijzigd, hiermee kunt u push meldingen ontvangen.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"IP address" = "IP-adres";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Irreversible message deletion" = "Onomkeerbare berichtverwijdering";
|
||||
|
||||
@@ -2576,7 +2669,7 @@
|
||||
"Irreversible message deletion is prohibited in this group." = "Het onomkeerbaar verwijderen van berichten is verboden in deze groep.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"It allows having many anonymous connections without any shared data between them in a single chat profile." = "Het maakt het mogelijk om veel anonieme verbindingen te hebben zonder enige gedeelde gegevens tussen hen in een enkel chat profiel.";
|
||||
"It allows having many anonymous connections without any shared data between them in a single chat profile." = "Het maakt het mogelijk om veel anonieme verbindingen te hebben zonder enige gedeelde gegevens tussen hen in een enkel chatprofiel.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"It can happen when you or your connection used the old database backup." = "Het kan gebeuren wanneer u of de ander een oude database back-up gebruikt.";
|
||||
@@ -2818,6 +2911,9 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Message servers" = "Berichtservers";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Message shape" = "Berichtvorm";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Message source remains private." = "Berichtbron blijft privé.";
|
||||
|
||||
@@ -2848,6 +2944,9 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Messages sent" = "Berichten verzonden";
|
||||
|
||||
/* alert message */
|
||||
"Messages were deleted after you selected them." = "Berichten zijn verwijderd nadat u ze had geselecteerd.";
|
||||
|
||||
/* 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." = "Berichten, bestanden en oproepen worden beschermd door **end-to-end codering** met perfecte voorwaartse geheimhouding, afwijzing en inbraakherstel.";
|
||||
|
||||
@@ -2924,7 +3023,7 @@
|
||||
"Most likely this connection is deleted." = "Hoogstwaarschijnlijk is deze verbinding verwijderd.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Multiple chat profiles" = "Meerdere chat profielen";
|
||||
"Multiple chat profiles" = "Meerdere chatprofielen";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"mute" = "dempen";
|
||||
@@ -3001,6 +3100,12 @@
|
||||
/* 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";
|
||||
|
||||
@@ -3029,7 +3134,7 @@
|
||||
"no e2e encryption" = "geen e2e versleuteling";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"No filtered chats" = "Geen gefilterde gesprekken";
|
||||
"No filtered chats" = "Geen gefilterde chats";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"No group!" = "Groep niet gevonden!";
|
||||
@@ -3043,6 +3148,12 @@
|
||||
/* 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";
|
||||
|
||||
@@ -3058,6 +3169,9 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Nothing selected" = "Niets geselecteerd";
|
||||
|
||||
/* alert title */
|
||||
"Nothing to forward!" = "Niets om door te sturen!";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Notifications" = "Meldingen";
|
||||
|
||||
@@ -3084,7 +3198,7 @@
|
||||
/* feature offered item */
|
||||
"offered %@: %@" = "voorgesteld %1$@: %2$@";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
/* alert button */
|
||||
"Ok" = "OK";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
@@ -3210,6 +3324,9 @@
|
||||
/* No comment provided by engineer. */
|
||||
"other errors" = "overige fouten";
|
||||
|
||||
/* alert message */
|
||||
"Other file errors:\n%@" = "Andere bestandsfouten:\n%@";
|
||||
|
||||
/* member role */
|
||||
"owner" = "Eigenaar";
|
||||
|
||||
@@ -3231,6 +3348,9 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Passcode set!" = "Toegangscode ingesteld!";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Password" = "Wachtwoord";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Password to show" = "Wachtwoord om weer te geven";
|
||||
|
||||
@@ -3274,7 +3394,7 @@
|
||||
"PING interval" = "PING interval";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Play from the chat list." = "Afspelen via de gesprekken lijst.";
|
||||
"Play from the chat list." = "Afspelen via de chat lijst.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Please ask your contact to enable calls." = "Vraag uw contactpersoon om oproepen in te schakelen.";
|
||||
@@ -3319,7 +3439,7 @@
|
||||
"Please restart the app and migrate the database to enable push notifications." = "Start de app opnieuw en migreer de database om push meldingen in te schakelen.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Please store passphrase securely, you will NOT be able to access chat if you lose it." = "Sla het wachtwoord veilig op. Als u deze kwijtraakt, heeft u GEEN toegang tot de gesprekken.";
|
||||
"Please store passphrase securely, you will NOT be able to access chat if you lose it." = "Sla het wachtwoord veilig op. Als u deze kwijtraakt, heeft u GEEN toegang tot de chats.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Please store passphrase securely, you will NOT be able to change it if you lose it." = "Bewaar het wachtwoord veilig, u kunt deze NIET wijzigen als u het kwijtraakt.";
|
||||
@@ -3327,6 +3447,9 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Polish interface" = "Poolse interface";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Port" = "Poort";
|
||||
|
||||
/* server test error */
|
||||
"Possibly, certificate fingerprint in server address is incorrect" = "Mogelijk is de certificaat vingerafdruk in het server adres onjuist";
|
||||
|
||||
@@ -3378,12 +3501,6 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Profile images" = "Profiel afbeeldingen";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Profile name" = "Profielnaam";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Profile name:" = "Profielnaam:";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Profile password" = "Profiel wachtwoord";
|
||||
|
||||
@@ -3427,7 +3544,7 @@
|
||||
"Protect IP address" = "Bescherm het IP-adres";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Protect your chat profiles with a password!" = "Bescherm je chat profielen met een wachtwoord!";
|
||||
"Protect your chat profiles with a password!" = "Bescherm je chatprofielen met een wachtwoord!";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Protect your IP address from the messaging relays chosen by your contacts.\nEnable in *Network & servers* settings." = "Bescherm uw IP-adres tegen de berichtenrelais die door uw contacten zijn gekozen.\nSchakel dit in in *Netwerk en servers*-instellingen.";
|
||||
@@ -3444,6 +3561,9 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Proxied servers" = "Proxied servers";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Proxy requires password" = "Proxy vereist wachtwoord";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Push notifications" = "Push meldingen";
|
||||
|
||||
@@ -3589,6 +3709,9 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Remove" = "Verwijderen";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Remove archive?" = "Archief verwijderen?";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Remove image" = "Verwijder afbeelding";
|
||||
|
||||
@@ -3671,7 +3794,7 @@
|
||||
"Reset to user theme" = "Terugzetten naar gebruikersthema";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Restart the app to create a new chat profile" = "Start de app opnieuw om een nieuw chat profiel aan te maken";
|
||||
"Restart the app to create a new chat profile" = "Start de app opnieuw om een nieuw chatprofiel aan te maken";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Restart the app to use imported chat database" = "Start de app opnieuw om de geïmporteerde chat database te gebruiken";
|
||||
@@ -3715,10 +3838,11 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Safer groups" = "Veiligere groepen";
|
||||
|
||||
/* chat item action */
|
||||
/* alert button
|
||||
chat item action */
|
||||
"Save" = "Opslaan";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
/* alert button */
|
||||
"Save (and notify contacts)" = "Bewaar (en informeer contacten)";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
@@ -3736,14 +3860,11 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Save archive" = "Bewaar archief";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Save auto-accept settings" = "Sla instellingen voor automatisch accepteren op";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Save group profile" = "Groep profiel opslaan";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Save passphrase and open chat" = "Bewaar het wachtwoord en open je gesprekken";
|
||||
"Save passphrase and open chat" = "Bewaar het wachtwoord en open je chats";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Save passphrase in Keychain" = "Sla het wachtwoord op in de Keychain";
|
||||
@@ -3755,17 +3876,17 @@
|
||||
"Save profile password" = "Bewaar profiel wachtwoord";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Save servers" = "Bewaar servers";
|
||||
"Save servers" = "Servers opslaan";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Save servers?" = "Servers opslaan?";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Save settings?" = "Instellingen opslaan?";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Save welcome message?" = "Welkom bericht opslaan?";
|
||||
|
||||
/* alert title */
|
||||
"Save your profile?" = "Uw profiel opslaan?";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"saved" = "opgeslagen";
|
||||
|
||||
@@ -3784,6 +3905,9 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Saved WebRTC ICE servers will be removed" = "Opgeslagen WebRTC ICE servers worden verwijderd";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Saving %lld messages" = "%lld berichten opslaan";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Scale" = "Schaal";
|
||||
|
||||
@@ -3847,6 +3971,9 @@
|
||||
/* chat item action */
|
||||
"Select" = "Selecteer";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Select chat profile" = "Selecteer chatprofiel";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Selected %lld" = "%lld geselecteerd";
|
||||
|
||||
@@ -3919,7 +4046,7 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Send up to 100 last messages to new members." = "Stuur tot 100 laatste berichten naar nieuwe leden.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
/* alert message */
|
||||
"Sender cancelled file transfer." = "Afzender heeft bestandsoverdracht geannuleerd.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
@@ -3979,6 +4106,9 @@
|
||||
/* 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";
|
||||
|
||||
@@ -4060,6 +4190,9 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Settings" = "Instellingen";
|
||||
|
||||
/* alert message */
|
||||
"Settings were changed." = "Instellingen zijn gewijzigd.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Shape profile images" = "Vorm profiel afbeeldingen";
|
||||
|
||||
@@ -4081,6 +4214,9 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Share link" = "Deel link";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Share profile" = "Profiel delen";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Share this 1-time invite link" = "Deel deze eenmalige uitnodigingslink";
|
||||
|
||||
@@ -4162,6 +4298,9 @@
|
||||
/* simplex link type */
|
||||
"SimpleX one-time invitation" = "Eenmalige SimpleX uitnodiging";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"SimpleX protocols reviewed by Trail of Bits." = "SimpleX-protocollen beoordeeld door Trail of Bits.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Simplified incognito mode" = "Vereenvoudigde incognitomodus";
|
||||
|
||||
@@ -4180,9 +4319,15 @@
|
||||
/* No comment provided by engineer. */
|
||||
"SMP server" = "SMP server";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"SOCKS proxy" = "SOCKS proxy";
|
||||
|
||||
/* blur media */
|
||||
"Soft" = "Soft";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Some app settings were not migrated." = "Sommige app-instellingen zijn niet gemigreerd.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Some file(s) were not exported:" = "Sommige bestanden zijn niet geëxporteerd:";
|
||||
|
||||
@@ -4265,23 +4410,32 @@
|
||||
"Submit" = "Indienen";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Subscribed" = "Ingeschreven";
|
||||
"Subscribed" = "Subscribed";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Subscription errors" = "Inschrijving fouten";
|
||||
"Subscription errors" = "Subscription fouten";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Subscriptions ignored" = "Inschrijvingen genegeerd";
|
||||
"Subscriptions ignored" = "Subscriptions genegeerd";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Support SimpleX Chat" = "Ondersteuning van SimpleX Chat";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Switch audio and video during the call." = "Wisselen tussen audio en video tijdens het gesprek.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Switch chat profile for 1-time invitations." = "Wijzig chatprofiel voor eenmalige uitnodigingen.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"System" = "Systeem";
|
||||
|
||||
/* 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";
|
||||
|
||||
@@ -4406,11 +4560,14 @@
|
||||
"The sender will NOT be notified" = "De afzender wordt NIET op de hoogte gebracht";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"The servers for new connections of your current chat profile **%@**." = "De servers voor nieuwe verbindingen van uw huidige chat profiel **%@**.";
|
||||
"The servers for new connections of your current chat profile **%@**." = "De servers voor nieuwe verbindingen van uw huidige chatprofiel **%@**.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"The text you pasted is not a SimpleX link." = "De tekst die u hebt geplakt is geen SimpleX link.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"The uploaded database archive will be permanently removed from the servers." = "Het geüploade databasearchief wordt permanent van de servers verwijderd.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Themes" = "Thema's";
|
||||
|
||||
@@ -4460,7 +4617,7 @@
|
||||
"This link was used with another mobile device, please create a new link on the desktop." = "Deze link is gebruikt met een ander mobiel apparaat. Maak een nieuwe link op de desktop.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"This setting applies to messages in your current chat profile **%@**." = "Deze instelling is van toepassing op berichten in je huidige chat profiel **%@**.";
|
||||
"This setting applies to messages in your current chat profile **%@**." = "Deze instelling is van toepassing op berichten in je huidige chatprofiel **%@**.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Title" = "Titel";
|
||||
@@ -4489,11 +4646,17 @@
|
||||
/* 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.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"To reveal your hidden profile, enter a full password into a search field in **Your chat profiles** page." = "Om uw verborgen profiel te onthullen, voert u een volledig wachtwoord in een zoek veld in op de pagina **Uw chat profielen**.";
|
||||
"To reveal your hidden profile, enter a full password into a search field in **Your chat profiles** page." = "Om uw verborgen profiel te onthullen, voert u een volledig wachtwoord in een zoek veld in op de pagina **Uw chatprofielen**.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"To support instant push notifications the chat database has to be migrated." = "Om directe push meldingen te ondersteunen, moet de chat database worden gemigreerd.";
|
||||
@@ -4565,7 +4728,7 @@
|
||||
"Unhide" = "zichtbaar maken";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Unhide chat profile" = "Chat profiel zichtbaar maken";
|
||||
"Unhide chat profile" = "Chatprofiel zichtbaar maken";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Unhide profile" = "Profiel zichtbaar maken";
|
||||
@@ -4588,7 +4751,7 @@
|
||||
/* No comment provided by engineer. */
|
||||
"unknown servers" = "onbekende relays";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
/* alert title */
|
||||
"Unknown servers!" = "Onbekende servers!";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
@@ -4705,6 +4868,9 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Use SimpleX Chat servers?" = "SimpleX Chat servers gebruiken?";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Use SOCKS proxy" = "Gebruik SOCKS proxy";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Use the app while in the call." = "Gebruik de app tijdens het gesprek.";
|
||||
|
||||
@@ -4712,10 +4878,10 @@
|
||||
"Use the app with one hand." = "Gebruik de app met één hand.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"User profile" = "Gebruikers profiel";
|
||||
"User selection" = "Gebruikersselectie";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"User selection" = "Gebruikersselectie";
|
||||
"Username" = "Gebruikersnaam";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Using SimpleX Chat servers." = "SimpleX Chat servers gebruiken.";
|
||||
@@ -4894,7 +5060,7 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Without Tor or VPN, your IP address will be visible to file servers." = "Zonder Tor of VPN is uw IP-adres zichtbaar voor bestandsservers.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
/* alert message */
|
||||
"Without Tor or VPN, your IP address will be visible to these XFTP relays: %@." = "Zonder Tor of VPN zal uw IP-adres zichtbaar zijn voor deze XFTP-relays: %@.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
@@ -4918,9 +5084,6 @@
|
||||
/* No comment provided by engineer. */
|
||||
"you" = "jij";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"You" = "Jij";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"You **must not** use the same database on two devices." = "U **mag** niet dezelfde database op twee apparaten gebruiken.";
|
||||
|
||||
@@ -4931,7 +5094,7 @@
|
||||
"You allow" = "Jij staat toe";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"You already have a chat profile with the same display name. Please choose another name." = "Je hebt al een chat profiel met dezelfde weergave naam. Kies een andere naam.";
|
||||
"You already have a chat profile with the same display name. Please choose another name." = "Je hebt al een chatprofiel met dezelfde weergave naam. Kies een andere naam.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"You are already connected to %@." = "U bent al verbonden met %@.";
|
||||
@@ -4970,7 +5133,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" = "jij bent waarnemer";
|
||||
"you are observer" = "je bent waarnemer";
|
||||
|
||||
/* snd group event chat item */
|
||||
"you blocked %@" = "je hebt %@ geblokkeerd";
|
||||
@@ -5072,7 +5235,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" = "jij bent vertrokken";
|
||||
"you left" = "je bent vertrokken";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"You may migrate the exported database." = "U kunt de geëxporteerde database migreren.";
|
||||
@@ -5155,9 +5318,15 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Your chat database is not encrypted - set passphrase to encrypt it." = "Uw chat database is niet versleuteld, stel een wachtwoord in om deze te versleutelen.";
|
||||
|
||||
/* alert title */
|
||||
"Your chat preferences" = "Uw chat voorkeuren";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Your chat profiles" = "Uw chat profielen";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Your connection was moved to %@ but an unexpected error occurred while redirecting you to the profile." = "Uw verbinding is verplaatst naar %@, maar er is een onverwachte fout opgetreden tijdens het omleiden naar het profiel.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Your contact sent a file that is larger than currently supported maximum size (%@)." = "Uw contact heeft een bestand verzonden dat groter is dan de momenteel ondersteunde maximale grootte (%@).";
|
||||
|
||||
@@ -5167,6 +5336,9 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Your contacts will remain connected." = "Uw contacten blijven verbonden.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Your credentials may be sent unencrypted." = "Uw inloggegevens worden mogelijk niet-versleuteld verzonden.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Your current chat database will be DELETED and REPLACED with the imported one." = "Uw huidige chat database wordt VERWIJDERD en VERVANGEN door de geïmporteerde.";
|
||||
|
||||
@@ -5189,7 +5361,10 @@
|
||||
"Your profile **%@** will be shared." = "Uw profiel **%@** wordt gedeeld.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Your profile is stored on your device and shared only with your contacts.\nSimpleX servers cannot see your profile." = "Uw profiel wordt op uw apparaat opgeslagen en alleen gedeeld met uw contacten.\nSimpleX servers kunnen uw profiel niet zien.";
|
||||
"Your profile is stored on your device and shared only with your contacts. SimpleX servers cannot see your profile." = "Uw profiel wordt op uw apparaat opgeslagen en alleen gedeeld met uw contacten. SimpleX servers kunnen uw profiel niet zien.";
|
||||
|
||||
/* alert message */
|
||||
"Your profile was changed. If you save it, the updated profile will be sent to all your contacts." = "Je profiel is gewijzigd. Als je het opslaat, wordt het bijgewerkte profiel naar al je contacten verzonden.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Your profile, contacts and delivered messages are stored on your device." = "Uw profiel, contacten en afgeleverde berichten worden op uw apparaat opgeslagen.";
|
||||
|
||||
@@ -160,6 +160,9 @@
|
||||
/* 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";
|
||||
|
||||
@@ -172,9 +175,24 @@
|
||||
/* 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";
|
||||
|
||||
@@ -454,7 +472,7 @@
|
||||
/* No comment provided by engineer. */
|
||||
"All new messages from %@ will be hidden!" = "Wszystkie nowe wiadomości z %@ zostaną ukryte!";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
/* profile dropdown */
|
||||
"All profiles" = "Wszystkie profile";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
@@ -577,6 +595,9 @@
|
||||
/* 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";
|
||||
|
||||
@@ -649,6 +670,9 @@
|
||||
/* 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";
|
||||
|
||||
@@ -781,7 +805,7 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Can't message member" = "Nie można wysłać wiadomości do członka";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
/* alert button */
|
||||
"Cancel" = "Anuluj";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
@@ -796,7 +820,7 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Cannot forward message" = "Nie można przekazać wiadomości";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
/* alert title */
|
||||
"Cannot receive file" = "Nie można odebrać pliku";
|
||||
|
||||
/* snd error text */
|
||||
@@ -890,6 +914,12 @@
|
||||
/* 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";
|
||||
|
||||
@@ -1178,6 +1208,9 @@
|
||||
/* 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 %@?";
|
||||
|
||||
@@ -1611,6 +1644,9 @@
|
||||
/* 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.";
|
||||
|
||||
@@ -1629,7 +1665,8 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Downgrade and open chat" = "Obniż wersję i otwórz czat";
|
||||
|
||||
/* chat item action */
|
||||
/* alert button
|
||||
chat item action */
|
||||
"Download" = "Pobierz";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
@@ -1641,6 +1678,9 @@
|
||||
/* server test step */
|
||||
"Download file" = "Pobierz plik";
|
||||
|
||||
/* alert action */
|
||||
"Download files" = "Pobierz pliki";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Downloaded" = "Pobrane";
|
||||
|
||||
@@ -1857,12 +1897,18 @@
|
||||
/* 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.";
|
||||
|
||||
@@ -1936,9 +1982,12 @@
|
||||
"Error loading %@ servers" = "Błąd ładowania %@ serwerów";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Error opening chat" = "Błąd otwierania czatu";
|
||||
"Error migrating settings" = "Błąd migracji ustawień";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Error opening chat" = "Błąd otwierania czatu";
|
||||
|
||||
/* alert title */
|
||||
"Error receiving file" = "Błąd odbioru pliku";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
@@ -1996,6 +2045,9 @@
|
||||
"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!";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
@@ -2022,8 +2074,7 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Error: " = "Błąd: ";
|
||||
|
||||
/* file error text
|
||||
snd error text */
|
||||
/* alert message */
|
||||
"Error: %@" = "Błąd: %@";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
@@ -2083,6 +2134,9 @@
|
||||
/* 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.";
|
||||
|
||||
@@ -2164,9 +2218,18 @@
|
||||
/* 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";
|
||||
|
||||
@@ -2176,6 +2239,9 @@
|
||||
/* 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.";
|
||||
|
||||
@@ -2203,9 +2269,6 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Full name (optional)" = "Pełna nazwa (opcjonalna)";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Full name:" = "Pełna nazwa:";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Fully decentralized – visible only to members." = "W pełni zdecentralizowana – widoczna tylko dla członków.";
|
||||
|
||||
@@ -2566,6 +2629,9 @@
|
||||
/* 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";
|
||||
|
||||
@@ -2818,6 +2884,9 @@
|
||||
/* 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.";
|
||||
|
||||
@@ -2848,6 +2917,9 @@
|
||||
/* 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.";
|
||||
|
||||
@@ -3001,6 +3073,12 @@
|
||||
/* 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";
|
||||
|
||||
@@ -3043,6 +3121,12 @@
|
||||
/* 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";
|
||||
|
||||
@@ -3058,6 +3142,9 @@
|
||||
/* 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";
|
||||
|
||||
@@ -3084,7 +3171,7 @@
|
||||
/* feature offered item */
|
||||
"offered %@: %@" = "zaoferował %1$@: %2$@";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
/* alert button */
|
||||
"Ok" = "Ok";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
@@ -3210,6 +3297,9 @@
|
||||
/* 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";
|
||||
|
||||
@@ -3231,6 +3321,9 @@
|
||||
/* 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";
|
||||
|
||||
@@ -3327,6 +3420,9 @@
|
||||
/* 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";
|
||||
|
||||
@@ -3378,12 +3474,6 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Profile images" = "Zdjęcia profilowe";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Profile name" = "Nazwa profilu";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Profile name:" = "Nazwa profilu:";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Profile password" = "Hasło profilu";
|
||||
|
||||
@@ -3444,6 +3534,9 @@
|
||||
/* 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";
|
||||
|
||||
@@ -3589,6 +3682,9 @@
|
||||
/* 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";
|
||||
|
||||
@@ -3715,10 +3811,11 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Safer groups" = "Bezpieczniejsze grupy";
|
||||
|
||||
/* chat item action */
|
||||
/* alert button
|
||||
chat item action */
|
||||
"Save" = "Zapisz";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
/* alert button */
|
||||
"Save (and notify contacts)" = "Zapisz (i powiadom kontakty)";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
@@ -3736,9 +3833,6 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Save archive" = "Zapisz archiwum";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Save auto-accept settings" = "Zapisz ustawienia automatycznej akceptacji";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Save group profile" = "Zapisz profil grupy";
|
||||
|
||||
@@ -3760,12 +3854,12 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Save servers?" = "Zapisać serwery?";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Save settings?" = "Zapisać ustawienia?";
|
||||
|
||||
/* 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";
|
||||
|
||||
@@ -3784,6 +3878,9 @@
|
||||
/* 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";
|
||||
|
||||
@@ -3847,6 +3944,9 @@
|
||||
/* 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";
|
||||
|
||||
@@ -3919,7 +4019,7 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Send up to 100 last messages to new members." = "Wysyłaj do 100 ostatnich wiadomości do nowych członków.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
/* alert message */
|
||||
"Sender cancelled file transfer." = "Nadawca anulował transfer pliku.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
@@ -3979,6 +4079,9 @@
|
||||
/* 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";
|
||||
|
||||
@@ -4060,6 +4163,9 @@
|
||||
/* 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";
|
||||
|
||||
@@ -4081,6 +4187,9 @@
|
||||
/* 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";
|
||||
|
||||
@@ -4180,9 +4289,15 @@
|
||||
/* 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:";
|
||||
|
||||
@@ -4282,6 +4397,9 @@
|
||||
/* 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";
|
||||
|
||||
@@ -4411,6 +4529,9 @@
|
||||
/* 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";
|
||||
|
||||
@@ -4489,6 +4610,12 @@
|
||||
/* 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.";
|
||||
|
||||
@@ -4588,7 +4715,7 @@
|
||||
/* No comment provided by engineer. */
|
||||
"unknown servers" = "nieznane przekaźniki";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
/* alert title */
|
||||
"Unknown servers!" = "Nieznane serwery!";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
@@ -4705,6 +4832,9 @@
|
||||
/* 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.";
|
||||
|
||||
@@ -4712,10 +4842,10 @@
|
||||
"Use the app with one hand." = "Korzystaj z aplikacji jedną ręką.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"User profile" = "Profil użytkownika";
|
||||
"User selection" = "Wybór użytkownika";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"User selection" = "Wybór użytkownika";
|
||||
"Username" = "Nazwa użytkownika";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Using SimpleX Chat servers." = "Używanie serwerów SimpleX Chat.";
|
||||
@@ -4894,7 +5024,7 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Without Tor or VPN, your IP address will be visible to file servers." = "Bez Tor lub VPN, Twój adres IP będzie widoczny do serwerów plików.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
/* alert message */
|
||||
"Without Tor or VPN, your IP address will be visible to these XFTP relays: %@." = "Bez Tor lub VPN, Twój adres IP będzie widoczny dla tych przekaźników XFTP: %@.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
@@ -4918,9 +5048,6 @@
|
||||
/* No comment provided by engineer. */
|
||||
"you" = "Ty";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"You" = "Ty";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"You **must not** use the same database on two devices." = "**Nie możesz** używać tej samej bazy na dwóch urządzeniach.";
|
||||
|
||||
@@ -5155,9 +5282,15 @@
|
||||
/* 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 (%@).";
|
||||
|
||||
@@ -5167,6 +5300,9 @@
|
||||
/* 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ą.";
|
||||
|
||||
@@ -5189,7 +5325,10 @@
|
||||
"Your profile **%@** will be shared." = "Twój profil **%@** zostanie udostępniony.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Your profile is stored on your device and shared only with your contacts.\nSimpleX servers cannot see your profile." = "Twój profil jest przechowywany na urządzeniu i udostępniany tylko Twoim kontaktom.\nSerwery SimpleX nie mogą zobaczyć Twojego profilu.";
|
||||
"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.";
|
||||
|
||||
@@ -160,6 +160,9 @@
|
||||
/* notification title */
|
||||
"%@ wants to connect!" = "%@ хочет соединиться!";
|
||||
|
||||
/* format for date separator in chat */
|
||||
"%@, %@" = "%1$@, %2$@";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"%@, %@ and %lld members" = "%@, %@ и %lld членов группы";
|
||||
|
||||
@@ -172,9 +175,24 @@
|
||||
/* 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 мин";
|
||||
|
||||
@@ -454,7 +472,7 @@
|
||||
/* No comment provided by engineer. */
|
||||
"All new messages from %@ will be hidden!" = "Все новые сообщения от %@ будут скрыты!";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
/* profile dropdown */
|
||||
"All profiles" = "Все профили";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
@@ -577,6 +595,9 @@
|
||||
/* 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" = "Версия приложения";
|
||||
|
||||
@@ -649,6 +670,9 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Auto-accept images" = "Автоприем изображений";
|
||||
|
||||
/* alert title */
|
||||
"Auto-accept settings" = "Настройки автоприема";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Back" = "Назад";
|
||||
|
||||
@@ -670,15 +694,30 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Bad message ID" = "Ошибка ID сообщения";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Better calls" = "Улучшенные звонки";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Better groups" = "Улучшенные группы";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Better message dates." = "Улучшенные даты сообщений.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Better messages" = "Улучшенные сообщения";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Better networking" = "Улучшенные сетевые функции";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Better notifications" = "Улучшенные уведомления";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Better security ✅" = "Улучшенная безопасность ✅";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Better user experience" = "Улучшенный интерфейс";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Black" = "Черная";
|
||||
|
||||
@@ -781,7 +820,7 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Can't message member" = "Не удается написать члену группы";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
/* alert button */
|
||||
"Cancel" = "Отменить";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
@@ -796,7 +835,7 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Cannot forward message" = "Невозможно переслать сообщение";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
/* alert title */
|
||||
"Cannot receive file" = "Невозможно получить файл";
|
||||
|
||||
/* snd error text */
|
||||
@@ -890,6 +929,12 @@
|
||||
/* 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" = "Тема чата";
|
||||
|
||||
@@ -1178,6 +1223,9 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Core version: v%@" = "Версия ядра: v%@";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Corner" = "Угол";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Correct name to %@?" = "Исправить имя на %@?";
|
||||
|
||||
@@ -1259,6 +1307,9 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Custom time" = "Пользовательское время";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Customizable message shape." = "Настраиваемая форма сообщений.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Customize theme" = "Настроить тему";
|
||||
|
||||
@@ -1449,6 +1500,9 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Delete old database?" = "Удалить предыдущую версию данных?";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Delete or moderate up to 200 messages." = "Удаляйте или модерируйте до 200 сообщений.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Delete pending connection?" = "Удалить ожидаемое соединение?";
|
||||
|
||||
@@ -1611,6 +1665,9 @@
|
||||
/* 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." = "Не использовать конфиденциальную доставку.";
|
||||
|
||||
@@ -1629,7 +1686,8 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Downgrade and open chat" = "Откатить версию и открыть чат";
|
||||
|
||||
/* chat item action */
|
||||
/* alert button
|
||||
chat item action */
|
||||
"Download" = "Загрузить";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
@@ -1641,6 +1699,9 @@
|
||||
/* server test step */
|
||||
"Download file" = "Загрузка файла";
|
||||
|
||||
/* alert action */
|
||||
"Download files" = "Загрузить файлы";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Downloaded" = "Принято";
|
||||
|
||||
@@ -1857,12 +1918,18 @@
|
||||
/* 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." = "Ошибка подключения к пересылающему серверу %@. Попробуйте позже.";
|
||||
|
||||
@@ -1936,9 +2003,12 @@
|
||||
"Error loading %@ servers" = "Ошибка загрузки %@ серверов";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Error opening chat" = "Ошибка доступа к чату";
|
||||
"Error migrating settings" = "Ошибка миграции настроек";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Error opening chat" = "Ошибка доступа к чату";
|
||||
|
||||
/* alert title */
|
||||
"Error receiving file" = "Ошибка при получении файла";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
@@ -1996,6 +2066,9 @@
|
||||
"Error stopping chat" = "Ошибка при остановке чата";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Error switching profile" = "Ошибка переключения профиля";
|
||||
|
||||
/* alertTitle */
|
||||
"Error switching profile!" = "Ошибка выбора профиля!";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
@@ -2022,8 +2095,7 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Error: " = "Ошибка: ";
|
||||
|
||||
/* file error text
|
||||
snd error text */
|
||||
/* alert message */
|
||||
"Error: %@" = "Ошибка: %@";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
@@ -2083,6 +2155,9 @@
|
||||
/* 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." = "Файл не найден - скорее всего, файл был удален или отменен.";
|
||||
|
||||
@@ -2164,9 +2239,21 @@
|
||||
/* 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. */
|
||||
"Forward up to 20 messages at once." = "Пересылайте до 20 сообщений за раз.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"forwarded" = "переслано";
|
||||
|
||||
@@ -2176,6 +2263,9 @@
|
||||
/* 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." = "Пересылающий сервер %@ не смог подключиться к серверу назначения %@. Попробуйте позже.";
|
||||
|
||||
@@ -2203,9 +2293,6 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Full name (optional)" = "Полное имя (не обязательно)";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Full name:" = "Полное имя:";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Fully decentralized – visible only to members." = "Группа полностью децентрализована – она видна только членам.";
|
||||
|
||||
@@ -2407,6 +2494,9 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Importing archive" = "Импорт архива";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Improved delivery, reduced traffic usage.\nMore improvements are coming soon!" = "Улучшенная доставка, меньше трафик.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Improved message delivery" = "Улучшенная доставка сообщений";
|
||||
|
||||
@@ -2566,6 +2656,9 @@
|
||||
/* 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" = "Окончательное удаление сообщений";
|
||||
|
||||
@@ -2818,6 +2911,9 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Message servers" = "Серверы сообщений";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Message shape" = "Форма сообщений";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Message source remains private." = "Источник сообщения остаётся конфиденциальным.";
|
||||
|
||||
@@ -2848,6 +2944,9 @@
|
||||
/* 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), правдоподобным отрицанием и восстановлением от взлома.";
|
||||
|
||||
@@ -3001,6 +3100,12 @@
|
||||
/* 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" = "нет";
|
||||
|
||||
@@ -3043,6 +3148,12 @@
|
||||
/* 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" = "Нет разрешения для записи голосового сообщения";
|
||||
|
||||
@@ -3058,6 +3169,9 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Nothing selected" = "Ничего не выбрано";
|
||||
|
||||
/* alert title */
|
||||
"Nothing to forward!" = "Нет сообщений, которые можно переслать!";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Notifications" = "Уведомления";
|
||||
|
||||
@@ -3084,7 +3198,7 @@
|
||||
/* feature offered item */
|
||||
"offered %@: %@" = "предложил(a) %1$@: %2$@";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
/* alert button */
|
||||
"Ok" = "Ок";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
@@ -3210,6 +3324,9 @@
|
||||
/* No comment provided by engineer. */
|
||||
"other errors" = "другие ошибки";
|
||||
|
||||
/* alert message */
|
||||
"Other file errors:\n%@" = "Другие ошибки файлов:\n%@";
|
||||
|
||||
/* member role */
|
||||
"owner" = "владелец";
|
||||
|
||||
@@ -3231,6 +3348,9 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Passcode set!" = "Код доступа установлен!";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Password" = "Пароль";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Password to show" = "Пароль чтобы раскрыть";
|
||||
|
||||
@@ -3327,6 +3447,9 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Polish interface" = "Польский интерфейс";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Port" = "Порт";
|
||||
|
||||
/* server test error */
|
||||
"Possibly, certificate fingerprint in server address is incorrect" = "Возможно, хэш сертификата в адресе сервера неверный";
|
||||
|
||||
@@ -3378,12 +3501,6 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Profile images" = "Картинки профилей";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Profile name" = "Имя профиля";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Profile name:" = "Имя профиля:";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Profile password" = "Пароль профиля";
|
||||
|
||||
@@ -3444,6 +3561,9 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Proxied servers" = "Проксированные серверы";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Proxy requires password" = "Прокси требует пароль";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Push notifications" = "Доставка уведомлений";
|
||||
|
||||
@@ -3589,6 +3709,9 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Remove" = "Удалить";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Remove archive?" = "Удалить архив?";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Remove image" = "Удалить изображение";
|
||||
|
||||
@@ -3715,10 +3838,11 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Safer groups" = "Более безопасные группы";
|
||||
|
||||
/* chat item action */
|
||||
/* alert button
|
||||
chat item action */
|
||||
"Save" = "Сохранить";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
/* alert button */
|
||||
"Save (and notify contacts)" = "Сохранить (и уведомить контакты)";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
@@ -3736,9 +3860,6 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Save archive" = "Сохранить архив";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Save auto-accept settings" = "Сохранить настройки автоприема";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Save group profile" = "Сохранить профиль группы";
|
||||
|
||||
@@ -3760,12 +3881,12 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Save servers?" = "Сохранить серверы?";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Save settings?" = "Сохранить настройки?";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Save welcome message?" = "Сохранить приветственное сообщение?";
|
||||
|
||||
/* alert title */
|
||||
"Save your profile?" = "Сохранить ваш профиль?";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"saved" = "сохранено";
|
||||
|
||||
@@ -3784,6 +3905,9 @@
|
||||
/* 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" = "Масштаб";
|
||||
|
||||
@@ -3847,6 +3971,9 @@
|
||||
/* chat item action */
|
||||
"Select" = "Выбрать";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Select chat profile" = "Выберите профиль чата";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Selected %lld" = "Выбрано %lld";
|
||||
|
||||
@@ -3919,7 +4046,7 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Send up to 100 last messages to new members." = "Отправить до 100 последних сообщений новым членам.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
/* alert message */
|
||||
"Sender cancelled file transfer." = "Отправитель отменил передачу файла.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
@@ -3979,6 +4106,9 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Sent via proxy" = "Отправлено через прокси";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Server" = "Сервер";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Server address" = "Адрес сервера";
|
||||
|
||||
@@ -4060,6 +4190,9 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Settings" = "Настройки";
|
||||
|
||||
/* alert message */
|
||||
"Settings were changed." = "Настройки были изменены.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Shape profile images" = "Форма картинок профилей";
|
||||
|
||||
@@ -4081,6 +4214,9 @@
|
||||
/* 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" = "Поделиться одноразовой ссылкой-приглашением";
|
||||
|
||||
@@ -4162,6 +4298,9 @@
|
||||
/* simplex link type */
|
||||
"SimpleX one-time invitation" = "SimpleX одноразовая ссылка";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"SimpleX protocols reviewed by Trail of Bits." = "Аудит SimpleX протоколов от Trail of Bits.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Simplified incognito mode" = "Упрощенный режим Инкогнито";
|
||||
|
||||
@@ -4180,9 +4319,15 @@
|
||||
/* 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:" = "Некоторые файл(ы) не были экспортированы:";
|
||||
|
||||
@@ -4276,12 +4421,21 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Support SimpleX Chat" = "Поддержать SimpleX Chat";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Switch audio and video during the call." = "Переключайте звук и видео во время звонка.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Switch chat profile for 1-time invitations." = "Переключайте профиль чата для одноразовых приглашений.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"System" = "Системная";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"System authentication" = "Системная аутентификация";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Tail" = "Хвост";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Take picture" = "Сделать фото";
|
||||
|
||||
@@ -4411,6 +4565,9 @@
|
||||
/* 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" = "Темы";
|
||||
|
||||
@@ -4489,6 +4646,12 @@
|
||||
/* 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." = "Для записи голосового сообщения, пожалуйста разрешите доступ к микрофону.";
|
||||
|
||||
@@ -4588,7 +4751,7 @@
|
||||
/* No comment provided by engineer. */
|
||||
"unknown servers" = "неизвестные серверы";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
/* alert title */
|
||||
"Unknown servers!" = "Неизвестные серверы!";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
@@ -4705,6 +4868,9 @@
|
||||
/* 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." = "Используйте приложение во время звонка.";
|
||||
|
||||
@@ -4712,10 +4878,10 @@
|
||||
"Use the app with one hand." = "Используйте приложение одной рукой.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"User profile" = "Профиль чата";
|
||||
"User selection" = "Выбор пользователя";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"User selection" = "Выбор пользователя";
|
||||
"Username" = "Имя пользователя";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Using SimpleX Chat servers." = "Используются серверы, предоставленные SimpleX Chat.";
|
||||
@@ -4894,7 +5060,7 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Without Tor or VPN, your IP address will be visible to file servers." = "Без Тора или ВПН, Ваш IP адрес будет доступен серверам файлов.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
/* alert message */
|
||||
"Without Tor or VPN, your IP address will be visible to these XFTP relays: %@." = "Без Тора или ВПН, Ваш IP адрес будет доступен этим серверам файлов: %@.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
@@ -4918,9 +5084,6 @@
|
||||
/* No comment provided by engineer. */
|
||||
"you" = "Вы";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"You" = "Вы";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"You **must not** use the same database on two devices." = "Вы **не должны** использовать одну и ту же базу данных на двух устройствах.";
|
||||
|
||||
@@ -5155,9 +5318,15 @@
|
||||
/* 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 (%@)." = "Ваш контакт отправил файл, размер которого превышает максимальный размер (%@).";
|
||||
|
||||
@@ -5167,6 +5336,9 @@
|
||||
/* 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." = "Текущие данные Вашего чата будет УДАЛЕНЫ и ЗАМЕНЕНЫ импортированными.";
|
||||
|
||||
@@ -5189,7 +5361,10 @@
|
||||
"Your profile **%@** will be shared." = "Будет отправлен Ваш профиль **%@**.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Your profile is stored on your device and shared only with your contacts.\nSimpleX servers cannot see your profile." = "Ваш профиль хранится на Вашем устройстве и отправляется только Вашим контактам.\nSimpleX серверы не могут получить доступ к Вашему профилю.";
|
||||
"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." = "Ваш профиль, контакты и доставленные сообщения хранятся на Вашем устройстве.";
|
||||
|
||||
@@ -523,7 +523,7 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Can't invite contacts!" = "ไม่สามารถเชิญผู้ติดต่อได้!";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
/* alert button */
|
||||
"Cancel" = "ยกเลิก";
|
||||
|
||||
/* feature offered item */
|
||||
@@ -532,7 +532,7 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Cannot access keychain to save database password" = "ไม่สามารถเข้าถึง keychain เพื่อบันทึกรหัสผ่านฐานข้อมูล";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
/* alert title */
|
||||
"Cannot receive file" = "ไม่สามารถรับไฟล์ได้";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
@@ -605,6 +605,9 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Chat preferences" = "ค่ากําหนดในการแชท";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Chat profile" = "โปรไฟล์ผู้ใช้";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Chats" = "แชท";
|
||||
|
||||
@@ -1308,7 +1311,7 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Error loading %@ servers" = "โหลดเซิร์ฟเวอร์ %@ ผิดพลาด";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
/* alert title */
|
||||
"Error receiving file" = "เกิดข้อผิดพลาดในการรับไฟล์";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
@@ -1347,7 +1350,7 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Error stopping chat" = "เกิดข้อผิดพลาดในการหยุดแชท";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
/* alertTitle */
|
||||
"Error switching profile!" = "เกิดข้อผิดพลาดในการเปลี่ยนโปรไฟล์!";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
@@ -1368,8 +1371,7 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Error: " = "ผิดพลาด: ";
|
||||
|
||||
/* file error text
|
||||
snd error text */
|
||||
/* alert message */
|
||||
"Error: %@" = "ข้อผิดพลาด: % @";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
@@ -1468,9 +1470,6 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Full name (optional)" = "ชื่อเต็ม (ไม่บังคับ)";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Full name:" = "ชื่อเต็ม:";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Fully re-implemented - work in background!" = "ดำเนินการใหม่อย่างสมบูรณ์ - ทำงานในพื้นหลัง!";
|
||||
|
||||
@@ -2100,7 +2099,7 @@
|
||||
/* feature offered item */
|
||||
"offered %@: %@" = "เสนอแล้ว %1$@: %2$@";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
/* alert button */
|
||||
"Ok" = "ตกลง";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
@@ -2503,10 +2502,11 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Run chat" = "เรียกใช้แชท";
|
||||
|
||||
/* chat item action */
|
||||
/* alert button
|
||||
chat item action */
|
||||
"Save" = "บันทึก";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
/* alert button */
|
||||
"Save (and notify contacts)" = "บันทึก (และแจ้งผู้ติดต่อ)";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
@@ -2521,9 +2521,6 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Save archive" = "บันทึกไฟล์เก็บถาวร";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Save auto-accept settings" = "บันทึกการตั้งค่าการยอมรับอัตโนมัติ";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Save group profile" = "บันทึกโปรไฟล์กลุ่ม";
|
||||
|
||||
@@ -2545,9 +2542,6 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Save servers?" = "บันทึกเซิร์ฟเวอร์?";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Save settings?" = "บันทึกการตั้งค่า?";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Save welcome message?" = "บันทึกข้อความต้อนรับ?";
|
||||
|
||||
@@ -2638,7 +2632,7 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Send them from gallery or custom keyboards." = "ส่งจากแกลเลอรีหรือแป้นพิมพ์แบบกำหนดเอง";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
/* alert message */
|
||||
"Sender cancelled file transfer." = "ผู้ส่งยกเลิกการโอนไฟล์";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
@@ -3103,9 +3097,6 @@
|
||||
/* 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 อยู่";
|
||||
|
||||
@@ -3223,9 +3214,6 @@
|
||||
/* pref value */
|
||||
"yes" = "ใช่";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"You" = "คุณ";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"You accepted connection" = "คุณยอมรับการเชื่อมต่อ";
|
||||
|
||||
@@ -3413,7 +3401,7 @@
|
||||
"Your privacy" = "ความเป็นส่วนตัวของคุณ";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Your profile is stored on your device and shared only with your contacts.\nSimpleX servers cannot see your profile." = "โปรไฟล์ของคุณจะถูกจัดเก็บไว้ในอุปกรณ์ของคุณและแชร์กับผู้ติดต่อของคุณเท่านั้น\nเซิร์ฟเวอร์ SimpleX ไม่สามารถดูโปรไฟล์ของคุณได้";
|
||||
"Your profile is stored on your device and shared only with your contacts. SimpleX servers cannot see your profile." = "โปรไฟล์ของคุณจะถูกจัดเก็บไว้ในอุปกรณ์ของคุณและแชร์กับผู้ติดต่อของคุณเท่านั้น เซิร์ฟเวอร์ SimpleX ไม่สามารถดูโปรไฟล์ของคุณได้";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Your profile, contacts and delivered messages are stored on your device." = "โปรไฟล์ รายชื่อผู้ติดต่อ และข้อความที่ส่งของคุณจะถูกจัดเก็บไว้ในอุปกรณ์ของคุณ";
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -454,7 +454,7 @@
|
||||
/* No comment provided by engineer. */
|
||||
"All new messages from %@ will be hidden!" = "Всі нові повідомлення від %@ будуть приховані!";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
/* profile dropdown */
|
||||
"All profiles" = "Всі профілі";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
@@ -781,7 +781,7 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Can't message member" = "Не можу надіслати повідомлення користувачеві";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
/* alert button */
|
||||
"Cancel" = "Скасувати";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
@@ -796,7 +796,7 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Cannot forward message" = "Неможливо переслати повідомлення";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
/* alert title */
|
||||
"Cannot receive file" = "Не вдається отримати файл";
|
||||
|
||||
/* snd error text */
|
||||
@@ -890,6 +890,9 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Chat preferences" = "Налаштування чату";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Chat profile" = "Профіль користувача";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Chat theme" = "Тема чату";
|
||||
|
||||
@@ -1629,7 +1632,8 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Downgrade and open chat" = "Пониження та відкритий чат";
|
||||
|
||||
/* chat item action */
|
||||
/* alert button
|
||||
chat item action */
|
||||
"Download" = "Завантажити";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
@@ -1938,7 +1942,7 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Error opening chat" = "Помилка відкриття чату";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
/* alert title */
|
||||
"Error receiving file" = "Помилка отримання файлу";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
@@ -1995,7 +1999,7 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Error stopping chat" = "Помилка зупинки чату";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
/* alertTitle */
|
||||
"Error switching profile!" = "Помилка перемикання профілю!";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
@@ -2022,8 +2026,7 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Error: " = "Помилка: ";
|
||||
|
||||
/* file error text
|
||||
snd error text */
|
||||
/* alert message */
|
||||
"Error: %@" = "Помилка: %@";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
@@ -2203,9 +2206,6 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Full name (optional)" = "Повне ім'я (необов'язково)";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Full name:" = "Повне ім'я:";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Fully decentralized – visible only to members." = "Повністю децентралізована - видима лише для учасників.";
|
||||
|
||||
@@ -3084,7 +3084,7 @@
|
||||
/* feature offered item */
|
||||
"offered %@: %@" = "запропонував %1$@: %2$@";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
/* alert button */
|
||||
"Ok" = "Гаразд";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
@@ -3378,12 +3378,6 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Profile images" = "Зображення профілю";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Profile name" = "Назва профілю";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Profile name:" = "Ім'я профілю:";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Profile password" = "Пароль до профілю";
|
||||
|
||||
@@ -3715,10 +3709,11 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Safer groups" = "Безпечніші групи";
|
||||
|
||||
/* chat item action */
|
||||
/* alert button
|
||||
chat item action */
|
||||
"Save" = "Зберегти";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
/* alert button */
|
||||
"Save (and notify contacts)" = "Зберегти (і повідомити контактам)";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
@@ -3736,9 +3731,6 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Save archive" = "Зберегти архів";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Save auto-accept settings" = "Зберегти налаштування автоприйому";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Save group profile" = "Зберегти профіль групи";
|
||||
|
||||
@@ -3760,9 +3752,6 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Save servers?" = "Зберегти сервери?";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Save settings?" = "Зберегти налаштування?";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Save welcome message?" = "Зберегти вітальне повідомлення?";
|
||||
|
||||
@@ -3919,7 +3908,7 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Send up to 100 last messages to new members." = "Надішліть до 100 останніх повідомлень новим користувачам.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
/* alert message */
|
||||
"Sender cancelled file transfer." = "Відправник скасував передачу файлу.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
@@ -4588,7 +4577,7 @@
|
||||
/* No comment provided by engineer. */
|
||||
"unknown servers" = "невідомі реле";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
/* alert title */
|
||||
"Unknown servers!" = "Невідомі сервери!";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
@@ -4711,9 +4700,6 @@
|
||||
/* 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" = "Вибір користувача";
|
||||
|
||||
@@ -4894,7 +4880,7 @@
|
||||
/* No comment provided by engineer. */
|
||||
"Without Tor or VPN, your IP address will be visible to file servers." = "Без Tor або VPN ваша IP-адреса буде видимою для файлових серверів.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
/* alert message */
|
||||
"Without Tor or VPN, your IP address will be visible to these XFTP relays: %@." = "Без Tor або VPN ваша IP-адреса буде видимою для цих XFTP-ретрансляторів: %@.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
@@ -4918,9 +4904,6 @@
|
||||
/* No comment provided by engineer. */
|
||||
"you" = "ти";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"You" = "Ти";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"You **must not** use the same database on two devices." = "Ви **не повинні використовувати** одну і ту ж базу даних на двох пристроях.";
|
||||
|
||||
@@ -5189,7 +5172,7 @@
|
||||
"Your profile **%@** will be shared." = "Ваш профіль **%@** буде опублікований.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Your profile is stored on your device and shared only with your contacts.\nSimpleX servers cannot see your profile." = "Ваш профіль зберігається на вашому пристрої і доступний лише вашим контактам.\nСервери SimpleX не бачать ваш профіль.";
|
||||
"Your profile is stored on your device and shared only with your contacts. SimpleX servers cannot see your profile." = "Ваш профіль зберігається на вашому пристрої і доступний лише вашим контактам. Сервери SimpleX не бачать ваш профіль.";
|
||||
|
||||
/* No comment provided by engineer. */
|
||||
"Your profile, contacts and delivered messages are stored on your device." = "Ваш профіль, контакти та доставлені повідомлення зберігаються на вашому пристрої.";
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -7,6 +7,9 @@
|
||||
/* Privacy - Face ID Usage Description */
|
||||
"NSFaceIDUsageDescription" = "SimpleX 使用Face ID进行本地身份验证";
|
||||
|
||||
/* Privacy - Local Network Usage Description */
|
||||
"NSLocalNetworkUsageDescription" = "SimpleX 使用本地网络访问,允许通过同一网络上的桌面应用程序使用用户聊天配置文件。";
|
||||
|
||||
/* Privacy - Microphone Usage Description */
|
||||
"NSMicrophoneUsageDescription" = "SimpleX 需要麦克风访问权限才能进行音频和视频通话,以及录制语音消息。";
|
||||
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user