android, desktop: ability to delete the last profile (#3645)
* android, desktop: ability to delete the last profile * hide modals to see onboarding after removing the last visible user * removed unused checks * make multiple profile creation usable * deleting the last user by removing the whole database * adapted to new logic * changes * not deleting the whole database * refactor * hide search when no profile * changes
This commit is contained in:
parent
ddcd7d495e
commit
c4d75366b5
@ -152,7 +152,7 @@ object ChatModel {
|
||||
|
||||
fun removeUser(user: User) {
|
||||
val i = getUserIndex(user)
|
||||
if (i != -1 && users[i].user.userId != currentUser.value?.userId) {
|
||||
if (i != -1) {
|
||||
users.removeAt(i)
|
||||
}
|
||||
}
|
||||
|
@ -351,7 +351,6 @@ object ChatController {
|
||||
suspend fun startChat(user: User) {
|
||||
Log.d(TAG, "user: $user")
|
||||
try {
|
||||
if (chatModel.chatRunning.value == true) return
|
||||
apiSetNetworkConfig(getNetCfg())
|
||||
val justStarted = apiStartChat()
|
||||
appPrefs.chatStopped.set(false)
|
||||
@ -410,9 +409,9 @@ object ChatController {
|
||||
}
|
||||
}
|
||||
|
||||
suspend fun changeActiveUser_(rhId: Long?, toUserId: Long, viewPwd: String?) {
|
||||
suspend fun changeActiveUser_(rhId: Long?, toUserId: Long?, viewPwd: String?) {
|
||||
val currentUser = changingActiveUserMutex.withLock {
|
||||
apiSetActiveUser(rhId, toUserId, viewPwd).also {
|
||||
(if (toUserId != null) apiSetActiveUser(rhId, toUserId, viewPwd) else apiGetActiveUser(rhId)).also {
|
||||
chatModel.currentUser.value = it
|
||||
}
|
||||
}
|
||||
@ -421,7 +420,7 @@ object ChatController {
|
||||
chatModel.users.addAll(users)
|
||||
getUserChatData(rhId)
|
||||
val invitation = chatModel.callInvitations.values.firstOrNull { inv -> inv.user.userId == toUserId }
|
||||
if (invitation != null) {
|
||||
if (invitation != null && currentUser != null) {
|
||||
chatModel.callManager.reportNewIncomingCall(invitation.copy(user = currentUser))
|
||||
}
|
||||
}
|
||||
|
@ -177,8 +177,10 @@ fun CreateFirstProfile(chatModel: ChatModel, close: () -> Unit) {
|
||||
fun createProfileInNoProfileSetup(displayName: String, close: () -> Unit) {
|
||||
withBGApi {
|
||||
val user = controller.apiCreateActiveUser(null, Profile(displayName.trim(), "", null)) ?: return@withBGApi
|
||||
if (!chatModel.connectedToRemote()) {
|
||||
chatModel.localUserCreated.value = true
|
||||
}
|
||||
controller.appPrefs.onboardingStage.set(OnboardingStage.Step3_CreateSimpleXAddress)
|
||||
chatModel.chatRunning.value = false
|
||||
controller.startChat(user)
|
||||
controller.switchUIRemoteHost(null)
|
||||
close()
|
||||
@ -210,6 +212,7 @@ fun createProfileOnboarding(chatModel: ChatModel, displayName: String, close: ()
|
||||
chatModel.currentUser.value = chatModel.controller.apiCreateActiveUser(
|
||||
null, Profile(displayName.trim(), "", null)
|
||||
) ?: return@withBGApi
|
||||
chatModel.localUserCreated.value = true
|
||||
val onboardingStage = chatModel.controller.appPrefs.onboardingStage
|
||||
if (chatModel.users.isEmpty()) {
|
||||
onboardingStage.set(if (appPlatform.isDesktop && chatModel.controller.appPrefs.initialRandomDBPassphrase.get() && !chatModel.desktopOnboardingRandomPassword.value) {
|
||||
|
@ -107,7 +107,9 @@ fun ChatListView(chatModel: ChatModel, settingsState: SettingsViewState, setPerf
|
||||
modifier = Modifier
|
||||
.fillMaxSize()
|
||||
) {
|
||||
ChatList(chatModel, searchText = searchText)
|
||||
if (!chatModel.desktopNoUserNoRemote) {
|
||||
ChatList(chatModel, searchText = searchText)
|
||||
}
|
||||
if (chatModel.chats.isEmpty() && !chatModel.switchingUsersAndHosts.value && !chatModel.desktopNoUserNoRemote) {
|
||||
Text(stringResource(
|
||||
if (chatModel.chatRunning.value == null) MR.strings.loading_chats else MR.strings.you_have_no_chats), Modifier.align(Alignment.Center), color = MaterialTheme.colors.secondary)
|
||||
|
@ -213,26 +213,29 @@ fun UserPicker(
|
||||
userPickerState.value = AnimatedViewState.GONE
|
||||
}
|
||||
Divider(Modifier.requiredHeight(1.dp))
|
||||
} else if (remoteHosts.isEmpty()) {
|
||||
LinkAMobilePickerItem {
|
||||
ModalManager.start.showModal {
|
||||
ConnectMobileView()
|
||||
} else {
|
||||
if (remoteHosts.isEmpty()) {
|
||||
LinkAMobilePickerItem {
|
||||
ModalManager.start.showModal {
|
||||
ConnectMobileView()
|
||||
}
|
||||
userPickerState.value = AnimatedViewState.GONE
|
||||
}
|
||||
userPickerState.value = AnimatedViewState.GONE
|
||||
Divider(Modifier.requiredHeight(1.dp))
|
||||
}
|
||||
Divider(Modifier.requiredHeight(1.dp))
|
||||
} else if (chatModel.desktopNoUserNoRemote) {
|
||||
CreateInitialProfile {
|
||||
doWithAuth(generalGetString(MR.strings.auth_open_chat_profiles), generalGetString(MR.strings.auth_log_in_using_credential)) {
|
||||
ModalManager.center.showModalCloseable { close ->
|
||||
LaunchedEffect(Unit) {
|
||||
userPickerState.value = AnimatedViewState.HIDING
|
||||
if (chatModel.desktopNoUserNoRemote) {
|
||||
CreateInitialProfile {
|
||||
doWithAuth(generalGetString(MR.strings.auth_open_chat_profiles), generalGetString(MR.strings.auth_log_in_using_credential)) {
|
||||
ModalManager.center.showModalCloseable { close ->
|
||||
LaunchedEffect(Unit) {
|
||||
userPickerState.value = AnimatedViewState.HIDING
|
||||
}
|
||||
CreateProfile(chat.simplex.common.platform.chatModel, close)
|
||||
}
|
||||
CreateProfile(chat.simplex.common.platform.chatModel, close)
|
||||
}
|
||||
}
|
||||
Divider(Modifier.requiredHeight(1.dp))
|
||||
}
|
||||
Divider(Modifier.requiredHeight(1.dp))
|
||||
}
|
||||
if (showSettings) {
|
||||
SettingsPickerItem(settingsClicked)
|
||||
|
@ -470,10 +470,10 @@ suspend fun deleteChatAsync(m: ChatModel) {
|
||||
m.controller.apiDeleteStorage()
|
||||
DatabaseUtils.ksDatabasePassword.remove()
|
||||
m.controller.appPrefs.storeDBPassphrase.set(true)
|
||||
deleteAppDatabaseAndFiles()
|
||||
deleteChatDatabaseFilesAndState()
|
||||
}
|
||||
|
||||
fun deleteAppDatabaseAndFiles() {
|
||||
fun deleteChatDatabaseFilesAndState() {
|
||||
val chat = File(dataDir, chatDatabaseFileName)
|
||||
val chatBak = File(dataDir, "$chatDatabaseFileName.bak")
|
||||
val agent = File(dataDir, agentDatabaseFileName)
|
||||
@ -489,6 +489,13 @@ fun deleteAppDatabaseAndFiles() {
|
||||
tmpDir.mkdir()
|
||||
DatabaseUtils.ksDatabasePassword.remove()
|
||||
controller.appPrefs.storeDBPassphrase.set(true)
|
||||
controller.ctrl = null
|
||||
|
||||
// Clear sensitive data on screen just in case ModalManager will fail to prevent hiding its modals while database encrypts itself
|
||||
chatModel.chatId.value = null
|
||||
chatModel.chatItems.clear()
|
||||
chatModel.chats.clear()
|
||||
chatModel.users.clear()
|
||||
}
|
||||
|
||||
private fun exportArchive(
|
||||
|
@ -67,12 +67,7 @@ private fun deleteStorageAndRestart(m: ChatModel, password: String, completed: (
|
||||
* */
|
||||
chatCloseStore(ctrl)
|
||||
}
|
||||
deleteAppDatabaseAndFiles()
|
||||
// Clear sensitive data on screen just in case ModalManager fails to hide its modals while new database is created
|
||||
m.chatId.value = null
|
||||
m.chatItems.clear()
|
||||
m.chats.clear()
|
||||
m.users.clear()
|
||||
deleteChatDatabaseFilesAndState()
|
||||
ksAppPassword.set(password)
|
||||
ksSelfDestructPassword.remove()
|
||||
ntfManager.cancelAllNotifications()
|
||||
@ -81,14 +76,7 @@ private fun deleteStorageAndRestart(m: ChatModel, password: String, completed: (
|
||||
val displayName = displayNamePref.get()
|
||||
selfDestructPref.set(false)
|
||||
displayNamePref.set(null)
|
||||
m.chatDbChanged.value = true
|
||||
m.chatDbStatus.value = null
|
||||
try {
|
||||
initChatController()
|
||||
} catch (e: Exception) {
|
||||
Log.d(TAG, "initializeChat ${e.stackTraceToString()}")
|
||||
}
|
||||
m.chatDbChanged.value = false
|
||||
reinitChatController()
|
||||
if (m.currentUser.value != null) {
|
||||
return@withBGApi
|
||||
}
|
||||
@ -100,7 +88,6 @@ private fun deleteStorageAndRestart(m: ChatModel, password: String, completed: (
|
||||
m.currentUser.value = createdUser
|
||||
m.controller.appPrefs.onboardingStage.set(OnboardingStage.OnboardingComplete)
|
||||
if (createdUser != null) {
|
||||
controller.chatModel.chatRunning.value = false
|
||||
m.controller.startChat(createdUser)
|
||||
}
|
||||
ModalManager.closeAllModalsEverywhere()
|
||||
@ -113,3 +100,14 @@ private fun deleteStorageAndRestart(m: ChatModel, password: String, completed: (
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
suspend fun reinitChatController() {
|
||||
chatModel.chatDbChanged.value = true
|
||||
chatModel.chatDbStatus.value = null
|
||||
try {
|
||||
initChatController()
|
||||
} catch (e: Exception) {
|
||||
Log.d(TAG, "initializeChat ${e.stackTraceToString()}")
|
||||
}
|
||||
chatModel.chatDbChanged.value = false
|
||||
}
|
||||
|
@ -173,17 +173,6 @@ private fun prepareChatBeforeAddressCreation(rhId: Long?) {
|
||||
withBGApi {
|
||||
val user = chatModel.controller.apiGetActiveUser(rhId) ?: return@withBGApi
|
||||
chatModel.currentUser.value = user
|
||||
if (chatModel.users.isEmpty()) {
|
||||
if (appPlatform.isDesktop) {
|
||||
// Make possible to use chat after going to remote device linking and returning back to local profile creation
|
||||
chatModel.chatRunning.value = false
|
||||
}
|
||||
chatModel.controller.startChat(user)
|
||||
} else {
|
||||
val users = chatModel.controller.listUsers(rhId)
|
||||
chatModel.users.clear()
|
||||
chatModel.users.addAll(users)
|
||||
chatModel.controller.getUserChatData(rhId)
|
||||
}
|
||||
chatModel.controller.startChat(user)
|
||||
}
|
||||
}
|
||||
|
@ -33,7 +33,7 @@ import chat.simplex.common.views.onboarding.WhatsNewView
|
||||
import chat.simplex.common.views.remote.ConnectDesktopView
|
||||
import chat.simplex.common.views.remote.ConnectMobileView
|
||||
import chat.simplex.res.MR
|
||||
import kotlinx.coroutines.launch
|
||||
import kotlinx.coroutines.*
|
||||
|
||||
@Composable
|
||||
fun SettingsView(chatModel: ChatModel, setPerformLA: (Boolean) -> Unit, drawerState: DrawerState) {
|
||||
@ -119,7 +119,7 @@ fun SettingsLayout(
|
||||
SectionItemView(showCustomModal { chatModel, close -> UserProfileView(chatModel, close) }, 80.dp, padding = PaddingValues(start = 16.dp, end = DEFAULT_PADDING), disabled = stopped) {
|
||||
ProfilePreview(profile, stopped = stopped)
|
||||
}
|
||||
SettingsActionItem(painterResource(MR.images.ic_manage_accounts), stringResource(MR.strings.your_chat_profiles), { withAuth(generalGetString(MR.strings.auth_open_chat_profiles), generalGetString(MR.strings.auth_log_in_using_credential)) { showSettingsModalWithSearch { it, search -> UserProfilesView(it, search, profileHidden) } } }, disabled = stopped, extraPadding = true)
|
||||
SettingsActionItem(painterResource(MR.images.ic_manage_accounts), stringResource(MR.strings.your_chat_profiles), { withAuth(generalGetString(MR.strings.auth_open_chat_profiles), generalGetString(MR.strings.auth_log_in_using_credential)) { showSettingsModalWithSearch { it, search -> UserProfilesView(it, search, profileHidden, drawerState) } } }, disabled = stopped, extraPadding = true)
|
||||
SettingsActionItem(painterResource(MR.images.ic_qr_code), stringResource(MR.strings.your_simplex_contact_address), showCustomModal { it, close -> UserAddressView(it, shareViaProfile = it.currentUser.value!!.addressShared, close = close) }, disabled = stopped, extraPadding = true)
|
||||
ChatPreferencesItem(showCustomModal, stopped = stopped)
|
||||
} else if (chatModel.localUserCreated.value == false) {
|
||||
|
@ -27,18 +27,20 @@ import chat.simplex.common.ui.theme.*
|
||||
import chat.simplex.common.views.chat.item.ItemAction
|
||||
import chat.simplex.common.views.chatlist.UserProfilePickerItem
|
||||
import chat.simplex.common.views.chatlist.UserProfileRow
|
||||
import chat.simplex.common.views.database.PassphraseField
|
||||
import chat.simplex.common.views.helpers.*
|
||||
import chat.simplex.common.views.CreateProfile
|
||||
import chat.simplex.common.views.database.*
|
||||
import chat.simplex.common.views.onboarding.OnboardingStage
|
||||
import chat.simplex.res.MR
|
||||
import dev.icerock.moko.resources.StringResource
|
||||
import kotlinx.coroutines.delay
|
||||
import kotlinx.coroutines.*
|
||||
|
||||
@Composable
|
||||
fun UserProfilesView(m: ChatModel, search: MutableState<String>, profileHidden: MutableState<Boolean>) {
|
||||
fun UserProfilesView(m: ChatModel, search: MutableState<String>, profileHidden: MutableState<Boolean>, drawerState: DrawerState) {
|
||||
val searchTextOrPassword = rememberSaveable { search }
|
||||
val users by remember { derivedStateOf { m.users.map { it.user } } }
|
||||
val filteredUsers by remember { derivedStateOf { filteredUsers(m, searchTextOrPassword.value) } }
|
||||
val scope = rememberCoroutineScope()
|
||||
UserProfilesLayout(
|
||||
users = users,
|
||||
filteredUsers = filteredUsers,
|
||||
@ -49,6 +51,12 @@ fun UserProfilesView(m: ChatModel, search: MutableState<String>, profileHidden:
|
||||
addUser = {
|
||||
ModalManager.center.showModalCloseable { close ->
|
||||
CreateProfile(m, close)
|
||||
if (appPlatform.isDesktop) {
|
||||
// Hide settings to allow clicks to pass through to CreateProfile view
|
||||
DisposableEffectOnGone(always = { scope.launch { drawerState.close() } }) {
|
||||
// Show settings again to allow intercept clicks to close modals after profile creation finishes
|
||||
scope.launch(NonCancellable) { drawerState.open() } }
|
||||
}
|
||||
}
|
||||
},
|
||||
activateUser = { user ->
|
||||
@ -63,45 +71,34 @@ fun UserProfilesView(m: ChatModel, search: MutableState<String>, profileHidden:
|
||||
}
|
||||
},
|
||||
removeUser = { user ->
|
||||
if (m.users.size > 1 && (user.hidden || visibleUsersCount(m) > 1)) {
|
||||
val text = buildAnnotatedString {
|
||||
append(generalGetString(MR.strings.users_delete_all_chats_deleted) + "\n\n" + generalGetString(MR.strings.users_delete_profile_for) + " ")
|
||||
withStyle(SpanStyle(fontWeight = FontWeight.Bold)) {
|
||||
append(user.displayName)
|
||||
}
|
||||
append(":")
|
||||
val text = buildAnnotatedString {
|
||||
append(generalGetString(MR.strings.users_delete_all_chats_deleted) + "\n\n" + generalGetString(MR.strings.users_delete_profile_for) + " ")
|
||||
withStyle(SpanStyle(fontWeight = FontWeight.Bold)) {
|
||||
append(user.displayName)
|
||||
}
|
||||
AlertManager.shared.showAlertDialogButtonsColumn(
|
||||
title = generalGetString(MR.strings.users_delete_question),
|
||||
text = text,
|
||||
buttons = {
|
||||
Column {
|
||||
SectionItemView({
|
||||
AlertManager.shared.hideAlert()
|
||||
removeUser(m, user, users, true, searchTextOrPassword.value.trim())
|
||||
}) {
|
||||
Text(stringResource(MR.strings.users_delete_with_connections), Modifier.fillMaxWidth(), textAlign = TextAlign.Center, color = Color.Red)
|
||||
}
|
||||
SectionItemView({
|
||||
AlertManager.shared.hideAlert()
|
||||
removeUser(m, user, users, false, searchTextOrPassword.value.trim())
|
||||
}
|
||||
) {
|
||||
Text(stringResource(MR.strings.users_delete_data_only), Modifier.fillMaxWidth(), textAlign = TextAlign.Center, color = Color.Red)
|
||||
}
|
||||
append(":")
|
||||
}
|
||||
AlertManager.shared.showAlertDialogButtonsColumn(
|
||||
title = generalGetString(MR.strings.users_delete_question),
|
||||
text = text,
|
||||
buttons = {
|
||||
Column {
|
||||
SectionItemView({
|
||||
AlertManager.shared.hideAlert()
|
||||
removeUser(m, user, users, true, searchTextOrPassword.value.trim())
|
||||
}) {
|
||||
Text(stringResource(MR.strings.users_delete_with_connections), Modifier.fillMaxWidth(), textAlign = TextAlign.Center, color = Color.Red)
|
||||
}
|
||||
SectionItemView({
|
||||
AlertManager.shared.hideAlert()
|
||||
removeUser(m, user, users, false, searchTextOrPassword.value.trim())
|
||||
}
|
||||
) {
|
||||
Text(stringResource(MR.strings.users_delete_data_only), Modifier.fillMaxWidth(), textAlign = TextAlign.Center, color = Color.Red)
|
||||
}
|
||||
}
|
||||
)
|
||||
} else {
|
||||
AlertManager.shared.showAlertMsg(
|
||||
title = generalGetString(MR.strings.cant_delete_user_profile),
|
||||
text = if (m.users.size > 1) {
|
||||
generalGetString(MR.strings.should_be_at_least_one_visible_profile)
|
||||
} else {
|
||||
generalGetString(MR.strings.should_be_at_least_one_profile)
|
||||
}
|
||||
)
|
||||
}
|
||||
}
|
||||
)
|
||||
},
|
||||
unhideUser = { user ->
|
||||
if (passwordEntryRequired(user, searchTextOrPassword.value)) {
|
||||
@ -178,7 +175,7 @@ private fun UserProfilesLayout(
|
||||
|
||||
SectionView {
|
||||
for (user in filteredUsers) {
|
||||
UserView(user, users, visibleUsersCount, activateUser, removeUser, unhideUser, muteUser, unmuteUser, showHiddenProfile)
|
||||
UserView(user, visibleUsersCount, activateUser, removeUser, unhideUser, muteUser, unmuteUser, showHiddenProfile)
|
||||
SectionDivider()
|
||||
}
|
||||
if (searchTextOrPassword.value.trim().isEmpty()) {
|
||||
@ -210,7 +207,6 @@ private fun UserProfilesLayout(
|
||||
@Composable
|
||||
private fun UserView(
|
||||
user: User,
|
||||
users: List<User>,
|
||||
visibleUsersCount: Int,
|
||||
activateUser: (User) -> Unit,
|
||||
removeUser: (User) -> Unit,
|
||||
@ -220,7 +216,7 @@ private fun UserView(
|
||||
showHiddenProfile: (User) -> Unit,
|
||||
) {
|
||||
val showMenu = remember { mutableStateOf(false) }
|
||||
UserProfilePickerItem(user, onLongClick = { if (users.size > 1) showMenu.value = true }) {
|
||||
UserProfilePickerItem(user, onLongClick = { showMenu.value = true }) {
|
||||
activateUser(user)
|
||||
}
|
||||
Box(Modifier.padding(horizontal = DEFAULT_PADDING)) {
|
||||
@ -350,22 +346,28 @@ private fun removeUser(m: ChatModel, user: User, users: List<User>, delSMPQueues
|
||||
}
|
||||
|
||||
private suspend fun doRemoveUser(m: ChatModel, user: User, users: List<User>, delSMPQueues: Boolean, viewPwd: String?) {
|
||||
if (users.size < 2) return
|
||||
|
||||
suspend fun deleteUser(user: User) {
|
||||
m.controller.apiDeleteUser(user, delSMPQueues, viewPwd)
|
||||
m.removeUser(user)
|
||||
}
|
||||
try {
|
||||
if (user.activeUser) {
|
||||
val newActive = users.firstOrNull { u -> !u.activeUser && !u.hidden }
|
||||
if (newActive != null) {
|
||||
m.controller.changeActiveUser_(newActive.remoteHostId, newActive.userId, null)
|
||||
deleteUser(user.copy(activeUser = false))
|
||||
when {
|
||||
user.activeUser -> {
|
||||
val newActive = users.firstOrNull { u -> !u.activeUser && !u.hidden }
|
||||
if (newActive != null) {
|
||||
m.controller.changeActiveUser_(user.remoteHostId, newActive.userId, null)
|
||||
m.controller.apiDeleteUser(user, delSMPQueues, viewPwd)
|
||||
} else {
|
||||
// Deleting the last visible user while having hidden one(s)
|
||||
m.controller.apiDeleteUser(user, delSMPQueues, viewPwd)
|
||||
m.controller.changeActiveUser_(user.remoteHostId, null, null)
|
||||
if (appPlatform.isAndroid) {
|
||||
controller.appPrefs.onboardingStage.set(OnboardingStage.Step1_SimpleXInfo)
|
||||
ModalManager.closeAllModalsEverywhere()
|
||||
}
|
||||
}
|
||||
}
|
||||
else -> {
|
||||
m.controller.apiDeleteUser(user, delSMPQueues, viewPwd)
|
||||
}
|
||||
} else {
|
||||
deleteUser(user)
|
||||
}
|
||||
m.removeUser(user)
|
||||
} catch (e: Exception) {
|
||||
AlertManager.shared.showAlertMsg(generalGetString(MR.strings.error_deleting_user), e.stackTraceToString())
|
||||
}
|
||||
|
@ -145,7 +145,6 @@
|
||||
<string name="settings_section_title_calls">المكالمات</string>
|
||||
<string name="alert_title_cant_invite_contacts">لا يمكن دعوة جهات الاتصال!</string>
|
||||
<string name="rcv_conn_event_switch_queue_phase_completed">تم تغيير العنوان من أجلك</string>
|
||||
<string name="cant_delete_user_profile">لا يمكن حذف ملف تعريف المستخدم!</string>
|
||||
<string name="icon_descr_video_asked_to_receive">طلب لاستلام الفيديو</string>
|
||||
<string name="callstatus_in_progress">مكالمتك تحت الإجراء</string>
|
||||
<string name="change_database_passphrase_question">تغيير عبارة مرور قاعدة البيانات؟</string>
|
||||
@ -1127,7 +1126,6 @@
|
||||
<string name="database_initialization_error_desc">قاعدة البيانات لا تعمل بشكل صحيح. انقر لمعرفة المزيد</string>
|
||||
<string name="theme_colors_section_title">ألوان السمة</string>
|
||||
<string name="tap_to_activate_profile">انقر لتنشيط الملف الشخصي.</string>
|
||||
<string name="should_be_at_least_one_profile">يجب أن يكون هناك ملف تعريف مستخدم واحد على الأقل.</string>
|
||||
<string name="v4_5_transport_isolation">عزل النقل</string>
|
||||
<string name="this_string_is_not_a_connection_link">هذه السلسلة ليست رابط اتصال!</string>
|
||||
<string name="receipts_section_description">هذه الإعدادات لملف التعريف الحالي الخاص بك</string>
|
||||
@ -1138,7 +1136,6 @@
|
||||
<string name="whats_new_thanks_to_users_contribute_weblate">بفضل المستخدمين - المساهمة عبر Weblate!</string>
|
||||
<string name="database_backup_can_be_restored">لم تكتمل محاولة تغيير عبارة مرور قاعدة البيانات.</string>
|
||||
<string name="enter_passphrase_notification_desc">لتلقي الإشعارات، يرجى إدخال عبارة مرور قاعدة البيانات</string>
|
||||
<string name="should_be_at_least_one_visible_profile">يجب أن يكون هناك ملف تعريف مستخدم مرئي واحد على الأقل.</string>
|
||||
<string name="la_lock_mode_system">مصادقة النظام</string>
|
||||
<string name="sync_connection_force_desc">يعمل التشفير واتفاقية التشفير الجديدة غير مطلوبة. قد ينتج عن ذلك أخطاء في الاتصال!</string>
|
||||
<string name="image_decoding_exception_desc">لا يمكن فك ترميز الصورة. من فضلك، جرب صورة مختلفة أو تواصل مع المطورين.</string>
|
||||
|
@ -1413,9 +1413,6 @@
|
||||
<string name="user_unmute">Unmute</string>
|
||||
<string name="enter_password_to_show">Enter password in search</string>
|
||||
<string name="tap_to_activate_profile">Tap to activate profile.</string>
|
||||
<string name="cant_delete_user_profile">Can\'t delete user profile!</string>
|
||||
<string name="should_be_at_least_one_visible_profile">There should be at least one visible user profile.</string>
|
||||
<string name="should_be_at_least_one_profile">There should be at least one user profile.</string>
|
||||
<string name="make_profile_private">Make profile private!</string>
|
||||
<string name="you_can_hide_or_mute_user_profile">You can hide or mute a user profile - hold it for the menu.</string>
|
||||
<string name="dont_show_again">Don\'t show again</string>
|
||||
|
@ -185,7 +185,6 @@
|
||||
<string name="change_verb">Промени</string>
|
||||
<string name="change_member_role_question">Промяна на груповата роля\?</string>
|
||||
<string name="you_will_still_receive_calls_and_ntfs">Все още ще получавате обаждания и известия от заглушени профили, когато са активни.</string>
|
||||
<string name="cant_delete_user_profile">Потребителският профил не може да се изтрие!</string>
|
||||
<string name="allow_disappearing_messages_only_if">Позволи изчезващи съобщения само ако вашият контакт ги разрешава.</string>
|
||||
<string name="allow_your_contacts_irreversibly_delete">Позволи на вашите контакти да изтриват необратимо изпратените съобщения. (24 часа)</string>
|
||||
<string name="allow_your_contacts_to_send_disappearing_messages">Позволи на вашите контакти да изпращат изчезващи съобщения.</string>
|
||||
@ -1165,8 +1164,6 @@
|
||||
<string name="profile_is_only_shared_with_your_contacts">Профилът се споделя само с вашите контакти.</string>
|
||||
<string name="delete_files_and_media_desc">Това действие не може да бъде отменено - всички получени и изпратени файлове и медия ще бъдат изтрити. Снимките с ниска разделителна способност ще бъдат запазени.</string>
|
||||
<string name="tap_to_activate_profile">Докосни за активиране на профил.</string>
|
||||
<string name="should_be_at_least_one_profile">Трябва да има поне един потребителски профил.</string>
|
||||
<string name="should_be_at_least_one_visible_profile">Трябва да има поне един видим потребителски профил.</string>
|
||||
<string name="language_system">Системен</string>
|
||||
<string name="color_title">Заглавие</string>
|
||||
<string name="to_share_with_your_contact">(за споделяне с вашия контакт)</string>
|
||||
|
@ -960,7 +960,6 @@
|
||||
<string name="language_system">Systém</string>
|
||||
<string name="smp_save_servers_question">Uložit servery\?</string>
|
||||
<string name="dont_show_again">Znovu neukazuj</string>
|
||||
<string name="cant_delete_user_profile">Nemohu smazat uživatelský profil!</string>
|
||||
<string name="button_add_welcome_message">Přidat uvítací zprávu</string>
|
||||
<string name="v4_6_chinese_spanish_interface">Čínské a Španělské rozhranní</string>
|
||||
<string name="v4_6_audio_video_calls">Hlasové a video hovory</string>
|
||||
@ -991,12 +990,10 @@
|
||||
<string name="v4_6_audio_video_calls_descr">Podpora bluetooth a další vylepšení.</string>
|
||||
<string name="tap_to_activate_profile">Klepnutím aktivujete profil.</string>
|
||||
<string name="v4_6_chinese_spanish_interface_descr">Díky uživatelům - překládejte prostřednictvím Weblate!</string>
|
||||
<string name="should_be_at_least_one_profile">Měl by tam být alespoň jeden uživatelský profil.</string>
|
||||
<string name="button_welcome_message">Uvítací zpráva</string>
|
||||
<string name="group_welcome_title">Uvítací zpráva</string>
|
||||
<string name="user_unmute">Zrušit ztlumení</string>
|
||||
<string name="to_reveal_profile_enter_password">Chcete-li odhalit svůj skrytý profil, zadejte celé heslo do vyhledávacího pole na stránce Chat profily.</string>
|
||||
<string name="should_be_at_least_one_visible_profile">Měl by tam být alespoň jeden viditelný uživatelský profil.</string>
|
||||
<string name="you_will_still_receive_calls_and_ntfs">Stále budete přijímat volání a upozornění od umlčených profilů pokud budou aktivní.</string>
|
||||
<string name="you_can_hide_or_mute_user_profile">Můžete skrýt nebo ztlumit uživatelský profil - Podržte pro menu.</string>
|
||||
<string name="user_unhide">Odkrýt</string>
|
||||
|
@ -1041,7 +1041,6 @@
|
||||
<string name="moderate_message_will_be_deleted_warning">Diese Nachricht wird für alle Gruppenmitglieder gelöscht.</string>
|
||||
<string name="language_system">System</string>
|
||||
<string name="confirm_password">Passwort bestätigen</string>
|
||||
<string name="cant_delete_user_profile">Das Benutzerprofil kann nicht gelöscht werden!</string>
|
||||
<string name="dont_show_again">Nicht nochmals anzeigen</string>
|
||||
<string name="v4_6_chinese_spanish_interface">Chinesische und spanische Bedienoberfläche</string>
|
||||
<string name="v4_6_audio_video_calls">Audio- und Videoanrufe</string>
|
||||
@ -1060,8 +1059,6 @@
|
||||
<string name="make_profile_private">Privates Profil erzeugen!</string>
|
||||
<string name="user_mute">Stummschalten</string>
|
||||
<string name="tap_to_activate_profile">Zum Aktivieren des Profils tippen.</string>
|
||||
<string name="should_be_at_least_one_profile">Es muss mindestens ein Benutzer-Profil vorhanden sein.</string>
|
||||
<string name="should_be_at_least_one_visible_profile">Es muss mindestens ein sichtbares Benutzer-Profil vorhanden sein.</string>
|
||||
<string name="user_unmute">Stummschaltung aufheben</string>
|
||||
<string name="muted_when_inactive">Bei Inaktivität stummgeschaltet!</string>
|
||||
<string name="v4_6_hidden_chat_profiles_descr">Schützen Sie Ihre Chat-Profile mit einem Passwort!</string>
|
||||
|
@ -967,17 +967,14 @@
|
||||
<string name="error_saving_user_password">Error al guardar contraseña de usuario</string>
|
||||
<string name="relay_server_if_necessary">El retransmisor sólo se usa en caso de necesidad. Un tercero podría ver tu IP.</string>
|
||||
<string name="relay_server_protects_ip">El servidor de retransmisión protege tu IP pero puede ver la duración de la llamada.</string>
|
||||
<string name="cant_delete_user_profile">¡No se puede eliminar el perfil!</string>
|
||||
<string name="enter_password_to_show">Introduce la contraseña</string>
|
||||
<string name="user_hide">Ocultar</string>
|
||||
<string name="user_mute">Silenciar</string>
|
||||
<string name="save_and_update_group_profile">Guardar y actualizar perfil del grupo</string>
|
||||
<string name="tap_to_activate_profile">Pulsa sobre un perfil para activarlo.</string>
|
||||
<string name="should_be_at_least_one_visible_profile">Debe haber al menos un perfil de usuario visible.</string>
|
||||
<string name="user_unhide">Mostrar</string>
|
||||
<string name="button_welcome_message">Mensaje de bienvenida</string>
|
||||
<string name="group_welcome_title">Mensaje de bienvenida</string>
|
||||
<string name="should_be_at_least_one_profile">Debe haber al menos un perfil de usuario.</string>
|
||||
<string name="make_profile_private">¡Hacer perfil privado!</string>
|
||||
<string name="dont_show_again">No mostrar de nuevo</string>
|
||||
<string name="muted_when_inactive">¡Silenciado cuando está inactivo!</string>
|
||||
|
@ -335,7 +335,6 @@
|
||||
<string name="share_text_disappears_at">Katoaa klo: %s</string>
|
||||
<string name="create_secret_group_title">Luo salainen ryhmä</string>
|
||||
<string name="chat_preferences_always">aina</string>
|
||||
<string name="cant_delete_user_profile">Käyttäjäprofiilia ei voi poistaa!</string>
|
||||
<string name="allow_your_contacts_to_call">Salli kontaktiesi soittaa sinulle.</string>
|
||||
<string name="allow_your_contacts_irreversibly_delete">Salli kontaktiesi poistaa lähetetyt viestit peruuttamattomasti.</string>
|
||||
<string name="allow_your_contacts_to_send_voice_messages">Salli kontaktiesi lähettää ääniviestejä.</string>
|
||||
@ -1238,8 +1237,6 @@
|
||||
<string name="snd_conn_event_switch_queue_phase_completed_for_member">muutit osoitteeksi %s</string>
|
||||
<string name="invite_prohibited_description">Yrität kutsua kontaktia, jonka kanssa olet jakanut inkognito-profiilin, ryhmään, jossa käytät pääprofiiliasi</string>
|
||||
<string name="group_welcome_title">Tervetuloviesti</string>
|
||||
<string name="should_be_at_least_one_profile">Käyttäjäprofiileja tulee olla vähintään yksi.</string>
|
||||
<string name="should_be_at_least_one_visible_profile">Näkyviä käyttäjäprofiileja tulee olla vähintään yksi.</string>
|
||||
<string name="incognito_info_share">Kun jaat inkognitoprofiilin jonkun kanssa, tätä profiilia käytetään ryhmissä, joihin tämä sinut kutsuu.</string>
|
||||
<string name="group_main_profile_sent">Keskusteluprofiilisi lähetetään ryhmän jäsenille</string>
|
||||
<string name="incognito_random_profile">Satunnainen profiilisi</string>
|
||||
|
@ -962,7 +962,6 @@
|
||||
<string name="smp_save_servers_question">Enregistrer les serveurs ?</string>
|
||||
<string name="dont_show_again">Ne plus afficher</string>
|
||||
<string name="button_add_welcome_message">Ajouter un message d\'accueil</string>
|
||||
<string name="cant_delete_user_profile">Impossible de supprimer le profil d\'utilisateur !</string>
|
||||
<string name="v4_6_group_moderation">Modération de groupe</string>
|
||||
<string name="user_hide">Cacher</string>
|
||||
<string name="muted_when_inactive">Mute en cas d\'inactivité !</string>
|
||||
@ -993,8 +992,6 @@
|
||||
<string name="to_reveal_profile_enter_password">Pour révéler votre profil caché, entrez le mot de passe dans le champ de recherche de la page Profils de chat.</string>
|
||||
<string name="v4_6_audio_video_calls_descr">Prise en charge du Bluetooth et autres améliorations.</string>
|
||||
<string name="v4_6_chinese_spanish_interface_descr">Merci aux utilisateurs - contribuez via Weblate !</string>
|
||||
<string name="should_be_at_least_one_profile">Il doit y avoir au moins un profil d\'utilisateur.</string>
|
||||
<string name="should_be_at_least_one_visible_profile">Il doit y avoir au moins un profil d\'utilisateur visible.</string>
|
||||
<string name="user_unhide">Dévoiler</string>
|
||||
<string name="user_unmute">Démute</string>
|
||||
<string name="button_welcome_message">Message d\'accueil</string>
|
||||
|
@ -45,7 +45,6 @@
|
||||
<string name="both_you_and_your_contact_can_send_disappearing">Mindketten, te is és az ismerősöd is küldhet eltűnő üzeneteket.</string>
|
||||
<string name="keychain_is_storing_securely">Az Android Keystore-t a jelmondat biztonságos tárolására használják - lehetővé teszi az értesítési szolgáltatás működését.</string>
|
||||
<string name="alert_title_msg_bad_hash">Téves üzenet hash</string>
|
||||
<string name="cant_delete_user_profile">Felhasználói profil törlése nem lehetséges!</string>
|
||||
<string name="color_background">Háttér</string>
|
||||
<string name="socks_proxy_setting_limitations"><![CDATA[<b>Tudnivaló</b>: az üzenet- és fájl relay szerverek SOCKS proxy által vannak kapcsolatban. A hívások és URL link előnézetek közvetlen kapcsolatot használnak.]]></string>
|
||||
<string name="full_backup">App adatmentés</string>
|
||||
@ -1493,7 +1492,6 @@
|
||||
<string name="the_messaging_and_app_platform_protecting_your_privacy_and_security">A Te adatvédelmedet és biztonságodat védő üzenetküldő és alkalmazásplatform.</string>
|
||||
<string name="tap_to_activate_profile">Érintsd meg a profil aktiválásához.</string>
|
||||
<string name="receipts_contacts_override_disabled">A kézbesítési jelentés le van tiltva %d ismerősödnél</string>
|
||||
<string name="should_be_at_least_one_profile">Legalább egy felhasználói profilnak kell lennie.</string>
|
||||
<string name="session_code">Munkamenet kód</string>
|
||||
<string name="v4_4_french_interface_descr">Köszönet a felhasználóknak - hozzájárulás a Weblaten!</string>
|
||||
<string name="receipts_section_groups">Kis csoportok (max. 20 tag)</string>
|
||||
@ -1510,7 +1508,6 @@
|
||||
<string name="receiving_via">Fogadás a</string>
|
||||
<string name="store_passphrase_securely_without_recover">Kérjük, hogy a jelmondatot biztonságosan tárold, ha elveszíted, NEM fogsz tudni hozzáférni a chathez.</string>
|
||||
<string name="member_role_will_be_changed_with_invitation">A szerepkör \"%s\"-re fog változni. A tag új meghívót kap.</string>
|
||||
<string name="should_be_at_least_one_visible_profile">Legalább egy látható felhasználói profilnak kell lennie.</string>
|
||||
<string name="icon_descr_profile_image_placeholder">profilkép helyőrző</string>
|
||||
<string name="sync_connection_force_desc">A titkosítás működik, és új titkosítási egyezményre nincs szükség. Ez kapcsolati hibákat eredményezhet!</string>
|
||||
<string name="delete_chat_profile_action_cannot_be_undone_warning">Ez a művelet nem vonható vissza - profilod, ismerőseid, üzeneteid és fájljaid visszafordíthatatlanul törlésre kerülnek.</string>
|
||||
|
@ -969,8 +969,6 @@
|
||||
<string name="tap_to_activate_profile">Tocca per attivare il profilo.</string>
|
||||
<string name="user_unhide">Svela</string>
|
||||
<string name="make_profile_private">Rendi privato il profilo!</string>
|
||||
<string name="should_be_at_least_one_profile">Deve esserci almeno un profilo utente.</string>
|
||||
<string name="should_be_at_least_one_visible_profile">Deve esserci almeno un profilo utente visibile.</string>
|
||||
<string name="you_can_hide_or_mute_user_profile">Puoi nascondere o silenziare un profilo utente - tienilo premuto per il menu.</string>
|
||||
<string name="dont_show_again">Non mostrare più</string>
|
||||
<string name="muted_when_inactive">Silenzioso quando inattivo!</string>
|
||||
@ -990,7 +988,6 @@
|
||||
<string name="v4_6_group_moderation_descr">Ora gli amministratori possono:
|
||||
\n- eliminare i messaggi dei membri.
|
||||
\n- disattivare i membri (ruolo \"osservatore\")</string>
|
||||
<string name="cant_delete_user_profile">Impossibile eliminare il profilo utente!</string>
|
||||
<string name="hide_profile">Nascondi il profilo</string>
|
||||
<string name="confirm_password">Conferma password</string>
|
||||
<string name="error_updating_user_privacy">Errore nell\'aggiornamento della privacy dell\'utente</string>
|
||||
|
@ -112,7 +112,6 @@
|
||||
<string name="icon_descr_call_progress">שיחה מתמשכת</string>
|
||||
<string name="settings_section_title_calls">שיחות</string>
|
||||
<string name="cannot_access_keychain">לא ניתן לגשת ל־Keystore כדי לאחסן את סיסמת מסד הנתונים</string>
|
||||
<string name="cant_delete_user_profile">לא ניתן למחוק פרופיל משתמש!</string>
|
||||
<string name="feature_cancelled_item">בוטל %s</string>
|
||||
<string name="v4_5_transport_isolation_descr">לפי פרופיל צ׳אט (ברירת מחדל) או לפי חיבור (בביטא).</string>
|
||||
<string name="callstatus_calling">מתקשר…</string>
|
||||
@ -1055,8 +1054,6 @@
|
||||
<string name="messages_section_description">הגדרה זו חלה על הודעות בפרופיל הצ׳אט הנוכחי שלך</string>
|
||||
<string name="database_backup_can_be_restored">הניסיון לשנות את סיסמת מסד הנתונים לא הושלם.</string>
|
||||
<string name="color_title">כותרת</string>
|
||||
<string name="should_be_at_least_one_profile">נדרש לפחות פרופיל משתמש אחד.</string>
|
||||
<string name="should_be_at_least_one_visible_profile">נדרש לפחות פרופיל משתמש אחד גלוי.</string>
|
||||
<string name="group_is_decentralized">הקבוצה מבוזרת לחלוטין - היא גלויה רק לחברי הקבוצה.</string>
|
||||
<string name="to_protect_privacy_simplex_has_ids_for_queues">כדי לשמור על הפרטיות, במקום מזהי משתמש הקיימים בכל הפלטפורמות האחרות, ל־SimpleX יש מזהים לתורי הודעות, נפרדים עבור כל אחד מאנשי הקשר שלך.</string>
|
||||
<string name="using_simplex_chat_servers">משתמש בשרתי SimpleX Chatז</string>
|
||||
|
@ -944,7 +944,6 @@
|
||||
<string name="la_lock_mode_passcode">パスコード入力</string>
|
||||
<string name="la_auth_failed">認証失敗</string>
|
||||
<string name="la_enter_app_passcode">パスコードを入力</string>
|
||||
<string name="cant_delete_user_profile">ユーザープロフィールが削除できません。</string>
|
||||
<string name="la_mode_system">システム</string>
|
||||
<string name="change_lock_mode">ロックモードを変更</string>
|
||||
<string name="v4_6_chinese_spanish_interface">中国語とスペイン語UI</string>
|
||||
@ -1113,8 +1112,6 @@
|
||||
<string name="v5_0_large_files_support_descr">送信者がオンラインになるまでの待ち時間がなく、速い!</string>
|
||||
<string name="v5_0_app_passcode">アプリのパスコード</string>
|
||||
<string name="v5_0_app_passcode_descr">システム認証の代わりに設定します。</string>
|
||||
<string name="should_be_at_least_one_visible_profile">少なくとも1つのユーザープロフィールが表示されている必要があります。</string>
|
||||
<string name="should_be_at_least_one_profile">少なくとも1つのユーザープロファイルが必要です。</string>
|
||||
<string name="make_profile_private">プロフィールを非表示にできます!</string>
|
||||
<string name="relay_server_protects_ip">リレー サーバーは IP アドレスを保護しますが、通話時間は監視されます。</string>
|
||||
<string name="share_address_with_contacts_question">アドレスを連絡先と共有しますか\?</string>
|
||||
|
@ -111,7 +111,6 @@
|
||||
<string name="change_member_role_question">그룹 역할을 바꾸시겠습니까\?</string>
|
||||
<string name="info_row_connection">연결</string>
|
||||
<string name="users_add">프로필 추가</string>
|
||||
<string name="cant_delete_user_profile">사용자 프로필을 삭제할 수 없습니다!</string>
|
||||
<string name="chat_preferences_always">항상</string>
|
||||
<string name="chat_preferences_contact_allows">대화 상대가 허용함</string>
|
||||
<string name="contact_preferences">연락처 개별 설정</string>
|
||||
@ -826,12 +825,10 @@
|
||||
<string name="stop_chat_confirmation">멈추기</string>
|
||||
<string name="snd_group_event_changed_member_role">%s의 역할을 %s로 변경했어요.</string>
|
||||
<string name="section_title_for_console">콘솔용</string>
|
||||
<string name="should_be_at_least_one_visible_profile">적어도 하나의 숨겨지지 않은 사용자 프로필이 있어야 해요.</string>
|
||||
<string name="set_group_preferences">그룹 설정 지정하기</string>
|
||||
<string name="snd_conn_event_switch_queue_phase_completed_for_member">%s의 주소를 바꿨어요</string>
|
||||
<string name="snd_conn_event_switch_queue_phase_completed">주소를 바꿨어요</string>
|
||||
<string name="snd_group_event_group_profile_updated">그룹 프로필 업데이트됨</string>
|
||||
<string name="should_be_at_least_one_profile">적어도 하나의 사용자 프로필이 있어야 해요.</string>
|
||||
<string name="smp_servers_test_server">서버 테스트하기</string>
|
||||
<string name="smp_servers_use_server">서버 사용하기</string>
|
||||
<string name="smp_servers_use_server_for_new_conn">새로운 대화에 사용</string>
|
||||
|
@ -447,8 +447,6 @@
|
||||
<string name="group_members_can_send_dms">Grupės nariai gali siųsti tiesiogines žinutes.</string>
|
||||
<string name="group_members_can_send_disappearing">Grupės nariai gali siųsti išnykstančias žinutes.</string>
|
||||
<string name="v4_3_improved_privacy_and_security_desc">Slėpti programėlės ekraną paskiausių programėlių sąraše.</string>
|
||||
<string name="should_be_at_least_one_profile">Turėtų būti bent vienas naudotojo profilis.</string>
|
||||
<string name="should_be_at_least_one_visible_profile">Turėtų būti matomas bent vienas naudotojo profilis.</string>
|
||||
<string name="chat_preferences_contact_allows">Adresatas leidžia</string>
|
||||
<string name="voice_prohibited_in_this_chat">Balso žinutės šiame pokalbyje yra uždraustos.</string>
|
||||
<string name="v4_4_disappearing_messages_desc">Išsiųstos žinutės bus ištrintos po nustatyto laiko.</string>
|
||||
@ -469,7 +467,6 @@
|
||||
<string name="join_group_button">Prisijungti</string>
|
||||
<string name="change_verb">Keisti</string>
|
||||
<string name="conn_stats_section_title_servers">SERVERIAI</string>
|
||||
<string name="cant_delete_user_profile">Nepavyksta ištrinti naudotojo profilio!</string>
|
||||
<string name="clear_chat_menu_action">Išvalyti</string>
|
||||
<string name="unhide_profile">Nebeslėpti profilio</string>
|
||||
<string name="videos_limit_title">Per daug vaizdo įrašų!</string>
|
||||
|
@ -958,7 +958,6 @@
|
||||
<string name="you_are_observer">jij bent waarnemer</string>
|
||||
<string name="language_system">Systeem</string>
|
||||
<string name="v4_6_audio_video_calls">Audio en video oproepen</string>
|
||||
<string name="cant_delete_user_profile">Kan gebruikers profiel niet verwijderen!</string>
|
||||
<string name="confirm_password">Bevestig wachtwoord</string>
|
||||
<string name="v4_6_chinese_spanish_interface">Chinese en Spaanse interface</string>
|
||||
<string name="enter_password_to_show">Voer wachtwoord in bij zoeken</string>
|
||||
@ -990,12 +989,10 @@
|
||||
<string name="v4_6_audio_video_calls_descr">Ondersteuning voor bluetooth en andere verbeteringen.</string>
|
||||
<string name="tap_to_activate_profile">Tik om profiel te activeren.</string>
|
||||
<string name="v4_6_chinese_spanish_interface_descr">Dank aan de gebruikers – draag bij via Weblate!</string>
|
||||
<string name="should_be_at_least_one_profile">Er moet ten minste één gebruikers profiel zijn.</string>
|
||||
<string name="you_can_hide_or_mute_user_profile">U kunt een gebruikers profiel verbergen of dempen - houd het vast voor het menu.</string>
|
||||
<string name="user_unhide">zichtbaar maken</string>
|
||||
<string name="user_unmute">Dempen opheffen</string>
|
||||
<string name="group_welcome_title">Welkomst bericht</string>
|
||||
<string name="should_be_at_least_one_visible_profile">"Er moet ten minste één zichtbaar gebruikers profiel zijn."</string>
|
||||
<string name="to_reveal_profile_enter_password">Om uw verborgen profiel te onthullen, voert u een volledig wachtwoord in een zoekveld in op de pagina Uw chat profielen.</string>
|
||||
<string name="button_welcome_message">Welkomst bericht</string>
|
||||
<string name="you_will_still_receive_calls_and_ntfs">U ontvangt nog steeds oproepen en meldingen van gedempte profielen wanneer deze actief zijn.</string>
|
||||
|
@ -743,7 +743,6 @@
|
||||
<string name="group_is_decentralized">W pełni zdecentralizowana – widoczna tylko dla członków.</string>
|
||||
<string name="member_role_will_be_changed_with_invitation">Rola zostanie zmieniona na \"%s\". Członek otrzyma nowe zaproszenie.</string>
|
||||
<string name="group_welcome_title">Wiadomość powitalna</string>
|
||||
<string name="cant_delete_user_profile">Nie można usunąć profilu użytkownika!</string>
|
||||
<string name="users_delete_question">Usunąć profil czatu\?</string>
|
||||
<string name="users_delete_profile_for">Usuń profil czatu dla</string>
|
||||
<string name="dont_show_again">Nie pokazuj ponownie</string>
|
||||
@ -997,9 +996,7 @@
|
||||
<string name="simplex_link_contact">Adres kontaktowy SimpleX</string>
|
||||
<string name="stop_chat_to_export_import_or_delete_chat_database">Zatrzymaj czat, aby wyeksportować, zaimportować lub usunąć bazę danych czatu. Podczas zatrzymania chatu nie będzie można odbierać ani wysyłać wiadomości.</string>
|
||||
<string name="smp_servers_test_some_failed">Niektóre serwery nie przeszły testu:</string>
|
||||
<string name="should_be_at_least_one_profile">Powinien istnieć co najmniej jeden profil użytkownika.</string>
|
||||
<string name="thank_you_for_installing_simplex">Dziękujemy za zainstalowanie SimpleX Chat!</string>
|
||||
<string name="should_be_at_least_one_visible_profile">Powinien istnieć co najmniej jeden widoczny profil użytkownika.</string>
|
||||
<string name="moderate_message_will_be_marked_warning">Wiadomość zostanie oznaczona jako moderowana dla wszystkich członków.</string>
|
||||
<string name="member_role_will_be_changed_with_notification">Rola zostanie zmieniona na \"%s\". Wszyscy w grupie zostaną powiadomieni.</string>
|
||||
<string name="delete_files_and_media_desc">Tego działania nie można cofnąć - wszystkie odebrane i wysłane pliki oraz media zostaną usunięte. Obrazy o niskiej rozdzielczości pozostaną.</string>
|
||||
|
@ -706,7 +706,6 @@
|
||||
<string name="no_contacts_to_add">Sem contatos para adicionar</string>
|
||||
<string name="member_role_will_be_changed_with_notification">A função será alterada para \"%s\". Todos no grupo serão notificados.</string>
|
||||
<string name="user_mute">Mutar</string>
|
||||
<string name="should_be_at_least_one_visible_profile">Deve haver pelo menos um perfil de usuário visível.</string>
|
||||
<string name="only_you_can_send_voice">Somente você pode enviar mensagens de voz.</string>
|
||||
<string name="only_your_contact_can_send_voice">Somente seu contato pode enviar mensagens de voz.</string>
|
||||
<string name="prohibit_message_deletion">Proibir a exclusão irreversível de mensagens.</string>
|
||||
@ -739,9 +738,7 @@
|
||||
<string name="incompatible_database_version">Versão do banco de dados incompatível</string>
|
||||
<string name="button_remove_member">Remover membro</string>
|
||||
<string name="group_main_profile_sent">Seu perfil de chat será enviado aos membros do grupo</string>
|
||||
<string name="cant_delete_user_profile">Não é possível excluir o perfil do usuário!</string>
|
||||
<string name="make_profile_private">Torne o perfil privado!</string>
|
||||
<string name="should_be_at_least_one_profile">Deve haver pelo menos um perfil de usuário.</string>
|
||||
<string name="v4_2_security_assessment">Avaliação de segurança</string>
|
||||
<string name="v4_5_multiple_chat_profiles_descr">Nomes diferentes, avatares e isolamento de transporte.</string>
|
||||
<string name="v4_2_auto_accept_contact_requests_desc">Com mensagem de boas-vindas opcional.</string>
|
||||
|
@ -239,7 +239,6 @@
|
||||
<string name="call_on_lock_screen">Chamadas no ecrã de bloqueio:</string>
|
||||
<string name="alert_title_cant_invite_contacts">Não é possível convidar contatos!</string>
|
||||
<string name="change_verb">Alterar</string>
|
||||
<string name="cant_delete_user_profile">Não é possível eliminar o perfil do utilizador!</string>
|
||||
<string name="feature_cancelled_item">cancelado %s</string>
|
||||
<string name="cannot_receive_file">Não é possível receber o ficheiro</string>
|
||||
<string name="icon_descr_cancel_image_preview">Cancelar pré-visualização da imagem</string>
|
||||
|
@ -1044,8 +1044,6 @@
|
||||
<string name="v4_6_audio_video_calls">Аудио и видео звонки</string>
|
||||
<string name="error_saving_user_password">Ошибка при сохранении пароля пользователя</string>
|
||||
<string name="smp_save_servers_question">Сохранить серверы\?</string>
|
||||
<string name="should_be_at_least_one_profile">Должен быть хотя бы один профиль пользователя.</string>
|
||||
<string name="should_be_at_least_one_visible_profile">Должен быть хотя бы один открытый профиль пользователя.</string>
|
||||
<string name="to_reveal_profile_enter_password">Чтобы показать Ваш скрытый профиль, введите пароль в поле поиска на странице Ваши профили.</string>
|
||||
<string name="user_unmute">Уведомлять</string>
|
||||
<string name="group_welcome_title">Приветственное сообщение</string>
|
||||
@ -1054,7 +1052,6 @@
|
||||
<string name="button_welcome_message">Приветственное сообщение</string>
|
||||
<string name="save_and_update_group_profile">Сохранить сообщение и обновить группу</string>
|
||||
<string name="muted_when_inactive">Без звука, когда не активный!</string>
|
||||
<string name="cant_delete_user_profile">Нельзя удалить профиль пользователя!</string>
|
||||
<string name="enter_password_to_show">Введите пароль в поиске!</string>
|
||||
<string name="save_profile_password">Сохранить пароль профиля</string>
|
||||
<string name="v4_6_chinese_spanish_interface">Китайский и Испанский интерфейс</string>
|
||||
|
@ -142,7 +142,6 @@
|
||||
<string name="change_member_role_question">เปลี่ยนบทบาทกลุ่ม\?</string>
|
||||
<string name="icon_descr_cancel_live_message">ยกเลิกข้อความสด</string>
|
||||
<string name="feature_cancelled_item">ยกเลิกเรียบร้อยแล้ว %s</string>
|
||||
<string name="cant_delete_user_profile">ไม่สามารถลบโปรไฟล์ผู้ใช้ได้!</string>
|
||||
<string name="alert_title_cant_invite_contacts">ไม่สามารถเชิญผู้ติดต่อได้!</string>
|
||||
<string name="change_verb">เปลี่ยน</string>
|
||||
<string name="change_database_passphrase_question">เปลี่ยนรหัสผ่านฐานข้อมูล\?</string>
|
||||
@ -1213,8 +1212,6 @@
|
||||
<string name="updating_settings_will_reconnect_client_to_all_servers">การอัปเดตการตั้งค่าจะเชื่อมต่อไคลเอนต์กับเซิร์ฟเวอร์ทั้งหมดอีกครั้ง</string>
|
||||
<string name="user_unhide">ยกเลิกการซ่อน</string>
|
||||
<string name="user_unmute">เปิดเสียง</string>
|
||||
<string name="should_be_at_least_one_profile">ควรมีโปรไฟล์ผู้ใช้อย่างน้อยหนึ่งโปรไฟล์</string>
|
||||
<string name="should_be_at_least_one_visible_profile">ควรมีอย่างน้อยหนึ่งโปรไฟล์ผู้ใช้ที่มองเห็นได้</string>
|
||||
<string name="you_can_hide_or_mute_user_profile">คุณสามารถซ่อนหรือปิดเสียงโปรไฟล์ผู้ใช้ - กดค้างไว้เพื่อที่จะแสดงเมนู</string>
|
||||
<string name="unhide_profile">เลิกซ่อนโปรไฟล์</string>
|
||||
<string name="chat_preferences_you_allow">คุณอนุญาต</string>
|
||||
|
@ -114,8 +114,6 @@
|
||||
<string name="save_group_profile">Grup profilini kaydet</string>
|
||||
<string name="network_option_seconds_label">sn</string>
|
||||
<string name="network_options_save">Kaydet</string>
|
||||
<string name="should_be_at_least_one_visible_profile">There should be at least one visible user profile.</string>
|
||||
<string name="should_be_at_least_one_profile">En az bir kullanıcı profili olmalıdır.</string>
|
||||
<string name="incognito_info_protects">Gizli mod her farklı kişi için yeni rasgele profil kullanarak gizliliğini korur.</string>
|
||||
<string name="theme_system">Sistem</string>
|
||||
<string name="language_system">Sistem</string>
|
||||
@ -753,7 +751,6 @@
|
||||
<string name="invite_to_group_button">Gruba davet edin</string>
|
||||
<string name="invite_prohibited">Kişi davet edilemiyor!</string>
|
||||
<string name="button_add_members">Üyeleri davet edin</string>
|
||||
<string name="cant_delete_user_profile">Kullanıcı profili silinemiyor!</string>
|
||||
<string name="color_background">Arka plan</string>
|
||||
<string name="message_deletion_prohibited">Bu sohbette geri alınamaz mesaj silme yasaktır.</string>
|
||||
<string name="delete_contact_question">Kişiyi sil\?</string>
|
||||
|
@ -517,7 +517,6 @@
|
||||
<string name="role_in_group">Роль</string>
|
||||
<string name="conn_level_desc_indirect">непряме (%1$s)</string>
|
||||
<string name="user_unmute">Відглушити</string>
|
||||
<string name="should_be_at_least_one_profile">Повинен бути принаймні один профіль користувача.</string>
|
||||
<string name="make_profile_private">Зробіть профіль приватним!</string>
|
||||
<string name="feature_offered_item">запропоновано %s</string>
|
||||
<string name="v4_5_message_draft">Чернетка повідомлення</string>
|
||||
@ -900,7 +899,6 @@
|
||||
<string name="delete_files_and_media_all">Видалити всі файли</string>
|
||||
<string name="delete_messages_after">Видаляйте повідомлення після</string>
|
||||
<string name="enable_automatic_deletion_question">Увімкнути автоматичне видалення повідомлень\?</string>
|
||||
<string name="should_be_at_least_one_visible_profile">Повинен бути принаймні один видимий профіль користувача.</string>
|
||||
<string name="v4_6_hidden_chat_profiles">Приховані профілі чату</string>
|
||||
<string name="v4_6_group_welcome_message">Повідомлення вітання групи</string>
|
||||
<string name="v4_6_chinese_spanish_interface_descr">Дякуємо користувачам – приєднуйтеся через Weblate!</string>
|
||||
@ -933,7 +931,6 @@
|
||||
<string name="icon_descr_group_inactive">Група неактивна</string>
|
||||
<string name="snd_group_event_member_deleted">ви видалили %1$s</string>
|
||||
<string name="tap_to_activate_profile">Торкніться для активації профілю.</string>
|
||||
<string name="cant_delete_user_profile">Не вдається видалити профіль користувача!</string>
|
||||
<string name="prohibit_sending_voice">Забороняйте надсилання голосових повідомлень.</string>
|
||||
<string name="group_members_can_send_disappearing">Учасники групи можуть надсилати самознищувальні повідомлення.</string>
|
||||
<string name="ttl_min">%d хв</string>
|
||||
|
@ -978,7 +978,6 @@
|
||||
<string name="v4_6_hidden_chat_profiles_descr">使用密码保护您的聊天资料!</string>
|
||||
<string name="confirm_password">确认密码</string>
|
||||
<string name="error_updating_user_privacy">更新用户隐私错误</string>
|
||||
<string name="cant_delete_user_profile">无法删除用户资料!</string>
|
||||
<string name="error_saving_user_password">保存用户密码错误</string>
|
||||
<string name="enter_password_to_show">在搜索中输入密码</string>
|
||||
<string name="v4_6_group_welcome_message">群组欢迎消息</string>
|
||||
@ -990,12 +989,10 @@
|
||||
<string name="to_reveal_profile_enter_password">要显示您的隐藏的个人资料,请在您的聊天个人资料页面的搜索字段中输入完整密码。</string>
|
||||
<string name="save_welcome_message_question">保存欢迎信息?</string>
|
||||
<string name="tap_to_activate_profile">点击以激活个人资料。</string>
|
||||
<string name="should_be_at_least_one_profile">应该至少有一个用户资料。</string>
|
||||
<string name="user_unhide">取消隐藏</string>
|
||||
<string name="v4_6_group_welcome_message_descr">设置向新成员显示的消息!</string>
|
||||
<string name="v4_6_audio_video_calls_descr">支持蓝牙和其他改进。</string>
|
||||
<string name="v4_6_chinese_spanish_interface_descr">感谢用户——通过 Weblate 做出贡献!</string>
|
||||
<string name="should_be_at_least_one_visible_profile">应该至少有一个可见的用户资料。</string>
|
||||
<string name="user_unmute">解除静音</string>
|
||||
<string name="button_welcome_message">欢迎消息</string>
|
||||
<string name="you_will_still_receive_calls_and_ntfs">当静音配置文件处于活动状态时,您仍会收到来自静音配置文件的电话和通知。</string>
|
||||
|
@ -965,7 +965,6 @@
|
||||
<string name="button_welcome_message">歡迎訊息</string>
|
||||
<string name="save_and_update_group_profile">儲存和更新群組配置檔案</string>
|
||||
<string name="save_welcome_message_question">儲存歡迎訊息?</string>
|
||||
<string name="cant_delete_user_profile">無法刪除個人檔案!</string>
|
||||
<string name="user_hide">隱藏</string>
|
||||
<string name="make_profile_private">將個人資料設為私密!</string>
|
||||
<string name="v4_6_audio_video_calls">語音和視訊通話</string>
|
||||
@ -991,10 +990,8 @@
|
||||
<string name="v4_6_group_welcome_message_descr">設定向新成員顯示的訊息!</string>
|
||||
<string name="tap_to_activate_profile">點擊以激活配置檔案。</string>
|
||||
<string name="v4_6_audio_video_calls_descr">支援藍牙和其他改進。</string>
|
||||
<string name="should_be_at_least_one_visible_profile">至少要有一個可見的個人檔案。</string>
|
||||
<string name="group_welcome_title">歡迎訊息</string>
|
||||
<string name="v4_6_chinese_spanish_interface_descr">感謝用戶-透過 Weblate 做出貢獻!</string>
|
||||
<string name="should_be_at_least_one_profile">應該至少有一個個人檔案。</string>
|
||||
<string name="user_unmute">解除靜音</string>
|
||||
<string name="you_will_still_receive_calls_and_ntfs">當靜音配置檔案處於活動狀態時,你仍會接收來自靜音配置檔案的通話和通知。</string>
|
||||
<string name="user_unhide">取消隱藏</string>
|
||||
|
Loading…
Reference in New Issue
Block a user