From a266bcbae70bbb738c8eab1f3b53aa8b21c76c04 Mon Sep 17 00:00:00 2001 From: Stanislav Dmitrenko <7953703+avently@users.noreply.github.com> Date: Sat, 25 Mar 2023 00:48:34 +0300 Subject: [PATCH 01/19] android: hidden and muted user profiles (#2069) * android: hidden and muted user profiles * swap buttons * smaller delay * remove unused type * some fixes of issues * small visual changes * removed delay * re-appeared calls * update icons and colors * disable all notifications for muted users --------- Co-authored-by: Evgeny Poberezkin <2769109+epoberezkin@users.noreply.github.com> --- apps/android/app/src/main/cpp/simplex-api.c | 11 + .../java/chat/simplex/app/MainActivity.kt | 4 +- .../main/java/chat/simplex/app/SimplexApp.kt | 1 + .../java/chat/simplex/app/model/ChatModel.kt | 44 +++- .../java/chat/simplex/app/model/NtfManager.kt | 10 +- .../java/chat/simplex/app/model/SimpleXAPI.kt | 171 +++++++----- .../simplex/app/views/call/CallManager.kt | 14 +- .../app/views/chatlist/ChatListView.kt | 2 +- .../simplex/app/views/chatlist/UserPicker.kt | 67 +++-- .../views/database/DatabaseEncryptionView.kt | 34 ++- .../app/views/database/DatabaseErrorView.kt | 2 +- .../app/views/helpers/CloseSheetBar.kt | 7 +- .../views/usersettings/HiddenProfileView.kt | 89 +++++++ .../app/views/usersettings/SettingsView.kt | 29 ++- .../views/usersettings/UserProfilesView.kt | 246 +++++++++++++++--- .../app/src/main/res/values/strings.xml | 5 +- 16 files changed, 577 insertions(+), 159 deletions(-) create mode 100644 apps/android/app/src/main/java/chat/simplex/app/views/usersettings/HiddenProfileView.kt diff --git a/apps/android/app/src/main/cpp/simplex-api.c b/apps/android/app/src/main/cpp/simplex-api.c index a5264e3359..e3f1c13cf9 100644 --- a/apps/android/app/src/main/cpp/simplex-api.c +++ b/apps/android/app/src/main/cpp/simplex-api.c @@ -30,6 +30,7 @@ extern char *chat_recv_msg(chat_ctrl ctrl); // deprecated extern char *chat_recv_msg_wait(chat_ctrl ctrl, const int wait); extern char *chat_parse_markdown(const char *str); extern char *chat_parse_server(const char *str); +extern char *chat_password_hash(const char *pwd, const char *salt); JNIEXPORT jobjectArray JNICALL Java_chat_simplex_app_SimplexAppKt_chatMigrateInit(JNIEnv *env, __unused jclass clazz, jstring dbPath, jstring dbKey) { @@ -85,3 +86,13 @@ Java_chat_simplex_app_SimplexAppKt_chatParseServer(JNIEnv *env, __unused jclass (*env)->ReleaseStringUTFChars(env, str, _str); return res; } + +JNIEXPORT jstring JNICALL +Java_chat_simplex_app_SimplexAppKt_chatPasswordHash(JNIEnv *env, __unused jclass clazz, jstring pwd, jstring salt) { + const char *_pwd = (*env)->GetStringUTFChars(env, pwd, JNI_FALSE); + const char *_salt = (*env)->GetStringUTFChars(env, salt, JNI_FALSE); + jstring res = (*env)->NewStringUTF(env, chat_password_hash(_pwd, _salt)); + (*env)->ReleaseStringUTFChars(env, pwd, _pwd); + (*env)->ReleaseStringUTFChars(env, salt, _salt); + return res; +} diff --git a/apps/android/app/src/main/java/chat/simplex/app/MainActivity.kt b/apps/android/app/src/main/java/chat/simplex/app/MainActivity.kt index efe6b022c0..734f41cbd0 100644 --- a/apps/android/app/src/main/java/chat/simplex/app/MainActivity.kt +++ b/apps/android/app/src/main/java/chat/simplex/app/MainActivity.kt @@ -402,7 +402,7 @@ fun processNotificationIntent(intent: Intent?, chatModel: ChatModel) { if (chatId != null) { withBGApi { if (userId != null && userId != chatModel.currentUser.value?.userId) { - chatModel.controller.changeActiveUser(userId) + chatModel.controller.changeActiveUser(userId, null) } val cInfo = chatModel.getChat(chatId)?.chatInfo chatModel.clearOverlays.value = true @@ -414,7 +414,7 @@ fun processNotificationIntent(intent: Intent?, chatModel: ChatModel) { Log.d(TAG, "processNotificationIntent: ShowChatsAction") withBGApi { if (userId != null && userId != chatModel.currentUser.value?.userId) { - chatModel.controller.changeActiveUser(userId) + chatModel.controller.changeActiveUser(userId, null) } chatModel.chatId.value = null chatModel.clearOverlays.value = true diff --git a/apps/android/app/src/main/java/chat/simplex/app/SimplexApp.kt b/apps/android/app/src/main/java/chat/simplex/app/SimplexApp.kt index 923f71b970..dce371a351 100644 --- a/apps/android/app/src/main/java/chat/simplex/app/SimplexApp.kt +++ b/apps/android/app/src/main/java/chat/simplex/app/SimplexApp.kt @@ -32,6 +32,7 @@ external fun chatRecvMsg(ctrl: ChatCtrl): String external fun chatRecvMsgWait(ctrl: ChatCtrl, timeout: Int): String external fun chatParseMarkdown(str: String): String external fun chatParseServer(str: String): String +external fun chatPasswordHash(pwd: String, salt: String): String class SimplexApp: Application(), LifecycleEventObserver { lateinit var chatController: ChatController diff --git a/apps/android/app/src/main/java/chat/simplex/app/model/ChatModel.kt b/apps/android/app/src/main/java/chat/simplex/app/model/ChatModel.kt index b573a13758..440bc68622 100644 --- a/apps/android/app/src/main/java/chat/simplex/app/model/ChatModel.kt +++ b/apps/android/app/src/main/java/chat/simplex/app/model/ChatModel.kt @@ -94,6 +94,32 @@ class ChatModel(val controller: ChatController) { val filesToDelete = mutableSetOf() val simplexLinkMode = mutableStateOf(controller.appPrefs.simplexLinkMode.get()) + fun getUser(userId: Long): User? = if (currentUser.value?.userId == userId) { + currentUser.value + } else { + users.firstOrNull { it.user.userId == userId }?.user + } + + private fun getUserIndex(user: User): Int = + users.indexOfFirst { it.user.userId == user.userId } + + fun updateUser(user: User) { + val i = getUserIndex(user) + if (i != -1) { + users[i] = users[i].copy(user = user) + } + if (currentUser.value?.userId == user.userId) { + currentUser.value = user + } + } + + fun removeUser(user: User) { + val i = getUserIndex(user) + if (i != -1 && users[i].user.userId != currentUser.value?.userId) { + users.removeAt(i) + } + } + fun hasChat(id: String): Boolean = chats.firstOrNull { it.id == id } != null fun getChat(id: String): Chat? = chats.firstOrNull { it.id == id } fun getContactChat(contactId: Long): Chat? = chats.firstOrNull { it.chatInfo is ChatInfo.Direct && it.chatInfo.apiId == contactId } @@ -422,13 +448,19 @@ data class User( val localDisplayName: String, val profile: LocalProfile, val fullPreferences: FullChatPreferences, - val activeUser: Boolean + val activeUser: Boolean, + val showNtfs: Boolean, + val viewPwdHash: UserPwdHash? ): NamedChat { override val displayName: String get() = profile.displayName override val fullName: String get() = profile.fullName override val image: String? get() = profile.image override val localAlias: String = "" + val hidden: Boolean = viewPwdHash != null + + val showNotifications: Boolean = activeUser || showNtfs + companion object { val sampleData = User( userId = 1, @@ -436,11 +468,19 @@ data class User( localDisplayName = "alice", profile = LocalProfile.sampleData, fullPreferences = FullChatPreferences.sampleData, - activeUser = true + activeUser = true, + showNtfs = true, + viewPwdHash = null, ) } } +@Serializable +data class UserPwdHash( + val hash: String, + val salt: String +) + @Serializable data class UserInfo( val user: User, diff --git a/apps/android/app/src/main/java/chat/simplex/app/model/NtfManager.kt b/apps/android/app/src/main/java/chat/simplex/app/model/NtfManager.kt index b6c3c11653..a4c4c8aeab 100644 --- a/apps/android/app/src/main/java/chat/simplex/app/model/NtfManager.kt +++ b/apps/android/app/src/main/java/chat/simplex/app/model/NtfManager.kt @@ -80,7 +80,7 @@ class NtfManager(val context: Context, private val appPreferences: AppPreference } fun notifyContactRequestReceived(user: User, cInfo: ChatInfo.ContactRequest) { - notifyMessageReceived( + displayNotification( user = user, chatId = cInfo.id, displayName = cInfo.displayName, @@ -91,7 +91,7 @@ class NtfManager(val context: Context, private val appPreferences: AppPreference } fun notifyContactConnected(user: User, contact: Contact) { - notifyMessageReceived( + displayNotification( user = user, chatId = contact.id, displayName = contact.displayName, @@ -101,11 +101,11 @@ class NtfManager(val context: Context, private val appPreferences: AppPreference fun notifyMessageReceived(user: User, cInfo: ChatInfo, cItem: ChatItem) { if (!cInfo.ntfsEnabled) return - - notifyMessageReceived(user = user, chatId = cInfo.id, displayName = cInfo.displayName, msgText = hideSecrets(cItem)) + displayNotification(user = user, chatId = cInfo.id, displayName = cInfo.displayName, msgText = hideSecrets(cItem)) } - fun notifyMessageReceived(user: User, chatId: String, displayName: String, msgText: String, image: String? = null, actions: List = emptyList()) { + fun displayNotification(user: User, chatId: String, displayName: String, msgText: String, image: String? = null, actions: List = emptyList()) { + if (!user.showNotifications) return Log.d(TAG, "notifyMessageReceived $chatId") val now = Clock.System.now().toEpochMilliseconds() val recentNotification = (now - prevNtfTime.getOrDefault(chatId, 0) < msgNtfTimeoutMs) diff --git a/apps/android/app/src/main/java/chat/simplex/app/model/SimpleXAPI.kt b/apps/android/app/src/main/java/chat/simplex/app/model/SimpleXAPI.kt index 35b9187765..b0d659bd4f 100644 --- a/apps/android/app/src/main/java/chat/simplex/app/model/SimpleXAPI.kt +++ b/apps/android/app/src/main/java/chat/simplex/app/model/SimpleXAPI.kt @@ -133,6 +133,8 @@ class AppPreferences(val context: Context) { val incognito = mkBoolPreference(SHARED_PREFS_INCOGNITO, false) val connectViaLinkTab = mkStrPreference(SHARED_PREFS_CONNECT_VIA_LINK_TAB, ConnectViaLinkTab.SCAN.name) val liveMessageAlertShown = mkBoolPreference(SHARED_PREFS_LIVE_MESSAGE_ALERT_SHOWN, false) + val showHiddenProfilesNotice = mkBoolPreference(SHARED_PREFS_SHOW_HIDDEN_PROFILES_NOTICE, true) + val showMuteProfileAlert = mkBoolPreference(SHARED_PREFS_SHOW_MUTE_PROFILE_ALERT, true) val appLanguage = mkStrPreference(SHARED_PREFS_APP_LANGUAGE, null) val storeDBPassphrase = mkBoolPreference(SHARED_PREFS_STORE_DB_PASSPHRASE, true) @@ -233,6 +235,8 @@ class AppPreferences(val context: Context) { private const val SHARED_PREFS_INCOGNITO = "Incognito" private const val SHARED_PREFS_CONNECT_VIA_LINK_TAB = "ConnectViaLinkTab" private const val SHARED_PREFS_LIVE_MESSAGE_ALERT_SHOWN = "LiveMessageAlertShown" + private const val SHARED_PREFS_SHOW_HIDDEN_PROFILES_NOTICE = "ShowHiddenProfilesNotice" + private const val SHARED_PREFS_SHOW_MUTE_PROFILE_ALERT = "ShowMuteProfileAlert" private const val SHARED_PREFS_STORE_DB_PASSPHRASE = "StoreDBPassphrase" private const val SHARED_PREFS_INITIAL_RANDOM_DB_PASSPHRASE = "InitialRandomDBPassphrase" private const val SHARED_PREFS_ENCRYPTED_DB_PASSPHRASE = "EncryptedDBPassphrase" @@ -261,6 +265,12 @@ open class ChatController(var ctrl: ChatCtrl?, val ntfManager: NtfManager, val a chatModel.incognito.value = appPrefs.incognito.get() } + private fun currentUserId(funcName: String): Long { + val error = "$funcName: no current user" + Log.e(TAG, error) + return chatModel.currentUser.value?.userId ?: throw Exception(error) + } + suspend fun startChat(user: User) { Log.d(TAG, "user: $user") try { @@ -292,21 +302,26 @@ open class ChatController(var ctrl: ChatCtrl?, val ntfManager: NtfManager, val a } } - suspend fun changeActiveUser(toUserId: Long) { + suspend fun changeActiveUser(toUserId: Long, viewPwd: String?) { try { - changeActiveUser_(toUserId) + changeActiveUser_(toUserId, viewPwd) } catch (e: Exception) { Log.e(TAG, "Unable to set active user: ${e.stackTraceToString()}") AlertManager.shared.showAlertMsg(generalGetString(R.string.failed_to_active_user_title), e.stackTraceToString()) } } - suspend fun changeActiveUser_(toUserId: Long) { - chatModel.currentUser.value = apiSetActiveUser(toUserId) + suspend fun changeActiveUser_(toUserId: Long, viewPwd: String?) { + val currentUser = apiSetActiveUser(toUserId, viewPwd) + chatModel.currentUser.value = currentUser val users = listUsers() chatModel.users.clear() chatModel.users.addAll(users) getUserChatData() + val invitation = chatModel.callInvitations.values.firstOrNull { inv -> inv.user.userId == toUserId } + if (invitation != null) { + chatModel.callManager.reportNewIncomingCall(invitation.copy(user = currentUser)) + } } suspend fun getUserChatData() { @@ -403,15 +418,33 @@ open class ChatController(var ctrl: ChatCtrl?, val ntfManager: NtfManager, val a throw Exception("failed to list users ${r.responseType} ${r.details}") } - suspend fun apiSetActiveUser(userId: Long): User { - val r = sendCmd(CC.ApiSetActiveUser(userId)) + suspend fun apiSetActiveUser(userId: Long, viewPwd: String?): User { + val r = sendCmd(CC.ApiSetActiveUser(userId, viewPwd)) if (r is CR.ActiveUser) return r.user Log.d(TAG, "apiSetActiveUser: ${r.responseType} ${r.details}") throw Exception("failed to set the user as active ${r.responseType} ${r.details}") } - suspend fun apiDeleteUser(userId: Long, delSMPQueues: Boolean) { - val r = sendCmd(CC.ApiDeleteUser(userId, delSMPQueues)) + suspend fun apiHideUser(userId: Long, viewPwd: String): User = + setUserPrivacy(CC.ApiHideUser(userId, viewPwd)) + + suspend fun apiUnhideUser(userId: Long, viewPwd: String?): User = + setUserPrivacy(CC.ApiUnhideUser(userId, viewPwd)) + + suspend fun apiMuteUser(userId: Long, viewPwd: String?): User = + setUserPrivacy(CC.ApiMuteUser(userId, viewPwd)) + + suspend fun apiUnmuteUser(userId: Long, viewPwd: String?): User = + setUserPrivacy(CC.ApiUnmuteUser(userId, viewPwd)) + + private suspend fun setUserPrivacy(cmd: CC): User { + val r = sendCmd(cmd) + if (r is CR.UserPrivacy) return r.user + else throw Exception("Failed to change user privacy: ${r.responseType} ${r.details}") + } + + suspend fun apiDeleteUser(userId: Long, delSMPQueues: Boolean, viewPwd: String?) { + val r = sendCmd(CC.ApiDeleteUser(userId, delSMPQueues, viewPwd)) if (r is CR.CmdOk) return Log.d(TAG, "apiDeleteUser: ${r.responseType} ${r.details}") throw Exception("failed to delete the user ${r.responseType} ${r.details}") @@ -472,10 +505,7 @@ open class ChatController(var ctrl: ChatCtrl?, val ntfManager: NtfManager, val a } suspend fun apiGetChats(): List { - val userId = chatModel.currentUser.value?.userId ?: run { - Log.e(TAG, "apiGetChats: no current user") - return emptyList() - } + val userId = kotlin.runCatching { currentUserId("apiGetChats") }.getOrElse { return emptyList() } val r = sendCmd(CC.ApiGetChats(userId)) if (r is CR.ApiChats) return r.chats Log.e(TAG, "failed getting the list of chats: ${r.responseType} ${r.details}") @@ -527,10 +557,7 @@ open class ChatController(var ctrl: ChatCtrl?, val ntfManager: NtfManager, val a } private suspend fun getUserSMPServers(): Pair, List>? { - val userId = chatModel.currentUser.value?.userId ?: run { - Log.e(TAG, "getUserSMPServers: no current user") - return null - } + val userId = kotlin.runCatching { currentUserId("getUserSMPServers") }.getOrElse { return null } val r = sendCmd(CC.APIGetUserSMPServers(userId)) if (r is CR.UserSMPServers) return r.smpServers to r.presetSMPServers Log.e(TAG, "getUserSMPServers bad response: ${r.responseType} ${r.details}") @@ -538,10 +565,7 @@ open class ChatController(var ctrl: ChatCtrl?, val ntfManager: NtfManager, val a } suspend fun setUserSMPServers(smpServers: List): Boolean { - val userId = chatModel.currentUser.value?.userId ?: run { - Log.e(TAG, "setUserSMPServers: no current user") - return false - } + val userId = kotlin.runCatching { currentUserId("setUserSMPServers") }.getOrElse { return false } val r = sendCmd(CC.APISetUserSMPServers(userId, smpServers)) return when (r) { is CR.CmdOk -> true @@ -557,7 +581,7 @@ open class ChatController(var ctrl: ChatCtrl?, val ntfManager: NtfManager, val a } suspend fun testSMPServer(smpServer: String): SMPTestFailure? { - val userId = chatModel.currentUser.value?.userId ?: run { throw Exception("testSMPServer: no current user") } + val userId = currentUserId("testSMPServer") val r = sendCmd(CC.APITestSMPServer(userId, smpServer)) return when (r) { is CR.SmpTestResult -> r.smpTestFailure @@ -569,14 +593,14 @@ open class ChatController(var ctrl: ChatCtrl?, val ntfManager: NtfManager, val a } suspend fun getChatItemTTL(): ChatItemTTL { - val userId = chatModel.currentUser.value?.userId ?: run { throw Exception("getChatItemTTL: no current user") } + val userId = currentUserId("getChatItemTTL") val r = sendCmd(CC.APIGetChatItemTTL(userId)) if (r is CR.ChatItemTTL) return ChatItemTTL.fromSeconds(r.chatItemTTL) throw Exception("failed to get chat item TTL: ${r.responseType} ${r.details}") } suspend fun setChatItemTTL(chatItemTTL: ChatItemTTL) { - val userId = chatModel.currentUser.value?.userId ?: run { throw Exception("setChatItemTTL: no current user") } + val userId = currentUserId("setChatItemTTL") val r = sendCmd(CC.APISetChatItemTTL(userId, chatItemTTL.seconds)) if (r is CR.CmdOk) return throw Exception("failed to set chat item TTL: ${r.responseType} ${r.details}") @@ -760,10 +784,7 @@ open class ChatController(var ctrl: ChatCtrl?, val ntfManager: NtfManager, val a } suspend fun apiListContacts(): List? { - val userId = chatModel.currentUser.value?.userId ?: run { - Log.e(TAG, "apiListContacts: no current user") - return null - } + val userId = kotlin.runCatching { currentUserId("apiListContacts") }.getOrElse { return null } val r = sendCmd(CC.ApiListContacts(userId)) if (r is CR.ContactsList) return r.contacts Log.e(TAG, "apiListContacts bad response: ${r.responseType} ${r.details}") @@ -771,10 +792,7 @@ open class ChatController(var ctrl: ChatCtrl?, val ntfManager: NtfManager, val a } suspend fun apiUpdateProfile(profile: Profile): Profile? { - val userId = chatModel.currentUser.value?.userId ?: run { - Log.e(TAG, "apiUpdateProfile: no current user") - return null - } + val userId = kotlin.runCatching { currentUserId("apiUpdateProfile") }.getOrElse { return null } val r = sendCmd(CC.ApiUpdateProfile(userId, profile)) if (r is CR.UserProfileNoChange) return profile if (r is CR.UserProfileUpdated) return r.toProfile @@ -804,10 +822,7 @@ open class ChatController(var ctrl: ChatCtrl?, val ntfManager: NtfManager, val a } suspend fun apiCreateUserAddress(): String? { - val userId = chatModel.currentUser.value?.userId ?: run { - Log.e(TAG, "apiCreateUserAddress: no current user") - return null - } + val userId = kotlin.runCatching { currentUserId("apiCreateUserAddress") }.getOrElse { return null } val r = sendCmd(CC.ApiCreateMyAddress(userId)) return when (r) { is CR.UserContactLinkCreated -> r.connReqContact @@ -821,10 +836,7 @@ open class ChatController(var ctrl: ChatCtrl?, val ntfManager: NtfManager, val a } suspend fun apiDeleteUserAddress(): Boolean { - val userId = chatModel.currentUser.value?.userId ?: run { - Log.e(TAG, "apiDeleteUserAddress: no current user") - return false - } + val userId = kotlin.runCatching { currentUserId("apiDeleteUserAddress") }.getOrElse { return false } val r = sendCmd(CC.ApiDeleteMyAddress(userId)) if (r is CR.UserContactLinkDeleted) return true Log.e(TAG, "apiDeleteUserAddress bad response: ${r.responseType} ${r.details}") @@ -832,10 +844,7 @@ open class ChatController(var ctrl: ChatCtrl?, val ntfManager: NtfManager, val a } private suspend fun apiGetUserAddress(): UserContactLinkRec? { - val userId = chatModel.currentUser.value?.userId ?: run { - Log.e(TAG, "apiGetUserAddress: no current user") - return null - } + val userId = kotlin.runCatching { currentUserId("apiGetUserAddress") }.getOrElse { return null } val r = sendCmd(CC.ApiShowMyAddress(userId)) if (r is CR.UserContactLink) return r.contactLink if (r is CR.ChatCmdError && r.chatError is ChatError.ChatErrorStore @@ -847,10 +856,7 @@ open class ChatController(var ctrl: ChatCtrl?, val ntfManager: NtfManager, val a } suspend fun userAddressAutoAccept(autoAccept: AutoAccept?): UserContactLinkRec? { - val userId = chatModel.currentUser.value?.userId ?: run { - Log.e(TAG, "userAddressAutoAccept: no current user") - return null - } + val userId = kotlin.runCatching { currentUserId("userAddressAutoAccept") }.getOrElse { return null } val r = sendCmd(CC.ApiAddressAutoAccept(userId, autoAccept)) if (r is CR.UserContactLinkUpdated) return r.contactLink if (r is CR.ChatCmdError && r.chatError is ChatError.ChatErrorStore @@ -970,10 +976,7 @@ open class ChatController(var ctrl: ChatCtrl?, val ntfManager: NtfManager, val a } suspend fun apiNewGroup(p: GroupProfile): GroupInfo? { - val userId = chatModel.currentUser.value?.userId ?: run { - Log.e(TAG, "apiNewGroup: no current user") - return null - } + val userId = kotlin.runCatching { currentUserId("apiNewGroup") }.getOrElse { return null } val r = sendCmd(CC.ApiNewGroup(userId, p)) if (r is CR.GroupCreated) return r.groupInfo Log.e(TAG, "apiNewGroup bad response: ${r.responseType} ${r.details}") @@ -1206,7 +1209,11 @@ open class ChatController(var ctrl: ChatCtrl?, val ntfManager: NtfManager, val a val contactRequest = r.contactRequest val cInfo = ChatInfo.ContactRequest(contactRequest) if (active(r.user)) { - chatModel.addChat(Chat(chatInfo = cInfo, chatItems = listOf())) + if (chatModel.hasChat(contactRequest.id)) { + chatModel.updateChatInfo(cInfo) + } else { + chatModel.addChat(Chat(chatInfo = cInfo, chatItems = listOf())) + } } ntfManager.notifyContactRequestReceived(r.user, cInfo) } @@ -1292,7 +1299,7 @@ open class ChatController(var ctrl: ChatCtrl?, val ntfManager: NtfManager, val a val isLastChatItem = chatModel.getChat(cInfo.id)?.chatItems?.lastOrNull()?.id == cItem.id if (isLastChatItem && ntfManager.hasNotificationsForChat(cInfo.id)) { ntfManager.cancelNotificationsForChat(cInfo.id) - ntfManager.notifyMessageReceived( + ntfManager.displayNotification( r.user, cInfo.id, cInfo.displayName, @@ -1387,8 +1394,9 @@ open class ChatController(var ctrl: ChatCtrl?, val ntfManager: NtfManager, val a removeFile(appContext, fileName) } } - is CR.CallInvitation -> + is CR.CallInvitation -> { chatModel.callManager.reportNewIncomingCall(r.callInvitation) + } is CR.CallOffer -> { // TODO askConfirmation? // TODO check encryption is compatible @@ -1754,8 +1762,12 @@ sealed class CC { class ShowActiveUser: CC() class CreateActiveUser(val profile: Profile): CC() class ListUsers: CC() - class ApiSetActiveUser(val userId: Long): CC() - class ApiDeleteUser(val userId: Long, val delSMPQueues: Boolean): CC() + class ApiSetActiveUser(val userId: Long, val viewPwd: String?): CC() + class ApiHideUser(val userId: Long, val viewPwd: String): CC() + class ApiUnhideUser(val userId: Long, val viewPwd: String?): CC() + class ApiMuteUser(val userId: Long, val viewPwd: String?): CC() + class ApiUnmuteUser(val userId: Long, val viewPwd: String?): CC() + class ApiDeleteUser(val userId: Long, val delSMPQueues: Boolean, val viewPwd: String?): CC() class StartChat(val expire: Boolean): CC() class ApiStopChat: CC() class SetFilesFolder(val filesFolder: String): CC() @@ -1831,8 +1843,12 @@ sealed class CC { is ShowActiveUser -> "/u" is CreateActiveUser -> "/create user ${profile.displayName} ${profile.fullName}" is ListUsers -> "/users" - is ApiSetActiveUser -> "/_user $userId" - is ApiDeleteUser -> "/_delete user $userId del_smp=${onOff(delSMPQueues)}" + is ApiSetActiveUser -> "/_user $userId${maybePwd(viewPwd)}" + is ApiHideUser -> "/_hide user $userId ${json.encodeToString(viewPwd)}" + is ApiUnhideUser -> "/_unhide user $userId${maybePwd(viewPwd)}" + is ApiMuteUser -> "/_mute user $userId${maybePwd(viewPwd)}" + is ApiUnmuteUser -> "/_unmute user $userId${maybePwd(viewPwd)}" + is ApiDeleteUser -> "/_delete user $userId del_smp=${onOff(delSMPQueues)}${maybePwd(viewPwd)}" is StartChat -> "/_start subscribe=on expire=${onOff(expire)}" is ApiStopChat -> "/_stop" is SetFilesFolder -> "/_files_folder $filesFolder" @@ -1910,6 +1926,10 @@ sealed class CC { is CreateActiveUser -> "createActiveUser" is ListUsers -> "listUsers" is ApiSetActiveUser -> "apiSetActiveUser" + is ApiHideUser -> "apiHideUser" + is ApiUnhideUser -> "apiUnhideUser" + is ApiMuteUser -> "apiMuteUser" + is ApiUnmuteUser -> "apiUnmuteUser" is ApiDeleteUser -> "apiDeleteUser" is StartChat -> "startChat" is ApiStopChat -> "apiStopChat" @@ -1992,13 +2012,28 @@ sealed class CC { val obfuscated: CC get() = when (this) { is ApiStorageEncryption -> ApiStorageEncryption(DBEncryptionConfig(obfuscate(config.currentKey), obfuscate(config.newKey))) + is ApiSetActiveUser -> ApiSetActiveUser(userId, obfuscateOrNull(viewPwd)) + is ApiHideUser -> ApiHideUser(userId, obfuscate(viewPwd)) + is ApiUnhideUser -> ApiUnhideUser(userId, obfuscateOrNull(viewPwd)) + is ApiMuteUser -> ApiMuteUser(userId, obfuscateOrNull(viewPwd)) + is ApiUnmuteUser -> ApiUnmuteUser(userId, obfuscateOrNull(viewPwd)) + is ApiDeleteUser -> ApiDeleteUser(userId, delSMPQueues, obfuscateOrNull(viewPwd)) else -> this } private fun obfuscate(s: String): String = if (s.isEmpty()) "" else "***" + private fun obfuscateOrNull(s: String?): String? = + if (s != null) { + obfuscate(s) + } else { + null + } + private fun onOff(b: Boolean): String = if (b) "on" else "off" + private fun maybePwd(pwd: String?): String = if (pwd == "" || pwd == null) "" else " " + json.encodeToString(pwd) + companion object { fun chatRef(chatType: ChatType, id: Long) = "${chatType.type}${id}" @@ -2851,6 +2886,13 @@ class APIResponse(val resp: CR, val corr: String? = null) { resp = CR.ApiChat(user, chat), corr = data["corr"]?.toString() ) + } else if (type == "chatCmdError") { + val userObject = resp["user_"]?.jsonObject + val user = runCatching { json.decodeFromJsonElement(userObject!!) }.getOrNull() + return APIResponse( + resp = CR.ChatCmdError(user, ChatError.ChatErrorInvalidJSON(json.encodeToString(resp["chatCmdError"]))), + corr = data["corr"]?.toString() + ) } } catch (e: Exception) { Log.e(TAG, "Error while parsing chat(s): " + e.stackTraceToString()) @@ -2907,6 +2949,7 @@ sealed class CR { @Serializable @SerialName("chatCleared") class ChatCleared(val user: User, val chatInfo: ChatInfo): CR() @Serializable @SerialName("userProfileNoChange") class UserProfileNoChange(val user: User): CR() @Serializable @SerialName("userProfileUpdated") class UserProfileUpdated(val user: User, val fromProfile: Profile, val toProfile: Profile): CR() + @Serializable @SerialName("userPrivacy") class UserPrivacy(val user: User): CR() @Serializable @SerialName("contactAliasUpdated") class ContactAliasUpdated(val user: User, val toContact: Contact): CR() @Serializable @SerialName("connectionAliasUpdated") class ConnectionAliasUpdated(val user: User, val toConnection: PendingContactConnection): CR() @Serializable @SerialName("contactPrefsUpdated") class ContactPrefsUpdated(val user: User, val fromContact: Contact, val toContact: Contact): CR() @@ -2980,8 +3023,8 @@ sealed class CR { @Serializable @SerialName("versionInfo") class VersionInfo(val versionInfo: CoreVersionInfo): CR() @Serializable @SerialName("apiParsedMarkdown") class ParsedMarkdown(val formattedText: List? = null): CR() @Serializable @SerialName("cmdOk") class CmdOk(val user: User?): CR() - @Serializable @SerialName("chatCmdError") class ChatCmdError(val user: User?, val chatError: ChatError): CR() - @Serializable @SerialName("chatError") class ChatRespError(val user: User?, val chatError: ChatError): CR() + @Serializable @SerialName("chatCmdError") class ChatCmdError(val user_: User?, val chatError: ChatError): CR() + @Serializable @SerialName("chatError") class ChatRespError(val user_: User?, val chatError: ChatError): CR() @Serializable class Response(val type: String, val json: String): CR() @Serializable class Invalid(val str: String): CR() @@ -3010,6 +3053,7 @@ sealed class CR { is ChatCleared -> "chatCleared" is UserProfileNoChange -> "userProfileNoChange" is UserProfileUpdated -> "userProfileUpdated" + is UserPrivacy -> "userPrivacy" is ContactAliasUpdated -> "contactAliasUpdated" is ConnectionAliasUpdated -> "connectionAliasUpdated" is ContactPrefsUpdated -> "contactPrefsUpdated" @@ -3111,6 +3155,7 @@ sealed class CR { is ChatCleared -> withUser(user, json.encodeToString(chatInfo)) is UserProfileNoChange -> withUser(user, noDetails()) is UserProfileUpdated -> withUser(user, json.encodeToString(toProfile)) + is UserPrivacy -> withUser(user, "") is ContactAliasUpdated -> withUser(user, json.encodeToString(toContact)) is ConnectionAliasUpdated -> withUser(user, json.encodeToString(toConnection)) is ContactPrefsUpdated -> withUser(user, "fromContact: $fromContact\ntoContact: \n${json.encodeToString(toContact)}") @@ -3181,8 +3226,8 @@ sealed class CR { is ContactConnectionDeleted -> withUser(user, json.encodeToString(connection)) is VersionInfo -> json.encodeToString(versionInfo) is CmdOk -> withUser(user, noDetails()) - is ChatCmdError -> withUser(user, chatError.string) - is ChatRespError -> withUser(user, chatError.string) + is ChatCmdError -> withUser(user_, chatError.string) + is ChatRespError -> withUser(user_, chatError.string) is Response -> json is Invalid -> str } @@ -3254,11 +3299,13 @@ sealed class ChatError { is ChatErrorAgent -> "agent ${agentError.string}" is ChatErrorStore -> "store ${storeError.string}" is ChatErrorDatabase -> "database ${databaseError.string}" + is ChatErrorInvalidJSON -> "invalid json ${json}" } @Serializable @SerialName("error") class ChatErrorChat(val errorType: ChatErrorType): ChatError() @Serializable @SerialName("errorAgent") class ChatErrorAgent(val agentError: AgentErrorType): ChatError() @Serializable @SerialName("errorStore") class ChatErrorStore(val storeError: StoreError): ChatError() @Serializable @SerialName("errorDatabase") class ChatErrorDatabase(val databaseError: DatabaseError): ChatError() + @Serializable @SerialName("invalidJSON") class ChatErrorInvalidJSON(val json: String): ChatError() } @Serializable diff --git a/apps/android/app/src/main/java/chat/simplex/app/views/call/CallManager.kt b/apps/android/app/src/main/java/chat/simplex/app/views/call/CallManager.kt index d5d4406460..2a4b397840 100644 --- a/apps/android/app/src/main/java/chat/simplex/app/views/call/CallManager.kt +++ b/apps/android/app/src/main/java/chat/simplex/app/views/call/CallManager.kt @@ -13,12 +13,14 @@ class CallManager(val chatModel: ChatModel) { Log.d(TAG, "CallManager.reportNewIncomingCall") with (chatModel) { callInvitations[invitation.contact.id] = invitation - if (Clock.System.now() - invitation.callTs <= 3.minutes) { - activeCallInvitation.value = invitation - controller.ntfManager.notifyCallInvitation(invitation) - } else { - val contact = invitation.contact - controller.ntfManager.notifyMessageReceived(user = invitation.user, chatId = contact.id, displayName = contact.displayName, msgText = invitation.callTypeText) + if (invitation.user.showNotifications) { + if (Clock.System.now() - invitation.callTs <= 3.minutes) { + activeCallInvitation.value = invitation + controller.ntfManager.notifyCallInvitation(invitation) + } else { + val contact = invitation.contact + controller.ntfManager.displayNotification(user = invitation.user, chatId = contact.id, displayName = contact.displayName, msgText = invitation.callTypeText) + } } } } diff --git a/apps/android/app/src/main/java/chat/simplex/app/views/chatlist/ChatListView.kt b/apps/android/app/src/main/java/chat/simplex/app/views/chatlist/ChatListView.kt index 8f3d7e6851..f8501afbe7 100644 --- a/apps/android/app/src/main/java/chat/simplex/app/views/chatlist/ChatListView.kt +++ b/apps/android/app/src/main/java/chat/simplex/app/views/chatlist/ChatListView.kt @@ -210,7 +210,7 @@ private fun ChatListToolbar(chatModel: ChatModel, drawerState: DrawerState, user } else { val users by remember { derivedStateOf { chatModel.users.toList() } } val allRead = users - .filter { !it.user.activeUser } + .filter { u -> !u.user.activeUser && !u.user.hidden } .all { u -> u.unreadCount == 0 } UserProfileButton(chatModel.currentUser.value?.profile?.image, allRead) { if (users.size == 1) { diff --git a/apps/android/app/src/main/java/chat/simplex/app/views/chatlist/UserPicker.kt b/apps/android/app/src/main/java/chat/simplex/app/views/chatlist/UserPicker.kt index 9b10062d36..b7d3185e3b 100644 --- a/apps/android/app/src/main/java/chat/simplex/app/views/chatlist/UserPicker.kt +++ b/apps/android/app/src/main/java/chat/simplex/app/views/chatlist/UserPicker.kt @@ -9,11 +9,12 @@ import androidx.compose.foundation.layout.* import androidx.compose.foundation.shape.CircleShape import androidx.compose.material.* import androidx.compose.material.icons.Icons -import androidx.compose.material.icons.filled.Done -import androidx.compose.material.icons.outlined.Settings +import androidx.compose.material.icons.filled.* +import androidx.compose.material.icons.outlined.* import androidx.compose.runtime.* import androidx.compose.ui.* import androidx.compose.ui.draw.shadow +import androidx.compose.ui.graphics.Color import androidx.compose.ui.graphics.graphicsLayer import androidx.compose.ui.platform.LocalConfiguration import androidx.compose.ui.platform.LocalDensity @@ -36,7 +37,13 @@ import kotlin.math.roundToInt fun UserPicker(chatModel: ChatModel, userPickerState: MutableStateFlow, switchingUsers: MutableState, openSettings: () -> Unit) { val scope = rememberCoroutineScope() var newChat by remember { mutableStateOf(userPickerState.value) } - val users by remember { derivedStateOf { chatModel.users.sortedByDescending { it.user.activeUser } } } + val users by remember { + derivedStateOf { + chatModel.users + .filter { u -> u.user.activeUser || !u.user.hidden } + .sortedByDescending { it.user.activeUser } + } + } val animatedFloat = remember { Animatable(if (newChat.isVisible()) 0f else 1f) } LaunchedEffect(Unit) { launch { @@ -104,13 +111,12 @@ fun UserPicker(chatModel: ChatModel, userPickerState: MutableStateFlow Unit horizontalArrangement = Arrangement.SpaceBetween, verticalAlignment = Alignment.CenterVertically ) { - Row( - Modifier - .widthIn(max = LocalConfiguration.current.screenWidthDp.dp * 0.7f) - .padding(vertical = 8.dp), - verticalAlignment = Alignment.CenterVertically - ) { - ProfileImage( - image = u.image, - size = 54.dp - ) - Text( - u.displayName, - modifier = Modifier - .padding(start = 8.dp, end = 8.dp), - fontWeight = if (u.activeUser) FontWeight.Medium else FontWeight.Normal - ) - } + UserProfileRow(u) if (u.activeUser) { - Icon(Icons.Filled.Done, null, Modifier.size(20.dp), tint = MaterialTheme.colors.onBackground) + Icon(Icons.Filled.Done, null, Modifier.size(20.dp), tint = MaterialTheme.colors.onBackground) + } else if (u.hidden) { + Icon(Icons.Outlined.Lock, null, Modifier.size(20.dp), tint = HighOrLowlight) } else if (unreadCount > 0) { Row { Text( unreadCountStr(unreadCount), - color = MaterialTheme.colors.onPrimary, + color = Color.White, fontSize = 11.sp, modifier = Modifier - .background(MaterialTheme.colors.primary, shape = CircleShape) + .background(if (u.showNtfs) MaterialTheme.colors.primary else HighOrLowlight, shape = CircleShape) .sizeIn(minWidth = 20.dp, minHeight = 20.dp) .padding(horizontal = 3.dp) .padding(vertical = 1.dp), @@ -179,12 +171,35 @@ fun UserProfilePickerItem(u: User, unreadCount: Int = 0, onLongClick: () -> Unit ) Spacer(Modifier.width(2.dp)) } - } else { + } else if (!u.showNtfs) { + Icon(Icons.Outlined.NotificationsOff, null, Modifier.size(20.dp), tint = HighOrLowlight) + } else { Box(Modifier.size(20.dp)) } } } +@Composable +fun UserProfileRow(u: User) { + Row( + Modifier + .widthIn(max = LocalConfiguration.current.screenWidthDp.dp * 0.7f) + .padding(vertical = 8.dp), + verticalAlignment = Alignment.CenterVertically + ) { + ProfileImage( + image = u.image, + size = 54.dp + ) + Text( + u.displayName, + modifier = Modifier + .padding(start = 8.dp, end = 8.dp), + fontWeight = if (u.activeUser) FontWeight.Medium else FontWeight.Normal + ) + } +} + @Composable private fun SettingsPickerItem(onClick: () -> Unit) { SectionItemViewSpaceBetween(onClick, minHeight = 68.dp) { diff --git a/apps/android/app/src/main/java/chat/simplex/app/views/database/DatabaseEncryptionView.kt b/apps/android/app/src/main/java/chat/simplex/app/views/database/DatabaseEncryptionView.kt index fa511e0b81..634028ce4c 100644 --- a/apps/android/app/src/main/java/chat/simplex/app/views/database/DatabaseEncryptionView.kt +++ b/apps/android/app/src/main/java/chat/simplex/app/views/database/DatabaseEncryptionView.kt @@ -1,5 +1,6 @@ package chat.simplex.app.views.database +import SectionDivider import SectionItemView import SectionItemViewSpaceBetween import SectionTextFooter @@ -25,13 +26,13 @@ import androidx.compose.ui.text.* import androidx.compose.ui.text.font.FontWeight import androidx.compose.ui.text.input.* import androidx.compose.ui.tooling.preview.Preview -import androidx.compose.ui.unit.dp -import androidx.compose.ui.unit.sp +import androidx.compose.ui.unit.* import chat.simplex.app.R import chat.simplex.app.SimplexApp import chat.simplex.app.model.* import chat.simplex.app.ui.theme.* import chat.simplex.app.views.helpers.* +import kotlinx.coroutines.flow.distinctUntilChanged import kotlinx.datetime.Clock import kotlin.math.log2 @@ -161,7 +162,9 @@ fun DatabaseEncryptionLayout( } if (!initialRandomDBPassphrase.value && chatDbEncrypted == true) { - DatabaseKeyField( + SectionDivider() + + PassphraseField( currentKey, generalGetString(R.string.current_passphrase), modifier = Modifier.padding(horizontal = DEFAULT_PADDING), @@ -170,7 +173,9 @@ fun DatabaseEncryptionLayout( ) } - DatabaseKeyField( + SectionDivider() + + PassphraseField( newKey, generalGetString(R.string.new_passphrase), modifier = Modifier.padding(horizontal = DEFAULT_PADDING), @@ -201,7 +206,9 @@ fun DatabaseEncryptionLayout( !validKey(newKey.value) || progressIndicator.value - DatabaseKeyField( + SectionDivider() + + PassphraseField( confirmNewKey, generalGetString(R.string.confirm_new_passphrase), modifier = Modifier.padding(horizontal = DEFAULT_PADDING), @@ -212,7 +219,9 @@ fun DatabaseEncryptionLayout( }), ) - SectionItemViewSpaceBetween(onClickUpdate, disabled = disabled) { + SectionDivider() + + SectionItemViewSpaceBetween(onClickUpdate, disabled = disabled, minHeight = TextFieldDefaults.MinHeight) { Text(generalGetString(R.string.update_database_passphrase), color = if (disabled) HighOrLowlight else MaterialTheme.colors.primary) } } @@ -285,9 +294,10 @@ fun SavePassphraseSetting( initialRandomDBPassphrase: Boolean, storedKey: Boolean, progressIndicator: Boolean, + minHeight: Dp = TextFieldDefaults.MinHeight, onCheckedChange: (Boolean) -> Unit, ) { - SectionItemView { + SectionItemView(minHeight = minHeight) { Row(verticalAlignment = Alignment.CenterVertically) { Icon( if (storedKey) Icons.Filled.VpnKey else Icons.Filled.VpnKeyOff, @@ -349,13 +359,14 @@ private fun operationEnded(m: ChatModel, progressIndicator: MutableState, placeholder: String, modifier: Modifier = Modifier, showStrength: Boolean = false, isValid: (String) -> Boolean, keyboardActions: KeyboardActions = KeyboardActions(), + dependsOn: MutableState? = null, ) { var valid by remember { mutableStateOf(validKey(key.value)) } var showKey by remember { mutableStateOf(false) } @@ -436,6 +447,13 @@ fun DatabaseKeyField( ) } ) + LaunchedEffect(Unit) { + snapshotFlow { dependsOn?.value } + .distinctUntilChanged() + .collect { + valid = isValid(state.value.text) + } + } } // based on https://generatepasswords.org/how-to-calculate-entropy/ diff --git a/apps/android/app/src/main/java/chat/simplex/app/views/database/DatabaseErrorView.kt b/apps/android/app/src/main/java/chat/simplex/app/views/database/DatabaseErrorView.kt index 1dc25440ac..9f69ca2799 100644 --- a/apps/android/app/src/main/java/chat/simplex/app/views/database/DatabaseErrorView.kt +++ b/apps/android/app/src/main/java/chat/simplex/app/views/database/DatabaseErrorView.kt @@ -206,7 +206,7 @@ private fun restoreDb(restoreDbFromBackup: MutableState, prefs: AppPref @Composable private fun DatabaseKeyField(text: MutableState, enabled: Boolean, onClick: (() -> Unit)? = null) { - DatabaseKeyField( + PassphraseField( text, generalGetString(R.string.enter_passphrase), isValid = ::validKey, diff --git a/apps/android/app/src/main/java/chat/simplex/app/views/helpers/CloseSheetBar.kt b/apps/android/app/src/main/java/chat/simplex/app/views/helpers/CloseSheetBar.kt index 0d0d6675b3..6a7ab82771 100644 --- a/apps/android/app/src/main/java/chat/simplex/app/views/helpers/CloseSheetBar.kt +++ b/apps/android/app/src/main/java/chat/simplex/app/views/helpers/CloseSheetBar.kt @@ -4,6 +4,7 @@ import android.content.res.Configuration import androidx.compose.foundation.layout.* import androidx.compose.material.* import androidx.compose.runtime.Composable +import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.text.style.TextOverflow import androidx.compose.ui.tooling.preview.Preview @@ -22,7 +23,11 @@ fun CloseSheetBar(close: () -> Unit, endButtons: @Composable RowScope.() -> Unit Modifier .padding(top = 4.dp), // Like in DefaultAppBar content = { - Row(Modifier.fillMaxWidth(), horizontalArrangement = Arrangement.SpaceBetween) { + Row( + Modifier.fillMaxWidth().height(TextFieldDefaults.MinHeight), + horizontalArrangement = Arrangement.SpaceBetween, + verticalAlignment = Alignment.CenterVertically + ) { NavigationButtonBack(close) Row { endButtons() diff --git a/apps/android/app/src/main/java/chat/simplex/app/views/usersettings/HiddenProfileView.kt b/apps/android/app/src/main/java/chat/simplex/app/views/usersettings/HiddenProfileView.kt new file mode 100644 index 0000000000..b9fa39b11d --- /dev/null +++ b/apps/android/app/src/main/java/chat/simplex/app/views/usersettings/HiddenProfileView.kt @@ -0,0 +1,89 @@ +package chat.simplex.app.views.usersettings + +import SectionDivider +import SectionItemView +import SectionItemViewSpaceBetween +import SectionSpacer +import SectionTextFooter +import SectionView +import androidx.compose.foundation.layout.* +import androidx.compose.foundation.rememberScrollState +import androidx.compose.foundation.verticalScroll +import androidx.compose.material.* +import androidx.compose.runtime.* +import androidx.compose.runtime.saveable.rememberSaveable +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.platform.LocalConfiguration +import androidx.compose.ui.res.stringResource +import androidx.compose.ui.unit.dp +import chat.simplex.app.R +import chat.simplex.app.model.ChatModel +import chat.simplex.app.model.User +import chat.simplex.app.ui.theme.* +import chat.simplex.app.views.chatlist.UserProfileRow +import chat.simplex.app.views.database.PassphraseField +import chat.simplex.app.views.helpers.* + +@Composable +fun HiddenProfileView( + m: ChatModel, + user: User, + close: () -> Unit, +) { + HiddenProfileLayout( + user, + saveProfilePassword = { hidePassword -> + withBGApi { + try { + val u = m.controller.apiHideUser(user.userId, hidePassword) + m.updateUser(u) + close() + } catch (e: Exception) { + AlertManager.shared.showAlertMsg( + title = generalGetString(R.string.error_saving_user_password), + text = e.stackTraceToString() + ) + } + } + } + ) +} + +@Composable +private fun HiddenProfileLayout( + user: User, + saveProfilePassword: (String) -> Unit +) { + Column( + Modifier + .fillMaxWidth() + .verticalScroll(rememberScrollState()) + .padding(bottom = DEFAULT_BOTTOM_PADDING), + ) { + AppBarTitle(stringResource(R.string.hide_profile)) + SectionView(padding = PaddingValues(start = 8.dp, end = DEFAULT_PADDING)) { + UserProfileRow(user) + } + SectionSpacer() + + val hidePassword = rememberSaveable { mutableStateOf("") } + val confirmHidePassword = rememberSaveable { mutableStateOf("") } + val confirmValid by remember { derivedStateOf { confirmHidePassword.value == "" || hidePassword.value == confirmHidePassword.value } } + val saveDisabled by remember { derivedStateOf { hidePassword.value == "" || confirmHidePassword.value == "" || !confirmValid } } + SectionView(stringResource(R.string.hidden_profile_password).uppercase()) { + SectionItemView { + PassphraseField(hidePassword, generalGetString(R.string.password_to_show), isValid = { true }, showStrength = true) + } + SectionDivider() + SectionItemView { + PassphraseField(confirmHidePassword, stringResource(R.string.confirm_password), isValid = { confirmValid }, dependsOn = hidePassword) + } + SectionDivider() + SectionItemViewSpaceBetween({ saveProfilePassword(hidePassword.value) }, disabled = saveDisabled, minHeight = TextFieldDefaults.MinHeight) { + Text(generalGetString(R.string.save_profile_password), color = if (saveDisabled) HighOrLowlight else MaterialTheme.colors.primary) + } + } + SectionTextFooter(stringResource(R.string.to_reveal_profile_enter_password)) + } +} \ No newline at end of file diff --git a/apps/android/app/src/main/java/chat/simplex/app/views/usersettings/SettingsView.kt b/apps/android/app/src/main/java/chat/simplex/app/views/usersettings/SettingsView.kt index c586aaf360..8e800ffb34 100644 --- a/apps/android/app/src/main/java/chat/simplex/app/views/usersettings/SettingsView.kt +++ b/apps/android/app/src/main/java/chat/simplex/app/views/usersettings/SettingsView.kt @@ -6,6 +6,7 @@ import SectionSpacer import SectionView import android.content.Context import android.content.res.Configuration +import androidx.activity.compose.BackHandler import androidx.compose.foundation.* import androidx.compose.foundation.layout.* import androidx.compose.material.* @@ -13,6 +14,7 @@ import androidx.compose.material.icons.Icons import androidx.compose.material.icons.filled.* import androidx.compose.material.icons.outlined.* import androidx.compose.runtime.* +import androidx.compose.runtime.saveable.rememberSaveable import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.Color @@ -20,7 +22,9 @@ import androidx.compose.ui.graphics.vector.ImageVector import androidx.compose.ui.platform.* import androidx.compose.ui.res.painterResource import androidx.compose.ui.res.stringResource +import androidx.compose.ui.text.capitalize import androidx.compose.ui.text.font.FontWeight +import androidx.compose.ui.text.intl.Locale import androidx.compose.ui.text.style.TextOverflow import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.unit.* @@ -58,6 +62,26 @@ fun SettingsView(chatModel: ChatModel, setPerformLA: (Boolean) -> Unit) { setPerformLA = setPerformLA, showModal = { modalView -> { ModalManager.shared.showModal { modalView(chatModel) } } }, showSettingsModal = { modalView -> { ModalManager.shared.showModal(true) { modalView(chatModel) } } }, + showSettingsModalWithSearch = { modalView -> + ModalManager.shared.showCustomModal { close -> + val search = mutableStateOf("") + var showSearch by remember { mutableStateOf(false) } + ModalView( + { if (showSearch) { showSearch = false } else close() }, + if (isInDarkTheme()) MaterialTheme.colors.background else SettingsBackgroundLight, + endButtons = { + if (!showSearch) { + IconButton({ showSearch = true }) { + Icon(Icons.Outlined.Search, stringResource(android.R.string.search_go).capitalize(Locale.current), tint = MaterialTheme.colors.primary) + } + } else { + BackHandler { showSearch = false } + SearchTextField(Modifier.fillMaxWidth(), stringResource(android.R.string.search_go)) { search.value = it } + } + }, + content = { modalView(chatModel, search) }) + } + }, showCustomModal = { modalView -> { ModalManager.shared.showCustomModal { close -> modalView(chatModel, close) } } }, showVersion = { withApi { @@ -115,6 +139,7 @@ fun SettingsLayout( setPerformLA: (Boolean) -> Unit, showModal: (@Composable (ChatModel) -> Unit) -> (() -> Unit), showSettingsModal: (@Composable (ChatModel) -> Unit) -> (() -> Unit), + showSettingsModalWithSearch: (@Composable (ChatModel, MutableState) -> Unit) -> Unit, showCustomModal: (@Composable (ChatModel, () -> Unit) -> Unit) -> (() -> Unit), showVersion: () -> Unit, withAuth: (block: () -> Unit) -> Unit @@ -141,7 +166,8 @@ fun SettingsLayout( ProfilePreview(profile, stopped = stopped) } SectionDivider() - SettingsActionItem(Icons.Outlined.ManageAccounts, stringResource(R.string.your_chat_profiles), { withAuth { showSettingsModal { UserProfilesView(it) }() } }, disabled = stopped) + val profileHidden = rememberSaveable { mutableStateOf(false) } + SettingsActionItem(Icons.Outlined.ManageAccounts, stringResource(R.string.your_chat_profiles), { withAuth { showSettingsModalWithSearch { it, search -> UserProfilesView(it, search, profileHidden) } } }, disabled = stopped) SectionDivider() SettingsIncognitoActionItem(incognitoPref, incognito, stopped) { showModal { IncognitoView() }() } SectionDivider() @@ -531,6 +557,7 @@ fun PreviewSettingsLayout() { setPerformLA = {}, showModal = { {} }, showSettingsModal = { {} }, + showSettingsModalWithSearch = { }, showCustomModal = { {} }, showVersion = {}, withAuth = {}, diff --git a/apps/android/app/src/main/java/chat/simplex/app/views/usersettings/UserProfilesView.kt b/apps/android/app/src/main/java/chat/simplex/app/views/usersettings/UserProfilesView.kt index 525e521230..e6db50de41 100644 --- a/apps/android/app/src/main/java/chat/simplex/app/views/usersettings/UserProfilesView.kt +++ b/apps/android/app/src/main/java/chat/simplex/app/views/usersettings/UserProfilesView.kt @@ -2,6 +2,7 @@ package chat.simplex.app.views.usersettings import SectionDivider import SectionItemView +import SectionSpacer import SectionTextFooter import SectionView import androidx.compose.foundation.* @@ -10,6 +11,7 @@ import androidx.compose.material.* import androidx.compose.material.icons.Icons import androidx.compose.material.icons.outlined.* import androidx.compose.runtime.* +import androidx.compose.runtime.saveable.rememberSaveable import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.Color import androidx.compose.ui.res.stringResource @@ -17,18 +19,28 @@ import androidx.compose.ui.text.* import androidx.compose.ui.text.font.FontWeight import androidx.compose.ui.unit.dp import chat.simplex.app.R +import chat.simplex.app.chatPasswordHash import chat.simplex.app.model.* import chat.simplex.app.ui.theme.* import chat.simplex.app.views.chat.item.ItemAction import chat.simplex.app.views.chatlist.UserProfilePickerItem import chat.simplex.app.views.helpers.* import chat.simplex.app.views.onboarding.CreateProfile +import kotlinx.coroutines.delay +import kotlinx.coroutines.launch @Composable -fun UserProfilesView(m: ChatModel) { +fun UserProfilesView(m: ChatModel, search: MutableState, profileHidden: MutableState) { + val searchTextOrPassword = rememberSaveable { search } val users by remember { derivedStateOf { m.users.map { it.user } } } + val filteredUsers by remember { derivedStateOf { filteredUsers(m, searchTextOrPassword.value) } } UserProfilesView( users = users, + filteredUsers = filteredUsers, + profileHidden = profileHidden, + searchTextOrPassword = searchTextOrPassword, + showHiddenProfilesNotice = m.controller.appPrefs.showHiddenProfilesNotice, + visibleUsersCount = visibleUsersCount(m), addUser = { ModalManager.shared.showModalCloseable { close -> CreateProfile(m, close) @@ -36,38 +48,72 @@ fun UserProfilesView(m: ChatModel) { }, activateUser = { user -> withBGApi { - m.controller.changeActiveUser(user.userId) + m.controller.changeActiveUser(user.userId, userViewPassword(user, searchTextOrPassword.value)) } }, removeUser = { user -> - val text = buildAnnotatedString { - append(generalGetString(R.string.users_delete_all_chats_deleted) + "\n\n" + generalGetString(R.string.users_delete_profile_for) + " ") - withStyle(SpanStyle(fontWeight = FontWeight.Bold)) { - append(user.displayName) + if (m.users.size > 1 && (user.hidden || visibleUsersCount(m) > 1)) { + val text = buildAnnotatedString { + append(generalGetString(R.string.users_delete_all_chats_deleted) + "\n\n" + generalGetString(R.string.users_delete_profile_for) + " ") + withStyle(SpanStyle(fontWeight = FontWeight.Bold)) { + append(user.displayName) + } + append(":") } - append(":") - } - AlertManager.shared.showAlertDialogButtonsColumn( - title = generalGetString(R.string.users_delete_question), - text = text, - buttons = { - Column { - SectionItemView({ - AlertManager.shared.hideAlert() - removeUser(m, user, users, true) - }) { - Text(stringResource(R.string.users_delete_with_connections), color = Color.Red) - } - SectionItemView({ - AlertManager.shared.hideAlert() - removeUser(m, user, users, false) - } - ) { - Text(stringResource(R.string.users_delete_data_only), color = Color.Red) + AlertManager.shared.showAlertDialogButtonsColumn( + title = generalGetString(R.string.users_delete_question), + text = text, + buttons = { + Column { + SectionItemView({ + AlertManager.shared.hideAlert() + removeUser(m, user, users, true, searchTextOrPassword.value) + }) { + Text(stringResource(R.string.users_delete_with_connections), color = Color.Red) + } + SectionItemView({ + AlertManager.shared.hideAlert() + removeUser(m, user, users, false, searchTextOrPassword.value) + } + ) { + Text(stringResource(R.string.users_delete_data_only), color = Color.Red) + } } } + ) + } else { + AlertManager.shared.showAlertMsg( + title = generalGetString(R.string.cant_delete_user_profile), + text = if (m.users.size > 1) { + generalGetString(R.string.should_be_at_least_one_visible_profile) + } else { + generalGetString(R.string.should_be_at_least_one_profile) + } + ) + } + }, + unhideUser = { user -> + setUserPrivacy(m) { m.controller.apiUnhideUser(user.userId, userViewPassword(user, searchTextOrPassword.value)) } + }, + muteUser = { user -> + setUserPrivacy(m, onSuccess = { if (m.controller.appPrefs.showMuteProfileAlert.get()) showMuteProfileAlert(m.controller.appPrefs.showMuteProfileAlert) }) { + m.controller.apiMuteUser(user.userId, userViewPassword(user, searchTextOrPassword.value)) + } + }, + unmuteUser = { user -> + setUserPrivacy(m) { m.controller.apiUnmuteUser(user.userId, userViewPassword(user, searchTextOrPassword.value)) } + }, + showHiddenProfile = { user -> + ModalManager.shared.showModalCloseable(true) { close -> + HiddenProfileView(m, user) { + profileHidden.value = true + withBGApi { + delay(10_000) + profileHidden.value = false + } + close() } - ) + } } ) } @@ -75,9 +121,18 @@ fun UserProfilesView(m: ChatModel) { @Composable private fun UserProfilesView( users: List, + filteredUsers: List, + searchTextOrPassword: MutableState, + profileHidden: MutableState, + visibleUsersCount: Int, + showHiddenProfilesNotice: SharedPreference, addUser: () -> Unit, activateUser: (User) -> Unit, removeUser: (User) -> Unit, + unhideUser: (User) -> Unit, + muteUser: (User) -> Unit, + unmuteUser: (User) -> Unit, + showHiddenProfile: (User) -> Unit, ) { Column( Modifier @@ -85,25 +140,59 @@ private fun UserProfilesView( .verticalScroll(rememberScrollState()) .padding(bottom = DEFAULT_PADDING), ) { + if (profileHidden.value) { + SectionView { + SettingsActionItem(Icons.Outlined.LockOpen, stringResource(R.string.enter_password_to_show), click = { + profileHidden.value = false + } + ) + } + SectionSpacer() + } AppBarTitle(stringResource(R.string.your_chat_profiles)) SectionView { - for (user in users) { - UserView(user, users, activateUser, removeUser) + for (user in filteredUsers) { + UserView(user, users, visibleUsersCount, activateUser, removeUser, unhideUser, muteUser, unmuteUser, showHiddenProfile) SectionDivider() } - SectionItemView(addUser, minHeight = 68.dp) { - Icon(Icons.Outlined.Add, stringResource(R.string.users_add), tint = MaterialTheme.colors.primary) - Spacer(Modifier.padding(horizontal = 4.dp)) - Text(stringResource(R.string.users_add), color = MaterialTheme.colors.primary) + if (searchTextOrPassword.value.isEmpty()) { + SectionItemView(addUser, minHeight = 68.dp) { + Icon(Icons.Outlined.Add, stringResource(R.string.users_add), tint = MaterialTheme.colors.primary) + Spacer(Modifier.padding(horizontal = 4.dp)) + Text(stringResource(R.string.users_add), color = MaterialTheme.colors.primary) + } + } + } + SectionTextFooter(stringResource(R.string.tap_to_activate_profile)) + LaunchedEffect(Unit) { + if (showHiddenProfilesNotice.state.value && users.size > 1) { + AlertManager.shared.showAlertDialog( + title = generalGetString(R.string.make_profile_private), + text = generalGetString(R.string.you_can_hide_or_mute_user_profile), + confirmText = generalGetString(R.string.ok), + dismissText = generalGetString(R.string.dont_show_again), + onDismiss = { + showHiddenProfilesNotice.set(false) + }, + ) } } - SectionTextFooter(stringResource(R.string.your_chat_profiles_stored_locally)) } } @Composable -private fun UserView(user: User, users: List, activateUser: (User) -> Unit, removeUser: (User) -> Unit) { +private fun UserView( + user: User, + users: List, + visibleUsersCount: Int, + activateUser: (User) -> Unit, + removeUser: (User) -> Unit, + unhideUser: (User) -> Unit, + muteUser: (User) -> Unit, + unmuteUser: (User) -> Unit, + showHiddenProfile: (User) -> Unit, +) { var showDropdownMenu by remember { mutableStateOf(false) } UserProfilePickerItem(user, onLongClick = { if (users.size > 1) showDropdownMenu = true }) { activateUser(user) @@ -114,28 +203,103 @@ private fun UserView(user: User, users: List, activateUser: (User) -> Unit onDismissRequest = { showDropdownMenu = false }, Modifier.width(220.dp) ) { + if (user.hidden) { + ItemAction(stringResource(R.string.user_unhide), Icons.Outlined.LockOpen, onClick = { + showDropdownMenu = false + unhideUser(user) + }) + } else { + if (visibleUsersCount > 1) { + ItemAction(stringResource(R.string.user_hide), Icons.Outlined.Lock, onClick = { + showDropdownMenu = false + showHiddenProfile(user) + }) + } + if (user.showNtfs) { + ItemAction(stringResource(R.string.user_mute), Icons.Outlined.Notifications, onClick = { + showDropdownMenu = false + muteUser(user) + }) + } else { + ItemAction(stringResource(R.string.user_unmute), Icons.Outlined.NotificationsOff, onClick = { + showDropdownMenu = false + unmuteUser(user) + }) + } + } ItemAction(stringResource(R.string.delete_verb), Icons.Outlined.Delete, color = Color.Red, onClick = { removeUser(user) showDropdownMenu = false - } - ) + }) } } } -private fun removeUser(m: ChatModel, user: User, users: List, delSMPQueues: Boolean) { +private fun filteredUsers(m: ChatModel, searchTextOrPassword: String): List { + val s = searchTextOrPassword.trim() + val lower = s.lowercase() + return m.users.filter { u -> + if ((u.user.activeUser || u.user.viewPwdHash == null) && (s == "" || u.user.chatViewName.lowercase().contains(lower))) { + true + } else if (u.user.viewPwdHash != null) { + s != "" && chatPasswordHash(s, u.user.viewPwdHash.salt) == u.user.viewPwdHash.hash + } else { + false + } + }.map { it.user } +} + +private fun visibleUsersCount(m: ChatModel): Int = m.users.filter { u -> !u.user.hidden }.size + +private fun userViewPassword(user: User, searchTextOrPassword: String): String? = + if (user.activeUser || !user.hidden) null else searchTextOrPassword + +private fun removeUser(m: ChatModel, user: User, users: List, delSMPQueues: Boolean, searchTextOrPassword: String) { if (users.size < 2) return withBGApi { + suspend fun deleteUser(user: User) { + m.controller.apiDeleteUser(user.userId, delSMPQueues, userViewPassword(user, searchTextOrPassword)) + m.removeUser(user) + } try { if (user.activeUser) { - val newActive = users.first { !it.activeUser } - m.controller.changeActiveUser_(newActive.userId) + val newActive = users.firstOrNull { u -> !u.activeUser && !u.hidden } + if (newActive != null) { + m.controller.changeActiveUser_(newActive.userId, null) + deleteUser(user) + } + } else { + deleteUser(user) } - m.controller.apiDeleteUser(user.userId, delSMPQueues) - m.users.removeAll { it.user.userId == user.userId } } catch (e: Exception) { AlertManager.shared.showAlertMsg(generalGetString(R.string.error_deleting_user), e.stackTraceToString()) } } } + +private fun setUserPrivacy(m: ChatModel, onSuccess: (() -> Unit)? = null, api: suspend () -> User) { + withBGApi { + try { + m.updateUser(api()) + onSuccess?.invoke() + } catch (e: Exception) { + AlertManager.shared.showAlertMsg( + title = generalGetString(R.string.error_updating_user_privacy), + text = e.stackTraceToString() + ) + } + } +} + +private fun showMuteProfileAlert(showMuteProfileAlert: SharedPreference) { + AlertManager.shared.showAlertDialog( + title = generalGetString(R.string.muted_when_inactive), + text = generalGetString(R.string.you_will_still_receive_calls_and_ntfs), + confirmText = generalGetString(R.string.ok), + dismissText = generalGetString(R.string.dont_show_again), + onDismiss = { + showMuteProfileAlert.set(false) + }, + ) +} \ No newline at end of file diff --git a/apps/android/app/src/main/res/values/strings.xml b/apps/android/app/src/main/res/values/strings.xml index 1e0564e74c..ff0cfced06 100644 --- a/apps/android/app/src/main/res/values/strings.xml +++ b/apps/android/app/src/main/res/values/strings.xml @@ -1016,7 +1016,6 @@ Update - Your chat profiles are stored locally, only on your device Add profile Delete chat profile? All chats and messages will be deleted - this cannot be undone! @@ -1027,13 +1026,13 @@ Unhide Mute Unmute - Enter password above to show! + Enter password in search Tap to activate profile. Can\'t delete user profile! There should be at least one visible user profile. There should be at least one user profile. Make profile private! - You can hide or mute a user profile - hold it for the menu.\nSimpleX Lock must be enabled. + You can hide or mute a user profile - hold it for the menu. Don\'t show again Muted when inactive! You will still receive calls and notifications from muted profiles when they are active. From 9ad22e1f6ddb75a79ee11f887821ffbd978e6d0f Mon Sep 17 00:00:00 2001 From: Evgeny Poberezkin <2769109+epoberezkin@users.noreply.github.com> Date: Fri, 24 Mar 2023 22:50:09 +0000 Subject: [PATCH 02/19] mobile: translations (#2062) * Translated using Weblate (Russian) Currently translated at 99.8% (1007 of 1009 strings) Translation: SimpleX Chat/SimpleX Chat Android Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/ru/ * Translated using Weblate (Dutch) Currently translated at 96.8% (977 of 1009 strings) Translation: SimpleX Chat/SimpleX Chat Android Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/nl/ * Translated using Weblate (Russian) Currently translated at 100.0% (1009 of 1009 strings) Translation: SimpleX Chat/SimpleX Chat Android Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/ru/ * Translated using Weblate (Russian) Currently translated at 100.0% (939 of 939 strings) Translation: SimpleX Chat/SimpleX Chat iOS Translate-URL: https://hosted.weblate.org/projects/simplex-chat/ios/ru/ * Translated using Weblate (Dutch) Currently translated at 98.1% (990 of 1009 strings) Translation: SimpleX Chat/SimpleX Chat Android Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/nl/ * Translated using Weblate (Russian) Currently translated at 99.8% (1007 of 1009 strings) Translation: SimpleX Chat/SimpleX Chat Android Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/ru/ * Translated using Weblate (Dutch) Currently translated at 96.8% (977 of 1009 strings) Translation: SimpleX Chat/SimpleX Chat Android Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/nl/ * Translated using Weblate (Russian) Currently translated at 100.0% (1009 of 1009 strings) Translation: SimpleX Chat/SimpleX Chat Android Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/ru/ * Translated using Weblate (Russian) Currently translated at 100.0% (939 of 939 strings) Translation: SimpleX Chat/SimpleX Chat iOS Translate-URL: https://hosted.weblate.org/projects/simplex-chat/ios/ru/ * Translated using Weblate (Dutch) Currently translated at 98.1% (990 of 1009 strings) Translation: SimpleX Chat/SimpleX Chat Android Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/nl/ * Translated using Weblate (Dutch) Currently translated at 98.4% (993 of 1009 strings) Translation: SimpleX Chat/SimpleX Chat Android Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/nl/ * Translated using Weblate (Dutch) Currently translated at 99.2% (1001 of 1009 strings) Translation: SimpleX Chat/SimpleX Chat Android Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/nl/ * Translated using Weblate (French) Currently translated at 100.0% (1009 of 1009 strings) Translation: SimpleX Chat/SimpleX Chat Android Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/fr/ * Translated using Weblate (French) Currently translated at 100.0% (939 of 939 strings) Translation: SimpleX Chat/SimpleX Chat iOS Translate-URL: https://hosted.weblate.org/projects/simplex-chat/ios/fr/ * Translated using Weblate (Chinese (Simplified)) Currently translated at 98.6% (995 of 1009 strings) Translation: SimpleX Chat/SimpleX Chat Android Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/zh_Hans/ * Translated using Weblate (Chinese (Simplified)) Currently translated at 96.4% (906 of 939 strings) Translation: SimpleX Chat/SimpleX Chat iOS Translate-URL: https://hosted.weblate.org/projects/simplex-chat/ios/zh_Hans/ * Translated using Weblate (Dutch) Currently translated at 100.0% (1009 of 1009 strings) Translation: SimpleX Chat/SimpleX Chat Android Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/nl/ * Translated using Weblate (Dutch) Currently translated at 100.0% (939 of 939 strings) Translation: SimpleX Chat/SimpleX Chat iOS Translate-URL: https://hosted.weblate.org/projects/simplex-chat/ios/nl/ * Translated using Weblate (Czech) Currently translated at 99.1% (1000 of 1009 strings) Translation: SimpleX Chat/SimpleX Chat Android Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/cs/ * Translated using Weblate (Italian) Currently translated at 100.0% (1009 of 1009 strings) Translation: SimpleX Chat/SimpleX Chat Android Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/it/ * Translated using Weblate (Italian) Currently translated at 100.0% (939 of 939 strings) Translation: SimpleX Chat/SimpleX Chat iOS Translate-URL: https://hosted.weblate.org/projects/simplex-chat/ios/it/ * Translated using Weblate (Spanish) Currently translated at 96.0% (969 of 1009 strings) Translation: SimpleX Chat/SimpleX Chat Android Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/es/ * Translated using Weblate (Dutch) Currently translated at 100.0% (1009 of 1009 strings) Translation: SimpleX Chat/SimpleX Chat Android Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/nl/ * Translated using Weblate (Dutch) Currently translated at 100.0% (939 of 939 strings) Translation: SimpleX Chat/SimpleX Chat iOS Translate-URL: https://hosted.weblate.org/projects/simplex-chat/ios/nl/ * Added translation using Weblate (Finnish) * Added translation using Weblate (Finnish) * Translated using Weblate (German) Currently translated at 96.6% (975 of 1009 strings) Translation: SimpleX Chat/SimpleX Chat Android Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/de/ * Translated using Weblate (Spanish) Currently translated at 100.0% (1009 of 1009 strings) Translation: SimpleX Chat/SimpleX Chat Android Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/es/ * Translated using Weblate (Spanish) Currently translated at 100.0% (939 of 939 strings) Translation: SimpleX Chat/SimpleX Chat iOS Translate-URL: https://hosted.weblate.org/projects/simplex-chat/ios/es/ * Translated using Weblate (German) Currently translated at 100.0% (1009 of 1009 strings) Translation: SimpleX Chat/SimpleX Chat Android Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/de/ * Translated using Weblate (German) Currently translated at 100.0% (939 of 939 strings) Translation: SimpleX Chat/SimpleX Chat iOS Translate-URL: https://hosted.weblate.org/projects/simplex-chat/ios/de/ * Translated using Weblate (Lithuanian) Currently translated at 4.7% (48 of 1009 strings) Translation: SimpleX Chat/SimpleX Chat Android Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/lt/ * Translated using Weblate (Lithuanian) Currently translated at 5.6% (53 of 939 strings) Translation: SimpleX Chat/SimpleX Chat iOS Translate-URL: https://hosted.weblate.org/projects/simplex-chat/ios/lt/ * Translated using Weblate (Chinese (Simplified)) Currently translated at 100.0% (1009 of 1009 strings) Translation: SimpleX Chat/SimpleX Chat Android Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/zh_Hans/ * Translated using Weblate (Chinese (Simplified)) Currently translated at 100.0% (939 of 939 strings) Translation: SimpleX Chat/SimpleX Chat iOS Translate-URL: https://hosted.weblate.org/projects/simplex-chat/ios/zh_Hans/ * Translated using Weblate (Chinese (Traditional)) Currently translated at 100.0% (1009 of 1009 strings) Translation: SimpleX Chat/SimpleX Chat Android Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/zh_Hant/ * Translated using Weblate (Chinese (Simplified)) Currently translated at 100.0% (1009 of 1009 strings) Translation: SimpleX Chat/SimpleX Chat Android Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/zh_Hans/ * Translated using Weblate (Chinese (Simplified)) Currently translated at 100.0% (939 of 939 strings) Translation: SimpleX Chat/SimpleX Chat iOS Translate-URL: https://hosted.weblate.org/projects/simplex-chat/ios/zh_Hans/ * Translated using Weblate (Dutch) Currently translated at 100.0% (1009 of 1009 strings) Translation: SimpleX Chat/SimpleX Chat Android Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/nl/ * Translated using Weblate (Dutch) Currently translated at 100.0% (939 of 939 strings) Translation: SimpleX Chat/SimpleX Chat iOS Translate-URL: https://hosted.weblate.org/projects/simplex-chat/ios/nl/ * Translated using Weblate (German) Currently translated at 99.9% (1007 of 1008 strings) Translation: SimpleX Chat/SimpleX Chat Android Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/de/ * Translated using Weblate (Russian) Currently translated at 100.0% (1008 of 1008 strings) Translation: SimpleX Chat/SimpleX Chat Android Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/ru/ * Translated using Weblate (French) Currently translated at 99.9% (1007 of 1008 strings) Translation: SimpleX Chat/SimpleX Chat Android Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/fr/ * Translated using Weblate (Chinese (Simplified)) Currently translated at 99.9% (1007 of 1008 strings) Translation: SimpleX Chat/SimpleX Chat Android Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/zh_Hans/ * Translated using Weblate (Chinese (Traditional)) Currently translated at 99.9% (1007 of 1008 strings) Translation: SimpleX Chat/SimpleX Chat Android Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/zh_Hant/ * Translated using Weblate (Spanish) Currently translated at 100.0% (1008 of 1008 strings) Translation: SimpleX Chat/SimpleX Chat Android Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/es/ * Translated using Weblate (Dutch) Currently translated at 99.9% (1007 of 1008 strings) Translation: SimpleX Chat/SimpleX Chat Android Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/nl/ * Translated using Weblate (Czech) Currently translated at 99.3% (1001 of 1008 strings) Translation: SimpleX Chat/SimpleX Chat Android Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/cs/ * ios: import/export localizations --------- Co-authored-by: John m Co-authored-by: Ophiushi <41908476+ishi-sama@users.noreply.github.com> Co-authored-by: sith-on-mars Co-authored-by: zenobit Co-authored-by: random r Co-authored-by: No name Co-authored-by: mlanp Co-authored-by: Moo Co-authored-by: Float --- .../app/src/main/res/values-cs/strings.xml | 43 +- .../app/src/main/res/values-de/strings.xml | 42 + .../app/src/main/res/values-es/strings.xml | 86 +- .../app/src/main/res/values-fi/strings.xml | 2 + .../app/src/main/res/values-fr/strings.xml | 42 + .../app/src/main/res/values-it/strings.xml | 43 + .../app/src/main/res/values-lt/strings.xml | 39 + .../app/src/main/res/values-nl/strings.xml | 54 +- .../app/src/main/res/values-ru/strings.xml | 43 + .../src/main/res/values-zh-rCN/strings.xml | 46 +- .../src/main/res/values-zh-rTW/strings.xml | 44 + .../cs.xcloc/Localized Contents/cs.xliff | 4 + .../de.xcloc/Localized Contents/de.xliff | 40 + .../en.xcloc/Localized Contents/en.xliff | 5 + .../es.xcloc/Localized Contents/es.xliff | 78 +- .../fi.xcloc/Localized Contents/fi.xliff | 3801 +++++++++++++++++ .../fr.xcloc/Localized Contents/fr.xliff | 40 + .../it.xcloc/Localized Contents/it.xliff | 40 + .../lt.xcloc/Localized Contents/lt.xliff | 134 +- .../nl.xcloc/Localized Contents/nl.xliff | 58 +- .../ru.xcloc/Localized Contents/ru.xliff | 47 + .../Localized Contents/zh-Hans.xliff | 42 +- apps/ios/de.lproj/Localizable.strings | 99 + apps/ios/es.lproj/Localizable.strings | 137 +- apps/ios/fr.lproj/Localizable.strings | 99 + apps/ios/it.lproj/Localizable.strings | 99 + apps/ios/nl.lproj/Localizable.strings | 117 +- apps/ios/ru.lproj/Localizable.strings | 120 + apps/ios/zh-Hans.lproj/Localizable.strings | 101 +- 29 files changed, 5412 insertions(+), 133 deletions(-) create mode 100644 apps/android/app/src/main/res/values-fi/strings.xml create mode 100644 apps/ios/SimpleX Localizations/fi.xcloc/Localized Contents/fi.xliff diff --git a/apps/android/app/src/main/res/values-cs/strings.xml b/apps/android/app/src/main/res/values-cs/strings.xml index d72c313d8d..8a5723816e 100644 --- a/apps/android/app/src/main/res/values-cs/strings.xml +++ b/apps/android/app/src/main/res/values-cs/strings.xml @@ -1,6 +1,6 @@ - Povolte hlasové zprávy, pouze pokud je váš kontakt povolí. + Povolit hlasové zprávy, pokud je váš kontakt povolí. Mizící zprávy povoleny. Hlasové zprávy povoleny. Správci mohou vytvářet odkazy pro připojení ke skupinám. @@ -48,7 +48,7 @@ SERVERY Příjímáno přez Vytvoření tajné skupiny - Zobrazení názvu skupiny: + Zobrazený název skupiny: Úplný název skupiny: Váš chat profil bude zaslán členům skupiny Profil skupiny je uložen v zařízeních členů, nikoli na serverech. @@ -906,7 +906,7 @@ Světlé Tmavé Téma - Kontakt povolen + Kontakt povolil zapnuto vypnuto Chat předvolby @@ -981,4 +981,41 @@ Chyba aktualizace odkazu skupiny Počáteční role Systém + Uložit servery\? + Znovu neukazuj + Nemohu smazat uživatelský profil! + Přidat uvítací zprávu + Čínské a Španělské rozhranní + Hlasové a video hovory + Potvrdit heslo + Pro zobrazení zadejte heslo výše! + Další snížení spotřeby baterie + Chyba ukládání hesla uživatele + Chyba aktualizace soukromí uživatele + Správa skupin + Uvítací zpráva skupin + Skryté chat profily + Hesla skrytých profilů + Skrýt + Skrýt profil + Změnit profil na soukromý! + Další vylepšení již brzy! + Nyní mohou správci: +\n- mazat zprávy členů. +\n- zakázat členy (role \"pozorovatel\") + Uložit heslo profilu + Ztlumit + Chraňte své chat profily heslem! + Uložit a aktualizovat profil skupiny + Ztlumit při neaktivitě! + Heslo k zobrazení + Uložit uvítací zprávu\? + Nastavte zprávu zobrazenou novým členům! + Podpora bluetooth a další vylepšení. + Klepnutím aktivujete profil. + Díky uživatelům - překládejte prostřednictvím Weblate! + Měl by tam být alespoň jeden uživatelský profil. + Uvítací zpráva + Uvítací zpráva + Zrušit ztlumení \ No newline at end of file diff --git a/apps/android/app/src/main/res/values-de/strings.xml b/apps/android/app/src/main/res/values-de/strings.xml index 960c3b2ea0..80ca19aef4 100644 --- a/apps/android/app/src/main/res/values-de/strings.xml +++ b/apps/android/app/src/main/res/values-de/strings.xml @@ -1055,4 +1055,46 @@ Bitte kontaktieren Sie den Gruppen-Administrator. Diese Nachricht wird für alle Gruppenmitglieder gelöscht. System + Bestätigen Sie das Passwort + Das Benutzerprofil kann nicht gelöscht werden! + Nicht nochmals anzeigen + Chinesische und spanische Bedienoberfläche + Audio- und Videoanrufe + Fügen Sie eine Begrüßungsmeldung hinzu + Fehler beim Aktualisieren der Benutzer-Privatsphäre + Alle Server speichern\? + Verberge das Profil + Passwort anzeigen + Profil-Passwort speichern + Fehler beim Speichern des Benutzer-Passworts + Verborgenes Profil-Passwort + Begrüßungsmeldung + Begrüßungsmeldung speichern\? + Verbergen aufheben + Geben Sie oben das Passwort für die Anzeige an! + Erzeugen Sie ein privates Profil! + Stummschalten + Tippen Sie, um das Profil zu aktivieren. + Es muss mindestens ein Benutzer-Profil vorhanden sein. + Es muss mindestens ein sichtbares Benutzer-Profil vorhanden sein. + Stummschaltung aufheben + Bei Inaktivität stummgeschaltet! + Schützen Sie Ihre Chat-Profile mit einem Passwort! + Bluetooth-Unterstützung und weitere Verbesserungen. + Administratoren können nun +\n- Nachrichten von Gruppenmitgliedern löschen +\n- Gruppenmitglieder deaktivieren (\"Beobachter\"-Rolle) + Gruppen-Begrüßungsmeldung + Weiter reduzierter Batterieverbrauch + Weitere Verbesserungen sind bald verfügbar! + Legen Sie die Nachricht fest, die neuen Mitgliedern angezeigt werden soll! + Dank der Nutzer - Tragen Sie per Weblate bei! + Gruppenmoderation + Verborgene Chat-Profile + Verberge + Sichern und aktualisieren des Gruppen-Profils + Sie können Anrufe und Benachrichtigungen auch von stummgeschalteten Profilen empfangen, solange diese aktiv sind. + Begrüßungsmeldung + Sie können ein Benutzerprofil verbergen oder stummschalten - für das Menü gedrückt halten. + Geben Sie ein vollständiges Passwort in das Suchfeld auf der Seite \"Meine Chat-Profile\" ein, um Ihr verborgenes Profil zu sehen. \ No newline at end of file diff --git a/apps/android/app/src/main/res/values-es/strings.xml b/apps/android/app/src/main/res/values-es/strings.xml index 6eda6906ea..fc7224d3e2 100644 --- a/apps/android/app/src/main/res/values-es/strings.xml +++ b/apps/android/app/src/main/res/values-es/strings.xml @@ -10,20 +10,20 @@ un dia un mes una semana - Permitir que desaparezcan los mensajes sólo si su contacto lo permite. + Permitir mensajes temporales sólo si tu contacto los permite. Añadir servidores escaneando códigos QR. Añadir servidores predefinidos Todos los miembros del grupo permanecerán conectados. - Permitir la eliminación irreversible de mensajes sólo si tu contacto también lo permite para tí. + Permitir la eliminación irreversible de mensajes sólo si tu contacto también lo permite. Android Keystore se usará para almacenar de forma segura la frase de contraseña después de reiniciar la aplicación o cambiar la frase de contraseña - permitirá recibir notificaciones. - Permitir a tus contactos enviar mensajes que desaparecen. + Permitir a tus contactos enviar mensajes temporales Permitir a tus contactos enviar mensajes de voz. siempre La aplicación sólo puede recibir notificaciones cuando se está ejecutando, no se iniciará ningún servicio en segundo plano. ICONO DE LA APLICACIÓN Se enviará un perfil aleatorio al contacto del que recibió este enlace La optimización de la batería está activa, desactivando el servicio en segundo plano y las solicitudes periódicas de nuevos mensajes. Puedes volver a activarlos en Configuración. - El servicio en segundo plano está siempre en funcionamiento – las notificaciones se mostrarán en cuanto los mensajes estén disponibles. + El servicio en segundo plano está siempre en funcionamiento – las notificaciones se muestran en cuanto los mensajes estén disponibles. Se puede desactivar en Configuración – las notificaciones se seguirán mostrando mientras la app esté en funcionamiento. Siempre activo Permitir @@ -80,12 +80,12 @@ Solicita recibir la imagen Ten en cuenta: NO podrás recuperar o cambiar la contraseña si la pierdes. Tanto tú como tu contacto podéis enviar mensajes de voz. - ¡Usa más batería! El servicio en segundo plano está siempre en funcionamiento - las notificaciones se mostrarán tan pronto como los mensajes estén disponibles. + ¡Gasta más batería! El servicio en segundo plano está siempre en funcionamiento - las notificaciones se mostrarán tan pronto como los mensajes estén disponibles. Tanto tú como tu contacto podéis eliminar de forma irreversible los mensajes enviados. Tanto tú como tu contacto podéis enviar mensajes temporales. Escanear código QR: para conectar con tu contacto que te muestre código QR. Crear - Crear enlace único de invitación + Crear enlace de invitación de un uso. Crear grupo secreto La contraseña de cifrado de la base de datos será actualizada. ID de la base de datos @@ -152,7 +152,7 @@ Nombre del contacto Copiar Crear tu perfil - Conectar mediante relay + Siempre usar relay La base de datos está cifrada con una contraseña aleatoria. Cámbiala antes de exportar. %d archivo(s) con tamaño total de %s ¿Activar eliminación automática de mensajes\? @@ -166,7 +166,7 @@ Desconectado Conectado Copiado en portapapeles - Crear enlace único de invitación + Crear enlace de invitación de un uso. 💻 PC: escanéa el código QR desde la app mediante Escanéo de código QR Eliminar Eliminar @@ -272,7 +272,7 @@ llamando llamada en curso coloreado - su rol a cambiado a %s + ha cambiado tu rol a %s cambiando dirección por %s completado ¡No se puede invitar el contacto! @@ -283,7 +283,7 @@ El chat está detenido rol de %s cambiado a %s Cambiar rol - A través del perfil de chat (por defecto) or a través de conexión (BETA) + Mediante perfil de Chat (por defecto) o por conexión (BETA) cambiando dirección… Preferencias de chat cancelado %s @@ -319,7 +319,7 @@ Si confirmas los servidores de mensajería podrán ver tu IP, y tu proveedor de acceso a internet a qué servidores te estás conectando. Imagen guardada en la Galería El archivo se recibirá cuando tu contacto esté en línea, por favor espera o compruébalo más tarde. - Enlace único de invitación + Enlace de invitación de un uso Pegar enlace recibido Error guardando perfil de grupo Salir sin guardar @@ -329,7 +329,7 @@ La invitación al grupo ya no es válida, ha sido eliminada por el remitente. El grupo se eliminará para tí. ¡No puede deshacerse! Cómo usar el marcador - Incógnito mediante enlace único + Incógnito mediante enlace de un uso Dirección de contacto SimpleX Error guardando servidores SMP Abrir el enlace en el navegador puede reducir la privacidad y seguridad de la conexión. Los enlaces SimpleX que no son de confianza aparecerán en rojo. @@ -337,7 +337,7 @@ Error creando dirección Error eliminando perfil de usuario Activar SimpleX Lock - Enlace único de invitación + Enlace de invitación de un uso Servidores SMP Características experimentales Error importando la base de datos @@ -449,7 +449,7 @@ Instalar SimpleX Chat para terminal invitación al grupo %1$s invitado %1$s - Permite tener muchas conexiones anónimas sin datos compartidos entre estas en un único perfil de chat. + Permite tener varias conexiones anónimas sin datos compartidos entre estas en un único perfil de chat. Invitar al grupo Para comprobar el cifrado de extremo a extremo con su contacto compare (o escanee) el código en sus dispositivos. La base de datos no está cifrada. Establece una contraseña para protegerla. @@ -698,7 +698,7 @@ Evaluación de la seguridad la recepción de archivos aún no está disponible el envío de archivos aún no está disponible - entre particulares + p2p Llamada rechazada Eliminar ¿Eliminar contraseña de Keystore\? @@ -801,8 +801,8 @@ Este grupo ya no existe. Para encontrar el perfil usado en una conexión en modo incógnito, pulsa el nombre del contacto o del grupo en la parte superior del chat. Establecer 1 día - Gracias a los usuarios: ¡contribuye a través de Weblate! - Gracias a los usuarios: ¡contribuye a través de Weblate! + Agradecimientos a los usuarios. ¡Contribuye a través de Weblate! + Agradecimientos a los usuarios. ¡Contribuye a través de Weblate! Para proteger la zona horaria, los archivos de imagen/voz usan la hora UTC. Aislamiento de transporte (para compartir con tu contacto) @@ -855,7 +855,7 @@ Usar servidor Usar para conexiones nuevas Sistema - mediante enlace único + mediante enlace de un uso Tus chats Mensaje de voz… Tu dirección de contacto @@ -879,7 +879,7 @@ Tus servidores ICE Has rechazado la invitación del grupo. has cambiado el rol de %s a %s - mediante servidor de retransmisión + mediante relay ¡quiere contactar contigo! Mensaje de voz Esperando imagen @@ -955,8 +955,8 @@ Estás conectado al servidor utilizado para recibir mensajes de este contacto. mediante enlace de dirección de contacto mediante enlace de grupo - has compartido un enlace único - has compartido un enlace único en módo incógnito + has compartido enlace de un uso + has compartido enlace de un uso en módo incógnito No tienes chats El contacto ha enviado un archivo mayor al máximo admitido (%1$s ). %1$d mensaje(s) omitido(s) @@ -979,4 +979,48 @@ \n \nLos servidores SimpleX no pueden ver tu perfil. Sistema + Agregar mensaje de bienvenida + Llamadas y videollamadas + ¿Guardar servidores\? + Ocultar perfil + Guardar contraseña de perfil + Contraseña para hacerlo visible + Error guardando la contraseña de usuario + El relay sólo se usa en caso de necesidad. Un tercero podría ver tu IP. + El servidor relay protege tu IP pero puede ver la duración de la llamada. + ¡No se puede eliminar el perfil! + Introduce la contraseña + Ocultar + Silenciar + Guardar y actualizar perfil del grupo + Pulsa para activar el perfil. + Debe haber al menos un perfil de usuario visible. + Mostrar + Mensaje de bienvenida + Mensaje de bienvenida + Debe haber al menos un perfil de usuario. + ¡Hacer un perfil privado! + No mostrar de nuevo + ¡Silenciado cuando está inactivo! + Moderación de grupos + Perfiles Chat ocultos + ¡Proteje los perfiles de Chat con contraseña! + Soporte bluetooth y otras mejoras. + ¡Establece el mensaje mostrado a los miembros nuevos! + Interfaz en chino y español + Agradecimientos a los usuarios. ¡Contribuye a través de Weblate! + Error actualizando la privacidad de usuario + Confirmar contraseña + Consumo de batería reducido aun más + Mensaje de bienvenida en grupos + ¡Más mejoras en camino! + Contraseña de perfil oculto + ¿Guardar mensaje de bienvenida\? + Activar audio + Puedes ocultar o silenciar un perfil. Mantenlo pulsado para abrir el menú. + Seguirás recibiendo llamadas y notificaciones de los perfiles silenciados cuando estén activos. + Ahora los administradores pueden +\n- borrar mensajes de los miembros. +\n- desactivar el rol a miembros (a rol \"observador\") + Para hacer visible tu perfil oculto, introduce la contraseña completa en el campo de búsqueda de la página Tus perfiles Chat. \ No newline at end of file diff --git a/apps/android/app/src/main/res/values-fi/strings.xml b/apps/android/app/src/main/res/values-fi/strings.xml new file mode 100644 index 0000000000..a6b3daec93 --- /dev/null +++ b/apps/android/app/src/main/res/values-fi/strings.xml @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/apps/android/app/src/main/res/values-fr/strings.xml b/apps/android/app/src/main/res/values-fr/strings.xml index b0efa0df94..0d54fd920d 100644 --- a/apps/android/app/src/main/res/values-fr/strings.xml +++ b/apps/android/app/src/main/res/values-fr/strings.xml @@ -981,4 +981,46 @@ Vous ne pouvez pas envoyer de messages ! observateur Système + Sauvegarder les serveurs \? + Ne plus afficher + Ajouter un message d\'accueil + Impossible de supprimer le profil d\'utilisateur ! + Modération de groupe + Cacher + Mute en cas d\'inactivité ! + Confirmer le mot de passe + Réduction accrue de l\'utilisation de la batterie + Interface en chinois et en espagnol + Entrez le mot de passe ci-dessus pour continuer ! + Appels audio et vidéo + Message d\'accueil du groupe + Erreur d\'enregistrement du mot de passe de l\'utilisateur + Erreur de mise à jour de la confidentialité de l\'utilisateur + Mot de passe de profil caché + Profils de chat cachés + Désormais, les administrateurs peuvent : +\n- supprimer les messages des membres. +\n- désactiver des membres (rôle \"observateur\") + Sauvegarder le message d\'accueil \? + Choisissez un message à l\'attention des nouveaux membres ! + Masquer le profil + D\'autres améliorations sont à venir ! + Mot de passe à afficher + Rendre le profil privé ! + Mute + Protégez vos profils de chat par un mot de passe ! + Appuyez pour activer le profil. + Sauvegarder et mettre à jour le profil du groupe + Enregistrer le mot de passe du profil + Pour révéler votre profil caché, entrez un mot de passe complet dans le champ de recherche de la page Profils de chat. + Prise en charge du Bluetooth et autres améliorations. + Merci aux utilisateurs - contribuez via Weblate ! + Il doit y avoir au moins un profil d\'utilisateur. + Il doit y avoir au moins un profil d\'utilisateur visible. + Dévoiler + Démute + Message d\'accueil + Message d\'accueil + Vous pouvez masquer ou mettre en sourdine un profil d\'utilisateur - maintenez-le enfoncé pour accéder au menu. + Vous continuerez à recevoir des appels et des notifications des profils mis en sourdine lorsqu\'ils sont actifs. \ No newline at end of file diff --git a/apps/android/app/src/main/res/values-it/strings.xml b/apps/android/app/src/main/res/values-it/strings.xml index 0d980a3c29..8c5317ba1d 100644 --- a/apps/android/app/src/main/res/values-it/strings.xml +++ b/apps/android/app/src/main/res/values-it/strings.xml @@ -981,4 +981,47 @@ Contatta l\'amministratore del gruppo. Non puoi inviare messaggi! Sistema + Aggiungi messaggio di benvenuto + Messaggio di benvenuto + Salvare il messaggio di benvenuto\? + Messaggio di benvenuto + Salva e aggiorna il profilo del gruppo + Inserisci la password sopra per mostrare! + Silenzia + Tocca per attivare il profilo. + Svela + Rendi privato il profilo! + Deve esserci almeno un profilo utente. + Deve esserci almeno un profilo utente visibile. + Puoi nascondere o silenziare un profilo utente - tienilo premuto per il menu. +\nSimpleX Lock deve essere attivato. + Non mostrare più + Silenzioso quando inattivo! + Continuerai a ricevere chiamate e notifiche da profili silenziati quando sono attivi. + Chiamate audio e video + Moderazione del gruppo + Proteggi i tuoi profili di chat con una password! + Supporto a bluetooth e altri miglioramenti. + Messaggio di benvenuto del gruppo + Altri miglioramenti sono in arrivo! + Interfaccia cinese e spagnola + Grazie agli utenti – contribuite via Weblate! + Password del profilo nascosta + Salva la password del profilo + Per rivelare il tuo profilo nascosto, inserisci una password completa in un campo di ricerca nella pagina \"I tuoi profili di chat\". + Password per mostrare + Ora gli amministratori possono: +\n- eliminare i messaggi dei membri. +\n- disattivare i membri (ruolo \"osservatore\") + Impossibile eliminare il profilo utente! + Nascondi il profilo + Conferma password + Errore nell\'aggiornamento della privacy dell\'utente + Salvare i server\? + Errore nel salvataggio della password utente + Ulteriore riduzione del consumo della batteria + Profili di chat nascosti + Nascondi + Imposta il messaggio mostrato ai nuovi membri! + Riattiva audio \ No newline at end of file diff --git a/apps/android/app/src/main/res/values-lt/strings.xml b/apps/android/app/src/main/res/values-lt/strings.xml index 40df1e30c2..710bc8853c 100644 --- a/apps/android/app/src/main/res/values-lt/strings.xml +++ b/apps/android/app/src/main/res/values-lt/strings.xml @@ -8,4 +8,43 @@ Apie SimpleX Pridėti serverį… Pridėti serverius skenuojant QR kodus. + Išvaizda + Programėlės versija + Programėlės versija: v%s + Programėlės darinys: %s + Automatiškai + skambinama… + skambučio klaida + Skambutis jau baigtas! + Atsiliepti + Skambutis baigtas + SKAMBUČIAI + Leisti jūsų adresatams negrįžtamai ištrinti išsiųstas žinutes. + Atgal + PROGRAMĖLĖS PIKTOGRAMA + Adresatui, iš kurio gavote šią nuorodą, bus išsiųstas atsitiktinis profilis + visada + Leisti jūsų adresatams siųsti balso žinutes. + Leisti negrįžtamą žinučių ištrynimą tik tuo atveju, jei jūsų adresatas jums tai leidžia. + Leisti balso žinutes tik tuo atveju, jei jūsų adresatas jas leidžia. + Leisti + Leisti balso žinutes\? + pusjuodis + skambutis baigtas %1$s + garso skambutis + Garso ir vaizdo skambučiai + bloga žinutės maiša + blogas žinutės ID + Jūsų adresatui bus išsiųstas atsitiktinis profilis + Leisti išnykstančias žinutes tik tuo atveju, jei jūsų adresatas jas leidžia. + Visos žinutės bus ištrintos – to neįmanoma bus atšaukti! Žinutės bus ištrintos TIK jums. + Leisti negrįžtamai ištrinti išsiųstas žinutes. + Leisti siųsti išnykstančias žinutes. + Leisti siųsti balso žinutes. + Leisti siųsti tiesiogines žinutes nariams. + Garso ir vaizdo skambučiai + Leisti jūsų adresatams siųsti išnykstančias žinutes. + Tapatybės nustatymas neprieinamas + Turėkite omenyje: jeigu prarasite slaptafrazę, NEBEGALĖSITE jos atkurti ar pakeisti. + Atsisakyti \ No newline at end of file diff --git a/apps/android/app/src/main/res/values-nl/strings.xml b/apps/android/app/src/main/res/values-nl/strings.xml index 455f75671a..cb3e1db827 100644 --- a/apps/android/app/src/main/res/values-nl/strings.xml +++ b/apps/android/app/src/main/res/values-nl/strings.xml @@ -74,7 +74,7 @@ 1 maand Over SimpleX Over SimpleX Chat - hierboven, dan: + hier boven, dan: Verzoeken accepteren Alle gesprekken en berichten worden verwijderd, dit kan niet ongedaan worden gemaakt! Alle berichten worden verwijderd, dit kan niet ongedaan worden gemaakt! De berichten worden ALLEEN voor jou verwijderd. @@ -491,7 +491,7 @@ \nWe zullen serverredundantie toevoegen om verloren berichten te voorkomen. Deel nemen aan groep Verlaten - gebruiker + Gebruiker link voorbeeld afbeelding GEBRUIKER BERICHTEN @@ -576,7 +576,7 @@ voorgesteld %s: %2s Oud database archief Voer het juiste huidige wachtwoord in. - eigenaar + Eigenaar PING telling PING interval Bewaar het laatste berichtconcept, met bijlagen. @@ -729,7 +729,7 @@ SOCKS-proxy gebruiken (poort 9050) Voorkeuren opslaan\? Opslaan en Contact melden - WELKOMS BERICHT + WELKOMST BERICHT Je huidige profiel Opslaan en Contacten melden Opslaan en Groepsleden melden @@ -883,7 +883,7 @@ Verbied het sturen van directe berichten naar leden. Verbieden het verzenden van spraak berichten. De beveiliging van SimpleX Chat is gecontroleerd door Trail of Bits. - Met optioneel welkomstbericht. + Met optioneel welkomst bericht. Spraak berichten Uw contacten kunnen volledige verwijdering van berichten toestaan. U moet elke keer dat de app start het wachtwoord invoeren, deze wordt niet op het apparaat opgeslagen. @@ -976,8 +976,50 @@ Neem contact op met de groep beheerder. Fout bij bijwerken van groep link Initiële rol - waarnemer + Waarnemer Je kunt geen berichten versturen! jij bent waarnemer Systeem + Audio en video oproepen + Kan gebruikers profiel niet verwijderen! + Bevestig wachtwoord + Chinese en Spaanse interface + Voer hier boven het wachtwoord in om weer te geven! + Fout bij opslaan gebruikers wachtwoord + Welkomst bericht toevoegen + Niet meer weergeven + Groep moderatie + Fout bij updaten van gebruikers privacy + Verder verminderd batterij verbruik + Groep welkomst bericht + Verborgen chat profielen + Profiel verbergen + Verbergen + Verborgen profiel wachtwoord + Gedempt wanneer inactief! + Dempen + Meer verbeteringen volgen snel! + Profiel privé maken! + Nu kunnen beheerders: +\n- berichten van leden verwijderen. +\n- schakel leden uit (\"waarnemer\" rol) + Bescherm je chat profielen met een wachtwoord! + Wachtwoord om weer te geven + Groep profiel opslaan en bijwerken + Servers opslaan\? + Bewaar profiel wachtwoord + Stel het getoonde bericht in voor nieuwe leden! + Welkomst bericht opslaan\? + Ondersteuning voor bluetooth en andere verbeteringen. + Tik om profiel te activeren. + Dank aan de gebruikers – draag bij via Weblate! + Er moet ten minste één gebruikers profiel zijn. + U kunt een gebruikers profiel verbergen of dempen - houd het vast voor het menu. + zichtbaar maken + Dempen opheffen + Welkomst bericht + "Er moet ten minste één zichtbaar gebruikers profiel zijn." + Om uw verborgen profiel te onthullen, voert u een volledig wachtwoord in een zoekveld in op de pagina Uw chat profielen. + Welkomst bericht + U ontvangt nog steeds oproepen en meldingen van gedempte profielen wanneer deze actief zijn. \ No newline at end of file diff --git a/apps/android/app/src/main/res/values-ru/strings.xml b/apps/android/app/src/main/res/values-ru/strings.xml index c61e70b493..77451033cc 100644 --- a/apps/android/app/src/main/res/values-ru/strings.xml +++ b/apps/android/app/src/main/res/values-ru/strings.xml @@ -1052,4 +1052,47 @@ читатель Роль при вступлении Ошибка обновления ссылки группы + Системный + Аудио и видео звонки + Ошибка при сохранении пароля пользователя + Сохранить серверы\? + Должен быть хотя бы один профиль пользователя. + Должен быть хотя бы один открытый профиль пользователя. + Чтобы показать Ваш скрытый профиль, введите пароль в поле поиска на странице Ваши профили чата. + Уведомлять + Приветственное сообщение + Подтвердить пароль + Добавить приветственное сообщение + Приветственное сообщение + Сохранить сообщение и обновить группу + Без звука, когда не активный! + Нельзя удалить профиль пользователя! + Введите пароль в поиске! + Сохранить пароль профиля + Китайский и Испанский интерфейс + Не показывать + Скрыть + Уменьшенное потребление батареи + Модерация группы + Пароль скрытого профиля + Пароль чтобы раскрыть + Скрытые профили чата + Ошибка при обновлении конфиденциальности + Приветственное сообщение группы + Скрыть профиль + Без звука + Сделайте профиль конфиденциальным! + Дополнительные улучшения скоро! + Теперь админы могут: +\n- удалять сообщения членов. +\n- приостанавливать членов (роль \"наблюдатель\") + Защитите ваши профили чата паролем! + Раскрыть + Поддержка bluetooth и другие улучшения. + Сохранить приветственное сообщение\? + Установить сообщение для новых членов группы! + Нажмите, чтобы сделать профиль активным. + Благодаря пользователям – добавьте переводы через Weblate! + Вы все равно получите звонки и уведомления в профилях без звука, когда они активные. + Вы можете скрыть профиль или выключить уведомления - подержите, чтобы увидеть меню. \ No newline at end of file diff --git a/apps/android/app/src/main/res/values-zh-rCN/strings.xml b/apps/android/app/src/main/res/values-zh-rCN/strings.xml index 87f833b99d..064f957221 100644 --- a/apps/android/app/src/main/res/values-zh-rCN/strings.xml +++ b/apps/android/app/src/main/res/values-zh-rCN/strings.xml @@ -510,7 +510,7 @@ 只有客户端设备存储用户配置文件、联系人、群组和使用 双层端到端加密 发送的消息。 视频通话(非端到端加密) 定期 - 私人通知 + 私密通知 应用程序运行时 无端到端加密 显示 @@ -972,7 +972,7 @@ 由 %s 审核 管理员移除 将为所有成员删除该消息。 - 该消息将对所有成员显示为已审核。 + 该消息将对所有成员标记为已被管理员移除。 删除成员消息? 观察者 您是观察者 @@ -981,4 +981,46 @@ 初始角色 请联系群组管理员。 系统 + 用于显示的密码 + 保存个人资料密码 + 添加欢迎消息 + 隐藏 + 将个人资料设置为私密! + 静音 + 保存并更新组配置文件 + 不再显示 + 不活跃时静音! + 语音和视频通话 + 中文和西班牙文界面 + 进一步减少电池使用 + 更多改进即将推出! + 现在管理员可以: +\n- 删除成员的消息。 +\n- 禁用成员(“观察员”角色) + 使用密码保护您的聊天资料! + 确认密码 + 更新用户隐私错误 + 无法删除用户资料! + 保存用户密码错误 + 在上面输入密码以显示! + 群组欢迎消息 + 群组管理员移除 + 已隐藏个人资料密码 + 已隐藏聊天资料 + 隐藏个人资料 + 保存服务器? + 要显示您的隐藏个人资料,请在您的聊天个人资料页面的搜索字段中输入完整密码。 + 保存欢迎信息? + 点击以激活个人资料。 + 应该至少有一个用户资料。 + 解除隐藏 + 设置向新成员显示的消息! + 支持蓝牙和其他改进。 + 感谢用户——通过 Weblate 做出贡献! + 应该至少有一个可见的用户资料。 + 解除静音 + 欢迎信息 + 当静音配置文件处于活动状态时,您仍会收到来自静音配置文件的电话和通知。 + 您可以隐藏或静音用户配置文件——长按以显示菜单。 + 欢迎信息 \ No newline at end of file diff --git a/apps/android/app/src/main/res/values-zh-rTW/strings.xml b/apps/android/app/src/main/res/values-zh-rTW/strings.xml index 3fb0959a6e..1ceb872791 100644 --- a/apps/android/app/src/main/res/values-zh-rTW/strings.xml +++ b/apps/android/app/src/main/res/values-zh-rTW/strings.xml @@ -983,4 +983,48 @@ 請聯繫群管理員。 初始角色 系統 + 您可以隱藏或靜音用戶配置文件 - 按住它以顯示菜單。 + 保存服務器? + 確認密碼 + 隱藏的個人資料密碼 + 隱藏個人資料 + 顯示密碼 + 保存個人資料密碼 + 要顯示您的隱藏個人資料,請在您的聊天個人資料頁面的搜索字段中輸入完整密碼。 + 歡迎信息 + 保存和更新組配置文件 + 保存歡迎信息? + 無法刪除用戶個人資料! + 隱藏 + 將個人資料設為私密! + 音視頻通話 + 中文和西班牙文界面 + 進一步減少電池使用 + 小組審核 + 更多改進即將推出! + 現在管理員可以: +\n- 刪除成員的消息。 +\n- 禁用成員(“觀察員”角色) + 使用密碼保護您的聊天資料! + 中繼服務器保護您的 IP 地址,但它可以觀察通話的持續時間。 + 添加歡迎信息 + 保存用戶密碼時出錯 + 更新用戶隱私時出錯 + 中繼服務器僅在必要時使用。 另一方可以觀察到您的 IP 地址。 + 在上面輸入密碼以顯示! + 群组欢迎信息 + 隱藏的聊天資料 + 不再顯示 + 靜音 + Muted when inactive! + 設置向新成員顯示的消息! + 點擊以激活配置文件。 + 支持藍牙和其他改進。 + 應該至少有一個可見的用戶配置文件。 + 歡迎信息 + 感謝用戶——通過 Weblate 做出貢獻! + 應該至少有一個用戶配置文件。 + 取消靜音 + 當靜音配置文件處於活動狀態時,您仍會收到來自靜音配置文件的電話和通知。 + 取消隱藏 \ No newline at end of file diff --git a/apps/ios/SimpleX Localizations/cs.xcloc/Localized Contents/cs.xliff b/apps/ios/SimpleX Localizations/cs.xcloc/Localized Contents/cs.xliff index 364fba900b..1e6a34baba 100644 --- a/apps/ios/SimpleX Localizations/cs.xcloc/Localized Contents/cs.xliff +++ b/apps/ios/SimpleX Localizations/cs.xcloc/Localized Contents/cs.xliff @@ -1962,6 +1962,10 @@ Nesprávný bezpečnostní kód! No comment provided by engineer. + + Initial role + No comment provided by engineer. + Install [SimpleX Chat for terminal](https://github.com/simplex-chat/simplex-chat) Nainstalujte [SimpleX Chat pro terminál](https://github.com/simplex-chat/simplex-chat) diff --git a/apps/ios/SimpleX Localizations/de.xcloc/Localized Contents/de.xliff b/apps/ios/SimpleX Localizations/de.xcloc/Localized Contents/de.xliff index 90c6260ece..d6481856e0 100644 --- a/apps/ios/SimpleX Localizations/de.xcloc/Localized Contents/de.xliff +++ b/apps/ios/SimpleX Localizations/de.xcloc/Localized Contents/de.xliff @@ -387,6 +387,7 @@ Add welcome message + Fügen Sie eine Begrüßungsmeldung hinzu No comment provided by engineer. @@ -531,6 +532,7 @@ Audio and video calls + Audio- und Videoanrufe No comment provided by engineer. @@ -600,6 +602,7 @@ Can't delete user profile! + Das Benutzerprofil kann nicht gelöscht werden! No comment provided by engineer. @@ -709,6 +712,7 @@ Chinese and Spanish interface + Chinesische und spanische Bedienoberfläche No comment provided by engineer. @@ -768,6 +772,7 @@ Confirm password + Bestätigen Sie das Passwort No comment provided by engineer. @@ -1300,6 +1305,7 @@ Don't show again + Nicht nochmals anzeigen No comment provided by engineer. @@ -1404,6 +1410,7 @@ Enter password above to show! + Geben Sie oben das Passwort für die Anzeige an! No comment provided by engineer. @@ -1563,6 +1570,7 @@ Error saving user password + Fehler beim Speichern des Benutzer-Passworts No comment provided by engineer. @@ -1602,6 +1610,7 @@ Error updating user privacy + Fehler beim Aktualisieren der Benutzer-Privatsphäre No comment provided by engineer. @@ -1691,10 +1700,12 @@ Fully re-implemented - work in background! + Komplett neu umgesetzt - arbeitet nun im Hintergrund! No comment provided by engineer. Further reduced battery usage + Weiter reduzierter Batterieverbrauch No comment provided by engineer. @@ -1774,6 +1785,7 @@ Group moderation + Gruppenmoderation No comment provided by engineer. @@ -1793,6 +1805,7 @@ Group welcome message + Gruppen-Begrüßungsmeldung No comment provided by engineer. @@ -1817,10 +1830,12 @@ Hidden chat profiles + Verborgene Chat-Profile No comment provided by engineer. Hidden profile password + Verborgenes Profil-Passwort No comment provided by engineer. @@ -1835,6 +1850,7 @@ Hide profile + Verberge das Profil No comment provided by engineer. @@ -1962,6 +1978,10 @@ Falscher Sicherheitscode! No comment provided by engineer. + + Initial role + No comment provided by engineer. + Install [SimpleX Chat for terminal](https://github.com/simplex-chat/simplex-chat) Installieren Sie [SimpleX Chat als Terminalanwendung](https://github.com/simplex-chat/simplex-chat) @@ -2141,6 +2161,7 @@ Wir werden Serverredundanzen hinzufügen, um verloren gegangene Nachrichten zu v Make profile private! + Erzeugen Sie ein privates Profil! No comment provided by engineer. @@ -2270,6 +2291,7 @@ Wir werden Serverredundanzen hinzufügen, um verloren gegangene Nachrichten zu v Muted when inactive! + Bei Inaktivität stummgeschaltet! No comment provided by engineer. @@ -2376,6 +2398,9 @@ Wir werden Serverredundanzen hinzufügen, um verloren gegangene Nachrichten zu v Now admins can: - delete members' messages. - disable members ("observer" role) + Administratoren können nun +- Nachrichten von Gruppenmitgliedern löschen +- Gruppenmitglieder deaktivieren ("Beobachter"-Rolle) No comment provided by engineer. @@ -2505,6 +2530,7 @@ Wir werden Serverredundanzen hinzufügen, um verloren gegangene Nachrichten zu v Password to show + Passwort anzeigen No comment provided by engineer. @@ -2659,6 +2685,7 @@ Wir werden Serverredundanzen hinzufügen, um verloren gegangene Nachrichten zu v Protect your chat profiles with a password! + Schützen Sie Ihre Chat-Profile mit einem Passwort! No comment provided by engineer. @@ -2858,6 +2885,7 @@ Wir werden Serverredundanzen hinzufügen, um verloren gegangene Nachrichten zu v Save and update group profile + Sichern und aktualisieren des Gruppen-Profils No comment provided by engineer. @@ -2887,6 +2915,7 @@ Wir werden Serverredundanzen hinzufügen, um verloren gegangene Nachrichten zu v Save profile password + Profil-Passwort speichern No comment provided by engineer. @@ -2896,10 +2925,12 @@ Wir werden Serverredundanzen hinzufügen, um verloren gegangene Nachrichten zu v Save servers? + Alle Server speichern? No comment provided by engineer. Save welcome message? + Begrüßungsmeldung speichern? No comment provided by engineer. @@ -3054,6 +3085,7 @@ Wir werden Serverredundanzen hinzufügen, um verloren gegangene Nachrichten zu v Set the message shown to new members! + Legen Sie die Nachricht fest, die neuen Mitgliedern angezeigt werden soll! No comment provided by engineer. @@ -3238,6 +3270,7 @@ Wir werden Serverredundanzen hinzufügen, um verloren gegangene Nachrichten zu v Tap to activate profile. + Tippen Sie, um das Profil zu aktivieren. No comment provided by engineer. @@ -3367,10 +3400,12 @@ Wir werden Serverredundanzen hinzufügen, um verloren gegangene Nachrichten zu v There should be at least one user profile. + Es muss mindestens ein Benutzer-Profil vorhanden sein. No comment provided by engineer. There should be at least one visible user profile. + Es muss mindestens ein sichtbares Benutzer-Profil vorhanden sein. No comment provided by engineer. @@ -3442,6 +3477,7 @@ Sie werden aufgefordert, die Authentifizierung abzuschließen, bevor diese Funkt To reveal your hidden profile, enter a full password into a search field in **Your chat profiles** page. + Geben Sie ein vollständiges Passwort in das Suchfeld auf der Seite **Meine Chat-Profile** ein, um Ihr verborgenes Profil zu sehen. No comment provided by engineer. @@ -3501,6 +3537,7 @@ Sie werden aufgefordert, die Authentifizierung abzuschließen, bevor diese Funkt Unhide + Verbergen aufheben No comment provided by engineer. @@ -3778,6 +3815,8 @@ Bitten Sie Ihren Kontakt darum einen weiteren Verbindungs-Link zu erzeugen, um s You can hide or mute a user profile - swipe it to the right. SimpleX Lock must be enabled. + Sie können ein Benutzerprofil verbergen oder stummschalten - wischen Sie es nach rechts. +Dafür muss die SimpleX Sperre aktiviert sein. No comment provided by engineer. @@ -3897,6 +3936,7 @@ SimpleX Lock must be enabled. You will still receive calls and notifications from muted profiles when they are active. + Sie können Anrufe und Benachrichtigungen auch von stummgeschalteten Profilen empfangen, solange diese aktiv sind. No comment provided by engineer. diff --git a/apps/ios/SimpleX Localizations/en.xcloc/Localized Contents/en.xliff b/apps/ios/SimpleX Localizations/en.xcloc/Localized Contents/en.xliff index 2f3829d108..ba331f0dcc 100644 --- a/apps/ios/SimpleX Localizations/en.xcloc/Localized Contents/en.xliff +++ b/apps/ios/SimpleX Localizations/en.xcloc/Localized Contents/en.xliff @@ -1978,6 +1978,11 @@ Incorrect security code! No comment provided by engineer. + + Initial role + Initial role + No comment provided by engineer. + Install [SimpleX Chat for terminal](https://github.com/simplex-chat/simplex-chat) Install [SimpleX Chat for terminal](https://github.com/simplex-chat/simplex-chat) diff --git a/apps/ios/SimpleX Localizations/es.xcloc/Localized Contents/es.xliff b/apps/ios/SimpleX Localizations/es.xcloc/Localized Contents/es.xliff index 7727cecc17..dd26b905a5 100644 --- a/apps/ios/SimpleX Localizations/es.xcloc/Localized Contents/es.xliff +++ b/apps/ios/SimpleX Localizations/es.xcloc/Localized Contents/es.xliff @@ -189,7 +189,7 @@ **Add new contact**: to create your one-time QR Code or link for your contact. - **Añadir nuevo contacto**: para crear tu código QR único o un enlace para tu contacto. + **Añadir nuevo contacto**: para crear tu código QR o enlace de un uso para tu contacto. No comment provided by engineer. @@ -387,6 +387,7 @@ Add welcome message + Agregar mensaje de bienvenida No comment provided by engineer. @@ -426,7 +427,7 @@ Allow disappearing messages only if your contact allows it to you. - Permitir mensajes temporales sólo si tu contacto también los permite para tí. + Permitir mensajes temporales sólo si tu contacto también los permite. No comment provided by engineer. @@ -471,7 +472,7 @@ Allow your contacts to send disappearing messages. - Permitir a tus contactos enviar mensajes que desaparecen. + Permitir a tus contactos enviar mensajes temporales. No comment provided by engineer. @@ -486,7 +487,7 @@ Always use relay - Siempre usa relay + Siempre usar relay No comment provided by engineer. @@ -531,6 +532,7 @@ Audio and video calls + Llamadas y videollamadas No comment provided by engineer. @@ -585,7 +587,7 @@ By chat profile (default) or [by connection](https://simplex.chat/blog/20230204-simplex-chat-v4-5-user-chat-profiles.html#transport-isolation) (BETA). - Por perfil de Chat (por defecto) o [por conexión](https://simplex.chat/blog/20230204-simplex-chat-v4-5-user-chat-profiles.html#transport-isolation) (BETA). + Mediante perfil de Chat (por defecto) o [por conexión](https://simplex.chat/blog/20230204-simplex-chat-v4-5-user-chat-profiles.html#transport-isolation) (BETA). No comment provided by engineer. @@ -600,6 +602,7 @@ Can't delete user profile! + ¡No se puede eliminar el perfil! No comment provided by engineer. @@ -709,6 +712,7 @@ Chinese and Spanish interface + Interfaz en chino y español No comment provided by engineer. @@ -768,6 +772,7 @@ Confirm password + Confirmar contraseña No comment provided by engineer. @@ -797,7 +802,7 @@ Connect via one-time link? - ¿Conectar mediante enlace único? + ¿Conectar mediante enlace de un uso? No comment provided by engineer. @@ -927,7 +932,7 @@ Create one-time invitation link - Crear enlace único de invitación + Crear enlace de invitación de un uso No comment provided by engineer. @@ -1300,6 +1305,7 @@ Don't show again + No mostrar de nuevo No comment provided by engineer. @@ -1404,6 +1410,7 @@ Enter password above to show! + ¡Introduce la contraseña arriba para mostrar! No comment provided by engineer. @@ -1563,6 +1570,7 @@ Error saving user password + Error guardando la contraseña de usuario No comment provided by engineer. @@ -1602,6 +1610,7 @@ Error updating user privacy + Error actualizando la privacidad de usuario No comment provided by engineer. @@ -1691,10 +1700,12 @@ Fully re-implemented - work in background! + Completamente reimplementado: ¡funciona en segundo plano! No comment provided by engineer. Further reduced battery usage + Consumo de batería reducido aun más No comment provided by engineer. @@ -1774,6 +1785,7 @@ Group moderation + Moderación de grupos No comment provided by engineer. @@ -1793,6 +1805,7 @@ Group welcome message + Mensaje de bienvenida en grupos No comment provided by engineer. @@ -1817,10 +1830,12 @@ Hidden chat profiles + Perfiles Chat ocultos No comment provided by engineer. Hidden profile password + Contraseña de perfil oculto No comment provided by engineer. @@ -1835,6 +1850,7 @@ Hide profile + Ocultar perfil No comment provided by engineer. @@ -1962,6 +1978,10 @@ ¡Código de seguridad incorrecto! No comment provided by engineer. + + Initial role + No comment provided by engineer. + Install [SimpleX Chat for terminal](https://github.com/simplex-chat/simplex-chat) Instalar [SimpleX Chat for terminal](https://github.com/simplex-chat/simplex-chat) @@ -2026,7 +2046,7 @@ It allows having many anonymous connections without any shared data between them in a single chat profile. - Permite tener muchas conexiones anónimas sin datos compartidos entre estas en un único perfil de chat. + Permite tener varias conexiones anónimas sin datos compartidos entre estas en un único perfil de chat. No comment provided by engineer. @@ -2141,6 +2161,7 @@ Añadiremos redundancia de servidores para evitar la pérdida de mensajes. Make profile private! + ¡Hacer un perfil privado! No comment provided by engineer. @@ -2270,6 +2291,7 @@ Añadiremos redundancia de servidores para evitar la pérdida de mensajes. Muted when inactive! + ¡Silenciado cuando está inactivo! No comment provided by engineer. @@ -2376,6 +2398,9 @@ Añadiremos redundancia de servidores para evitar la pérdida de mensajes.Now admins can: - delete members' messages. - disable members ("observer" role) + Ahora los administradores pueden +- borrar mensajes de los miembros. +- desactivar el rol a miembros (a rol "observador") No comment provided by engineer. @@ -2400,7 +2425,7 @@ Añadiremos redundancia de servidores para evitar la pérdida de mensajes. One-time invitation link - Enlace único de invitación + Enlace único de invitación de un uso No comment provided by engineer. @@ -2505,6 +2530,7 @@ Añadiremos redundancia de servidores para evitar la pérdida de mensajes. Password to show + Contraseña para hacerlo visible No comment provided by engineer. @@ -2659,6 +2685,7 @@ Añadiremos redundancia de servidores para evitar la pérdida de mensajes. Protect your chat profiles with a password! + ¡Proteje los perfiles de Chat con contraseña! No comment provided by engineer. @@ -2728,12 +2755,12 @@ Añadiremos redundancia de servidores para evitar la pérdida de mensajes. Relay server is only used if necessary. Another party can observe your IP address. - El servidor de retransmisión sólo se utiliza en caso necesario. Una tercera persona puede observar tu dirección IP. + El relay sólo se usa en caso de necesidad. Un tercero podría ver tu IP. No comment provided by engineer. Relay server protects your IP address, but it can observe the duration of the call. - El servidor de retransmisión protege tu IP pero puede observar la duración de la llamada. + El servidor relay protege tu IP pero puede observar la duración de la llamada. No comment provided by engineer. @@ -2858,6 +2885,7 @@ Añadiremos redundancia de servidores para evitar la pérdida de mensajes. Save and update group profile + Guardar y actualizar perfil del grupo No comment provided by engineer. @@ -2887,6 +2915,7 @@ Añadiremos redundancia de servidores para evitar la pérdida de mensajes. Save profile password + Guardar contraseña de perfil No comment provided by engineer. @@ -2896,10 +2925,12 @@ Añadiremos redundancia de servidores para evitar la pérdida de mensajes. Save servers? + ¿Guardar servidores? No comment provided by engineer. Save welcome message? + ¿Guardar mensaje de bienvenida? No comment provided by engineer. @@ -3054,6 +3085,7 @@ Añadiremos redundancia de servidores para evitar la pérdida de mensajes. Set the message shown to new members! + ¡Establece el mensaje mostrado a los miembros nuevos! No comment provided by engineer. @@ -3083,7 +3115,7 @@ Añadiremos redundancia de servidores para evitar la pérdida de mensajes. Share one-time invitation link - Compartir enlace único de invitación + Compartir enlace de invitación de un uso No comment provided by engineer. @@ -3138,7 +3170,7 @@ Añadiremos redundancia de servidores para evitar la pérdida de mensajes. SimpleX one-time invitation - Invitación única SimpleX + Invitación SimpleX de un uso simplex link type @@ -3238,6 +3270,7 @@ Añadiremos redundancia de servidores para evitar la pérdida de mensajes. Tap to activate profile. + Pulsa para activar el perfil. No comment provided by engineer. @@ -3367,10 +3400,12 @@ Añadiremos redundancia de servidores para evitar la pérdida de mensajes. There should be at least one user profile. + Debe haber al menos un perfil de usuario. No comment provided by engineer. There should be at least one visible user profile. + Debe haber al menos un perfil de usuario visible. No comment provided by engineer. @@ -3442,6 +3477,7 @@ Se te pedirá que completes la autenticación antes de activar esta función. To reveal your hidden profile, enter a full password into a search field in **Your chat profiles** page. + Para hacer visible tu perfil oculto, introduce la contraseña completa en el campo de búsqueda de la página **Tus perfiles Chat**. No comment provided by engineer. @@ -3501,6 +3537,7 @@ Se te pedirá que completes la autenticación antes de activar esta función. Unhide + Mostrar No comment provided by engineer. @@ -3779,6 +3816,8 @@ Para conectarte, pide a tu contacto que cree otro enlace de conexión y comprueb You can hide or mute a user profile - swipe it to the right. SimpleX Lock must be enabled. + Puedes ocultar o silenciar un perfil de usuario: deslízalo hacia la derecha. +SimpleX Lock debe estar activado. No comment provided by engineer. @@ -3898,6 +3937,7 @@ SimpleX Lock must be enabled. You will still receive calls and notifications from muted profiles when they are active. + Seguirás recibiendo llamadas y notificaciones de los perfiles silenciados cuando estén activos. No comment provided by engineer. @@ -4331,7 +4371,7 @@ Los servidores de SimpleX no pueden ver tu perfil. incognito via one-time link - Incógnito mediante enlace único + Incógnito mediante enlace de un uso chat list item description @@ -4487,7 +4527,7 @@ Los servidores de SimpleX no pueden ver tu perfil. peer-to-peer - entre particulares + p2p No comment provided by engineer. @@ -4572,12 +4612,12 @@ Los servidores de SimpleX no pueden ver tu perfil. via one-time link - mediante enlace único + mediante enlace de un uso chat list item description via relay - mediante servidor de retransmisión + mediante servidor relay No comment provided by engineer. @@ -4647,12 +4687,12 @@ Los servidores de SimpleX no pueden ver tu perfil. you shared one-time link - has compartido un enlace único + has compartido un enlace de un uso chat list item description you shared one-time link incognito - has compartido un enlace único en módo incógnito + has compartido enlace de un uso en modo incógnito chat list item description diff --git a/apps/ios/SimpleX Localizations/fi.xcloc/Localized Contents/fi.xliff b/apps/ios/SimpleX Localizations/fi.xcloc/Localized Contents/fi.xliff new file mode 100644 index 0000000000..c82a08c4be --- /dev/null +++ b/apps/ios/SimpleX Localizations/fi.xcloc/Localized Contents/fi.xliff @@ -0,0 +1,3801 @@ + + + +
+ +
+ + + + + No comment provided by engineer. + + + + No comment provided by engineer. + + + + No comment provided by engineer. + + + + No comment provided by engineer. + + + ( + No comment provided by engineer. + + + (can be copied) + No comment provided by engineer. + + + !1 colored! + No comment provided by engineer. + + + #secret# + No comment provided by engineer. + + + %@ + No comment provided by engineer. + + + %@ %@ + No comment provided by engineer. + + + %@ / %@ + No comment provided by engineer. + + + %@ is connected! + notification title + + + %@ is not verified + No comment provided by engineer. + + + %@ is verified + No comment provided by engineer. + + + %@ wants to connect! + notification title + + + %d days + message ttl + + + %d hours + message ttl + + + %d min + message ttl + + + %d months + message ttl + + + %d sec + message ttl + + + %d skipped message(s) + integrity error chat item + + + %lld + No comment provided by engineer. + + + %lld %@ + No comment provided by engineer. + + + %lld contact(s) selected + No comment provided by engineer. + + + %lld file(s) with total size of %@ + No comment provided by engineer. + + + %lld members + No comment provided by engineer. + + + %lld second(s) + No comment provided by engineer. + + + %lldd + No comment provided by engineer. + + + %lldh + No comment provided by engineer. + + + %lldk + No comment provided by engineer. + + + %lldm + No comment provided by engineer. + + + %lldmth + No comment provided by engineer. + + + %llds + No comment provided by engineer. + + + %lldw + No comment provided by engineer. + + + ( + No comment provided by engineer. + + + ) + No comment provided by engineer. + + + **Add new contact**: to create your one-time QR Code or link for your contact. + No comment provided by engineer. + + + **Create link / QR code** for your contact to use. + No comment provided by engineer. + + + **More private**: check new messages every 20 minutes. Device token is shared with SimpleX Chat server, but not how many contacts or messages you have. + No comment provided by engineer. + + + **Most private**: do not use SimpleX Chat notifications server, check messages periodically in the background (depends on how often you use the app). + No comment provided by engineer. + + + **Paste received link** or open it in the browser and tap **Open in mobile app**. + No comment provided by engineer. + + + **Please note**: you will NOT be able to recover or change passphrase if you lose it. + No comment provided by engineer. + + + **Recommended**: device token and notifications are sent to SimpleX Chat notification server, but not the message content, size or who it is from. + No comment provided by engineer. + + + **Scan QR code**: to connect to your contact in person or via video call. + No comment provided by engineer. + + + **Warning**: Instant push notifications require passphrase saved in Keychain. + No comment provided by engineer. + + + **e2e encrypted** audio call + No comment provided by engineer. + + + **e2e encrypted** video call + No comment provided by engineer. + + + \*bold* + No comment provided by engineer. + + + , + No comment provided by engineer. + + + . + No comment provided by engineer. + + + 1 day + message ttl + + + 1 hour + message ttl + + + 1 month + message ttl + + + 1 week + message ttl + + + 2 weeks + message ttl + + + 6 + No comment provided by engineer. + + + : + No comment provided by engineer. + + + A new contact + notification title + + + A random profile will be sent to the contact that you received this link from + No comment provided by engineer. + + + A random profile will be sent to your contact + No comment provided by engineer. + + + A separate TCP connection will be used **for each chat profile you have in the app**. + No comment provided by engineer. + + + A separate TCP connection will be used **for each contact and group member**. +**Please note**: if you have many connections, your battery and traffic consumption can be substantially higher and some connections may fail. + No comment provided by engineer. + + + About SimpleX + No comment provided by engineer. + + + About SimpleX Chat + No comment provided by engineer. + + + Accent color + No comment provided by engineer. + + + Accept + accept contact request via notification + accept incoming call via notification + + + Accept contact + No comment provided by engineer. + + + Accept contact request from %@? + notification body + + + Accept incognito + No comment provided by engineer. + + + Accept requests + No comment provided by engineer. + + + Add preset servers + No comment provided by engineer. + + + Add profile + No comment provided by engineer. + + + Add servers by scanning QR codes. + No comment provided by engineer. + + + Add server… + No comment provided by engineer. + + + Add to another device + No comment provided by engineer. + + + Add welcome message + No comment provided by engineer. + + + Admins can create the links to join groups. + No comment provided by engineer. + + + Advanced network settings + No comment provided by engineer. + + + All chats and messages will be deleted - this cannot be undone! + No comment provided by engineer. + + + All group members will remain connected. + No comment provided by engineer. + + + All messages will be deleted - this cannot be undone! The messages will be deleted ONLY for you. + No comment provided by engineer. + + + All your contacts will remain connected + No comment provided by engineer. + + + Allow + No comment provided by engineer. + + + Allow disappearing messages only if your contact allows it to you. + No comment provided by engineer. + + + Allow irreversible message deletion only if your contact allows it to you. + No comment provided by engineer. + + + Allow sending direct messages to members. + No comment provided by engineer. + + + Allow sending disappearing messages. + No comment provided by engineer. + + + Allow to irreversibly delete sent messages. + No comment provided by engineer. + + + Allow to send voice messages. + No comment provided by engineer. + + + Allow voice messages only if your contact allows them. + No comment provided by engineer. + + + Allow voice messages? + No comment provided by engineer. + + + Allow your contacts to irreversibly delete sent messages. + No comment provided by engineer. + + + Allow your contacts to send disappearing messages. + No comment provided by engineer. + + + Allow your contacts to send voice messages. + No comment provided by engineer. + + + Already connected? + No comment provided by engineer. + + + Always use relay + No comment provided by engineer. + + + Answer call + No comment provided by engineer. + + + App build: %@ + No comment provided by engineer. + + + App icon + No comment provided by engineer. + + + App version + No comment provided by engineer. + + + App version: v%@ + No comment provided by engineer. + + + Appearance + No comment provided by engineer. + + + Attach + No comment provided by engineer. + + + Audio & video calls + No comment provided by engineer. + + + Audio and video calls + No comment provided by engineer. + + + Authentication failed + No comment provided by engineer. + + + Authentication is required before the call is connected, but you may miss calls. + No comment provided by engineer. + + + Authentication unavailable + No comment provided by engineer. + + + Auto-accept contact requests + No comment provided by engineer. + + + Auto-accept images + No comment provided by engineer. + + + Automatically + No comment provided by engineer. + + + Back + No comment provided by engineer. + + + Both you and your contact can irreversibly delete sent messages. + No comment provided by engineer. + + + Both you and your contact can send disappearing messages. + No comment provided by engineer. + + + Both you and your contact can send voice messages. + 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). + No comment provided by engineer. + + + Call already ended! + No comment provided by engineer. + + + Calls + No comment provided by engineer. + + + Can't delete user profile! + No comment provided by engineer. + + + Can't invite contact! + No comment provided by engineer. + + + Can't invite contacts! + No comment provided by engineer. + + + Cancel + No comment provided by engineer. + + + Cannot access keychain to save database password + No comment provided by engineer. + + + Cannot receive file + No comment provided by engineer. + + + Change + No comment provided by engineer. + + + Change database passphrase? + No comment provided by engineer. + + + Change member role? + No comment provided by engineer. + + + Change receiving address + No comment provided by engineer. + + + Change receiving address? + No comment provided by engineer. + + + Change role + No comment provided by engineer. + + + Chat archive + No comment provided by engineer. + + + Chat console + No comment provided by engineer. + + + Chat database + No comment provided by engineer. + + + Chat database deleted + No comment provided by engineer. + + + Chat database imported + No comment provided by engineer. + + + Chat is running + No comment provided by engineer. + + + Chat is stopped + No comment provided by engineer. + + + Chat preferences + No comment provided by engineer. + + + Chats + No comment provided by engineer. + + + Check server address and try again. + No comment provided by engineer. + + + Chinese and Spanish interface + No comment provided by engineer. + + + Choose file + No comment provided by engineer. + + + Choose from library + No comment provided by engineer. + + + Clear + No comment provided by engineer. + + + Clear conversation + No comment provided by engineer. + + + Clear conversation? + No comment provided by engineer. + + + Clear verification + No comment provided by engineer. + + + Colors + No comment provided by engineer. + + + Compare security codes with your contacts. + No comment provided by engineer. + + + Configure ICE servers + No comment provided by engineer. + + + Confirm + No comment provided by engineer. + + + Confirm new passphrase… + No comment provided by engineer. + + + Confirm password + No comment provided by engineer. + + + Connect + server test step + + + Connect via contact link? + No comment provided by engineer. + + + Connect via group link? + No comment provided by engineer. + + + Connect via link + No comment provided by engineer. + + + Connect via link / QR code + No comment provided by engineer. + + + Connect via one-time link? + No comment provided by engineer. + + + Connecting to server… + No comment provided by engineer. + + + Connecting to server… (error: %@) + No comment provided by engineer. + + + Connection + No comment provided by engineer. + + + Connection error + No comment provided by engineer. + + + Connection error (AUTH) + No comment provided by engineer. + + + Connection request + No comment provided by engineer. + + + Connection request sent! + No comment provided by engineer. + + + Connection timeout + No comment provided by engineer. + + + Contact allows + No comment provided by engineer. + + + Contact already exists + No comment provided by engineer. + + + Contact and all messages will be deleted - this cannot be undone! + No comment provided by engineer. + + + Contact hidden: + notification + + + Contact is connected + notification + + + Contact is not connected yet! + No comment provided by engineer. + + + Contact name + No comment provided by engineer. + + + Contact preferences + No comment provided by engineer. + + + Contact requests + No comment provided by engineer. + + + Contacts can mark messages for deletion; you will be able to view them. + No comment provided by engineer. + + + Copy + chat item action + + + Core built at: %@ + No comment provided by engineer. + + + Core version: v%@ + No comment provided by engineer. + + + Create + No comment provided by engineer. + + + Create address + No comment provided by engineer. + + + Create group link + No comment provided by engineer. + + + Create link + No comment provided by engineer. + + + Create one-time invitation link + No comment provided by engineer. + + + Create queue + server test step + + + Create secret group + No comment provided by engineer. + + + Create your profile + No comment provided by engineer. + + + Created on %@ + No comment provided by engineer. + + + Current passphrase… + No comment provided by engineer. + + + Currently maximum supported file size is %@. + No comment provided by engineer. + + + Dark + No comment provided by engineer. + + + Database ID + No comment provided by engineer. + + + Database encrypted! + No comment provided by engineer. + + + Database encryption passphrase will be updated and stored in the keychain. + + No comment provided by engineer. + + + Database encryption passphrase will be updated. + + No comment provided by engineer. + + + Database error + No comment provided by engineer. + + + Database is encrypted using a random passphrase, you can change it. + No comment provided by engineer. + + + Database is encrypted using a random passphrase. Please change it before exporting. + No comment provided by engineer. + + + Database passphrase + No comment provided by engineer. + + + Database passphrase & export + 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 will be encrypted and the passphrase stored in the keychain. + + No comment provided by engineer. + + + Database will be encrypted. + + No comment provided by engineer. + + + Database will be migrated when the app restarts + No comment provided by engineer. + + + Decentralized + No comment provided by engineer. + + + Delete + chat item action + + + Delete Contact + No comment provided by engineer. + + + Delete address + No comment provided by engineer. + + + Delete address? + No comment provided by engineer. + + + Delete after + No comment provided by engineer. + + + Delete all files + No comment provided by engineer. + + + Delete archive + No comment provided by engineer. + + + Delete chat archive? + No comment provided by engineer. + + + Delete chat profile? + No comment provided by engineer. + + + Delete connection + No comment provided by engineer. + + + Delete contact + No comment provided by engineer. + + + Delete contact? + No comment provided by engineer. + + + Delete database + No comment provided by engineer. + + + Delete files and media? + No comment provided by engineer. + + + Delete files for all chat profiles + No comment provided by engineer. + + + Delete for everyone + chat feature + + + Delete for me + No comment provided by engineer. + + + Delete group + No comment provided by engineer. + + + Delete group? + No comment provided by engineer. + + + Delete invitation + No comment provided by engineer. + + + Delete link + No comment provided by engineer. + + + Delete link? + No comment provided by engineer. + + + Delete member message? + No comment provided by engineer. + + + Delete message? + No comment provided by engineer. + + + Delete messages + No comment provided by engineer. + + + Delete messages after + No comment provided by engineer. + + + Delete old database + No comment provided by engineer. + + + Delete old database? + No comment provided by engineer. + + + Delete pending connection + No comment provided by engineer. + + + Delete pending connection? + No comment provided by engineer. + + + Delete queue + server test step + + + Delete user profile? + No comment provided by engineer. + + + Description + No comment provided by engineer. + + + Develop + No comment provided by engineer. + + + Developer tools + No comment provided by engineer. + + + Device + No comment provided by engineer. + + + Device authentication is disabled. Turning off SimpleX Lock. + No comment provided by engineer. + + + Device authentication is not enabled. You can turn on SimpleX Lock via Settings, once you enable device authentication. + No comment provided by engineer. + + + Different names, avatars and transport isolation. + No comment provided by engineer. + + + Direct messages + chat feature + + + Direct messages between members are prohibited in this group. + No comment provided by engineer. + + + Disable SimpleX Lock + authentication reason + + + Disappearing messages + chat feature + + + Disappearing messages are prohibited in this chat. + No comment provided by engineer. + + + Disappearing messages are prohibited in this group. + No comment provided by engineer. + + + Disconnect + server test step + + + Display name + No comment provided by engineer. + + + Display name: + No comment provided by engineer. + + + Do NOT use SimpleX for emergency calls. + No comment provided by engineer. + + + Do it later + No comment provided by engineer. + + + Don't show again + No comment provided by engineer. + + + Duplicate display name! + No comment provided by engineer. + + + Edit + chat item action + + + Edit group profile + No comment provided by engineer. + + + Enable + No comment provided by engineer. + + + Enable SimpleX Lock + authentication reason + + + Enable TCP keep-alive + No comment provided by engineer. + + + Enable automatic message deletion? + No comment provided by engineer. + + + Enable instant notifications? + No comment provided by engineer. + + + Enable notifications + No comment provided by engineer. + + + Enable periodic notifications? + No comment provided by engineer. + + + Encrypt + No comment provided by engineer. + + + Encrypt database? + No comment provided by engineer. + + + Encrypted database + No comment provided by engineer. + + + Encrypted message or another event + notification + + + Encrypted message: database error + notification + + + Encrypted message: keychain error + notification + + + Encrypted message: no passphrase + notification + + + Encrypted message: unexpected error + notification + + + Enter correct passphrase. + No comment provided by engineer. + + + Enter passphrase… + No comment provided by engineer. + + + Enter password above to show! + No comment provided by engineer. + + + Enter server manually + No comment provided by engineer. + + + Error + No comment provided by engineer. + + + Error accepting contact request + No comment provided by engineer. + + + Error accessing database file + No comment provided by engineer. + + + Error adding member(s) + No comment provided by engineer. + + + Error changing address + No comment provided by engineer. + + + Error changing role + No comment provided by engineer. + + + Error changing setting + No comment provided by engineer. + + + Error creating address + No comment provided by engineer. + + + Error creating group + No comment provided by engineer. + + + Error creating group link + No comment provided by engineer. + + + Error creating profile! + No comment provided by engineer. + + + Error deleting chat database + No comment provided by engineer. + + + Error deleting chat! + No comment provided by engineer. + + + Error deleting connection + No comment provided by engineer. + + + Error deleting contact + No comment provided by engineer. + + + Error deleting database + No comment provided by engineer. + + + Error deleting old database + No comment provided by engineer. + + + Error deleting token + No comment provided by engineer. + + + Error deleting user profile + No comment provided by engineer. + + + Error enabling notifications + No comment provided by engineer. + + + Error encrypting database + No comment provided by engineer. + + + Error exporting chat database + No comment provided by engineer. + + + Error importing chat database + No comment provided by engineer. + + + Error joining group + No comment provided by engineer. + + + Error receiving file + No comment provided by engineer. + + + Error removing member + No comment provided by engineer. + + + Error saving ICE servers + No comment provided by engineer. + + + Error saving SMP servers + No comment provided by engineer. + + + Error saving group profile + No comment provided by engineer. + + + Error saving passphrase to keychain + No comment provided by engineer. + + + Error saving user password + No comment provided by engineer. + + + Error sending message + No comment provided by engineer. + + + Error starting chat + No comment provided by engineer. + + + Error stopping chat + No comment provided by engineer. + + + Error switching profile! + No comment provided by engineer. + + + Error updating group link + No comment provided by engineer. + + + Error updating message + No comment provided by engineer. + + + Error updating settings + No comment provided by engineer. + + + Error updating user privacy + No comment provided by engineer. + + + Error: %@ + No comment provided by engineer. + + + Error: URL is invalid + No comment provided by engineer. + + + Error: no database file + No comment provided by engineer. + + + Exit without saving + No comment provided by engineer. + + + Export database + No comment provided by engineer. + + + Export error: + No comment provided by engineer. + + + Exported database archive. + No comment provided by engineer. + + + Exporting database archive... + No comment provided by engineer. + + + Failed to remove passphrase + No comment provided by engineer. + + + File will be received when your contact is online, please wait or check later! + No comment provided by engineer. + + + File: %@ + No comment provided by engineer. + + + Files & media + No comment provided by engineer. + + + For console + No comment provided by engineer. + + + French interface + No comment provided by engineer. + + + Full link + 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! + No comment provided by engineer. + + + Further reduced battery usage + No comment provided by engineer. + + + GIFs and stickers + No comment provided by engineer. + + + Group + No comment provided by engineer. + + + Group display name + No comment provided by engineer. + + + Group full name (optional) + No comment provided by engineer. + + + Group image + No comment provided by engineer. + + + Group invitation + No comment provided by engineer. + + + Group invitation expired + No comment provided by engineer. + + + Group invitation is no longer valid, it was removed by sender. + No comment provided by engineer. + + + Group link + No comment provided by engineer. + + + Group links + No comment provided by engineer. + + + Group members can irreversibly delete sent messages. + No comment provided by engineer. + + + Group members can send direct messages. + No comment provided by engineer. + + + Group members can send disappearing messages. + No comment provided by engineer. + + + Group members can send voice messages. + No comment provided by engineer. + + + Group message: + notification + + + Group moderation + No comment provided by engineer. + + + Group preferences + No comment provided by engineer. + + + Group profile + No comment provided by engineer. + + + Group profile is stored on members' devices, not on the servers. + No comment provided by engineer. + + + Group welcome message + No comment provided by engineer. + + + Group will be deleted for all members - this cannot be undone! + No comment provided by engineer. + + + Group will be deleted for you - this cannot be undone! + No comment provided by engineer. + + + Help + No comment provided by engineer. + + + Hidden + No comment provided by engineer. + + + Hidden chat profiles + No comment provided by engineer. + + + Hidden profile password + No comment provided by engineer. + + + Hide + chat item action + + + Hide app screen in the recent apps. + No comment provided by engineer. + + + Hide profile + No comment provided by engineer. + + + How SimpleX works + No comment provided by engineer. + + + How it works + No comment provided by engineer. + + + How to + No comment provided by engineer. + + + How to use it + No comment provided by engineer. + + + How to use your servers + No comment provided by engineer. + + + ICE servers (one per line) + No comment provided by engineer. + + + If you can't meet in person, **show QR code in the video call**, or share the link. + No comment provided by engineer. + + + If you cannot meet in person, you can **scan QR code in the video call**, or your contact can share an invitation link. + No comment provided by engineer. + + + If you need to use the chat now tap **Do it later** below (you will be offered to migrate the database when you restart the app). + No comment provided by engineer. + + + Ignore + No comment provided by engineer. + + + Image will be received when your contact is online, please wait or check later! + No comment provided by engineer. + + + Immune to spam and abuse + No comment provided by engineer. + + + Import + No comment provided by engineer. + + + Import chat database? + No comment provided by engineer. + + + Import database + No comment provided by engineer. + + + Improved privacy and security + No comment provided by engineer. + + + Improved server configuration + No comment provided by engineer. + + + Incognito + No comment provided by engineer. + + + Incognito mode + No comment provided by engineer. + + + Incognito mode is not supported here - your main profile will be sent to group members + No comment provided by engineer. + + + Incognito mode protects the privacy of your main profile name and image — for each new contact a new random profile is created. + No comment provided by engineer. + + + Incoming audio call + notification + + + Incoming call + notification + + + Incoming video call + notification + + + Incorrect security code! + No comment provided by engineer. + + + Install [SimpleX Chat for terminal](https://github.com/simplex-chat/simplex-chat) + No comment provided by engineer. + + + Instant push notifications will be hidden! + + No comment provided by engineer. + + + Instantly + No comment provided by engineer. + + + Interface + No comment provided by engineer. + + + Invalid connection link + No comment provided by engineer. + + + Invalid server address! + No comment provided by engineer. + + + Invitation expired! + No comment provided by engineer. + + + Invite members + No comment provided by engineer. + + + Invite to group + No comment provided by engineer. + + + Irreversible message deletion + No comment provided by engineer. + + + Irreversible message deletion is prohibited in this chat. + No comment provided by engineer. + + + Irreversible message deletion is prohibited in this group. + No comment provided by engineer. + + + It allows having many anonymous connections without any shared data between them in a single chat profile. + No comment provided by engineer. + + + It can happen when: +1. The messages expire on the server if they were not received for 30 days, +2. The server you use to receive the messages from this contact was updated and restarted. +3. The connection is compromised. +Please connect to the developers via Settings to receive the updates about the servers. +We will be adding server redundancy to prevent lost messages. + No comment provided by engineer. + + + It seems like you are already connected via this link. If it is not the case, there was an error (%@). + No comment provided by engineer. + + + Italian interface + No comment provided by engineer. + + + Join + No comment provided by engineer. + + + Join group + No comment provided by engineer. + + + Join incognito + No comment provided by engineer. + + + Joining group + No comment provided by engineer. + + + Keychain error + No comment provided by engineer. + + + LIVE + No comment provided by engineer. + + + Large file! + No comment provided by engineer. + + + Leave + No comment provided by engineer. + + + Leave group + No comment provided by engineer. + + + Leave group? + No comment provided by engineer. + + + Light + No comment provided by engineer. + + + Limitations + No comment provided by engineer. + + + Live message! + No comment provided by engineer. + + + Live messages + No comment provided by engineer. + + + Local name + No comment provided by engineer. + + + Local profile data only + No comment provided by engineer. + + + Make a private connection + No comment provided by engineer. + + + Make profile private! + No comment provided by engineer. + + + Make sure SMP server addresses are in correct format, line separated and are not duplicated (%@). + No comment provided by engineer. + + + Make sure WebRTC ICE server addresses are in correct format, line separated and are not duplicated. + No comment provided by engineer. + + + Many people asked: *if SimpleX has no user identifiers, how can it deliver messages?* + No comment provided by engineer. + + + Mark deleted for everyone + No comment provided by engineer. + + + Mark read + No comment provided by engineer. + + + Mark verified + No comment provided by engineer. + + + Markdown in messages + No comment provided by engineer. + + + Max 30 seconds, received instantly. + No comment provided by engineer. + + + Member + No comment provided by engineer. + + + Member role will be changed to "%@". All group members will be notified. + No comment provided by engineer. + + + Member role will be changed to "%@". The member will receive a new invitation. + No comment provided by engineer. + + + Member will be removed from group - this cannot be undone! + No comment provided by engineer. + + + Message delivery error + No comment provided by engineer. + + + Message draft + No comment provided by engineer. + + + Message text + No comment provided by engineer. + + + Messages + No comment provided by engineer. + + + Migrating database archive... + No comment provided by engineer. + + + Migration error: + No comment provided by engineer. + + + Migration failed. Tap **Skip** below to continue using the current database. Please report the issue to the app developers via chat or email [chat@simplex.chat](mailto:chat@simplex.chat). + No comment provided by engineer. + + + Migration is completed + No comment provided by engineer. + + + Moderate + chat item action + + + More improvements are coming soon! + No comment provided by engineer. + + + Most likely this contact has deleted the connection with you. + No comment provided by engineer. + + + Multiple chat profiles + No comment provided by engineer. + + + Mute + No comment provided by engineer. + + + Muted when inactive! + No comment provided by engineer. + + + Name + No comment provided by engineer. + + + Network & servers + No comment provided by engineer. + + + Network settings + No comment provided by engineer. + + + Network status + No comment provided by engineer. + + + New contact request + notification + + + New contact: + notification + + + New database archive + No comment provided by engineer. + + + New in %@ + No comment provided by engineer. + + + New member role + No comment provided by engineer. + + + New message + notification + + + New passphrase… + No comment provided by engineer. + + + No + No comment provided by engineer. + + + No contacts selected + No comment provided by engineer. + + + No contacts to add + No comment provided by engineer. + + + No device token! + No comment provided by engineer. + + + Group not found! + No comment provided by engineer. + + + No permission to record voice message + No comment provided by engineer. + + + No received or sent files + No comment provided by engineer. + + + Notifications + No comment provided by engineer. + + + Notifications are disabled! + No comment provided by engineer. + + + Now admins can: +- delete members' messages. +- disable members ("observer" role) + No comment provided by engineer. + + + Off (Local) + No comment provided by engineer. + + + Ok + No comment provided by engineer. + + + Old database + No comment provided by engineer. + + + Old database archive + No comment provided by engineer. + + + One-time invitation link + No comment provided by engineer. + + + Onion hosts will be required for connection. Requires enabling VPN. + No comment provided by engineer. + + + Onion hosts will be used when available. Requires enabling VPN. + No comment provided by engineer. + + + Onion hosts will not be used. + No comment provided by engineer. + + + Only client devices store user profiles, contacts, groups, and messages sent with **2-layer end-to-end encryption**. + No comment provided by engineer. + + + Only group owners can change group preferences. + No comment provided by engineer. + + + Only group owners can enable voice messages. + No comment provided by engineer. + + + Only you can irreversibly delete messages (your contact can mark them for deletion). + No comment provided by engineer. + + + Only you can send disappearing messages. + No comment provided by engineer. + + + Only you can send voice messages. + No comment provided by engineer. + + + Only your contact can irreversibly delete messages (you can mark them for deletion). + No comment provided by engineer. + + + Only your contact can send disappearing messages. + No comment provided by engineer. + + + Only your contact can send voice messages. + No comment provided by engineer. + + + Open Settings + No comment provided by engineer. + + + Open chat + No comment provided by engineer. + + + Open chat console + authentication reason + + + Open user profiles + authentication reason + + + Open-source protocol and code – anybody can run the servers. + No comment provided by engineer. + + + Opening the link in the browser may reduce connection privacy and security. Untrusted SimpleX links will be red. + No comment provided by engineer. + + + PING count + No comment provided by engineer. + + + PING interval + No comment provided by engineer. + + + Password to show + No comment provided by engineer. + + + Paste + No comment provided by engineer. + + + Paste image + No comment provided by engineer. + + + Paste received link + No comment provided by engineer. + + + Paste the link you received into the box below to connect with your contact. + No comment provided by engineer. + + + People can connect to you only via the links you share. + No comment provided by engineer. + + + Periodically + No comment provided by engineer. + + + Please ask your contact to enable sending voice messages. + No comment provided by engineer. + + + Please check that you used the correct link or ask your contact to send you another one. + No comment provided by engineer. + + + Please check your network connection with %@ and try again. + No comment provided by engineer. + + + Please check yours and your contact preferences. + No comment provided by engineer. + + + Please contact group admin. + No comment provided by engineer. + + + Please enter correct current passphrase. + No comment provided by engineer. + + + Please enter the previous password after restoring database backup. This action can not be undone. + No comment provided by engineer. + + + Please restart the app and migrate the database to enable push notifications. + No comment provided by engineer. + + + Please store passphrase securely, you will NOT be able to access chat if you lose it. + No comment provided by engineer. + + + Please store passphrase securely, you will NOT be able to change it if you lose it. + No comment provided by engineer. + + + Possibly, certificate fingerprint in server address is incorrect + server test error + + + Preserve the last message draft, with attachments. + No comment provided by engineer. + + + Preset server + No comment provided by engineer. + + + Preset server address + No comment provided by engineer. + + + Privacy & security + No comment provided by engineer. + + + Privacy redefined + No comment provided by engineer. + + + Private filenames + No comment provided by engineer. + + + Profile and server connections + No comment provided by engineer. + + + Profile image + No comment provided by engineer. + + + Prohibit irreversible message deletion. + No comment provided by engineer. + + + Prohibit sending direct messages to members. + No comment provided by engineer. + + + Prohibit sending disappearing messages. + No comment provided by engineer. + + + Prohibit sending voice messages. + No comment provided by engineer. + + + Protect app screen + No comment provided by engineer. + + + Protect your chat profiles with a password! + No comment provided by engineer. + + + Protocol timeout + No comment provided by engineer. + + + Push notifications + No comment provided by engineer. + + + Rate the app + No comment provided by engineer. + + + Read + No comment provided by engineer. + + + Read more in our GitHub repository. + No comment provided by engineer. + + + Read more in our [GitHub repository](https://github.com/simplex-chat/simplex-chat#readme). + No comment provided by engineer. + + + Received file event + notification + + + Receiving via + No comment provided by engineer. + + + Recipients see updates as you type them. + No comment provided by engineer. + + + Reduced battery usage + No comment provided by engineer. + + + Reject + reject incoming call via notification + + + Reject contact (sender NOT notified) + No comment provided by engineer. + + + Reject contact request + No comment provided by engineer. + + + Relay server is only used if necessary. Another party can observe your IP address. + No comment provided by engineer. + + + Relay server protects your IP address, but it can observe the duration of the call. + No comment provided by engineer. + + + Remove + No comment provided by engineer. + + + Remove member + No comment provided by engineer. + + + Remove member? + No comment provided by engineer. + + + Remove passphrase from keychain? + No comment provided by engineer. + + + Reply + chat item action + + + Required + No comment provided by engineer. + + + Reset + No comment provided by engineer. + + + Reset colors + No comment provided by engineer. + + + Reset to defaults + No comment provided by engineer. + + + Restart the app to create a new chat profile + No comment provided by engineer. + + + Restart the app to use imported chat database + No comment provided by engineer. + + + Restore + No comment provided by engineer. + + + Restore database backup + No comment provided by engineer. + + + Restore database backup? + No comment provided by engineer. + + + Restore database error + No comment provided by engineer. + + + Reveal + chat item action + + + Revert + No comment provided by engineer. + + + Role + No comment provided by engineer. + + + Run chat + No comment provided by engineer. + + + SMP servers + No comment provided by engineer. + + + Save + chat item action + + + Save (and notify contacts) + No comment provided by engineer. + + + Save and notify contact + No comment provided by engineer. + + + Save and notify group members + No comment provided by engineer. + + + Save and update group profile + No comment provided by engineer. + + + Save archive + No comment provided by engineer. + + + Save group profile + No comment provided by engineer. + + + Save passphrase and open chat + No comment provided by engineer. + + + Save passphrase in Keychain + No comment provided by engineer. + + + Save preferences? + No comment provided by engineer. + + + Save profile password + No comment provided by engineer. + + + Save servers + No comment provided by engineer. + + + Save servers? + No comment provided by engineer. + + + Save welcome message? + No comment provided by engineer. + + + Saved WebRTC ICE servers will be removed + No comment provided by engineer. + + + Scan QR code + No comment provided by engineer. + + + Scan code + No comment provided by engineer. + + + Scan security code from your contact's app. + No comment provided by engineer. + + + Scan server QR code + No comment provided by engineer. + + + Search + No comment provided by engineer. + + + Secure queue + server test step + + + Security assessment + No comment provided by engineer. + + + Security code + No comment provided by engineer. + + + Send + No comment provided by engineer. + + + Send a live message - it will update for the recipient(s) as you type it + No comment provided by engineer. + + + Send direct message + No comment provided by engineer. + + + Send link previews + No comment provided by engineer. + + + Send live message + No comment provided by engineer. + + + Send notifications + No comment provided by engineer. + + + Send notifications: + No comment provided by engineer. + + + Send questions and ideas + No comment provided by engineer. + + + Send them from gallery or custom keyboards. + No comment provided by engineer. + + + Sender cancelled file transfer. + No comment provided by engineer. + + + Sender may have deleted the connection request. + No comment provided by engineer. + + + Sending via + No comment provided by engineer. + + + Sent file event + notification + + + Sent messages will be deleted after set time. + No comment provided by engineer. + + + Server requires authorization to create queues, check password + server test error + + + Server test failed! + No comment provided by engineer. + + + Servers + No comment provided by engineer. + + + Set 1 day + No comment provided by engineer. + + + Set contact name… + No comment provided by engineer. + + + Set group preferences + No comment provided by engineer. + + + Set passphrase to export + No comment provided by engineer. + + + Set the message shown to new members! + No comment provided by engineer. + + + Set timeouts for proxy/VPN + No comment provided by engineer. + + + Settings + No comment provided by engineer. + + + Share + chat item action + + + Share invitation link + No comment provided by engineer. + + + Share link + No comment provided by engineer. + + + Share one-time invitation link + No comment provided by engineer. + + + Show QR code + No comment provided by engineer. + + + Show calls in phone history + No comment provided by engineer. + + + Show preview + No comment provided by engineer. + + + SimpleX Chat security was [audited by Trail of Bits](https://simplex.chat/blog/20221108-simplex-chat-v4.2-security-audit-new-website.html). + No comment provided by engineer. + + + SimpleX Lock + No comment provided by engineer. + + + SimpleX Lock turned on + No comment provided by engineer. + + + SimpleX contact address + simplex link type + + + SimpleX encrypted message or connection event + notification + + + SimpleX group link + simplex link type + + + SimpleX links + No comment provided by engineer. + + + SimpleX one-time invitation + simplex link type + + + Skip + No comment provided by engineer. + + + Skipped messages + No comment provided by engineer. + + + Somebody + notification title + + + Start a new chat + No comment provided by engineer. + + + Start chat + No comment provided by engineer. + + + Start migration + No comment provided by engineer. + + + Stop + No comment provided by engineer. + + + Stop SimpleX + authentication reason + + + Stop chat to enable database actions + No comment provided by engineer. + + + Stop chat to export, import or delete chat database. You will not be able to receive and send messages while the chat is stopped. + No comment provided by engineer. + + + Stop chat? + No comment provided by engineer. + + + Support SimpleX Chat + No comment provided by engineer. + + + System + No comment provided by engineer. + + + TCP connection timeout + No comment provided by engineer. + + + TCP_KEEPCNT + No comment provided by engineer. + + + TCP_KEEPIDLE + No comment provided by engineer. + + + TCP_KEEPINTVL + No comment provided by engineer. + + + Take picture + No comment provided by engineer. + + + Tap button + No comment provided by engineer. + + + Tap to activate profile. + No comment provided by engineer. + + + Tap to join + No comment provided by engineer. + + + Tap to join incognito + No comment provided by engineer. + + + Tap to start a new chat + No comment provided by engineer. + + + Test failed at step %@. + server test failure + + + Test server + No comment provided by engineer. + + + Test servers + No comment provided by engineer. + + + Tests failed! + No comment provided by engineer. + + + Thank you for installing SimpleX Chat! + No comment provided by engineer. + + + Thanks to the users – [contribute via Weblate](https://github.com/simplex-chat/simplex-chat/tree/stable#translate-the-apps)! + No comment provided by engineer. + + + Thanks to the users – contribute via Weblate! + No comment provided by engineer. + + + The 1st platform without any user identifiers – private by design. + No comment provided by engineer. + + + The app can notify you when you receive messages or contact requests - please open settings to enable. + No comment provided by engineer. + + + The attempt to change database passphrase was not completed. + No comment provided by engineer. + + + The connection you accepted will be cancelled! + No comment provided by engineer. + + + The contact you shared this link with will NOT be able to connect! + No comment provided by engineer. + + + The created archive is available via app Settings / Database / Old database archive. + No comment provided by engineer. + + + The group is fully decentralized – it is visible only to the members. + No comment provided by engineer. + + + The message will be deleted for all members. + No comment provided by engineer. + + + The message will be marked as moderated for all members. + No comment provided by engineer. + + + The next generation of private messaging + No comment provided by engineer. + + + The old database was not removed during the migration, it can be deleted. + No comment provided by engineer. + + + The profile is only shared with your contacts. + No comment provided by engineer. + + + The sender will NOT be notified + No comment provided by engineer. + + + The servers for new connections of your current chat profile **%@**. + No comment provided by engineer. + + + Theme + No comment provided by engineer. + + + There should be at least one user profile. + No comment provided by engineer. + + + There should be at least one visible user profile. + No comment provided by engineer. + + + This action cannot be undone - all received and sent files and media will be deleted. Low resolution pictures will remain. + No comment provided by engineer. + + + This action cannot be undone - the messages sent and received earlier than selected will be deleted. It may take several minutes. + No comment provided by engineer. + + + This action cannot be undone - your profile, contacts, messages and files will be irreversibly lost. + No comment provided by engineer. + + + This feature is experimental! It will only work if the other client has version 4.2 installed. You should see the message in the conversation once the address change is completed – please check that you can still receive messages from this contact (or group member). + No comment provided by engineer. + + + This group no longer exists. + No comment provided by engineer. + + + This setting applies to messages in your current chat profile **%@**. + No comment provided by engineer. + + + To ask any questions and to receive updates: + No comment provided by engineer. + + + To find the profile used for an incognito connection, tap the contact or group name on top of the chat. + No comment provided by engineer. + + + To make a new connection + No comment provided by engineer. + + + To protect privacy, instead of user IDs used by all other platforms, SimpleX has identifiers for message queues, separate for each of your contacts. + No comment provided by engineer. + + + To protect timezone, image/voice files use UTC. + No comment provided by engineer. + + + To protect your information, turn on SimpleX Lock. +You will be prompted to complete authentication before this feature is enabled. + No comment provided by engineer. + + + To record voice message please grant permission to use Microphone. + No comment provided by engineer. + + + To reveal your hidden profile, enter a full password into a search field in **Your chat profiles** page. + No comment provided by engineer. + + + To support instant push notifications the chat database has to be migrated. + No comment provided by engineer. + + + To verify end-to-end encryption with your contact compare (or scan) the code on your devices. + No comment provided by engineer. + + + Transport isolation + No comment provided by engineer. + + + Trying to connect to the server used to receive messages from this contact (error: %@). + No comment provided by engineer. + + + Trying to connect to the server used to receive messages from this contact. + No comment provided by engineer. + + + Turn off + No comment provided by engineer. + + + Turn off notifications? + No comment provided by engineer. + + + Turn on + No comment provided by engineer. + + + Unable to record voice message + No comment provided by engineer. + + + Unexpected error: %@ + No comment provided by engineer. + + + Unexpected migration state + No comment provided by engineer. + + + Unhide + No comment provided by engineer. + + + Unknown caller + callkit banner + + + Unknown database error: %@ + No comment provided by engineer. + + + Unknown error + No comment provided by engineer. + + + Unless you use iOS call interface, enable Do Not Disturb mode to avoid interruptions. + No comment provided by engineer. + + + Unless your contact deleted the connection or this link was already used, it might be a bug - please report it. +To connect, please ask your contact to create another connection link and check that you have a stable network connection. + No comment provided by engineer. + + + Unlock + authentication reason + + + Unmute + No comment provided by engineer. + + + Unread + No comment provided by engineer. + + + Update + No comment provided by engineer. + + + Update .onion hosts setting? + No comment provided by engineer. + + + Update database passphrase + No comment provided by engineer. + + + Update network settings? + No comment provided by engineer. + + + Update transport isolation mode? + No comment provided by engineer. + + + Updating settings will re-connect the client to all servers. + No comment provided by engineer. + + + Updating this setting will re-connect the client to all servers. + No comment provided by engineer. + + + Use .onion hosts + No comment provided by engineer. + + + Use SimpleX Chat servers? + No comment provided by engineer. + + + Use chat + No comment provided by engineer. + + + Use for new connections + No comment provided by engineer. + + + Use iOS call interface + No comment provided by engineer. + + + Use server + No comment provided by engineer. + + + User profile + No comment provided by engineer. + + + Using .onion hosts requires compatible VPN provider. + No comment provided by engineer. + + + Using SimpleX Chat servers. + No comment provided by engineer. + + + Verify connection security + No comment provided by engineer. + + + Verify security code + No comment provided by engineer. + + + Via browser + No comment provided by engineer. + + + Video call + No comment provided by engineer. + + + View security code + No comment provided by engineer. + + + Voice messages + chat feature + + + Voice messages are prohibited in this chat. + No comment provided by engineer. + + + Voice messages are prohibited in this group. + No comment provided by engineer. + + + Voice messages prohibited! + No comment provided by engineer. + + + Voice message… + No comment provided by engineer. + + + Waiting for file + No comment provided by engineer. + + + Waiting for image + No comment provided by engineer. + + + WebRTC ICE servers + No comment provided by engineer. + + + Welcome %@! + No comment provided by engineer. + + + Welcome message + No comment provided by engineer. + + + What's new + No comment provided by engineer. + + + When available + No comment provided by engineer. + + + When you share an incognito profile with somebody, this profile will be used for the groups they invite you to. + No comment provided by engineer. + + + With optional welcome message. + No comment provided by engineer. + + + Wrong database passphrase + No comment provided by engineer. + + + Wrong passphrase! + No comment provided by engineer. + + + You + No comment provided by engineer. + + + You accepted connection + No comment provided by engineer. + + + You allow + No comment provided by engineer. + + + You already have a chat profile with the same display name. Please choose another name. + No comment provided by engineer. + + + You are already connected to %@. + No comment provided by engineer. + + + You are connected to the server used to receive messages from this contact. + No comment provided by engineer. + + + You are invited to group + No comment provided by engineer. + + + You can accept calls from lock screen, without device and app authentication. + No comment provided by engineer. + + + You can also connect by clicking the link. If it opens in the browser, click **Open in mobile app** button. + No comment provided by engineer. + + + You can hide or mute a user profile - swipe it to the right. +SimpleX Lock must be enabled. + No comment provided by engineer. + + + You can now send messages to %@ + notification body + + + You can set lock screen notification preview via settings. + No comment provided by engineer. + + + You can share a link or a QR code - anybody will be able to join the group. You won't lose members of the group if you later delete it. + No comment provided by engineer. + + + You can share your address as a link or as a QR code - anybody will be able to connect to you. You won't lose your contacts if you later delete it. + No comment provided by engineer. + + + You can start chat via app Settings / Database or by restarting the app + No comment provided by engineer. + + + You can use markdown to format messages: + No comment provided by engineer. + + + You can't send messages! + No comment provided by engineer. + + + You control through which server(s) **to receive** the messages, your contacts – the servers you use to message them. + No comment provided by engineer. + + + You could not be verified; please try again. + No comment provided by engineer. + + + You have no chats + No comment provided by engineer. + + + You have to enter passphrase every time the app starts - it is not stored on the device. + No comment provided by engineer. + + + You invited your contact + No comment provided by engineer. + + + You joined this group + No comment provided by engineer. + + + You joined this group. Connecting to inviting group member. + No comment provided by engineer. + + + You must use the most recent version of your chat database on one device ONLY, otherwise you may stop receiving the messages from some contacts. + No comment provided by engineer. + + + You need to allow your contact to send voice messages to be able to send them. + No comment provided by engineer. + + + You rejected group invitation + No comment provided by engineer. + + + You sent group invitation + No comment provided by engineer. + + + You will be connected to group when the group host's device is online, please wait or check later! + No comment provided by engineer. + + + You will be connected when your connection request is accepted, please wait or check later! + No comment provided by engineer. + + + You will be connected when your contact's device is online, please wait or check later! + No comment provided by engineer. + + + You will be required to authenticate when you start or resume the app after 30 seconds in background. + No comment provided by engineer. + + + You will join a group this link refers to and connect to its group members. + No comment provided by engineer. + + + You will still receive calls and notifications from muted profiles when they are active. + No comment provided by engineer. + + + You will stop receiving messages from this group. Chat history will be preserved. + No comment provided by engineer. + + + You're trying to invite contact with whom you've shared an incognito profile to the group in which you're using your main profile + No comment provided by engineer. + + + You're using an incognito profile for this group - to prevent sharing your main profile inviting contacts is not allowed + No comment provided by engineer. + + + Your ICE servers + No comment provided by engineer. + + + Your SMP servers + No comment provided by engineer. + + + Your SimpleX contact address + No comment provided by engineer. + + + Your calls + No comment provided by engineer. + + + Your chat database + No comment provided by engineer. + + + Your chat database is not encrypted - set passphrase to encrypt it. + No comment provided by engineer. + + + Your chat profile will be sent to group members + No comment provided by engineer. + + + Your chat profile will be sent to your contact + No comment provided by engineer. + + + Your chat profiles + No comment provided by engineer. + + + Your chats + No comment provided by engineer. + + + Your contact address + No comment provided by engineer. + + + Your contact can scan it from the app. + No comment provided by engineer. + + + Your contact needs to be online for the connection to complete. +You can cancel this connection and remove the contact (and try later with a new link). + No comment provided by engineer. + + + Your contact sent a file that is larger than currently supported maximum size (%@). + No comment provided by engineer. + + + Your contacts can allow full message deletion. + No comment provided by engineer. + + + Your current chat database will be DELETED and REPLACED with the imported one. + No comment provided by engineer. + + + Your current profile + No comment provided by engineer. + + + Your preferences + No comment provided by engineer. + + + Your privacy + No comment provided by engineer. + + + Your profile is stored on your device and shared only with your contacts. +SimpleX servers cannot see your profile. + No comment provided by engineer. + + + Your profile will be sent to the contact that you received this link from + No comment provided by engineer. + + + Your profile, contacts and delivered messages are stored on your device. + No comment provided by engineer. + + + Your random profile + No comment provided by engineer. + + + Your server + No comment provided by engineer. + + + Your server address + No comment provided by engineer. + + + Your settings + No comment provided by engineer. + + + [Contribute](https://github.com/simplex-chat/simplex-chat#contribute) + No comment provided by engineer. + + + [Send us email](mailto:chat@simplex.chat) + No comment provided by engineer. + + + [Star on GitHub](https://github.com/simplex-chat/simplex-chat) + No comment provided by engineer. + + + \_italic_ + No comment provided by engineer. + + + \`a + b` + No comment provided by engineer. + + + above, then choose: + No comment provided by engineer. + + + accepted call + call status + + + admin + member role + + + always + pref value + + + audio call (not e2e encrypted) + No comment provided by engineer. + + + bad message ID + integrity error chat item + + + bad message hash + integrity error chat item + + + bold + No comment provided by engineer. + + + call error + call status + + + call in progress + call status + + + calling… + call status + + + cancelled %@ + feature offered item + + + changed address for you + chat item text + + + changed role of %1$@ to %2$@ + rcv group event chat item + + + changed your role to %@ + rcv group event chat item + + + changing address for %@... + chat item text + + + changing address... + chat item text + + + colored + No comment provided by engineer. + + + complete + No comment provided by engineer. + + + connect to SimpleX Chat developers. + No comment provided by engineer. + + + connected + No comment provided by engineer. + + + connecting + No comment provided by engineer. + + + connecting (accepted) + No comment provided by engineer. + + + connecting (announced) + No comment provided by engineer. + + + connecting (introduced) + No comment provided by engineer. + + + connecting (introduction invitation) + No comment provided by engineer. + + + connecting call… + call status + + + connecting… + chat list item title + + + connection established + chat list item title (it should not be shown + + + connection:%@ + connection information + + + contact has e2e encryption + No comment provided by engineer. + + + contact has no e2e encryption + No comment provided by engineer. + + + creator + No comment provided by engineer. + + + default (%@) + pref value + + + deleted + deleted chat item + + + deleted group + rcv group event chat item + + + direct + connection level description + + + duplicate message + integrity error chat item + + + e2e encrypted + No comment provided by engineer. + + + enabled + enabled status + + + enabled for contact + enabled status + + + enabled for you + enabled status + + + ended + No comment provided by engineer. + + + ended call %@ + call status + + + error + No comment provided by engineer. + + + group deleted + No comment provided by engineer. + + + group profile updated + snd group event chat item + + + iOS Keychain is used to securely store passphrase - it allows receiving push notifications. + 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. + No comment provided by engineer. + + + incognito via contact address link + chat list item description + + + incognito via group link + chat list item description + + + incognito via one-time link + chat list item description + + + indirect (%d) + connection level description + + + invalid chat + invalid chat data + + + invalid chat data + No comment provided by engineer. + + + invalid data + invalid chat item + + + invitation to group %@ + group name + + + invited + No comment provided by engineer. + + + invited %@ + rcv group event chat item + + + invited to connect + chat list item title + + + invited via your group link + rcv group event chat item + + + italic + No comment provided by engineer. + + + join as %@ + No comment provided by engineer. + + + left + rcv group event chat item + + + marked deleted + marked deleted chat item preview text + + + member + member role + + + connected + rcv group event chat item + + + message received + notification + + + missed call + call status + + + moderated + moderated chat item + + + moderated by %@ + No comment provided by engineer. + + + never + No comment provided by engineer. + + + new message + notification + + + no + pref value + + + no e2e encryption + No comment provided by engineer. + + + observer + member role + + + off + enabled status + group pref value + + + offered %@ + feature offered item + + + offered %1$@: %2$@ + feature offered item + + + on + group pref value + + + or chat with the developers + No comment provided by engineer. + + + owner + member role + + + peer-to-peer + No comment provided by engineer. + + + received answer… + No comment provided by engineer. + + + received confirmation… + No comment provided by engineer. + + + rejected call + call status + + + removed + No comment provided by engineer. + + + removed %@ + rcv group event chat item + + + removed you + rcv group event chat item + + + sec + network option + + + secret + No comment provided by engineer. + + + starting… + No comment provided by engineer. + + + strike + No comment provided by engineer. + + + this contact + notification title + + + unknown + connection info + + + updated group profile + rcv group event chat item + + + v%@ (%@) + No comment provided by engineer. + + + via contact address link + chat list item description + + + via group link + chat list item description + + + via one-time link + chat list item description + + + via relay + No comment provided by engineer. + + + video call (not e2e encrypted) + No comment provided by engineer. + + + waiting for answer… + No comment provided by engineer. + + + waiting for confirmation… + No comment provided by engineer. + + + wants to connect to you! + No comment provided by engineer. + + + yes + pref value + + + you are invited to group + No comment provided by engineer. + + + you are observer + No comment provided by engineer. + + + you changed address + chat item text + + + you changed address for %@ + chat item text + + + you changed role for yourself to %@ + snd group event chat item + + + you changed role of %1$@ to %2$@ + snd group event chat item + + + you left + snd group event chat item + + + you removed %@ + snd group event chat item + + + you shared one-time link + chat list item description + + + you shared one-time link incognito + chat list item description + + + you: + No comment provided by engineer. + + + \~strike~ + No comment provided by engineer. + + +
+ +
+ +
+ + + SimpleX + Bundle name + + + SimpleX needs camera access to scan QR codes to connect to other users and for video calls. + Privacy - Camera Usage Description + + + SimpleX uses Face ID for local authentication + Privacy - Face ID Usage Description + + + SimpleX needs microphone access for audio and video calls, and to record voice messages. + Privacy - Microphone Usage Description + + + SimpleX needs access to Photo Library for saving captured and received media + Privacy - Photo Library Additions Usage Description + + +
+ +
+ +
+ + + SimpleX NSE + Bundle display name + + + SimpleX NSE + Bundle name + + + Copyright © 2022 SimpleX Chat. All rights reserved. + Copyright (human-readable) + + +
+
diff --git a/apps/ios/SimpleX Localizations/fr.xcloc/Localized Contents/fr.xliff b/apps/ios/SimpleX Localizations/fr.xcloc/Localized Contents/fr.xliff index 099327af49..ceb67e890d 100644 --- a/apps/ios/SimpleX Localizations/fr.xcloc/Localized Contents/fr.xliff +++ b/apps/ios/SimpleX Localizations/fr.xcloc/Localized Contents/fr.xliff @@ -387,6 +387,7 @@
Add welcome message + Ajouter un message d'accueil No comment provided by engineer. @@ -531,6 +532,7 @@ Audio and video calls + Appels audio et vidéo No comment provided by engineer. @@ -600,6 +602,7 @@ Can't delete user profile! + Impossible de supprimer le profil d'utilisateur ! No comment provided by engineer. @@ -709,6 +712,7 @@ Chinese and Spanish interface + Interface en chinois et en espagnol No comment provided by engineer. @@ -768,6 +772,7 @@ Confirm password + Confirmer le mot de passe No comment provided by engineer. @@ -1300,6 +1305,7 @@ Don't show again + Ne plus afficher No comment provided by engineer. @@ -1404,6 +1410,7 @@ Enter password above to show! + Entrez le mot de passe ci-dessus pour continuer ! No comment provided by engineer. @@ -1563,6 +1570,7 @@ Error saving user password + Erreur d'enregistrement du mot de passe de l'utilisateur No comment provided by engineer. @@ -1602,6 +1610,7 @@ Error updating user privacy + Erreur de mise à jour de la confidentialité de l'utilisateur No comment provided by engineer. @@ -1691,10 +1700,12 @@ Fully re-implemented - work in background! + Entièrement réimplémenté - fonctionne en arrière-plan ! No comment provided by engineer. Further reduced battery usage + Réduction accrue de l'utilisation de la batterie No comment provided by engineer. @@ -1774,6 +1785,7 @@ Group moderation + Modération de groupe No comment provided by engineer. @@ -1793,6 +1805,7 @@ Group welcome message + Message d'accueil du groupe No comment provided by engineer. @@ -1817,10 +1830,12 @@ Hidden chat profiles + Profils de chat cachés No comment provided by engineer. Hidden profile password + Mot de passe de profil caché No comment provided by engineer. @@ -1835,6 +1850,7 @@ Hide profile + Masquer le profil No comment provided by engineer. @@ -1962,6 +1978,10 @@ Code de sécurité incorrect ! No comment provided by engineer. + + Initial role + No comment provided by engineer. + Install [SimpleX Chat for terminal](https://github.com/simplex-chat/simplex-chat) Installer [SimpleX Chat pour terminal](https://github.com/simplex-chat/simplex-chat) @@ -2141,6 +2161,7 @@ Nous allons ajouter une redondance des serveurs pour éviter la perte de message Make profile private! + Rendre le profil privé ! No comment provided by engineer. @@ -2270,6 +2291,7 @@ Nous allons ajouter une redondance des serveurs pour éviter la perte de message Muted when inactive! + Mute en cas d'inactivité ! No comment provided by engineer. @@ -2376,6 +2398,9 @@ Nous allons ajouter une redondance des serveurs pour éviter la perte de message Now admins can: - delete members' messages. - disable members ("observer" role) + Désormais, les administrateurs peuvent : +- supprimer les messages des membres. +- désactiver des membres (rôle "observateur") No comment provided by engineer. @@ -2505,6 +2530,7 @@ Nous allons ajouter une redondance des serveurs pour éviter la perte de message Password to show + Mot de passe à afficher No comment provided by engineer. @@ -2659,6 +2685,7 @@ Nous allons ajouter une redondance des serveurs pour éviter la perte de message Protect your chat profiles with a password! + Protégez vos profils de chat par un mot de passe ! No comment provided by engineer. @@ -2858,6 +2885,7 @@ Nous allons ajouter une redondance des serveurs pour éviter la perte de message Save and update group profile + Sauvegarder et mettre à jour le profil du groupe No comment provided by engineer. @@ -2887,6 +2915,7 @@ Nous allons ajouter une redondance des serveurs pour éviter la perte de message Save profile password + Enregistrer le mot de passe du profil No comment provided by engineer. @@ -2896,10 +2925,12 @@ Nous allons ajouter une redondance des serveurs pour éviter la perte de message Save servers? + Sauvegarder les serveurs ? No comment provided by engineer. Save welcome message? + Sauvegarder le message d'accueil ? No comment provided by engineer. @@ -3054,6 +3085,7 @@ Nous allons ajouter une redondance des serveurs pour éviter la perte de message Set the message shown to new members! + Choisissez un message à l'attention des nouveaux membres ! No comment provided by engineer. @@ -3238,6 +3270,7 @@ Nous allons ajouter une redondance des serveurs pour éviter la perte de message Tap to activate profile. + Appuyez pour activer le profil. No comment provided by engineer. @@ -3367,10 +3400,12 @@ Nous allons ajouter une redondance des serveurs pour éviter la perte de message There should be at least one user profile. + Il doit y avoir au moins un profil d'utilisateur. No comment provided by engineer. There should be at least one visible user profile. + Il doit y avoir au moins un profil d'utilisateur visible. No comment provided by engineer. @@ -3442,6 +3477,7 @@ Vous serez invité à confirmer l'authentification avant que cette fonction ne s To reveal your hidden profile, enter a full password into a search field in **Your chat profiles** page. + Pour révéler votre profil caché, entrez un mot de passe complet dans le champ de recherche de la page **Vos profils de chat**. No comment provided by engineer. @@ -3501,6 +3537,7 @@ Vous serez invité à confirmer l'authentification avant que cette fonction ne s Unhide + Dévoiler No comment provided by engineer. @@ -3778,6 +3815,8 @@ Pour vous connecter, veuillez demander à votre contact de créer un autre lien You can hide or mute a user profile - swipe it to the right. SimpleX Lock must be enabled. + Vous pouvez masquer ou mettre en sourdine un profil d'utilisateur - faites-le glisser vers la droite. +SimpleX Lock doit être activé. No comment provided by engineer. @@ -3897,6 +3936,7 @@ SimpleX Lock must be enabled. You will still receive calls and notifications from muted profiles when they are active. + Vous continuerez à recevoir des appels et des notifications des profils mis en sourdine lorsqu'ils sont actifs. No comment provided by engineer. diff --git a/apps/ios/SimpleX Localizations/it.xcloc/Localized Contents/it.xliff b/apps/ios/SimpleX Localizations/it.xcloc/Localized Contents/it.xliff index 9f8ba15fc2..939cc66d9d 100644 --- a/apps/ios/SimpleX Localizations/it.xcloc/Localized Contents/it.xliff +++ b/apps/ios/SimpleX Localizations/it.xcloc/Localized Contents/it.xliff @@ -387,6 +387,7 @@ Add welcome message + Aggiungi messaggio di benvenuto No comment provided by engineer. @@ -531,6 +532,7 @@ Audio and video calls + Chiamate audio e video No comment provided by engineer. @@ -600,6 +602,7 @@ Can't delete user profile! + Impossibile eliminare il profilo utente! No comment provided by engineer. @@ -709,6 +712,7 @@ Chinese and Spanish interface + Interfaccia cinese e spagnola No comment provided by engineer. @@ -768,6 +772,7 @@ Confirm password + Conferma password No comment provided by engineer. @@ -1300,6 +1305,7 @@ Don't show again + Non mostrare più No comment provided by engineer. @@ -1404,6 +1410,7 @@ Enter password above to show! + Inserisci la password sopra per mostrare! No comment provided by engineer. @@ -1563,6 +1570,7 @@ Error saving user password + Errore nel salvataggio della password utente No comment provided by engineer. @@ -1602,6 +1610,7 @@ Error updating user privacy + Errore nell'aggiornamento della privacy dell'utente No comment provided by engineer. @@ -1691,10 +1700,12 @@ Fully re-implemented - work in background! + Completamente reimplementato - funziona in secondo piano! No comment provided by engineer. Further reduced battery usage + Ulteriore riduzione del consumo della batteria No comment provided by engineer. @@ -1774,6 +1785,7 @@ Group moderation + Moderazione del gruppo No comment provided by engineer. @@ -1793,6 +1805,7 @@ Group welcome message + Messaggio di benvenuto del gruppo No comment provided by engineer. @@ -1817,10 +1830,12 @@ Hidden chat profiles + Profili di chat nascosti No comment provided by engineer. Hidden profile password + Password del profilo nascosta No comment provided by engineer. @@ -1835,6 +1850,7 @@ Hide profile + Nascondi il profilo No comment provided by engineer. @@ -1962,6 +1978,10 @@ Codice di sicurezza sbagliato! No comment provided by engineer. + + Initial role + No comment provided by engineer. + Install [SimpleX Chat for terminal](https://github.com/simplex-chat/simplex-chat) Installa [Simplex Chat per terminale](https://github.com/simplex-chat/simplex-chat) @@ -2141,6 +2161,7 @@ Aggiungeremo la ridondanza del server per prevenire la perdita di messaggi. Make profile private! + Rendi privato il profilo! No comment provided by engineer. @@ -2270,6 +2291,7 @@ Aggiungeremo la ridondanza del server per prevenire la perdita di messaggi. Muted when inactive! + Silenzioso quando inattivo! No comment provided by engineer. @@ -2376,6 +2398,9 @@ Aggiungeremo la ridondanza del server per prevenire la perdita di messaggi.Now admins can: - delete members' messages. - disable members ("observer" role) + Ora gli amministratori possono: +- eliminare i messaggi dei membri. +- disattivare i membri (ruolo "osservatore") No comment provided by engineer. @@ -2505,6 +2530,7 @@ Aggiungeremo la ridondanza del server per prevenire la perdita di messaggi. Password to show + Password per mostrare No comment provided by engineer. @@ -2659,6 +2685,7 @@ Aggiungeremo la ridondanza del server per prevenire la perdita di messaggi. Protect your chat profiles with a password! + Proteggi i tuoi profili di chat con una password! No comment provided by engineer. @@ -2858,6 +2885,7 @@ Aggiungeremo la ridondanza del server per prevenire la perdita di messaggi. Save and update group profile + Salva e aggiorna il profilo del gruppo No comment provided by engineer. @@ -2887,6 +2915,7 @@ Aggiungeremo la ridondanza del server per prevenire la perdita di messaggi. Save profile password + Salva la password del profilo No comment provided by engineer. @@ -2896,10 +2925,12 @@ Aggiungeremo la ridondanza del server per prevenire la perdita di messaggi. Save servers? + Salvare i server? No comment provided by engineer. Save welcome message? + Salvare il messaggio di benvenuto? No comment provided by engineer. @@ -3054,6 +3085,7 @@ Aggiungeremo la ridondanza del server per prevenire la perdita di messaggi. Set the message shown to new members! + Imposta il messaggio mostrato ai nuovi membri! No comment provided by engineer. @@ -3238,6 +3270,7 @@ Aggiungeremo la ridondanza del server per prevenire la perdita di messaggi. Tap to activate profile. + Tocca per attivare il profilo. No comment provided by engineer. @@ -3367,10 +3400,12 @@ Aggiungeremo la ridondanza del server per prevenire la perdita di messaggi. There should be at least one user profile. + Deve esserci almeno un profilo utente. No comment provided by engineer. There should be at least one visible user profile. + Deve esserci almeno un profilo utente visibile. No comment provided by engineer. @@ -3442,6 +3477,7 @@ Ti verrà chiesto di completare l'autenticazione prima di attivare questa funzio To reveal your hidden profile, enter a full password into a search field in **Your chat profiles** page. + Per rivelare il tuo profilo nascosto, inserisci una password completa in un campo di ricerca nella pagina **I tuoi profili di chat**. No comment provided by engineer. @@ -3501,6 +3537,7 @@ Ti verrà chiesto di completare l'autenticazione prima di attivare questa funzio Unhide + Svela No comment provided by engineer. @@ -3778,6 +3815,8 @@ Per connetterti, chiedi al tuo contatto di creare un altro link di connessione e You can hide or mute a user profile - swipe it to the right. SimpleX Lock must be enabled. + Puoi nascondere o silenziare un profilo utente - scorrilo verso destra. +SimpleX Lock deve essere attivato. No comment provided by engineer. @@ -3897,6 +3936,7 @@ SimpleX Lock must be enabled. You will still receive calls and notifications from muted profiles when they are active. + Continuerai a ricevere chiamate e notifiche da profili silenziati quando sono attivi. No comment provided by engineer. diff --git a/apps/ios/SimpleX Localizations/lt.xcloc/Localized Contents/lt.xliff b/apps/ios/SimpleX Localizations/lt.xcloc/Localized Contents/lt.xliff index f576e2e2f0..184800bb1f 100644 --- a/apps/ios/SimpleX Localizations/lt.xcloc/Localized Contents/lt.xliff +++ b/apps/ios/SimpleX Localizations/lt.xcloc/Localized Contents/lt.xliff @@ -152,12 +152,14 @@ %lldw No comment provided by engineer. - + ( + ( No comment provided by engineer. - + ) + ) No comment provided by engineer. @@ -180,8 +182,9 @@ **Paste received link** or open it in the browser and tap **Open in mobile app**. No comment provided by engineer. - + **Please note**: you will NOT be able to recover or change passphrase if you lose it. + **Turėkite omenyje**: jeigu prarasite slaptafrazę, NEBEGALĖSITE jos atkurti ar pakeisti. No comment provided by engineer. @@ -208,52 +211,64 @@ \*bold* No comment provided by engineer. - + , + , No comment provided by engineer. - + . + . No comment provided by engineer. - + 1 day + 1 diena message ttl - + 1 hour + 1 valanda message ttl - + 1 month + 1 mėnuo message ttl - + 1 week + 1 savaitė message ttl - + 2 weeks + 2 savaitės message ttl - + 6 + 6 No comment provided by engineer. - + : + : No comment provided by engineer. - + A new contact + Naujas adresatas notification title - + A random profile will be sent to the contact that you received this link from + Adresatui, iš kurio gavote šią nuorodą, bus išsiųstas atsitiktinis profilis No comment provided by engineer. - + A random profile will be sent to your contact + Jūsų adresatui bus išsiųstas atsitiktinis profilis No comment provided by engineer. @@ -265,12 +280,14 @@ **Please note**: if you have many connections, your battery and traffic consumption can be substantially higher and some connections may fail. No comment provided by engineer. - + About SimpleX + Apie SimpleX No comment provided by engineer. - + About SimpleX Chat + Apie SimpleX Chat No comment provided by engineer. @@ -302,16 +319,19 @@ Add preset servers No comment provided by engineer. - + Add profile + Pridėti profilį No comment provided by engineer. - + Add servers by scanning QR codes. + Pridėti serverius skenuojant QR kodus. No comment provided by engineer. - + Add server… + Pridėti serverį… No comment provided by engineer. @@ -322,72 +342,86 @@ Admins can create the links to join groups. No comment provided by engineer. - + Advanced network settings + Išplėstiniai tinklo nustatymai No comment provided by engineer. - + All chats and messages will be deleted - this cannot be undone! + Visos žinutės ir pokalbiai bus ištrinti – to neįmanoma bus atšaukti! No comment provided by engineer. All group members will remain connected. No comment provided by engineer. - + All messages will be deleted - this cannot be undone! The messages will be deleted ONLY for you. + Visos žinutės bus ištrintos – to neįmanoma bus atšaukti! Žinutės bus ištrintos TIK jums. No comment provided by engineer. All your contacts will remain connected No comment provided by engineer. - + Allow + Leisti No comment provided by engineer. Allow disappearing messages only if your contact allows it to you. No comment provided by engineer. - + Allow irreversible message deletion only if your contact allows it to you. + Leisti negrįžtamą žinučių ištrynimą tik tuo atveju, jei jūsų adresatas jums tai leidžia. No comment provided by engineer. - + Allow sending direct messages to members. + Leisti siųsti tiesiogines žinutes nariams. No comment provided by engineer. - + Allow sending disappearing messages. + Leisti siųsti išnykstančias žinutes. No comment provided by engineer. - + Allow to irreversibly delete sent messages. + Leisti negrįžtamai ištrinti išsiųstas žinutes. No comment provided by engineer. - + Allow to send voice messages. + Leisti siųsti balso žinutes. No comment provided by engineer. - + Allow voice messages only if your contact allows them. + Leisti balso žinutes tik tuo atveju, jei jūsų adresatas jas leidžia. No comment provided by engineer. - + Allow voice messages? + Leisti balso žinutes? No comment provided by engineer. - + Allow your contacts to irreversibly delete sent messages. + Leisti jūsų adresatams negrįžtamai ištrinti išsiųstas žinutes. No comment provided by engineer. - + Allow your contacts to send disappearing messages. + Leisti jūsų adresatams siųsti išnykstančias žinutes. No comment provided by engineer. - + Allow your contacts to send voice messages. + Leisti jūsų adresatams siųsti balso žinutes. No comment provided by engineer. @@ -398,48 +432,57 @@ Always use relay No comment provided by engineer. - + Answer call + Atsiliepti No comment provided by engineer. - + App build: %@ + Programėlės darinys: %@ No comment provided by engineer. - + App icon + Programėlės piktograma No comment provided by engineer. - + App version + Programėlės versija No comment provided by engineer. - + App version: v%@ + Programėlės versija: v%@ No comment provided by engineer. - + Appearance + Išvaizda No comment provided by engineer. Attach No comment provided by engineer. - + Audio & video calls + Garso ir vaizdo skambučiai No comment provided by engineer. - + Authentication failed + Nepavyko nustatyti tapatybės No comment provided by engineer. Authentication is required before the call is connected, but you may miss calls. No comment provided by engineer. - + Authentication unavailable + Tapatybės nustatymas neprieinamas No comment provided by engineer. @@ -3629,6 +3672,11 @@ SimpleX servers cannot see your profile. \~strike~ No comment provided by engineer. + + Audio and video calls + Garso ir vaizdo skambučiai + No comment provided by engineer. +
diff --git a/apps/ios/SimpleX Localizations/nl.xcloc/Localized Contents/nl.xliff b/apps/ios/SimpleX Localizations/nl.xcloc/Localized Contents/nl.xliff index 483d8395e0..df2d0c26e0 100644 --- a/apps/ios/SimpleX Localizations/nl.xcloc/Localized Contents/nl.xliff +++ b/apps/ios/SimpleX Localizations/nl.xcloc/Localized Contents/nl.xliff @@ -387,6 +387,7 @@ Add welcome message + Welkomst bericht toevoegen No comment provided by engineer. @@ -531,6 +532,7 @@ Audio and video calls + Audio en video oproepen No comment provided by engineer. @@ -600,6 +602,7 @@ Can't delete user profile! + Kan gebruikers profiel niet verwijderen! No comment provided by engineer. @@ -709,6 +712,7 @@ Chinese and Spanish interface + Chinese en Spaanse interface No comment provided by engineer. @@ -768,6 +772,7 @@ Confirm password + Bevestig wachtwoord No comment provided by engineer. @@ -1205,7 +1210,7 @@ Delete user profile? - Gebruikersprofiel verwijderen? + Gebruikers profiel verwijderen? No comment provided by engineer. @@ -1300,6 +1305,7 @@ Don't show again + Niet meer weergeven No comment provided by engineer. @@ -1404,6 +1410,7 @@ Enter password above to show! + Voer hier boven het wachtwoord in om weer te geven! No comment provided by engineer. @@ -1563,6 +1570,7 @@ Error saving user password + Fout bij opslaan gebruikers wachtwoord No comment provided by engineer. @@ -1602,6 +1610,7 @@ Error updating user privacy + Fout bij updaten van gebruikers privacy No comment provided by engineer. @@ -1691,10 +1700,12 @@ Fully re-implemented - work in background! + Volledig opnieuw geïmplementeerd - werk op de achtergrond! No comment provided by engineer. Further reduced battery usage + Verder verminderd batterij verbruik No comment provided by engineer. @@ -1774,6 +1785,7 @@ Group moderation + Groep moderatie No comment provided by engineer. @@ -1793,6 +1805,7 @@ Group welcome message + Groep welkomst bericht No comment provided by engineer. @@ -1817,10 +1830,12 @@ Hidden chat profiles + Verborgen chat profielen No comment provided by engineer. Hidden profile password + Verborgen profiel wachtwoord No comment provided by engineer. @@ -1835,6 +1850,7 @@ Hide profile + Profiel verbergen No comment provided by engineer. @@ -1962,6 +1978,10 @@ Onjuiste beveiligingscode! No comment provided by engineer. + + Initial role + No comment provided by engineer. + Install [SimpleX Chat for terminal](https://github.com/simplex-chat/simplex-chat) Installeer [SimpleX Chat voor terminal](https://github.com/simplex-chat/simplex-chat) @@ -2141,6 +2161,7 @@ We zullen serverredundantie toevoegen om verloren berichten te voorkomen. Make profile private! + Profiel privé maken! No comment provided by engineer. @@ -2270,6 +2291,7 @@ We zullen serverredundantie toevoegen om verloren berichten te voorkomen. Muted when inactive! + Gedempt wanneer inactief! No comment provided by engineer. @@ -2376,6 +2398,9 @@ We zullen serverredundantie toevoegen om verloren berichten te voorkomen.Now admins can: - delete members' messages. - disable members ("observer" role) + Nu kunnen beheerders: +- berichten van leden verwijderen. +- schakel leden uit ("waarnemer" rol) No comment provided by engineer. @@ -2420,7 +2445,7 @@ We zullen serverredundantie toevoegen om verloren berichten te voorkomen. Only client devices store user profiles, contacts, groups, and messages sent with **2-layer end-to-end encryption**. - Alleen client apparaten slaan gebruikersprofielen, contacten, groepen en berichten op die zijn verzonden met **2-laags end-to-end-codering**. + Alleen client apparaten slaan gebruikers profielen, contacten, groepen en berichten op die zijn verzonden met **2-laags end-to-end-codering**. No comment provided by engineer. @@ -2480,7 +2505,7 @@ We zullen serverredundantie toevoegen om verloren berichten te voorkomen. Open user profiles - Gebruikersprofielen openen + Gebruikers profielen openen authentication reason @@ -2505,6 +2530,7 @@ We zullen serverredundantie toevoegen om verloren berichten te voorkomen. Password to show + Wachtwoord om weer te geven No comment provided by engineer. @@ -2659,6 +2685,7 @@ We zullen serverredundantie toevoegen om verloren berichten te voorkomen. Protect your chat profiles with a password! + Bescherm je chat profielen met een wachtwoord! No comment provided by engineer. @@ -2858,6 +2885,7 @@ We zullen serverredundantie toevoegen om verloren berichten te voorkomen. Save and update group profile + Groep profiel opslaan en bijwerken No comment provided by engineer. @@ -2887,6 +2915,7 @@ We zullen serverredundantie toevoegen om verloren berichten te voorkomen. Save profile password + Bewaar profiel wachtwoord No comment provided by engineer. @@ -2896,10 +2925,12 @@ We zullen serverredundantie toevoegen om verloren berichten te voorkomen. Save servers? + Servers opslaan? No comment provided by engineer. Save welcome message? + Welkomst bericht opslaan? No comment provided by engineer. @@ -3054,6 +3085,7 @@ We zullen serverredundantie toevoegen om verloren berichten te voorkomen. Set the message shown to new members! + Stel het getoonde bericht in voor nieuwe leden! No comment provided by engineer. @@ -3238,6 +3270,7 @@ We zullen serverredundantie toevoegen om verloren berichten te voorkomen. Tap to activate profile. + Tik om profiel te activeren. No comment provided by engineer. @@ -3367,10 +3400,12 @@ We zullen serverredundantie toevoegen om verloren berichten te voorkomen. There should be at least one user profile. + Er moet ten minste één gebruikers profiel zijn. No comment provided by engineer. There should be at least one visible user profile. + Er moet ten minste één zichtbaar gebruikers profiel zijn. No comment provided by engineer. @@ -3442,6 +3477,7 @@ U wordt gevraagd de authenticatie te voltooien voordat deze functie wordt ingesc 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**. No comment provided by engineer. @@ -3501,6 +3537,7 @@ U wordt gevraagd de authenticatie te voltooien voordat deze functie wordt ingesc Unhide + zichtbaar maken No comment provided by engineer. @@ -3612,7 +3649,7 @@ Om verbinding te maken, vraagt u uw contactpersoon om een andere verbinding link User profile - Gebruikersprofiel + Gebruikers profiel No comment provided by engineer. @@ -3697,7 +3734,7 @@ Om verbinding te maken, vraagt u uw contactpersoon om een andere verbinding link Welcome message - Welkoms bericht + Welkomst bericht No comment provided by engineer. @@ -3717,7 +3754,7 @@ Om verbinding te maken, vraagt u uw contactpersoon om een andere verbinding link With optional welcome message. - Met optioneel welkomstbericht. + Met optioneel welkomst bericht. No comment provided by engineer. @@ -3778,6 +3815,8 @@ Om verbinding te maken, vraagt u uw contactpersoon om een andere verbinding link You can hide or mute a user profile - swipe it to the right. SimpleX Lock must be enabled. + U kunt een gebruikers profiel verbergen of dempen - veeg het naar rechts. +SimpleX Lock moet ingeschakeld zijn. No comment provided by engineer. @@ -3897,6 +3936,7 @@ SimpleX Lock must be enabled. You will still receive calls and notifications from muted profiles when they are active. + U ontvangt nog steeds oproepen en meldingen van gedempte profielen wanneer deze actief zijn. No comment provided by engineer. @@ -4075,7 +4115,7 @@ SimpleX servers kunnen uw profiel niet zien. above, then choose: - hierboven, kies dan: + hier boven, kies dan: No comment provided by engineer. @@ -4450,7 +4490,7 @@ SimpleX servers kunnen uw profiel niet zien. observer - waarnemer + Waarnemer member role @@ -4481,7 +4521,7 @@ SimpleX servers kunnen uw profiel niet zien. owner - eigenaar + Eigenaar member role diff --git a/apps/ios/SimpleX Localizations/ru.xcloc/Localized Contents/ru.xliff b/apps/ios/SimpleX Localizations/ru.xcloc/Localized Contents/ru.xliff index 1c469687bb..18122b4352 100644 --- a/apps/ios/SimpleX Localizations/ru.xcloc/Localized Contents/ru.xliff +++ b/apps/ios/SimpleX Localizations/ru.xcloc/Localized Contents/ru.xliff @@ -387,6 +387,7 @@ Add welcome message + Добавить приветственное сообщение No comment provided by engineer. @@ -531,6 +532,7 @@ Audio and video calls + Аудио и видео звонки No comment provided by engineer. @@ -540,6 +542,7 @@ Authentication is required before the call is connected, but you may miss calls. + Аутентификация требуется до того, как звонок соединится, но вы можете пропустить звонки. No comment provided by engineer. @@ -599,6 +602,7 @@ Can't delete user profile! + Нельзя удалить профиль пользователя! No comment provided by engineer. @@ -708,6 +712,7 @@ Chinese and Spanish interface + Китайский и Испанский интерфейс No comment provided by engineer. @@ -767,6 +772,7 @@ Confirm password + Подтвердить пароль No comment provided by engineer. @@ -1299,6 +1305,7 @@ Don't show again + Не показывать No comment provided by engineer. @@ -1403,6 +1410,7 @@ Enter password above to show! + Введите пароль выше, чтобы раскрыть! No comment provided by engineer. @@ -1562,6 +1570,7 @@ Error saving user password + Ошибка при сохранении пароля пользователя No comment provided by engineer. @@ -1601,6 +1610,7 @@ Error updating user privacy + Ошибка при обновлении конфиденциальности No comment provided by engineer. @@ -1690,10 +1700,12 @@ Fully re-implemented - work in background! + Полностью обновлены - работают в фоне! No comment provided by engineer. Further reduced battery usage + Уменьшенное потребление батареи No comment provided by engineer. @@ -1773,6 +1785,7 @@ Group moderation + Модерация группы No comment provided by engineer. @@ -1792,6 +1805,7 @@ Group welcome message + Приветственное сообщение группы No comment provided by engineer. @@ -1816,10 +1830,12 @@ Hidden chat profiles + Скрытые профили чата No comment provided by engineer. Hidden profile password + Пароль скрытого профиля No comment provided by engineer. @@ -1834,6 +1850,7 @@ Hide profile + Скрыть профиль No comment provided by engineer. @@ -1961,6 +1978,10 @@ Неправильный код безопасности! No comment provided by engineer. + + Initial role + No comment provided by engineer. + Install [SimpleX Chat for terminal](https://github.com/simplex-chat/simplex-chat) [SimpleX Chat для терминала](https://github.com/simplex-chat/simplex-chat) @@ -1980,6 +2001,7 @@ Interface + Интерфейс No comment provided by engineer. @@ -2139,6 +2161,7 @@ We will be adding server redundancy to prevent lost messages. Make profile private! + Сделайте профиль скрытым! No comment provided by engineer. @@ -2268,6 +2291,7 @@ We will be adding server redundancy to prevent lost messages. Muted when inactive! + Без звука, когда не активный! No comment provided by engineer. @@ -2374,6 +2398,9 @@ We will be adding server redundancy to prevent lost messages. Now admins can: - delete members' messages. - disable members ("observer" role) + Теперь админы могут: +- удалять сообщения членов. +- приостанавливать членов (роль "наблюдатель") No comment provided by engineer. @@ -2503,6 +2530,7 @@ We will be adding server redundancy to prevent lost messages. Password to show + Пароль чтобы раскрыть No comment provided by engineer. @@ -2657,6 +2685,7 @@ We will be adding server redundancy to prevent lost messages. Protect your chat profiles with a password! + Защитите ваши профили чата паролем! No comment provided by engineer. @@ -2856,6 +2885,7 @@ We will be adding server redundancy to prevent lost messages. Save and update group profile + Сохранить сообщение и обновить группу No comment provided by engineer. @@ -2885,6 +2915,7 @@ We will be adding server redundancy to prevent lost messages. Save profile password + Сохранить пароль профиля No comment provided by engineer. @@ -2894,10 +2925,12 @@ We will be adding server redundancy to prevent lost messages. Save servers? + Сохранить серверы? No comment provided by engineer. Save welcome message? + Сохранить приветственное сообщение? No comment provided by engineer. @@ -3052,6 +3085,7 @@ We will be adding server redundancy to prevent lost messages. Set the message shown to new members! + Установить сообщение для новых членов группы! No comment provided by engineer. @@ -3091,6 +3125,7 @@ We will be adding server redundancy to prevent lost messages. Show calls in phone history + Показать звонки в истории телефона No comment provided by engineer. @@ -3235,6 +3270,7 @@ We will be adding server redundancy to prevent lost messages. Tap to activate profile. + Нажмите, чтобы сделать профиль активным. No comment provided by engineer. @@ -3364,10 +3400,12 @@ We will be adding server redundancy to prevent lost messages. There should be at least one user profile. + Должен быть хотя бы один профиль пользователя. No comment provided by engineer. There should be at least one visible user profile. + Должен быть хотя бы один открытый профиль пользователя. No comment provided by engineer. @@ -3439,6 +3477,7 @@ You will be prompted to complete authentication before this feature is enabled.< To reveal your hidden profile, enter a full password into a search field in **Your chat profiles** page. + Чтобы показать Ваш скрытый профиль, введите его пароль в поле поиска на странице **Ваши профили чата**. No comment provided by engineer. @@ -3498,10 +3537,12 @@ You will be prompted to complete authentication before this feature is enabled.< Unhide + Раскрыть No comment provided by engineer. Unknown caller + Неизвестный звонок callkit banner @@ -3516,6 +3557,7 @@ You will be prompted to complete authentication before this feature is enabled.< Unless you use iOS call interface, enable Do Not Disturb mode to avoid interruptions. + Если вы не используете интерфейс iOS, включите режим Не отвлекать, чтобы звонок не прерывался. No comment provided by engineer. @@ -3597,6 +3639,7 @@ To connect, please ask your contact to create another connection link and check Use iOS call interface + Использовать интерфейс iOS для звонков No comment provided by engineer. @@ -3761,6 +3804,7 @@ To connect, please ask your contact to create another connection link and check You can accept calls from lock screen, without device and app authentication. + Вы можете принимать звонки на экране блокировки, без аутентификации. No comment provided by engineer. @@ -3771,6 +3815,8 @@ To connect, please ask your contact to create another connection link and check You can hide or mute a user profile - swipe it to the right. SimpleX Lock must be enabled. + Вы можете скрыть профиль или выключить уведомления - потяните его вправо. +Блокировка SimpleX должна быть включена. No comment provided by engineer. @@ -3890,6 +3936,7 @@ SimpleX Lock must be enabled. You will still receive calls and notifications from muted profiles when they are active. + Вы все равно получите звонки и уведомления в профилях без звука, когда они активные. No comment provided by engineer. diff --git a/apps/ios/SimpleX Localizations/zh-Hans.xcloc/Localized Contents/zh-Hans.xliff b/apps/ios/SimpleX Localizations/zh-Hans.xcloc/Localized Contents/zh-Hans.xliff index 4c78565cd7..0ce53f9b8a 100644 --- a/apps/ios/SimpleX Localizations/zh-Hans.xcloc/Localized Contents/zh-Hans.xliff +++ b/apps/ios/SimpleX Localizations/zh-Hans.xcloc/Localized Contents/zh-Hans.xliff @@ -387,6 +387,7 @@ Add welcome message + 添加欢迎信息 No comment provided by engineer. @@ -531,6 +532,7 @@ Audio and video calls + 音视频通话 No comment provided by engineer. @@ -600,6 +602,7 @@ Can't delete user profile! + 无法删除用户个人资料! No comment provided by engineer. @@ -709,6 +712,7 @@ Chinese and Spanish interface + 中文和西班牙文界面 No comment provided by engineer. @@ -768,6 +772,7 @@ Confirm password + 确认密码 No comment provided by engineer. @@ -1300,6 +1305,7 @@ Don't show again + 不再显示 No comment provided by engineer. @@ -1404,6 +1410,7 @@ Enter password above to show! + 在上面输入密码以显示! No comment provided by engineer. @@ -1563,6 +1570,7 @@ Error saving user password + 保存用户密码时出错 No comment provided by engineer. @@ -1602,6 +1610,7 @@ Error updating user privacy + 更新用户隐私时出错 No comment provided by engineer. @@ -1691,10 +1700,12 @@ Fully re-implemented - work in background! + 完全重新实现 - 在后台工作! No comment provided by engineer. Further reduced battery usage + 进一步减少电池使用 No comment provided by engineer. @@ -1774,6 +1785,7 @@ Group moderation + 小组审核 No comment provided by engineer. @@ -1793,6 +1805,7 @@ Group welcome message + 群欢迎词 No comment provided by engineer. @@ -1817,10 +1830,12 @@ Hidden chat profiles + 隐藏的聊天资料 No comment provided by engineer. Hidden profile password + 隐藏的个人资料密码 No comment provided by engineer. @@ -1835,6 +1850,7 @@ Hide profile + 隐藏个人资料 No comment provided by engineer. @@ -1962,6 +1978,10 @@ 安全码不正确! No comment provided by engineer. + + Initial role + No comment provided by engineer. + Install [SimpleX Chat for terminal](https://github.com/simplex-chat/simplex-chat) 安装[用于终端的 SimpleX Chat](https://github.com/simplex-chat/simplex-chat) @@ -2141,6 +2161,7 @@ We will be adding server redundancy to prevent lost messages. Make profile private! + 将个人资料设为私密! No comment provided by engineer. @@ -2270,6 +2291,7 @@ We will be adding server redundancy to prevent lost messages. Muted when inactive! + 不活动时静音! No comment provided by engineer. @@ -2376,6 +2398,9 @@ We will be adding server redundancy to prevent lost messages. Now admins can: - delete members' messages. - disable members ("observer" role) + 现在管理员可以: +- 删除成员的消息。 +- 禁用成员(“观察员”角色) No comment provided by engineer. @@ -2505,6 +2530,7 @@ We will be adding server redundancy to prevent lost messages. Password to show + 显示密码 No comment provided by engineer. @@ -2659,6 +2685,7 @@ We will be adding server redundancy to prevent lost messages. Protect your chat profiles with a password! + 使用密码保护您的聊天资料! No comment provided by engineer. @@ -2858,6 +2885,7 @@ We will be adding server redundancy to prevent lost messages. Save and update group profile + 保存和更新组配置文件 No comment provided by engineer. @@ -2887,6 +2915,7 @@ We will be adding server redundancy to prevent lost messages. Save profile password + 保存个人资料密码 No comment provided by engineer. @@ -2896,10 +2925,12 @@ We will be adding server redundancy to prevent lost messages. Save servers? + 保存服务器? No comment provided by engineer. Save welcome message? + 保存欢迎信息? No comment provided by engineer. @@ -3054,6 +3085,7 @@ We will be adding server redundancy to prevent lost messages. Set the message shown to new members! + 设置向新成员显示的消息! No comment provided by engineer. @@ -3238,6 +3270,7 @@ We will be adding server redundancy to prevent lost messages. Tap to activate profile. + 点击以激活个人资料。 No comment provided by engineer. @@ -3332,7 +3365,7 @@ We will be adding server redundancy to prevent lost messages. The message will be marked as moderated for all members. - 该消息将对所有成员显示为已审核。 + 该消息将对所有成员标记为已被管理员移除。 No comment provided by engineer. @@ -3367,10 +3400,12 @@ We will be adding server redundancy to prevent lost messages. There should be at least one user profile. + 应该至少有一个用户资料。 No comment provided by engineer. There should be at least one visible user profile. + 应该至少有一个可见的用户资料。 No comment provided by engineer. @@ -3442,6 +3477,7 @@ You will be prompted to complete authentication before this feature is enabled.< To reveal your hidden profile, enter a full password into a search field in **Your chat profiles** page. + 要显示您的隐藏个人资料,请在**您的聊天个人资料**页面的搜索字段中输入完整密码。 No comment provided by engineer. @@ -3501,6 +3537,7 @@ You will be prompted to complete authentication before this feature is enabled.< Unhide + 取消隐藏 No comment provided by engineer. @@ -3778,6 +3815,8 @@ To connect, please ask your contact to create another connection link and check You can hide or mute a user profile - swipe it to the right. SimpleX Lock must be enabled. + 您可以隐藏或静音用户个人资料——只需向右滑动。 +必须启用 SimpleX Lock。 No comment provided by engineer. @@ -3897,6 +3936,7 @@ SimpleX Lock must be enabled. You will still receive calls and notifications from muted profiles when they are active. + 当静音配置文件处于活动状态时,您仍会收到来自静音配置文件的电话和通知。 No comment provided by engineer. diff --git a/apps/ios/de.lproj/Localizable.strings b/apps/ios/de.lproj/Localizable.strings index 48ca38b076..d726d1d87b 100644 --- a/apps/ios/de.lproj/Localizable.strings +++ b/apps/ios/de.lproj/Localizable.strings @@ -248,6 +248,9 @@ /* No comment provided by engineer. */ "Add to another device" = "Einem anderen Gerät hinzufügen"; +/* No comment provided by engineer. */ +"Add welcome message" = "Fügen Sie eine Begrüßungsmeldung hinzu"; + /* member role */ "admin" = "Admin"; @@ -338,6 +341,9 @@ /* No comment provided by engineer. */ "Audio & video calls" = "Audio- & Videoanrufe"; +/* No comment provided by engineer. */ +"Audio and video calls" = "Audio- und Videoanrufe"; + /* No comment provided by engineer. */ "audio call (not e2e encrypted)" = "Audioanruf (nicht E2E verschlüsselt)"; @@ -398,6 +404,9 @@ /* No comment provided by engineer. */ "Calls" = "Anrufe"; +/* No comment provided by engineer. */ +"Can't delete user profile!" = "Das Benutzerprofil kann nicht gelöscht werden!"; + /* No comment provided by engineer. */ "Can't invite contact!" = "Kontakt kann nicht eingeladen werden!"; @@ -479,6 +488,9 @@ /* No comment provided by engineer. */ "Check server address and try again." = "Überprüfen Sie die Serveradresse und versuchen Sie es nochmal."; +/* No comment provided by engineer. */ +"Chinese and Spanish interface" = "Chinesische und spanische Bedienoberfläche"; + /* No comment provided by engineer. */ "Choose file" = "Datei auswählen"; @@ -518,6 +530,9 @@ /* No comment provided by engineer. */ "Confirm new passphrase…" = "Neues Passwort bestätigen…"; +/* No comment provided by engineer. */ +"Confirm password" = "Bestätigen Sie das Passwort"; + /* server test step */ "Connect" = "Verbinden"; @@ -884,6 +899,9 @@ /* No comment provided by engineer. */ "Do NOT use SimpleX for emergency calls." = "Nutzen Sie SimpleX nicht für Notrufe."; +/* No comment provided by engineer. */ +"Don't show again" = "Nicht nochmals anzeigen"; + /* No comment provided by engineer. */ "Duplicate display name!" = "Doppelter Anzeigename!"; @@ -965,6 +983,9 @@ /* No comment provided by engineer. */ "Enter passphrase…" = "Passwort eingeben…"; +/* No comment provided by engineer. */ +"Enter password above to show!" = "Geben Sie oben das Passwort für die Anzeige an!"; + /* No comment provided by engineer. */ "Enter server manually" = "Geben Sie den Server manuell ein"; @@ -1061,6 +1082,9 @@ /* No comment provided by engineer. */ "Error saving SMP servers" = "Fehler beim Speichern der SMP-Server"; +/* No comment provided by engineer. */ +"Error saving user password" = "Fehler beim Speichern des Benutzer-Passworts"; + /* No comment provided by engineer. */ "Error sending message" = "Fehler beim Senden der Nachricht"; @@ -1082,6 +1106,9 @@ /* No comment provided by engineer. */ "Error updating settings" = "Fehler beim Aktualisieren der Einstellungen"; +/* No comment provided by engineer. */ +"Error updating user privacy" = "Fehler beim Aktualisieren der Benutzer-Privatsphäre"; + /* No comment provided by engineer. */ "Error: %@" = "Fehler: %@"; @@ -1133,6 +1160,12 @@ /* No comment provided by engineer. */ "Full name:" = "Vollständiger Name:"; +/* No comment provided by engineer. */ +"Fully re-implemented - work in background!" = "Komplett neu umgesetzt - arbeitet nun im Hintergrund!"; + +/* No comment provided by engineer. */ +"Further reduced battery usage" = "Weiter reduzierter Batterieverbrauch"; + /* No comment provided by engineer. */ "GIFs and stickers" = "GIFs und Sticker"; @@ -1181,6 +1214,9 @@ /* notification */ "Group message:" = "Grppennachricht:"; +/* No comment provided by engineer. */ +"Group moderation" = "Gruppenmoderation"; + /* No comment provided by engineer. */ "Group preferences" = "Gruppenpräferenzen"; @@ -1193,6 +1229,9 @@ /* snd group event chat item */ "group profile updated" = "Gruppenprofil aktualisiert"; +/* No comment provided by engineer. */ +"Group welcome message" = "Gruppen-Begrüßungsmeldung"; + /* No comment provided by engineer. */ "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!"; @@ -1205,12 +1244,21 @@ /* No comment provided by engineer. */ "Hidden" = "Verborgen"; +/* No comment provided by engineer. */ +"Hidden chat profiles" = "Verborgene Chat-Profile"; + +/* No comment provided by engineer. */ +"Hidden profile password" = "Verborgenes Profil-Passwort"; + /* chat item action */ "Hide" = "Verbergen"; /* No comment provided by engineer. */ "Hide app screen in the recent apps." = "App-Bildschirm in aktuellen Anwendungen verbergen."; +/* No comment provided by engineer. */ +"Hide profile" = "Verberge das Profil"; + /* No comment provided by engineer. */ "How it works" = "Wie es funktioniert"; @@ -1436,6 +1484,9 @@ /* No comment provided by engineer. */ "Make a private connection" = "Stellen Sie eine private Verbindung her"; +/* No comment provided by engineer. */ +"Make profile private!" = "Erzeugen Sie ein privates Profil!"; + /* No comment provided by engineer. */ "Make sure SMP server addresses are in correct format, line separated and are not duplicated (%@)." = "Stellen Sie sicher, dass die SMP-Server-Adressen das richtige Format haben, zeilenweise getrennt und nicht doppelt vorhanden sind (%@)."; @@ -1532,6 +1583,9 @@ /* No comment provided by engineer. */ "Mute" = "Stummschalten"; +/* No comment provided by engineer. */ +"Muted when inactive!" = "Bei Inaktivität stummgeschaltet!"; + /* No comment provided by engineer. */ "Name" = "Name"; @@ -1604,6 +1658,9 @@ /* No comment provided by engineer. */ "Notifications are disabled!" = "Benachrichtigungen sind deaktiviert!"; +/* No comment provided by engineer. */ +"Now admins can:\n- delete members' messages.\n- disable members (\"observer\" role)" = "Administratoren können nun\n- Nachrichten von Gruppenmitgliedern löschen\n- Gruppenmitglieder deaktivieren (\"Beobachter\"-Rolle)"; + /* member role */ "observer" = "Beobachter"; @@ -1695,6 +1752,9 @@ /* member role */ "owner" = "Eigentümer"; +/* No comment provided by engineer. */ +"Password to show" = "Passwort anzeigen"; + /* No comment provided by engineer. */ "Paste" = "Einfügen"; @@ -1794,6 +1854,9 @@ /* No comment provided by engineer. */ "Protect app screen" = "App-Bildschirm schützen"; +/* No comment provided by engineer. */ +"Protect your chat profiles with a password!" = "Schützen Sie Ihre Chat-Profile mit einem Passwort!"; + /* No comment provided by engineer. */ "Protocol timeout" = "Protokollzeitüberschreitung"; @@ -1926,6 +1989,9 @@ /* No comment provided by engineer. */ "Save and notify group members" = "Speichern und Gruppenmitglieder benachrichtigen"; +/* No comment provided by engineer. */ +"Save and update group profile" = "Sichern und aktualisieren des Gruppen-Profils"; + /* No comment provided by engineer. */ "Save archive" = "Archiv speichern"; @@ -1941,9 +2007,18 @@ /* No comment provided by engineer. */ "Save preferences?" = "Präferenzen speichern?"; +/* No comment provided by engineer. */ +"Save profile password" = "Profil-Passwort speichern"; + /* No comment provided by engineer. */ "Save servers" = "Alle Server speichern"; +/* No comment provided by engineer. */ +"Save servers?" = "Alle Server speichern?"; + +/* No comment provided by engineer. */ +"Save welcome message?" = "Begrüßungsmeldung speichern?"; + /* No comment provided by engineer. */ "Saved WebRTC ICE servers will be removed" = "Gespeicherte WebRTC ICE-Server werden entfernt"; @@ -2040,6 +2115,9 @@ /* No comment provided by engineer. */ "Set passphrase to export" = "Passwort für den Export festlegen"; +/* No comment provided by engineer. */ +"Set the message shown to new members!" = "Legen Sie die Nachricht fest, die neuen Mitgliedern angezeigt werden soll!"; + /* No comment provided by engineer. */ "Set timeouts for proxy/VPN" = "Zeitüberschreitungen für Proxy/VPN einstellen"; @@ -2145,6 +2223,9 @@ /* No comment provided by engineer. */ "Tap button " = "Schaltfläche antippen "; +/* No comment provided by engineer. */ +"Tap to activate profile." = "Tippen Sie, um das Profil zu aktivieren."; + /* No comment provided by engineer. */ "Tap to join" = "Zum Beitreten tippen"; @@ -2232,6 +2313,12 @@ /* No comment provided by engineer. */ "Theme" = "Design"; +/* No comment provided by engineer. */ +"There should be at least one user profile." = "Es muss mindestens ein Benutzer-Profil vorhanden sein."; + +/* No comment provided by engineer. */ +"There should be at least one visible user profile." = "Es muss mindestens ein sichtbares Benutzer-Profil vorhanden sein."; + /* No comment provided by engineer. */ "This action cannot be undone - all received and sent files and media will be deleted. Low resolution pictures will remain." = "Diese Aktion kann nicht rückgängig gemacht werden! Alle empfangenen und gesendeten Dateien und Medien werden gelöscht. Bilder mit niedriger Auflösung bleiben erhalten."; @@ -2274,6 +2361,9 @@ /* 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."; +/* No comment provided by engineer. */ +"To reveal your hidden profile, enter a full password into a search field in **Your chat profiles** page." = "Geben Sie ein vollständiges Passwort in das Suchfeld auf der Seite **Meine Chat-Profile** ein, um Ihr verborgenes Profil zu sehen."; + /* No comment provided by engineer. */ "To support instant push notifications the chat database has to be migrated." = "Um sofortige Push-Benachrichtigungen zu unterstützen, muss die Chat-Datenbank migriert werden."; @@ -2307,6 +2397,9 @@ /* No comment provided by engineer. */ "Unexpected migration state" = "Unerwarteter Migrationsstatus"; +/* No comment provided by engineer. */ +"Unhide" = "Verbergen aufheben"; + /* connection info */ "unknown" = "Unbekannt"; @@ -2511,6 +2604,9 @@ /* No comment provided by engineer. */ "You can also connect by clicking the link. If it opens in the browser, click **Open in mobile app** button." = "Sie können sich auch verbinden, indem Sie auf den Link klicken. Wenn er im Browser geöffnet wird, klicken Sie auf die Schaltfläche **In mobiler App öffnen**."; +/* No comment provided by engineer. */ +"You can hide or mute a user profile - swipe it to the right.\nSimpleX Lock must be enabled." = "Sie können ein Benutzerprofil verbergen oder stummschalten - wischen Sie es nach rechts.\nDafür muss die SimpleX Sperre aktiviert sein."; + /* notification body */ "You can now send messages to %@" = "Sie können nun Nachrichten an %@ versenden"; @@ -2604,6 +2700,9 @@ /* No comment provided by engineer. */ "You will join a group this link refers to and connect to its group members." = "Sie werden der Gruppe beitreten, auf die sich dieser Link bezieht und sich mit deren Gruppenmitgliedern verbinden."; +/* No comment provided by engineer. */ +"You will still receive calls and notifications from muted profiles when they are active." = "Sie können Anrufe und Benachrichtigungen auch von stummgeschalteten Profilen empfangen, solange diese aktiv sind."; + /* No comment provided by engineer. */ "You will stop receiving messages from this group. Chat history will be preserved." = "Sie werden von dieser Gruppe keine Nachrichten mehr erhalten. Der Chatverlauf wird beibehalten."; diff --git a/apps/ios/es.lproj/Localizable.strings b/apps/ios/es.lproj/Localizable.strings index f29712eb89..4a43fc5fa4 100644 --- a/apps/ios/es.lproj/Localizable.strings +++ b/apps/ios/es.lproj/Localizable.strings @@ -47,7 +47,7 @@ "[Star on GitHub](https://github.com/simplex-chat/simplex-chat)" = "[Comienza en GitHub] (https://github.com/simplex-chat/simplex-chat)"; /* No comment provided by engineer. */ -"**Add new contact**: to create your one-time QR Code for your contact." = "**Añadir nuevo contacto**: para crear tu código QR único o un enlace para tu contacto."; +"**Add new contact**: to create your one-time QR Code for your contact." = "**Añadir nuevo contacto**: para crear tu código QR o enlace de un uso para tu contacto."; /* No comment provided by engineer. */ "**Create link / QR code** for your contact to use." = "**Crea enlace / código QR** para que tu contacto lo use."; @@ -248,6 +248,9 @@ /* No comment provided by engineer. */ "Add to another device" = "Añadir a otro dispositivo"; +/* No comment provided by engineer. */ +"Add welcome message" = "Agregar mensaje de bienvenida"; + /* member role */ "admin" = "administrador"; @@ -273,7 +276,7 @@ "Allow" = "Permitir"; /* No comment provided by engineer. */ -"Allow disappearing messages only if your contact allows it to you." = "Permitir mensajes temporales sólo si tu contacto también los permite para tí."; +"Allow disappearing messages only if your contact allows it to you." = "Permitir mensajes temporales sólo si tu contacto también los permite."; /* No comment provided by engineer. */ "Allow irreversible message deletion only if your contact allows it to you." = "Permitir la eliminación irreversible de mensajes sólo si tu contacto también lo permite para tí."; @@ -300,7 +303,7 @@ "Allow your contacts to irreversibly delete sent messages." = "Permitir a tus contactos eliminar irreversiblemente los mensajes enviados."; /* No comment provided by engineer. */ -"Allow your contacts to send disappearing messages." = "Permitir a tus contactos enviar mensajes que desaparecen."; +"Allow your contacts to send disappearing messages." = "Permitir a tus contactos enviar mensajes temporales."; /* No comment provided by engineer. */ "Allow your contacts to send voice messages." = "Permitir a tus contactos enviar mensajes de voz."; @@ -312,7 +315,7 @@ "always" = "siempre"; /* No comment provided by engineer. */ -"Always use relay" = "Siempre usa relay"; +"Always use relay" = "Siempre usar relay"; /* No comment provided by engineer. */ "Answer call" = "Responder llamada"; @@ -338,6 +341,9 @@ /* No comment provided by engineer. */ "Audio & video calls" = "Llamadas de audio y vídeo"; +/* No comment provided by engineer. */ +"Audio and video calls" = "Llamadas y videollamadas"; + /* No comment provided by engineer. */ "audio call (not e2e encrypted)" = "llamada de audio (sin cifrado e2e)"; @@ -381,7 +387,7 @@ "Both you and your contact can send voice messages." = "Tanto tú como tu contacto podéis enviar mensajes de voz."; /* 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)." = "Por perfil de Chat (por defecto) o [por conexión](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)." = "Mediante perfil de Chat (por defecto) o [por conexión](https://simplex.chat/blog/20230204-simplex-chat-v4-5-user-chat-profiles.html#transport-isolation) (BETA)."; /* No comment provided by engineer. */ "Call already ended!" = "¡La llamada ha terminado!"; @@ -398,6 +404,9 @@ /* No comment provided by engineer. */ "Calls" = "Llamadas"; +/* No comment provided by engineer. */ +"Can't delete user profile!" = "¡No se puede eliminar el perfil!"; + /* No comment provided by engineer. */ "Can't invite contact!" = "¡No se puede invitar el contacto!"; @@ -479,6 +488,9 @@ /* No comment provided by engineer. */ "Check server address and try again." = "Comprueba la dirección del servidor e inténtalo de nuevo."; +/* No comment provided by engineer. */ +"Chinese and Spanish interface" = "Interfaz en chino y español"; + /* No comment provided by engineer. */ "Choose file" = "Elije archivo"; @@ -518,6 +530,9 @@ /* No comment provided by engineer. */ "Confirm new passphrase…" = "Confirme nueva contraseña…"; +/* No comment provided by engineer. */ +"Confirm password" = "Confirmar contraseña"; + /* server test step */ "Connect" = "Conectar"; @@ -537,7 +552,7 @@ "Connect via link / QR code" = "Conectar mediante enlace / Código QR"; /* No comment provided by engineer. */ -"Connect via one-time link?" = "¿Conectar mediante enlace único?"; +"Connect via one-time link?" = "¿Conectar mediante enlace de un uso?"; /* No comment provided by engineer. */ "connected" = "conectado"; @@ -651,7 +666,7 @@ "Create link" = "Crear enlace"; /* No comment provided by engineer. */ -"Create one-time invitation link" = "Crear enlace único de invitación"; +"Create one-time invitation link" = "Crear enlace de invitación de un uso"; /* server test step */ "Create queue" = "Crear cola"; @@ -884,6 +899,9 @@ /* No comment provided by engineer. */ "Do NOT use SimpleX for emergency calls." = "NO uses SimpleX para llamadas de emergencia."; +/* No comment provided by engineer. */ +"Don't show again" = "No mostrar de nuevo"; + /* No comment provided by engineer. */ "Duplicate display name!" = "¡Nombre mostrado duplicado!"; @@ -965,6 +983,9 @@ /* No comment provided by engineer. */ "Enter passphrase…" = "Introduce la contraseña…"; +/* No comment provided by engineer. */ +"Enter password above to show!" = "¡Introduce la contraseña arriba para mostrar!"; + /* No comment provided by engineer. */ "Enter server manually" = "Introduce el servidor manualmente"; @@ -1061,6 +1082,9 @@ /* No comment provided by engineer. */ "Error saving SMP servers" = "Error guardando servidores SMP"; +/* No comment provided by engineer. */ +"Error saving user password" = "Error guardando la contraseña de usuario"; + /* No comment provided by engineer. */ "Error sending message" = "Error enviando mensaje"; @@ -1082,6 +1106,9 @@ /* No comment provided by engineer. */ "Error updating settings" = "Error actualizando configuración"; +/* No comment provided by engineer. */ +"Error updating user privacy" = "Error actualizando la privacidad de usuario"; + /* No comment provided by engineer. */ "Error: %@" = "Error: %@"; @@ -1133,6 +1160,12 @@ /* No comment provided by engineer. */ "Full name:" = "Nombre completo:"; +/* No comment provided by engineer. */ +"Fully re-implemented - work in background!" = "Completamente reimplementado: ¡funciona en segundo plano!"; + +/* No comment provided by engineer. */ +"Further reduced battery usage" = "Consumo de batería reducido aun más"; + /* No comment provided by engineer. */ "GIFs and stickers" = "GIFs y stickers"; @@ -1181,6 +1214,9 @@ /* notification */ "Group message:" = "Mensaje de grupo:"; +/* No comment provided by engineer. */ +"Group moderation" = "Moderación de grupos"; + /* No comment provided by engineer. */ "Group preferences" = "Preferencias del grupo"; @@ -1193,6 +1229,9 @@ /* snd group event chat item */ "group profile updated" = "perfil de grupo actualizado"; +/* No comment provided by engineer. */ +"Group welcome message" = "Mensaje de bienvenida en grupos"; + /* No comment provided by engineer. */ "Group will be deleted for all members - this cannot be undone!" = "El grupo se eliminará para todos los miembros. ¡No puede deshacerse!"; @@ -1205,12 +1244,21 @@ /* No comment provided by engineer. */ "Hidden" = "Oculto"; +/* No comment provided by engineer. */ +"Hidden chat profiles" = "Perfiles Chat ocultos"; + +/* No comment provided by engineer. */ +"Hidden profile password" = "Contraseña de perfil oculto"; + /* chat item action */ "Hide" = "Ocultar"; /* No comment provided by engineer. */ "Hide app screen in the recent apps." = "Ocultar pantalla de aplicaciones en aplicaciones recientes."; +/* No comment provided by engineer. */ +"Hide profile" = "Ocultar perfil"; + /* No comment provided by engineer. */ "How it works" = "Cómo funciona"; @@ -1281,7 +1329,7 @@ "incognito via group link" = "Incógnito mediante enlace de grupo"; /* chat list item description */ -"incognito via one-time link" = "Incógnito mediante enlace único"; +"incognito via one-time link" = "Incógnito mediante enlace de un uso"; /* notification */ "Incoming audio call" = "Llamada entrante"; @@ -1365,7 +1413,7 @@ "Irreversible message deletion is prohibited in this group." = "La eliminación irreversible de mensajes está prohibida en este grupo."; /* No comment provided by engineer. */ -"It allows having many anonymous connections without any shared data between them in a single chat profile." = "Permite tener muchas conexiones anónimas sin datos compartidos entre estas en un único perfil de chat."; +"It allows having many anonymous connections without any shared data between them in a single chat profile." = "Permite tener varias conexiones anónimas sin datos compartidos entre estas en un único perfil de chat."; /* No comment provided by engineer. */ "It can happen when:\n1. The messages expire on the server if they were not received for 30 days,\n2. The server you use to receive the messages from this contact was updated and restarted.\n3. The connection is compromised.\nPlease connect to the developers via Settings to receive the updates about the servers.\nWe will be adding server redundancy to prevent lost messages." = "Esto puede suceder cuando:\n1. Los mensajes caducan en el servidor si no se han recibido durante 30 días.\n2. El servidor que utiliza para recibir los mensajes de este contacto fue actualizado y reiniciado.\n3. La conexión está comprometida.\nPor favor, contacta con los desarrolladores a través del menú Configuración para recibir actualizaciones sobre los servidores.\nAñadiremos redundancia de servidores para evitar la pérdida de mensajes."; @@ -1436,6 +1484,9 @@ /* No comment provided by engineer. */ "Make a private connection" = "Establecer una conexión privada"; +/* No comment provided by engineer. */ +"Make profile private!" = "¡Hacer un perfil privado!"; + /* No comment provided by engineer. */ "Make sure SMP server addresses are in correct format, line separated and are not duplicated (%@)." = "Asegúrate de que las direcciones del servidor SMP tienen el formato correcto, están separadas por líneas y no duplicadas (%@)."; @@ -1532,6 +1583,9 @@ /* No comment provided by engineer. */ "Mute" = "Silenciar"; +/* No comment provided by engineer. */ +"Muted when inactive!" = "¡Silenciado cuando está inactivo!"; + /* No comment provided by engineer. */ "Name" = "Nombre"; @@ -1604,6 +1658,9 @@ /* No comment provided by engineer. */ "Notifications are disabled!" = "¡Las notificaciones están desactivadas!"; +/* No comment provided by engineer. */ +"Now admins can:\n- delete members' messages.\n- disable members (\"observer\" role)" = "Ahora los administradores pueden\n- borrar mensajes de los miembros.\n- desactivar el rol a miembros (a rol \"observador\")"; + /* member role */ "observer" = "observador"; @@ -1633,7 +1690,7 @@ "on" = "Activado"; /* No comment provided by engineer. */ -"One-time invitation link" = "Enlace único de invitación"; +"One-time invitation link" = "Enlace único de invitación de un uso"; /* No comment provided by engineer. */ "Onion hosts will be required for connection. Requires enabling VPN." = "Se requieren hosts .onion para la conexión. Requiere activación de la VPN."; @@ -1695,6 +1752,9 @@ /* member role */ "owner" = "propietario"; +/* No comment provided by engineer. */ +"Password to show" = "Contraseña para hacerlo visible"; + /* No comment provided by engineer. */ "Paste" = "Pegar"; @@ -1708,7 +1768,7 @@ "Paste the link you received into the box below to connect with your contact." = "Pega el enlace que has recibido en el recuadro para conectar con tu contacto."; /* No comment provided by engineer. */ -"peer-to-peer" = "entre particulares"; +"peer-to-peer" = "p2p"; /* No comment provided by engineer. */ "People can connect to you only via the links you share." = "Las personas pueden conectarse contigo solo mediante los enlaces que compartes."; @@ -1794,6 +1854,9 @@ /* No comment provided by engineer. */ "Protect app screen" = "Proteger la pantalla de la aplicación"; +/* No comment provided by engineer. */ +"Protect your chat profiles with a password!" = "¡Proteje los perfiles de Chat con contraseña!"; + /* No comment provided by engineer. */ "Protocol timeout" = "Tiempo de espera del protocolo"; @@ -1843,10 +1906,10 @@ "rejected call" = "llamada rechazada"; /* No comment provided by engineer. */ -"Relay server is only used if necessary. Another party can observe your IP address." = "El servidor de retransmisión sólo se utiliza en caso necesario. Una tercera persona puede observar tu dirección IP."; +"Relay server is only used if necessary. Another party can observe your IP address." = "El relay sólo se usa en caso de necesidad. Un tercero podría ver tu IP."; /* No comment provided by engineer. */ -"Relay server protects your IP address, but it can observe the duration of the call." = "El servidor de retransmisión protege tu IP pero puede observar la duración de la llamada."; +"Relay server protects your IP address, but it can observe the duration of the call." = "El servidor relay protege tu IP pero puede observar la duración de la llamada."; /* No comment provided by engineer. */ "Remove" = "Eliminar"; @@ -1926,6 +1989,9 @@ /* No comment provided by engineer. */ "Save and notify group members" = "Guardar y notificar a los miembros del grupo"; +/* No comment provided by engineer. */ +"Save and update group profile" = "Guardar y actualizar perfil del grupo"; + /* No comment provided by engineer. */ "Save archive" = "Guardar archivo"; @@ -1941,9 +2007,18 @@ /* No comment provided by engineer. */ "Save preferences?" = "¿Guardar preferencias?"; +/* No comment provided by engineer. */ +"Save profile password" = "Guardar contraseña de perfil"; + /* No comment provided by engineer. */ "Save servers" = "Guardar servidores"; +/* No comment provided by engineer. */ +"Save servers?" = "¿Guardar servidores?"; + +/* No comment provided by engineer. */ +"Save welcome message?" = "¿Guardar mensaje de bienvenida?"; + /* No comment provided by engineer. */ "Saved WebRTC ICE servers will be removed" = "Los servidores WebRTC ICE guardados serán eliminados"; @@ -2040,6 +2115,9 @@ /* No comment provided by engineer. */ "Set passphrase to export" = "Seleccióna contraseña para exportar"; +/* No comment provided by engineer. */ +"Set the message shown to new members!" = "¡Establece el mensaje mostrado a los miembros nuevos!"; + /* No comment provided by engineer. */ "Set timeouts for proxy/VPN" = "Establecer tiempos de espera para proxy/VPN"; @@ -2056,7 +2134,7 @@ "Share link" = "Compartir enlace"; /* No comment provided by engineer. */ -"Share one-time invitation link" = "Compartir enlace único de invitación"; +"Share one-time invitation link" = "Compartir enlace de invitación de un uso"; /* No comment provided by engineer. */ "Show calls in phone history" = "Mostrar llamadas en el historial del teléfono"; @@ -2089,7 +2167,7 @@ "SimpleX Lock turned on" = "Bloqueo SimpleX activado"; /* simplex link type */ -"SimpleX one-time invitation" = "Invitación única SimpleX"; +"SimpleX one-time invitation" = "Invitación SimpleX de un uso"; /* No comment provided by engineer. */ "Skip" = "Omitir"; @@ -2145,6 +2223,9 @@ /* No comment provided by engineer. */ "Tap button " = "Pulsa el botón "; +/* No comment provided by engineer. */ +"Tap to activate profile." = "Pulsa para activar el perfil."; + /* No comment provided by engineer. */ "Tap to join" = "Pulsa para unirse"; @@ -2232,6 +2313,12 @@ /* No comment provided by engineer. */ "Theme" = "Tema"; +/* No comment provided by engineer. */ +"There should be at least one user profile." = "Debe haber al menos un perfil de usuario."; + +/* No comment provided by engineer. */ +"There should be at least one visible user profile." = "Debe haber al menos un perfil de usuario visible."; + /* No comment provided by engineer. */ "This action cannot be undone - all received and sent files and media will be deleted. Low resolution pictures will remain." = "Esta acción no se puede deshacer. Se eliminarán todos los archivos y multimedia recibidos y enviados. Las imágenes de baja resolución permanecerán."; @@ -2274,6 +2361,9 @@ /* 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."; +/* No comment provided by engineer. */ +"To reveal your hidden profile, enter a full password into a search field in **Your chat profiles** page." = "Para hacer visible tu perfil oculto, introduce la contraseña completa en el campo de búsqueda de la página **Tus perfiles Chat**."; + /* No comment provided by engineer. */ "To support instant push notifications the chat database has to be migrated." = "Para permitir las notificaciones automáticas instantáneas, la base de datos se debe migrar."; @@ -2307,6 +2397,9 @@ /* No comment provided by engineer. */ "Unexpected migration state" = "Estado de migración inesperado"; +/* No comment provided by engineer. */ +"Unhide" = "Mostrar"; + /* connection info */ "unknown" = "desconocido"; @@ -2404,10 +2497,10 @@ "via group link" = "mediante enlace de grupo"; /* chat list item description */ -"via one-time link" = "mediante enlace único"; +"via one-time link" = "mediante enlace de un uso"; /* No comment provided by engineer. */ -"via relay" = "mediante servidor de retransmisión"; +"via relay" = "mediante servidor relay"; /* No comment provided by engineer. */ "Video call" = "Videollamada"; @@ -2511,6 +2604,9 @@ /* No comment provided by engineer. */ "You can also connect by clicking the link. If it opens in the browser, click **Open in mobile app** button." = "También puedes conectarte haciendo clic en el enlace. Si se abre en el navegador, haz clic en el botón **Abrir en aplicación móvil**."; +/* No comment provided by engineer. */ +"You can hide or mute a user profile - swipe it to the right.\nSimpleX Lock must be enabled." = "Puedes ocultar o silenciar un perfil de usuario: deslízalo hacia la derecha.\nSimpleX Lock debe estar activado."; + /* notification body */ "You can now send messages to %@" = "Ya puedes enviar mensajes a %@"; @@ -2584,10 +2680,10 @@ "You sent group invitation" = "Has enviado una invitación de grupo"; /* chat list item description */ -"you shared one-time link" = "has compartido un enlace único"; +"you shared one-time link" = "has compartido un enlace de un uso"; /* chat list item description */ -"you shared one-time link incognito" = "has compartido un enlace único en módo incógnito"; +"you shared one-time link incognito" = "has compartido enlace de un uso en modo incógnito"; /* No comment provided by engineer. */ "You will be connected to group when the group host's device is online, please wait or check later!" = "Te conectarás al grupo cuando el dispositivo del anfitrión esté en línea, por favor espera o compruébalo más tarde."; @@ -2604,6 +2700,9 @@ /* No comment provided by engineer. */ "You will join a group this link refers to and connect to its group members." = "Te unirás al grupo al que hace referencia este enlace y te conectarás con sus miembros."; +/* No comment provided by engineer. */ +"You will still receive calls and notifications from muted profiles when they are active." = "Seguirás recibiendo llamadas y notificaciones de los perfiles silenciados cuando estén activos."; + /* No comment provided by engineer. */ "You will stop receiving messages from this group. Chat history will be preserved." = "Dejarás de recibir mensajes de este grupo. El historial del chat se conservará."; diff --git a/apps/ios/fr.lproj/Localizable.strings b/apps/ios/fr.lproj/Localizable.strings index 657399536b..6d756101df 100644 --- a/apps/ios/fr.lproj/Localizable.strings +++ b/apps/ios/fr.lproj/Localizable.strings @@ -248,6 +248,9 @@ /* No comment provided by engineer. */ "Add to another device" = "Ajouter à un autre appareil"; +/* No comment provided by engineer. */ +"Add welcome message" = "Ajouter un message d'accueil"; + /* member role */ "admin" = "admin"; @@ -338,6 +341,9 @@ /* No comment provided by engineer. */ "Audio & video calls" = "Appels audio et vidéo"; +/* No comment provided by engineer. */ +"Audio and video calls" = "Appels audio et vidéo"; + /* No comment provided by engineer. */ "audio call (not e2e encrypted)" = "appel audio (sans chiffrement)"; @@ -398,6 +404,9 @@ /* No comment provided by engineer. */ "Calls" = "Appels"; +/* No comment provided by engineer. */ +"Can't delete user profile!" = "Impossible de supprimer le profil d'utilisateur !"; + /* No comment provided by engineer. */ "Can't invite contact!" = "Impossible d'inviter le contact !"; @@ -479,6 +488,9 @@ /* No comment provided by engineer. */ "Check server address and try again." = "Vérifiez l'adresse du serveur et réessayez."; +/* No comment provided by engineer. */ +"Chinese and Spanish interface" = "Interface en chinois et en espagnol"; + /* No comment provided by engineer. */ "Choose file" = "Choisir le fichier"; @@ -518,6 +530,9 @@ /* No comment provided by engineer. */ "Confirm new passphrase…" = "Confirmer la nouvelle phrase secrète…"; +/* No comment provided by engineer. */ +"Confirm password" = "Confirmer le mot de passe"; + /* server test step */ "Connect" = "Se connecter"; @@ -884,6 +899,9 @@ /* No comment provided by engineer. */ "Do NOT use SimpleX for emergency calls." = "N'utilisez PAS SimpleX pour les appels d'urgence."; +/* No comment provided by engineer. */ +"Don't show again" = "Ne plus afficher"; + /* No comment provided by engineer. */ "Duplicate display name!" = "Nom d'affichage en double !"; @@ -965,6 +983,9 @@ /* No comment provided by engineer. */ "Enter passphrase…" = "Entrez la phrase secrète…"; +/* No comment provided by engineer. */ +"Enter password above to show!" = "Entrez le mot de passe ci-dessus pour continuer !"; + /* No comment provided by engineer. */ "Enter server manually" = "Entrer un serveur manuellement"; @@ -1061,6 +1082,9 @@ /* No comment provided by engineer. */ "Error saving SMP servers" = "Erreur lors de la sauvegarde des serveurs SMP"; +/* No comment provided by engineer. */ +"Error saving user password" = "Erreur d'enregistrement du mot de passe de l'utilisateur"; + /* No comment provided by engineer. */ "Error sending message" = "Erreur lors de l'envoi du message"; @@ -1082,6 +1106,9 @@ /* No comment provided by engineer. */ "Error updating settings" = "Erreur lors de la mise à jour des paramètres"; +/* No comment provided by engineer. */ +"Error updating user privacy" = "Erreur de mise à jour de la confidentialité de l'utilisateur"; + /* No comment provided by engineer. */ "Error: %@" = "Erreur : %@"; @@ -1133,6 +1160,12 @@ /* No comment provided by engineer. */ "Full name:" = "Nom complet :"; +/* No comment provided by engineer. */ +"Fully re-implemented - work in background!" = "Entièrement réimplémenté - fonctionne en arrière-plan !"; + +/* No comment provided by engineer. */ +"Further reduced battery usage" = "Réduction accrue de l'utilisation de la batterie"; + /* No comment provided by engineer. */ "GIFs and stickers" = "GIFs et stickers"; @@ -1181,6 +1214,9 @@ /* notification */ "Group message:" = "Message du groupe :"; +/* No comment provided by engineer. */ +"Group moderation" = "Modération de groupe"; + /* No comment provided by engineer. */ "Group preferences" = "Préférences du groupe"; @@ -1193,6 +1229,9 @@ /* snd group event chat item */ "group profile updated" = "mise à jour du profil de groupe"; +/* No comment provided by engineer. */ +"Group welcome message" = "Message d'accueil du groupe"; + /* No comment provided by engineer. */ "Group will be deleted for all members - this cannot be undone!" = "Le groupe va être supprimé pour tout les membres - impossible de revenir en arrière !"; @@ -1205,12 +1244,21 @@ /* No comment provided by engineer. */ "Hidden" = "Caché"; +/* No comment provided by engineer. */ +"Hidden chat profiles" = "Profils de chat cachés"; + +/* No comment provided by engineer. */ +"Hidden profile password" = "Mot de passe de profil caché"; + /* chat item action */ "Hide" = "Cacher"; /* No comment provided by engineer. */ "Hide app screen in the recent apps." = "Masquer l'écran de l'app dans les apps récentes."; +/* No comment provided by engineer. */ +"Hide profile" = "Masquer le profil"; + /* No comment provided by engineer. */ "How it works" = "Comment ça fonctionne"; @@ -1436,6 +1484,9 @@ /* No comment provided by engineer. */ "Make a private connection" = "Établir une connexion privée"; +/* No comment provided by engineer. */ +"Make profile private!" = "Rendre le profil privé !"; + /* No comment provided by engineer. */ "Make sure SMP server addresses are in correct format, line separated and are not duplicated (%@)." = "Assurez-vous que les adresses des serveurs SMP sont au bon format et ne sont pas dupliquées, un par ligne."; @@ -1532,6 +1583,9 @@ /* No comment provided by engineer. */ "Mute" = "Muet"; +/* No comment provided by engineer. */ +"Muted when inactive!" = "Mute en cas d'inactivité !"; + /* No comment provided by engineer. */ "Name" = "Nom"; @@ -1604,6 +1658,9 @@ /* No comment provided by engineer. */ "Notifications are disabled!" = "Les notifications sont désactivées !"; +/* No comment provided by engineer. */ +"Now admins can:\n- delete members' messages.\n- disable members (\"observer\" role)" = "Désormais, les administrateurs peuvent :\n- supprimer les messages des membres.\n- désactiver des membres (rôle \"observateur\")"; + /* member role */ "observer" = "observateur"; @@ -1695,6 +1752,9 @@ /* member role */ "owner" = "propriétaire"; +/* No comment provided by engineer. */ +"Password to show" = "Mot de passe à afficher"; + /* No comment provided by engineer. */ "Paste" = "Coller"; @@ -1794,6 +1854,9 @@ /* No comment provided by engineer. */ "Protect app screen" = "Protéger l'écran de l'app"; +/* No comment provided by engineer. */ +"Protect your chat profiles with a password!" = "Protégez vos profils de chat par un mot de passe !"; + /* No comment provided by engineer. */ "Protocol timeout" = "Délai du protocole"; @@ -1926,6 +1989,9 @@ /* No comment provided by engineer. */ "Save and notify group members" = "Sauvegarder et en informer les membres du groupe"; +/* No comment provided by engineer. */ +"Save and update group profile" = "Sauvegarder et mettre à jour le profil du groupe"; + /* No comment provided by engineer. */ "Save archive" = "Sauvegarder l'archive"; @@ -1941,9 +2007,18 @@ /* No comment provided by engineer. */ "Save preferences?" = "Sauvegarder les préférences ?"; +/* No comment provided by engineer. */ +"Save profile password" = "Enregistrer le mot de passe du profil"; + /* No comment provided by engineer. */ "Save servers" = "Sauvegarder les serveurs"; +/* No comment provided by engineer. */ +"Save servers?" = "Sauvegarder les serveurs ?"; + +/* No comment provided by engineer. */ +"Save welcome message?" = "Sauvegarder le message d'accueil ?"; + /* No comment provided by engineer. */ "Saved WebRTC ICE servers will be removed" = "Les serveurs WebRTC ICE sauvegardés seront supprimés"; @@ -2040,6 +2115,9 @@ /* No comment provided by engineer. */ "Set passphrase to export" = "Définir la phrase secrète pour l'export"; +/* No comment provided by engineer. */ +"Set the message shown to new members!" = "Choisissez un message à l'attention des nouveaux membres !"; + /* No comment provided by engineer. */ "Set timeouts for proxy/VPN" = "Définir les délais pour le proxy/VPN"; @@ -2145,6 +2223,9 @@ /* No comment provided by engineer. */ "Tap button " = "Appuyez sur le bouton "; +/* No comment provided by engineer. */ +"Tap to activate profile." = "Appuyez pour activer le profil."; + /* No comment provided by engineer. */ "Tap to join" = "Appuyez pour rejoindre"; @@ -2232,6 +2313,12 @@ /* No comment provided by engineer. */ "Theme" = "Thème"; +/* No comment provided by engineer. */ +"There should be at least one user profile." = "Il doit y avoir au moins un profil d'utilisateur."; + +/* No comment provided by engineer. */ +"There should be at least one visible user profile." = "Il doit y avoir au moins un profil d'utilisateur visible."; + /* No comment provided by engineer. */ "This action cannot be undone - all received and sent files and media will be deleted. Low resolution pictures will remain." = "Cette action ne peut être annulée - tous les fichiers et médias reçus et envoyés seront supprimés. Les photos à faible résolution seront conservées."; @@ -2274,6 +2361,9 @@ /* No comment provided by engineer. */ "To record voice message please grant permission to use Microphone." = "Pour enregistrer un message vocal, veuillez accorder la permission d'utiliser le microphone."; +/* No comment provided by engineer. */ +"To reveal your hidden profile, enter a full password into a search field in **Your chat profiles** page." = "Pour révéler votre profil caché, entrez un mot de passe complet dans le champ de recherche de la page **Vos profils de chat**."; + /* No comment provided by engineer. */ "To support instant push notifications the chat database has to be migrated." = "Pour prendre en charge les notifications push instantanées, la base de données du chat doit être migrée."; @@ -2307,6 +2397,9 @@ /* No comment provided by engineer. */ "Unexpected migration state" = "État de la migration inattendu"; +/* No comment provided by engineer. */ +"Unhide" = "Dévoiler"; + /* connection info */ "unknown" = "inconnu"; @@ -2511,6 +2604,9 @@ /* No comment provided by engineer. */ "You can also connect by clicking the link. If it opens in the browser, click **Open in mobile app** button." = "Vous pouvez également vous connecter en cliquant sur le lien. S'il s'ouvre dans le navigateur, cliquez sur le bouton **Open in mobile app**."; +/* No comment provided by engineer. */ +"You can hide or mute a user profile - swipe it to the right.\nSimpleX Lock must be enabled." = "Vous pouvez masquer ou mettre en sourdine un profil d'utilisateur - faites-le glisser vers la droite.\nSimpleX Lock doit être activé."; + /* notification body */ "You can now send messages to %@" = "Vous pouvez maintenant envoyer des messages à %@"; @@ -2604,6 +2700,9 @@ /* No comment provided by engineer. */ "You will join a group this link refers to and connect to its group members." = "Vous allez rejoindre le groupe correspondant à ce lien et être mis en relation avec les autres membres du groupe."; +/* No comment provided by engineer. */ +"You will still receive calls and notifications from muted profiles when they are active." = "Vous continuerez à recevoir des appels et des notifications des profils mis en sourdine lorsqu'ils sont actifs."; + /* No comment provided by engineer. */ "You will stop receiving messages from this group. Chat history will be preserved." = "Vous ne recevrez plus de messages de ce groupe. L'historique du chat sera conservé."; diff --git a/apps/ios/it.lproj/Localizable.strings b/apps/ios/it.lproj/Localizable.strings index bee4806687..8e4fcac09a 100644 --- a/apps/ios/it.lproj/Localizable.strings +++ b/apps/ios/it.lproj/Localizable.strings @@ -248,6 +248,9 @@ /* No comment provided by engineer. */ "Add to another device" = "Aggiungi ad un altro dispositivo"; +/* No comment provided by engineer. */ +"Add welcome message" = "Aggiungi messaggio di benvenuto"; + /* member role */ "admin" = "amministratore"; @@ -338,6 +341,9 @@ /* No comment provided by engineer. */ "Audio & video calls" = "Chiamate audio e video"; +/* No comment provided by engineer. */ +"Audio and video calls" = "Chiamate audio e video"; + /* No comment provided by engineer. */ "audio call (not e2e encrypted)" = "chiamata audio (non crittografata e2e)"; @@ -398,6 +404,9 @@ /* No comment provided by engineer. */ "Calls" = "Chiamate"; +/* No comment provided by engineer. */ +"Can't delete user profile!" = "Impossibile eliminare il profilo utente!"; + /* No comment provided by engineer. */ "Can't invite contact!" = "Impossibile invitare il contatto!"; @@ -479,6 +488,9 @@ /* No comment provided by engineer. */ "Check server address and try again." = "Controlla l'indirizzo del server e riprova."; +/* No comment provided by engineer. */ +"Chinese and Spanish interface" = "Interfaccia cinese e spagnola"; + /* No comment provided by engineer. */ "Choose file" = "Scegli file"; @@ -518,6 +530,9 @@ /* No comment provided by engineer. */ "Confirm new passphrase…" = "Conferma password nuova…"; +/* No comment provided by engineer. */ +"Confirm password" = "Conferma password"; + /* server test step */ "Connect" = "Connetti"; @@ -884,6 +899,9 @@ /* No comment provided by engineer. */ "Do NOT use SimpleX for emergency calls." = "NON usare SimpleX per chiamate di emergenza."; +/* No comment provided by engineer. */ +"Don't show again" = "Non mostrare più"; + /* No comment provided by engineer. */ "Duplicate display name!" = "Nome da mostrare doppio!"; @@ -965,6 +983,9 @@ /* No comment provided by engineer. */ "Enter passphrase…" = "Inserisci la password…"; +/* No comment provided by engineer. */ +"Enter password above to show!" = "Inserisci la password sopra per mostrare!"; + /* No comment provided by engineer. */ "Enter server manually" = "Inserisci il server a mano"; @@ -1061,6 +1082,9 @@ /* No comment provided by engineer. */ "Error saving SMP servers" = "Errore nel salvataggio dei server SMP"; +/* No comment provided by engineer. */ +"Error saving user password" = "Errore nel salvataggio della password utente"; + /* No comment provided by engineer. */ "Error sending message" = "Errore nell'invio del messaggio"; @@ -1082,6 +1106,9 @@ /* No comment provided by engineer. */ "Error updating settings" = "Errore nell'aggiornamento delle impostazioni"; +/* No comment provided by engineer. */ +"Error updating user privacy" = "Errore nell'aggiornamento della privacy dell'utente"; + /* No comment provided by engineer. */ "Error: %@" = "Errore: %@"; @@ -1133,6 +1160,12 @@ /* No comment provided by engineer. */ "Full name:" = "Nome completo:"; +/* No comment provided by engineer. */ +"Fully re-implemented - work in background!" = "Completamente reimplementato - funziona in secondo piano!"; + +/* No comment provided by engineer. */ +"Further reduced battery usage" = "Ulteriore riduzione del consumo della batteria"; + /* No comment provided by engineer. */ "GIFs and stickers" = "GIF e adesivi"; @@ -1181,6 +1214,9 @@ /* notification */ "Group message:" = "Messaggio del gruppo:"; +/* No comment provided by engineer. */ +"Group moderation" = "Moderazione del gruppo"; + /* No comment provided by engineer. */ "Group preferences" = "Preferenze del gruppo"; @@ -1193,6 +1229,9 @@ /* snd group event chat item */ "group profile updated" = "profilo del gruppo aggiornato"; +/* No comment provided by engineer. */ +"Group welcome message" = "Messaggio di benvenuto del gruppo"; + /* No comment provided by engineer. */ "Group will be deleted for all members - this cannot be undone!" = "Il gruppo verrà eliminato per tutti i membri. Non è reversibile!"; @@ -1205,12 +1244,21 @@ /* No comment provided by engineer. */ "Hidden" = "Nascosta"; +/* No comment provided by engineer. */ +"Hidden chat profiles" = "Profili di chat nascosti"; + +/* No comment provided by engineer. */ +"Hidden profile password" = "Password del profilo nascosta"; + /* chat item action */ "Hide" = "Nascondi"; /* No comment provided by engineer. */ "Hide app screen in the recent apps." = "Nascondi la schermata dell'app nelle app recenti."; +/* No comment provided by engineer. */ +"Hide profile" = "Nascondi il profilo"; + /* No comment provided by engineer. */ "How it works" = "Come funziona"; @@ -1436,6 +1484,9 @@ /* No comment provided by engineer. */ "Make a private connection" = "Crea una connessione privata"; +/* No comment provided by engineer. */ +"Make profile private!" = "Rendi privato il profilo!"; + /* No comment provided by engineer. */ "Make sure SMP server addresses are in correct format, line separated and are not duplicated (%@)." = "Assicurati che gli indirizzi dei server SMP siano nel formato corretto, uno per riga e non doppi (%@)."; @@ -1532,6 +1583,9 @@ /* No comment provided by engineer. */ "Mute" = "Silenzia"; +/* No comment provided by engineer. */ +"Muted when inactive!" = "Silenzioso quando inattivo!"; + /* No comment provided by engineer. */ "Name" = "Nome"; @@ -1604,6 +1658,9 @@ /* No comment provided by engineer. */ "Notifications are disabled!" = "Le notifiche sono disattivate!"; +/* No comment provided by engineer. */ +"Now admins can:\n- delete members' messages.\n- disable members (\"observer\" role)" = "Ora gli amministratori possono:\n- eliminare i messaggi dei membri.\n- disattivare i membri (ruolo \"osservatore\")"; + /* member role */ "observer" = "osservatore"; @@ -1695,6 +1752,9 @@ /* member role */ "owner" = "proprietario"; +/* No comment provided by engineer. */ +"Password to show" = "Password per mostrare"; + /* No comment provided by engineer. */ "Paste" = "Incolla"; @@ -1794,6 +1854,9 @@ /* No comment provided by engineer. */ "Protect app screen" = "Proteggi la schermata dell'app"; +/* No comment provided by engineer. */ +"Protect your chat profiles with a password!" = "Proteggi i tuoi profili di chat con una password!"; + /* No comment provided by engineer. */ "Protocol timeout" = "Scadenza del protocollo"; @@ -1926,6 +1989,9 @@ /* No comment provided by engineer. */ "Save and notify group members" = "Salva e avvisa i membri del gruppo"; +/* No comment provided by engineer. */ +"Save and update group profile" = "Salva e aggiorna il profilo del gruppo"; + /* No comment provided by engineer. */ "Save archive" = "Salva archivio"; @@ -1941,9 +2007,18 @@ /* No comment provided by engineer. */ "Save preferences?" = "Salvare le preferenze?"; +/* No comment provided by engineer. */ +"Save profile password" = "Salva la password del profilo"; + /* No comment provided by engineer. */ "Save servers" = "Salva i server"; +/* No comment provided by engineer. */ +"Save servers?" = "Salvare i server?"; + +/* No comment provided by engineer. */ +"Save welcome message?" = "Salvare il messaggio di benvenuto?"; + /* No comment provided by engineer. */ "Saved WebRTC ICE servers will be removed" = "I server WebRTC ICE salvati verranno rimossi"; @@ -2040,6 +2115,9 @@ /* No comment provided by engineer. */ "Set passphrase to export" = "Imposta la password per esportare"; +/* No comment provided by engineer. */ +"Set the message shown to new members!" = "Imposta il messaggio mostrato ai nuovi membri!"; + /* No comment provided by engineer. */ "Set timeouts for proxy/VPN" = "Imposta scadenze per proxy/VPN"; @@ -2145,6 +2223,9 @@ /* No comment provided by engineer. */ "Tap button " = "Tocca il pulsante "; +/* No comment provided by engineer. */ +"Tap to activate profile." = "Tocca per attivare il profilo."; + /* No comment provided by engineer. */ "Tap to join" = "Tocca per entrare"; @@ -2232,6 +2313,12 @@ /* No comment provided by engineer. */ "Theme" = "Tema"; +/* No comment provided by engineer. */ +"There should be at least one user profile." = "Deve esserci almeno un profilo utente."; + +/* No comment provided by engineer. */ +"There should be at least one visible user profile." = "Deve esserci almeno un profilo utente visibile."; + /* No comment provided by engineer. */ "This action cannot be undone - all received and sent files and media will be deleted. Low resolution pictures will remain." = "Questa azione non può essere annullata: tutti i file e i media ricevuti e inviati verranno eliminati. Rimarranno le immagini a bassa risoluzione."; @@ -2274,6 +2361,9 @@ /* 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."; +/* No comment provided by engineer. */ +"To reveal your hidden profile, enter a full password into a search field in **Your chat profiles** page." = "Per rivelare il tuo profilo nascosto, inserisci una password completa in un campo di ricerca nella pagina **I tuoi profili di chat**."; + /* No comment provided by engineer. */ "To support instant push notifications the chat database has to be migrated." = "Per supportare le notifiche push istantanee, il database della chat deve essere migrato."; @@ -2307,6 +2397,9 @@ /* No comment provided by engineer. */ "Unexpected migration state" = "Stato di migrazione imprevisto"; +/* No comment provided by engineer. */ +"Unhide" = "Svela"; + /* connection info */ "unknown" = "sconosciuto"; @@ -2511,6 +2604,9 @@ /* No comment provided by engineer. */ "You can also connect by clicking the link. If it opens in the browser, click **Open in mobile app** button." = "Puoi anche connetterti cliccando il link. Se si apre nel browser, clicca il pulsante **Apri nell'app mobile**."; +/* No comment provided by engineer. */ +"You can hide or mute a user profile - swipe it to the right.\nSimpleX Lock must be enabled." = "Puoi nascondere o silenziare un profilo utente - scorrilo verso destra.\nSimpleX Lock deve essere attivato."; + /* notification body */ "You can now send messages to %@" = "Ora puoi inviare messaggi a %@"; @@ -2604,6 +2700,9 @@ /* No comment provided by engineer. */ "You will join a group this link refers to and connect to its group members." = "Entrerai in un gruppo a cui si riferisce questo link e ti connetterai ai suoi membri."; +/* No comment provided by engineer. */ +"You will still receive calls and notifications from muted profiles when they are active." = "Continuerai a ricevere chiamate e notifiche da profili silenziati quando sono attivi."; + /* No comment provided by engineer. */ "You will stop receiving messages from this group. Chat history will be preserved." = "Non riceverai più messaggi da questo gruppo. La cronologia della chat verrà conservata."; diff --git a/apps/ios/nl.lproj/Localizable.strings b/apps/ios/nl.lproj/Localizable.strings index b5d1b449d9..c23766fb70 100644 --- a/apps/ios/nl.lproj/Localizable.strings +++ b/apps/ios/nl.lproj/Localizable.strings @@ -209,7 +209,7 @@ "About SimpleX Chat" = "Over SimpleX Chat"; /* No comment provided by engineer. */ -"above, then choose:" = "hierboven, kies dan:"; +"above, then choose:" = "hier boven, kies dan:"; /* No comment provided by engineer. */ "Accent color" = "Accent kleur"; @@ -248,6 +248,9 @@ /* No comment provided by engineer. */ "Add to another device" = "Toevoegen aan een ander apparaat"; +/* No comment provided by engineer. */ +"Add welcome message" = "Welkomst bericht toevoegen"; + /* member role */ "admin" = "Beheerder"; @@ -338,6 +341,9 @@ /* No comment provided by engineer. */ "Audio & video calls" = "Audio en video gesprekken"; +/* No comment provided by engineer. */ +"Audio and video calls" = "Audio en video oproepen"; + /* No comment provided by engineer. */ "audio call (not e2e encrypted)" = "audio oproep (niet e2e versleuteld)"; @@ -398,6 +404,9 @@ /* No comment provided by engineer. */ "Calls" = "Oproepen"; +/* No comment provided by engineer. */ +"Can't delete user profile!" = "Kan gebruikers profiel niet verwijderen!"; + /* No comment provided by engineer. */ "Can't invite contact!" = "Kan contact niet uitnodigen!"; @@ -479,6 +488,9 @@ /* No comment provided by engineer. */ "Check server address and try again." = "Controleer het server adres en probeer het opnieuw."; +/* No comment provided by engineer. */ +"Chinese and Spanish interface" = "Chinese en Spaanse interface"; + /* No comment provided by engineer. */ "Choose file" = "Kies bestand"; @@ -518,6 +530,9 @@ /* No comment provided by engineer. */ "Confirm new passphrase…" = "Bevestig nieuw wachtwoord…"; +/* No comment provided by engineer. */ +"Confirm password" = "Bevestig wachtwoord"; + /* server test step */ "Connect" = "Verbind"; @@ -819,7 +834,7 @@ "Delete queue" = "Wachtrij verwijderen"; /* No comment provided by engineer. */ -"Delete user profile?" = "Gebruikersprofiel verwijderen?"; +"Delete user profile?" = "Gebruikers profiel verwijderen?"; /* deleted chat item */ "deleted" = "verwijderd"; @@ -884,6 +899,9 @@ /* No comment provided by engineer. */ "Do NOT use SimpleX for emergency calls." = "Gebruik SimpleX NIET voor noodoproepen."; +/* No comment provided by engineer. */ +"Don't show again" = "Niet meer weergeven"; + /* No comment provided by engineer. */ "Duplicate display name!" = "Dubbele weergavenaam!"; @@ -965,6 +983,9 @@ /* No comment provided by engineer. */ "Enter passphrase…" = "Voer wachtwoord in…"; +/* No comment provided by engineer. */ +"Enter password above to show!" = "Voer hier boven het wachtwoord in om weer te geven!"; + /* No comment provided by engineer. */ "Enter server manually" = "Voer de server handmatig in"; @@ -1061,6 +1082,9 @@ /* No comment provided by engineer. */ "Error saving SMP servers" = "Fout bij opslaan van SMP servers"; +/* No comment provided by engineer. */ +"Error saving user password" = "Fout bij opslaan gebruikers wachtwoord"; + /* No comment provided by engineer. */ "Error sending message" = "Fout bij verzenden van bericht"; @@ -1082,6 +1106,9 @@ /* No comment provided by engineer. */ "Error updating settings" = "Fout bij bijwerken van instellingen"; +/* No comment provided by engineer. */ +"Error updating user privacy" = "Fout bij updaten van gebruikers privacy"; + /* No comment provided by engineer. */ "Error: %@" = "Fout: %@"; @@ -1133,6 +1160,12 @@ /* No comment provided by engineer. */ "Full name:" = "Volledige naam:"; +/* No comment provided by engineer. */ +"Fully re-implemented - work in background!" = "Volledig opnieuw geïmplementeerd - werk op de achtergrond!"; + +/* No comment provided by engineer. */ +"Further reduced battery usage" = "Verder verminderd batterij verbruik"; + /* No comment provided by engineer. */ "GIFs and stickers" = "GIF's en stickers"; @@ -1181,6 +1214,9 @@ /* notification */ "Group message:" = "Groep bericht:"; +/* No comment provided by engineer. */ +"Group moderation" = "Groep moderatie"; + /* No comment provided by engineer. */ "Group preferences" = "Groep voorkeuren"; @@ -1193,6 +1229,9 @@ /* snd group event chat item */ "group profile updated" = "groep profiel bijgewerkt"; +/* No comment provided by engineer. */ +"Group welcome message" = "Groep welkomst bericht"; + /* No comment provided by engineer. */ "Group will be deleted for all members - this cannot be undone!" = "Groep wordt verwijderd voor alle leden, dit kan niet ongedaan worden gemaakt!"; @@ -1205,12 +1244,21 @@ /* No comment provided by engineer. */ "Hidden" = "Verborgen"; +/* No comment provided by engineer. */ +"Hidden chat profiles" = "Verborgen chat profielen"; + +/* No comment provided by engineer. */ +"Hidden profile password" = "Verborgen profiel wachtwoord"; + /* chat item action */ "Hide" = "Verbergen"; /* No comment provided by engineer. */ "Hide app screen in the recent apps." = "App scherm verbergen in de recente apps."; +/* No comment provided by engineer. */ +"Hide profile" = "Profiel verbergen"; + /* No comment provided by engineer. */ "How it works" = "Hoe het werkt"; @@ -1436,6 +1484,9 @@ /* No comment provided by engineer. */ "Make a private connection" = "Maak een privéverbinding"; +/* No comment provided by engineer. */ +"Make profile private!" = "Profiel privé maken!"; + /* No comment provided by engineer. */ "Make sure SMP server addresses are in correct format, line separated and are not duplicated (%@)." = "Zorg ervoor dat SMP server adressen de juiste indeling hebben, regel gescheiden zijn en niet gedupliceerd zijn (%@)."; @@ -1532,6 +1583,9 @@ /* No comment provided by engineer. */ "Mute" = "Dempen"; +/* No comment provided by engineer. */ +"Muted when inactive!" = "Gedempt wanneer inactief!"; + /* No comment provided by engineer. */ "Name" = "Naam"; @@ -1604,8 +1658,11 @@ /* No comment provided by engineer. */ "Notifications are disabled!" = "Meldingen zijn uitgeschakeld!"; +/* No comment provided by engineer. */ +"Now admins can:\n- delete members' messages.\n- disable members (\"observer\" role)" = "Nu kunnen beheerders: \n- berichten van leden verwijderen.\n- schakel leden uit (\"waarnemer\" rol)"; + /* member role */ -"observer" = "waarnemer"; +"observer" = "Waarnemer"; /* enabled status group pref value */ @@ -1645,7 +1702,7 @@ "Onion hosts will not be used." = "Onion hosts worden niet gebruikt."; /* No comment provided by engineer. */ -"Only client devices store user profiles, contacts, groups, and messages sent with **2-layer end-to-end encryption**." = "Alleen client apparaten slaan gebruikersprofielen, contacten, groepen en berichten op die zijn verzonden met **2-laags end-to-end-codering**."; +"Only client devices store user profiles, contacts, groups, and messages sent with **2-layer end-to-end encryption**." = "Alleen client apparaten slaan gebruikers profielen, contacten, groepen en berichten op die zijn verzonden met **2-laags end-to-end-codering**."; /* No comment provided by engineer. */ "Only group owners can change group preferences." = "Alleen groep eigenaren kunnen groep voorkeuren wijzigen."; @@ -1681,7 +1738,7 @@ "Open Settings" = "Open instellingen"; /* authentication reason */ -"Open user profiles" = "Gebruikersprofielen openen"; +"Open user profiles" = "Gebruikers profielen openen"; /* No comment provided by engineer. */ "Open-source protocol and code – anybody can run the servers." = "Open-source protocol en code. Iedereen kan de servers draaien."; @@ -1693,7 +1750,10 @@ "or chat with the developers" = "of praat met de ontwikkelaars"; /* member role */ -"owner" = "eigenaar"; +"owner" = "Eigenaar"; + +/* No comment provided by engineer. */ +"Password to show" = "Wachtwoord om weer te geven"; /* No comment provided by engineer. */ "Paste" = "Plakken"; @@ -1794,6 +1854,9 @@ /* No comment provided by engineer. */ "Protect app screen" = "App scherm verbergen"; +/* No comment provided by engineer. */ +"Protect your chat profiles with a password!" = "Bescherm je chat profielen met een wachtwoord!"; + /* No comment provided by engineer. */ "Protocol timeout" = "Protocol timeout"; @@ -1926,6 +1989,9 @@ /* No comment provided by engineer. */ "Save and notify group members" = "Opslaan en Groep leden melden"; +/* No comment provided by engineer. */ +"Save and update group profile" = "Groep profiel opslaan en bijwerken"; + /* No comment provided by engineer. */ "Save archive" = "Bewaar archief"; @@ -1941,9 +2007,18 @@ /* No comment provided by engineer. */ "Save preferences?" = "Voorkeuren opslaan?"; +/* No comment provided by engineer. */ +"Save profile password" = "Bewaar profiel wachtwoord"; + /* No comment provided by engineer. */ "Save servers" = "Bewaar servers"; +/* No comment provided by engineer. */ +"Save servers?" = "Servers opslaan?"; + +/* No comment provided by engineer. */ +"Save welcome message?" = "Welkomst bericht opslaan?"; + /* No comment provided by engineer. */ "Saved WebRTC ICE servers will be removed" = "Opgeslagen WebRTC ICE servers worden verwijderd"; @@ -2040,6 +2115,9 @@ /* No comment provided by engineer. */ "Set passphrase to export" = "Wachtwoord instellen om te exporteren"; +/* No comment provided by engineer. */ +"Set the message shown to new members!" = "Stel het getoonde bericht in voor nieuwe leden!"; + /* No comment provided by engineer. */ "Set timeouts for proxy/VPN" = "Stel timeouts in voor proxy/VPN"; @@ -2145,6 +2223,9 @@ /* No comment provided by engineer. */ "Tap button " = "Tik op de knop "; +/* No comment provided by engineer. */ +"Tap to activate profile." = "Tik om profiel te activeren."; + /* No comment provided by engineer. */ "Tap to join" = "Tik om mee te doen"; @@ -2232,6 +2313,12 @@ /* No comment provided by engineer. */ "Theme" = "Thema"; +/* No comment provided by engineer. */ +"There should be at least one user profile." = "Er moet ten minste één gebruikers profiel zijn."; + +/* No comment provided by engineer. */ +"There should be at least one visible user profile." = "Er moet ten minste één zichtbaar gebruikers profiel zijn."; + /* No comment provided by engineer. */ "This action cannot be undone - all received and sent files and media will be deleted. Low resolution pictures will remain." = "Deze actie kan niet ongedaan worden gemaakt, alle ontvangen en verzonden bestanden en media worden verwijderd. Foto's met een lage resolutie blijven behouden."; @@ -2274,6 +2361,9 @@ /* 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**."; + /* 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."; @@ -2307,6 +2397,9 @@ /* No comment provided by engineer. */ "Unexpected migration state" = "Onverwachte migratiestatus"; +/* No comment provided by engineer. */ +"Unhide" = "zichtbaar maken"; + /* connection info */ "unknown" = "onbekend"; @@ -2377,7 +2470,7 @@ "Use SimpleX Chat servers?" = "SimpleX Chat servers gebruiken?"; /* No comment provided by engineer. */ -"User profile" = "Gebruikersprofiel"; +"User profile" = "Gebruikers profiel"; /* No comment provided by engineer. */ "Using .onion hosts requires compatible VPN provider." = "Het gebruik van .onion-hosts vereist een compatibele VPN-provider."; @@ -2455,7 +2548,7 @@ "Welcome %@!" = "Welkom %@!"; /* No comment provided by engineer. */ -"Welcome message" = "Welkoms bericht"; +"Welcome message" = "Welkomst bericht"; /* No comment provided by engineer. */ "What's new" = "Wat is er nieuw"; @@ -2467,7 +2560,7 @@ "When you share an incognito profile with somebody, this profile will be used for the groups they invite you to." = "Wanneer je een incognito profiel met iemand deelt, wordt dit profiel gebruikt voor de groepen waarvoor ze je uitnodigen."; /* No comment provided by engineer. */ -"With optional welcome message." = "Met optioneel welkomstbericht."; +"With optional welcome message." = "Met optioneel welkomst bericht."; /* No comment provided by engineer. */ "Wrong database passphrase" = "Verkeerd wachtwoord voor de database"; @@ -2511,6 +2604,9 @@ /* No comment provided by engineer. */ "You can also connect by clicking the link. If it opens in the browser, click **Open in mobile app** button." = "U kunt ook verbinding maken door op de link te klikken. Als het in de browser wordt geopend, klikt u op de knop **Openen in mobiele app**."; +/* No comment provided by engineer. */ +"You can hide or mute a user profile - swipe it to the right.\nSimpleX Lock must be enabled." = "U kunt een gebruikers profiel verbergen of dempen - veeg het naar rechts.\nSimpleX Lock moet ingeschakeld zijn."; + /* notification body */ "You can now send messages to %@" = "Je kunt nu berichten sturen naar %@"; @@ -2604,6 +2700,9 @@ /* No comment provided by engineer. */ "You will join a group this link refers to and connect to its group members." = "U wordt lid van een groep waarnaar deze link verwijst en maakt verbinding met de groepsleden."; +/* No comment provided by engineer. */ +"You will still receive calls and notifications from muted profiles when they are active." = "U ontvangt nog steeds oproepen en meldingen van gedempte profielen wanneer deze actief zijn."; + /* No comment provided by engineer. */ "You will stop receiving messages from this group. Chat history will be preserved." = "Je ontvangt geen berichten meer van deze groep. Je gesprek geschiedenis blijft behouden."; diff --git a/apps/ios/ru.lproj/Localizable.strings b/apps/ios/ru.lproj/Localizable.strings index 0b4c3851b3..bcdba57d21 100644 --- a/apps/ios/ru.lproj/Localizable.strings +++ b/apps/ios/ru.lproj/Localizable.strings @@ -248,6 +248,9 @@ /* No comment provided by engineer. */ "Add to another device" = "Добавить на другое устройство"; +/* No comment provided by engineer. */ +"Add welcome message" = "Добавить приветственное сообщение"; + /* member role */ "admin" = "админ"; @@ -338,12 +341,18 @@ /* No comment provided by engineer. */ "Audio & video calls" = "Аудио- и видеозвонки"; +/* No comment provided by engineer. */ +"Audio and video calls" = "Аудио и видео звонки"; + /* No comment provided by engineer. */ "audio call (not e2e encrypted)" = "аудиозвонок (не e2e зашифрованный)"; /* No comment provided by engineer. */ "Authentication failed" = "Ошибка аутентификации"; +/* No comment provided by engineer. */ +"Authentication is required before the call is connected, but you may miss calls." = "Аутентификация требуется до того, как звонок соединится, но вы можете пропустить звонки."; + /* No comment provided by engineer. */ "Authentication unavailable" = "Аутентификация недоступна"; @@ -395,6 +404,9 @@ /* No comment provided by engineer. */ "Calls" = "Звонки"; +/* No comment provided by engineer. */ +"Can't delete user profile!" = "Нельзя удалить профиль пользователя!"; + /* No comment provided by engineer. */ "Can't invite contact!" = "Нельзя пригласить контакт!"; @@ -476,6 +488,9 @@ /* No comment provided by engineer. */ "Check server address and try again." = "Проверьте адрес сервера и попробуйте снова."; +/* No comment provided by engineer. */ +"Chinese and Spanish interface" = "Китайский и Испанский интерфейс"; + /* No comment provided by engineer. */ "Choose file" = "Выбрать файл"; @@ -515,6 +530,9 @@ /* No comment provided by engineer. */ "Confirm new passphrase…" = "Подтвердите новый пароль…"; +/* No comment provided by engineer. */ +"Confirm password" = "Подтвердить пароль"; + /* server test step */ "Connect" = "Соединиться"; @@ -881,6 +899,9 @@ /* No comment provided by engineer. */ "Do NOT use SimpleX for emergency calls." = "Не используйте SimpleX для экстренных звонков."; +/* No comment provided by engineer. */ +"Don't show again" = "Не показывать"; + /* No comment provided by engineer. */ "Duplicate display name!" = "Имя профиля уже используется!"; @@ -962,6 +983,9 @@ /* No comment provided by engineer. */ "Enter passphrase…" = "Введите пароль…"; +/* No comment provided by engineer. */ +"Enter password above to show!" = "Введите пароль выше, чтобы раскрыть!"; + /* No comment provided by engineer. */ "Enter server manually" = "Ввести сервер вручную"; @@ -1058,6 +1082,9 @@ /* No comment provided by engineer. */ "Error saving SMP servers" = "Ошибка при сохранении SMP серверов"; +/* No comment provided by engineer. */ +"Error saving user password" = "Ошибка при сохранении пароля пользователя"; + /* No comment provided by engineer. */ "Error sending message" = "Ошибка при отправке сообщения"; @@ -1079,6 +1106,9 @@ /* No comment provided by engineer. */ "Error updating settings" = "Ошибка при сохранении настроек сети"; +/* No comment provided by engineer. */ +"Error updating user privacy" = "Ошибка при обновлении конфиденциальности"; + /* No comment provided by engineer. */ "Error: %@" = "Ошибка: %@"; @@ -1130,6 +1160,12 @@ /* No comment provided by engineer. */ "Full name:" = "Полное имя:"; +/* No comment provided by engineer. */ +"Fully re-implemented - work in background!" = "Полностью обновлены - работают в фоне!"; + +/* No comment provided by engineer. */ +"Further reduced battery usage" = "Уменьшенное потребление батареи"; + /* No comment provided by engineer. */ "GIFs and stickers" = "ГИФ файлы и стикеры"; @@ -1178,6 +1214,9 @@ /* notification */ "Group message:" = "Групповое сообщение:"; +/* No comment provided by engineer. */ +"Group moderation" = "Модерация группы"; + /* No comment provided by engineer. */ "Group preferences" = "Предпочтения группы"; @@ -1190,6 +1229,9 @@ /* snd group event chat item */ "group profile updated" = "профиль группы обновлен"; +/* No comment provided by engineer. */ +"Group welcome message" = "Приветственное сообщение группы"; + /* No comment provided by engineer. */ "Group will be deleted for all members - this cannot be undone!" = "Группа будет удалена для всех членов - это действие нельзя отменить!"; @@ -1202,12 +1244,21 @@ /* No comment provided by engineer. */ "Hidden" = "Скрытое"; +/* No comment provided by engineer. */ +"Hidden chat profiles" = "Скрытые профили чата"; + +/* No comment provided by engineer. */ +"Hidden profile password" = "Пароль скрытого профиля"; + /* chat item action */ "Hide" = "Спрятать"; /* No comment provided by engineer. */ "Hide app screen in the recent apps." = "Скрыть экран приложения."; +/* No comment provided by engineer. */ +"Hide profile" = "Скрыть профиль"; + /* No comment provided by engineer. */ "How it works" = "Как это работает"; @@ -1304,6 +1355,9 @@ /* No comment provided by engineer. */ "Instantly" = "Мгновенно"; +/* No comment provided by engineer. */ +"Interface" = "Интерфейс"; + /* invalid chat data */ "invalid chat" = "ошибка чата"; @@ -1430,6 +1484,9 @@ /* No comment provided by engineer. */ "Make a private connection" = "Добавьте контакт"; +/* No comment provided by engineer. */ +"Make profile private!" = "Сделайте профиль скрытым!"; + /* No comment provided by engineer. */ "Make sure SMP server addresses are in correct format, line separated and are not duplicated (%@)." = "Пожалуйста, проверьте, что адреса SMP серверов имеют правильный формат, каждый адрес на отдельной строке и не повторяется (%@)."; @@ -1526,6 +1583,9 @@ /* No comment provided by engineer. */ "Mute" = "Без звука"; +/* No comment provided by engineer. */ +"Muted when inactive!" = "Без звука, когда не активный!"; + /* No comment provided by engineer. */ "Name" = "Имя"; @@ -1598,6 +1658,9 @@ /* No comment provided by engineer. */ "Notifications are disabled!" = "Уведомления выключены"; +/* No comment provided by engineer. */ +"Now admins can:\n- delete members' messages.\n- disable members (\"observer\" role)" = "Теперь админы могут:\n- удалять сообщения членов.\n- приостанавливать членов (роль \"наблюдатель\")"; + /* member role */ "observer" = "читатель"; @@ -1689,6 +1752,9 @@ /* member role */ "owner" = "владелец"; +/* No comment provided by engineer. */ +"Password to show" = "Пароль чтобы раскрыть"; + /* No comment provided by engineer. */ "Paste" = "Вставить"; @@ -1788,6 +1854,9 @@ /* No comment provided by engineer. */ "Protect app screen" = "Защитить экран приложения"; +/* No comment provided by engineer. */ +"Protect your chat profiles with a password!" = "Защитите ваши профили чата паролем!"; + /* No comment provided by engineer. */ "Protocol timeout" = "Таймаут протокола"; @@ -1920,6 +1989,9 @@ /* No comment provided by engineer. */ "Save and notify group members" = "Сохранить и уведомить членов группы"; +/* No comment provided by engineer. */ +"Save and update group profile" = "Сохранить сообщение и обновить группу"; + /* No comment provided by engineer. */ "Save archive" = "Сохранить архив"; @@ -1935,9 +2007,18 @@ /* No comment provided by engineer. */ "Save preferences?" = "Сохранить предпочтения?"; +/* No comment provided by engineer. */ +"Save profile password" = "Сохранить пароль профиля"; + /* No comment provided by engineer. */ "Save servers" = "Сохранить серверы"; +/* No comment provided by engineer. */ +"Save servers?" = "Сохранить серверы?"; + +/* No comment provided by engineer. */ +"Save welcome message?" = "Сохранить приветственное сообщение?"; + /* No comment provided by engineer. */ "Saved WebRTC ICE servers will be removed" = "Сохраненные WebRTC ICE серверы будут удалены"; @@ -2034,6 +2115,9 @@ /* No comment provided by engineer. */ "Set passphrase to export" = "Установите пароль"; +/* No comment provided by engineer. */ +"Set the message shown to new members!" = "Установить сообщение для новых членов группы!"; + /* No comment provided by engineer. */ "Set timeouts for proxy/VPN" = "Установить таймауты для прокси/VPN"; @@ -2052,6 +2136,9 @@ /* No comment provided by engineer. */ "Share one-time invitation link" = "Поделиться ссылкой-приглашением"; +/* No comment provided by engineer. */ +"Show calls in phone history" = "Показать звонки в истории телефона"; + /* No comment provided by engineer. */ "Show preview" = "Показывать уведомления"; @@ -2136,6 +2223,9 @@ /* No comment provided by engineer. */ "Tap button " = "Нажмите кнопку "; +/* No comment provided by engineer. */ +"Tap to activate profile." = "Нажмите, чтобы сделать профиль активным."; + /* No comment provided by engineer. */ "Tap to join" = "Нажмите, чтобы вступить"; @@ -2223,6 +2313,12 @@ /* No comment provided by engineer. */ "Theme" = "Тема"; +/* No comment provided by engineer. */ +"There should be at least one user profile." = "Должен быть хотя бы один профиль пользователя."; + +/* No comment provided by engineer. */ +"There should be at least one visible user profile." = "Должен быть хотя бы один открытый профиль пользователя."; + /* No comment provided by engineer. */ "This action cannot be undone - all received and sent files and media will be deleted. Low resolution pictures will remain." = "Это действие нельзя отменить — все полученные и отправленные файлы будут удалены. Изображения останутся в низком разрешении."; @@ -2265,6 +2361,9 @@ /* No comment provided by engineer. */ "To record voice message please grant permission to use Microphone." = "Для записи голосового сообщения, пожалуйста разрешите доступ к микрофону."; +/* No comment provided by engineer. */ +"To reveal your hidden profile, enter a full password into a search field in **Your chat profiles** page." = "Чтобы показать Ваш скрытый профиль, введите его пароль в поле поиска на странице **Ваши профили чата**."; + /* No comment provided by engineer. */ "To support instant push notifications the chat database has to be migrated." = "Для поддержки мгновенный доставки уведомлений данные чата должны быть перемещены."; @@ -2298,15 +2397,24 @@ /* No comment provided by engineer. */ "Unexpected migration state" = "Неожиданная ошибка при перемещении данных чата"; +/* No comment provided by engineer. */ +"Unhide" = "Раскрыть"; + /* connection info */ "unknown" = "неизвестно"; +/* callkit banner */ +"Unknown caller" = "Неизвестный звонок"; + /* No comment provided by engineer. */ "Unknown database error: %@" = "Неизвестная ошибка базы данных: %@"; /* No comment provided by engineer. */ "Unknown error" = "Неизвестная ошибка"; +/* No comment provided by engineer. */ +"Unless you use iOS call interface, enable Do Not Disturb mode to avoid interruptions." = "Если вы не используете интерфейс iOS, включите режим Не отвлекать, чтобы звонок не прерывался."; + /* No comment provided by engineer. */ "Unless your contact deleted the connection or this link was already used, it might be a bug - please report it.\nTo connect, please ask your contact to create another connection link and check that you have a stable network connection." = "Возможно, ваш контакт удалил ссылку, или она уже была использована. Если это не так, то это может быть ошибкой - пожалуйста, сообщите нам об этом.\nЧтобы установить соединение, попросите ваш контакт создать еще одну ссылку и проверьте ваше соединение с сетью."; @@ -2352,6 +2460,9 @@ /* No comment provided by engineer. */ "Use for new connections" = "Использовать для новых соединений"; +/* No comment provided by engineer. */ +"Use iOS call interface" = "Использовать интерфейс iOS для звонков"; + /* No comment provided by engineer. */ "Use server" = "Использовать сервер"; @@ -2487,9 +2598,15 @@ /* No comment provided by engineer. */ "you are observer" = "только чтение сообщений"; +/* No comment provided by engineer. */ +"You can accept calls from lock screen, without device and app authentication." = "Вы можете принимать звонки на экране блокировки, без аутентификации."; + /* No comment provided by engineer. */ "You can also connect by clicking the link. If it opens in the browser, click **Open in mobile app** button." = "Вы также можете соединиться, открыв ссылку. Если ссылка откроется в браузере, нажмите кнопку **Open in mobile app**."; +/* No comment provided by engineer. */ +"You can hide or mute a user profile - swipe it to the right.\nSimpleX Lock must be enabled." = "Вы можете скрыть профиль или выключить уведомления - потяните его вправо.\nБлокировка SimpleX должна быть включена."; + /* notification body */ "You can now send messages to %@" = "Вы теперь можете отправлять сообщения %@"; @@ -2583,6 +2700,9 @@ /* No comment provided by engineer. */ "You will join a group this link refers to and connect to its group members." = "Вы вступите в группу, на которую ссылается эта ссылка, и соединитесь с её членами."; +/* No comment provided by engineer. */ +"You will still receive calls and notifications from muted profiles when they are active." = "Вы все равно получите звонки и уведомления в профилях без звука, когда они активные."; + /* No comment provided by engineer. */ "You will stop receiving messages from this group. Chat history will be preserved." = "Вы перестанете получать сообщения от этой группы. История чата будет сохранена."; diff --git a/apps/ios/zh-Hans.lproj/Localizable.strings b/apps/ios/zh-Hans.lproj/Localizable.strings index b7aac89721..39a4cca29c 100644 --- a/apps/ios/zh-Hans.lproj/Localizable.strings +++ b/apps/ios/zh-Hans.lproj/Localizable.strings @@ -248,6 +248,9 @@ /* No comment provided by engineer. */ "Add to another device" = "添加另一设备"; +/* No comment provided by engineer. */ +"Add welcome message" = "添加欢迎信息"; + /* member role */ "admin" = "管理员"; @@ -338,6 +341,9 @@ /* No comment provided by engineer. */ "Audio & video calls" = "语音和视频通话"; +/* No comment provided by engineer. */ +"Audio and video calls" = "音视频通话"; + /* No comment provided by engineer. */ "audio call (not e2e encrypted)" = "语音通话(非端到端加密)"; @@ -398,6 +404,9 @@ /* No comment provided by engineer. */ "Calls" = "通话"; +/* No comment provided by engineer. */ +"Can't delete user profile!" = "无法删除用户个人资料!"; + /* No comment provided by engineer. */ "Can't invite contact!" = "无法邀请联系人!"; @@ -479,6 +488,9 @@ /* No comment provided by engineer. */ "Check server address and try again." = "检查服务器地址并再试一次。"; +/* No comment provided by engineer. */ +"Chinese and Spanish interface" = "中文和西班牙文界面"; + /* No comment provided by engineer. */ "Choose file" = "选择文件"; @@ -518,6 +530,9 @@ /* No comment provided by engineer. */ "Confirm new passphrase…" = "确认新密码……"; +/* No comment provided by engineer. */ +"Confirm password" = "确认密码"; + /* server test step */ "Connect" = "连接"; @@ -884,6 +899,9 @@ /* No comment provided by engineer. */ "Do NOT use SimpleX for emergency calls." = "请勿使用 SimpleX 进行紧急通话。"; +/* No comment provided by engineer. */ +"Don't show again" = "不再显示"; + /* No comment provided by engineer. */ "Duplicate display name!" = "重复的显示名!"; @@ -965,6 +983,9 @@ /* No comment provided by engineer. */ "Enter passphrase…" = "输入密码……"; +/* No comment provided by engineer. */ +"Enter password above to show!" = "在上面输入密码以显示!"; + /* No comment provided by engineer. */ "Enter server manually" = "手动输入服务器"; @@ -1061,6 +1082,9 @@ /* No comment provided by engineer. */ "Error saving SMP servers" = "保存 SMP 服务器错误"; +/* No comment provided by engineer. */ +"Error saving user password" = "保存用户密码时出错"; + /* No comment provided by engineer. */ "Error sending message" = "发送消息错误"; @@ -1082,6 +1106,9 @@ /* No comment provided by engineer. */ "Error updating settings" = "更新设置错误"; +/* No comment provided by engineer. */ +"Error updating user privacy" = "更新用户隐私时出错"; + /* No comment provided by engineer. */ "Error: %@" = "错误: %@"; @@ -1133,6 +1160,12 @@ /* No comment provided by engineer. */ "Full name:" = "全名:"; +/* No comment provided by engineer. */ +"Fully re-implemented - work in background!" = "完全重新实现 - 在后台工作!"; + +/* No comment provided by engineer. */ +"Further reduced battery usage" = "进一步减少电池使用"; + /* No comment provided by engineer. */ "GIFs and stickers" = "GIF 和贴纸"; @@ -1181,6 +1214,9 @@ /* notification */ "Group message:" = "群组消息:"; +/* No comment provided by engineer. */ +"Group moderation" = "小组审核"; + /* No comment provided by engineer. */ "Group preferences" = "群组偏好设置"; @@ -1193,6 +1229,9 @@ /* snd group event chat item */ "group profile updated" = "群组资料已更新"; +/* No comment provided by engineer. */ +"Group welcome message" = "群欢迎词"; + /* No comment provided by engineer. */ "Group will be deleted for all members - this cannot be undone!" = "将为所有成员删除群组——此操作无法撤消!"; @@ -1205,12 +1244,21 @@ /* No comment provided by engineer. */ "Hidden" = "已隐藏"; +/* No comment provided by engineer. */ +"Hidden chat profiles" = "隐藏的聊天资料"; + +/* No comment provided by engineer. */ +"Hidden profile password" = "隐藏的个人资料密码"; + /* chat item action */ "Hide" = "隐藏"; /* No comment provided by engineer. */ "Hide app screen in the recent apps." = "在最近的应用程序中隐藏应用程序屏幕。"; +/* No comment provided by engineer. */ +"Hide profile" = "隐藏个人资料"; + /* No comment provided by engineer. */ "How it works" = "工作原理"; @@ -1436,6 +1484,9 @@ /* No comment provided by engineer. */ "Make a private connection" = "建立私密连接"; +/* No comment provided by engineer. */ +"Make profile private!" = "将个人资料设为私密!"; + /* No comment provided by engineer. */ "Make sure SMP server addresses are in correct format, line separated and are not duplicated (%@)." = "请确保 SMP服 务器地址格式正确,每行一个地址并且不重复 (%@)。"; @@ -1532,6 +1583,9 @@ /* No comment provided by engineer. */ "Mute" = "静音"; +/* No comment provided by engineer. */ +"Muted when inactive!" = "不活动时静音!"; + /* No comment provided by engineer. */ "Name" = "名称"; @@ -1604,6 +1658,9 @@ /* No comment provided by engineer. */ "Notifications are disabled!" = "通知被禁用!"; +/* No comment provided by engineer. */ +"Now admins can:\n- delete members' messages.\n- disable members (\"observer\" role)" = "现在管理员可以:\n- 删除成员的消息。\n- 禁用成员(“观察员”角色)"; + /* member role */ "observer" = "观察者"; @@ -1695,6 +1752,9 @@ /* member role */ "owner" = "所有者"; +/* No comment provided by engineer. */ +"Password to show" = "显示密码"; + /* No comment provided by engineer. */ "Paste" = "粘贴"; @@ -1794,6 +1854,9 @@ /* No comment provided by engineer. */ "Protect app screen" = "保护应用程序屏幕"; +/* No comment provided by engineer. */ +"Protect your chat profiles with a password!" = "使用密码保护您的聊天资料!"; + /* No comment provided by engineer. */ "Protocol timeout" = "协议超时"; @@ -1926,6 +1989,9 @@ /* No comment provided by engineer. */ "Save and notify group members" = "保存并通知群组成员"; +/* No comment provided by engineer. */ +"Save and update group profile" = "保存和更新组配置文件"; + /* No comment provided by engineer. */ "Save archive" = "保存存档"; @@ -1941,9 +2007,18 @@ /* No comment provided by engineer. */ "Save preferences?" = "保存偏好设置?"; +/* No comment provided by engineer. */ +"Save profile password" = "保存个人资料密码"; + /* No comment provided by engineer. */ "Save servers" = "保存服务器"; +/* No comment provided by engineer. */ +"Save servers?" = "保存服务器?"; + +/* No comment provided by engineer. */ +"Save welcome message?" = "保存欢迎信息?"; + /* No comment provided by engineer. */ "Saved WebRTC ICE servers will be removed" = "已保存的WebRTC ICE服务器将被删除"; @@ -2040,6 +2115,9 @@ /* No comment provided by engineer. */ "Set passphrase to export" = "设置密码来导出"; +/* No comment provided by engineer. */ +"Set the message shown to new members!" = "设置向新成员显示的消息!"; + /* No comment provided by engineer. */ "Set timeouts for proxy/VPN" = "设置代理/VPN的超时时间"; @@ -2145,6 +2223,9 @@ /* No comment provided by engineer. */ "Tap button " = "点击按钮 "; +/* No comment provided by engineer. */ +"Tap to activate profile." = "点击以激活个人资料。"; + /* No comment provided by engineer. */ "Tap to join" = "点击加入"; @@ -2212,7 +2293,7 @@ "The message will be deleted for all members." = "将为所有成员删除该消息。"; /* No comment provided by engineer. */ -"The message will be marked as moderated for all members." = "该消息将对所有成员显示为已审核。"; +"The message will be marked as moderated for all members." = "该消息将对所有成员标记为已被管理员移除。"; /* No comment provided by engineer. */ "The next generation of private messaging" = "下一代私密通讯软件"; @@ -2232,6 +2313,12 @@ /* No comment provided by engineer. */ "Theme" = "主题"; +/* No comment provided by engineer. */ +"There should be at least one user profile." = "应该至少有一个用户资料。"; + +/* No comment provided by engineer. */ +"There should be at least one visible user profile." = "应该至少有一个可见的用户资料。"; + /* No comment provided by engineer. */ "This action cannot be undone - all received and sent files and media will be deleted. Low resolution pictures will remain." = "此操作无法撤消——所有接收和发送的文件和媒体都将被删除。 低分辨率图片将保留。"; @@ -2274,6 +2361,9 @@ /* No comment provided by engineer. */ "To record voice message please grant permission to use Microphone." = "请授权使用麦克风以录制语音消息。"; +/* No comment provided by engineer. */ +"To reveal your hidden profile, enter a full password into a search field in **Your chat profiles** page." = "要显示您的隐藏个人资料,请在**您的聊天个人资料**页面的搜索字段中输入完整密码。"; + /* No comment provided by engineer. */ "To support instant push notifications the chat database has to be migrated." = "为了支持即时推送通知,聊天数据库必须被迁移。"; @@ -2307,6 +2397,9 @@ /* No comment provided by engineer. */ "Unexpected migration state" = "未预料的迁移状态"; +/* No comment provided by engineer. */ +"Unhide" = "取消隐藏"; + /* connection info */ "unknown" = "未知"; @@ -2511,6 +2604,9 @@ /* No comment provided by engineer. */ "You can also connect by clicking the link. If it opens in the browser, click **Open in mobile app** button." = "您也可以通过点击链接进行连接。如果在浏览器中打开,请点击“在移动应用程序中打开”按钮。"; +/* No comment provided by engineer. */ +"You can hide or mute a user profile - swipe it to the right.\nSimpleX Lock must be enabled." = "您可以隐藏或静音用户个人资料——只需向右滑动。\n必须启用 SimpleX Lock。"; + /* notification body */ "You can now send messages to %@" = "您现在可以给 %@ 发送消息"; @@ -2604,6 +2700,9 @@ /* No comment provided by engineer. */ "You will join a group this link refers to and connect to its group members." = "您将加入此链接指向的群组并连接到其群组成员。"; +/* No comment provided by engineer. */ +"You will still receive calls and notifications from muted profiles when they are active." = "当静音配置文件处于活动状态时,您仍会收到来自静音配置文件的电话和通知。"; + /* No comment provided by engineer. */ "You will stop receiving messages from this group. Chat history will be preserved." = "您将停止接收来自该群组的消息。聊天记录将被保留。"; From a86725480f93cdec97f122b85f5c78a951a825af Mon Sep 17 00:00:00 2001 From: Evgeny Poberezkin <2769109+epoberezkin@users.noreply.github.com> Date: Fri, 24 Mar 2023 22:51:50 +0000 Subject: [PATCH 03/19] Translated using Weblate (Dutch) (#2073) Currently translated at 100.0% (211 of 211 strings) Translation: SimpleX Chat/SimpleX Chat website Translate-URL: https://hosted.weblate.org/projects/simplex-chat/website/nl/ Co-authored-by: John m --- website/langs/nl.json | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/website/langs/nl.json b/website/langs/nl.json index d7adc5049d..b035cf475d 100644 --- a/website/langs/nl.json +++ b/website/langs/nl.json @@ -11,7 +11,7 @@ "simplex-explained-tab-1-text": "1. Wat gebruikers ervaren", "simplex-explained-tab-3-text": "3. Wat servers zien", "simplex-explained-tab-1-p-1": "U kunt contacten en groepen maken en tweerichtings gesprekken voeren, zoals in elke andere messenger.", - "simplex-explained-tab-1-p-2": "Hoe kan het werken met unidirectionele wachtrijen en zonder gebruikersprofiel-ID's?", + "simplex-explained-tab-1-p-2": "Hoe kan het werken met unidirectionele wachtrijen en zonder gebruikers profiel ID's?", "simplex-explained-tab-3-p-1": "De servers hebben afzonderlijke anonieme inloggegevens voor elke wachtrij en weten niet tot welke gebruikers ze behoren.", "simplex-explained-tab-3-p-2": "Gebruikers kunnen de privacy van metadata verder verbeteren door Tor te gebruiken om toegang te krijgen tot servers, waardoor corellatie op IP-adres wordt voorkomen.", "chat-bot-example": "Chatbot voorbeeld", @@ -88,7 +88,7 @@ "simplex-unique-4-title": "U bent eigenaar van het SimpleX netwerk", "simplex-unique-4-overlay-1-title": "Volledig gedecentraliseerd — gebruikers zijn eigenaar van het SimpleX netwerk", "hero-overlay-card-1-p-3": "U definieert welke server(s) u wilt gebruiken om de berichten te ontvangen, uw contacten — de servers die u gebruikt om de berichten naar hen te verzenden. Elk gesprek gebruikt waarschijnlijk twee verschillende servers.", - "hero-overlay-card-2-p-1": "Wanneer gebruikers een blijvende identiteit hebben, zelfs als dit slechts een willekeurig nummer is, zoals een sessie-ID, bestaat het risico dat de provider of een aanvaller kan zien hoe de gebruikers zijn verbonden en hoeveel berichten ze verzenden.", + "hero-overlay-card-2-p-1": "Wanneer gebruikers een blijvende identiteit hebben, zelfs als dit slechts een willekeurig nummer is, zoals een sessie ID, bestaat het risico dat de provider of een aanvaller kan zien hoe de gebruikers zijn verbonden en hoeveel berichten ze verzenden.", "hero-overlay-card-1-p-4": "Dit ontwerp voorkomt het lekken van eventuele gebruikersgegevens. metadata op applicatie niveau. Om de privacy verder te verbeteren en uw IP-adres te beschermen, kunt u via Tor verbinding maken met berichten servers.", "hero-overlay-card-1-p-5": "Alleen client apparaten slaan gebruikers profielen, contacten en groepen op; de berichten worden verzonden met 2-laags end-to-end versleuteling.", "hero-overlay-card-1-p-6": "Lees meer in SimpleX-whitepaper.", @@ -153,8 +153,8 @@ "simplex-network-1-overlay-linktext": "problemen van P2P netwerken", "simplex-network-2-header": "In tegenstelling tot federatieve netwerken", "simplex-network-3-header": "SimpleX netwerk", - "simplex-network-3-desc": "servers bieden unidirectionele wachtrijen om de gebruikers te verbinden, maar ze hebben geen zicht op de netwerkverbindingsgrafiek — alleen de gebruikers.", - "simplex-network-2-desc": "SimpleX relay servers slaan GEEN gebruikersprofielen, contacten en afgeleverde berichten op, maken GEEN verbinding met elkaar en er is GEEN serverdirectory.", + "simplex-network-3-desc": "servers bieden unidirectionele wachtrijen om de gebruikers te verbinden, maar ze hebben geen zicht op de netwerk verbindings grafiek — alleen de gebruikers.", + "simplex-network-2-desc": "SimpleX relay servers slaan GEEN gebruikers profielen, contacten en afgeleverde berichten op, maken GEEN verbinding met elkaar en er is GEEN server directory.", "comparison-section-header": "Vergelijking met andere protocollen", "protocol-1-text": "Signaal, grote platforms", "protocol-2-text": "XMPP, Matrix", @@ -187,9 +187,9 @@ "simplex-unique-overlay-card-1-p-3": "Dit ontwerp beschermt de privacy van met wie u communiceert en verbergt deze voor SimpleX platform servers en voor waarnemers. Om uw IP-adres voor de servers te verbergen, kunt u verbinding maken met SimpleX servers via Tor .", "simplex-unique-overlay-card-2-p-1": "Omdat je geen identificatie hebt op het SimpleX platform, kan niemand contact met je opnemen, tenzij je een eenmalig of tijdelijk gebruikers adres deelt, als een QR-code of een link.", "simplex-unique-overlay-card-2-p-2": "Zelfs met het optionele gebruikers adres, hoewel het kan worden gebruikt om spam-contact verzoeken te verzenden, kunt u het wijzigen of volledig verwijderen zonder uw verbindingen te verliezen.", - "simplex-unique-overlay-card-3-p-1": "SimpleX Chat slaat alle gebruikersgegevens alleen op clientapparaten op met behulp van een draagbaar gecodeerd databaseformaat dat kan worden geëxporteerd en overgebracht naar elk ondersteund apparaat.", + "simplex-unique-overlay-card-3-p-1": "SimpleX Chat slaat alle gebruikersgegevens alleen op client apparaten op met behulp van een draagbaar gecodeerd databaseformaat dat kan worden geëxporteerd en overgebracht naar elk ondersteund apparaat.", "simplex-unique-overlay-card-3-p-2": "De end-to-end versleutelde berichten worden tijdelijk op SimpleX relayservers bewaard totdat ze zijn ontvangen, waarna ze permanent worden verwijderd.", - "simplex-unique-overlay-card-3-p-3": "In tegenstelling tot gefedereerde netwerkservers (e-mail, XMPP of Matrix), slaan SimpleX servers geen gebruikersaccounts op, ze sturen alleen berichten door, waardoor de privacy van beide partijen wordt beschermd.", + "simplex-unique-overlay-card-3-p-3": "In tegenstelling tot gefedereerde netwerkservers (e-mail, XMPP of Matrix), slaan SimpleX servers geen gebruikers account op, ze sturen alleen berichten door, waardoor de privacy van beide partijen wordt beschermd.", "simplex-unique-overlay-card-4-p-1": "U kunt SimpleX gebruiken met uw eigen servers en nog steeds communiceren met mensen die de door ons geleverde vooraf geconfigureerde servers gebruiken.", "simplex-unique-overlay-card-4-p-3": "Als u overweegt om voor het SimpleX platform te ontwikkelen, bijvoorbeeld de chatbot voor gebruikers van de SimpleX app, of de integratie van de SimpleX Chat bibliotheek in uw mobiele apps, get in touch for any advice en ondersteuning.", "simplex-unique-card-1-p-1": "SimpleX beschermt de privacy van uw profiel, contacten en metadata en verbergt deze voor SimpleX platformservers en eventuele waarnemers.", @@ -201,7 +201,7 @@ "privacy-matters-overlay-card-2-p-1": "Nog niet zo lang geleden zagen we dat de grote verkiezingen werden gemanipuleerd door een gerenommeerd adviesbureau dat onze sociale grafieken gebruikte om ons beeld van de echte wereld te vervormen en onze stemmen te manipuleren.", "simplex-unique-overlay-card-3-p-4": "Er zijn geen identifiers of gecodeerde tekst tussen verzonden en ontvangen serververkeer — als iemand het waarneemt, kunnen ze niet gemakkelijk bepalen wie met wie communiceert, zelfs als TLS is gecompromitteerd.", "simplex-unique-overlay-card-4-p-2": "Het SimpleX platform gebruikt een open protocol en biedt SDK om chatbots te maken, waardoor services kunnen worden geïmplementeerd waarmee gebruikers kunnen communiceren via SimpleX Chat apps — waar we' erg naar uitkijken om te zien welke SimpleX services u kunt bouwen.", - "simplex-unique-card-1-p-2": "In tegenstelling tot elk ander bestaand berichtenplatform, heeft SimpleX geen identificatiecodes toegewezen aan de gebruikers — zelfs geen willekeurige nummers .", + "simplex-unique-card-1-p-2": "In tegenstelling tot elk ander bestaand berichten platform, heeft SimpleX geen identificatiecodes toegewezen aan de gebruikers — zelfs geen willekeurige nummers .", "comparison-section-list-point-1": "Meestal op basis van een telefoonnummer, in sommige gevallen op gebruikersnamen", "comparison-section-list-point-2": "Op DNS gebaseerde adressen", "comparison-section-list-point-4": "Als de servers van de operator zijn aangetast", From d0cf550b518bd0bbdeff187b93778d852761a28a Mon Sep 17 00:00:00 2001 From: Evgeny Poberezkin <2769109+epoberezkin@users.noreply.github.com> Date: Sat, 25 Mar 2023 08:28:29 +0000 Subject: [PATCH 04/19] 4.6-beta.2: Android 133, iOS 106 --- apps/android/app/build.gradle | 4 ++-- apps/ios/SimpleX.xcodeproj/project.pbxproj | 8 ++++---- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/apps/android/app/build.gradle b/apps/android/app/build.gradle index aca945b71a..1021bceacf 100644 --- a/apps/android/app/build.gradle +++ b/apps/android/app/build.gradle @@ -11,8 +11,8 @@ android { applicationId "chat.simplex.app" minSdk 29 targetSdk 32 - versionCode 105 - versionName "4.6-beta.1" + versionCode 106 + versionName "4.6-beta.2" testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" ndk { diff --git a/apps/ios/SimpleX.xcodeproj/project.pbxproj b/apps/ios/SimpleX.xcodeproj/project.pbxproj index 1ff2641c22..240169b668 100644 --- a/apps/ios/SimpleX.xcodeproj/project.pbxproj +++ b/apps/ios/SimpleX.xcodeproj/project.pbxproj @@ -1396,7 +1396,7 @@ CLANG_ENABLE_MODULES = YES; CODE_SIGN_ENTITLEMENTS = "SimpleX (iOS).entitlements"; CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 132; + CURRENT_PROJECT_VERSION = 133; DEVELOPMENT_TEAM = 5NN7GUYB6T; ENABLE_BITCODE = NO; ENABLE_PREVIEWS = YES; @@ -1438,7 +1438,7 @@ CLANG_ENABLE_MODULES = YES; CODE_SIGN_ENTITLEMENTS = "SimpleX (iOS).entitlements"; CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 132; + CURRENT_PROJECT_VERSION = 133; DEVELOPMENT_TEAM = 5NN7GUYB6T; ENABLE_BITCODE = NO; ENABLE_PREVIEWS = YES; @@ -1518,7 +1518,7 @@ CODE_SIGN_ENTITLEMENTS = "SimpleX NSE/SimpleX NSE.entitlements"; CODE_SIGN_IDENTITY = "Apple Development"; CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 132; + CURRENT_PROJECT_VERSION = 133; DEVELOPMENT_TEAM = 5NN7GUYB6T; ENABLE_BITCODE = NO; GENERATE_INFOPLIST_FILE = YES; @@ -1550,7 +1550,7 @@ CODE_SIGN_ENTITLEMENTS = "SimpleX NSE/SimpleX NSE.entitlements"; CODE_SIGN_IDENTITY = "Apple Development"; CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 132; + CURRENT_PROJECT_VERSION = 133; DEVELOPMENT_TEAM = 5NN7GUYB6T; ENABLE_BITCODE = NO; GENERATE_INFOPLIST_FILE = YES; From 9f8cbe140dcfc144dde551d40a9de051c63fd930 Mon Sep 17 00:00:00 2001 From: Evgeny Poberezkin <2769109+epoberezkin@users.noreply.github.com> Date: Sat, 25 Mar 2023 10:25:17 +0000 Subject: [PATCH 05/19] android: minor lint fixes --- .../app/src/main/java/chat/simplex/app/views/call/CallView.kt | 2 +- .../java/chat/simplex/app/views/usersettings/SettingsView.kt | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/apps/android/app/src/main/java/chat/simplex/app/views/call/CallView.kt b/apps/android/app/src/main/java/chat/simplex/app/views/call/CallView.kt index 26a3c23c66..641cdb930b 100644 --- a/apps/android/app/src/main/java/chat/simplex/app/views/call/CallView.kt +++ b/apps/android/app/src/main/java/chat/simplex/app/views/call/CallView.kt @@ -92,7 +92,7 @@ fun ActiveCallView(chatModel: ChatModel) { am.registerAudioDeviceCallback(audioCallback, null) val pm = (SimplexApp.context.getSystemService(Context.POWER_SERVICE) as PowerManager) val proximityLock = if (pm.isWakeLockLevelSupported(PROXIMITY_SCREEN_OFF_WAKE_LOCK)) { - pm.newWakeLock(PROXIMITY_SCREEN_OFF_WAKE_LOCK, "proximityLock") + pm.newWakeLock(PROXIMITY_SCREEN_OFF_WAKE_LOCK, SimplexApp.context.packageName + ":proximityLock") } else { null } diff --git a/apps/android/app/src/main/java/chat/simplex/app/views/usersettings/SettingsView.kt b/apps/android/app/src/main/java/chat/simplex/app/views/usersettings/SettingsView.kt index 8e800ffb34..f017798545 100644 --- a/apps/android/app/src/main/java/chat/simplex/app/views/usersettings/SettingsView.kt +++ b/apps/android/app/src/main/java/chat/simplex/app/views/usersettings/SettingsView.kt @@ -64,8 +64,8 @@ fun SettingsView(chatModel: ChatModel, setPerformLA: (Boolean) -> Unit) { showSettingsModal = { modalView -> { ModalManager.shared.showModal(true) { modalView(chatModel) } } }, showSettingsModalWithSearch = { modalView -> ModalManager.shared.showCustomModal { close -> - val search = mutableStateOf("") - var showSearch by remember { mutableStateOf(false) } + val search = rememberSaveable { mutableStateOf("") } + var showSearch by rememberSaveable { mutableStateOf(false) } ModalView( { if (showSearch) { showSearch = false } else close() }, if (isInDarkTheme()) MaterialTheme.colors.background else SettingsBackgroundLight, From c0bbe77788d3961c2f57715f1e5903cd908f479c Mon Sep 17 00:00:00 2001 From: Evgeny Poberezkin <2769109+epoberezkin@users.noreply.github.com> Date: Sat, 25 Mar 2023 15:25:52 +0000 Subject: [PATCH 06/19] android: fix deleting active and hidden user profile, fix incorrect log --- .../main/java/chat/simplex/app/model/SimpleXAPI.kt | 11 ++++++++--- .../app/views/usersettings/UserProfilesView.kt | 2 +- 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/apps/android/app/src/main/java/chat/simplex/app/model/SimpleXAPI.kt b/apps/android/app/src/main/java/chat/simplex/app/model/SimpleXAPI.kt index b0d659bd4f..bcd2cf4152 100644 --- a/apps/android/app/src/main/java/chat/simplex/app/model/SimpleXAPI.kt +++ b/apps/android/app/src/main/java/chat/simplex/app/model/SimpleXAPI.kt @@ -266,9 +266,13 @@ open class ChatController(var ctrl: ChatCtrl?, val ntfManager: NtfManager, val a } private fun currentUserId(funcName: String): Long { - val error = "$funcName: no current user" - Log.e(TAG, error) - return chatModel.currentUser.value?.userId ?: throw Exception(error) + val userId = chatModel.currentUser.value?.userId + if (userId == null) { + val error = "$funcName: no current user" + Log.e(TAG, error) + throw Exception(error) + } + return userId } suspend fun startChat(user: User) { @@ -314,6 +318,7 @@ open class ChatController(var ctrl: ChatCtrl?, val ntfManager: NtfManager, val a suspend fun changeActiveUser_(toUserId: Long, viewPwd: String?) { val currentUser = apiSetActiveUser(toUserId, viewPwd) chatModel.currentUser.value = currentUser + Log.e(TAG, "currentUser ${currentUser?.userId}") val users = listUsers() chatModel.users.clear() chatModel.users.addAll(users) diff --git a/apps/android/app/src/main/java/chat/simplex/app/views/usersettings/UserProfilesView.kt b/apps/android/app/src/main/java/chat/simplex/app/views/usersettings/UserProfilesView.kt index e6db50de41..54885ac735 100644 --- a/apps/android/app/src/main/java/chat/simplex/app/views/usersettings/UserProfilesView.kt +++ b/apps/android/app/src/main/java/chat/simplex/app/views/usersettings/UserProfilesView.kt @@ -267,7 +267,7 @@ private fun removeUser(m: ChatModel, user: User, users: List, delSMPQueues val newActive = users.firstOrNull { u -> !u.activeUser && !u.hidden } if (newActive != null) { m.controller.changeActiveUser_(newActive.userId, null) - deleteUser(user) + deleteUser(user.copy(activeUser = false)) } } else { deleteUser(user) From cea0543e98e753a4f8bef20c89aa8e18ba07d460 Mon Sep 17 00:00:00 2001 From: Evgeny Poberezkin <2769109+epoberezkin@users.noreply.github.com> Date: Sat, 25 Mar 2023 16:10:46 +0000 Subject: [PATCH 07/19] android: make search field always visible in user profiles view --- .../java/chat/simplex/app/model/SimpleXAPI.kt | 1 - .../app/views/helpers/DefaultTopAppBar.kt | 2 +- .../app/views/helpers/SearchTextField.kt | 23 ++++++++++++++----- .../app/views/usersettings/SettingsView.kt | 12 ++-------- 4 files changed, 20 insertions(+), 18 deletions(-) diff --git a/apps/android/app/src/main/java/chat/simplex/app/model/SimpleXAPI.kt b/apps/android/app/src/main/java/chat/simplex/app/model/SimpleXAPI.kt index bcd2cf4152..ff29fbf087 100644 --- a/apps/android/app/src/main/java/chat/simplex/app/model/SimpleXAPI.kt +++ b/apps/android/app/src/main/java/chat/simplex/app/model/SimpleXAPI.kt @@ -318,7 +318,6 @@ open class ChatController(var ctrl: ChatCtrl?, val ntfManager: NtfManager, val a suspend fun changeActiveUser_(toUserId: Long, viewPwd: String?) { val currentUser = apiSetActiveUser(toUserId, viewPwd) chatModel.currentUser.value = currentUser - Log.e(TAG, "currentUser ${currentUser?.userId}") val users = listUsers() chatModel.users.clear() chatModel.users.addAll(users) diff --git a/apps/android/app/src/main/java/chat/simplex/app/views/helpers/DefaultTopAppBar.kt b/apps/android/app/src/main/java/chat/simplex/app/views/helpers/DefaultTopAppBar.kt index 827542c68a..8544fdc435 100644 --- a/apps/android/app/src/main/java/chat/simplex/app/views/helpers/DefaultTopAppBar.kt +++ b/apps/android/app/src/main/java/chat/simplex/app/views/helpers/DefaultTopAppBar.kt @@ -34,7 +34,7 @@ fun DefaultTopAppBar( if (!showSearch) { title?.invoke() } else { - SearchTextField(Modifier.fillMaxWidth(), stringResource(android.R.string.search_go), onSearchValueChanged) + SearchTextField(Modifier.fillMaxWidth(), stringResource(android.R.string.search_go), alwaysVisible = false, onSearchValueChanged) } }, backgroundColor = if (isInDarkTheme()) ToolbarDark else ToolbarLight, diff --git a/apps/android/app/src/main/java/chat/simplex/app/views/helpers/SearchTextField.kt b/apps/android/app/src/main/java/chat/simplex/app/views/helpers/SearchTextField.kt index 261d4f8acc..38c6a2647b 100644 --- a/apps/android/app/src/main/java/chat/simplex/app/views/helpers/SearchTextField.kt +++ b/apps/android/app/src/main/java/chat/simplex/app/views/helpers/SearchTextField.kt @@ -17,6 +17,7 @@ import androidx.compose.ui.Modifier import androidx.compose.ui.focus.FocusRequester import androidx.compose.ui.focus.focusRequester import androidx.compose.ui.graphics.* +import androidx.compose.ui.platform.LocalFocusManager import androidx.compose.ui.platform.LocalSoftwareKeyboardController import androidx.compose.ui.res.stringResource import androidx.compose.ui.text.TextStyle @@ -29,15 +30,18 @@ import kotlinx.coroutines.delay @OptIn(ExperimentalComposeUiApi::class) @Composable -fun SearchTextField(modifier: Modifier, placeholder: String, onValueChange: (String) -> Unit) { +fun SearchTextField(modifier: Modifier, placeholder: String, alwaysVisible: Boolean, onValueChange: (String) -> Unit) { var searchText by rememberSaveable(stateSaver = TextFieldValue.Saver) { mutableStateOf(TextFieldValue("")) } val focusRequester = remember { FocusRequester() } + val focusManager = LocalFocusManager.current val keyboard = LocalSoftwareKeyboardController.current - LaunchedEffect(Unit) { - focusRequester.requestFocus() - delay(200) - keyboard?.show() + if (!alwaysVisible) { + LaunchedEffect(Unit) { + focusRequester.requestFocus() + delay(200) + keyboard?.show() + } } DisposableEffect(Unit) { @@ -87,7 +91,14 @@ fun SearchTextField(modifier: Modifier, placeholder: String, onValueChange: (Str Text(placeholder) }, trailingIcon = if (searchText.text.isNotEmpty()) {{ - IconButton({ searchText = TextFieldValue(""); onValueChange("") }) { + IconButton({ + if (alwaysVisible) { + keyboard?.hide() + focusManager.clearFocus() + } + searchText = TextFieldValue(""); + onValueChange("") + }) { Icon(Icons.Default.Close, stringResource(R.string.icon_descr_close_button), tint = MaterialTheme.colors.primary,) } }} else null, diff --git a/apps/android/app/src/main/java/chat/simplex/app/views/usersettings/SettingsView.kt b/apps/android/app/src/main/java/chat/simplex/app/views/usersettings/SettingsView.kt index f017798545..27c6add259 100644 --- a/apps/android/app/src/main/java/chat/simplex/app/views/usersettings/SettingsView.kt +++ b/apps/android/app/src/main/java/chat/simplex/app/views/usersettings/SettingsView.kt @@ -65,19 +65,11 @@ fun SettingsView(chatModel: ChatModel, setPerformLA: (Boolean) -> Unit) { showSettingsModalWithSearch = { modalView -> ModalManager.shared.showCustomModal { close -> val search = rememberSaveable { mutableStateOf("") } - var showSearch by rememberSaveable { mutableStateOf(false) } ModalView( - { if (showSearch) { showSearch = false } else close() }, + { close() }, if (isInDarkTheme()) MaterialTheme.colors.background else SettingsBackgroundLight, endButtons = { - if (!showSearch) { - IconButton({ showSearch = true }) { - Icon(Icons.Outlined.Search, stringResource(android.R.string.search_go).capitalize(Locale.current), tint = MaterialTheme.colors.primary) - } - } else { - BackHandler { showSearch = false } - SearchTextField(Modifier.fillMaxWidth(), stringResource(android.R.string.search_go)) { search.value = it } - } + SearchTextField(Modifier.fillMaxWidth(), stringResource(android.R.string.search_go), alwaysVisible = true) { search.value = it } }, content = { modalView(chatModel, search) }) } From 15c36c5a8485ebf5ceea5ec41ee52fc085205427 Mon Sep 17 00:00:00 2001 From: Evgeny Poberezkin <2769109+epoberezkin@users.noreply.github.com> Date: Sat, 25 Mar 2023 16:27:39 +0000 Subject: [PATCH 08/19] android: fix JSON parsing for errors not defined in the UI --- .../app/src/main/java/chat/simplex/app/model/SimpleXAPI.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/android/app/src/main/java/chat/simplex/app/model/SimpleXAPI.kt b/apps/android/app/src/main/java/chat/simplex/app/model/SimpleXAPI.kt index ff29fbf087..2b909e6991 100644 --- a/apps/android/app/src/main/java/chat/simplex/app/model/SimpleXAPI.kt +++ b/apps/android/app/src/main/java/chat/simplex/app/model/SimpleXAPI.kt @@ -2894,7 +2894,7 @@ class APIResponse(val resp: CR, val corr: String? = null) { val userObject = resp["user_"]?.jsonObject val user = runCatching { json.decodeFromJsonElement(userObject!!) }.getOrNull() return APIResponse( - resp = CR.ChatCmdError(user, ChatError.ChatErrorInvalidJSON(json.encodeToString(resp["chatCmdError"]))), + resp = CR.ChatCmdError(user, ChatError.ChatErrorInvalidJSON(json.encodeToString(resp["chatError"]))), corr = data["corr"]?.toString() ) } From 92facf58f772b89336eb10c23d61dbecf13f8a6f Mon Sep 17 00:00:00 2001 From: Evgeny Poberezkin <2769109+epoberezkin@users.noreply.github.com> Date: Sat, 25 Mar 2023 17:02:15 +0000 Subject: [PATCH 09/19] android: fix layout of moderated item --- .../app/views/chat/item/MarkedDeletedItemView.kt | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/apps/android/app/src/main/java/chat/simplex/app/views/chat/item/MarkedDeletedItemView.kt b/apps/android/app/src/main/java/chat/simplex/app/views/chat/item/MarkedDeletedItemView.kt index 31a570b3ae..47bb33bffc 100644 --- a/apps/android/app/src/main/java/chat/simplex/app/views/chat/item/MarkedDeletedItemView.kt +++ b/apps/android/app/src/main/java/chat/simplex/app/views/chat/item/MarkedDeletedItemView.kt @@ -1,8 +1,7 @@ package chat.simplex.app.views.chat.item import android.content.res.Configuration -import androidx.compose.foundation.layout.Row -import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.layout.* import androidx.compose.foundation.shape.RoundedCornerShape import androidx.compose.material.* import androidx.compose.runtime.Composable @@ -31,10 +30,12 @@ fun MarkedDeletedItemView(ci: ChatItem, timedMessagesTTL: Int?, showMember: Bool Modifier.padding(horizontal = 12.dp, vertical = 6.dp), verticalAlignment = Alignment.CenterVertically ) { - if (ci.meta.itemDeleted is CIDeleted.Moderated) { - MarkedDeletedText(String.format(generalGetString(R.string.moderated_item_description), ci.meta.itemDeleted.byGroupMember.chatViewName)) - } else { - MarkedDeletedText(generalGetString(R.string.marked_deleted_description)) + Box(Modifier.fillMaxWidth().weight(1f)) { + if (ci.meta.itemDeleted is CIDeleted.Moderated) { + MarkedDeletedText(String.format(generalGetString(R.string.moderated_item_description), ci.meta.itemDeleted.byGroupMember.chatViewName)) + } else { + MarkedDeletedText(generalGetString(R.string.marked_deleted_description)) + } } CIMetaView(ci, timedMessagesTTL) } From f6d2aa7aae296bf5523522a987e822b049a6c55f Mon Sep 17 00:00:00 2001 From: Evgeny Poberezkin <2769109+epoberezkin@users.noreply.github.com> Date: Sat, 25 Mar 2023 17:21:38 +0000 Subject: [PATCH 10/19] mobile: translations (#2076) * Translated using Weblate (Chinese (Simplified)) Currently translated at 100.0% (1008 of 1008 strings) Translation: SimpleX Chat/SimpleX Chat Android Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/zh_Hans/ * Translated using Weblate (Chinese (Simplified)) Currently translated at 100.0% (940 of 940 strings) Translation: SimpleX Chat/SimpleX Chat iOS Translate-URL: https://hosted.weblate.org/projects/simplex-chat/ios/zh_Hans/ * Translated using Weblate (Czech) Currently translated at 99.2% (933 of 940 strings) Translation: SimpleX Chat/SimpleX Chat iOS Translate-URL: https://hosted.weblate.org/projects/simplex-chat/ios/cs/ * Translated using Weblate (Chinese (Simplified)) Currently translated at 100.0% (1008 of 1008 strings) Translation: SimpleX Chat/SimpleX Chat Android Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/zh_Hans/ * Translated using Weblate (Chinese (Simplified)) Currently translated at 100.0% (940 of 940 strings) Translation: SimpleX Chat/SimpleX Chat iOS Translate-URL: https://hosted.weblate.org/projects/simplex-chat/ios/zh_Hans/ * Translated using Weblate (Spanish) Currently translated at 100.0% (940 of 940 strings) Translation: SimpleX Chat/SimpleX Chat iOS Translate-URL: https://hosted.weblate.org/projects/simplex-chat/ios/es/ * Translated using Weblate (Dutch) Currently translated at 100.0% (1008 of 1008 strings) Translation: SimpleX Chat/SimpleX Chat Android Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/nl/ * Translated using Weblate (German) Currently translated at 100.0% (940 of 940 strings) Translation: SimpleX Chat/SimpleX Chat iOS Translate-URL: https://hosted.weblate.org/projects/simplex-chat/ios/de/ * Translated using Weblate (Russian) Currently translated at 100.0% (940 of 940 strings) Translation: SimpleX Chat/SimpleX Chat iOS Translate-URL: https://hosted.weblate.org/projects/simplex-chat/ios/ru/ * Translated using Weblate (French) Currently translated at 100.0% (940 of 940 strings) Translation: SimpleX Chat/SimpleX Chat iOS Translate-URL: https://hosted.weblate.org/projects/simplex-chat/ios/fr/ * Translated using Weblate (Italian) Currently translated at 99.9% (1007 of 1008 strings) Translation: SimpleX Chat/SimpleX Chat Android Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/it/ * Translated using Weblate (Italian) Currently translated at 100.0% (940 of 940 strings) Translation: SimpleX Chat/SimpleX Chat iOS Translate-URL: https://hosted.weblate.org/projects/simplex-chat/ios/it/ * Translated using Weblate (Dutch) Currently translated at 100.0% (940 of 940 strings) Translation: SimpleX Chat/SimpleX Chat iOS Translate-URL: https://hosted.weblate.org/projects/simplex-chat/ios/nl/ * ios: import/export localizations --------- Co-authored-by: sith-on-mars Co-authored-by: No name Co-authored-by: John m --- .../app/src/main/res/values-it/strings.xml | 3 +- .../app/src/main/res/values-nl/strings.xml | 2 +- .../src/main/res/values-zh-rCN/strings.xml | 22 ++--- .../cs.xcloc/Localized Contents/cs.xliff | 29 +++++++ .../de.xcloc/Localized Contents/de.xliff | 1 + .../es.xcloc/Localized Contents/es.xliff | 1 + .../fr.xcloc/Localized Contents/fr.xliff | 1 + .../it.xcloc/Localized Contents/it.xliff | 1 + .../nl.xcloc/Localized Contents/nl.xliff | 1 + .../ru.xcloc/Localized Contents/ru.xliff | 1 + .../Localized Contents/zh-Hans.xliff | 29 +++---- apps/ios/cs.lproj/Localizable.strings | 81 +++++++++++++++++++ apps/ios/de.lproj/Localizable.strings | 3 + apps/ios/es.lproj/Localizable.strings | 3 + apps/ios/fr.lproj/Localizable.strings | 3 + apps/ios/it.lproj/Localizable.strings | 3 + apps/ios/nl.lproj/Localizable.strings | 3 + apps/ios/ru.lproj/Localizable.strings | 3 + apps/ios/zh-Hans.lproj/Localizable.strings | 31 +++---- 19 files changed, 179 insertions(+), 42 deletions(-) diff --git a/apps/android/app/src/main/res/values-it/strings.xml b/apps/android/app/src/main/res/values-it/strings.xml index 8c5317ba1d..4e25b02655 100644 --- a/apps/android/app/src/main/res/values-it/strings.xml +++ b/apps/android/app/src/main/res/values-it/strings.xml @@ -993,8 +993,7 @@ Rendi privato il profilo! Deve esserci almeno un profilo utente. Deve esserci almeno un profilo utente visibile. - Puoi nascondere o silenziare un profilo utente - tienilo premuto per il menu. -\nSimpleX Lock deve essere attivato. + Puoi nascondere o silenziare un profilo utente - tienilo premuto per il menu. Non mostrare più Silenzioso quando inattivo! Continuerai a ricevere chiamate e notifiche da profili silenziati quando sono attivi. diff --git a/apps/android/app/src/main/res/values-nl/strings.xml b/apps/android/app/src/main/res/values-nl/strings.xml index cb3e1db827..8ecdad5b4d 100644 --- a/apps/android/app/src/main/res/values-nl/strings.xml +++ b/apps/android/app/src/main/res/values-nl/strings.xml @@ -984,7 +984,7 @@ Kan gebruikers profiel niet verwijderen! Bevestig wachtwoord Chinese en Spaanse interface - Voer hier boven het wachtwoord in om weer te geven! + Voer wachtwoord in bij zoeken Fout bij opslaan gebruikers wachtwoord Welkomst bericht toevoegen Niet meer weergeven diff --git a/apps/android/app/src/main/res/values-zh-rCN/strings.xml b/apps/android/app/src/main/res/values-zh-rCN/strings.xml index 064f957221..4f9715eff6 100644 --- a/apps/android/app/src/main/res/values-zh-rCN/strings.xml +++ b/apps/android/app/src/main/res/values-zh-rCN/strings.xml @@ -112,7 +112,7 @@ 错误消息散列 错误消息 ID 语音和视频通话 - 自动地 + 自动 激活电池优化,关闭了后台服务和新消息的定期请求。您可以通过设置重新启用它们。 后台服务一直在运行——一旦有消息,就会显示通知。 关闭音频 @@ -132,7 +132,7 @@ 可以通过设置禁用它 - 应用程序运行时仍会显示通知。 使用更多电池 !后台服务一直在运行——一旦收到消息,就会显示通知。 请注意:如果您丢失密码,您将无法恢复或者更改密码。 - 通话已经结束! + 通话已结束! 扫描二维码 :与向您展示二维码的联系人联系。 无法邀请联系人! 无法邀请联系人! @@ -234,7 +234,7 @@ 清除聊天记录? 与开发者聊天 清除 - 有色 + 彩色 已连接 连接 连接 @@ -266,7 +266,7 @@ 删除待定的联系人连接错误 接收文件错误 切换资料错误! - 已隐藏 + 隐藏 编辑 隐藏联系人和消息 已编辑 @@ -628,7 +628,7 @@ \nSimpleX 服务器无法看见您的资料。 您的资料、联系人和发送的消息存储在您的设备上。 该资料仅与您的联系人共享。 - + 开启 此操作无法撤消——您的个人资料、联系人、消息和文件将不可撤回地丢失。 此设置适用于您当前聊天资料中的消息 恢复数据库错误 @@ -715,7 +715,7 @@ %s 已验证 用于新连接 使用直接互联网连接? - 必要 + 必须 保存并通知联系人 保存并通知联系人 在我们的 GitHub 仓库中阅读更多内容。 @@ -843,7 +843,7 @@ 点击加入 停止 重新启动应用程序以使用导入的聊天数据库。 - 所有者 + 群主 已删除 角色 @@ -1002,14 +1002,14 @@ 更新用户隐私错误 无法删除用户资料! 保存用户密码错误 - 在上面输入密码以显示! + 在搜索中输入密码 群组欢迎消息 群组管理员移除 - 已隐藏个人资料密码 - 已隐藏聊天资料 + 隐藏的个人资料密码 + 隐藏的聊天资料 隐藏个人资料 保存服务器? - 要显示您的隐藏个人资料,请在您的聊天个人资料页面的搜索字段中输入完整密码。 + 要显示您的隐藏的个人资料,请在您的聊天个人资料页面的搜索字段中输入完整密码。 保存欢迎信息? 点击以激活个人资料。 应该至少有一个用户资料。 diff --git a/apps/ios/SimpleX Localizations/cs.xcloc/Localized Contents/cs.xliff b/apps/ios/SimpleX Localizations/cs.xcloc/Localized Contents/cs.xliff index 1e6a34baba..ec5910cb3b 100644 --- a/apps/ios/SimpleX Localizations/cs.xcloc/Localized Contents/cs.xliff +++ b/apps/ios/SimpleX Localizations/cs.xcloc/Localized Contents/cs.xliff @@ -387,6 +387,7 @@ Add welcome message + Přidat uvítací zprávu No comment provided by engineer. @@ -531,6 +532,7 @@ Audio and video calls + Hlasové a video hovory No comment provided by engineer. @@ -600,6 +602,7 @@ Can't delete user profile! + Nemohu smazat uživatelský profil! No comment provided by engineer. @@ -709,6 +712,7 @@ Chinese and Spanish interface + Čínské a Španělské rozhranní No comment provided by engineer. @@ -768,6 +772,7 @@ Confirm password + Potvrdit heslo No comment provided by engineer. @@ -1300,6 +1305,7 @@ Don't show again + Znovu neukazuj No comment provided by engineer. @@ -1563,6 +1569,7 @@ Error saving user password + Chyba ukládání hesla uživatele No comment provided by engineer. @@ -1602,6 +1609,7 @@ Error updating user privacy + Chyba aktualizace soukromí uživatele No comment provided by engineer. @@ -1695,6 +1703,7 @@ Further reduced battery usage + Další snížení spotřeby baterie No comment provided by engineer. @@ -1774,6 +1783,7 @@ Group moderation + Správa skupin No comment provided by engineer. @@ -1793,6 +1803,7 @@ Group welcome message + Uvítací zpráva skupin No comment provided by engineer. @@ -1817,10 +1828,12 @@ Hidden chat profiles + Skryté chat profily No comment provided by engineer. Hidden profile password + Hesla skrytých profilů No comment provided by engineer. @@ -1835,6 +1848,7 @@ Hide profile + Skrýt profil No comment provided by engineer. @@ -1964,6 +1978,7 @@ Initial role + Počáteční role No comment provided by engineer. @@ -2145,6 +2160,7 @@ Budeme přidávat redundantní servery, abychom zabránili ztrátě zpráv. Make profile private! + Změnit profil na soukromý! No comment provided by engineer. @@ -2274,6 +2290,7 @@ Budeme přidávat redundantní servery, abychom zabránili ztrátě zpráv. Muted when inactive! + Ztlumit při neaktivitě! No comment provided by engineer. @@ -2380,6 +2397,9 @@ Budeme přidávat redundantní servery, abychom zabránili ztrátě zpráv.Now admins can: - delete members' messages. - disable members ("observer" role) + Nyní mohou správci: +- mazat zprávy členů. +- zakázat členy (role "pozorovatel") No comment provided by engineer. @@ -2509,6 +2529,7 @@ Budeme přidávat redundantní servery, abychom zabránili ztrátě zpráv. Password to show + Heslo k zobrazení No comment provided by engineer. @@ -2663,6 +2684,7 @@ Budeme přidávat redundantní servery, abychom zabránili ztrátě zpráv. Protect your chat profiles with a password! + Chraňte své chat profily heslem! No comment provided by engineer. @@ -2862,6 +2884,7 @@ Budeme přidávat redundantní servery, abychom zabránili ztrátě zpráv. Save and update group profile + Uložit a aktualizovat profil skupiny No comment provided by engineer. @@ -2891,6 +2914,7 @@ Budeme přidávat redundantní servery, abychom zabránili ztrátě zpráv. Save profile password + Uložit heslo profilu No comment provided by engineer. @@ -2900,10 +2924,12 @@ Budeme přidávat redundantní servery, abychom zabránili ztrátě zpráv. Save servers? + Uložit servery? No comment provided by engineer. Save welcome message? + Uložit uvítací zprávu? No comment provided by engineer. @@ -3058,6 +3084,7 @@ Budeme přidávat redundantní servery, abychom zabránili ztrátě zpráv. Set the message shown to new members! + Nastavte zprávu zobrazenou novým členům! No comment provided by engineer. @@ -3242,6 +3269,7 @@ Budeme přidávat redundantní servery, abychom zabránili ztrátě zpráv. Tap to activate profile. + Klepnutím aktivujete profil. No comment provided by engineer. @@ -3371,6 +3399,7 @@ Budeme přidávat redundantní servery, abychom zabránili ztrátě zpráv. There should be at least one user profile. + Měl by tam být alespoň jeden uživatelský profil. No comment provided by engineer. diff --git a/apps/ios/SimpleX Localizations/de.xcloc/Localized Contents/de.xliff b/apps/ios/SimpleX Localizations/de.xcloc/Localized Contents/de.xliff index d6481856e0..49e903eb02 100644 --- a/apps/ios/SimpleX Localizations/de.xcloc/Localized Contents/de.xliff +++ b/apps/ios/SimpleX Localizations/de.xcloc/Localized Contents/de.xliff @@ -1980,6 +1980,7 @@ Initial role + Anfängliche Rolle No comment provided by engineer. diff --git a/apps/ios/SimpleX Localizations/es.xcloc/Localized Contents/es.xliff b/apps/ios/SimpleX Localizations/es.xcloc/Localized Contents/es.xliff index dd26b905a5..69d24fb923 100644 --- a/apps/ios/SimpleX Localizations/es.xcloc/Localized Contents/es.xliff +++ b/apps/ios/SimpleX Localizations/es.xcloc/Localized Contents/es.xliff @@ -1980,6 +1980,7 @@ Initial role + Rol inicial No comment provided by engineer. diff --git a/apps/ios/SimpleX Localizations/fr.xcloc/Localized Contents/fr.xliff b/apps/ios/SimpleX Localizations/fr.xcloc/Localized Contents/fr.xliff index ceb67e890d..6c75657f10 100644 --- a/apps/ios/SimpleX Localizations/fr.xcloc/Localized Contents/fr.xliff +++ b/apps/ios/SimpleX Localizations/fr.xcloc/Localized Contents/fr.xliff @@ -1980,6 +1980,7 @@ Initial role + Rôle initial No comment provided by engineer. diff --git a/apps/ios/SimpleX Localizations/it.xcloc/Localized Contents/it.xliff b/apps/ios/SimpleX Localizations/it.xcloc/Localized Contents/it.xliff index 939cc66d9d..0c5ef67885 100644 --- a/apps/ios/SimpleX Localizations/it.xcloc/Localized Contents/it.xliff +++ b/apps/ios/SimpleX Localizations/it.xcloc/Localized Contents/it.xliff @@ -1980,6 +1980,7 @@ Initial role + Ruolo iniziale No comment provided by engineer. diff --git a/apps/ios/SimpleX Localizations/nl.xcloc/Localized Contents/nl.xliff b/apps/ios/SimpleX Localizations/nl.xcloc/Localized Contents/nl.xliff index df2d0c26e0..1dc0604f52 100644 --- a/apps/ios/SimpleX Localizations/nl.xcloc/Localized Contents/nl.xliff +++ b/apps/ios/SimpleX Localizations/nl.xcloc/Localized Contents/nl.xliff @@ -1980,6 +1980,7 @@ Initial role + Initiële rol No comment provided by engineer. diff --git a/apps/ios/SimpleX Localizations/ru.xcloc/Localized Contents/ru.xliff b/apps/ios/SimpleX Localizations/ru.xcloc/Localized Contents/ru.xliff index 18122b4352..2f838981a1 100644 --- a/apps/ios/SimpleX Localizations/ru.xcloc/Localized Contents/ru.xliff +++ b/apps/ios/SimpleX Localizations/ru.xcloc/Localized Contents/ru.xliff @@ -1980,6 +1980,7 @@ Initial role + Роль при вступлении No comment provided by engineer. diff --git a/apps/ios/SimpleX Localizations/zh-Hans.xcloc/Localized Contents/zh-Hans.xliff b/apps/ios/SimpleX Localizations/zh-Hans.xcloc/Localized Contents/zh-Hans.xliff index 0ce53f9b8a..1eaacd0164 100644 --- a/apps/ios/SimpleX Localizations/zh-Hans.xcloc/Localized Contents/zh-Hans.xliff +++ b/apps/ios/SimpleX Localizations/zh-Hans.xcloc/Localized Contents/zh-Hans.xliff @@ -39,7 +39,7 @@ !1 colored! - !1 色! + !1 种彩色! No comment provided by engineer. @@ -562,7 +562,7 @@ Automatically - 自动地 + 自动 No comment provided by engineer. @@ -592,7 +592,7 @@ Call already ended! - 通话已经结束! + 通话已结束! No comment provided by engineer. @@ -1825,7 +1825,7 @@ Hidden - 已隐藏 + 隐藏 No comment provided by engineer. @@ -1980,6 +1980,7 @@ Initial role + 初始角色 No comment provided by engineer. @@ -2256,7 +2257,7 @@ We will be adding server redundancy to prevent lost messages. Migration failed. Tap **Skip** below to continue using the current database. Please report the issue to the app developers via chat or email [chat@simplex.chat](mailto:chat@simplex.chat). - 迁移失败。点击下面的 **Skip** 继续使用当前数据库。请通过聊天或电子邮件 [chat@simplex.chat](mailto:chat@simplex.chat) 将问题报告给应用程序开发人员。 + 迁移失败。点击下面的 **Skip** 继续使用当前数据库。请通过通过聊天或电邮 [chat@simplex.chat](mailto:chat@simplex.chat) 将问题报告给应用程序开发人员。 No comment provided by engineer. @@ -2405,7 +2406,7 @@ We will be adding server redundancy to prevent lost messages. Off (Local) - 关闭 (本地) + 关闭(本地) No comment provided by engineer. @@ -2560,7 +2561,7 @@ We will be adding server redundancy to prevent lost messages. Periodically - 定期地 + 定期 No comment provided by engineer. @@ -2790,7 +2791,7 @@ We will be adding server redundancy to prevent lost messages. Required - 必要 + 必须 No comment provided by engineer. @@ -3477,7 +3478,7 @@ You will be prompted to complete authentication before this feature is enabled.< To reveal your hidden profile, enter a full password into a search field in **Your chat profiles** page. - 要显示您的隐藏个人资料,请在**您的聊天个人资料**页面的搜索字段中输入完整密码。 + 要显示您的隐藏的个人资料,请在**您的聊天个人资料**页面的搜索字段中输入完整密码。 No comment provided by engineer. @@ -3507,7 +3508,7 @@ You will be prompted to complete authentication before this feature is enabled.< Turn off - 关掉 + 关闭 No comment provided by engineer. @@ -4095,7 +4096,7 @@ SimpleX 服务器无法看到您的资料。 [Send us email](mailto:chat@simplex.chat) - [发送邮件至](mailto:chat@simplex.chat) + [给我们发电邮](mailto:chat@simplex.chat) No comment provided by engineer. @@ -4200,7 +4201,7 @@ SimpleX 服务器无法看到您的资料。 colored - 有色 + 彩色 No comment provided by engineer. @@ -4511,7 +4512,7 @@ SimpleX 服务器无法看到您的资料。 on - + 开启 group pref value @@ -4521,7 +4522,7 @@ SimpleX 服务器无法看到您的资料。 owner - 所有者 + 群主 member role diff --git a/apps/ios/cs.lproj/Localizable.strings b/apps/ios/cs.lproj/Localizable.strings index 5d3abdf919..8a0893d2d6 100644 --- a/apps/ios/cs.lproj/Localizable.strings +++ b/apps/ios/cs.lproj/Localizable.strings @@ -248,6 +248,9 @@ /* No comment provided by engineer. */ "Add to another device" = "Přidat do jiného zařízení"; +/* No comment provided by engineer. */ +"Add welcome message" = "Přidat uvítací zprávu"; + /* member role */ "admin" = "správce"; @@ -338,6 +341,9 @@ /* No comment provided by engineer. */ "Audio & video calls" = "Audio a video hovory"; +/* No comment provided by engineer. */ +"Audio and video calls" = "Hlasové a video hovory"; + /* No comment provided by engineer. */ "audio call (not e2e encrypted)" = "zvukový hovor (nešifrovaný e2e)"; @@ -398,6 +404,9 @@ /* No comment provided by engineer. */ "Calls" = "Hovory"; +/* No comment provided by engineer. */ +"Can't delete user profile!" = "Nemohu smazat uživatelský profil!"; + /* No comment provided by engineer. */ "Can't invite contact!" = "Nelze pozvat kontakt!"; @@ -479,6 +488,9 @@ /* No comment provided by engineer. */ "Check server address and try again." = "Zkontrolujte adresu serveru a zkuste to znovu."; +/* No comment provided by engineer. */ +"Chinese and Spanish interface" = "Čínské a Španělské rozhranní"; + /* No comment provided by engineer. */ "Choose file" = "Vybrat soubor"; @@ -518,6 +530,9 @@ /* No comment provided by engineer. */ "Confirm new passphrase…" = "Potvrdit novou heslovou frázi…"; +/* No comment provided by engineer. */ +"Confirm password" = "Potvrdit heslo"; + /* server test step */ "Connect" = "Připojit"; @@ -884,6 +899,9 @@ /* No comment provided by engineer. */ "Do NOT use SimpleX for emergency calls." = "NEpoužívejte SimpleX pro tísňová volání."; +/* No comment provided by engineer. */ +"Don't show again" = "Znovu neukazuj"; + /* No comment provided by engineer. */ "Duplicate display name!" = "Duplicitní zobrazované jméno!"; @@ -1061,6 +1079,9 @@ /* No comment provided by engineer. */ "Error saving SMP servers" = "Chyba při ukládání serverů SMP"; +/* No comment provided by engineer. */ +"Error saving user password" = "Chyba ukládání hesla uživatele"; + /* No comment provided by engineer. */ "Error sending message" = "Chyba při odesílání zprávy"; @@ -1082,6 +1103,9 @@ /* No comment provided by engineer. */ "Error updating settings" = "Chyba při aktualizaci nastavení"; +/* No comment provided by engineer. */ +"Error updating user privacy" = "Chyba aktualizace soukromí uživatele"; + /* No comment provided by engineer. */ "Error: %@" = "Chyba: %@"; @@ -1133,6 +1157,9 @@ /* No comment provided by engineer. */ "Full name:" = "Celé jméno:"; +/* No comment provided by engineer. */ +"Further reduced battery usage" = "Další snížení spotřeby baterie"; + /* No comment provided by engineer. */ "GIFs and stickers" = "GIFy a nálepky"; @@ -1181,6 +1208,9 @@ /* notification */ "Group message:" = "Skupinová zpráva:"; +/* No comment provided by engineer. */ +"Group moderation" = "Správa skupin"; + /* No comment provided by engineer. */ "Group preferences" = "Předvolby skupiny"; @@ -1193,6 +1223,9 @@ /* snd group event chat item */ "group profile updated" = "profil skupiny aktualizován"; +/* No comment provided by engineer. */ +"Group welcome message" = "Uvítací zpráva skupin"; + /* No comment provided by engineer. */ "Group will be deleted for all members - this cannot be undone!" = "Skupina bude smazána pro všechny členy - nelze to vzít zpět!"; @@ -1205,12 +1238,21 @@ /* No comment provided by engineer. */ "Hidden" = "Skryté"; +/* No comment provided by engineer. */ +"Hidden chat profiles" = "Skryté chat profily"; + +/* No comment provided by engineer. */ +"Hidden profile password" = "Hesla skrytých profilů"; + /* chat item action */ "Hide" = "Skrýt"; /* No comment provided by engineer. */ "Hide app screen in the recent apps." = "Skrytí obrazovky aplikace v posledních aplikacích."; +/* No comment provided by engineer. */ +"Hide profile" = "Skrýt profil"; + /* No comment provided by engineer. */ "How it works" = "Jak to funguje"; @@ -1298,6 +1340,9 @@ /* connection level description */ "indirect (%d)" = "nepřímé (%d)"; +/* No comment provided by engineer. */ +"Initial role" = "Počáteční role"; + /* No comment provided by engineer. */ "Install [SimpleX Chat for terminal](https://github.com/simplex-chat/simplex-chat)" = "Nainstalujte [SimpleX Chat pro terminál](https://github.com/simplex-chat/simplex-chat)"; @@ -1436,6 +1481,9 @@ /* No comment provided by engineer. */ "Make a private connection" = "Vytvořte si soukromé připojení"; +/* No comment provided by engineer. */ +"Make profile private!" = "Změnit profil na soukromý!"; + /* No comment provided by engineer. */ "Make sure SMP server addresses are in correct format, line separated and are not duplicated (%@)." = "Ujistěte se, že adresy SMP serverů jsou ve správném formátu, oddělené řádky a nejsou duplicitní (%@)."; @@ -1532,6 +1580,9 @@ /* No comment provided by engineer. */ "Mute" = "Ztlumit"; +/* No comment provided by engineer. */ +"Muted when inactive!" = "Ztlumit při neaktivitě!"; + /* No comment provided by engineer. */ "Name" = "Jméno"; @@ -1604,6 +1655,9 @@ /* No comment provided by engineer. */ "Notifications are disabled!" = "Oznámení jsou zakázána!"; +/* No comment provided by engineer. */ +"Now admins can:\n- delete members' messages.\n- disable members (\"observer\" role)" = "Nyní mohou správci:\n- mazat zprávy členů.\n- zakázat členy (role \"pozorovatel\")"; + /* member role */ "observer" = "pozorovatel"; @@ -1695,6 +1749,9 @@ /* member role */ "owner" = "vlastník"; +/* No comment provided by engineer. */ +"Password to show" = "Heslo k zobrazení"; + /* No comment provided by engineer. */ "Paste" = "Vložit"; @@ -1794,6 +1851,9 @@ /* No comment provided by engineer. */ "Protect app screen" = "Ochrana obrazovky aplikace"; +/* No comment provided by engineer. */ +"Protect your chat profiles with a password!" = "Chraňte své chat profily heslem!"; + /* No comment provided by engineer. */ "Protocol timeout" = "Časový limit protokolu"; @@ -1926,6 +1986,9 @@ /* No comment provided by engineer. */ "Save and notify group members" = "Uložit a upozornit členy skupiny"; +/* No comment provided by engineer. */ +"Save and update group profile" = "Uložit a aktualizovat profil skupiny"; + /* No comment provided by engineer. */ "Save archive" = "Uložit archiv"; @@ -1941,9 +2004,18 @@ /* No comment provided by engineer. */ "Save preferences?" = "Uložit předvolby?"; +/* No comment provided by engineer. */ +"Save profile password" = "Uložit heslo profilu"; + /* No comment provided by engineer. */ "Save servers" = "Uložit servery"; +/* No comment provided by engineer. */ +"Save servers?" = "Uložit servery?"; + +/* No comment provided by engineer. */ +"Save welcome message?" = "Uložit uvítací zprávu?"; + /* No comment provided by engineer. */ "Saved WebRTC ICE servers will be removed" = "Uložené servery WebRTC ICE budou odstraněny"; @@ -2040,6 +2112,9 @@ /* No comment provided by engineer. */ "Set passphrase to export" = "Nastavení přístupové fráze pro export"; +/* No comment provided by engineer. */ +"Set the message shown to new members!" = "Nastavte zprávu zobrazenou novým členům!"; + /* No comment provided by engineer. */ "Set timeouts for proxy/VPN" = "Nastavit časové limity pro proxy/VPN"; @@ -2145,6 +2220,9 @@ /* No comment provided by engineer. */ "Tap button " = "Klepněte na tlačítko "; +/* No comment provided by engineer. */ +"Tap to activate profile." = "Klepnutím aktivujete profil."; + /* No comment provided by engineer. */ "Tap to join" = "Klepnutím se připojíte"; @@ -2232,6 +2310,9 @@ /* No comment provided by engineer. */ "Theme" = "Téma"; +/* No comment provided by engineer. */ +"There should be at least one user profile." = "Měl by tam být alespoň jeden uživatelský profil."; + /* No comment provided by engineer. */ "This action cannot be undone - all received and sent files and media will be deleted. Low resolution pictures will remain." = "Tuto akci nelze vrátit zpět - všechny přijaté a odeslané soubory a média budou smazány. Obrázky s nízkým rozlišením zůstanou zachovány."; diff --git a/apps/ios/de.lproj/Localizable.strings b/apps/ios/de.lproj/Localizable.strings index d726d1d87b..031e6cc992 100644 --- a/apps/ios/de.lproj/Localizable.strings +++ b/apps/ios/de.lproj/Localizable.strings @@ -1346,6 +1346,9 @@ /* connection level description */ "indirect (%d)" = "indirekt (%d)"; +/* No comment provided by engineer. */ +"Initial role" = "Anfängliche Rolle"; + /* No comment provided by engineer. */ "Install [SimpleX Chat for terminal](https://github.com/simplex-chat/simplex-chat)" = "Installieren Sie [SimpleX Chat als Terminalanwendung](https://github.com/simplex-chat/simplex-chat)"; diff --git a/apps/ios/es.lproj/Localizable.strings b/apps/ios/es.lproj/Localizable.strings index 4a43fc5fa4..a4ec19b296 100644 --- a/apps/ios/es.lproj/Localizable.strings +++ b/apps/ios/es.lproj/Localizable.strings @@ -1346,6 +1346,9 @@ /* connection level description */ "indirect (%d)" = "indirecto (%d)"; +/* No comment provided by engineer. */ +"Initial role" = "Rol inicial"; + /* No comment provided by engineer. */ "Install [SimpleX Chat for terminal](https://github.com/simplex-chat/simplex-chat)" = "Instalar [SimpleX Chat for terminal](https://github.com/simplex-chat/simplex-chat)"; diff --git a/apps/ios/fr.lproj/Localizable.strings b/apps/ios/fr.lproj/Localizable.strings index 6d756101df..90072d73cc 100644 --- a/apps/ios/fr.lproj/Localizable.strings +++ b/apps/ios/fr.lproj/Localizable.strings @@ -1346,6 +1346,9 @@ /* connection level description */ "indirect (%d)" = "indirect (%d)"; +/* No comment provided by engineer. */ +"Initial role" = "Rôle initial"; + /* No comment provided by engineer. */ "Install [SimpleX Chat for terminal](https://github.com/simplex-chat/simplex-chat)" = "Installer [SimpleX Chat pour terminal](https://github.com/simplex-chat/simplex-chat)"; diff --git a/apps/ios/it.lproj/Localizable.strings b/apps/ios/it.lproj/Localizable.strings index 8e4fcac09a..ce495aefa0 100644 --- a/apps/ios/it.lproj/Localizable.strings +++ b/apps/ios/it.lproj/Localizable.strings @@ -1346,6 +1346,9 @@ /* connection level description */ "indirect (%d)" = "indiretta (%d)"; +/* No comment provided by engineer. */ +"Initial role" = "Ruolo iniziale"; + /* No comment provided by engineer. */ "Install [SimpleX Chat for terminal](https://github.com/simplex-chat/simplex-chat)" = "Installa [Simplex Chat per terminale](https://github.com/simplex-chat/simplex-chat)"; diff --git a/apps/ios/nl.lproj/Localizable.strings b/apps/ios/nl.lproj/Localizable.strings index c23766fb70..d28faeba08 100644 --- a/apps/ios/nl.lproj/Localizable.strings +++ b/apps/ios/nl.lproj/Localizable.strings @@ -1346,6 +1346,9 @@ /* connection level description */ "indirect (%d)" = "indirect (%d)"; +/* No comment provided by engineer. */ +"Initial role" = "Initiële rol"; + /* No comment provided by engineer. */ "Install [SimpleX Chat for terminal](https://github.com/simplex-chat/simplex-chat)" = "Installeer [SimpleX Chat voor terminal](https://github.com/simplex-chat/simplex-chat)"; diff --git a/apps/ios/ru.lproj/Localizable.strings b/apps/ios/ru.lproj/Localizable.strings index bcdba57d21..df6bac9f4e 100644 --- a/apps/ios/ru.lproj/Localizable.strings +++ b/apps/ios/ru.lproj/Localizable.strings @@ -1346,6 +1346,9 @@ /* connection level description */ "indirect (%d)" = "непрямое (%d)"; +/* No comment provided by engineer. */ +"Initial role" = "Роль при вступлении"; + /* No comment provided by engineer. */ "Install [SimpleX Chat for terminal](https://github.com/simplex-chat/simplex-chat)" = "[SimpleX Chat для терминала](https://github.com/simplex-chat/simplex-chat)"; diff --git a/apps/ios/zh-Hans.lproj/Localizable.strings b/apps/ios/zh-Hans.lproj/Localizable.strings index 39a4cca29c..5aee818249 100644 --- a/apps/ios/zh-Hans.lproj/Localizable.strings +++ b/apps/ios/zh-Hans.lproj/Localizable.strings @@ -26,7 +26,7 @@ ": " = ": "; /* No comment provided by engineer. */ -"!1 colored!" = "!1 色!"; +"!1 colored!" = "!1 种彩色!"; /* No comment provided by engineer. */ "." = "."; @@ -41,7 +41,7 @@ "[Contribute](https://github.com/simplex-chat/simplex-chat#contribute)" = "[贡献](https://github.com/simplex-chat/simplex-chat#contribute)"; /* No comment provided by engineer. */ -"[Send us email](mailto:chat@simplex.chat)" = "[发送邮件至](mailto:chat@simplex.chat)"; +"[Send us email](mailto:chat@simplex.chat)" = "[给我们发电邮](mailto:chat@simplex.chat)"; /* No comment provided by engineer. */ "[Star on GitHub](https://github.com/simplex-chat/simplex-chat)" = "[在 GitHub 上加星](https://github.com/simplex-chat/simplex-chat)"; @@ -363,7 +363,7 @@ "Auto-accept images" = "自动接受图片"; /* No comment provided by engineer. */ -"Automatically" = "自动地"; +"Automatically" = "自动"; /* No comment provided by engineer. */ "Back" = "返回"; @@ -390,7 +390,7 @@ "By chat profile (default) or [by connection](https://simplex.chat/blog/20230204-simplex-chat-v4-5-user-chat-profiles.html#transport-isolation) (BETA)." = "通过聊天资料(默认)或者[通过连接](https://simplex.chat/blog/20230204-simplex-chat-v4-5-user-chat-profiles.html#transport-isolation) (BETA)。"; /* No comment provided by engineer. */ -"Call already ended!" = "通话已经结束!"; +"Call already ended!" = "通话已结束!"; /* call status */ "call error" = "通话错误"; @@ -510,7 +510,7 @@ "Clear verification" = "清除验证"; /* No comment provided by engineer. */ -"colored" = "有色"; +"colored" = "彩色"; /* No comment provided by engineer. */ "Colors" = "颜色"; @@ -1242,7 +1242,7 @@ "Help" = "帮助"; /* No comment provided by engineer. */ -"Hidden" = "已隐藏"; +"Hidden" = "隐藏"; /* No comment provided by engineer. */ "Hidden chat profiles" = "隐藏的聊天资料"; @@ -1346,6 +1346,9 @@ /* connection level description */ "indirect (%d)" = "间接(%d)"; +/* No comment provided by engineer. */ +"Initial role" = "初始角色"; + /* No comment provided by engineer. */ "Install [SimpleX Chat for terminal](https://github.com/simplex-chat/simplex-chat)" = "安装[用于终端的 SimpleX Chat](https://github.com/simplex-chat/simplex-chat)"; @@ -1554,7 +1557,7 @@ "Migration error:" = "迁移错误:"; /* No comment provided by engineer. */ -"Migration failed. Tap **Skip** below to continue using the current database. Please report the issue to the app developers via chat or email [chat@simplex.chat](mailto:chat@simplex.chat)." = "迁移失败。点击下面的 **Skip** 继续使用当前数据库。请通过聊天或电子邮件 [chat@simplex.chat](mailto:chat@simplex.chat) 将问题报告给应用程序开发人员。"; +"Migration failed. Tap **Skip** below to continue using the current database. Please report the issue to the app developers via chat or email [chat@simplex.chat](mailto:chat@simplex.chat)." = "迁移失败。点击下面的 **Skip** 继续使用当前数据库。请通过通过聊天或电邮 [chat@simplex.chat](mailto:chat@simplex.chat) 将问题报告给应用程序开发人员。"; /* No comment provided by engineer. */ "Migration is completed" = "迁移完成"; @@ -1669,7 +1672,7 @@ "off" = "关闭"; /* No comment provided by engineer. */ -"Off (Local)" = "关闭 (本地)"; +"Off (Local)" = "关闭(本地)"; /* feature offered item */ "offered %@" = "已提供 %@"; @@ -1687,7 +1690,7 @@ "Old database archive" = "旧数据库存档"; /* group pref value */ -"on" = "在"; +"on" = "开启"; /* No comment provided by engineer. */ "One-time invitation link" = "一次性邀请链接"; @@ -1750,7 +1753,7 @@ "or chat with the developers" = "或与开发者聊天"; /* member role */ -"owner" = "所有者"; +"owner" = "群主"; /* No comment provided by engineer. */ "Password to show" = "显示密码"; @@ -1774,7 +1777,7 @@ "People can connect to you only via the links you share." = "人们只能通过您共享的链接与您建立联系。"; /* No comment provided by engineer. */ -"Periodically" = "定期地"; +"Periodically" = "定期"; /* No comment provided by engineer. */ "PING count" = "PING 次数"; @@ -1936,7 +1939,7 @@ "Reply" = "回复"; /* No comment provided by engineer. */ -"Required" = "必要"; +"Required" = "必须"; /* No comment provided by engineer. */ "Reset" = "重置"; @@ -2362,7 +2365,7 @@ "To record voice message please grant permission to use Microphone." = "请授权使用麦克风以录制语音消息。"; /* No comment provided by engineer. */ -"To reveal your hidden profile, enter a full password into a search field in **Your chat profiles** page." = "要显示您的隐藏个人资料,请在**您的聊天个人资料**页面的搜索字段中输入完整密码。"; +"To reveal your hidden profile, enter a full password into a search field in **Your chat profiles** page." = "要显示您的隐藏的个人资料,请在**您的聊天个人资料**页面的搜索字段中输入完整密码。"; /* No comment provided by engineer. */ "To support instant push notifications the chat database has to be migrated." = "为了支持即时推送通知,聊天数据库必须被迁移。"; @@ -2380,7 +2383,7 @@ "Trying to connect to the server used to receive messages from this contact." = "正在尝试连接到用于从该联系人接收消息的服务器。"; /* No comment provided by engineer. */ -"Turn off" = "关掉"; +"Turn off" = "关闭"; /* No comment provided by engineer. */ "Turn off notifications?" = "关闭通知?"; From 09c4609b6ce340f8fe1a39fe090861370af7a7da Mon Sep 17 00:00:00 2001 From: Evgeny Poberezkin <2769109+epoberezkin@users.noreply.github.com> Date: Sat, 25 Mar 2023 17:24:40 +0000 Subject: [PATCH 11/19] website: translations (#2077) * Translated using Weblate (Dutch) Currently translated at 100.0% (211 of 211 strings) Translation: SimpleX Chat/SimpleX Chat website Translate-URL: https://hosted.weblate.org/projects/simplex-chat/website/nl/ * Translated using Weblate (Spanish) Currently translated at 14.2% (30 of 211 strings) Translation: SimpleX Chat/SimpleX Chat website Translate-URL: https://hosted.weblate.org/projects/simplex-chat/website/es/ * Translated using Weblate (Spanish) Currently translated at 14.2% (30 of 211 strings) Translation: SimpleX Chat/SimpleX Chat website Translate-URL: https://hosted.weblate.org/projects/simplex-chat/website/es/ * Translated using Weblate (Dutch) Currently translated at 100.0% (211 of 211 strings) Translation: SimpleX Chat/SimpleX Chat website Translate-URL: https://hosted.weblate.org/projects/simplex-chat/website/nl/ * Translated using Weblate (Spanish) Currently translated at 14.6% (31 of 211 strings) Translation: SimpleX Chat/SimpleX Chat website Translate-URL: https://hosted.weblate.org/projects/simplex-chat/website/es/ * Translated using Weblate (Spanish) Currently translated at 14.6% (31 of 211 strings) Translation: SimpleX Chat/SimpleX Chat website Translate-URL: https://hosted.weblate.org/projects/simplex-chat/website/es/ * Translated using Weblate (Spanish) Currently translated at 15.1% (32 of 211 strings) Translation: SimpleX Chat/SimpleX Chat website Translate-URL: https://hosted.weblate.org/projects/simplex-chat/website/es/ * Translated using Weblate (Spanish) Currently translated at 15.1% (32 of 211 strings) Translation: SimpleX Chat/SimpleX Chat website Translate-URL: https://hosted.weblate.org/projects/simplex-chat/website/es/ * Translated using Weblate (Spanish) Currently translated at 15.6% (33 of 211 strings) Translation: SimpleX Chat/SimpleX Chat website Translate-URL: https://hosted.weblate.org/projects/simplex-chat/website/es/ * Translated using Weblate (Spanish) Currently translated at 15.6% (33 of 211 strings) Translation: SimpleX Chat/SimpleX Chat website Translate-URL: https://hosted.weblate.org/projects/simplex-chat/website/es/ * Translated using Weblate (Spanish) Currently translated at 26.5% (56 of 211 strings) Translation: SimpleX Chat/SimpleX Chat website Translate-URL: https://hosted.weblate.org/projects/simplex-chat/website/es/ * Translated using Weblate (Spanish) Currently translated at 26.5% (56 of 211 strings) Translation: SimpleX Chat/SimpleX Chat website Translate-URL: https://hosted.weblate.org/projects/simplex-chat/website/es/ * Translated using Weblate (Spanish) Currently translated at 28.9% (61 of 211 strings) Translation: SimpleX Chat/SimpleX Chat website Translate-URL: https://hosted.weblate.org/projects/simplex-chat/website/es/ * Translated using Weblate (Spanish) Currently translated at 28.9% (61 of 211 strings) Translation: SimpleX Chat/SimpleX Chat website Translate-URL: https://hosted.weblate.org/projects/simplex-chat/website/es/ * Translated using Weblate (Spanish) Currently translated at 30.3% (64 of 211 strings) Translation: SimpleX Chat/SimpleX Chat website Translate-URL: https://hosted.weblate.org/projects/simplex-chat/website/es/ * Translated using Weblate (Spanish) Currently translated at 30.3% (64 of 211 strings) Translation: SimpleX Chat/SimpleX Chat website Translate-URL: https://hosted.weblate.org/projects/simplex-chat/website/es/ * Translated using Weblate (Spanish) Currently translated at 31.2% (66 of 211 strings) Translation: SimpleX Chat/SimpleX Chat website Translate-URL: https://hosted.weblate.org/projects/simplex-chat/website/es/ * Translated using Weblate (Spanish) Currently translated at 32.7% (69 of 211 strings) Translation: SimpleX Chat/SimpleX Chat website Translate-URL: https://hosted.weblate.org/projects/simplex-chat/website/es/ * Translated using Weblate (Spanish) Currently translated at 32.7% (69 of 211 strings) Translation: SimpleX Chat/SimpleX Chat website Translate-URL: https://hosted.weblate.org/projects/simplex-chat/website/es/ * Translated using Weblate (Dutch) Currently translated at 100.0% (211 of 211 strings) Translation: SimpleX Chat/SimpleX Chat website Translate-URL: https://hosted.weblate.org/projects/simplex-chat/website/nl/ * Translated using Weblate (Spanish) Currently translated at 14.2% (30 of 211 strings) Translation: SimpleX Chat/SimpleX Chat website Translate-URL: https://hosted.weblate.org/projects/simplex-chat/website/es/ * Translated using Weblate (Spanish) Currently translated at 14.2% (30 of 211 strings) Translation: SimpleX Chat/SimpleX Chat website Translate-URL: https://hosted.weblate.org/projects/simplex-chat/website/es/ * Translated using Weblate (Dutch) Currently translated at 100.0% (211 of 211 strings) Translation: SimpleX Chat/SimpleX Chat website Translate-URL: https://hosted.weblate.org/projects/simplex-chat/website/nl/ * Translated using Weblate (Spanish) Currently translated at 14.6% (31 of 211 strings) Translation: SimpleX Chat/SimpleX Chat website Translate-URL: https://hosted.weblate.org/projects/simplex-chat/website/es/ * Translated using Weblate (Spanish) Currently translated at 14.6% (31 of 211 strings) Translation: SimpleX Chat/SimpleX Chat website Translate-URL: https://hosted.weblate.org/projects/simplex-chat/website/es/ * Translated using Weblate (Spanish) Currently translated at 15.1% (32 of 211 strings) Translation: SimpleX Chat/SimpleX Chat website Translate-URL: https://hosted.weblate.org/projects/simplex-chat/website/es/ * Translated using Weblate (Spanish) Currently translated at 15.1% (32 of 211 strings) Translation: SimpleX Chat/SimpleX Chat website Translate-URL: https://hosted.weblate.org/projects/simplex-chat/website/es/ * Translated using Weblate (Spanish) Currently translated at 15.6% (33 of 211 strings) Translation: SimpleX Chat/SimpleX Chat website Translate-URL: https://hosted.weblate.org/projects/simplex-chat/website/es/ * Translated using Weblate (Spanish) Currently translated at 15.6% (33 of 211 strings) Translation: SimpleX Chat/SimpleX Chat website Translate-URL: https://hosted.weblate.org/projects/simplex-chat/website/es/ * Translated using Weblate (Spanish) Currently translated at 26.5% (56 of 211 strings) Translation: SimpleX Chat/SimpleX Chat website Translate-URL: https://hosted.weblate.org/projects/simplex-chat/website/es/ * Translated using Weblate (Spanish) Currently translated at 26.5% (56 of 211 strings) Translation: SimpleX Chat/SimpleX Chat website Translate-URL: https://hosted.weblate.org/projects/simplex-chat/website/es/ * Translated using Weblate (Spanish) Currently translated at 28.9% (61 of 211 strings) Translation: SimpleX Chat/SimpleX Chat website Translate-URL: https://hosted.weblate.org/projects/simplex-chat/website/es/ * Translated using Weblate (Spanish) Currently translated at 28.9% (61 of 211 strings) Translation: SimpleX Chat/SimpleX Chat website Translate-URL: https://hosted.weblate.org/projects/simplex-chat/website/es/ * Translated using Weblate (Spanish) Currently translated at 30.3% (64 of 211 strings) Translation: SimpleX Chat/SimpleX Chat website Translate-URL: https://hosted.weblate.org/projects/simplex-chat/website/es/ * Translated using Weblate (Spanish) Currently translated at 30.3% (64 of 211 strings) Translation: SimpleX Chat/SimpleX Chat website Translate-URL: https://hosted.weblate.org/projects/simplex-chat/website/es/ * Translated using Weblate (Spanish) Currently translated at 31.2% (66 of 211 strings) Translation: SimpleX Chat/SimpleX Chat website Translate-URL: https://hosted.weblate.org/projects/simplex-chat/website/es/ * Translated using Weblate (Spanish) Currently translated at 32.7% (69 of 211 strings) Translation: SimpleX Chat/SimpleX Chat website Translate-URL: https://hosted.weblate.org/projects/simplex-chat/website/es/ * Translated using Weblate (Spanish) Currently translated at 32.7% (69 of 211 strings) Translation: SimpleX Chat/SimpleX Chat website Translate-URL: https://hosted.weblate.org/projects/simplex-chat/website/es/ * Translated using Weblate (Spanish) Currently translated at 46.4% (98 of 211 strings) Translation: SimpleX Chat/SimpleX Chat website Translate-URL: https://hosted.weblate.org/projects/simplex-chat/website/es/ --------- Co-authored-by: John m Co-authored-by: No name Co-authored-by: 4 Bi 5aYzVk 93FCVjWLWxh44XH3984teVSfjwFYmUGUrbvnHwGirk9 --- website/langs/es.json | 108 ++++++++++++++++++++++++++++++++---------- website/langs/nl.json | 16 +++---- 2 files changed, 92 insertions(+), 32 deletions(-) diff --git a/website/langs/es.json b/website/langs/es.json index dc0c372294..93017deea6 100644 --- a/website/langs/es.json +++ b/website/langs/es.json @@ -1,43 +1,103 @@ { "reference": "Referencia", - "why-simplex": "Por que Simplex", + "why-simplex": "Por qué Simplex", "simplex-privacy": "Privacidad de SimpleX", - "simplex-explained-tab-1-text": "1. Lo que experimentan los usuarios", - "simplex-explained-tab-2-text": "2. ¿Cómo funciona?", - "simplex-network": "La red Simplex", + "simplex-explained-tab-1-text": "1. Experiencia del usuario", + "simplex-explained-tab-2-text": "2. Cómo funciona", + "simplex-network": "Red Simplex", "simplex-explained-tab-3-text": "3. Qué ven los servidores", - "simplex-explained-tab-2-p-2": "Los servidores solo pasan mensajes de una manera, sin tener la imagen completa de la conversación o las conexiones del usuario.", - "simplex-explained-tab-3-p-2": "Los usuarios pueden mejorar aún más la privacidad de los metadatos utilizando Tor para acceder a los servidores, evitando la correlación por dirección IP.", + "simplex-explained-tab-2-p-2": "Los servidores solo transmiten mensajes en un sentido para no disponer de la imagen completa de la conversación o las conexiones del usuario.", + "simplex-explained-tab-3-p-2": "El usuario puede mejorar aún más la privacidad de los metadatos usando la red Tor para el acceso a los servidores y evitando así la correlación por dirección IP.", "smp-protocol": "Protocolo SMP", "donate": "Donar", - "copyright-label": "© 2020-2023 SimpleX | Proyecto Open-Source", + "copyright-label": "© 2020-2023 SimpleX | Proyecto de Código Abierto", "simplex-chat-protocol": "Protocolo de SimpleX Chat", "terms-and-privacy-policy": "Términos y Política de Privacidad", - "hero-header": "La privacidad redefinida", - "hero-overlay-1-textlink": "¿Por qué los ID de usuario son malos para la privacidad?", + "hero-header": "Privacidad redefinida", + "hero-overlay-1-textlink": "¿Por qué los ID de usuario son perjudiciales para la privacidad?", "hero-overlay-2-textlink": "¿Cómo funciona SimpleX?", - "hero-2-header": "Haz una conexión privada", + "hero-2-header": "Hacer una conexión privada", "hero-overlay-1-title": "¿Cómo funciona SimpleX?", - "hero-overlay-2-title": "¿Por qué los ID de usuario son malos para la privacidad?", - "feature-1-title": "Mensajes cifrados E2E con markdown y edición", - "feature-3-title": "Grupos secretos descentralizados —
sólo los usuarios saben que existen", - "feature-6-title": "Llamadas de audio y vídeo con cifrado E2E", + "hero-overlay-2-title": "¿Por qué los ID de usuario son perjudiciales para la privacidad?", + "feature-1-title": "Mensajes cifrados E2E con marcadores y edición", + "feature-3-title": "Grupos secretos descentralizados —
sólo los usuarios saben de su existencia", + "feature-6-title": "Llamadas y videollamadas con cifrado E2E", "simplex-network-overlay-1-title": "Comparación con protocolos de mensajería P2P", "developers": "Desarrolladores", "features": "Características", "blog": "Blog", "home": "Inicio", - "simplex-explained-tab-3-p-1": "Los servidores tienen credenciales anónimas separadas para cada cola y no saben a qué usuarios pertenecen.", + "simplex-explained-tab-3-p-1": "Los servidores tienen credenciales diferentes y anónimas por cada cola y desconocen a qué usuarios pertenecen.", "hero-p-1": "Otras aplicaciones tienen ID de usuario: Signal, Matrix, Session, Briar, Jami, Cwtch, etc.
SimpleX no los tiene, ni siquiera números aleatorios.
Esto mejora radicalmente su privacidad.", - "hero-2-header-desc": "El video muestra cómo te conectas con tu amigo a través de su código QR de un solo uso, en persona o a través de un enlace de video. También puede conectarse compartiendo un enlace de invitación.", - "feature-7-title": "Base de datos cifrada portátil— mueva su perfil a otro dispositivo", - "simplex-private-card-4-point-2": "Para usar SimpleX a través de Tor, instale Orbot app y active el proxy SOCKS5 (o VPN en iOS).", - "simplex-private-card-3-point-1": "Para las conexiones cliente-servidor sólo se utiliza TLS 1.2/1.3 con algoritmos robustos.", - "simplex-private-card-4-point-1": "Para proteger su dirección IP, puede acceder a los servidores a través de Tor u otra red de transporte superpuesta.", + "hero-2-header-desc": "El video muestra cómo te conectas con tu amigo a través de su código QR de un solo uso, en persona o a través de un enlace de video. También puedes conectarte compartiendo un enlace de invitación.", + "feature-7-title": "Base de datos portable cifrada — transfiere tu perfil a otro dispositivo", + "simplex-private-card-4-point-2": "Para usar SimpleX a través de Tor, instala Orbot app y activa el proxy SOCKS5 (o VPN en iOS).", + "simplex-private-card-3-point-1": "Para las conexiones cliente-servidor sólo se usa TLS 1.2/1.3 con algoritmos robustos.", + "simplex-private-card-4-point-1": "Para proteger tu dirección IP puedes acceder a los servidores a través de la red Tor u otra red de transporte superpuesta.", "simplex-private-card-5-point-2": "Esto hace que mensajes de distintos tamaños parezcan iguales a los ojos de los servidores y observadores de la red.", "simplex-private-card-6-point-1": "Muchas plataformas de comunicación son vulnerables a ataques MITM por parte de servidores o proveedores de red.", - "simplex-private-card-7-point-1": "Para garantizar la integridad, los mensajes se numeran secuencialmente e incluyen el hash del mensaje anterior.", - "simplex-private-card-7-point-2": "Si se añade, elimina o modifica algún mensaje, se avisará al destinatario.", + "simplex-private-card-7-point-1": "Para garantizar la integridad los mensajes se numeran secuencialmente e incluyen el hash del mensaje anterior.", + "simplex-private-card-7-point-2": "Si se añade, elimina o modifica algún mensaje, se alerta al destinatario.", "simplex-private-card-8-point-1": "Los servidores de SimpleX actúan como nodos de mezcla de baja latencia — los mensajes entrantes y salientes tienen un orden diferente.", - "simplex-private-card-9-point-1": "Cada cola de mensajes pasa mensajes en una dirección, con diferentes direcciones de envío y recepción." -} + "simplex-private-card-9-point-1": "Cada cola de mensajes transmite las distintas direcciones de envío y recepción en un solo sentido.", + "simplex-explained": "Simplex explicado", + "simplex-explained-tab-1-p-1": "Puedes crear contactos y grupos, y mantener conversaciones bidireccionales como en cualquier aplicación de mensajería.", + "simplex-explained-tab-1-p-2": "¿Cómo puede funcionar con colas unidireccionales y sin identificadores de usuario?", + "simplex-explained-tab-2-p-1": "Por cada conexión se usan dos colas de mensajes separadas para que el envío y recepción sean a través de servidores diferentes.", + "chat-bot-example": "Ejemplo de bot de Chat", + "chat-protocol": "Protocolo Chat", + "terminal-cli": "Terminal CLI", + "hero-subheader": "El primer mensajero
sin ID de usuario", + "feature-2-title": "Cifrado E2E
de imágenes y archivos", + "feature-8-title": "Modo Incógnito —
único de SimpleX Chat", + "simplex-private-1-title": "2 capas de
cifrado de extremo a extremo", + "simplex-private-2-title": "Capa adicional de
cifrado del servidor", + "simplex-private-3-title": "Transporte TLS
seguro y auténticado", + "simplex-private-4-title": "Acceso opcional
a través de Tor", + "simplex-private-7-title": "Verificación de la
integridad del mensaje", + "feature-4-title": "Mensajes de voz cifrados E2E", + "feature-5-title": "Mensajes temporales", + "simplex-private-6-title": "Intercambio de claves
fuera de banda", + "simplex-private-5-title": "Múltiples capas
de contenido acolchado", + "simplex-private-8-title": "Mezcla de mensajes
para reducir la correlación", + "simplex-private-10-title": "Identificadores por pares anónimos temporales", + "simplex-private-9-title": "Colas de mensajes
unidireccionales", + "simplex-private-card-1-point-1": "Protocolo de doble contraseña —Mensajería OTR (Off-the-Record) con perfecto secreto hacia adelante (PFS) y recuperación de intrusión.", + "simplex-private-card-1-point-2": "NaCL cryptobox en cada cola para evitar la correlación de tráfico entre colas de mensajes si la TLS se ve comprometida.", + "simplex-private-card-2-point-1": "Capa adicional de cifrado del servidor para la entrega al destinatario que evita la correlación entre el tráfico de recepción y envío del servidor si la TLS se ve comprometida.", + "simplex-private-card-3-point-2": "La huella digital del servidor y la vinculación de canales evitan los ataques MITM (ataque de intermediario) y de repetición.", + "simplex-private-card-3-point-3": "La reanudación de la conexión está deshabilitada para evitar ataques de sesión.", + "simplex-private-card-5-point-1": "SimpleX utiliza relleno de contenido en cada capa de cifrado para frustrar los ataques al tamaño de los mensajes.", + "simplex-private-card-6-point-2": "Para evitarlo las aplicaciones SimpleX pasan claves de un solo uso fuera de banda cuando compartes un enlace de dirección o un código QR.", + "simplex-private-card-9-point-2": "Esto reduce los vectores de ataque, en comparación con los agentes de mensajes tradicionales, y los metadatos disponibles.", + "simplex-private-card-10-point-1": "SimpleX usa direcciones y credenciales temporales anónimas por pares para cada contacto de usuario o miembro de grupo.", + "privacy-matters-1-title": "Publicidad y discriminación de precios", + "privacy-matters-1-overlay-1-title": "La privacidad te ahorra dinero", + "privacy-matters-1-overlay-1-linkText": "La privacidad te ahorra dinero", + "privacy-matters-2-overlay-1-title": "La privacidad te da poder", + "privacy-matters-3-title": "Enjuiciamiento por asociación inocente", + "privacy-matters-3-overlay-1-linkText": "La privacidad protege tu libertad", + "simplex-unique-1-title": "Tienes total privacidad", + "simplex-unique-2-title": "Estás protegido
contra el spam y el abuso", + "simplex-unique-3-title": "Tú controlas tus datos", + "simplex-unique-4-title": "Eres dueño de la red SimpleX", + "hero-overlay-card-1-p-1": "Muchos usuarios se preguntan: si SimpleX no tiene identificadores de usuario, ¿cómo puede saber dónde entregar los mensajes?", + "hero-overlay-card-1-p-4": "Este diseño evita que se filtren metadatos de usuario a nivel de aplicación. Para mejorar aún más la privacidad y proteger tu dirección IP, puedes conectarte a los servidores de mensajería a través de la red Tor.", + "hero-overlay-card-1-p-6": "Más información en el artículo técnico SimpleX.", + "hero-overlay-card-2-p-1": "Cuando los usuarios asumen identidades persistentes, aunque sólo se trate de un número aleatorio como un identificador de sesión, existe el riesgo de que el proveedor o un atacante puedan observar cómo se conectan los usuarios y cuántos mensajes envían.", + "hero-overlay-card-2-p-2": "A continuación podrían correlacionar esta información con las redes sociales públicas existentes y averiguar las identidades reales.", + "hero-overlay-card-2-p-3": "Incluso con las aplicaciones más privadas que utilizan los servicios de Tor v3, si hablas con dos contactos a través de un mismo perfil se puede probar que están conectados con la misma persona.", + "privacy-matters-2-overlay-1-linkText": "La privacidad te da poder", + "simplex-private-card-10-point-2": "Esto permite entregar mensajes sin identificadores de perfil de usuario y proporcionando una mayor privacidad de metadatos que las alternativas.", + "privacy-matters-3-overlay-1-title": "La privacidad protege tu libertad", + "simplex-unique-1-overlay-1-title": "Privacidad total de tu identidad, perfil, contactos y metadatos", + "privacy-matters-2-title": "Manipulación de elecciones", + "simplex-unique-2-overlay-1-title": "La mejor protección contra el spam y el abuso", + "simplex-unique-3-overlay-1-title": "Titularidad, control y seguridad de tus datos", + "simplex-unique-4-overlay-1-title": "Totalmente descentralizado — los usuarios son dueños de la red SimpleX", + "hero-overlay-card-1-p-2": "Para entregar los mensajes, en lugar de los identificadores de usuario utilizados por todas las demás plataformas, SimpleX usa identificadores por pares anónimos y temporales de colas de mensajes, independientes para cada una de sus conexiones — no hay identificadores a largo plazo.", + "hero-overlay-card-1-p-5": "Los perfiles de usuario, contactos y grupos sólo se almacenan en los dispositivos cliente; los mensajes se envían de extremo a extremo con cifrado de doble capa.", + "hero-overlay-card-1-p-3": "Tú defines qué servidor(es) usas para recibir los mensajes, tus contactos — los servidores que utilizas para enviar los mensajes. Es probable que cada conversación use dos servidores distintos.", + "hero-overlay-card-2-p-4": "SimpleX protege contra estos ataques al no disponer de ID de usuario en su diseño. Y si usas el modo incógnito, tendrás un nombre mostrado diferente por cada contacto, evitando cualquier dato compartido entre ellos.", + "simplex-network-overlay-card-1-p-1": "Los protocolos y aplicaciones de mensajería P2P presentan varios problemas que los hacen menos fiables que SimpleX, más complejos de analizar y más vulnerables a varios tipos de ataques." +} \ No newline at end of file diff --git a/website/langs/nl.json b/website/langs/nl.json index b035cf475d..42f36eae08 100644 --- a/website/langs/nl.json +++ b/website/langs/nl.json @@ -51,7 +51,7 @@ "simplex-private-card-6-point-1": "Veel communicatie platforms zijn kwetsbaar voor MITM aanvallen door servers of netwerk providers.", "simplex-private-card-7-point-2": "Als een bericht wordt toegevoegd, verwijderd of gewijzigd, wordt de ontvanger gewaarschuwd.", "simplex-private-card-8-point-1": "SimpleX servers fungeren als mix nodes met lage latentie — de inkomende en uitgaande berichten hebben een andere volgorde.", - "simplex-private-card-9-point-2": "Het vermindert de aanvals mogenlijkheden, in vergelijking met traditionele berichten diensten, en de beschikbare metadata.", + "simplex-private-card-9-point-2": "Het vermindert de aanvals mogenlijkheden, in vergelijking met traditionele berichten diensten en de beschikbare metadata.", "simplex-private-card-10-point-1": "SimpleX gebruikt tijdelijke anonieme paarsgewijze adressen en inloggegevens voor elk gebruikers contact of groepslid.", "simplex-explained-tab-2-text": "2. Hoe werkt het", "chat-protocol": "Chat protocol", @@ -64,7 +64,7 @@ "simplex-private-card-1-point-1": "Protocol met double-ratchet -
OTR-berichten met perfecte voorwaartse geheimhouding en inbraak herstel.", "simplex-private-6-title": "Out-of-band
sleuteluitwisseling", "simplex-private-7-title": "Bericht integriteit
verificatie", - "simplex-private-card-4-point-1": "Om uw IP-adres te beschermen, kunt u via Tor of een ander transport overlay netwerk toegang krijgen tot de servers.", + "simplex-private-card-4-point-1": "Om uw IP-adres te beschermen kunt u via Tor of een ander transport overlay netwerk toegang krijgen tot de servers.", "simplex-private-card-4-point-2": "Installeer de Orbot-app en schakel de SOCKS5-proxy in (of VPN op iOS ) om SimpleX via Tor te gebruiken.", "simplex-private-card-6-point-2": "Om te voorkomen dat SimpleX apps eenmalige sleutels out-of-band doorgeven, wanneer u een adres deelt als een link of een QR-code.", "simplex-private-card-7-point-1": "Om de integriteit te garanderen, zijn de berichten opeenvolgend genummerd en bevatten ze de hash van het vorige bericht.", @@ -87,9 +87,9 @@ "simplex-unique-3-overlay-1-title": "Eigendom, controle en beveiliging van uw gegevens", "simplex-unique-4-title": "U bent eigenaar van het SimpleX netwerk", "simplex-unique-4-overlay-1-title": "Volledig gedecentraliseerd — gebruikers zijn eigenaar van het SimpleX netwerk", - "hero-overlay-card-1-p-3": "U definieert welke server(s) u wilt gebruiken om de berichten te ontvangen, uw contacten — de servers die u gebruikt om de berichten naar hen te verzenden. Elk gesprek gebruikt waarschijnlijk twee verschillende servers.", + "hero-overlay-card-1-p-3": "U definieert welke server(s) u wilt gebruiken om de berichten te ontvangen. Uw contacten de servers die u gebruikt om de berichten naar hen te verzenden. Elk gesprek gebruikt waarschijnlijk twee verschillende servers.", "hero-overlay-card-2-p-1": "Wanneer gebruikers een blijvende identiteit hebben, zelfs als dit slechts een willekeurig nummer is, zoals een sessie ID, bestaat het risico dat de provider of een aanvaller kan zien hoe de gebruikers zijn verbonden en hoeveel berichten ze verzenden.", - "hero-overlay-card-1-p-4": "Dit ontwerp voorkomt het lekken van eventuele gebruikersgegevens. metadata op applicatie niveau. Om de privacy verder te verbeteren en uw IP-adres te beschermen, kunt u via Tor verbinding maken met berichten servers.", + "hero-overlay-card-1-p-4": "Dit ontwerp voorkomt het lekken van eventuele gebruikersgegevens en metadata op applicatie niveau. Om de privacy verder te verbeteren en uw IP-adres te beschermen kunt u via Tor verbinding maken met berichten servers.", "hero-overlay-card-1-p-5": "Alleen client apparaten slaan gebruikers profielen, contacten en groepen op; de berichten worden verzonden met 2-laags end-to-end versleuteling.", "hero-overlay-card-1-p-6": "Lees meer in SimpleX-whitepaper.", "hero-overlay-card-2-p-2": "Ze zouden deze informatie vervolgens kunnen correleren met de bestaande openbare sociale netwerken en een aantal echte identiteiten kunnen bepalen.", @@ -101,7 +101,7 @@ "hero-overlay-card-2-p-4": "SimpleX beschermt tegen deze aanvallen door geen gebruikers ID's in het ontwerp te hebben. En als u de incognitomodus gebruikt, heeft u voor elk contact een andere weergavenaam, waardoor gedeelde gegevens tussen hen worden vermeden.", "simplex-network-overlay-card-1-p-1": "P2P-berichtenprotocollen en -apps hebben verschillende problemen waardoor ze minder betrouwbaar zijn dan SimpleX, complexer om te analyseren en kwetsbaarder voor verschillende soorten aanvallen.", "simplex-network-overlay-card-1-li-1": "P2P netwerken vertrouwen op een variant van DHT om berichten te routeren. DHT ontwerpen moeten een balans vinden tussen leveringsgarantie en latentie. SimpleX heeft zowel een betere leveringsgarantie als een lagere latentie dan P2P, omdat het bericht redundant via meerdere servers parallel kan worden doorgegeven, met behulp van de servers die door de ontvanger zijn gekozen. In P2P netwerken wordt het bericht achtereenvolgens door O(log N)-knooppunten geleid, met behulp van door het algoritme gekozen knooppunten.", - "simplex-network-overlay-card-1-li-2": "SimpleX ontwerp heeft, in tegenstelling tot de meeste P2P netwerken, geen globale gebruikers ID's van welke soort dan ook, zelfs niet tijdelijk, en gebruikt alleen tijdelijke paarsgewijze ID's, wat een betere anonimiteit en metadata bescherming biedt.", + "simplex-network-overlay-card-1-li-2": "SimpleX ontwerp heeft, in tegenstelling tot de meeste P2P netwerken, geen globale gebruikers ID's van welke soort dan ook, zelfs niet tijdelijk en gebruikt alleen tijdelijke paarsgewijze ID's wat een betere anonimiteit en metadata bescherming biedt.", "simplex-network-overlay-card-1-li-3": "P2P lost het probleem MITM-aanval niet op en de meeste bestaande implementaties gebruiken geen out-of-band berichten voor de initiële sleuteluitwisseling. SimpleX gebruikt out-of-band berichten of, in sommige gevallen, reeds bestaande veilige en vertrouwde verbindingen voor de eerste sleuteluitwisseling.", "simplex-network-overlay-card-1-li-4": "P2P implementaties kunnen door sommige internetproviders worden geblokkeerd (zoals BitTorrent). SimpleX is transport-agnostisch - het kan werken via standaard webprotocollen, b.v. WebSockets.", "simplex-network-overlay-card-1-li-5": "Alle bekende P2P netwerken kunnen kwetsbaar zijn voor Sybil-aanval, omdat elk knooppunt vindbaar is en het netwerk als een geheel opereert. Bekende maatregelen om het te verminderen, vereisen een gecentraliseerde component of duur bewijs van werk . Het SimpleX-netwerk kan niet worden gedetecteerd door de server, het is gefragmenteerd en werkt als meerdere geïsoleerde subnetwerken, waardoor netwerkbrede aanvallen onmogelijk zijn.", @@ -149,8 +149,8 @@ "simplex-network-section-header": "SimpleX Netwerk", "simplex-network-section-desc": "Simplex Chat biedt de beste privacy door de voordelen van P2P en gefedereerde netwerken te combineren.", "simplex-network-1-header": "In tegenstelling tot P2P netwerken", - "simplex-network-1-desc": "Alle berichten worden verzonden via de servers, die beide zorgen voor een betere metadata privacy en een betrouwbare asynchrone bezorging van berichten, terwijl er veel worden vermeden", - "simplex-network-1-overlay-linktext": "problemen van P2P netwerken", + "simplex-network-1-desc": "Alle berichten worden verzonden via servers, die zorgen voor een betere metadata privacy en een betrouwbare asynchrone bezorging van berichten, terwijl er veel word vermeden", + "simplex-network-1-overlay-linktext": "van problemen met P2P netwerken", "simplex-network-2-header": "In tegenstelling tot federatieve netwerken", "simplex-network-3-header": "SimpleX netwerk", "simplex-network-3-desc": "servers bieden unidirectionele wachtrijen om de gebruikers te verbinden, maar ze hebben geen zicht op de netwerk verbindings grafiek — alleen de gebruikers.", @@ -176,7 +176,7 @@ "privacy-matters-overlay-card-1-p-2": "Webwinkels weten dat mensen met lagere inkomens eerder geneigd zijn om dringende aankopen te doen, dus kunnen ze hogere prijzen vragen of kortingen intrekken.", "privacy-matters-overlay-card-1-p-3": "Sommige financiële en verzekeringsmaatschappijen gebruiken sociale grafieken om rentetarieven en premies te bepalen. Het zorgt er vaak voor dat mensen met lagere inkomens meer betalen — het staat bekend als 'armoedepremie'.", "privacy-matters-overlay-card-1-p-4": "Het SimpleX platform beschermt de privacy van uw verbindingen beter dan welk alternatief dan ook, waardoor volledig wordt voorkomen dat uw sociale grafiek beschikbaar wordt voor bedrijven of organisaties. Zelfs wanneer mensen servers van SimpleX Chat gebruiken, weten we niet hoeveel gebruikers of hun verbindingen zijn.", - "privacy-matters-overlay-card-2-p-2": "Om objectief te zijn en onafhankelijke beslissingen te kunnen nemen, moet u de controle hebben over uw informatie ruimte. Het is alleen mogelijk als u een privé communicatieplatform gebruikt dat geen toegang heeft tot uw sociale grafiek.", + "privacy-matters-overlay-card-2-p-2": "Om objectief te zijn en onafhankelijke beslissingen te kunnen nemen, moet u de controle hebben over uw informatie. Het is alleen mogelijk als u een privé communicatieplatform gebruikt dat geen toegang heeft tot uw sociale grafiek.", "privacy-matters-overlay-card-2-p-3": "SimpleX is het eerste platform dat standaard geen gebruikers ID's heeft, waardoor uw verbindingsgrafiek beter wordt beschermd dan welk alternatief dan ook.", "privacy-matters-overlay-card-3-p-1": "Iedereen zou zich zorgen moeten maken over de privacy en veiligheid van hun communicatie — onschuldige gesprekken kunnen je in gevaar brengen, zelfs als je niets te verbergen hebt.", "simplex-unique-overlay-card-1-p-1": "In tegenstelling tot andere berichten platforms heeft SimpleX geen identifiers toegewezen aan de gebruikers . Het vertrouwt niet op telefoonnummers, domein gebaseerde adressen (zoals e-mail of XMPP), gebruikersnamen, openbare sleutels of zelfs willekeurige nummers om zijn gebruikers te identificeren — we weten niet ' hoeveel mensen onze SimpleX servers gebruiken.", From b2aec6d6a7f045736ce28fa5af5a30fda9aef785 Mon Sep 17 00:00:00 2001 From: Evgeny Poberezkin <2769109+epoberezkin@users.noreply.github.com> Date: Sat, 25 Mar 2023 17:40:37 +0000 Subject: [PATCH 12/19] 4.6: Android 107, iOS 134 --- apps/android/app/build.gradle | 4 ++-- apps/ios/SimpleX.xcodeproj/project.pbxproj | 8 ++++---- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/apps/android/app/build.gradle b/apps/android/app/build.gradle index 1021bceacf..b69479412f 100644 --- a/apps/android/app/build.gradle +++ b/apps/android/app/build.gradle @@ -11,8 +11,8 @@ android { applicationId "chat.simplex.app" minSdk 29 targetSdk 32 - versionCode 106 - versionName "4.6-beta.2" + versionCode 107 + versionName "4.6" testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" ndk { diff --git a/apps/ios/SimpleX.xcodeproj/project.pbxproj b/apps/ios/SimpleX.xcodeproj/project.pbxproj index 240169b668..053a59b9fe 100644 --- a/apps/ios/SimpleX.xcodeproj/project.pbxproj +++ b/apps/ios/SimpleX.xcodeproj/project.pbxproj @@ -1396,7 +1396,7 @@ CLANG_ENABLE_MODULES = YES; CODE_SIGN_ENTITLEMENTS = "SimpleX (iOS).entitlements"; CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 133; + CURRENT_PROJECT_VERSION = 134; DEVELOPMENT_TEAM = 5NN7GUYB6T; ENABLE_BITCODE = NO; ENABLE_PREVIEWS = YES; @@ -1438,7 +1438,7 @@ CLANG_ENABLE_MODULES = YES; CODE_SIGN_ENTITLEMENTS = "SimpleX (iOS).entitlements"; CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 133; + CURRENT_PROJECT_VERSION = 134; DEVELOPMENT_TEAM = 5NN7GUYB6T; ENABLE_BITCODE = NO; ENABLE_PREVIEWS = YES; @@ -1518,7 +1518,7 @@ CODE_SIGN_ENTITLEMENTS = "SimpleX NSE/SimpleX NSE.entitlements"; CODE_SIGN_IDENTITY = "Apple Development"; CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 133; + CURRENT_PROJECT_VERSION = 134; DEVELOPMENT_TEAM = 5NN7GUYB6T; ENABLE_BITCODE = NO; GENERATE_INFOPLIST_FILE = YES; @@ -1550,7 +1550,7 @@ CODE_SIGN_ENTITLEMENTS = "SimpleX NSE/SimpleX NSE.entitlements"; CODE_SIGN_IDENTITY = "Apple Development"; CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 133; + CURRENT_PROJECT_VERSION = 134; DEVELOPMENT_TEAM = 5NN7GUYB6T; ENABLE_BITCODE = NO; GENERATE_INFOPLIST_FILE = YES; From 05c4a6c68297418226e3a1fa186925444e25482a Mon Sep 17 00:00:00 2001 From: Evgeny Poberezkin <2769109+epoberezkin@users.noreply.github.com> Date: Sat, 25 Mar 2023 21:51:27 +0000 Subject: [PATCH 13/19] android: support for ARMv7a and Android 8+ (#2038) * add armv7a * disable armv6l, that is lacking SMP atomics * Add Android 8 setting (API Ver 26) * Drop x86_64-linux, this makes no sense with `pkgs' = androidPkgs`. * Drop mis-labled x86_64-linux:lib:support (it was aarch64-android) * Drop x86_64-android, these do not exist in nixpkgs The ones set up were aarch64-android anyway (pkgs' = androidPkgs) * android: support Android 8+, armeabi-v7a (32 bit) (#2012) * test * stubs for allowing to launch the app * more stubs and minSdk lowered to 26 * replaced functions that supported on higher API levels with other functions * animated images on lower API levels and write permission * updated abi filter and scripts for downloading libs * changed compression script for multiple apks * cmake changes --------- Co-authored-by: Avently <7953703+avently@users.noreply.github.com> * update haskell.nix ref * bump hackage * bump haskell.nix (again) * build-android: add armv7 * flake.nix: remove local nixconf This change to flake.nix breaks build-android.sh script by forcing user to input y/n. AFAIK, this cannot be automated and I rather not include workarounds like piping "yes n | nix build ...". * build-android.sh: update nix version * flake.{nix,lock}: testing * flake.{nix,lock}: restore to original * update android/prepare script to use zip archives * update gradle file * android: 4.6-beta.0 (104) * android: abi filter for bundle (#2075) * android: abi filter for bundle * removed log --------- Co-authored-by: Evgeny Poberezkin <2769109+epoberezkin@users.noreply.github.com> --------- Co-authored-by: Moritz Angermann Co-authored-by: Avently <7953703+avently@users.noreply.github.com> Co-authored-by: shum --- .gitignore | 1 + apps/android/app/build.gradle | 24 +- apps/android/app/src/main/cpp/CMakeLists.txt | 6 +- apps/android/app/src/main/cpp/simplex-api.c | 11 + .../simplex/app/views/chat/ComposeView.kt | 34 +-- .../simplex/app/views/chat/SendMsgView.kt | 15 +- .../app/views/chat/item/ChatItemView.kt | 12 +- .../app/views/database/DatabaseView.kt | 4 +- .../simplex/app/views/helpers/GetImageView.kt | 14 +- .../chat/simplex/app/views/helpers/Share.kt | 2 + .../chat/simplex/app/views/helpers/Util.kt | 56 +++- .../main/res/drawable/edit_text_cursor.xml | 5 + .../app/src/main/res/values/colors.xml | 1 + apps/android/build.gradle | 1 + flake.lock | 248 +++++++++++------- flake.nix | 215 ++++++++------- scripts/android/build-android.sh | 33 ++- scripts/android/compress-and-sign-apk.sh | 40 +-- scripts/android/download-libs.sh | 49 ++++ scripts/android/download_libs_aarch64.sh | 33 --- scripts/android/prepare.sh | 12 +- scripts/ios/download-libs.sh | 41 +++ scripts/ios/download_libs.sh | 24 -- 23 files changed, 538 insertions(+), 343 deletions(-) create mode 100644 apps/android/app/src/main/res/drawable/edit_text_cursor.xml create mode 100755 scripts/android/download-libs.sh delete mode 100755 scripts/android/download_libs_aarch64.sh create mode 100755 scripts/ios/download-libs.sh delete mode 100755 scripts/ios/download_libs.sh diff --git a/.gitignore b/.gitignore index 69111c9abb..d4b4d6cb33 100644 --- a/.gitignore +++ b/.gitignore @@ -75,3 +75,4 @@ website/package-lock.json # Ignore test files website/.cache website/test/stubs-layout-cache/_includes/*.js +apps/android/app/release diff --git a/apps/android/app/build.gradle b/apps/android/app/build.gradle index b69479412f..60036f1b25 100644 --- a/apps/android/app/build.gradle +++ b/apps/android/app/build.gradle @@ -9,15 +9,12 @@ android { defaultConfig { applicationId "chat.simplex.app" - minSdk 29 + minSdk 26 targetSdk 32 versionCode 107 versionName "4.6" testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" - ndk { - abiFilters 'arm64-v8a' - } vectorDrawables { useSupportLibrary true } @@ -77,10 +74,27 @@ android { jniLibs.useLegacyPackaging = compression_level != "0" } def isRelease = gradle.getStartParameter().taskNames.find({ it.toLowerCase().contains("release") }) != null + def isBundle = gradle.getStartParameter().taskNames.find({ it.toLowerCase().contains("bundle") }) != null // if (isRelease) { // Comma separated list of languages that will be included in the apk android.defaultConfig.resConfigs("en", "cs", "de", "es", "fr", "it", "nl", "ru", "zh-rCN") // } + if (isBundle) { + defaultConfig.ndk.abiFilters 'arm64-v8a', 'armeabi-v7a' + } else { + splits { + abi { + enable true + reset() + if (isRelease) { + include 'arm64-v8a', 'armeabi-v7a' + } else { + include 'arm64-v8a', 'armeabi-v7a' + universalApk false + } + } + } + } } dependencies { @@ -196,6 +210,8 @@ tasks.register("compressApk") { if (project.properties['android.injected.signing.key.alias'] != null && buildType == 'release') { new File(outputDir, "app-release.apk").renameTo(new File(outputDir, "simplex.apk")) + new File(outputDir, "app-armeabi-v7a-release.apk").renameTo(new File(outputDir, "simplex-armv7a.apk")) + new File(outputDir, "app-arm64-v8a-release.apk").renameTo(new File(outputDir, "simplex.apk")) } // View all gradle properties set diff --git a/apps/android/app/src/main/cpp/CMakeLists.txt b/apps/android/app/src/main/cpp/CMakeLists.txt index e97f01708f..de688975c6 100644 --- a/apps/android/app/src/main/cpp/CMakeLists.txt +++ b/apps/android/app/src/main/cpp/CMakeLists.txt @@ -53,10 +53,6 @@ add_library( support SHARED IMPORTED ) set_target_properties( support PROPERTIES IMPORTED_LOCATION ${CMAKE_SOURCE_DIR}/libs/${ANDROID_ABI}/libsupport.so) -add_library( crypto SHARED IMPORTED ) -set_target_properties( crypto PROPERTIES IMPORTED_LOCATION - ${CMAKE_SOURCE_DIR}/libs/${ANDROID_ABI}/libcrypto.so) - # Specifies libraries CMake should link to your target library. You # can link multiple libraries, such as libraries you define in this # build script, prebuilt third-party libraries, or system libraries. @@ -64,7 +60,7 @@ set_target_properties( crypto PROPERTIES IMPORTED_LOCATION target_link_libraries( # Specifies the target library. app-lib - simplex support crypto + simplex support # Links the target library to the log library # included in the NDK. diff --git a/apps/android/app/src/main/cpp/simplex-api.c b/apps/android/app/src/main/cpp/simplex-api.c index e3f1c13cf9..edd07bd63b 100644 --- a/apps/android/app/src/main/cpp/simplex-api.c +++ b/apps/android/app/src/main/cpp/simplex-api.c @@ -7,6 +7,17 @@ void hs_init(int * argc, char **argv[]); void setLineBuffering(void); int pipe_std_to_socket(const char * name); +extern void __svfscanf(void){}; +extern void __vfwscanf(void){}; +extern void __memset_chk_fail(void){}; +extern void __strcpy_chk_generic(void){}; +extern void __strcat_chk_generic(void){}; +extern void __libc_globals(void){}; +extern void __rel_iplt_start(void){}; + +// Android 9 only, not 13 +extern void reallocarray(void){}; + JNIEXPORT jint JNICALL Java_chat_simplex_app_SimplexAppKt_pipeStdOutToSocket(JNIEnv *env, __unused jclass clazz, jstring socket_name) { const char *name = (*env)->GetStringUTFChars(env, socket_name, JNI_FALSE); diff --git a/apps/android/app/src/main/java/chat/simplex/app/views/chat/ComposeView.kt b/apps/android/app/src/main/java/chat/simplex/app/views/chat/ComposeView.kt index 7d0ebe38c3..d63385ee2e 100644 --- a/apps/android/app/src/main/java/chat/simplex/app/views/chat/ComposeView.kt +++ b/apps/android/app/src/main/java/chat/simplex/app/views/chat/ComposeView.kt @@ -7,11 +7,10 @@ import android.Manifest import android.app.Activity import android.content.* import android.content.pm.PackageManager -import android.graphics.Bitmap -import android.graphics.ImageDecoder -import android.graphics.ImageDecoder.DecodeException +import android.graphics.* import android.graphics.drawable.AnimatedImageDrawable import android.net.Uri +import android.os.Build import android.provider.MediaStore import android.util.Log import android.widget.Toast @@ -36,6 +35,7 @@ import androidx.compose.ui.res.stringResource import androidx.compose.ui.text.font.FontStyle import androidx.compose.ui.unit.dp import androidx.core.content.ContextCompat +import androidx.core.net.toFile import chat.simplex.app.* import chat.simplex.app.R import chat.simplex.app.model.* @@ -186,10 +186,11 @@ fun ComposeView( val textStyle = remember { mutableStateOf(smallFont) } val cameraLauncher = rememberCameraLauncher { uri: Uri? -> if (uri != null) { - val source = ImageDecoder.createSource(SimplexApp.context.contentResolver, uri) - val bitmap = ImageDecoder.decodeBitmap(source) - val imagePreview = resizeImageToStrSize(bitmap, maxDataSize = 14000) - composeState.value = composeState.value.copy(preview = ComposePreview.ImagePreview(listOf(imagePreview), listOf(UploadContent.SimpleImage(uri)))) + val bitmap: Bitmap? = getBitmapFromUri(uri) + if (bitmap != null) { + val imagePreview = resizeImageToStrSize(bitmap, maxDataSize = 14000) + composeState.value = composeState.value.copy(preview = ComposePreview.ImagePreview(listOf(imagePreview), listOf(UploadContent.SimpleImage(uri)))) + } } } val cameraPermissionLauncher = rememberPermissionLauncher { isGranted: Boolean -> @@ -203,19 +204,12 @@ fun ComposeView( val content = ArrayList() val imagesPreview = ArrayList() uris.forEach { uri -> - val source = ImageDecoder.createSource(context.contentResolver, uri) - val drawable = try { - ImageDecoder.decodeDrawable(source) - } catch (e: DecodeException) { - AlertManager.shared.showAlertMsg( - title = generalGetString(R.string.image_decoding_exception_title), - text = generalGetString(R.string.image_decoding_exception_desc) - ) - Log.e(TAG, "Error while decoding drawable: ${e.stackTraceToString()}") - null - } - var bitmap: Bitmap? = if (drawable != null) ImageDecoder.decodeBitmap(source) else null - if (drawable is AnimatedImageDrawable) { + val drawable = getDrawableFromUri(uri) + var bitmap: Bitmap? = if (drawable != null) getBitmapFromUri(uri) else null + val isAnimNewApi = Build.VERSION.SDK_INT >= 28 && drawable is AnimatedImageDrawable + val isAnimOldApi = Build.VERSION.SDK_INT < 28 && + (getFileName(SimplexApp.context, uri)?.endsWith(".gif") == true || getFileName(SimplexApp.context, uri)?.endsWith(".webp") == true) + if (isAnimNewApi || isAnimOldApi) { // It's a gif or webp val fileSize = getFileSize(context, uri) if (fileSize != null && fileSize <= MAX_FILE_SIZE) { diff --git a/apps/android/app/src/main/java/chat/simplex/app/views/chat/SendMsgView.kt b/apps/android/app/src/main/java/chat/simplex/app/views/chat/SendMsgView.kt index d213296a3e..f1b3b47db5 100644 --- a/apps/android/app/src/main/java/chat/simplex/app/views/chat/SendMsgView.kt +++ b/apps/android/app/src/main/java/chat/simplex/app/views/chat/SendMsgView.kt @@ -8,10 +8,12 @@ import android.content.pm.ActivityInfo import android.content.res.Configuration import android.os.Build import android.text.InputType +import android.util.Log import android.view.ViewGroup import android.view.WindowManager import android.view.inputmethod.* import android.widget.EditText +import android.widget.TextView import androidx.compose.animation.core.* import androidx.compose.foundation.* import androidx.compose.foundation.interaction.MutableInteractionSource @@ -50,6 +52,7 @@ import chat.simplex.app.views.chat.item.ItemAction import chat.simplex.app.views.helpers.* import com.google.accompanist.permissions.rememberMultiplePermissionsState import kotlinx.coroutines.* +import java.lang.reflect.Field @Composable fun SendMsgView( @@ -240,7 +243,17 @@ private fun NativeKeyboard( editText.background = drawable editText.setPadding(paddingStart, paddingTop, paddingEnd, paddingBottom) editText.setText(cs.message) - editText.textCursorDrawable?.let { DrawableCompat.setTint(it, HighOrLowlight.toArgb()) } + if (Build.VERSION.SDK_INT >= 29) { + editText.textCursorDrawable?.let { DrawableCompat.setTint(it, HighOrLowlight.toArgb()) } + } else { + try { + val f: Field = TextView::class.java.getDeclaredField("mCursorDrawableRes") + f.isAccessible = true + f.set(editText, R.drawable.edit_text_cursor) + } catch (e: Exception) { + Log.e(chat.simplex.app.TAG, e.stackTraceToString()) + } + } editText.doOnTextChanged { text, _, _, _ -> onMessageChange(text.toString()) } editText.doAfterTextChanged { text -> if (composeState.value.preview is ComposePreview.VoicePreview && text.toString() != "") editText.setText("") } editText diff --git a/apps/android/app/src/main/java/chat/simplex/app/views/chat/item/ChatItemView.kt b/apps/android/app/src/main/java/chat/simplex/app/views/chat/item/ChatItemView.kt index dee77e4a4d..432fb728fa 100644 --- a/apps/android/app/src/main/java/chat/simplex/app/views/chat/item/ChatItemView.kt +++ b/apps/android/app/src/main/java/chat/simplex/app/views/chat/item/ChatItemView.kt @@ -1,5 +1,7 @@ package chat.simplex.app.views.chat.item +import android.Manifest +import android.os.Build import androidx.compose.foundation.combinedClickable import androidx.compose.foundation.layout.* import androidx.compose.foundation.shape.RoundedCornerShape @@ -25,6 +27,7 @@ import chat.simplex.app.ui.theme.SimpleXTheme import chat.simplex.app.views.chat.ComposeContextItem import chat.simplex.app.views.chat.ComposeState import chat.simplex.app.views.helpers.* +import com.google.accompanist.permissions.rememberPermissionState import kotlinx.datetime.Clock // TODO refactor so that FramedItemView can show all CIContent items if they're deleted (see Swift code) @@ -131,9 +134,16 @@ fun ChatItemView( if (cItem.content.msgContent is MsgContent.MCImage || cItem.content.msgContent is MsgContent.MCFile || cItem.content.msgContent is MsgContent.MCVoice) { val filePath = getLoadedFilePath(context, cItem.file) if (filePath != null) { + val writePermissionState = rememberPermissionState(permission = Manifest.permission.WRITE_EXTERNAL_STORAGE) ItemAction(stringResource(R.string.save_verb), Icons.Outlined.SaveAlt, onClick = { when (cItem.content.msgContent) { - is MsgContent.MCImage -> saveImage(context, cItem.file) + is MsgContent.MCImage -> { + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R || writePermissionState.hasPermission) { + saveImage(context, cItem.file) + } else { + writePermissionState.launchPermissionRequest() + } + } is MsgContent.MCFile -> saveFileLauncher.launch(cItem.file?.fileName) is MsgContent.MCVoice -> saveFileLauncher.launch(cItem.file?.fileName) else -> {} diff --git a/apps/android/app/src/main/java/chat/simplex/app/views/database/DatabaseView.kt b/apps/android/app/src/main/java/chat/simplex/app/views/database/DatabaseView.kt index b0e2524d17..4c9bcf6b9f 100644 --- a/apps/android/app/src/main/java/chat/simplex/app/views/database/DatabaseView.kt +++ b/apps/android/app/src/main/java/chat/simplex/app/views/database/DatabaseView.kt @@ -8,7 +8,6 @@ import SectionView import android.content.Context import android.content.res.Configuration import android.net.Uri -import android.os.FileUtils import android.util.Log import android.widget.Toast import androidx.activity.compose.ManagedActivityResultLauncher @@ -40,6 +39,7 @@ import chat.simplex.app.views.helpers.* import chat.simplex.app.views.usersettings.* import kotlinx.coroutines.* import kotlinx.datetime.* +import org.apache.commons.io.IOUtils import java.io.* import java.text.SimpleDateFormat import java.util.* @@ -620,7 +620,7 @@ private fun saveArchiveFromUri(context: Context, importedArchiveUri: Uri): Strin if (inputStream != null && archiveName != null) { val archivePath = "${context.cacheDir}/$archiveName" val destFile = File(archivePath) - FileUtils.copy(inputStream, FileOutputStream(destFile)) + IOUtils.copy(inputStream, FileOutputStream(destFile)) archivePath } else { Log.e(TAG, "saveArchiveFromUri null inputStream") diff --git a/apps/android/app/src/main/java/chat/simplex/app/views/helpers/GetImageView.kt b/apps/android/app/src/main/java/chat/simplex/app/views/helpers/GetImageView.kt index 1ccc6803af..9356ebfa65 100644 --- a/apps/android/app/src/main/java/chat/simplex/app/views/helpers/GetImageView.kt +++ b/apps/android/app/src/main/java/chat/simplex/app/views/helpers/GetImageView.kt @@ -6,7 +6,6 @@ import android.content.* import android.content.Intent.FLAG_ACTIVITY_NEW_TASK import android.content.pm.PackageManager import android.graphics.* -import android.graphics.ImageDecoder.DecodeException import android.net.Uri import android.provider.MediaStore import android.util.Base64 @@ -114,7 +113,7 @@ fun base64ToBitmap(base64ImageString: String): Bitmap { class CustomTakePicturePreview(var uri: Uri?, var tmpFile: File?): ActivityResultContract() { @CallSuper override fun createIntent(context: Context, input: Void?): Intent { - tmpFile = File.createTempFile("image", ".bmp", context.filesDir) + tmpFile = File.createTempFile("image", ".bmp", File(getAppFilesDirectory(SimplexApp.context))) // Since the class should return Uri, the file should be deleted somewhere else. And in order to be sure, delegate this to system tmpFile?.deleteOnExit() uri = FileProvider.getUriForFile(context, "${BuildConfig.APPLICATION_ID}.provider", tmpFile!!) @@ -205,17 +204,10 @@ fun GetImageBottomSheet( val context = LocalContext.current val processPickedImage = { uri: Uri? -> if (uri != null) { - val source = ImageDecoder.createSource(context.contentResolver, uri) - try { - val bitmap = ImageDecoder.decodeBitmap(source) + val bitmap = getBitmapFromUri(uri) + if (bitmap != null) { imageBitmap.value = uri onImageChange(bitmap) - } catch (e: DecodeException) { - Log.e(TAG, "Unable to decode the image: ${e.stackTraceToString()}") - AlertManager.shared.showAlertMsg( - title = generalGetString(R.string.image_decoding_exception_title), - text = generalGetString(R.string.image_decoding_exception_desc) - ) } } } diff --git a/apps/android/app/src/main/java/chat/simplex/app/views/helpers/Share.kt b/apps/android/app/src/main/java/chat/simplex/app/views/helpers/Share.kt index 4a1b8a4f82..8c05a17ecc 100644 --- a/apps/android/app/src/main/java/chat/simplex/app/views/helpers/Share.kt +++ b/apps/android/app/src/main/java/chat/simplex/app/views/helpers/Share.kt @@ -1,5 +1,6 @@ package chat.simplex.app.views.helpers +import android.Manifest import android.content.* import android.net.Uri import android.provider.MediaStore @@ -81,6 +82,7 @@ fun imageMimeType(fileName: String): String { } } +/** Before calling, make sure the user allows to write to external storage [Manifest.permission.WRITE_EXTERNAL_STORAGE] */ fun saveImage(cxt: Context, ciFile: CIFile?) { val filePath = getLoadedFilePath(cxt, ciFile) val fileName = ciFile?.fileName diff --git a/apps/android/app/src/main/java/chat/simplex/app/views/helpers/Util.kt b/apps/android/app/src/main/java/chat/simplex/app/views/helpers/Util.kt index 17a462f589..cff2b41416 100644 --- a/apps/android/app/src/main/java/chat/simplex/app/views/helpers/Util.kt +++ b/apps/android/app/src/main/java/chat/simplex/app/views/helpers/Util.kt @@ -9,6 +9,7 @@ import android.content.res.Configuration import android.content.res.Resources import android.graphics.* import android.graphics.Typeface +import android.graphics.drawable.Drawable import android.net.Uri import android.os.* import android.provider.OpenableColumns @@ -33,10 +34,12 @@ import androidx.compose.ui.unit.* import androidx.core.content.FileProvider import androidx.core.text.HtmlCompat import chat.simplex.app.* +import chat.simplex.app.R import chat.simplex.app.model.* import kotlinx.coroutines.* import kotlinx.serialization.decodeFromString import kotlinx.serialization.encodeToString +import org.apache.commons.io.IOUtils import java.io.* import java.text.SimpleDateFormat import java.util.* @@ -322,6 +325,14 @@ fun getFileName(context: Context, uri: Uri): String? { } } +fun getAppFilePath(context: Context, uri: Uri): String? { + return context.contentResolver.query(uri, null, null, null, null)?.use { cursor -> + val nameIndex = cursor.getColumnIndex(OpenableColumns.DISPLAY_NAME) + cursor.moveToFirst() + getAppFilePath(context, cursor.getString(nameIndex)) + } +} + fun getFileSize(context: Context, uri: Uri): Long? { return context.contentResolver.query(uri, null, null, null, null)?.use { cursor -> val sizeIndex = cursor.getColumnIndex(OpenableColumns.SIZE) @@ -330,9 +341,48 @@ fun getFileSize(context: Context, uri: Uri): Long? { } } +fun getBitmapFromUri(uri: Uri, withAlertOnException: Boolean = true): Bitmap? { + return if (Build.VERSION.SDK_INT >= 28) { + val source = ImageDecoder.createSource(SimplexApp.context.contentResolver, uri) + try { + ImageDecoder.decodeBitmap(source) + } catch (e: android.graphics.ImageDecoder.DecodeException) { + Log.e(TAG, "Unable to decode the image: ${e.stackTraceToString()}") + if (withAlertOnException) { + AlertManager.shared.showAlertMsg( + title = generalGetString(R.string.image_decoding_exception_title), + text = generalGetString(R.string.image_decoding_exception_desc) + ) + } + null + } + } else { + BitmapFactory.decodeFile(getAppFilePath(SimplexApp.context, uri)) + } +} + +fun getDrawableFromUri(uri: Uri, withAlertOnException: Boolean = true): Drawable? { + return if (Build.VERSION.SDK_INT >= 28) { + val source = ImageDecoder.createSource(SimplexApp.context.contentResolver, uri) + try { + ImageDecoder.decodeDrawable(source) + } catch (e: android.graphics.ImageDecoder.DecodeException) { + if (withAlertOnException) { + AlertManager.shared.showAlertMsg( + title = generalGetString(R.string.image_decoding_exception_title), + text = generalGetString(R.string.image_decoding_exception_desc) + ) + } + Log.e(TAG, "Error while decoding drawable: ${e.stackTraceToString()}") + null + } + } else { + Drawable.createFromPath(getAppFilePath(SimplexApp.context, uri)) + } +} + fun saveImage(context: Context, uri: Uri): String? { - val source = ImageDecoder.createSource(SimplexApp.context.contentResolver, uri) - val bitmap = ImageDecoder.decodeBitmap(source) + val bitmap = getBitmapFromUri(uri) ?: return null return saveImage(context, bitmap) } @@ -403,7 +453,7 @@ fun saveFileFromUri(context: Context, uri: Uri): String? { if (inputStream != null && fileToSave != null) { val destFileName = uniqueCombine(context, fileToSave) val destFile = File(getAppFilePath(context, destFileName)) - FileUtils.copy(inputStream, FileOutputStream(destFile)) + IOUtils.copy(inputStream, FileOutputStream(destFile)) destFileName } else { Log.e(chat.simplex.app.TAG, "Util.kt saveFileFromUri null inputStream") diff --git a/apps/android/app/src/main/res/drawable/edit_text_cursor.xml b/apps/android/app/src/main/res/drawable/edit_text_cursor.xml new file mode 100644 index 0000000000..683c3a4dd4 --- /dev/null +++ b/apps/android/app/src/main/res/drawable/edit_text_cursor.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/apps/android/app/src/main/res/values/colors.xml b/apps/android/app/src/main/res/values/colors.xml index 1833a6d9a3..e1a994e57f 100644 --- a/apps/android/app/src/main/res/values/colors.xml +++ b/apps/android/app/src/main/res/values/colors.xml @@ -2,5 +2,6 @@ #FF000000 #FFFFFFFF + #8b8786 #121212 \ No newline at end of file diff --git a/apps/android/build.gradle b/apps/android/build.gradle index e7be963f32..08dbb3f98d 100644 --- a/apps/android/build.gradle +++ b/apps/android/build.gradle @@ -8,6 +8,7 @@ buildscript { compose_version = localProperties['compose_version'] ?: '1.2.0-beta02' kotlin_version = localProperties['kotlin_version'] ?: '1.6.21' gradle_plugin_version = localProperties['gradle_plugin_version'] ?: '7.2.0' + abi_filter = localProperties['abi_filter'] ?: 'arm64-v8a' // Name that will be shown for debug build. By default it is from strings app_name = localProperties['app_name'] ?: "@string/app_name" diff --git a/flake.lock b/flake.lock index c628113e63..2c133a9b63 100644 --- a/flake.lock +++ b/flake.lock @@ -51,11 +51,11 @@ "cabal-34": { "flake": false, "locked": { - "lastModified": 1640353650, - "narHash": "sha256-N1t6M3/wqj90AEdRkeC8i923gQYUpzSr8b40qVOZ1Rk=", + "lastModified": 1645834128, + "narHash": "sha256-wG3d+dOt14z8+ydz4SL7pwGfe7SiimxcD/LOuPCV6xM=", "owner": "haskell", "repo": "cabal", - "rev": "942639c18c0cd8ec53e0a6f8d120091af35312cd", + "rev": "5ff598c67f53f7c4f48e31d722ba37172230c462", "type": "github" }, "original": { @@ -68,11 +68,11 @@ "cabal-36": { "flake": false, "locked": { - "lastModified": 1641652457, - "narHash": "sha256-BlFPKP4C4HRUJeAbdembX1Rms1LD380q9s0qVDeoAak=", + "lastModified": 1669081697, + "narHash": "sha256-I5or+V7LZvMxfbYgZATU4awzkicBwwok4mVoje+sGmU=", "owner": "haskell", "repo": "cabal", - "rev": "f27667f8ec360c475027dcaee0138c937477b070", + "rev": "8fd619e33d34924a94e691c5fea2c42f0fc7f144", "type": "github" }, "original": { @@ -159,15 +159,16 @@ "flake-compat": { "flake": false, "locked": { - "lastModified": 1635892615, - "narHash": "sha256-harGbMZr4hzat2BWBU+Y5OYXlu+fVz7E4WeQzHi5o8A=", + "lastModified": 1672831974, + "narHash": "sha256-z9k3MfslLjWQfnjBtEtJZdq3H7kyi2kQtUThfTgdRk0=", "owner": "input-output-hk", "repo": "flake-compat", - "rev": "eca47d3377946315596da653862d341ee5341318", + "rev": "45f2638735f8cdc40fe302742b79f248d23eb368", "type": "github" }, "original": { "owner": "input-output-hk", + "ref": "hkm/gitlab-fix", "repo": "flake-compat", "type": "github" } @@ -190,11 +191,11 @@ }, "flake-utils": { "locked": { - "lastModified": 1667395993, - "narHash": "sha256-nuEHfE/LcWyuSWnS8t12N1wc105Qtau+/OdUAjtQ0rA=", + "lastModified": 1676283394, + "narHash": "sha256-XX2f9c3iySLCw54rJ/CZs+ZK6IQy7GXNY4nSOyu2QG4=", "owner": "numtide", "repo": "flake-utils", - "rev": "5aed5285a952e0b949eb3ba02c12fa4fcfef535f", + "rev": "3db36a8b464d0c4532ba1c7dda728f4576d6d073", "type": "github" }, "original": { @@ -205,11 +206,11 @@ }, "flake-utils_2": { "locked": { - "lastModified": 1644229661, - "narHash": "sha256-1YdnJAsNy69bpcjuoKdOYQX0YxZBiCYZo4Twxerqv7k=", + "lastModified": 1667395993, + "narHash": "sha256-nuEHfE/LcWyuSWnS8t12N1wc105Qtau+/OdUAjtQ0rA=", "owner": "numtide", "repo": "flake-utils", - "rev": "3cecb5b042f7f209c56ffd8371b2711a290ec797", + "rev": "5aed5285a952e0b949eb3ba02c12fa4fcfef535f", "type": "github" }, "original": { @@ -248,21 +249,6 @@ "type": "github" } }, - "flake-utils_5": { - "locked": { - "lastModified": 1653893745, - "narHash": "sha256-0jntwV3Z8//YwuOjzhV2sgJJPt+HY6KhU7VZUL0fKZQ=", - "owner": "numtide", - "repo": "flake-utils", - "rev": "1ed9fb1935d260de5fe1c2f7ee0ebaae17ed2fa1", - "type": "github" - }, - "original": { - "owner": "numtide", - "repo": "flake-utils", - "type": "github" - } - }, "ghc-8.6.5-iohk": { "flake": false, "locked": { @@ -302,11 +288,11 @@ "hackage": { "flake": false, "locked": { - "lastModified": 1672446463, - "narHash": "sha256-N5dcK1V+BLQeri5oB0ZSk2ABPs/hTGBC7jZvcY9CVLs=", + "lastModified": 1676679913, + "narHash": "sha256-nW7ApRgiA9uChV/UrW89HK75rIToLt7XtSrkodO0Nbc=", "owner": "input-output-hk", "repo": "hackage.nix", - "rev": "7289869780da23633bc193e11d2da94ecee1489d", + "rev": "c37cffd51315d8e27dd8d3faf75abf897e39c8c8", "type": "github" }, "original": { @@ -330,6 +316,7 @@ ], "hpc-coveralls": "hpc-coveralls", "hydra": "hydra", + "iserv-proxy": "iserv-proxy", "nixpkgs": [ "nixpkgs" ], @@ -337,21 +324,23 @@ "nixpkgs-2105": "nixpkgs-2105", "nixpkgs-2111": "nixpkgs-2111", "nixpkgs-2205": "nixpkgs-2205", + "nixpkgs-2211": "nixpkgs-2211", "nixpkgs-unstable": "nixpkgs-unstable", "old-ghc-nix": "old-ghc-nix", "stackage": "stackage", "tullia": "tullia" }, "locked": { - "lastModified": 1672501055, - "narHash": "sha256-Wy6KqoYqQOP1rBvfHUvM3ex8HIdBA4kwnvZj2qQ1VLU=", - "owner": "simplex-chat", + "lastModified": 1677975916, + "narHash": "sha256-dbe8lEEPyfzjdRwpePClv7J9p9lQg7BwbBqAMCw4RLw=", + "owner": "input-output-hk", "repo": "haskell.nix", - "rev": "dc719cd6dc318923c4a524d005c13f474c00d3d3", + "rev": "ab5efd87ce3fd8ade38a01d97693d29a4f1ae7e4", "type": "github" }, "original": { - "owner": "simplex-chat", + "owner": "input-output-hk", + "ref": "armv7a", "repo": "haskell.nix", "type": "github" } @@ -383,11 +372,11 @@ ] }, "locked": { - "lastModified": 1646878427, - "narHash": "sha256-KtbrofMtN8GlM7D+n90kixr7QpSlVmdN+vK5CA/aRzc=", + "lastModified": 1671755331, + "narHash": "sha256-hXsgJj0Cy0ZiCiYdW2OdBz5WmFyOMKuw4zyxKpgUKm4=", "owner": "NixOS", "repo": "hydra", - "rev": "28b682b85b7efc5cf7974065792a1f22203a5927", + "rev": "f48f00ee6d5727ae3e488cbf9ce157460853fea8", "type": "github" }, "original": { @@ -395,6 +384,46 @@ "type": "indirect" } }, + "incl": { + "inputs": { + "nixlib": [ + "haskellNix", + "tullia", + "std", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1669263024, + "narHash": "sha256-E/+23NKtxAqYG/0ydYgxlgarKnxmDbg6rCMWnOBqn9Q=", + "owner": "divnix", + "repo": "incl", + "rev": "ce7bebaee048e4cd7ebdb4cee7885e00c4e2abca", + "type": "github" + }, + "original": { + "owner": "divnix", + "repo": "incl", + "type": "github" + } + }, + "iserv-proxy": { + "flake": false, + "locked": { + "lastModified": 1670983692, + "narHash": "sha256-avLo34JnI9HNyOuauK5R69usJm+GfW3MlyGlYxZhTgY=", + "ref": "hkm/remote-iserv", + "rev": "50d0abb3317ac439a4e7495b185a64af9b7b9300", + "revCount": 10, + "type": "git", + "url": "https://gitlab.haskell.org/hamishmack/iserv-proxy.git" + }, + "original": { + "ref": "hkm/remote-iserv", + "type": "git", + "url": "https://gitlab.haskell.org/hamishmack/iserv-proxy.git" + } + }, "lowdown-src": { "flake": false, "locked": { @@ -411,25 +440,14 @@ "type": "github" } }, - "mdbook-kroki-preprocessor": { - "flake": false, - "locked": { - "lastModified": 1661755005, - "narHash": "sha256-1TJuUzfyMycWlOQH67LR63/ll2GDZz25I3JfScy/Jnw=", - "owner": "JoelCourtney", - "repo": "mdbook-kroki-preprocessor", - "rev": "93adb5716d035829efed27f65f2f0833a7d3e76f", - "type": "github" - }, - "original": { - "owner": "JoelCourtney", - "repo": "mdbook-kroki-preprocessor", - "type": "github" - } - }, "n2c": { "inputs": { - "flake-utils": "flake-utils_5", + "flake-utils": [ + "haskellNix", + "tullia", + "std", + "flake-utils" + ], "nixpkgs": [ "haskellNix", "tullia", @@ -458,16 +476,16 @@ "nixpkgs-regression": "nixpkgs-regression" }, "locked": { - "lastModified": 1643066034, - "narHash": "sha256-xEPeMcNJVOeZtoN+d+aRwolpW8mFSEQx76HTRdlhPhg=", + "lastModified": 1661606874, + "narHash": "sha256-9+rpYzI+SmxJn+EbYxjGv68Ucp22bdFUSy/4LkHkkDQ=", "owner": "NixOS", "repo": "nix", - "rev": "a1cd7e58606a41fcf62bf8637804cf8306f17f62", + "rev": "11e45768b34fdafdcf019ddbd337afa16127ff0f", "type": "github" }, "original": { "owner": "NixOS", - "ref": "2.6.0", + "ref": "2.11.0", "repo": "nix", "type": "github" } @@ -563,17 +581,18 @@ }, "nixpkgs": { "locked": { - "lastModified": 1632864508, - "narHash": "sha256-d127FIvGR41XbVRDPVvozUPQ/uRHbHwvfyKHwEt5xFM=", + "lastModified": 1657693803, + "narHash": "sha256-G++2CJ9u0E7NNTAi9n5G8TdDmGJXcIjkJ3NF8cetQB8=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "82891b5e2c2359d7e58d08849e4c89511ab94234", + "rev": "365e1b3a859281cf11b94f87231adeabbdd878a2", "type": "github" }, "original": { - "id": "nixpkgs", - "ref": "nixos-21.05-small", - "type": "indirect" + "owner": "NixOS", + "ref": "nixos-22.05-small", + "repo": "nixpkgs", + "type": "github" } }, "nixpkgs-2003": { @@ -626,11 +645,11 @@ }, "nixpkgs-2205": { "locked": { - "lastModified": 1663981975, - "narHash": "sha256-TKaxWAVJR+a5JJauKZqibmaM5e/Pi5tBDx9s8fl/kSE=", + "lastModified": 1672580127, + "narHash": "sha256-3lW3xZslREhJogoOkjeZtlBtvFMyxHku7I/9IVehhT8=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "309faedb8338d3ae8ad8f1043b3ccf48c9cc2970", + "rev": "0874168639713f547c05947c76124f78441ea46c", "type": "github" }, "original": { @@ -640,6 +659,22 @@ "type": "github" } }, + "nixpkgs-2211": { + "locked": { + "lastModified": 1675730325, + "narHash": "sha256-uNvD7fzO5hNlltNQUAFBPlcEjNG5Gkbhl/ROiX+GZU4=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "b7ce17b1ebf600a72178f6302c77b6382d09323f", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixpkgs-22.11-darwin", + "repo": "nixpkgs", + "type": "github" + } + }, "nixpkgs-regression": { "locked": { "lastModified": 1643052045, @@ -650,18 +685,19 @@ "type": "github" }, "original": { - "id": "nixpkgs", + "owner": "NixOS", + "repo": "nixpkgs", "rev": "215d4d0fd80ca5163643b03a33fde804a29cc1e2", - "type": "indirect" + "type": "github" } }, "nixpkgs-unstable": { "locked": { - "lastModified": 1663905476, - "narHash": "sha256-0CSwRKaYravh9v6qSlBpM0gNg0UhKT2lL7Yn6Zbx7UM=", + "lastModified": 1675758091, + "narHash": "sha256-7gFSQbSVAFUHtGCNHPF7mPc5CcqDk9M2+inlVPZSneg=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "e14f9fb57315f0d4abde222364f19f88c77d2b79", + "rev": "747927516efcb5e31ba03b7ff32f61f6d47e7d87", "type": "github" }, "original": { @@ -720,20 +756,35 @@ }, "nixpkgs_5": { "locked": { - "lastModified": 1669833724, - "narHash": "sha256-/HEZNyGbnQecrgJnfE8d0WC5c1xuPSD2LUpB6YXlg4c=", - "owner": "nixos", + "lastModified": 1676726892, + "narHash": "sha256-M7OYVR6dKmzmlebIjybFf3l18S2uur8lMyWWnHQooLY=", + "owner": "angerman", "repo": "nixpkgs", - "rev": "4d2b37a84fad1091b9de401eb450aae66f1a741e", + "rev": "729469087592bdea58b360de59dadf6d58714c42", "type": "github" }, "original": { - "owner": "nixos", - "ref": "22.11", + "owner": "angerman", + "ref": "release-22.11", "repo": "nixpkgs", "type": "github" } }, + "nosys": { + "locked": { + "lastModified": 1667881534, + "narHash": "sha256-FhwJ15uPLRsvaxtt/bNuqE/ykMpNAPF0upozFKhTtXM=", + "owner": "divnix", + "repo": "nosys", + "rev": "2d0d5207f6a230e9d0f660903f8db9807b54814f", + "type": "github" + }, + "original": { + "owner": "divnix", + "repo": "nosys", + "type": "github" + } + }, "old-ghc-nix": { "flake": false, "locked": { @@ -762,11 +813,11 @@ "stackage": { "flake": false, "locked": { - "lastModified": 1669598217, - "narHash": "sha256-UioviNyxA3fexeguXLQpgMR6uWL9Q/wulipCbET3C8w=", + "lastModified": 1677888571, + "narHash": "sha256-YkhRNOaN6QVagZo1cfykYV8KqkI8/q6r2F5+jypOma4=", "owner": "input-output-hk", "repo": "stackage.nix", - "rev": "8400280d894949e26354123aebc20801a2165182", + "rev": "cb50e6fabdfb2d7e655059039012ad0623f06a27", "type": "github" }, "original": { @@ -777,17 +828,23 @@ }, "std": { "inputs": { + "arion": [ + "haskellNix", + "tullia", + "std", + "blank" + ], "blank": "blank", "devshell": "devshell", "dmerge": "dmerge", "flake-utils": "flake-utils_4", + "incl": "incl", "makes": [ "haskellNix", "tullia", "std", "blank" ], - "mdbook-kroki-preprocessor": "mdbook-kroki-preprocessor", "microvm": [ "haskellNix", "tullia", @@ -797,14 +854,15 @@ "n2c": "n2c", "nixago": "nixago", "nixpkgs": "nixpkgs_4", + "nosys": "nosys", "yants": "yants" }, "locked": { - "lastModified": 1665513321, - "narHash": "sha256-D6Pacw9yf/HMs84KYuCxHXnNDL7v43gtcka5URagFqE=", + "lastModified": 1674526466, + "narHash": "sha256-tMTaS0bqLx6VJ+K+ZT6xqsXNpzvSXJTmogkraBGzymg=", "owner": "divnix", "repo": "std", - "rev": "94a90eedb9cfc115b12ae8f6622d9904788559e4", + "rev": "516387e3d8d059b50e742a2ff1909ed3c8f82826", "type": "github" }, "original": { @@ -824,11 +882,11 @@ "std": "std" }, "locked": { - "lastModified": 1666200256, - "narHash": "sha256-cJPS8zBu30SMhxMe7I8DWutwqMuhPsEez87y9gxMKc4=", + "lastModified": 1675695930, + "narHash": "sha256-B7rEZ/DBUMlK1AcJ9ajnAPPxqXY6zW2SBX+51bZV0Ac=", "owner": "input-output-hk", "repo": "tullia", - "rev": "575362c2244498e8d2c97f72861510fa72e75d44", + "rev": "621365f2c725608f381b3ad5b57afef389fd4c31", "type": "github" }, "original": { @@ -862,11 +920,11 @@ ] }, "locked": { - "lastModified": 1660507851, - "narHash": "sha256-BKjq7JnVuUR/xDtcv6Vm9GYGKAblisXrAgybor9hT/s=", + "lastModified": 1667096281, + "narHash": "sha256-wRRec6ze0gJHmGn6m57/zhz/Kdvp9HS4Nl5fkQ+uIuA=", "owner": "divnix", "repo": "yants", - "rev": "0b895ca02a8fa72bad50b454cb3e7d8a66407c96", + "rev": "d18f356ec25cb94dc9c275870c3a7927a10f8c3c", "type": "github" }, "original": { diff --git a/flake.nix b/flake.nix index 5279db48e8..f7e86fbb6f 100644 --- a/flake.nix +++ b/flake.nix @@ -1,7 +1,7 @@ { description = "nix flake for simplex-chat"; - inputs.nixpkgs.url = "github:nixos/nixpkgs/22.11"; - inputs.haskellNix.url = "github:simplex-chat/haskell.nix"; + inputs.nixpkgs.url = "github:angerman/nixpkgs/release-22.11"; + inputs.haskellNix.url = "github:input-output-hk/haskell.nix/armv7a"; inputs.haskellNix.inputs.nixpkgs.follows = "nixpkgs"; inputs.hackage = { url = "github:input-output-hk/hackage.nix"; @@ -12,7 +12,23 @@ outputs = { self, haskellNix, nixpkgs, flake-utils, ... }: let systems = [ "x86_64-linux" "x86_64-darwin" "aarch64-linux" "aarch64-darwin" ]; in flake-utils.lib.eachSystem systems (system: - let pkgs = haskellNix.legacyPackages.${system}; in + # this android26 overlay makes the pkgsCross.{aarch64-android,armv7a-android-prebuilt} to set stdVer to 26 (Android 8). + let android26 = final: prev: { + pkgsCross = prev.pkgsCross // { + aarch64-android = import prev.path { + inherit system; + inherit (prev) overlays; + crossSystem = prev.lib.systems.examples.aarch64-android // { sdkVer = "26"; }; + }; + armv7a-android-prebuilt = import prev.path { + inherit system; + inherit (prev) overlays; + crossSystem = prev.lib.systems.examples.armv7a-android-prebuilt // { sdkVer = "26"; }; + }; + }; + }; in + # `appendOverlays` with a singleton is identical to `extend`. + let pkgs = haskellNix.legacyPackages.${system}.appendOverlays [android26]; in let drv' = { extra-modules, pkgs', ... }: pkgs'.haskell-nix.project { compiler-nix-name = "ghc8107"; index-state = "2022-06-20T00:00:00Z"; @@ -81,6 +97,7 @@ "x86_64-linux" = let androidPkgs = pkgs.pkgsCross.aarch64-android; + android32Pkgs = pkgs.pkgsCross.armv7a-android-prebuilt; # For some reason building libiconv with nixpgks android setup produces # LANGINFO_CODESET to be found, which is not compatible with android sdk 23; # so we'll patch up iconv to not include that. @@ -96,11 +113,32 @@ androidFFI = androidPkgs.libffi.overrideAttrs (old: { dontDisableStatic = true; hardeningDisable = [ "fortify" ]; - postConfigure = '' - echo "#undef HAVE_MEMFD_CREATE" >> aarch64-unknown-linux-android/fficonfig.h - ''; + }); + android32FFI = android32Pkgs.libffi.overrideAttrs (old: { + dontDisableStatic = true; + hardeningDisable = [ "fortify" ]; } );in { + "${pkgs.pkgsCross.musl64.hostPlatform.system}-static:exe:simplex-chat" = (drv pkgs.pkgsCross.musl64).simplex-chat.components.exes.simplex-chat; + "${pkgs.pkgsCross.musl32.hostPlatform.system}-static:exe:simplex-chat" = (drv pkgs.pkgsCross.musl32).simplex-chat.components.exes.simplex-chat; + # "${pkgs.pkgsCross.muslpi.hostPlatform.system}-static:exe:simplex-chat" = (drv pkgs.pkgsCross.muslpi).simplex-chat.components.exes.simplex-chat; + "${pkgs.pkgsCross.aarch64-multiplatform-musl.hostPlatform.system}-static:exe:simplex-chat" = (drv pkgs.pkgsCross.aarch64-multiplatform-musl).simplex-chat.components.exes.simplex-chat; + "armv7a-android:lib:support" = (drv android32Pkgs).android-support.components.library.override { + smallAddressSpace = true; enableShared = false; + setupBuildFlags = map (x: "--ghc-option=${x}") [ "-shared" "-o" "libsupport.so" ]; + postInstall = '' + + mkdir -p $out/_pkg + cp libsupport.so $out/_pkg + ${pkgs.patchelf}/bin/patchelf --remove-needed libunwind.so.1 $out/_pkg/libsupport.so + (cd $out/_pkg; ${pkgs.zip}/bin/zip -r -9 $out/pkg-armv7a-android-libsupport.zip *) + rm -fR $out/_pkg + + mkdir -p $out/nix-support + echo "file binary-dist \"$(echo $out/*.zip)\"" \ + > $out/nix-support/hydra-build-products + ''; + }; "aarch64-android:lib:support" = (drv androidPkgs).android-support.components.library.override { smallAddressSpace = true; enableShared = false; setupBuildFlags = map (x: "--ghc-option=${x}") [ "-shared" "-o" "libsupport.so" ]; @@ -117,6 +155,67 @@ > $out/nix-support/hydra-build-products ''; }; + "armv7a-android:lib:simplex-chat" = (drv' { + pkgs' = android32Pkgs; + extra-modules = [{ + packages.direct-sqlcipher.flags.openssl = true; + packages.direct-sqlcipher.components.library.libs = pkgs.lib.mkForce [ + (android32Pkgs.openssl.override { static = true; enableKTLS = false; }) + ]; + packages.direct-sqlcipher.patches = [ + ./scripts/nix/direct-sqlcipher-android-log.patch + ]; + }]; + }).simplex-chat.components.library.override { + smallAddressSpace = true; enableShared = false; + # for android we build a shared library, passing these arguments is a bit tricky, as + # we want only the threaded rts (HSrts_thr) and ffi to be linked, but not fed into iserv for + # template haskell cross compilation. Thus we just pass them as linker options (-optl). + setupBuildFlags = map (x: "--ghc-option=${x}") [ "-shared" "-o" "libsimplex.so" "-optl-lHSrts_thr" "-optl-lffi"]; + postInstall = '' + set -x + ${pkgs.tree}/bin/tree $out + mkdir -p $out/_pkg + # copy over includes, we might want those, but maybe not. + # cp -r $out/lib/*/*/include $out/_pkg/ + # find the libHS...ghc-X.Y.Z.a static library; this is the + # rolled up one with all dependencies included. + cp libsimplex.so $out/_pkg + # find ./dist -name "lib*.so" -exec cp {} $out/_pkg \; + # find ./dist -name "libHS*-ghc*.a" -exec cp {} $out/_pkg \; + # find ${android32FFI}/lib -name "*.a" -exec cp {} $out/_pkg \; + # find ${android32Pkgs.gmp6.override { withStatic = true; }}/lib -name "*.a" -exec cp {} $out/_pkg \; + # find ${androidIconv}/lib -name "*.a" -exec cp {} $out/_pkg \; + # find ${android32Pkgs.stdenv.cc.libc}/lib -name "*.a" -exec cp {} $out/_pkg \; + echo ${android32Pkgs.openssl.override { enableKTLS = false; }} + find ${(android32Pkgs.openssl.override { enableKTLS = false; }).out}/lib -name "*.so" -exec cp {} $out/_pkg \; + + # remove the .1 and other version suffixes from .so's. Androids linker + # doesn't play nice with them. + for lib in $out/_pkg/*.so; do + for dep in $(${pkgs.patchelf}/bin/patchelf --print-needed "$lib"); do + if [[ "''${dep##*.so}" ]]; then + echo "$lib : $dep -> ''${dep%%.so*}.so" + chmod +w "$lib" + ${pkgs.patchelf}/bin/patchelf --replace-needed "$dep" "''${dep%%.so*}.so" "$lib" + fi + done + done + + for lib in $out/_pkg/*.so; do + chmod +w "$lib" + ${pkgs.patchelf}/bin/patchelf --remove-needed libunwind.so "$lib" + [[ "$lib" != *libsimplex.so ]] && ${pkgs.patchelf}/bin/patchelf --set-soname "$(basename -a $lib)" "$lib" + done + + ${pkgs.tree}/bin/tree $out/_pkg + (cd $out/_pkg; ${pkgs.zip}/bin/zip -r -9 $out/pkg-armv7a-android-libsimplex.zip *) + rm -fR $out/_pkg + mkdir -p $out/nix-support + echo "file binary-dist \"$(echo $out/*.zip)\"" \ + > $out/nix-support/hydra-build-products + ''; + }; "aarch64-android:lib:simplex-chat" = (drv' { pkgs' = androidPkgs; extra-modules = [{ @@ -178,110 +277,6 @@ > $out/nix-support/hydra-build-products ''; }; - "x86_64-android:lib:support" = (drv androidPkgs).android-support.components.library.override { - smallAddressSpace = true; enableShared = false; - setupBuildFlags = map (x: "--ghc-option=${x}") [ "-shared" "-o" "libsupport.so" ]; - postInstall = '' - - mkdir -p $out/_pkg - cp libsupport.so $out/_pkg - ${pkgs.patchelf}/bin/patchelf --remove-needed libunwind.so.1 $out/_pkg/libsupport.so - (cd $out/_pkg; ${pkgs.zip}/bin/zip -r -9 $out/pkg-x86_64-android-libsupport.zip *) - rm -fR $out/_pkg - - mkdir -p $out/nix-support - echo "file binary-dist \"$(echo $out/*.zip)\"" \ - > $out/nix-support/hydra-build-products - ''; - }; - "x86_64-android:lib:simplex-chat" = (drv' { - pkgs' = androidPkgs; - extra-modules = [{ - packages.direct-sqlcipher.flags.openssl = true; - }]; - }).simplex-chat.components.library.override { - smallAddressSpace = true; enableShared = false; - # for android we build a shared library, passing these arguments is a bit tricky, as - # we want only the threaded rts (HSrts_thr) and ffi to be linked, but not fed into iserv for - # template haskell cross compilation. Thus we just pass them as linker options (-optl). - setupBuildFlags = map (x: "--ghc-option=${x}") [ "-shared" "-o" "libsimplex.so" "-optl-lHSrts_thr" "-optl-lffi"]; - postInstall = '' - ${pkgs.tree}/bin/tree $out - mkdir -p $out/_pkg - # copy over includes, we might want those, but maybe not. - # cp -r $out/lib/*/*/include $out/_pkg/ - # find the libHS...ghc-X.Y.Z.a static library; this is the - # rolled up one with all dependencies included. - cp libsimplex.so $out/_pkg - # find ./dist -name "lib*.so" -exec cp {} $out/_pkg \; - # find ./dist -name "libHS*-ghc*.a" -exec cp {} $out/_pkg \; - # find ${androidFFI}/lib -name "*.a" -exec cp {} $out/_pkg \; - # find ${androidPkgs.gmp6.override { withStatic = true; }}/lib -name "*.a" -exec cp {} $out/_pkg \; - # find ${androidIconv}/lib -name "*.a" -exec cp {} $out/_pkg \; - # find ${androidPkgs.stdenv.cc.libc}/lib -name "*.a" -exec cp {} $out/_pkg \; - - ${pkgs.patchelf}/bin/patchelf --remove-needed libunwind.so.1 $out/_pkg/libsimplex.so - - ${pkgs.tree}/bin/tree $out/_pkg - (cd $out/_pkg; ${pkgs.zip}/bin/zip -r -9 $out/pkg-x86_64-android-libsimplex.zip *) - rm -fR $out/_pkg - mkdir -p $out/nix-support - echo "file binary-dist \"$(echo $out/*.zip)\"" \ - > $out/nix-support/hydra-build-products - ''; - }; - "x86_64-linux:lib:support" = (drv androidPkgs).android-support.components.library.override { - smallAddressSpace = true; enableShared = false; - setupBuildFlags = map (x: "--ghc-option=${x}") [ "-shared" "-o" "libsupport.so" ]; - postInstall = '' - - mkdir -p $out/_pkg - cp libsupport.so $out/_pkg - ${pkgs.patchelf}/bin/patchelf --remove-needed libunwind.so.1 $out/_pkg/libsupport.so - (cd $out/_pkg; ${pkgs.zip}/bin/zip -r -9 $out/pkg-x86_64-linux-libsupport.zip *) - rm -fR $out/_pkg - - mkdir -p $out/nix-support - echo "file binary-dist \"$(echo $out/*.zip)\"" \ - > $out/nix-support/hydra-build-products - ''; - }; - "x86_64-linux:lib:simplex-chat" = (drv' { - pkgs' = androidPkgs; - extra-modules = [{ - packages.direct-sqlcipher.flags.openssl = true; - }]; - }).simplex-chat.components.library.override { - smallAddressSpace = true; enableShared = false; - # for android we build a shared library, passing these arguments is a bit tricky, as - # we want only the threaded rts (HSrts_thr) and ffi to be linked, but not fed into iserv for - # template haskell cross compilation. Thus we just pass them as linker options (-optl). - setupBuildFlags = map (x: "--ghc-option=${x}") [ "-shared" "-o" "libsimplex.so" "-optl-lHSrts_thr" "-optl-lffi"]; - postInstall = '' - ${pkgs.tree}/bin/tree $out - mkdir -p $out/_pkg - # copy over includes, we might want those, but maybe not. - # cp -r $out/lib/*/*/include $out/_pkg/ - # find the libHS...ghc-X.Y.Z.a static library; this is the - # rolled up one with all dependencies included. - cp libsimplex.so $out/_pkg - # find ./dist -name "lib*.so" -exec cp {} $out/_pkg \; - # find ./dist -name "libHS*-ghc*.a" -exec cp {} $out/_pkg \; - # find ${androidFFI}/lib -name "*.a" -exec cp {} $out/_pkg \; - # find ${androidPkgs.gmp6.override { withStatic = true; }}/lib -name "*.a" -exec cp {} $out/_pkg \; - # find ${androidIconv}/lib -name "*.a" -exec cp {} $out/_pkg \; - # find ${androidPkgs.stdenv.cc.libc}/lib -name "*.a" -exec cp {} $out/_pkg \; - - ${pkgs.patchelf}/bin/patchelf --remove-needed libunwind.so.1 $out/_pkg/libsimplex.so - - ${pkgs.tree}/bin/tree $out/_pkg - (cd $out/_pkg; ${pkgs.zip}/bin/zip -r -9 $out/pkg-x86_64-linux-libsimplex.zip *) - rm -fR $out/_pkg - mkdir -p $out/nix-support - echo "file binary-dist \"$(echo $out/*.zip)\"" \ - > $out/nix-support/hydra-build-products - ''; - }; }; # builds for iOS and iOS simulator diff --git a/scripts/android/build-android.sh b/scripts/android/build-android.sh index 9928a07366..6ff2f6e446 100755 --- a/scripts/android/build-android.sh +++ b/scripts/android/build-android.sh @@ -12,9 +12,9 @@ nix_install() { [ ! -d /nix ] && sudo sh -c "mkdir -p /nix && chown -R $u /nix" # Install nix - nix_ver="nix-2.11.1" + nix_ver="nix-2.14.1" nix_url="https://releases.nixos.org/nix/$nix_ver/install" - nix_hash="4569a01dc5f62056f29f3195673bc3242fc70bf2474927fb5d8549c4d997402d" + nix_hash="565974057264f0536f600c68d59395927cd73e9fc5a60f33c1906e8f7bc33fcf" curl -sSf "$nix_url" -o "$tmp/nix-install" printf "%s %s" "$nix_hash" "$tmp/nix-install" | sha256sum -c @@ -29,11 +29,16 @@ nix_setup() { } git_setup() { + [ "$folder" != "." ] && { + git clone --depth=1 https://github.com/simplex-chat/simplex-chat "$folder" + } + # Switch to nix-android branch git -C "$folder" checkout "$commit" # Create missing folders mkdir -p "$folder/apps/android/app/src/main/cpp/libs/arm64-v8a" + mkdir -p "$folder/apps/android/app/src/main/cpp/libs/armeabi-v7a" } checks() { @@ -55,10 +60,6 @@ checks() { esac done - [ "$folder" != "." ] && { - git clone https://github.com/simplex-chat/simplex-chat "$folder" - } - if [ -n "$commands_failed" ]; then commands_failed=${commands_failed% *} printf "%s is not found in your \$PATH. Please install them and re-run the script.\n" "$commands_failed" @@ -72,21 +73,31 @@ build() { # Build simplex lib nix build "$folder#hydraJobs.aarch64-android:lib:simplex-chat.x86_64-linux" unzip -o "$PWD/result/pkg-aarch64-android-libsimplex.zip" -d "$folder/apps/android/app/src/main/cpp/libs/arm64-v8a" + + nix build "$folder#hydraJobs.armv7a-android:lib:simplex-chat.x86_64-linux" + unzip -o "$PWD/result/pkg-armv7a-android-libsimplex.zip" -d "$folder/apps/android/app/src/main/cpp/libs/armeabi-v7a" # Build android suppprt lib nix build "$folder#hydraJobs.aarch64-android:lib:support.x86_64-linux" unzip -o "$PWD/result/pkg-aarch64-android-libsupport.zip" -d "$folder/apps/android/app/src/main/cpp/libs/arm64-v8a" + nix build "$folder#hydraJobs.armv7a-android:lib:support.x86_64-linux" + unzip -o "$PWD/result/pkg-armv7a-android-libsupport.zip" -d "$folder/apps/android/app/src/main/cpp/libs/armeabi-v7a" + sed -i.bak 's/${extract_native_libs}/true/' "$folder/apps/android/app/src/main/AndroidManifest.xml" + sed -i.bak '/android {/a lint {abortOnError false}' "$folder/apps/android/app/build.gradle" gradle -p "$folder/apps/android/" clean build assembleRelease - mkdir -p "$tmp/android" - unzip -oqd "$tmp/android/" "$folder/apps/android/app/build/outputs/apk/release/app-release-unsigned.apk" + mkdir -p "$tmp/android-aarch64" + unzip -oqd "$tmp/android-aarch64/" "$folder/apps/android/app/build/outputs/apk/release/app-arm64-v8a-release-unsigned.apk" + (cd "$tmp/android-aarch64" && zip -rq5 "$tmp/simplex-chat-aarch64.apk" . && zip -rq0 "$tmp/simplex-chat-aarch64.apk" resources.arsc res) + zipalign -p -f 4 "$tmp/simplex-chat-aarch64.apk" "$PWD/simplex-chat-aarch64.apk" - (cd "$tmp/android" && zip -rq5 "$tmp/simplex-chat.apk" . && zip -rq0 "$tmp/simplex-chat.apk" resources.arsc res) - - zipalign -p -f 4 "$tmp/simplex-chat.apk" "$PWD/simplex-chat.apk" + mkdir -p "$tmp/android-armv7" + unzip -oqd "$tmp/android-armv7/" "$folder/apps/android/app/build/outputs/apk/release/app-armeabi-v7a-release-unsigned.apk" + (cd "$tmp/android-armv7" && zip -rq5 "$tmp/simplex-chat-armv7.apk" . && zip -rq0 "$tmp/simplex-chat-armv7.apk" resources.arsc res) + zipalign -p -f 4 "$tmp/simplex-chat-armv7.apk" "$PWD/simplex-chat-armv7.apk" } final() { diff --git a/scripts/android/compress-and-sign-apk.sh b/scripts/android/compress-and-sign-apk.sh index 1bc904af01..694dcade8d 100755 --- a/scripts/android/compress-and-sign-apk.sh +++ b/scripts/android/compress-and-sign-apk.sh @@ -18,29 +18,31 @@ fi cd $apk_parent_dir -ORIG_NAME=$(echo app*.apk) -unzip -o -q -d apk $ORIG_NAME +ORIG_NAMES=( $(echo app*.apk) ) +for ORIG_NAME in "${ORIG_NAMES[@]}"; do + unzip -o -q -d apk $ORIG_NAME -rm $ORIG_NAME + rm $ORIG_NAME -(cd apk && zip -r -q -$level ../$ORIG_NAME .) -# Shouldn't be compressed because of Android requirement -(cd apk && zip -r -q -0 ../$ORIG_NAME resources.arsc) -(cd apk && zip -r -q -0 ../$ORIG_NAME res) -#(cd apk && 7z a -r -mx=$level -tzip -x!resources.arsc ../$ORIG_NAME .) -#(cd apk && 7z a -r -mx=0 -tzip ../$ORIG_NAME resources.arsc) + (cd apk && zip -r -q -$level ../$ORIG_NAME .) + # Shouldn't be compressed because of Android requirement + (cd apk && zip -r -q -0 ../$ORIG_NAME resources.arsc) + (cd apk && zip -r -q -0 ../$ORIG_NAME res) + #(cd apk && 7z a -r -mx=$level -tzip -x!resources.arsc ../$ORIG_NAME .) + #(cd apk && 7z a -r -mx=0 -tzip ../$ORIG_NAME resources.arsc) -ALL_TOOLS=($sdk_dir/build-tools/*/) -BIN_DIR="${ALL_TOOLS[1]}" + ALL_TOOLS=($sdk_dir/build-tools/*/) + BIN_DIR="${ALL_TOOLS[1]}" -$BIN_DIR/zipalign -p -f 4 $ORIG_NAME $ORIG_NAME-2 + $BIN_DIR/zipalign -p -f 4 $ORIG_NAME $ORIG_NAME-2 -mv $ORIG_NAME{-2,} + mv $ORIG_NAME{-2,} -$BIN_DIR/apksigner sign \ - --ks "$store_file" --ks-key-alias "$key_alias" --ks-pass "pass:$store_password" \ - --key-pass "pass:$key_password" $ORIG_NAME + $BIN_DIR/apksigner sign \ + --ks "$store_file" --ks-key-alias "$key_alias" --ks-pass "pass:$store_password" \ + --key-pass "pass:$key_password" $ORIG_NAME -# cleanup -rm -rf apk || true -rm ${ORIG_NAME}.idsig 2> /dev/null || true + # cleanup + rm -rf apk || true + rm ${ORIG_NAME}.idsig 2> /dev/null || true +done \ No newline at end of file diff --git a/scripts/android/download-libs.sh b/scripts/android/download-libs.sh new file mode 100755 index 0000000000..dd1b1fb2d1 --- /dev/null +++ b/scripts/android/download-libs.sh @@ -0,0 +1,49 @@ +#!/bin/bash + +set -e + +function readlink() { + echo "$(cd "$(dirname "$1")"; pwd -P)" +} + +if [ -z "${1}" ]; then + echo "Job repo is unset. Provide it via first argument like: $(readlink "$0")/download_libs.sh https://something.com/job/something/{master,stable}" + exit 1 +fi + +job_repo=$1 +default_arch=$2 + +arches=("aarch64" "armv7a") +output_arches=("arm64-v8a" "armeabi-v7a") + +if [ -z "${default_arch}" ]; then + # No custom architectures were specified, using defaults + echo "Libs for all supported architectures will be downloaded. To use single arch, pass one of the following values to the end of command: ${arches[*]}" +else + for ((i = 0 ; i < ${#output_arches[@]}; i++)); do + if [ "${arches[$i]}" == "$default_arch" ]; then + output_arches=("${output_arches[$i]}") + fi + done + arches=("$default_arch") +fi + +root_dir="$(dirname "$(dirname "$(readlink "$0")")")" +for ((i = 0 ; i < ${#arches[@]}; i++)); do + arch="${arches[$i]}" + output_arch="${output_arches[$i]}" + output_dir="$root_dir/apps/android/app/src/main/cpp/libs/$output_arch/" + + mkdir -p "$output_dir" 2> /dev/null + + curl --location -o libsupport.zip $job_repo/$arch-android:lib:support.x86_64-linux/latest/download/1 && \ + unzip -o libsupport.zip && \ + mv libsupport.so "$output_dir" && \ + rm libsupport.zip + + curl --location -o libsimplex.zip "$job_repo"/"$arch"-android:lib:simplex-chat.x86_64-linux/latest/download/1 && \ + unzip -o libsimplex.zip && \ + mv libsimplex.so "$output_dir" && \ + rm libsimplex.zip +done diff --git a/scripts/android/download_libs_aarch64.sh b/scripts/android/download_libs_aarch64.sh deleted file mode 100755 index d54a6fd23d..0000000000 --- a/scripts/android/download_libs_aarch64.sh +++ /dev/null @@ -1,33 +0,0 @@ -#!/bin/bash - -set -e - -function readlink() { - echo $(cd $(dirname $1); pwd -P) -} - -if [ -z ${1} ]; then - echo "Job repo is unset. Provide it via first argument like: $(readlink $0)/download_libs_aarch64.sh https://something.com/job/something/{master,stable}" - exit 1 -fi - -job_repo=$1 -arch="aarch64" -#arch="x86_64" -output_arch="arm64-v8a" -#output_arch="x86_64" - -root_dir="$(dirname $(dirname $(readlink $0)))" -output_dir="$root_dir/apps/android/app/src/main/cpp/libs/$output_arch/" - -mkdir -p "$output_dir" 2> /dev/null - -curl --location -o libsupport.zip $job_repo/$arch-android:lib:support.x86_64-linux/latest/download/1 && \ -unzip -o libsupport.zip && \ -mv libsupport.so "$output_dir" && \ -rm libsupport.zip - -curl --location -o libsimplex.zip $job_repo/$arch-android:lib:simplex-chat.x86_64-linux/latest/download/1 && \ -unzip -o libsimplex.zip && \ -mv libsimplex.so "$output_dir" && \ -rm libsimplex.zip diff --git a/scripts/android/prepare.sh b/scripts/android/prepare.sh index 5fbe70aa6b..4947d0c2b3 100755 --- a/scripts/android/prepare.sh +++ b/scripts/android/prepare.sh @@ -1,8 +1,12 @@ #!/bin/sh -# libsimplex.so and libsupport.so binaries should be in ~/Downloads folder +# libsimplex.so and libsupport.so binaries should be in ~/Downloads folder in their directories based on archive name mkdir -p ./apps/android/app/src/main/cpp/libs/arm64-v8a/ rm ./apps/android/app/src/main/cpp/libs/arm64-v8a/* -cp ~/Downloads/libsupport.so ./apps/android/app/src/main/cpp/libs/arm64-v8a/ -cp ~/Downloads/pkg-aarch64-android-libsimplex/libsimplex.so ./apps/android/app/src/main/cpp/libs/arm64-v8a/ -cp ~/Downloads/pkg-aarch64-android-libsimplex/libcrypto.so ./apps/android/app/src/main/cpp/libs/arm64-v8a/ +unzip -o ~/Downloads/pkg-aarch64-android-libsupport.zip -d ./apps/android/app/src/main/cpp/libs/arm64-v8a +unzip -o ~/Downloads/pkg-aarch64-android-libsimplex.zip -d ./apps/android/app/src/main/cpp/libs/arm64-v8a/ + +mkdir -p ./apps/android/app/src/main/cpp/libs/armeabi-v7a/ +rm ./apps/android/app/src/main/cpp/libs/armeabi-v7a/* +unzip -o ~/Downloads/pkg-armv7a-android-libsupport.zip -d ./apps/android/app/src/main/cpp/libs/armeabi-v7a/ +unzip -o ~/Downloads/pkg-armv7a-android-libsimplex.zip -d ./apps/android/app/src/main/cpp/libs/armeabi-v7a/ diff --git a/scripts/ios/download-libs.sh b/scripts/ios/download-libs.sh new file mode 100755 index 0000000000..9d7e388870 --- /dev/null +++ b/scripts/ios/download-libs.sh @@ -0,0 +1,41 @@ +#!/bin/bash + +set -e + +function readlink() { + echo "$(cd "$(dirname "$1")"; pwd -P)" +} + +if [ -z "${1}" ]; then + echo "Job repo is unset. Provide it via first argument like: $(readlink "$0")/download_libs.sh https://something.com/job/something/{master,stable}" + exit 1 +fi + +job_repo=$1 +default_arch=$2 + +arches=("aarch64" "x86_64") +output_arches=("aarch64" "x86_64") + +if [ -z "${default_arch}" ]; then + # No custom architectures were specified, using defaults + echo "Libs for all supported architectures will be downloaded. To use single arch, pass one of the following values to the end of command: ${arches[*]}" +else + for ((i = 0 ; i < ${#output_arches[@]}; i++)); do + if [ "${arches[$i]}" == "$default_arch" ]; then + output_arches=("${output_arches[$i]}") + fi + done + arches=("$default_arch") +fi + +root_dir="$(dirname "$(dirname "$(readlink "$0")")")" +for ((i = 0 ; i < ${#arches[@]}; i++)); do + arch="${arches[$i]}" + output_arch="${output_arches[$i]}" + output_dir="$HOME/Downloads" + + curl --location -o "$output_dir"/pkg-ios-"$arch"-swift-json.zip "$job_repo"/"$arch"-darwin-ios:lib:simplex-chat."$arch"-darwin/latest/download/1 && \ + unzip -o "$output_dir"/pkg-ios-"$output_arch"-swift-json.zip -d ~/Downloads/pkg-ios-"$output_arch"-swift-json +done +sh "$root_dir"/scripts/ios/prepare-x86_64.sh diff --git a/scripts/ios/download_libs.sh b/scripts/ios/download_libs.sh deleted file mode 100755 index b6d253a9c4..0000000000 --- a/scripts/ios/download_libs.sh +++ /dev/null @@ -1,24 +0,0 @@ -#!/bin/bash - -set -e - -function readlink() { - echo $(cd $(dirname $1); pwd -P) -} - -if [ -z ${1} ]; then - echo "Job repo is unset. Provide it via first argument like: $(readlink $0)/download_libs_aarch64.sh https://something.com/job/something/{master,stable}" - exit 1 -fi - -job_repo=$1 - -root_dir="$(dirname $(dirname $(readlink $0)))" - -curl --location -o ~/Downloads/pkg-ios-aarch64-swift-json.zip $job_repo/aarch64-darwin-ios:lib:simplex-chat.aarch64-darwin/latest/download/1 && \ -unzip -o ~/Downloads/pkg-ios-aarch64-swift-json.zip -d ~/Downloads/pkg-ios-aarch64-swift-json - -curl --location -o ~/Downloads/pkg-ios-x86_64-swift-json.zip $job_repo/x86_64-darwin-ios:lib:simplex-chat.x86_64-darwin/latest/download/1 && \ -unzip -o ~/Downloads/pkg-ios-x86_64-swift-json.zip -d ~/Downloads/pkg-ios-x86_64-swift-json - -sh $root_dir/scripts/ios/prepare-x86_64.sh From e34495822420f832b5659525a4af768708962e48 Mon Sep 17 00:00:00 2001 From: Evgeny Poberezkin <2769109+epoberezkin@users.noreply.github.com> Date: Mon, 27 Mar 2023 12:23:23 +0100 Subject: [PATCH 14/19] blog: v4.6 announcement (#2078) * blog: v4.6 announcement * update post * corrections Co-authored-by: spaced4ndy <8711996+spaced4ndy@users.noreply.github.com> --------- Co-authored-by: spaced4ndy <8711996+spaced4ndy@users.noreply.github.com> --- ...30328-simplex-chat-v4-6-hidden-profiles.md | 124 ++++++++++++++++++ blog/images/20230328-call1.png | Bin 0 -> 173291 bytes blog/images/20230328-call2.png | Bin 0 -> 246899 bytes blog/images/20230328-hidden-profiles1.png | Bin 0 -> 117146 bytes blog/images/20230328-hidden-profiles2.png | Bin 0 -> 127483 bytes blog/images/20230328-hidden-profiles3.png | Bin 0 -> 111513 bytes .../src/_includes/blog_previews/20230328.html | 12 ++ website/src/blog.html | 2 + 8 files changed, 138 insertions(+) create mode 100644 blog/20230328-simplex-chat-v4-6-hidden-profiles.md create mode 100644 blog/images/20230328-call1.png create mode 100644 blog/images/20230328-call2.png create mode 100644 blog/images/20230328-hidden-profiles1.png create mode 100644 blog/images/20230328-hidden-profiles2.png create mode 100644 blog/images/20230328-hidden-profiles3.png create mode 100644 website/src/_includes/blog_previews/20230328.html diff --git a/blog/20230328-simplex-chat-v4-6-hidden-profiles.md b/blog/20230328-simplex-chat-v4-6-hidden-profiles.md new file mode 100644 index 0000000000..839b1ef2f7 --- /dev/null +++ b/blog/20230328-simplex-chat-v4-6-hidden-profiles.md @@ -0,0 +1,124 @@ +--- +layout: layouts/article.html +title: "SimpleX Chat v4.6 – with hidden profiles, community moderation, improved audio/video calls and reduced battery usage." +date: 2023-03-28 +image: images/20230328-hidden-profiles2.png +imageBottom: true +previewBody: blog_previews/20230328.html +permalink: "/blog/20230328-simplex-chat-v4-6-hidden-profiles.html" +--- + +# SimpleX Chat v4.6 – with hidden profiles, community moderation, improved audio/video calls and reduced battery usage. + +**Published:** Mar 28, 2023 + +## What's new in v4.6 + +- [ARMv7a and Android 8+ support](#armv7a-32-bit-and-android-8-support) +- [hidden chat profiles](#hidden-chat-profiles) +- [community moderation](#community-moderation) +- [improved audio/video calls](#improved-audiovideo-calls) +- [reduced battery usage](#reduced-battery-usage). +- [SMP server monitoring: status bot and page](#smp-server-monitoring) + +Also, we added [Chinese and Spanish interface languages](#chinese-and-spanish-interface---you-can-choose-the-language-via-the-app), thanks to the users' community and Weblate! + +### ARMv7a (32 bit) and Android 8+ support! + +It increases the number of supported Android devices twice - now most of your friends should be able to install SimpleX Chat. SimpleX Chat still doesn't support Android 7 and erlier versions. + +If you install the app from GitHub or F-Droid you need to choose the correct APK, Play Store will provide it automatically. + +### Hidden chat profiles + +       + +For a long time the main way to protect SimpleX Chat app from people who have access to your phone was device authentication - it is requested when you open the app (and some of its sensitive functions). + +Many users asked to allow setting the app password or PIN independently from the device PIN, as some other apps do. But it did not seem a good enough solution - if somebody has your device PIN, then in most cases they can also ask you to provide the app PIN as well. + +So instead of having an app password, that reduces convenience and doesn't improve security too much, we did what we think could be better. You can now create hidden chat profiles, that are not visible anywhere in the app, and do not show any notifications, until you enter a correct passphrase. If multiple profiles are hidden with the same passphrase they will all show in the list when you enter it. + +It's important to remember that these hidden profiles are still stored locally on your device, so if somebody has access to your chat database (they need to know database passphrase, that is independent from device PIN or profile passphrases) or to chat console in the app, they will be able to access these profiles data and reset their passwords. We are considering how chat console can be better protected - e.g., by requiring a separate password or by providing an option to remove it from the UI permanently - tell us what you think. + +### Community moderation + +Initially we did not design SimpleX Chat to support communities - our focus has always been maximum privacy and security. + +SimpleX Chat supports small and fully decentralized groups, that are not hosted anywhere. But many users want to participate in and to discover communities. Since we added support for group links, the groups we created to let users test the app started to grow, and many other communities of over 100 people emerged. + +We are already observing some less-than-friendly messages and undesirable content that is not welcome in some communities. So this version adds features allowing to moderate groups. + +Firstly, group admins and owners can revoke members rights to send messages to the group by assigning members an "observer" role, and also make this role default for users joining via a group link. + +Secondly, group admins can now delete messages sent by other members (excluding the messages sent by the group owners). "Moderate" action in the message menu will either mark the message as deleted or delete it irreversibly for all members, as set in group preferences by the owners. + +These features will allow group owners to decide their own rules. More robust moderation tools are coming later when we build support for large communities. + +### Improved audio/video calls + + + +Prior to this version audio and video calls in iOS app were very limited – they only worked while the app was in foreground. This version fully re-implemented audio/video calls in iOS – it now uses native WebRTC library instead of web view. These calls are still end-to-end encrypted, and compatible with the calls in the previous versions of the app, both on iOS and on Android platforms. + +Where allowed by App Store policy, the calls on iOS now use Apple's native interface for calls CallKit, that allows to accept calls from the lock screen, prevents call interruption by incoming phone calls and optionally allows to include calls in the phone call history - the last option needs to be enabled separately. + +Calls on Android were also improved – they now support bluetooth headphones, allow changing volume in video calls and support proximity sensor during the audio call, to prevent accidental interruption when you hold the phone close to your ear. + +### Reduced battery usage + +We know that battery usage of SimpleX Chat is suboptimal, and we are committed to reduce it. Unfortunately, there is no simple change that we could make to solve this problem, it requires many systematic improvements and fixes. + +One of the big issues, particularly in large groups, was inefficient retry strategy for sending messages in cases when the receiving message queue (mailbox) was out of capacity. + +This version increases the maximum retry period for "out-of-capacity" scenario to 1 hour, and also preserves this retry period in the database. So, if previously before the message expired in 48 hours there were up to ~2800 delivery attempts and up to ~45Mb wasted traffic per recipient (depending on how frequently the app was restarted), now there will be only ~50 retries, resulting in not more than 0.8Mb of traffic - up to 56x traffic reduction when sending messages to the large groups. + +This issue might not have affected you at all, and also solving it won't reduce overall traffic/battery usage by that factor - there are other inefficiences we will be addressing. But if you actively sent messages to large groups you should observe a substantial reduction of battery and traffic consumption. + +Please share your experience. If the battery usage is still suboptimal, please share your usage statistics - they can be requested in chat console with `/get stats` command - it will return the aggregated number of network operations, per server, since the app was started. Please note that these statistics include the addresses of the servers you connect to, so if you want to keep them private, please redact them. You can also reset usage statistics with `/reset stats` command. + +### SMP server monitoring + +If you use preset servers in SimpleX Chat you can now see when we do any maintenance or when the server is down either by [connecting to status bot via the app](https://simplex.chat/contact#/?v=1-2&smp=smp%3A%2F%2Fu2dS9sG8nMNURyZwqASV4yROM28Er0luVTx5X1CsMrU%3D%40smp4.simplex.im%2FShQuD-rPokbDvkyotKx5NwM8P3oUXHxA%23%2F%3Fv%3D1-2%26dh%3DMCowBQYDK2VuAyEA6fSx1k9zrOmF0BJpCaTarZvnZpMTAVQhd3RkDQ35KT0%253D%26srv%3Do5vmywmrnaxalvz6wi3zicyftgio6psuvyniis6gco6bp6ekl4cqj4id.onion) or by visiting a [status page](https://status.simplex.chat). Status bot always sends automatic messages before the server is restarted for maintenance, but in case of downtime if the same server is down that you use to receive the messages from the bot, you may miss them - check the status page in this case. + +### Chinese and Spanish interface - you can choose the language via the app! + +Thanks to our users' community and to Weblate providing a free hosting plan for SimpleX Chat translations we can now support more languages in the interface – this version adds Chinese and Spanish and more are in progress. + +You can [contribute the translation](https://github.com/simplex-chat/simplex-chat/tree/stable#translate-the-apps) of the apps to your language too! + +The app now supports 8 languages in addition to English - Czech, German, Spanish, French, Italian, Dutch, Russian and Chinese. You can now choose the language via the app settings (Appearance page), independently from the system settings. + +## SimpleX platform + +Some links to answer the most common questions: + +[SimpleX Chat security assessment](./20221108-simplex-chat-v4.2-security-audit-new-website.md). + +[How can SimpleX deliver messages without user identifiers](https://simplex.chat/#how-simplex-works). + +[What are the risks to have identifiers assigned to the users](https://simplex.chat/#why-ids-bad-for-privacy). + +[Technical details and limitations](https://github.com/simplex-chat/simplex-chat#privacy-technical-details-and-limitations). + +[How SimpleX is different from Session, Matrix, Signal, etc.](https://github.com/simplex-chat/simplex-chat/blob/stable/README.md#frequently-asked-questions). + +Visit our [website](https://simplex.chat) to learn more. + +## Help us with donations + +Huge thank you to everybody who donated to SimpleX Chat! + +We are prioritizing users privacy and security - it would be impossible without your support. + +Our pledge to our users is that SimpleX protocols are and will remain open, and in public domain, - so anybody can build the future implementations of the clients and the servers. We are building SimpleX platform based on the same principles as email and web, but much more private and secure. + +Your donations help us raise more funds – any amount, even the price of the cup of coffee, makes a big difference for us. + +See [this section](https://github.com/simplex-chat/simplex-chat/tree/master#help-us-with-donations) for the ways to donate. + +Thank you, + +Evgeny + +SimpleX Chat founder diff --git a/blog/images/20230328-call1.png b/blog/images/20230328-call1.png new file mode 100644 index 0000000000000000000000000000000000000000..51a6fcd174860655d5539ac4e23d9e19faed9f3f GIT binary patch literal 173291 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�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

Vu&1eqSh8b2 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 j!SU?6& literal 0 HcmV?d00001 diff --git a/blog/images/20230328-call2.png b/blog/images/20230328-call2.png new file mode 100644 index 0000000000000000000000000000000000000000..ef2fef9791b11f2ef2e71c72571d42def7380955 GIT binary patch literal 246899 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


- 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®+U1E_B&2GtY8bYxFk^AHet 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�WFDutBnxhBQ(tMm=TGJSRnK$%TS$;}U6FY1B7| zld~u~@7aB^S^@GIK{YB0XoX&uDpKuZ8de;4YRf~Igw)HVWqCAT!=Im#ae2Ud8>!m@ z4!kf{<`A|eiS{JY`&b@sCwAamE)_VjkCT^48M#fjwUHKd1OSZSxIH-;4~b0gEy=_7 z89J1Wpp3&`_C`#SjNJXM3-3k5R@AKX6)qEyqU@sJ94Cz*8c@uB9(#>FWS`;@@~WUT z7GC9OaFdY147!YsShcset2=H9GAB+Ikm}#3EXXlNG=&`(i+RKa&osdq{4VevnA=wS z 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 n|DXTer}_W!Z8&COF)=Rd_3+k+ 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
fBOMkjx1=g@70=DL*wSs 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

xFB8TY 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 c4t@8Fj=4rW;8_nV@f7)WTkVc&1v4.6 is released:

+ +
    +
  • ARMv7a and Android 8+ - 2x more supported devices!
  • +
  • hidden chat profiles
  • +
  • community moderation
  • +
  • improved audio/video calls
  • +
  • reduced battery usage
  • +
  • SMP server monitoring: status bot and page
  • +
+ +

Also, the app interface is now available in Chinese and Spanish - thanks our users!

diff --git a/website/src/blog.html b/website/src/blog.html index d0394e996c..1cd8d9952a 100644 --- a/website/src/blog.html +++ b/website/src/blog.html @@ -38,6 +38,7 @@ active_blog: true

Latest news

{% for blog in collections.blogs %} + {% if not(blog.data.draft) %}
+ {% endif %} {% endfor %} \ No newline at end of file From 450bfe2e17393a71178d95b9981c6b8f3f5321ec Mon Sep 17 00:00:00 2001 From: Stanislav Dmitrenko <7953703+avently@users.noreply.github.com> Date: Mon, 27 Mar 2023 17:11:17 +0300 Subject: [PATCH 15/19] android: small layout change in moderated item (#2083) --- .../chat/simplex/app/views/chat/item/MarkedDeletedItemView.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/android/app/src/main/java/chat/simplex/app/views/chat/item/MarkedDeletedItemView.kt b/apps/android/app/src/main/java/chat/simplex/app/views/chat/item/MarkedDeletedItemView.kt index 47bb33bffc..a63a232939 100644 --- a/apps/android/app/src/main/java/chat/simplex/app/views/chat/item/MarkedDeletedItemView.kt +++ b/apps/android/app/src/main/java/chat/simplex/app/views/chat/item/MarkedDeletedItemView.kt @@ -30,7 +30,7 @@ fun MarkedDeletedItemView(ci: ChatItem, timedMessagesTTL: Int?, showMember: Bool Modifier.padding(horizontal = 12.dp, vertical = 6.dp), verticalAlignment = Alignment.CenterVertically ) { - Box(Modifier.fillMaxWidth().weight(1f)) { + Box(Modifier.weight(1f, false)) { if (ci.meta.itemDeleted is CIDeleted.Moderated) { MarkedDeletedText(String.format(generalGetString(R.string.moderated_item_description), ci.meta.itemDeleted.byGroupMember.chatViewName)) } else { From 9df78c8ac806ccb57eff89a8ceebca1e8272465c Mon Sep 17 00:00:00 2001 From: Evgeny Poberezkin <2769109+epoberezkin@users.noreply.github.com> Date: Mon, 27 Mar 2023 15:35:01 +0100 Subject: [PATCH 16/19] core: fix video message JSON encoding (#2082) --- src/Simplex/Chat/Protocol.hs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Simplex/Chat/Protocol.hs b/src/Simplex/Chat/Protocol.hs index 52eb876d6b..4e686d2e80 100644 --- a/src/Simplex/Chat/Protocol.hs +++ b/src/Simplex/Chat/Protocol.hs @@ -445,7 +445,7 @@ instance ToJSON MsgContent where MCText t -> J.object ["type" .= MCText_, "text" .= t] MCLink {text, preview} -> J.object ["type" .= MCLink_, "text" .= text, "preview" .= preview] MCImage {text, image} -> J.object ["type" .= MCImage_, "text" .= text, "image" .= image] - MCVideo {text, image, duration} -> J.object ["type" .= MCImage_, "text" .= text, "image" .= image, "duration" .= duration] + MCVideo {text, image, duration} -> J.object ["type" .= MCVideo_, "text" .= text, "image" .= image, "duration" .= duration] MCVoice {text, duration} -> J.object ["type" .= MCVoice_, "text" .= text, "duration" .= duration] MCFile t -> J.object ["type" .= MCFile_, "text" .= t] toEncoding = \case @@ -453,7 +453,7 @@ instance ToJSON MsgContent where MCText t -> J.pairs $ "type" .= MCText_ <> "text" .= t MCLink {text, preview} -> J.pairs $ "type" .= MCLink_ <> "text" .= text <> "preview" .= preview MCImage {text, image} -> J.pairs $ "type" .= MCImage_ <> "text" .= text <> "image" .= image - MCVideo {text, image, duration} -> J.pairs $ "type" .= MCImage_ <> "text" .= text <> "image" .= image <> "duration" .= duration + MCVideo {text, image, duration} -> J.pairs $ "type" .= MCVideo_ <> "text" .= text <> "image" .= image <> "duration" .= duration MCVoice {text, duration} -> J.pairs $ "type" .= MCVoice_ <> "text" .= text <> "duration" .= duration MCFile t -> J.pairs $ "type" .= MCFile_ <> "text" .= t From 48b4b23204972216d270725fd23e7706009da1bf Mon Sep 17 00:00:00 2001 From: Stanislav Dmitrenko <7953703+avently@users.noreply.github.com> Date: Mon, 27 Mar 2023 17:35:35 +0300 Subject: [PATCH 17/19] android: make lint happy (#2081) --- apps/android/app/src/main/res/values-cs/strings.xml | 3 +-- apps/android/app/src/main/res/values-de/strings.xml | 3 +-- apps/android/app/src/main/res/values-es/strings.xml | 3 +-- apps/android/app/src/main/res/values-fr/strings.xml | 3 +-- apps/android/app/src/main/res/values-it/strings.xml | 3 +-- apps/android/app/src/main/res/values-ja/strings.xml | 3 +-- apps/android/app/src/main/res/values-nl/strings.xml | 3 +-- apps/android/app/src/main/res/values-ru/strings.xml | 3 +-- apps/android/app/src/main/res/values-zh-rCN/strings.xml | 3 +-- apps/android/app/src/main/res/values-zh-rTW/strings.xml | 3 +-- apps/android/app/src/main/res/values/strings.xml | 2 +- 11 files changed, 11 insertions(+), 21 deletions(-) diff --git a/apps/android/app/src/main/res/values-cs/strings.xml b/apps/android/app/src/main/res/values-cs/strings.xml index 8a5723816e..f11ae67ea8 100644 --- a/apps/android/app/src/main/res/values-cs/strings.xml +++ b/apps/android/app/src/main/res/values-cs/strings.xml @@ -854,7 +854,7 @@ Přeskočit pozvání členů Vybrat kontakty Zkontrolované kontakty - %1$s kontakt(y) vybrán(y) + %d kontakt(y) vybrán(y) Pozvat členy %1$s MEMBERS vy: %1$s @@ -963,7 +963,6 @@ Vaše adresa Váš chat profil bude odeslán \nvašemu kontaktu - Vaše chat profily jsou uloženy lokálně, pouze ve vašem zařízení. Vaše konverzace Do níže uvedeného pole vložte odkaz, který jste obdrželi pro spojení s kontaktem. Sdílet pozvánku diff --git a/apps/android/app/src/main/res/values-de/strings.xml b/apps/android/app/src/main/res/values-de/strings.xml index 80ca19aef4..ed90ed6678 100644 --- a/apps/android/app/src/main/res/values-de/strings.xml +++ b/apps/android/app/src/main/res/values-de/strings.xml @@ -765,7 +765,7 @@ Kontakte auswählen Kontakt geprüft Löschen - %1$s Kontakt(e) ausgewählt + %d Kontakt(e) ausgewählt Keine Kontakte ausgewählt Kontakt kann nicht eingeladen werden! Sie versuchen, einen Kontakt, mit dem Sie ein Inkognito-Profil geteilt haben, in die Gruppe einzuladen, in der Sie Ihr Hauptprofil verwenden. @@ -1023,7 +1023,6 @@ Nur lokale Profildaten Profil und Serververbindungen Diese Einstellung gilt für Nachrichten in Ihrem aktuellen Chat-Profil - Ihre Chat-Profile werden nur lokal auf Ihrem Endgerät gespeichert Doppelter Anzeigename! Fehler beim Erstellen des Profils! Fehler beim Umschalten des Profils! diff --git a/apps/android/app/src/main/res/values-es/strings.xml b/apps/android/app/src/main/res/values-es/strings.xml index fc7224d3e2..880ec2f084 100644 --- a/apps/android/app/src/main/res/values-es/strings.xml +++ b/apps/android/app/src/main/res/values-es/strings.xml @@ -939,9 +939,8 @@ Base de datos de Chat Puedes iniciar el chat en Configuración / Base de datos o reiniciando la aplicación. Has enviado una invitación de grupo - %1$s contacto(s) seleccionado(s) + %d contacto(s) seleccionado(s) %1$s MIEMBROS - Tus perfiles de chat se almacenan localmente, sólo en tu dispositivo Los mensajes de voz están prohibidos en este chat. Novedades La contraseña no se almacena en el dispositivo, tienes que introducirla cada vez que inicies la aplicación. diff --git a/apps/android/app/src/main/res/values-fr/strings.xml b/apps/android/app/src/main/res/values-fr/strings.xml index 0d54fd920d..1e63aabd4d 100644 --- a/apps/android/app/src/main/res/values-fr/strings.xml +++ b/apps/android/app/src/main/res/values-fr/strings.xml @@ -744,7 +744,7 @@ Le rôle sera changé pour «%s». Les membres du groupe seront notifiés. Contact vérifié⸱e Effacer - %1$s contact·s sélectionné·e·s + %d contact·s sélectionné·e·s Passer l’invitation de membres Sélectionnez des contacts Aucun contact sélectionné @@ -942,7 +942,6 @@ Profil et connexions au serveur Isolement du transport Mettre à jour le mode d\'isolation du transport \? - Vos profils de chat sont stockés localement, uniquement sur votre appareil Une connexion TCP distincte (et identifiant SOCKS) sera utilisée pour chaque contact et membre de groupe. \nVeuillez noter : si vous avez de nombreuses connexions, votre consommation de batterie et de réseau peut être nettement plus élevée et certaines liaisons peuvent échouer. Profil de chat diff --git a/apps/android/app/src/main/res/values-it/strings.xml b/apps/android/app/src/main/res/values-it/strings.xml index 4e25b02655..1579452039 100644 --- a/apps/android/app/src/main/res/values-it/strings.xml +++ b/apps/android/app/src/main/res/values-it/strings.xml @@ -819,7 +819,7 @@ Invia messaggio diretto Salta l\'invito di membri Cambia - %1$s contatto/i selezionato/i + %d contatto/i selezionato/i %1$s MEMBRI Puoi condividere un link o un codice QR: chiunque potrà unirsi al gruppo. Non perderai i membri del gruppo se in seguito lo elimini. Stai tentando di invitare un contatto con cui hai condiviso un profilo in incognito nel gruppo in cui stai usando il tuo profilo principale @@ -948,7 +948,6 @@ Elimina i file per tutti i profili di chat Errore nel cambio di profilo! Errore nella creazione del profilo! - I tuoi profili di chat sono memorizzati localmente, solo sul tuo dispositivo Errore nell\'eliminazione del profilo utente Profilo e connessioni al server I tuoi profili di chat diff --git a/apps/android/app/src/main/res/values-ja/strings.xml b/apps/android/app/src/main/res/values-ja/strings.xml index 0530ae4ec6..fa9a28cdab 100644 --- a/apps/android/app/src/main/res/values-ja/strings.xml +++ b/apps/android/app/src/main/res/values-ja/strings.xml @@ -802,7 +802,7 @@ グループの招待を送りました %sの役割を次に変えました:%s ダイレクトメッセージを送信 - %1$s連絡先が選択中 + %d 連絡先が選択中 除名しました: %1$s 切り替える 役割が「%s」となります。グループの全員に通知が出ます。 @@ -812,7 +812,6 @@ 保存 ネットワーク設定を更新しますか? 設定を更新すると、全サーバにクライントの再接続が行われます。 - チャットプロフィールはローカルであなたの端末だけに保存されます。 色を保存 あなたが次を許可しています: はい diff --git a/apps/android/app/src/main/res/values-nl/strings.xml b/apps/android/app/src/main/res/values-nl/strings.xml index 8ecdad5b4d..deeb72e2a4 100644 --- a/apps/android/app/src/main/res/values-nl/strings.xml +++ b/apps/android/app/src/main/res/values-nl/strings.xml @@ -815,7 +815,7 @@ je bent van adres veranderd Selecteer contacten Sla het uitnodigen van leden over - %1$s contact(en) geselecteerd + %d contact(en) geselecteerd Verwijderen Gebruiker verwijderen Rol @@ -898,7 +898,6 @@ Netwerk instellingen bijwerken\? Door de instellingen bij te werken, wordt de client opnieuw verbonden met alle servers. Update - Uw chat profielen worden lokaal opgeslagen, alleen op uw apparaat Je willekeurige profiel Verbied het verzenden van verdwijnende berichten. Verbieden het verzenden van spraak berichten. diff --git a/apps/android/app/src/main/res/values-ru/strings.xml b/apps/android/app/src/main/res/values-ru/strings.xml index 77451033cc..1bf59af0dd 100644 --- a/apps/android/app/src/main/res/values-ru/strings.xml +++ b/apps/android/app/src/main/res/values-ru/strings.xml @@ -767,7 +767,7 @@ Выберите контакты Контакт выбран Очистить - Выбрано контактов: %1$s + Выбрано контактов: %d Контакты не выбраны Нельзя пригласить контакт! Вы пытаетесь пригласить инкогнито контакт в группу, где вы используете свой основной профиль @@ -1007,7 +1007,6 @@ Только локальные данные профиля Сообщения Серверы для новых соединений вашего текущего профиля чата - Ваши профили чата хранятся локально, только на вашем устройстве Ваши профили чата Все чаты и сообщения будут удалены - это нельзя отменить! Сборка приложения: %s diff --git a/apps/android/app/src/main/res/values-zh-rCN/strings.xml b/apps/android/app/src/main/res/values-zh-rCN/strings.xml index 4f9715eff6..d771408eb8 100644 --- a/apps/android/app/src/main/res/values-zh-rCN/strings.xml +++ b/apps/android/app/src/main/res/values-zh-rCN/strings.xml @@ -592,7 +592,6 @@ 您的聊天资料 未接来电 待定来电 - 您的聊天资料存储在本地,仅存储在您的设备上 除非您的联系人已删除此连接或此链接已被使用,否则它可能是一个错误——请报告。 \n如果要连接,请让您的联系人创建另一个连接链接,并检查您的网络连接是否稳定。 您已经连接到 %1$s! @@ -956,7 +955,7 @@ 你加入了这个群组。连接到邀请组成员。 您更改了 %s 的地址 您已离开 - %1$d 已选择联系人 + %d 已选择联系人 您允许 带有可选的欢迎消息。 %dm diff --git a/apps/android/app/src/main/res/values-zh-rTW/strings.xml b/apps/android/app/src/main/res/values-zh-rTW/strings.xml index 1ceb872791..0b0908c26f 100644 --- a/apps/android/app/src/main/res/values-zh-rTW/strings.xml +++ b/apps/android/app/src/main/res/values-zh-rTW/strings.xml @@ -765,7 +765,6 @@ 儲存 更新網路設定? 更新 - 你的個人檔案只會儲存於你的本機裝置內。 更新設定會將客戶端重新連接到所有的伺服器。 刪除個人檔案? 刪除個人檔案 @@ -927,7 +926,7 @@ 你將停止接收來自此群組的訊息。群組內的記錄會保留。 你已拒絕加入群組 連線中(宣布階段) - %1$s 已選擇多個聊絡人 + %d 已選擇多個聊絡人 你的 ICE 伺服器 WebRTC ICE 伺服器 更新 diff --git a/apps/android/app/src/main/res/values/strings.xml b/apps/android/app/src/main/res/values/strings.xml index ff0cfced06..3cb0dd9a82 100644 --- a/apps/android/app/src/main/res/values/strings.xml +++ b/apps/android/app/src/main/res/values/strings.xml @@ -921,7 +921,7 @@ Select contacts Contact checked Clear - %1$s contact(s) selected + %d contact(s) selected No contacts selected Can\'t invite contact! You\'re trying to invite contact with whom you\'ve shared an incognito profile to the group in which you\'re using your main profile From f5c11b8faf6539f9dd946f93e15164ea0778380c Mon Sep 17 00:00:00 2001 From: Stanislav Dmitrenko <7953703+avently@users.noreply.github.com> Date: Mon, 27 Mar 2023 19:58:14 +0300 Subject: [PATCH 18/19] android: ability to change profile from share dialog, mobile: do not show profile dropdown when there is only one visible profile (#2084) * android: ability to change profile from share dialog * icons swap --- .../app/views/chatlist/ChatListView.kt | 4 +- .../app/views/chatlist/ShareListView.kt | 31 +++++++++++--- .../simplex/app/views/chatlist/UserPicker.kt | 40 ++++++++++++++++--- .../views/usersettings/UserProfilesView.kt | 4 +- .../Shared/Views/ChatList/ChatListView.swift | 2 +- 5 files changed, 65 insertions(+), 16 deletions(-) diff --git a/apps/android/app/src/main/java/chat/simplex/app/views/chatlist/ChatListView.kt b/apps/android/app/src/main/java/chat/simplex/app/views/chatlist/ChatListView.kt index f8501afbe7..86647a0ef1 100644 --- a/apps/android/app/src/main/java/chat/simplex/app/views/chatlist/ChatListView.kt +++ b/apps/android/app/src/main/java/chat/simplex/app/views/chatlist/ChatListView.kt @@ -208,7 +208,7 @@ private fun ChatListToolbar(chatModel: ChatModel, drawerState: DrawerState, user } else if (chatModel.users.isEmpty()) { NavigationButtonMenu { scope.launch { if (drawerState.isOpen) drawerState.close() else drawerState.open() } } } else { - val users by remember { derivedStateOf { chatModel.users.toList() } } + val users by remember { derivedStateOf { chatModel.users.filter { u -> u.user.activeUser || !u.user.hidden } } } val allRead = users .filter { u -> !u.user.activeUser && !u.user.hidden } .all { u -> u.unreadCount == 0 } @@ -247,7 +247,7 @@ private fun ChatListToolbar(chatModel: ChatModel, drawerState: DrawerState, user } @Composable -private fun UserProfileButton(image: String?, allRead: Boolean, onButtonClicked: () -> Unit) { +fun UserProfileButton(image: String?, allRead: Boolean, onButtonClicked: () -> Unit) { IconButton(onClick = onButtonClicked) { Box { ProfileImage( diff --git a/apps/android/app/src/main/java/chat/simplex/app/views/chatlist/ShareListView.kt b/apps/android/app/src/main/java/chat/simplex/app/views/chatlist/ShareListView.kt index 8c8b20fc1c..bd97135c46 100644 --- a/apps/android/app/src/main/java/chat/simplex/app/views/chatlist/ShareListView.kt +++ b/apps/android/app/src/main/java/chat/simplex/app/views/chatlist/ShareListView.kt @@ -24,12 +24,15 @@ import chat.simplex.app.model.* import chat.simplex.app.ui.theme.HighOrLowlight import chat.simplex.app.ui.theme.Indigo import chat.simplex.app.views.helpers.* +import kotlinx.coroutines.flow.MutableStateFlow @Composable fun ShareListView(chatModel: ChatModel, stopped: Boolean) { var searchInList by rememberSaveable { mutableStateOf("") } + val userPickerState by rememberSaveable(stateSaver = AnimatedViewState.saver()) { mutableStateOf(MutableStateFlow(AnimatedViewState.GONE)) } + val switchingUsers = rememberSaveable { mutableStateOf(false) } Scaffold( - topBar = { Column { ShareListToolbar(chatModel, stopped) { searchInList = it.trim() } } }, + topBar = { Column { ShareListToolbar(chatModel, userPickerState, stopped) { searchInList = it.trim() } } }, ) { Box(Modifier.padding(it)) { Column( @@ -45,23 +48,41 @@ fun ShareListView(chatModel: ChatModel, stopped: Boolean) { } } } + UserPicker(chatModel, userPickerState, switchingUsers, showSettings = false, showCancel = true, cancelClicked = { + chatModel.sharedContent.value = null + }) } @Composable private fun EmptyList() { - Box { - Text(stringResource(R.string.you_have_no_chats), Modifier.align(Alignment.Center), color = HighOrLowlight) + Box(Modifier.fillMaxSize(), contentAlignment = Alignment.Center) { + Text(stringResource(R.string.you_have_no_chats), color = HighOrLowlight) } } @Composable -private fun ShareListToolbar(chatModel: ChatModel, stopped: Boolean, onSearchValueChanged: (String) -> Unit) { +private fun ShareListToolbar(chatModel: ChatModel, userPickerState: MutableStateFlow, stopped: Boolean, onSearchValueChanged: (String) -> Unit) { var showSearch by rememberSaveable { mutableStateOf(false) } val hideSearchOnBack = { onSearchValueChanged(""); showSearch = false } if (showSearch) { BackHandler(onBack = hideSearchOnBack) } val barButtons = arrayListOf<@Composable RowScope.() -> Unit>() + val users by remember { derivedStateOf { chatModel.users.filter { u -> u.user.activeUser || !u.user.hidden } } } + val navButton: @Composable RowScope.() -> Unit = { + when { + showSearch -> NavigationButtonBack(hideSearchOnBack) + users.size > 1 -> { + val allRead = users + .filter { u -> !u.user.activeUser && !u.user.hidden } + .all { u -> u.unreadCount == 0 } + UserProfileButton(chatModel.currentUser.value?.profile?.image, allRead) { + userPickerState.value = AnimatedViewState.VISIBLE + } + } + else -> NavigationButtonBack { chatModel.sharedContent.value = null } + } + } if (chatModel.chats.size >= 8) { barButtons.add { IconButton({ showSearch = true }) { @@ -87,7 +108,7 @@ private fun ShareListToolbar(chatModel: ChatModel, stopped: Boolean, onSearchVal } DefaultTopAppBar( - navigationButton = { if (showSearch) NavigationButtonBack(hideSearchOnBack) else NavigationButtonBack { chatModel.sharedContent.value = null } }, + navigationButton = navButton, title = { Row(verticalAlignment = Alignment.CenterVertically) { Text( diff --git a/apps/android/app/src/main/java/chat/simplex/app/views/chatlist/UserPicker.kt b/apps/android/app/src/main/java/chat/simplex/app/views/chatlist/UserPicker.kt index b7d3185e3b..5d37695616 100644 --- a/apps/android/app/src/main/java/chat/simplex/app/views/chatlist/UserPicker.kt +++ b/apps/android/app/src/main/java/chat/simplex/app/views/chatlist/UserPicker.kt @@ -34,7 +34,15 @@ import kotlinx.coroutines.launch import kotlin.math.roundToInt @Composable -fun UserPicker(chatModel: ChatModel, userPickerState: MutableStateFlow, switchingUsers: MutableState, openSettings: () -> Unit) { +fun UserPicker( + chatModel: ChatModel, + userPickerState: MutableStateFlow, + switchingUsers: MutableState, + showSettings: Boolean = true, + showCancel: Boolean = false, + cancelClicked: () -> Unit = {}, + settingsClicked: () -> Unit = {}, +) { val scope = rememberCoroutineScope() var newChat by remember { mutableStateOf(userPickerState.value) } val users by remember { @@ -101,12 +109,12 @@ fun UserPicker(chatModel: ChatModel, userPickerState: MutableStateFlow UserProfilePickerItem(u.user, u.unreadCount, openSettings = { - openSettings() + settingsClicked() userPickerState.value = AnimatedViewState.GONE }) { userPickerState.value = AnimatedViewState.HIDING @@ -126,9 +134,17 @@ fun UserPicker(chatModel: ChatModel, userPickerState: MutableStateFlow Unit) { Icon(Icons.Outlined.Settings, text, Modifier.size(20.dp), tint = MaterialTheme.colors.onBackground) } } + +@Composable +private fun CancelPickerItem(onClick: () -> Unit) { + SectionItemViewSpaceBetween(onClick, minHeight = 68.dp) { + val text = generalGetString(R.string.cancel_verb) + Text( + text, + color = MaterialTheme.colors.onBackground, + ) + Icon(Icons.Outlined.Close, text, Modifier.size(20.dp), tint = MaterialTheme.colors.onBackground) + } +} diff --git a/apps/android/app/src/main/java/chat/simplex/app/views/usersettings/UserProfilesView.kt b/apps/android/app/src/main/java/chat/simplex/app/views/usersettings/UserProfilesView.kt index 54885ac735..960da1a88d 100644 --- a/apps/android/app/src/main/java/chat/simplex/app/views/usersettings/UserProfilesView.kt +++ b/apps/android/app/src/main/java/chat/simplex/app/views/usersettings/UserProfilesView.kt @@ -216,12 +216,12 @@ private fun UserView( }) } if (user.showNtfs) { - ItemAction(stringResource(R.string.user_mute), Icons.Outlined.Notifications, onClick = { + ItemAction(stringResource(R.string.user_mute), Icons.Outlined.NotificationsOff, onClick = { showDropdownMenu = false muteUser(user) }) } else { - ItemAction(stringResource(R.string.user_unmute), Icons.Outlined.NotificationsOff, onClick = { + ItemAction(stringResource(R.string.user_unmute), Icons.Outlined.Notifications, onClick = { showDropdownMenu = false unmuteUser(user) }) diff --git a/apps/ios/Shared/Views/ChatList/ChatListView.swift b/apps/ios/Shared/Views/ChatList/ChatListView.swift index 0b2a3f1a9e..78ed48ed25 100644 --- a/apps/ios/Shared/Views/ChatList/ChatListView.swift +++ b/apps/ios/Shared/Views/ChatList/ChatListView.swift @@ -71,7 +71,7 @@ struct ChatListView: View { .toolbar { ToolbarItem(placement: .navigationBarLeading) { Button { - if chatModel.users.count > 1 { + if chatModel.users.filter { u in u.user.activeUser || !u.user.hidden }.count > 1 { withAnimation { userPickerVisible.toggle() } From c96ba300181687de9d3aeb44e3229afb7e868ece Mon Sep 17 00:00:00 2001 From: Evgeny Poberezkin <2769109+epoberezkin@users.noreply.github.com> Date: Mon, 27 Mar 2023 18:34:48 +0100 Subject: [PATCH 19/19] core: support down migrations to allow reverting to the previous version (#2072) * core: support down migrations to allow reverting to the previous version * update schema * update simplexmq * rename errors * remove unused functions * migration UI, test migration * update migration UI * return current migrations in CRVersionInfo * update simplexmq * test down migrations * cleanup ios * show migrations in log --- apps/ios/Shared/Model/SimpleXAPI.swift | 6 +- .../Views/Database/DatabaseErrorView.swift | 94 +++++++++++--- .../Views/UserSettings/CallSettings.swift | 2 +- .../Views/UserSettings/DeveloperView.swift | 50 ++++++++ .../Views/UserSettings/SettingsView.swift | 23 +--- .../ios/SimpleX NSE/NotificationService.swift | 2 +- apps/ios/SimpleX.xcodeproj/project.pbxproj | 4 + apps/ios/SimpleXChat/API.swift | 38 +++++- apps/ios/SimpleXChat/APITypes.swift | 4 +- apps/ios/SimpleXChat/AppGroup.swift | 4 + apps/ios/SimpleXChat/Notifications.swift | 6 +- apps/ios/SimpleXChat/SimpleX.h | 2 +- cabal.project | 2 +- scripts/nix/sha256map.nix | 2 +- src/Simplex/Chat.hs | 30 +++-- src/Simplex/Chat/Controller.hs | 6 +- src/Simplex/Chat/Core.hs | 10 +- .../Migrations/M20230317_hidden_profiles.hs | 8 ++ src/Simplex/Chat/Migrations/chat_schema.sql | 1 + src/Simplex/Chat/Mobile.hs | 95 +++----------- src/Simplex/Chat/Store.hs | 120 +++++++++--------- src/Simplex/Chat/View.hs | 2 +- stack.yaml | 2 +- tests/ChatClient.hs | 5 +- tests/MobileTests.hs | 13 +- tests/SchemaDump.hs | 56 ++++++-- 26 files changed, 365 insertions(+), 222 deletions(-) create mode 100644 apps/ios/Shared/Views/UserSettings/DeveloperView.swift diff --git a/apps/ios/Shared/Model/SimpleXAPI.swift b/apps/ios/Shared/Model/SimpleXAPI.swift index d5ad40b850..81661c2fba 100644 --- a/apps/ios/Shared/Model/SimpleXAPI.swift +++ b/apps/ios/Shared/Model/SimpleXAPI.swift @@ -972,7 +972,7 @@ func apiGetGroupLink(_ groupId: Int64) throws -> (String, GroupMemberRole)? { func apiGetVersion() throws -> CoreVersionInfo { let r = chatSendCmdSync(.showVersion) - if case let .versionInfo(info) = r { return info } + if case let .versionInfo(info, _, _) = r { return info } throw r } @@ -983,10 +983,10 @@ private func currentUserId(_ funcName: String) throws -> Int64 { throw RuntimeError("\(funcName): no current user") } -func initializeChat(start: Bool, dbKey: String? = nil, refreshInvitations: Bool = true) throws { +func initializeChat(start: Bool, dbKey: String? = nil, refreshInvitations: Bool = true, confirmMigrations: MigrationConfirmation? = nil) throws { logger.debug("initializeChat") let m = ChatModel.shared - (m.chatDbEncrypted, m.chatDbStatus) = chatMigrateInit(dbKey) + (m.chatDbEncrypted, m.chatDbStatus) = chatMigrateInit(dbKey, confirmMigrations: confirmMigrations) if m.chatDbStatus != .ok { return } // If we migrated successfully means previous re-encryption process on database level finished successfully too if encryptionStartedDefault.get() { diff --git a/apps/ios/Shared/Views/Database/DatabaseErrorView.swift b/apps/ios/Shared/Views/Database/DatabaseErrorView.swift index 4830c81729..cd18b244c2 100644 --- a/apps/ios/Shared/Views/Database/DatabaseErrorView.swift +++ b/apps/ios/Shared/Views/Database/DatabaseErrorView.swift @@ -16,40 +16,68 @@ struct DatabaseErrorView: View { @State private var storedDBKey = getDatabaseKey() @State private var useKeychain = storeDBPassphraseGroupDefault.get() @State private var showRestoreDbButton = false + @State private var starting = false var body: some View { + ZStack { + databaseErrorView().disabled(starting) + if starting { + ProgressView().scaleEffect(2) + } + } + } + + @ViewBuilder private func databaseErrorView() -> some View { VStack(alignment: .leading, spacing: 16) { switch status { case let .errorNotADatabase(dbFile): if useKeychain && storedDBKey != nil && storedDBKey != "" { - Text("Wrong database passphrase").font(.title) + titleText("Wrong database passphrase") Text("Database passphrase is different from saved in the keychain.") databaseKeyField(onSubmit: saveAndRunChat) saveAndOpenButton() - Text("File: \(dbFile)") + fileNameText(dbFile) } else { - Text("Encrypted database").font(.title) + titleText("Encrypted database") Text("Database passphrase is required to open chat.") if useKeychain { databaseKeyField(onSubmit: saveAndRunChat) saveAndOpenButton() } else { - databaseKeyField(onSubmit: runChat) + databaseKeyField(onSubmit: { runChat() }) openChatButton() } } - case let .error(dbFile, migrationError): - Text("Database error") - .font(.title) - Text("File: \(dbFile)") - Text("Error: \(migrationError)") + case let .errorMigration(dbFile, migrationError): + switch migrationError { + case let .upgrade(upMigrations): + titleText("Database upgrade") + Button("Upgrade and open chat") { runChat(confirmMigrations: .yesUp) } + fileNameText(dbFile) + migrationsText(upMigrations.map(\.upName)) + case let .downgrade(downMigrations): + titleText("Database downgrade") + Text("Warning: you may lose some data!").bold() + Button("Downgrade and open chat") { runChat(confirmMigrations: .yesUpDown) } + fileNameText(dbFile) + migrationsText(downMigrations) + case let .migrationError(mtrError): + titleText("Incompatible database version") + fileNameText(dbFile) + Text("Error: ") + Text(mtrErrorDescription(mtrError)) + } + case let .errorSQL(dbFile, migrationSQLError): + titleText("Database error") + fileNameText(dbFile) + Text("Error: \(migrationSQLError)") case .errorKeychain: - Text("Keychain error") - .font(.title) + titleText("Keychain error") Text("Cannot access keychain to save database password") + case .invalidConfirmation: + // this can only happen if incorrect parameter is passed + Text(String("Invalid migration confirmation")).font(.title) case let .unknown(json): - Text("Database error") - .font(.title) + titleText("Database error") Text("Unknown database error: \(json)") case .ok: EmptyView() @@ -61,10 +89,31 @@ struct DatabaseErrorView: View { } } .padding() - .frame(maxHeight: .infinity, alignment: .topLeading) + .frame(maxWidth: .infinity, maxHeight: .infinity, alignment: .topLeading) .onAppear() { showRestoreDbButton = shouldShowRestoreDbButton() } } + private func titleText(_ s: LocalizedStringKey) -> Text { + Text(s).font(.title) + } + + private func fileNameText(_ f: String) -> Text { + Text("File: \((f as NSString).lastPathComponent)") + } + + private func migrationsText(_ ms: [String]) -> Text { + Text("Migrations: \(ms.joined(separator: ", "))") + } + + private func mtrErrorDescription(_ err: MTRError) -> LocalizedStringKey { + switch err { + case let .noDown(dbMigrations): + return "database version is newer than the app, but no down migration for: \(dbMigrations.joined(separator: ", "))" + case let .different(appMigration, dbMigration): + return "different migration in the app/database: \(appMigration) / \(dbMigration)" + } + } + private func databaseKeyField(onSubmit: @escaping () -> Void) -> some View { PassphraseField(key: $dbKey, placeholder: "Enter passphrase…", valid: validKey(dbKey), onSubmit: onSubmit) } @@ -89,14 +138,24 @@ struct DatabaseErrorView: View { runChat() } - private func runChat() { + private func runChat(confirmMigrations: MigrationConfirmation? = nil) { + starting = true + DispatchQueue.main.asyncAfter(deadline: .now() + 0.1) { + runChatSync(confirmMigrations: confirmMigrations) + starting = false + } + } + + private func runChatSync(confirmMigrations: MigrationConfirmation? = nil) { do { resetChatCtrl() - try initializeChat(start: m.v3DBMigration.startChat, dbKey: dbKey) + try initializeChat(start: m.v3DBMigration.startChat, dbKey: useKeychain ? nil : dbKey, confirmMigrations: confirmMigrations) if let s = m.chatDbStatus { status = s let am = AlertManager.shared switch s { + case .invalidConfirmation: + am.showAlert(Alert(title: Text(String("Invalid migration confirmation")))) case .errorNotADatabase: am.showAlertMsg( title: "Wrong passphrase!", @@ -104,7 +163,7 @@ struct DatabaseErrorView: View { ) case .errorKeychain: am.showAlertMsg(title: "Keychain error") - case let .error(_, error): + case let .errorSQL(_, error): am.showAlert(Alert( title: Text("Database error"), message: Text(error) @@ -114,6 +173,7 @@ struct DatabaseErrorView: View { title: Text("Unknown error"), message: Text(error) )) + case .errorMigration: () case .ok: () } } diff --git a/apps/ios/Shared/Views/UserSettings/CallSettings.swift b/apps/ios/Shared/Views/UserSettings/CallSettings.swift index ca43faab03..43c715523e 100644 --- a/apps/ios/Shared/Views/UserSettings/CallSettings.swift +++ b/apps/ios/Shared/Views/UserSettings/CallSettings.swift @@ -11,7 +11,7 @@ import SimpleXChat struct CallSettings: View { @AppStorage(DEFAULT_WEBRTC_POLICY_RELAY) private var webrtcPolicyRelay = true - @AppStorage(GROUP_DEFAULT_CALL_KIT_ENABLED, store: UserDefaults(suiteName: APP_GROUP_NAME)!) private var callKitEnabled = true + @AppStorage(GROUP_DEFAULT_CALL_KIT_ENABLED, store: groupDefaults) private var callKitEnabled = true @AppStorage(DEFAULT_CALL_KIT_CALLS_IN_RECENTS) private var callKitCallsInRecents = false @AppStorage(DEFAULT_DEVELOPER_TOOLS) private var developerTools = false private let allowChangingCallsHistory = false diff --git a/apps/ios/Shared/Views/UserSettings/DeveloperView.swift b/apps/ios/Shared/Views/UserSettings/DeveloperView.swift new file mode 100644 index 0000000000..0d7435d909 --- /dev/null +++ b/apps/ios/Shared/Views/UserSettings/DeveloperView.swift @@ -0,0 +1,50 @@ +// +// DeveloperView.swift +// SimpleX (iOS) +// +// Created by Evgeny on 26/03/2023. +// Copyright © 2023 SimpleX Chat. All rights reserved. +// + +import SwiftUI +import SimpleXChat + +struct DeveloperView: View { + @AppStorage(DEFAULT_DEVELOPER_TOOLS) private var developerTools = false + @AppStorage(GROUP_DEFAULT_CONFIRM_DB_UPGRADES, store: groupDefaults) private var confirmDatabaseUpgrades = false + @Environment(\.colorScheme) var colorScheme + + var body: some View { + VStack { + List { + Section { + NavigationLink { + TerminalView() + } label: { + settingsRow("terminal") { Text("Chat console") } + } + settingsRow("chevron.left.forwardslash.chevron.right") { + Toggle("Show developer options", isOn: $developerTools) + } + settingsRow("internaldrive") { + Toggle("Confirm database upgrades", isOn: $confirmDatabaseUpgrades) + } + ZStack(alignment: .leading) { + Image(colorScheme == .dark ? "github_light" : "github") + .resizable() + .frame(width: 24, height: 24) + .opacity(0.5) + Text("Install [SimpleX Chat for terminal](https://github.com/simplex-chat/simplex-chat)") + .padding(.leading, 36) + } + } + } + } + } +} + +struct DeveloperView_Previews: PreviewProvider { + static var previews: some View { + DeveloperView() + } +} diff --git a/apps/ios/Shared/Views/UserSettings/SettingsView.swift b/apps/ios/Shared/Views/UserSettings/SettingsView.swift index cb58d2feaf..e885fc1f2d 100644 --- a/apps/ios/Shared/Views/UserSettings/SettingsView.swift +++ b/apps/ios/Shared/Views/UserSettings/SettingsView.swift @@ -108,7 +108,6 @@ struct SettingsView: View { @EnvironmentObject var chatModel: ChatModel @EnvironmentObject var sceneDelegate: SceneDelegate @Binding var showSettings: Bool - @AppStorage(DEFAULT_DEVELOPER_TOOLS) private var developerTools = false @State private var settingsSheet: SettingsSheet? var body: some View { @@ -259,23 +258,11 @@ struct SettingsView: View { } Section("Develop") { - settingsRow("chevron.left.forwardslash.chevron.right") { - Toggle("Developer tools", isOn: $developerTools) - } - if developerTools { - NavigationLink { - TerminalView() - } label: { - settingsRow("terminal") { Text("Chat console") } - } - ZStack(alignment: .leading) { - Image(colorScheme == .dark ? "github_light" : "github") - .resizable() - .frame(width: 24, height: 24) - .opacity(0.5) - Text("Install [SimpleX Chat for terminal](https://github.com/simplex-chat/simplex-chat)") - .padding(.leading, indent) - } + NavigationLink { + DeveloperView() + .navigationTitle("Developer tools") + } label: { + settingsRow("chevron.left.forwardslash.chevron.right") { Text("Developer tools") } } // NavigationLink { // ExperimentalFeaturesView() diff --git a/apps/ios/SimpleX NSE/NotificationService.swift b/apps/ios/SimpleX NSE/NotificationService.swift index 5eda201f24..2b511f7b4c 100644 --- a/apps/ios/SimpleX NSE/NotificationService.swift +++ b/apps/ios/SimpleX NSE/NotificationService.swift @@ -203,7 +203,7 @@ var networkConfig: NetCfg = getNetCfg() func startChat() -> DBMigrationResult? { hs_init(0, nil) if chatStarted { return .ok } - let (_, dbStatus) = chatMigrateInit() + let (_, dbStatus) = chatMigrateInit(confirmMigrations: defaultMigrationConfirmation()) if dbStatus != .ok { resetChatCtrl() return dbStatus diff --git a/apps/ios/SimpleX.xcodeproj/project.pbxproj b/apps/ios/SimpleX.xcodeproj/project.pbxproj index 053a59b9fe..08b902463b 100644 --- a/apps/ios/SimpleX.xcodeproj/project.pbxproj +++ b/apps/ios/SimpleX.xcodeproj/project.pbxproj @@ -58,6 +58,7 @@ 5C65DAF529CBA429003CEE45 /* libHSsimplex-chat-4.6.0.0-KxI2qGrpKDHEZQGy0eoUXU.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 5C65DAF029CBA429003CEE45 /* libHSsimplex-chat-4.6.0.0-KxI2qGrpKDHEZQGy0eoUXU.a */; }; 5C65DAF629CBA429003CEE45 /* libgmpxx.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 5C65DAF129CBA429003CEE45 /* libgmpxx.a */; }; 5C65DAF729CBA429003CEE45 /* libffi.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 5C65DAF229CBA429003CEE45 /* libffi.a */; }; + 5C65DAF929D0CC20003CEE45 /* DeveloperView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5C65DAF829D0CC20003CEE45 /* DeveloperView.swift */; }; 5C65F343297D45E100B67AF3 /* VersionView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5C65F341297D3F3600B67AF3 /* VersionView.swift */; }; 5C6AD81327A834E300348BD7 /* NewChatButton.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5C6AD81227A834E300348BD7 /* NewChatButton.swift */; }; 5C6BA667289BD954009B8ECC /* DismissSheets.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5C6BA666289BD954009B8ECC /* DismissSheets.swift */; }; @@ -294,6 +295,7 @@ 5C65DAF029CBA429003CEE45 /* libHSsimplex-chat-4.6.0.0-KxI2qGrpKDHEZQGy0eoUXU.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = "libHSsimplex-chat-4.6.0.0-KxI2qGrpKDHEZQGy0eoUXU.a"; sourceTree = ""; }; 5C65DAF129CBA429003CEE45 /* libgmpxx.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = libgmpxx.a; sourceTree = ""; }; 5C65DAF229CBA429003CEE45 /* libffi.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = libffi.a; sourceTree = ""; }; + 5C65DAF829D0CC20003CEE45 /* DeveloperView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DeveloperView.swift; sourceTree = ""; }; 5C65F341297D3F3600B67AF3 /* VersionView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = VersionView.swift; sourceTree = ""; }; 5C6AD81227A834E300348BD7 /* NewChatButton.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NewChatButton.swift; sourceTree = ""; }; 5C6BA666289BD954009B8ECC /* DismissSheets.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DismissSheets.swift; sourceTree = ""; }; @@ -691,6 +693,7 @@ 64F1CC3A28B39D8600CD1FB1 /* IncognitoHelp.swift */, 18415845648CA4F5A8BCA272 /* UserProfilesView.swift */, 5C65F341297D3F3600B67AF3 /* VersionView.swift */, + 5C65DAF829D0CC20003CEE45 /* DeveloperView.swift */, ); path = UserSettings; sourceTree = ""; @@ -1022,6 +1025,7 @@ 5C93292F29239A170090FFF9 /* SMPServersView.swift in Sources */, 5CB924D727A8563F00ACCCDD /* SettingsView.swift in Sources */, 5CEACCE327DE9246000BD591 /* ComposeView.swift in Sources */, + 5C65DAF929D0CC20003CEE45 /* DeveloperView.swift in Sources */, 5C36027327F47AD5009F19D9 /* AppDelegate.swift in Sources */, 5CB924E127A867BA00ACCCDD /* UserProfile.swift in Sources */, 5CB0BA9A2827FD8800B3292C /* HowItWorks.swift in Sources */, diff --git a/apps/ios/SimpleXChat/API.swift b/apps/ios/SimpleXChat/API.swift index 11eec7f873..a400a82fb4 100644 --- a/apps/ios/SimpleXChat/API.swift +++ b/apps/ios/SimpleXChat/API.swift @@ -17,7 +17,7 @@ public func getChatCtrl(_ useKey: String? = nil) -> chat_ctrl { fatalError("chat controller not initialized") } -public func chatMigrateInit(_ useKey: String? = nil) -> (Bool, DBMigrationResult) { +public func chatMigrateInit(_ useKey: String? = nil, confirmMigrations: MigrationConfirmation? = nil) -> (Bool, DBMigrationResult) { if let res = migrationResult { return res } let dbPath = getAppDatabasePath().path var dbKey = "" @@ -34,12 +34,14 @@ public func chatMigrateInit(_ useKey: String? = nil) -> (Bool, DBMigrationResult dbKey = key } } - logger.debug("chatMigrateInit DB path: \(dbPath)") + let confirm = confirmMigrations ?? defaultMigrationConfirmation() + logger.debug("chatMigrateInit DB path: \(dbPath), confirm: \(confirm.rawValue)") // logger.debug("chatMigrateInit DB key: \(dbKey)") var cPath = dbPath.cString(using: .utf8)! var cKey = dbKey.cString(using: .utf8)! + var cConfirm = confirm.rawValue.cString(using: .utf8)! // the last parameter of chat_migrate_init is used to return the pointer to chat controller - let cjson = chat_migrate_init(&cPath, &cKey, &chatController)! + let cjson = chat_migrate_init(&cPath, &cKey, &cConfirm, &chatController)! let dbRes = dbMigrationResult(fromCString(cjson)) let encrypted = dbKey != "" let keychainErr = dbRes == .ok && useKeychain && encrypted && !setDatabaseKey(dbKey) @@ -207,12 +209,40 @@ func chatErrorString(_ err: ChatError) -> String { public enum DBMigrationResult: Decodable, Equatable { case ok + case invalidConfirmation case errorNotADatabase(dbFile: String) - case error(dbFile: String, migrationError: String) + case errorMigration(dbFile: String, migrationError: MigrationError) + case errorSQL(dbFile: String, migrationSQLError: String) case errorKeychain case unknown(json: String) } +public enum MigrationConfirmation: String { + case yesUp + case yesUpDown + case error +} + +public func defaultMigrationConfirmation() -> MigrationConfirmation { + confirmDBUpgradesGroupDefault.get() ? .error : .yesUp +} + +public enum MigrationError: Decodable, Equatable { + case upgrade(upMigrations: [UpMigration]) + case downgrade(downMigrations: [String]) + case migrationError(mtrError: MTRError) +} + +public struct UpMigration: Decodable, Equatable { + public var upName: String +// public var withDown: Bool +} + +public enum MTRError: Decodable, Equatable { + case noDown(dbMigrations: [String]) + case different(appMigration: String, dbMigration: String) +} + func dbMigrationResult(_ s: String) -> DBMigrationResult { let d = s.data(using: .utf8)! // TODO is there a way to do it without copying the data? e.g: diff --git a/apps/ios/SimpleXChat/APITypes.swift b/apps/ios/SimpleXChat/APITypes.swift index ededd5b26b..d57d1b939d 100644 --- a/apps/ios/SimpleXChat/APITypes.swift +++ b/apps/ios/SimpleXChat/APITypes.swift @@ -459,7 +459,7 @@ public enum ChatResponse: Decodable, Error { case ntfMessages(user_: User?, connEntity: ConnectionEntity?, msgTs: Date?, ntfMessages: [NtfMsgInfo]) case newContactConnection(user: User, connection: PendingContactConnection) case contactConnectionDeleted(user: User, connection: PendingContactConnection) - case versionInfo(versionInfo: CoreVersionInfo) + case versionInfo(versionInfo: CoreVersionInfo, chatMigrations: [UpMigration], agentMigrations: [UpMigration]) case cmdOk(user: User?) case chatCmdError(user_: User?, chatError: ChatError) case chatError(user_: User?, chatError: ChatError) @@ -674,7 +674,7 @@ public enum ChatResponse: Decodable, Error { case let .ntfMessages(u, connEntity, msgTs, ntfMessages): return withUser(u, "connEntity: \(String(describing: connEntity))\nmsgTs: \(String(describing: msgTs))\nntfMessages: \(String(describing: ntfMessages))") case let .newContactConnection(u, connection): return withUser(u, String(describing: connection)) case let .contactConnectionDeleted(u, connection): return withUser(u, String(describing: connection)) - case let .versionInfo(versionInfo): return String(describing: versionInfo) + case let .versionInfo(versionInfo, chatMigrations, agentMigrations): return "\(String(describing: versionInfo))\n\nchat migrations: \(chatMigrations.map(\.upName))\n\nagent migrations: \(agentMigrations.map(\.upName))" case .cmdOk: return noDetails case let .chatCmdError(u, chatError): return withUser(u, String(describing: chatError)) case let .chatError(u, chatError): return withUser(u, String(describing: chatError)) diff --git a/apps/ios/SimpleXChat/AppGroup.swift b/apps/ios/SimpleXChat/AppGroup.swift index 3ea392c229..c93a3acbc6 100644 --- a/apps/ios/SimpleXChat/AppGroup.swift +++ b/apps/ios/SimpleXChat/AppGroup.swift @@ -29,6 +29,7 @@ let GROUP_DEFAULT_NETWORK_TCP_KEEP_CNT = "networkTCPKeepCnt" let GROUP_DEFAULT_INCOGNITO = "incognito" let GROUP_DEFAULT_STORE_DB_PASSPHRASE = "storeDBPassphrase" let GROUP_DEFAULT_INITIAL_RANDOM_DB_PASSPHRASE = "initialRandomDBPassphrase" +public let GROUP_DEFAULT_CONFIRM_DB_UPGRADES = "confirmDBUpgrades" public let GROUP_DEFAULT_CALL_KIT_ENABLED = "callKitEnabled" public let APP_GROUP_NAME = "group.chat.simplex.app" @@ -52,6 +53,7 @@ public func registerGroupDefaults() { GROUP_DEFAULT_INITIAL_RANDOM_DB_PASSPHRASE: false, GROUP_DEFAULT_PRIVACY_ACCEPT_IMAGES: true, GROUP_DEFAULT_PRIVACY_TRANSFER_IMAGES_INLINE: false, + GROUP_DEFAULT_CONFIRM_DB_UPGRADES: false, GROUP_DEFAULT_CALL_KIT_ENABLED: true ]) } @@ -121,6 +123,8 @@ public let storeDBPassphraseGroupDefault = BoolDefault(defaults: groupDefaults, public let initialRandomDBPassphraseGroupDefault = BoolDefault(defaults: groupDefaults, forKey: GROUP_DEFAULT_INITIAL_RANDOM_DB_PASSPHRASE) +public let confirmDBUpgradesGroupDefault = BoolDefault(defaults: groupDefaults, forKey: GROUP_DEFAULT_CONFIRM_DB_UPGRADES) + public let callKitEnabledGroupDefault = BoolDefault(defaults: groupDefaults, forKey: GROUP_DEFAULT_CALL_KIT_ENABLED) public class DateDefault { diff --git a/apps/ios/SimpleXChat/Notifications.swift b/apps/ios/SimpleXChat/Notifications.swift index 035e849ff5..2e8c5c7124 100644 --- a/apps/ios/SimpleXChat/Notifications.swift +++ b/apps/ios/SimpleXChat/Notifications.swift @@ -127,12 +127,16 @@ public func createErrorNtf(_ dbStatus: DBMigrationResult) -> UNMutableNotificati switch dbStatus { case .errorNotADatabase: title = NSLocalizedString("Encrypted message: no passphrase", comment: "notification") - case .error: + case .errorMigration: + title = NSLocalizedString("Encrypted message: database migration error", comment: "notification") + case .errorSQL: title = NSLocalizedString("Encrypted message: database error", comment: "notification") case .errorKeychain: title = NSLocalizedString("Encrypted message: keychain error", comment: "notification") case .unknown: title = NSLocalizedString("Encrypted message: unexpected error", comment: "notification") + case .invalidConfirmation: + title = NSLocalizedString("Encrypted message or another event", comment: "notification") case .ok: title = NSLocalizedString("Encrypted message or another event", comment: "notification") } diff --git a/apps/ios/SimpleXChat/SimpleX.h b/apps/ios/SimpleXChat/SimpleX.h index 5d5f1e355a..199c688f26 100644 --- a/apps/ios/SimpleXChat/SimpleX.h +++ b/apps/ios/SimpleXChat/SimpleX.h @@ -16,7 +16,7 @@ extern void hs_init(int argc, char **argv[]); typedef void* chat_ctrl; // the last parameter is used to return the pointer to chat controller -extern char *chat_migrate_init(char *path, char *key, chat_ctrl *ctrl); +extern char *chat_migrate_init(char *path, char *key, char *confirm, chat_ctrl *ctrl); extern char *chat_send_cmd(chat_ctrl ctl, char *cmd); extern char *chat_recv_msg(chat_ctrl ctl); extern char *chat_recv_msg_wait(chat_ctrl ctl, int wait); diff --git a/cabal.project b/cabal.project index 22c7397220..cc143cc0fb 100644 --- a/cabal.project +++ b/cabal.project @@ -7,7 +7,7 @@ constraints: zip +disable-bzip2 +disable-zstd source-repository-package type: git location: https://github.com/simplex-chat/simplexmq.git - tag: d41c2bec2af2aa77e7d671800c08c9760187dff9 + tag: 6a665a083387fe7145d161957f0fcab223a48838 source-repository-package type: git diff --git a/scripts/nix/sha256map.nix b/scripts/nix/sha256map.nix index 87c6dd1362..9ffd79f722 100644 --- a/scripts/nix/sha256map.nix +++ b/scripts/nix/sha256map.nix @@ -1,5 +1,5 @@ { - "https://github.com/simplex-chat/simplexmq.git"."d41c2bec2af2aa77e7d671800c08c9760187dff9" = "1lrbxbggpa4cq190gwk1bljx7y8fhfbpk4wnsdy67fpk32mk7bc1"; + "https://github.com/simplex-chat/simplexmq.git"."6a665a083387fe7145d161957f0fcab223a48838" = "06nmqbnvalwx8zc8dndzcp31asm65clx519aplzpkipjcbyz93y4"; "https://github.com/simplex-chat/hs-socks.git"."a30cc7a79a08d8108316094f8f2f82a0c5e1ac51" = "0yasvnr7g91k76mjkamvzab2kvlb1g5pspjyjn2fr6v83swjhj38"; "https://github.com/kazu-yamamoto/http2.git"."78e18f52295a7f89e828539a03fbcb24931461a3" = "05q165anvv0qrcxqbvq1dlvw0l8gmsa9kl6sazk1mfhz2g0yimdk"; "https://github.com/simplex-chat/direct-sqlcipher.git"."34309410eb2069b029b8fc1872deb1e0db123294" = "0kwkmhyfsn2lixdlgl15smgr1h5gjk7fky6abzh8rng2h5ymnffd"; diff --git a/src/Simplex/Chat.hs b/src/Simplex/Chat.hs index a5b2f1bab3..fc3fe78783 100644 --- a/src/Simplex/Chat.hs +++ b/src/Simplex/Chat.hs @@ -61,10 +61,11 @@ import Simplex.Chat.Util (diffInMicros, diffInSeconds) import Simplex.FileTransfer.Client.Presets (defaultXFTPServers) import Simplex.Messaging.Agent as Agent import Simplex.Messaging.Agent.Client (AgentStatsKey (..)) -import Simplex.Messaging.Agent.Env.SQLite (AgentConfig (..), AgentDatabase (..), InitialAgentServers (..), createAgentStore, defaultAgentConfig) +import Simplex.Messaging.Agent.Env.SQLite (AgentConfig (..), InitialAgentServers (..), createAgentStore, defaultAgentConfig) import Simplex.Messaging.Agent.Lock import Simplex.Messaging.Agent.Protocol -import Simplex.Messaging.Agent.Store.SQLite (SQLiteStore (dbNew), execSQL) +import Simplex.Messaging.Agent.Store.SQLite (MigrationConfirmation (..), MigrationError, SQLiteStore (dbNew), execSQL, upMigration) +import qualified Simplex.Messaging.Agent.Store.SQLite.Migrations as Migrations import Simplex.Messaging.Client (defaultNetworkConfig) import qualified Simplex.Messaging.Crypto as C import Simplex.Messaging.Encoding @@ -92,11 +93,9 @@ defaultChatConfig = { agentConfig = defaultAgentConfig { tcpPort = undefined, -- agent does not listen to TCP - tbqSize = 1024, - database = AgentDBFile {dbFile = "simplex_v1_agent", dbKey = ""}, - yesToMigrations = False + tbqSize = 1024 }, - yesToMigrations = False, + confirmMigrations = MCConsole, defaultServers = DefaultAgentServers { smp = _defaultSMPServers, @@ -134,10 +133,10 @@ fixedImagePreview = ImageData "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEA logCfg :: LogConfig logCfg = LogConfig {lc_file = Nothing, lc_stderr = True} -createChatDatabase :: FilePath -> String -> Bool -> IO ChatDatabase -createChatDatabase filePrefix key yesToMigrations = do - chatStore <- createChatStore (chatStoreFile filePrefix) key yesToMigrations - agentStore <- createAgentStore (agentStoreFile filePrefix) key yesToMigrations +createChatDatabase :: FilePath -> String -> MigrationConfirmation -> IO (Either MigrationError ChatDatabase) +createChatDatabase filePrefix key confirmMigrations = runExceptT $ do + chatStore <- ExceptT $ createChatStore (chatStoreFile filePrefix) key confirmMigrations + agentStore <- ExceptT $ createAgentStore (agentStoreFile filePrefix) key confirmMigrations pure ChatDatabase {chatStore, agentStore} newChatController :: ChatDatabase -> Maybe User -> ChatConfig -> ChatOpts -> Maybe (Notification -> IO ()) -> IO ChatController @@ -148,9 +147,10 @@ newChatController ChatDatabase {chatStore, agentStore} user cfg@ChatConfig {agen firstTime = dbNew chatStore activeTo <- newTVarIO ActiveNone currentUser <- newTVarIO user - smpAgent <- getSMPAgentClient aCfg {tbqSize, database = AgentDB agentStore} =<< agentServers config + servers <- agentServers config + smpAgent <- getSMPAgentClient aCfg {tbqSize} servers agentStore agentAsync <- newTVarIO Nothing - idsDrg <- newTVarIO =<< drgNew + idsDrg <- newTVarIO =<< liftIO drgNew inputQ <- newTBQueueIO tbqSize outputQ <- newTBQueueIO tbqSize notifyQ <- newTBQueueIO tbqSize @@ -1389,7 +1389,11 @@ processChatCommand = \case updateGroupProfileByName gName $ \p -> p {groupPreferences = Just . setGroupPreference' SGFTimedMessages pref $ groupPreferences p} QuitChat -> liftIO exitSuccess - ShowVersion -> pure $ CRVersionInfo $ coreVersionInfo $(buildTimestampQ) $(simplexmqCommitQ) + ShowVersion -> do + let versionInfo = coreVersionInfo $(buildTimestampQ) $(simplexmqCommitQ) + chatMigrations <- map upMigration <$> withStore' Migrations.getCurrent + agentMigrations <- withAgent getAgentMigrations + pure $ CRVersionInfo {versionInfo, chatMigrations, agentMigrations} DebugLocks -> do chatLockName <- atomically . tryReadTMVar =<< asks chatLock agentLocks <- withAgent debugAgentLocks diff --git a/src/Simplex/Chat/Controller.hs b/src/Simplex/Chat/Controller.hs index 6bb8169dbd..5c1379011a 100644 --- a/src/Simplex/Chat/Controller.hs +++ b/src/Simplex/Chat/Controller.hs @@ -49,7 +49,7 @@ import Simplex.Messaging.Agent.Client (AgentLocks, SMPTestFailure) import Simplex.Messaging.Agent.Env.SQLite (AgentConfig, NetworkConfig) import Simplex.Messaging.Agent.Lock import Simplex.Messaging.Agent.Protocol -import Simplex.Messaging.Agent.Store.SQLite (SQLiteStore) +import Simplex.Messaging.Agent.Store.SQLite (MigrationConfirmation, SQLiteStore, UpMigration) import qualified Simplex.Messaging.Crypto as C import Simplex.Messaging.Encoding.String import Simplex.Messaging.Notifications.Protocol (DeviceToken (..), NtfTknStatus) @@ -101,7 +101,7 @@ coreVersionInfo buildTimestamp simplexmqCommit = data ChatConfig = ChatConfig { agentConfig :: AgentConfig, - yesToMigrations :: Bool, + confirmMigrations :: MigrationConfirmation, defaultServers :: DefaultAgentServers, tbqSize :: Natural, fileChunkSize :: Integer, @@ -415,7 +415,7 @@ data ChatResponse | CRUserProfile {user :: User, profile :: Profile} | CRUserProfileNoChange {user :: User} | CRUserPrivacy {user :: User} - | CRVersionInfo {versionInfo :: CoreVersionInfo} + | CRVersionInfo {versionInfo :: CoreVersionInfo, chatMigrations :: [UpMigration], agentMigrations :: [UpMigration]} | CRInvitation {user :: User, connReqInvitation :: ConnReqInvitation} | CRSentConfirmation {user :: User} | CRSentInvitation {user :: User, customUserProfile :: Maybe Profile} diff --git a/src/Simplex/Chat/Core.hs b/src/Simplex/Chat/Core.hs index aa242a0899..a62ab5642b 100644 --- a/src/Simplex/Chat/Core.hs +++ b/src/Simplex/Chat/Core.hs @@ -11,18 +11,22 @@ import Simplex.Chat import Simplex.Chat.Controller import Simplex.Chat.Options (ChatOpts (..), CoreChatOpts (..)) import Simplex.Chat.Types +import System.Exit (exitFailure) import UnliftIO.Async simplexChatCore :: ChatConfig -> ChatOpts -> Maybe (Notification -> IO ()) -> (User -> ChatController -> IO ()) -> IO () -simplexChatCore cfg@ChatConfig {yesToMigrations} opts@ChatOpts {coreOptions = CoreChatOpts {dbFilePrefix, dbKey, logAgent}} sendToast chat = +simplexChatCore cfg@ChatConfig {confirmMigrations} opts@ChatOpts {coreOptions = CoreChatOpts {dbFilePrefix, dbKey, logAgent}} sendToast chat = case logAgent of Just level -> do setLogLevel level withGlobalLogging logCfg initRun _ -> initRun where - initRun = do - db@ChatDatabase {chatStore} <- createChatDatabase dbFilePrefix dbKey yesToMigrations + initRun = createChatDatabase dbFilePrefix dbKey confirmMigrations >>= either exit run + exit e = do + putStrLn $ "Error opening database: " <> show e + exitFailure + run db@ChatDatabase {chatStore} = do u <- getCreateActiveUser chatStore cc <- newChatController db (Just u) cfg opts sendToast runSimplexChat opts u cc chat diff --git a/src/Simplex/Chat/Migrations/M20230317_hidden_profiles.hs b/src/Simplex/Chat/Migrations/M20230317_hidden_profiles.hs index 27ae711a04..65e9cfeadd 100644 --- a/src/Simplex/Chat/Migrations/M20230317_hidden_profiles.hs +++ b/src/Simplex/Chat/Migrations/M20230317_hidden_profiles.hs @@ -12,3 +12,11 @@ ALTER TABLE users ADD COLUMN view_pwd_hash BLOB; ALTER TABLE users ADD COLUMN view_pwd_salt BLOB; ALTER TABLE users ADD COLUMN show_ntfs INTEGER NOT NULL DEFAULT 1; |] + +down_m20230317_hidden_profiles :: Query +down_m20230317_hidden_profiles = + [sql| +ALTER TABLE users DROP COLUMN view_pwd_hash; +ALTER TABLE users DROP COLUMN view_pwd_salt; +ALTER TABLE users DROP COLUMN show_ntfs; +|] diff --git a/src/Simplex/Chat/Migrations/chat_schema.sql b/src/Simplex/Chat/Migrations/chat_schema.sql index 1cb392f0ea..7eccb9a1ba 100644 --- a/src/Simplex/Chat/Migrations/chat_schema.sql +++ b/src/Simplex/Chat/Migrations/chat_schema.sql @@ -1,6 +1,7 @@ CREATE TABLE migrations( name TEXT NOT NULL, ts TEXT NOT NULL, + down TEXT, PRIMARY KEY(name) ); CREATE TABLE contact_profiles( diff --git a/src/Simplex/Chat/Mobile.hs b/src/Simplex/Chat/Mobile.hs index bbd5a475e3..04493351ea 100644 --- a/src/Simplex/Chat/Mobile.hs +++ b/src/Simplex/Chat/Mobile.hs @@ -12,6 +12,7 @@ import Control.Monad.Except import Control.Monad.Reader import Data.Aeson (ToJSON (..)) import qualified Data.Aeson as J +import Data.Bifunctor (first) import qualified Data.ByteString.Base64.URL as U import qualified Data.ByteString.Char8 as B import qualified Data.ByteString.Lazy.Char8 as LB @@ -37,26 +38,17 @@ import Simplex.Chat.Mobile.WebRTC import Simplex.Chat.Options import Simplex.Chat.Store import Simplex.Chat.Types -import Simplex.Messaging.Agent.Env.SQLite (AgentConfig (yesToMigrations), createAgentStore) -import Simplex.Messaging.Agent.Store.SQLite (closeSQLiteStore) +import Simplex.Messaging.Agent.Env.SQLite (createAgentStore) +import Simplex.Messaging.Agent.Store.SQLite (MigrationConfirmation (..), MigrationError) import Simplex.Messaging.Client (defaultNetworkConfig) import qualified Simplex.Messaging.Crypto as C import Simplex.Messaging.Encoding.String import Simplex.Messaging.Parsers (dropPrefix, sumTypeJSON) import Simplex.Messaging.Protocol (BasicAuth (..), CorrId (..), ProtoServerWithAuth (..), ProtocolServer (..), SMPServerWithAuth) -import Simplex.Messaging.Util (catchAll, safeDecodeUtf8) +import Simplex.Messaging.Util (catchAll, liftEitherWith, safeDecodeUtf8) import System.Timeout (timeout) -foreign export ccall "chat_migrate_init" cChatMigrateInit :: CString -> CString -> Ptr (StablePtr ChatController) -> IO CJSONString - --- TODO remove -foreign export ccall "chat_migrate_db" cChatMigrateDB :: CString -> CString -> IO CJSONString - --- chat_init is deprecated -foreign export ccall "chat_init" cChatInit :: CString -> IO (StablePtr ChatController) - --- TODO remove -foreign export ccall "chat_init_key" cChatInitKey :: CString -> CString -> IO (StablePtr ChatController) +foreign export ccall "chat_migrate_init" cChatMigrateInit :: CString -> CString -> CString -> Ptr (StablePtr ChatController) -> IO CJSONString foreign export ccall "chat_send_cmd" cChatSendCmd :: StablePtr ChatController -> CString -> IO CJSONString @@ -75,35 +67,17 @@ foreign export ccall "chat_encrypt_media" cChatEncryptMedia :: CString -> Ptr Wo foreign export ccall "chat_decrypt_media" cChatDecryptMedia :: CString -> Ptr Word8 -> CInt -> IO CString -- | check / migrate database and initialize chat controller on success -cChatMigrateInit :: CString -> CString -> Ptr (StablePtr ChatController) -> IO CJSONString -cChatMigrateInit fp key ctrl = do +cChatMigrateInit :: CString -> CString -> CString -> Ptr (StablePtr ChatController) -> IO CJSONString +cChatMigrateInit fp key conf ctrl = do dbPath <- peekCAString fp dbKey <- peekCAString key + confirm <- peekCAString conf r <- - chatMigrateInit dbPath dbKey >>= \case + chatMigrateInit dbPath dbKey confirm >>= \case Right cc -> (newStablePtr cc >>= poke ctrl) $> DBMOk Left e -> pure e newCAString . LB.unpack $ J.encode r --- | check and migrate the database --- This function validates that the encryption is correct and runs migrations - it should be called before cChatInitKey --- TODO remove -cChatMigrateDB :: CString -> CString -> IO CJSONString -cChatMigrateDB fp key = - ((,) <$> peekCAString fp <*> peekCAString key) >>= uncurry chatMigrateDB >>= newCAString . LB.unpack . J.encode - --- | initialize chat controller (deprecated) --- The active user has to be created and the chat has to be started before most commands can be used. -cChatInit :: CString -> IO (StablePtr ChatController) -cChatInit fp = peekCAString fp >>= chatInit >>= newStablePtr - --- | initialize chat controller with encrypted database --- The active user has to be created and the chat has to be started before most commands can be used. --- TODO remove -cChatInitKey :: CString -> CString -> IO (StablePtr ChatController) -cChatInitKey fp key = - ((,) <$> peekCAString fp <*> peekCAString key) >>= uncurry chatInitKey >>= newStablePtr - -- | send command to chat (same syntax as in terminal for now) cChatSendCmd :: StablePtr ChatController -> CString -> IO CJSONString cChatSendCmd cPtr cCmd = do @@ -159,10 +133,7 @@ mobileChatOpts dbFilePrefix dbKey = defaultMobileConfig :: ChatConfig defaultMobileConfig = - defaultChatConfig - { yesToMigrations = True, - agentConfig = (agentConfig defaultChatConfig) {yesToMigrations = True} - } + defaultChatConfig {confirmMigrations = MCYesUp} type CJSONString = CString @@ -171,60 +142,36 @@ getActiveUser_ st = find activeUser <$> withTransaction st getUsers data DBMigrationResult = DBMOk + | DBMInvalidConfirmation | DBMErrorNotADatabase {dbFile :: String} - | DBMError {dbFile :: String, migrationError :: String} + | DBMErrorMigration {dbFile :: String, migrationError :: MigrationError} + | DBMErrorSQL {dbFile :: String, migrationSQLError :: String} deriving (Show, Generic) instance ToJSON DBMigrationResult where toJSON = J.genericToJSON . sumTypeJSON $ dropPrefix "DBM" toEncoding = J.genericToEncoding . sumTypeJSON $ dropPrefix "DBM" -chatMigrateInit :: String -> String -> IO (Either DBMigrationResult ChatController) -chatMigrateInit dbFilePrefix dbKey = runExceptT $ do - chatStore <- migrate createChatStore $ chatStoreFile dbFilePrefix - agentStore <- migrate createAgentStore $ agentStoreFile dbFilePrefix +chatMigrateInit :: String -> String -> String -> IO (Either DBMigrationResult ChatController) +chatMigrateInit dbFilePrefix dbKey confirm = runExceptT $ do + confirmMigrations <- liftEitherWith (const DBMInvalidConfirmation) $ strDecode $ B.pack confirm + chatStore <- migrate createChatStore (chatStoreFile dbFilePrefix) confirmMigrations + agentStore <- migrate createAgentStore (agentStoreFile dbFilePrefix) confirmMigrations liftIO $ initialize chatStore ChatDatabase {chatStore, agentStore} where initialize st db = do user_ <- getActiveUser_ st newChatController db user_ defaultMobileConfig (mobileChatOpts dbFilePrefix dbKey) Nothing - migrate createStore dbFile = + migrate createStore dbFile confirmMigrations = ExceptT $ - (Right <$> createStore dbFile dbKey True) + (first (DBMErrorMigration dbFile) <$> createStore dbFile dbKey confirmMigrations) `catch` (pure . checkDBError) `catchAll` (pure . dbError) where checkDBError e = case sqlError e of DB.ErrorNotADatabase -> Left $ DBMErrorNotADatabase dbFile _ -> dbError e - dbError e = Left . DBMError dbFile $ show e - --- TODO remove -chatMigrateDB :: String -> String -> IO DBMigrationResult -chatMigrateDB dbFilePrefix dbKey = - migrate createChatStore (chatStoreFile dbFilePrefix) >>= \case - DBMOk -> migrate createAgentStore (agentStoreFile dbFilePrefix) - e -> pure e - where - migrate createStore dbFile = - ((createStore dbFile dbKey True >>= closeSQLiteStore) $> DBMOk) - `catch` (pure . checkDBError) - `catchAll` (pure . dbError) - where - checkDBError e = case sqlError e of - DB.ErrorNotADatabase -> DBMErrorNotADatabase dbFile - _ -> dbError e - dbError e = DBMError dbFile $ show e - -chatInit :: String -> IO ChatController -chatInit = (`chatInitKey` "") - --- TODO remove -chatInitKey :: String -> String -> IO ChatController -chatInitKey dbFilePrefix dbKey = do - db@ChatDatabase {chatStore} <- createChatDatabase dbFilePrefix dbKey True - user_ <- getActiveUser_ chatStore - newChatController db user_ defaultMobileConfig (mobileChatOpts dbFilePrefix dbKey) Nothing + dbError e = Left . DBMErrorSQL dbFile $ show e chatSendCmd :: ChatController -> String -> IO JSONString chatSendCmd cc s = LB.unpack . J.encode . APIResponse Nothing <$> runReaderT (execChatCommand $ B.pack s) cc diff --git a/src/Simplex/Chat/Store.hs b/src/Simplex/Chat/Store.hs index 56c8faf7bc..fef0fd90c4 100644 --- a/src/Simplex/Chat/Store.hs +++ b/src/Simplex/Chat/Store.hs @@ -23,6 +23,7 @@ module Simplex.Chat.Store UserContactLink (..), AutoAccept (..), createChatStore, + migrations, -- used in tests chatStoreFile, agentStoreFile, createUserRecord, @@ -273,10 +274,9 @@ import Data.Bifunctor (first) import qualified Data.ByteString.Base64 as B64 import Data.ByteString.Char8 (ByteString) import Data.Either (rights) -import Data.Function (on) import Data.Functor (($>)) import Data.Int (Int64) -import Data.List (sortBy, sortOn) +import Data.List (sortOn) import Data.List.NonEmpty (NonEmpty) import qualified Data.List.NonEmpty as L import Data.Maybe (fromMaybe, isJust, isNothing, listToMaybe, mapMaybe) @@ -353,7 +353,7 @@ import Simplex.Chat.Protocol import Simplex.Chat.Types import Simplex.Chat.Util (week) import Simplex.Messaging.Agent.Protocol (ACorrId, AgentMsgId, ConnId, InvitationId, MsgMeta (..), UserId) -import Simplex.Messaging.Agent.Store.SQLite (SQLiteStore (..), createSQLiteStore, firstRow, firstRow', maybeFirstRow, withTransaction) +import Simplex.Messaging.Agent.Store.SQLite (MigrationConfirmation, MigrationError, SQLiteStore (..), createSQLiteStore, firstRow, firstRow', maybeFirstRow, withTransaction) import Simplex.Messaging.Agent.Store.SQLite.Migrations (Migration (..)) import qualified Simplex.Messaging.Crypto as C import Simplex.Messaging.Parsers (dropPrefix, sumTypeJSON) @@ -362,71 +362,71 @@ import Simplex.Messaging.Transport.Client (TransportHost) import Simplex.Messaging.Util (eitherToMaybe, safeDecodeUtf8) import UnliftIO.STM -schemaMigrations :: [(String, Query)] +schemaMigrations :: [(String, Query, Maybe Query)] schemaMigrations = - [ ("20220101_initial", m20220101_initial), - ("20220122_v1_1", m20220122_v1_1), - ("20220205_chat_item_status", m20220205_chat_item_status), - ("20220210_deduplicate_contact_requests", m20220210_deduplicate_contact_requests), - ("20220224_messages_fks", m20220224_messages_fks), - ("20220301_smp_servers", m20220301_smp_servers), - ("20220302_profile_images", m20220302_profile_images), - ("20220304_msg_quotes", m20220304_msg_quotes), - ("20220321_chat_item_edited", m20220321_chat_item_edited), - ("20220404_files_status_fields", m20220404_files_status_fields), - ("20220514_profiles_user_id", m20220514_profiles_user_id), - ("20220626_auto_reply", m20220626_auto_reply), - ("20220702_calls", m20220702_calls), - ("20220715_groups_chat_item_id", m20220715_groups_chat_item_id), - ("20220811_chat_items_indices", m20220811_chat_items_indices), - ("20220812_incognito_profiles", m20220812_incognito_profiles), - ("20220818_chat_notifications", m20220818_chat_notifications), - ("20220822_groups_host_conn_custom_user_profile_id", m20220822_groups_host_conn_custom_user_profile_id), - ("20220823_delete_broken_group_event_chat_items", m20220823_delete_broken_group_event_chat_items), - ("20220824_profiles_local_alias", m20220824_profiles_local_alias), - ("20220909_commands", m20220909_commands), - ("20220926_connection_alias", m20220926_connection_alias), - ("20220928_settings", m20220928_settings), - ("20221001_shared_msg_id_indices", m20221001_shared_msg_id_indices), - ("20221003_delete_broken_integrity_error_chat_items", m20221003_delete_broken_integrity_error_chat_items), - ("20221004_idx_msg_deliveries_message_id", m20221004_idx_msg_deliveries_message_id), - ("20221011_user_contact_links_group_id", m20221011_user_contact_links_group_id), - ("20221012_inline_files", m20221012_inline_files), - ("20221019_unread_chat", m20221019_unread_chat), - ("20221021_auto_accept__group_links", m20221021_auto_accept__group_links), - ("20221024_contact_used", m20221024_contact_used), - ("20221025_chat_settings", m20221025_chat_settings), - ("20221029_group_link_id", m20221029_group_link_id), - ("20221112_server_password", m20221112_server_password), - ("20221115_server_cfg", m20221115_server_cfg), - ("20221129_delete_group_feature_items", m20221129_delete_group_feature_items), - ("20221130_delete_item_deleted", m20221130_delete_item_deleted), - ("20221209_verified_connection", m20221209_verified_connection), - ("20221210_idxs", m20221210_idxs), - ("20221211_group_description", m20221211_group_description), - ("20221212_chat_items_timed", m20221212_chat_items_timed), - ("20221214_live_message", m20221214_live_message), - ("20221222_chat_ts", m20221222_chat_ts), - ("20221223_idx_chat_items_item_status", m20221223_idx_chat_items_item_status), - ("20221230_idxs", m20221230_idxs), - ("20230107_connections_auth_err_counter", m20230107_connections_auth_err_counter), - ("20230111_users_agent_user_id", m20230111_users_agent_user_id), - ("20230117_fkey_indexes", m20230117_fkey_indexes), - ("20230118_recreate_smp_servers", m20230118_recreate_smp_servers), - ("20230129_drop_chat_items_group_idx", m20230129_drop_chat_items_group_idx), - ("20230206_item_deleted_by_group_member_id", m20230206_item_deleted_by_group_member_id), - ("20230303_group_link_role", m20230303_group_link_role), - ("20230317_hidden_profiles", m20230317_hidden_profiles) + [ ("20220101_initial", m20220101_initial, Nothing), + ("20220122_v1_1", m20220122_v1_1, Nothing), + ("20220205_chat_item_status", m20220205_chat_item_status, Nothing), + ("20220210_deduplicate_contact_requests", m20220210_deduplicate_contact_requests, Nothing), + ("20220224_messages_fks", m20220224_messages_fks, Nothing), + ("20220301_smp_servers", m20220301_smp_servers, Nothing), + ("20220302_profile_images", m20220302_profile_images, Nothing), + ("20220304_msg_quotes", m20220304_msg_quotes, Nothing), + ("20220321_chat_item_edited", m20220321_chat_item_edited, Nothing), + ("20220404_files_status_fields", m20220404_files_status_fields, Nothing), + ("20220514_profiles_user_id", m20220514_profiles_user_id, Nothing), + ("20220626_auto_reply", m20220626_auto_reply, Nothing), + ("20220702_calls", m20220702_calls, Nothing), + ("20220715_groups_chat_item_id", m20220715_groups_chat_item_id, Nothing), + ("20220811_chat_items_indices", m20220811_chat_items_indices, Nothing), + ("20220812_incognito_profiles", m20220812_incognito_profiles, Nothing), + ("20220818_chat_notifications", m20220818_chat_notifications, Nothing), + ("20220822_groups_host_conn_custom_user_profile_id", m20220822_groups_host_conn_custom_user_profile_id, Nothing), + ("20220823_delete_broken_group_event_chat_items", m20220823_delete_broken_group_event_chat_items, Nothing), + ("20220824_profiles_local_alias", m20220824_profiles_local_alias, Nothing), + ("20220909_commands", m20220909_commands, Nothing), + ("20220926_connection_alias", m20220926_connection_alias, Nothing), + ("20220928_settings", m20220928_settings, Nothing), + ("20221001_shared_msg_id_indices", m20221001_shared_msg_id_indices, Nothing), + ("20221003_delete_broken_integrity_error_chat_items", m20221003_delete_broken_integrity_error_chat_items, Nothing), + ("20221004_idx_msg_deliveries_message_id", m20221004_idx_msg_deliveries_message_id, Nothing), + ("20221011_user_contact_links_group_id", m20221011_user_contact_links_group_id, Nothing), + ("20221012_inline_files", m20221012_inline_files, Nothing), + ("20221019_unread_chat", m20221019_unread_chat, Nothing), + ("20221021_auto_accept__group_links", m20221021_auto_accept__group_links, Nothing), + ("20221024_contact_used", m20221024_contact_used, Nothing), + ("20221025_chat_settings", m20221025_chat_settings, Nothing), + ("20221029_group_link_id", m20221029_group_link_id, Nothing), + ("20221112_server_password", m20221112_server_password, Nothing), + ("20221115_server_cfg", m20221115_server_cfg, Nothing), + ("20221129_delete_group_feature_items", m20221129_delete_group_feature_items, Nothing), + ("20221130_delete_item_deleted", m20221130_delete_item_deleted, Nothing), + ("20221209_verified_connection", m20221209_verified_connection, Nothing), + ("20221210_idxs", m20221210_idxs, Nothing), + ("20221211_group_description", m20221211_group_description, Nothing), + ("20221212_chat_items_timed", m20221212_chat_items_timed, Nothing), + ("20221214_live_message", m20221214_live_message, Nothing), + ("20221222_chat_ts", m20221222_chat_ts, Nothing), + ("20221223_idx_chat_items_item_status", m20221223_idx_chat_items_item_status, Nothing), + ("20221230_idxs", m20221230_idxs, Nothing), + ("20230107_connections_auth_err_counter", m20230107_connections_auth_err_counter, Nothing), + ("20230111_users_agent_user_id", m20230111_users_agent_user_id, Nothing), + ("20230117_fkey_indexes", m20230117_fkey_indexes, Nothing), + ("20230118_recreate_smp_servers", m20230118_recreate_smp_servers, Nothing), + ("20230129_drop_chat_items_group_idx", m20230129_drop_chat_items_group_idx, Nothing), + ("20230206_item_deleted_by_group_member_id", m20230206_item_deleted_by_group_member_id, Nothing), + ("20230303_group_link_role", m20230303_group_link_role, Nothing), + ("20230317_hidden_profiles", m20230317_hidden_profiles, Just down_m20230317_hidden_profiles) -- ("20230304_file_description", m20230304_file_description) ] -- | The list of migrations in ascending order by date migrations :: [Migration] -migrations = sortBy (compare `on` name) $ map migration schemaMigrations +migrations = sortOn name $ map migration schemaMigrations where - migration (name, query) = Migration {name = name, up = fromQuery query} + migration (name, up, down) = Migration {name, up = fromQuery up, down = fromQuery <$> down} -createChatStore :: FilePath -> String -> Bool -> IO SQLiteStore +createChatStore :: FilePath -> String -> MigrationConfirmation -> IO (Either MigrationError SQLiteStore) createChatStore dbFilePath dbKey = createSQLiteStore dbFilePath dbKey migrations chatStoreFile :: FilePath -> FilePath diff --git a/src/Simplex/Chat/View.hs b/src/Simplex/Chat/View.hs index de787424a2..46912712e6 100644 --- a/src/Simplex/Chat/View.hs +++ b/src/Simplex/Chat/View.hs @@ -117,7 +117,7 @@ responseToView user_ ChatConfig {logLevel, testView} liveItems ts = \case CRUserProfile u p -> ttyUser u $ viewUserProfile p CRUserProfileNoChange u -> ttyUser u ["user profile did not change"] CRUserPrivacy u -> ttyUserPrefix u $ viewUserPrivacy u - CRVersionInfo info -> viewVersionInfo logLevel info + CRVersionInfo info _ _ -> viewVersionInfo logLevel info CRInvitation u cReq -> ttyUser u $ viewConnReqInvitation cReq CRSentConfirmation u -> ttyUser u ["confirmation sent!"] CRSentInvitation u customUserProfile -> ttyUser u $ viewSentInvitation customUserProfile testView diff --git a/stack.yaml b/stack.yaml index 62f9790955..ff289f8040 100644 --- a/stack.yaml +++ b/stack.yaml @@ -49,7 +49,7 @@ extra-deps: # - simplexmq-1.0.0@sha256:34b2004728ae396e3ae449cd090ba7410781e2b3cefc59259915f4ca5daa9ea8,8561 # - ../simplexmq - github: simplex-chat/simplexmq - commit: d41c2bec2af2aa77e7d671800c08c9760187dff9 + commit: 6a665a083387fe7145d161957f0fcab223a48838 - github: kazu-yamamoto/http2 commit: 78e18f52295a7f89e828539a03fbcb24931461a3 # - ../direct-sqlcipher diff --git a/tests/ChatClient.hs b/tests/ChatClient.hs index b914dd2e3b..d5f2d616e6 100644 --- a/tests/ChatClient.hs +++ b/tests/ChatClient.hs @@ -28,6 +28,7 @@ import Simplex.Chat.Terminal.Output (newChatTerminal) import Simplex.Chat.Types (AgentUserId (..), Profile, User (..)) import Simplex.Messaging.Agent.Env.SQLite import Simplex.Messaging.Agent.RetryInterval +import Simplex.Messaging.Agent.Store.SQLite (MigrationConfirmation (..)) import Simplex.Messaging.Client (ProtocolClientConfig (..), defaultNetworkConfig) import Simplex.Messaging.Server (runSMPServerBlocking) import Simplex.Messaging.Server.Env.STM @@ -118,13 +119,13 @@ testCfgV1 = testCfg {agentConfig = testAgentCfgV1} createTestChat :: FilePath -> ChatConfig -> ChatOpts -> String -> Profile -> IO TestCC createTestChat tmp cfg opts@ChatOpts {coreOptions = CoreChatOpts {dbKey}} dbPrefix profile = do - db@ChatDatabase {chatStore} <- createChatDatabase (tmp dbPrefix) dbKey False + Right db@ChatDatabase {chatStore} <- createChatDatabase (tmp dbPrefix) dbKey MCError Right user <- withTransaction chatStore $ \db' -> runExceptT $ createUserRecord db' (AgentUserId 1) profile True startTestChat_ db cfg opts user startTestChat :: FilePath -> ChatConfig -> ChatOpts -> String -> IO TestCC startTestChat tmp cfg opts@ChatOpts {coreOptions = CoreChatOpts {dbKey}} dbPrefix = do - db@ChatDatabase {chatStore} <- createChatDatabase (tmp dbPrefix) dbKey False + Right db@ChatDatabase {chatStore} <- createChatDatabase (tmp dbPrefix) dbKey MCError Just user <- find activeUser <$> withTransaction chatStore getUsers startTestChat_ db cfg opts user diff --git a/tests/MobileTests.hs b/tests/MobileTests.hs index 432f2c0243..feaed08a8d 100644 --- a/tests/MobileTests.hs +++ b/tests/MobileTests.hs @@ -7,6 +7,7 @@ import Control.Monad.Except import Simplex.Chat.Mobile import Simplex.Chat.Store import Simplex.Chat.Types (AgentUserId (..), Profile (..)) +import Simplex.Messaging.Agent.Store.SQLite (MigrationConfirmation (..)) import System.FilePath (()) import Test.Hspec @@ -85,8 +86,8 @@ parsedMarkdown = "{\"formattedText\":[{\"format\":{\"type\":\"bold\"},\"text\":\ testChatApiNoUser :: FilePath -> IO () testChatApiNoUser tmp = do let dbPrefix = tmp "1" - Right cc <- chatMigrateInit dbPrefix "" - Left (DBMErrorNotADatabase _) <- chatMigrateInit dbPrefix "myKey" + Right cc <- chatMigrateInit dbPrefix "" "yesUp" + Left (DBMErrorNotADatabase _) <- chatMigrateInit dbPrefix "myKey" "yesUp" chatSendCmd cc "/u" `shouldReturn` noActiveUser chatSendCmd cc "/_start" `shouldReturn` noActiveUser chatSendCmd cc "/create user alice Alice" `shouldReturn` activeUser @@ -96,11 +97,11 @@ testChatApi :: FilePath -> IO () testChatApi tmp = do let dbPrefix = tmp "1" f = chatStoreFile dbPrefix - st <- createChatStore f "myKey" True + Right st <- createChatStore f "myKey" MCYesUp Right _ <- withTransaction st $ \db -> runExceptT $ createUserRecord db (AgentUserId 1) aliceProfile {preferences = Nothing} True - Right cc <- chatMigrateInit dbPrefix "myKey" - Left (DBMErrorNotADatabase _) <- chatMigrateInit dbPrefix "" - Left (DBMErrorNotADatabase _) <- chatMigrateInit dbPrefix "anotherKey" + Right cc <- chatMigrateInit dbPrefix "myKey" "yesUp" + Left (DBMErrorNotADatabase _) <- chatMigrateInit dbPrefix "" "yesUp" + Left (DBMErrorNotADatabase _) <- chatMigrateInit dbPrefix "anotherKey" "yesUp" chatSendCmd cc "/u" `shouldReturn` activeUser chatSendCmd cc "/create user alice Alice" `shouldReturn` activeUserExists chatSendCmd cc "/_start" `shouldReturn` chatStarted diff --git a/tests/SchemaDump.hs b/tests/SchemaDump.hs index 4cb2662014..96197f1295 100644 --- a/tests/SchemaDump.hs +++ b/tests/SchemaDump.hs @@ -1,3 +1,4 @@ +{-# LANGUAGE NamedFieldPuns #-} {-# LANGUAGE OverloadedStrings #-} module SchemaDump where @@ -5,26 +6,63 @@ module SchemaDump where import ChatClient (withTmpFiles) import Control.DeepSeq import Control.Monad (void) +import Data.List (dropWhileEnd) +import Data.Maybe (fromJust, isJust) import Simplex.Chat.Store (createChatStore) +import qualified Simplex.Chat.Store as Store +import Simplex.Messaging.Agent.Store.SQLite (MigrationConfirmation (..), closeSQLiteStore, createSQLiteStore, withConnection) +import Simplex.Messaging.Agent.Store.SQLite.Migrations (Migration (..), MigrationsToRun (..), toDownMigration) +import qualified Simplex.Messaging.Agent.Store.SQLite.Migrations as Migrations +import Simplex.Messaging.Util (ifM) +import System.Directory (doesFileExist, removeFile) import System.Process (readCreateProcess, shell) import Test.Hspec testDB :: FilePath testDB = "tests/tmp/test_chat.db" -schema :: FilePath -schema = "src/Simplex/Chat/Migrations/chat_schema.sql" +appSchema :: FilePath +appSchema = "src/Simplex/Chat/Migrations/chat_schema.sql" + +testSchema :: FilePath +testSchema = "tests/tmp/test_agent_schema.sql" schemaDumpTest :: Spec -schemaDumpTest = +schemaDumpTest = do it "verify and overwrite schema dump" testVerifySchemaDump + it "verify schema down migrations" testSchemaMigrations testVerifySchemaDump :: IO () testVerifySchemaDump = withTmpFiles $ do - void $ createChatStore testDB "" False - void $ readCreateProcess (shell $ "touch " <> schema) "" - savedSchema <- readFile schema + savedSchema <- ifM (doesFileExist appSchema) (readFile appSchema) (pure "") savedSchema `deepseq` pure () - void $ readCreateProcess (shell $ "sqlite3 " <> testDB <> " '.schema --indent' > " <> schema) "" - currentSchema <- readFile schema - savedSchema `shouldBe` currentSchema + void $ createChatStore testDB "" MCError + getSchema testDB appSchema `shouldReturn` savedSchema + removeFile testDB + +testSchemaMigrations :: IO () +testSchemaMigrations = withTmpFiles $ do + let noDownMigrations = dropWhileEnd (\Migration {down} -> isJust down) Store.migrations + Right st <- createSQLiteStore testDB "" noDownMigrations MCError + mapM_ (testDownMigration st) $ drop (length noDownMigrations) Store.migrations + closeSQLiteStore st + removeFile testDB + removeFile testSchema + where + testDownMigration st m = do + putStrLn $ "down migration " <> name m + let downMigr = fromJust $ toDownMigration m + schema <- getSchema testDB testSchema + withConnection st (`Migrations.run` MTRUp [m]) + schema' <- getSchema testDB testSchema + schema' `shouldNotBe` schema + withConnection st (`Migrations.run` MTRDown [downMigr]) + schema'' <- getSchema testDB testSchema + schema'' `shouldBe` schema + withConnection st (`Migrations.run` MTRUp [m]) + +getSchema :: FilePath -> FilePath -> IO String +getSchema dpPath schemaPath = do + void $ readCreateProcess (shell $ "sqlite3 " <> dpPath <> " '.schema --indent' > " <> schemaPath) "" + sch <- readFile schemaPath + sch `deepseq` pure sch

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�)(yNzmvQQR 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%0AeUUkCpI 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