Merge branch 'stable' into stable-android

This commit is contained in:
Evgeny Poberezkin
2024-04-13 11:59:14 +01:00
144 changed files with 4995 additions and 1545 deletions
+44 -44
View File
@@ -4,17 +4,16 @@ plugins {
id("com.android.library")
id("org.jetbrains.kotlin.plugin.serialization")
id("dev.icerock.mobile.multiplatform-resources")
id("com.github.gmazzo.buildconfig") version "4.0.4"
id("com.github.gmazzo.buildconfig") version "5.3.5"
}
group = "chat.simplex"
version = extra["android.version_name"] as String
kotlin {
android()
jvm("desktop") {
jvmToolchain(11)
}
androidTarget()
jvm("desktop")
applyDefaultHierarchyTemplate()
sourceSets {
all {
languageSettings {
@@ -35,20 +34,20 @@ kotlin {
api(compose.runtime)
api(compose.foundation)
api(compose.material)
api("org.jetbrains.kotlinx:kotlinx-serialization-json:1.3.2")
api("org.jetbrains.kotlinx:kotlinx-datetime:0.3.2")
api("com.russhwolf:multiplatform-settings:1.0.0")
api("com.charleskorn.kaml:kaml:0.43.0")
api("dev.icerock.moko:resources-compose:0.23.0")
api("org.jetbrains.kotlinx:kotlinx-serialization-json:1.6.3")
api("org.jetbrains.kotlinx:kotlinx-datetime:0.5.0")
api("com.russhwolf:multiplatform-settings:1.1.1")
api("com.charleskorn.kaml:kaml:0.58.0")
api("org.jetbrains.compose.ui:ui-text:${rootProject.extra["compose.version"] as String}")
implementation("org.jetbrains.compose.components:components-animatedimage:${rootProject.extra["compose.version"] as String}")
//Barcode
api("org.boofcv:boofcv-core:0.40.1")
api("org.boofcv:boofcv-core:1.1.3")
implementation("com.godaddy.android.colorpicker:compose-color-picker-jvm:0.7.0")
// Link Previews
implementation("org.jsoup:jsoup:1.13.1")
implementation("org.jsoup:jsoup:1.17.2")
// Resources
implementation("dev.icerock.moko:resources:0.23.0")
api("dev.icerock.moko:resources:0.23.0")
api("dev.icerock.moko:resources-compose:0.23.0")
}
}
val commonTest by getting {
@@ -57,47 +56,50 @@ kotlin {
}
}
val androidMain by getting {
kotlin.srcDir("build/generated/moko/androidMain/src")
dependencies {
implementation("androidx.activity:activity-compose:1.5.0")
val work_version = "2.7.1"
implementation("androidx.work:work-runtime-ktx:$work_version")
implementation("com.google.accompanist:accompanist-insets:0.23.0")
implementation("dev.icerock.moko:resources:0.23.0")
implementation("androidx.activity:activity-compose:1.8.2")
val workVersion = "2.9.0"
implementation("androidx.work:work-runtime-ktx:$workVersion")
implementation("com.google.accompanist:accompanist-insets:0.30.1")
// Video support
implementation("com.google.android.exoplayer:exoplayer:2.17.1")
implementation("com.google.android.exoplayer:exoplayer:2.19.1")
// Biometric authentication
implementation("androidx.biometric:biometric:1.2.0-alpha04")
implementation("androidx.biometric:biometric:1.2.0-alpha05")
//Barcode
implementation("org.boofcv:boofcv-android:0.40.1")
implementation("org.boofcv:boofcv-android:1.1.3")
//Camera Permission
implementation("com.google.accompanist:accompanist-permissions:0.23.0")
implementation("com.google.accompanist:accompanist-permissions:0.34.0")
implementation("androidx.webkit:webkit:1.4.0")
implementation("androidx.webkit:webkit:1.10.0")
// GIFs support
implementation("io.coil-kt:coil-compose:2.1.0")
implementation("io.coil-kt:coil-gif:2.1.0")
implementation("io.coil-kt:coil-compose:2.6.0")
implementation("io.coil-kt:coil-gif:2.6.0")
implementation("com.jakewharton:process-phoenix:2.1.2")
implementation("com.jakewharton:process-phoenix:2.2.0")
val camerax_version = "1.1.0-beta01"
implementation("androidx.camera:camera-core:${camerax_version}")
implementation("androidx.camera:camera-camera2:${camerax_version}")
implementation("androidx.camera:camera-lifecycle:${camerax_version}")
implementation("androidx.camera:camera-view:${camerax_version}")
val cameraXVersion = "1.3.2"
implementation("androidx.camera:camera-core:${cameraXVersion}")
implementation("androidx.camera:camera-camera2:${cameraXVersion}")
implementation("androidx.camera:camera-lifecycle:${cameraXVersion}")
implementation("androidx.camera:camera-view:${cameraXVersion}")
// Calls lifecycle listener
implementation("androidx.lifecycle:lifecycle-process:2.4.1")
}
}
val desktopMain by getting {
dependencies {
implementation("org.jetbrains.kotlinx:kotlinx-coroutines-swing:1.7.1")
implementation("com.github.Dansoftowner:jSystemThemeDetector:3.6")
implementation("org.jetbrains.kotlinx:kotlinx-coroutines-swing:1.8.0")
implementation("com.github.Dansoftowner:jSystemThemeDetector:3.8")
implementation("com.sshtools:two-slices:0.9.0-SNAPSHOT")
implementation("org.slf4j:slf4j-simple:2.0.7")
implementation("uk.co.caprica:vlcj:4.7.3")
implementation("org.slf4j:slf4j-simple:2.0.12")
implementation("uk.co.caprica:vlcj:4.8.2")
implementation("com.github.NanoHttpd.nanohttpd:nanohttpd:efb2ebf85a")
implementation("com.github.NanoHttpd.nanohttpd:nanohttpd-websocket:efb2ebf85a")
}
@@ -107,23 +109,21 @@ kotlin {
}
android {
compileSdkVersion(34)
namespace = "chat.simplex.common"
compileSdk = 34
sourceSets["main"].manifest.srcFile("src/androidMain/AndroidManifest.xml")
defaultConfig {
minSdkVersion(28)
targetSdkVersion(33)
}
compileOptions {
sourceCompatibility = JavaVersion.VERSION_1_8
targetCompatibility = JavaVersion.VERSION_1_8
minSdk = 28
}
testOptions.targetSdk = 33
lint.targetSdk = 33
val isAndroid = gradle.startParameter.taskNames.find {
val lower = it.toLowerCase()
val lower = it.lowercase()
lower.contains("release") || lower.startsWith("assemble") || lower.startsWith("install")
} != null
if (isAndroid) {
// This is not needed on Android but can't be moved to desktopMain because MR lib don't support this.
// No other ways to exclude a file work but it's large and should be excluded
// No other ways to exclude a file work, but it's large and should be excluded
kotlin.sourceSets["commonMain"].resources.exclude("/MR/fonts/NotoColorEmoji-Regular.ttf")
}
}
@@ -0,0 +1,30 @@
package chat.simplex.common.helpers
import android.content.*
import android.net.Uri
import android.provider.Settings
import chat.simplex.common.platform.*
import chat.simplex.common.views.helpers.AlertManager
import chat.simplex.common.views.helpers.generalGetString
import chat.simplex.res.MR
fun Context.openAppSettingsInSystem() {
Intent().apply {
action = Settings.ACTION_APPLICATION_DETAILS_SETTINGS
data = Uri.parse("package:${androidAppContext.packageName}")
try {
startActivity(this)
} catch (e: ActivityNotFoundException) {
Log.e(TAG, e.stackTraceToString())
}
}
}
fun Context.showAllowPermissionInSettingsAlert(action: () -> Unit = ::openAppSettingsInSystem) {
AlertManager.shared.showAlertMsg(
title = generalGetString(MR.strings.permissions_grant_in_settings),
text = generalGetString(MR.strings.permissions_find_in_settings_and_grant),
confirmText = generalGetString(MR.strings.permissions_open_settings),
onConfirm = action,
)
}
@@ -1,5 +1,7 @@
package chat.simplex.common.views.call
import SectionSpacer
import SectionView
import android.Manifest
import android.annotation.SuppressLint
import android.app.Activity
@@ -24,17 +26,18 @@ import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.graphics.painter.Painter
import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.platform.LocalLifecycleOwner
import dev.icerock.moko.resources.compose.painterResource
import dev.icerock.moko.resources.compose.stringResource
import androidx.compose.ui.text.TextStyle
import androidx.compose.ui.text.style.TextAlign
import androidx.compose.ui.text.style.TextOverflow
import androidx.compose.ui.unit.dp
import androidx.compose.ui.unit.sp
import androidx.compose.ui.viewinterop.AndroidView
import androidx.lifecycle.Lifecycle
import androidx.lifecycle.LifecycleEventObserver
import androidx.lifecycle.*
import androidx.webkit.WebViewAssetLoader
import androidx.webkit.WebViewClientCompat
import chat.simplex.common.helpers.showAllowPermissionInSettingsAlert
import chat.simplex.common.model.*
import chat.simplex.common.ui.theme.*
import chat.simplex.common.model.ChatModel
@@ -42,13 +45,12 @@ import chat.simplex.common.model.Contact
import chat.simplex.common.platform.*
import chat.simplex.common.views.helpers.*
import chat.simplex.res.MR
import com.google.accompanist.permissions.rememberMultiplePermissionsState
import com.google.accompanist.permissions.*
import dev.icerock.moko.resources.StringResource
import kotlinx.coroutines.*
import kotlinx.coroutines.flow.distinctUntilChanged
import kotlinx.coroutines.flow.filterNotNull
import kotlinx.datetime.Clock
import kotlinx.serialization.decodeFromString
import kotlinx.serialization.encodeToString
// Should be destroy()'ed and set as null when call is ended. Otherwise, it will be a leak
@@ -209,7 +211,6 @@ actual fun ActiveCallView() {
ActiveCallOverlay(call, chatModel, audioViaBluetooth)
}
}
val context = LocalContext.current
DisposableEffect(Unit) {
val activity = context as? Activity ?: return@DisposableEffect onDispose {}
@@ -510,34 +511,138 @@ private fun DisabledBackgroundCallsButton() {
// }
//}
@Composable
fun CallPermissionsView(pipActive: Boolean, hasVideo: Boolean, cancel: () -> Unit) {
val audioPermission = rememberPermissionState(Manifest.permission.RECORD_AUDIO)
val cameraPermission = rememberPermissionState(Manifest.permission.CAMERA)
val permissionsState = rememberMultiplePermissionsState(
permissions = if (hasVideo) {
listOf(Manifest.permission.CAMERA, Manifest.permission.RECORD_AUDIO)
} else {
listOf(Manifest.permission.RECORD_AUDIO)
}
)
val context = LocalContext.current
val buttonEnabled = remember { mutableStateOf(true) }
LaunchedEffect(Unit) {
if (!pipActive) {
permissionsState.launchMultiplePermissionRequestWithFallback(buttonEnabled, context::showAllowPermissionInSettingsAlert)
}
}
if (pipActive) {
Column(Modifier.fillMaxSize(), horizontalAlignment = Alignment.CenterHorizontally, verticalArrangement = Arrangement.SpaceEvenly) {
if (audioPermission.status is PermissionStatus.Denied) {
Icon(
painterResource(MR.images.ic_call_500),
stringResource(MR.strings.permissions_record_audio),
Modifier.size(24.dp),
tint = Color(0xFFFFFFD8)
)
}
if (hasVideo && cameraPermission.status is PermissionStatus.Denied) {
Icon(
painterResource(MR.images.ic_videocam),
stringResource(MR.strings.permissions_camera),
Modifier.size(24.dp),
tint = Color(0xFFFFFFD8)
)
}
}
} else {
ColumnWithScrollBar(Modifier.fillMaxSize()) {
Spacer(Modifier.height(AppBarHeight))
AppBarTitle(stringResource(MR.strings.permissions_required))
Spacer(Modifier.weight(1f))
val onClick = {
if (permissionsState.shouldShowRationale) {
context.showAllowPermissionInSettingsAlert()
} else {
permissionsState.launchMultiplePermissionRequestWithFallback(buttonEnabled, context::showAllowPermissionInSettingsAlert)
}
}
Text(stringResource(MR.strings.permissions_grant), Modifier.fillMaxWidth().padding(horizontal = DEFAULT_PADDING), textAlign = TextAlign.Center, color = Color(0xFFFFFFD8))
SectionSpacer()
SectionView {
Box(Modifier.fillMaxWidth(), contentAlignment = Alignment.Center) {
val text = if (hasVideo && audioPermission.status is PermissionStatus.Denied && cameraPermission.status is PermissionStatus.Denied) {
stringResource(MR.strings.permissions_camera_and_record_audio)
} else if (audioPermission.status is PermissionStatus.Denied) {
stringResource(MR.strings.permissions_record_audio)
} else if (hasVideo && cameraPermission.status is PermissionStatus.Denied) {
stringResource(MR.strings.permissions_camera)
} else ""
GrantPermissionButton(text, buttonEnabled.value, onClick)
}
}
Spacer(Modifier.weight(1f))
Box(Modifier.fillMaxWidth().padding(bottom = if (hasVideo) 0.dp else DEFAULT_BOTTOM_PADDING), contentAlignment = Alignment.Center) {
SimpleButtonFrame(cancel, Modifier.height(64.dp)) {
Text(stringResource(MR.strings.call_service_notification_end_call), fontSize = 20.sp, color = Color(0xFFFFFFD8))
}
}
}
}
}
@Composable
private fun GrantPermissionButton(text: String, enabled: Boolean, onClick: () -> Unit) {
Row(
Modifier
.clickable(enabled = enabled, onClick = onClick)
.heightIn(min = 30.dp)
.background(WarningOrange.copy(0.3f), RoundedCornerShape(50)),
verticalAlignment = Alignment.CenterVertically
) {
Text(text, Modifier.padding(horizontal = DEFAULT_PADDING, vertical = DEFAULT_PADDING_HALF), fontSize = 20.sp, color = WarningOrange)
}
}
/**
* The idea of this function is to ask system to show permission dialog and to see if it's really doing it.
* Otherwise, show alert with a button that opens settings for manual permission granting
* */
private fun MultiplePermissionsState.launchMultiplePermissionRequestWithFallback(buttonEnabled: MutableState<Boolean>, fallback: () -> Unit) {
buttonEnabled.value = false
val lifecycleOwner = ProcessLifecycleOwner.get().lifecycle
var useFallback = true
val observer = LifecycleEventObserver { _, event ->
if (event == Lifecycle.Event.ON_PAUSE) {
useFallback = false
buttonEnabled.value = true
}
}
lifecycleOwner.addObserver(observer)
withBGApi {
delay(2000)
if (useFallback && chatModel.activeCall.value != null) {
fallback()
}
buttonEnabled.value = true
}.invokeOnCompletion {
// Main thread only
withApi {
lifecycleOwner.removeObserver(observer)
}
}
launchMultiplePermissionRequest()
}
@Composable
fun WebRTCView(callCommand: SnapshotStateList<WCallCommand>, onResponse: (WVAPIMessage) -> Unit) {
val webView = remember { mutableStateOf<WebView?>(null) }
val permissionsState = rememberMultiplePermissionsState(
permissions = listOf(
Manifest.permission.CAMERA,
Manifest.permission.RECORD_AUDIO,
Manifest.permission.MODIFY_AUDIO_SETTINGS,
Manifest.permission.INTERNET
)
)
fun processCommand(wv: WebView, cmd: WCallCommand) {
val apiCall = WVAPICall(command = cmd)
wv.evaluateJavascript("processCommand(${json.encodeToString(apiCall)})", null)
}
val lifecycleOwner = LocalLifecycleOwner.current
DisposableEffect(lifecycleOwner) {
val observer = LifecycleEventObserver { _, event ->
if (event == Lifecycle.Event.ON_RESUME || event == Lifecycle.Event.ON_START) {
permissionsState.launchMultiplePermissionRequest()
}
}
lifecycleOwner.lifecycle.addObserver(observer)
DisposableEffect(Unit) {
onDispose {
lifecycleOwner.lifecycle.removeObserver(observer)
// val wv = webView.value
// if (wv != null) processCommand(wv, WCallCommand.End)
// webView.value?.destroy()
// val wv = webView.value
// if (wv != null) processCommand(wv, WCallCommand.End)
// webView.value?.destroy()
webView.value = null
}
}
@@ -560,44 +665,42 @@ fun WebRTCView(callCommand: SnapshotStateList<WCallCommand>, onResponse: (WVAPIM
.addPathHandler("/assets/www/", WebViewAssetLoader.AssetsPathHandler(LocalContext.current))
.build()
if (permissionsState.allPermissionsGranted) {
Box(Modifier.fillMaxSize()) {
AndroidView(
factory = { AndroidViewContext ->
(staticWebView ?: WebView(androidAppContext)).apply {
layoutParams = ViewGroup.LayoutParams(
ViewGroup.LayoutParams.MATCH_PARENT,
ViewGroup.LayoutParams.MATCH_PARENT,
)
this.webChromeClient = object: WebChromeClient() {
override fun onPermissionRequest(request: PermissionRequest) {
if (request.origin.toString().startsWith("file:/")) {
request.grant(request.resources)
} else {
Log.d(TAG, "Permission request from webview denied.")
request.deny()
}
Box(Modifier.fillMaxSize()) {
AndroidView(
factory = { AndroidViewContext ->
(staticWebView ?: WebView(androidAppContext)).apply {
layoutParams = ViewGroup.LayoutParams(
ViewGroup.LayoutParams.MATCH_PARENT,
ViewGroup.LayoutParams.MATCH_PARENT,
)
this.webChromeClient = object: WebChromeClient() {
override fun onPermissionRequest(request: PermissionRequest) {
if (request.origin.toString().startsWith("file:/")) {
request.grant(request.resources)
} else {
Log.d(TAG, "Permission request from webview denied.")
request.deny()
}
}
this.webViewClient = LocalContentWebViewClient(webView, assetLoader)
this.clearHistory()
this.clearCache(true)
this.addJavascriptInterface(WebRTCInterface(onResponse), "WebRTCInterface")
val webViewSettings = this.settings
webViewSettings.allowFileAccess = true
webViewSettings.allowContentAccess = true
webViewSettings.javaScriptEnabled = true
webViewSettings.mediaPlaybackRequiresUserGesture = false
webViewSettings.cacheMode = WebSettings.LOAD_NO_CACHE
if (staticWebView == null) {
this.loadUrl("file:android_asset/www/android/call.html")
} else {
webView.value = this
}
}
this.webViewClient = LocalContentWebViewClient(webView, assetLoader)
this.clearHistory()
this.clearCache(true)
this.addJavascriptInterface(WebRTCInterface(onResponse), "WebRTCInterface")
val webViewSettings = this.settings
webViewSettings.allowFileAccess = true
webViewSettings.allowContentAccess = true
webViewSettings.javaScriptEnabled = true
webViewSettings.mediaPlaybackRequiresUserGesture = false
webViewSettings.cacheMode = WebSettings.LOAD_NO_CACHE
if (staticWebView == null) {
this.loadUrl("file:android_asset/www/android/call.html")
} else {
webView.value = this
}
}
) { /* WebView */ }
}
}
) { /* WebView */ }
}
}
@@ -6,7 +6,6 @@ import androidx.compose.ui.graphics.ImageBitmap
import androidx.compose.ui.graphics.painter.BitmapPainter
import androidx.compose.ui.graphics.painter.Painter
import androidx.compose.ui.platform.LocalContext
import chat.simplex.common.helpers.toUri
import chat.simplex.common.model.CIFile
import chat.simplex.common.platform.*
import chat.simplex.common.views.helpers.ModalManager
@@ -15,7 +14,6 @@ import coil.compose.rememberAsyncImagePainter
import coil.decode.GifDecoder
import coil.decode.ImageDecoderDecoder
import coil.request.ImageRequest
import java.net.URI
@Composable
actual fun SimpleAndAnimatedImageView(
@@ -43,6 +41,7 @@ actual fun SimpleAndAnimatedImageView(
}
private val imageLoader = ImageLoader.Builder(androidAppContext)
.networkObserverEnabled(false)
.components {
if (SDK_INT >= 28) {
add(ImageDecoderDecoder.Factory())
@@ -15,6 +15,7 @@ import chat.simplex.common.platform.FileChooserLauncher
import chat.simplex.common.platform.saveImage
import chat.simplex.common.views.helpers.*
import chat.simplex.res.MR
import com.google.accompanist.permissions.PermissionStatus
import com.google.accompanist.permissions.rememberPermissionState
import dev.icerock.moko.resources.compose.painterResource
import dev.icerock.moko.resources.compose.stringResource
@@ -30,7 +31,7 @@ actual fun SaveContentItemAction(cItem: ChatItem, saveFileLauncher: FileChooserL
ItemAction(stringResource(MR.strings.save_verb), painterResource(if (cItem.file?.fileSource?.cryptoArgs == null) MR.images.ic_download else MR.images.ic_lock_open_right), onClick = {
when (cItem.content.msgContent) {
is MsgContent.MCImage -> {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R || writePermissionState.hasPermission) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R || writePermissionState.status == PermissionStatus.Granted) {
saveImage(cItem.file)
} else {
writePermissionState.launchPermissionRequest()
@@ -3,7 +3,7 @@ package chat.simplex.common.views.chat.item
import android.os.Build
import android.view.View
import androidx.compose.foundation.Image
import androidx.compose.runtime.Composable
import androidx.compose.runtime.*
import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.*
import androidx.compose.ui.graphics.painter.BitmapPainter
@@ -11,8 +11,8 @@ import androidx.compose.ui.layout.ContentScale
import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.viewinterop.AndroidView
import androidx.core.view.isVisible
import chat.simplex.common.helpers.toUri
import chat.simplex.common.platform.VideoPlayer
import chat.simplex.common.platform.androidAppContext
import chat.simplex.res.MR
import coil.ImageLoader
import coil.compose.rememberAsyncImagePainter
@@ -23,21 +23,11 @@ import coil.size.Size
import com.google.android.exoplayer2.ui.AspectRatioFrameLayout
import com.google.android.exoplayer2.ui.StyledPlayerView
import dev.icerock.moko.resources.compose.stringResource
import java.net.URI
@Composable
actual fun FullScreenImageView(modifier: Modifier, data: ByteArray, imageBitmap: ImageBitmap) {
// I'm making a new instance of imageLoader here because if I use one instance in multiple places
// I'm using a new private instance of imageLoader here because if I use one instance in multiple places
// after end of composition here a GIF from the first instance will be paused automatically which isn't what I want
val imageLoader = ImageLoader.Builder(LocalContext.current)
.components {
if (Build.VERSION.SDK_INT >= 28) {
add(ImageDecoderDecoder.Factory())
} else {
add(GifDecoder.Factory())
}
}
.build()
Image(
rememberAsyncImagePainter(
ImageRequest.Builder(LocalContext.current).data(data = data).size(Size.ORIGINAL).build(),
@@ -73,3 +63,14 @@ actual fun FullScreenVideoView(player: VideoPlayer, modifier: Modifier, close: (
modifier
)
}
private val imageLoader = ImageLoader.Builder(androidAppContext)
.networkObserverEnabled(false)
.components {
if (Build.VERSION.SDK_INT >= 28) {
add(ImageDecoderDecoder.Factory())
} else {
add(GifDecoder.Factory())
}
}
.build()
@@ -11,6 +11,7 @@ import androidx.camera.view.PreviewView
import androidx.compose.foundation.layout.*
import androidx.compose.material.*
import androidx.compose.runtime.*
import androidx.compose.runtime.saveable.rememberSaveable
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.draw.clipToBounds
@@ -27,6 +28,7 @@ import chat.simplex.common.platform.TAG
import chat.simplex.common.ui.theme.DEFAULT_PADDING_HALF
import chat.simplex.common.views.helpers.*
import chat.simplex.res.MR
import com.google.accompanist.permissions.PermissionStatus
import com.google.accompanist.permissions.rememberPermissionState
import com.google.common.util.concurrent.ListenableFuture
import dev.icerock.moko.resources.compose.painterResource
@@ -65,7 +67,7 @@ actual fun QRCodeScanner(
.widthIn(max = 400.dp)
.aspectRatio(1f)
val showScanner = remember { showQRCodeScanner }
if (showScanner.value && cameraPermissionState.hasPermission) {
if (showScanner.value && cameraPermissionState.status == PermissionStatus.Granted) {
AndroidView(
factory = { AndroidViewContext ->
PreviewView(AndroidViewContext).apply {
@@ -126,20 +128,22 @@ actual fun QRCodeScanner(
disabledBackgroundColor = MaterialTheme.colors.background.mixWith(MaterialTheme.colors.onBackground, 0.9f),
disabledContentColor = MaterialTheme.colors.primary,
)
var permissionRequested by rememberSaveable { mutableStateOf(false) }
when {
!cameraPermissionState.hasPermission && !cameraPermissionState.permissionRequested && showScanner.value -> {
cameraPermissionState.status is PermissionStatus.Denied && !permissionRequested && showScanner.value -> {
LaunchedEffect(Unit) {
permissionRequested = true
cameraPermissionState.launchPermissionRequest()
}
}
!cameraPermissionState.hasPermission -> {
cameraPermissionState.status is PermissionStatus.Denied -> {
Button({ cameraPermissionState.launchPermissionRequest() }, modifier = modifier, colors = buttonColors) {
Icon(painterResource(MR.images.ic_camera_enhance), null)
Spacer(Modifier.width(DEFAULT_PADDING_HALF))
Text(stringResource(MR.strings.enable_camera_access))
}
}
cameraPermissionState.hasPermission -> {
cameraPermissionState.status == PermissionStatus.Granted -> {
Button({ showQRCodeScanner.value = true }, modifier = modifier, colors = buttonColors) {
Icon(painterResource(MR.images.ic_qr_code), null)
Spacer(Modifier.width(DEFAULT_PADDING_HALF))
@@ -5,14 +5,15 @@ import android.os.Build
import androidx.compose.runtime.Composable
import androidx.compose.runtime.LaunchedEffect
import chat.simplex.common.platform.ntfManager
import com.google.accompanist.permissions.PermissionStatus
import com.google.accompanist.permissions.rememberPermissionState
@Composable
actual fun SetNotificationsModeAdditions() {
if (Build.VERSION.SDK_INT >= 33) {
val notificationsPermissionState = rememberPermissionState(Manifest.permission.POST_NOTIFICATIONS)
LaunchedEffect(notificationsPermissionState.hasPermission) {
if (notificationsPermissionState.hasPermission) {
LaunchedEffect(notificationsPermissionState.status == PermissionStatus.Granted) {
if (notificationsPermissionState.status == PermissionStatus.Granted) {
ntfManager.androidCreateNtfChannelsMaybeShowAlert()
} else {
notificationsPermissionState.launchPermissionRequest()
@@ -1753,6 +1753,8 @@ object ChatController {
chatModel.removeChat(rhId, r.mergedContact.id)
}
}
// ContactsSubscribed, ContactsDisconnected and ContactSubSummary are only used in CLI,
// They have to be used here for remote desktop to process these status updates.
is CR.ContactsSubscribed -> updateContactsStatus(r.contactRefs, NetworkStatus.Connected())
is CR.ContactsDisconnected -> updateContactsStatus(r.contactRefs, NetworkStatus.Disconnected())
is CR.ContactSubSummary -> {
@@ -5011,8 +5013,8 @@ sealed class AgentErrorType {
is BROKER -> "BROKER ${brokerErr.string}"
is AGENT -> "AGENT ${agentErr.string}"
is INTERNAL -> "INTERNAL $internalErr"
is INACTIVE -> "INACTIVE"
is CRITICAL -> "CRITICAL $offerRestart $criticalErr"
is INACTIVE -> "INACTIVE"
}
@Serializable @SerialName("CMD") class CMD(val cmdErr: CommandErrorType): AgentErrorType()
@Serializable @SerialName("CONN") class CONN(val connErr: ConnectionErrorType): AgentErrorType()
@@ -5023,8 +5025,8 @@ sealed class AgentErrorType {
@Serializable @SerialName("BROKER") class BROKER(val brokerAddress: String, val brokerErr: BrokerErrorType): AgentErrorType()
@Serializable @SerialName("AGENT") class AGENT(val agentErr: SMPAgentError): AgentErrorType()
@Serializable @SerialName("INTERNAL") class INTERNAL(val internalErr: String): AgentErrorType()
@Serializable @SerialName("INACTIVE") object INACTIVE: AgentErrorType()
@Serializable @SerialName("CRITICAL") data class CRITICAL(val offerRestart: Boolean, val criticalErr: String): AgentErrorType()
@Serializable @SerialName("INACTIVE") object INACTIVE: AgentErrorType()
}
@Serializable
@@ -5123,11 +5125,13 @@ sealed class SMPTransportError {
is BadBlock -> "badBlock"
is LargeMsg -> "largeMsg"
is BadSession -> "badSession"
is NoServerAuth -> "noServerAuth"
is Handshake -> "handshake ${handshakeErr.string}"
}
@Serializable @SerialName("badBlock") class BadBlock: SMPTransportError()
@Serializable @SerialName("largeMsg") class LargeMsg: SMPTransportError()
@Serializable @SerialName("badSession") class BadSession: SMPTransportError()
@Serializable @SerialName("noServerAuth") class NoServerAuth: SMPTransportError()
@Serializable @SerialName("handshake") class Handshake(val handshakeErr: SMPHandshakeError): SMPTransportError()
}
@@ -5137,10 +5141,12 @@ sealed class SMPHandshakeError {
is PARSE -> "PARSE"
is VERSION -> "VERSION"
is IDENTITY -> "IDENTITY"
is BAD_AUTH -> "BAD_AUTH"
}
@Serializable @SerialName("PARSE") class PARSE: SMPHandshakeError()
@Serializable @SerialName("VERSION") class VERSION: SMPHandshakeError()
@Serializable @SerialName("IDENTITY") class IDENTITY: SMPHandshakeError()
@Serializable @SerialName("BAD_AUTH") class BAD_AUTH: SMPHandshakeError()
}
@Serializable
@@ -5175,6 +5181,8 @@ sealed class XFTPErrorType {
is NO_FILE -> "NO_FILE"
is HAS_FILE -> "HAS_FILE"
is FILE_IO -> "FILE_IO"
is TIMEOUT -> "TIMEOUT"
is REDIRECT -> "REDIRECT"
is INTERNAL -> "INTERNAL"
}
@Serializable @SerialName("BLOCK") object BLOCK: XFTPErrorType()
@@ -5188,6 +5196,8 @@ sealed class XFTPErrorType {
@Serializable @SerialName("NO_FILE") object NO_FILE: XFTPErrorType()
@Serializable @SerialName("HAS_FILE") object HAS_FILE: XFTPErrorType()
@Serializable @SerialName("FILE_IO") object FILE_IO: XFTPErrorType()
@Serializable @SerialName("TIMEOUT") object TIMEOUT: XFTPErrorType()
@Serializable @SerialName("REDIRECT") class REDIRECT(val redirectError: String): XFTPErrorType()
@Serializable @SerialName("INTERNAL") object INTERNAL: XFTPErrorType()
}
@@ -5197,6 +5207,8 @@ sealed class RCErrorType {
is INTERNAL -> "INTERNAL $internalErr"
is IDENTITY -> "IDENTITY"
is NO_LOCAL_ADDRESS -> "NO_LOCAL_ADDRESS"
is NEW_CONTROLLER -> "NEW_CONTROLLER"
is NOT_DISCOVERED -> "NOT_DISCOVERED"
is TLS_START_FAILED -> "TLS_START_FAILED"
is EXCEPTION -> "EXCEPTION $EXCEPTION"
is CTRL_AUTH -> "CTRL_AUTH"
@@ -5211,6 +5223,8 @@ sealed class RCErrorType {
@Serializable @SerialName("internal") data class INTERNAL(val internalErr: String): RCErrorType()
@Serializable @SerialName("identity") object IDENTITY: RCErrorType()
@Serializable @SerialName("noLocalAddress") object NO_LOCAL_ADDRESS: RCErrorType()
@Serializable @SerialName("newController") object NEW_CONTROLLER: RCErrorType()
@Serializable @SerialName("notDiscovered") object NOT_DISCOVERED: RCErrorType()
@Serializable @SerialName("tlsStartFailed") object TLS_START_FAILED: RCErrorType()
@Serializable @SerialName("exception") data class EXCEPTION(val exception: String): RCErrorType()
@Serializable @SerialName("ctrlAuth") object CTRL_AUTH: RCErrorType()
@@ -5269,28 +5283,39 @@ sealed class RemoteCtrlError {
is BadState -> "badState"
is Busy -> "busy"
is Timeout -> "timeout"
is NoKnownControllers -> "noKnownControllers"
is BadController -> "badController"
is Disconnected -> "disconnected"
is BadInvitation -> "badInvitation"
is BadVersion -> "badVersion"
is HTTP2Error -> "http2Error"
is ProtocolError -> "protocolError"
}
val localizedString: String get() = when (this) {
is Inactive -> generalGetString(MR.strings.remote_ctrl_error_inactive)
is BadState -> generalGetString(MR.strings.remote_ctrl_error_bad_state)
is Busy -> generalGetString(MR.strings.remote_ctrl_error_busy)
is Timeout -> generalGetString(MR.strings.remote_ctrl_error_timeout)
is NoKnownControllers -> "no known controllers"
is BadController -> "bad controller"
is Disconnected -> generalGetString(MR.strings.remote_ctrl_error_disconnected)
is BadInvitation -> generalGetString(MR.strings.remote_ctrl_error_bad_invitation)
is BadVersion -> generalGetString(MR.strings.remote_ctrl_error_bad_version)
is HTTP2Error -> "HTTP2 error"
is ProtocolError -> "protocol error"
}
@Serializable @SerialName("inactive") object Inactive: RemoteCtrlError()
@Serializable @SerialName("badState") object BadState: RemoteCtrlError()
@Serializable @SerialName("busy") object Busy: RemoteCtrlError()
@Serializable @SerialName("timeout") object Timeout: RemoteCtrlError()
@Serializable @SerialName("noKnownControllers") object NoKnownControllers: RemoteCtrlError()
@Serializable @SerialName("badController") object BadController: RemoteCtrlError()
@Serializable @SerialName("disconnected") class Disconnected(val remoteCtrlId: Long, val reason: String): RemoteCtrlError()
@Serializable @SerialName("badInvitation") object BadInvitation: RemoteCtrlError()
@Serializable @SerialName("badVersion") data class BadVersion(val appVersion: String): RemoteCtrlError()
//@Serializable @SerialName("protocolError") data class ProtocolError(val protocolError: RemoteProtocolError): RemoteCtrlError()
@Serializable @SerialName("hTTP2Error") data class HTTP2Error(val http2Error: String): RemoteCtrlError()
@Serializable @SerialName("protocolError") object ProtocolError: RemoteCtrlError()
}
enum class NotificationsMode() {
@@ -109,6 +109,7 @@ private fun fileReady(file: CIFile, filePath: String) =
@Composable
expect fun rememberFileChooserLauncher(getContent: Boolean, rememberedValue: Any? = null, onResult: (URI?) -> Unit): FileChooserLauncher
@Composable
expect fun rememberFileChooserMultipleLauncher(onResult: (List<URI>) -> Unit): FileChooserMultipleLauncher
expect class FileChooserLauncher() {
@@ -260,6 +260,7 @@ val CurrentColors: MutableStateFlow<ThemeManager.ActiveTheme> = MutableStateFlow
@Composable
fun isInDarkTheme(): Boolean = !CurrentColors.collectAsState().value.colors.isLight
@Composable
expect fun isSystemInDarkTheme(): Boolean
fun reactOnDarkThemeChanges(isDark: Boolean) {
@@ -1392,11 +1392,12 @@ private fun providerForGallery(
return null
}
var initialIndex = Int.MAX_VALUE / 2
// Pager has a bug with overflowing when total pages is around Int.MAX_VALUE. Using smaller value
var initialIndex = 10000 / 2
var initialChatId = cItemId
return object: ImageGalleryProvider {
override val initialIndex: Int = initialIndex
override val totalMediaSize = mutableStateOf(Int.MAX_VALUE)
override val totalMediaSize = mutableStateOf(10000)
override fun getMedia(index: Int): ProviderMedia? {
val internalIndex = initialIndex - index
val item = item(internalIndex, initialChatId)?.second ?: return null
@@ -190,6 +190,7 @@ class AlertManager {
fun showAlertMsg(
title: String, text: String? = null,
confirmText: String = generalGetString(MR.strings.ok),
onConfirm: (() -> Unit)? = null,
hostDevice: Pair<Long?, String>? = null,
shareText: Boolean? = null
) {
@@ -220,6 +221,7 @@ class AlertManager {
}
TextButton(
onClick = {
onConfirm?.invoke()
hideAlert()
},
Modifier.focusRequester(focusRequester)
@@ -257,8 +259,9 @@ class AlertManager {
title: StringResource,
text: StringResource? = null,
confirmText: StringResource = MR.strings.ok,
onConfirm: (() -> Unit)? = null,
hostDevice: Pair<Long?, String>? = null,
) = showAlertMsg(generalGetString(title), if (text != null) generalGetString(text) else null, generalGetString(confirmText), hostDevice)
) = showAlertMsg(generalGetString(title), if (text != null) generalGetString(text) else null, generalGetString(confirmText), onConfirm, hostDevice)
@Composable
fun showInView() {
@@ -38,9 +38,7 @@ import chat.simplex.common.views.usersettings.*
import chat.simplex.res.MR
import dev.icerock.moko.resources.compose.painterResource
import dev.icerock.moko.resources.compose.stringResource
import kotlinx.coroutines.delay
import kotlinx.coroutines.flow.distinctUntilChanged
import kotlinx.coroutines.runBlocking
@Composable
fun ConnectMobileView() {
@@ -269,12 +267,20 @@ fun AddingMobileDevice(showTitle: Boolean, staleQrCode: MutableState<Boolean>, c
var cachedR by remember { mutableStateOf<CR.RemoteHostStarted?>(null) }
val customAddress = rememberSaveable { mutableStateOf<RemoteCtrlAddress?>(null) }
val customPort = rememberSaveable { mutableStateOf<Int?>(null) }
var userChangedAddress by rememberSaveable { mutableStateOf(false) }
var userChangedPort by rememberSaveable { mutableStateOf(false) }
val startRemoteHost = suspend {
if (customAddress.value != cachedR.address && cachedR != null) {
userChangedAddress = true
}
if (customPort.value != cachedR.port && cachedR != null) {
userChangedPort = true
}
val r = chatModel.controller.startRemoteHost(
rhId = null,
multicast = controller.appPrefs.offerRemoteMulticast.get(),
address = if (customAddress.value?.address != cachedR.address?.address) customAddress.value else cachedR.rh?.bindAddress_,
port = if (customPort.value != cachedR.port) customPort.value else cachedR.rh?.bindPort_
address = if (customAddress.value != null && userChangedAddress) customAddress.value else cachedR.rh?.bindAddress_,
port = if (customPort.value != null && userChangedPort) customPort.value else cachedR.rh?.bindPort_
)
if (r != null) {
cachedR = r
@@ -343,12 +349,20 @@ private fun showConnectMobileDevice(rh: RemoteHostInfo, connecting: MutableState
var cachedR by remember { mutableStateOf<CR.RemoteHostStarted?>(null) }
val customAddress = rememberSaveable { mutableStateOf<RemoteCtrlAddress?>(null) }
val customPort = rememberSaveable { mutableStateOf<Int?>(null) }
var userChangedAddress by rememberSaveable { mutableStateOf(false) }
var userChangedPort by rememberSaveable { mutableStateOf(false) }
val startRemoteHost = suspend {
if (customAddress.value != cachedR.address && cachedR != null) {
userChangedAddress = true
}
if (customPort.value != cachedR.port && cachedR != null) {
userChangedPort = true
}
val r = chatModel.controller.startRemoteHost(
rhId = rh.remoteHostId,
multicast = controller.appPrefs.offerRemoteMulticast.get(),
address = if (customAddress.value?.address != cachedR.address?.address) customAddress.value else cachedR.rh?.bindAddress_ ?: rh.bindAddress_,
port = if (customPort.value != cachedR.port) customPort.value else cachedR.rh?.bindPort_ ?: rh.bindPort_
address = if (customAddress.value != null && userChangedAddress) customAddress.value else cachedR.rh?.bindAddress_ ?: rh.bindAddress_,
port = if (customPort.value != null && userChangedPort) customPort.value else cachedR.rh?.bindPort_ ?: rh.bindPort_
)
if (r != null) {
cachedR = r
@@ -490,7 +490,7 @@
<string name="custom_time_unit_hours">ساعات</string>
<string name="edit_history">السجل</string>
<string name="image_will_be_received_when_contact_completes_uploading">سيتم استلام الصورة عند اكتمال تحميل جهة اتصالك.</string>
<string name="if_you_cannot_meet_in_person_show_QR_in_video_call_or_via_another_channel"><![CDATA[إذا لم تتمكن من الالتقاء شخصيًا، <b>اعرض رمز الاستجابة السريعة في مكالمة الفيديو</b>، أو شارك الرابط.]]></string>
<string name="if_you_cannot_meet_in_person_show_QR_in_video_call_or_via_another_channel"><![CDATA[إذا لم تتمكن من الالتقاء شخصيًا، <b>اعرض رمز QR في مكالمة الفيديو</b>، أو شارك الرابط.]]></string>
<string name="install_simplex_chat_for_terminal">ثبّت SimpleX Chat لطرفية</string>
<string name="network_disable_socks_info">إذا قمت بالتأكيد، فستتمكن خوادم المراسلة من رؤية عنوان IP الخاص بك ومزود الخدمة الخاص بك - أي الخوادم التي تتصل بها.</string>
<string name="hide_dev_options">إخفاء:</string>
@@ -520,7 +520,7 @@
<string name="image_will_be_received_when_contact_is_online">سيتم استلام الصورة عندما تكون جهة اتصالك متصلة بالإنترنت، يرجى الانتظار أو التحقق لاحقًا!</string>
<string name="image_saved">حُفظت الصورة في المعرض</string>
<string name="gallery_image_button">صورة</string>
<string name="if_you_cant_meet_in_person">إذا لم تتمكن من الالتقاء شخصيًا، اعرض رمز الاستجابة السريعة في مكالمة الفيديو، أو شارك الرابط.</string>
<string name="if_you_cant_meet_in_person">إذا لم تتمكن من الالتقاء شخصيًا، اعرض رمز QR في مكالمة الفيديو، أو شارك الرابط.</string>
<string name="settings_section_title_incognito">وضع التخفي</string>
<string name="incognito">التخفي</string>
<string name="import_theme_error">خطأ في استيراد السمة</string>
@@ -957,7 +957,7 @@
<string name="connect_via_link_or_qr_from_clipboard_or_in_person">(امسح أو ألصق من الحافظة)</string>
<string name="network_option_seconds_label">ثانية</string>
<string name="sender_may_have_deleted_the_connection_request">قد يكون المرسل قد ألغى طلب الاتصال</string>
<string name="scan_QR_code">مسح رمز الاستجابة السريعة</string>
<string name="scan_QR_code">مسح رمز QR</string>
<string name="send_us_an_email">أرسل لنا بريداً</string>
<string name="scan_code_from_contacts_app">مسح رمز الأمان من تطبيق جهة الاتصال</string>
<string name="share_invitation_link">مشاركة رابط ذو استخدام واحد</string>
@@ -1643,4 +1643,6 @@
<string name="migrate_from_device_archiving_database">جارِ أرشفة قاعدة البيانات</string>
<string name="migrate_from_device_all_data_will_be_uploaded">سيتم تعمية جميع جهات الاتصال والمحادثات والملفات الخاصة بك بشكل آمن وتحميلها في أجزاء إلى مُرحلات XFTP التي ضبطت.</string>
<string name="migrate_to_device_apply_onion">طبّق</string>
<string name="migrate_from_device_using_on_two_device_breaks_encryption"><![CDATA[<b>يُرجى ملاحظة</b>: استخدام نفس قاعدة البيانات على جهازين سيؤدي إلى كسر فك تعمية الرسائل من اتصالاتك، كحماية أمنية.]]></string>
<string name="migrate_from_device_archive_will_be_deleted"><![CDATA[<b>تحذير</b>: سيتم حذف الأرشيف.]]></string>
</resources>
@@ -211,6 +211,7 @@
<string name="notification_preview_new_message">new message</string>
<string name="notification_new_contact_request">New contact request</string>
<string name="notification_contact_connected">Connected</string>
<string name="error_showing_desktop_notification">Error showing notification, contact developers.</string>
<!-- local authentication notice - SimpleXAPI.kt -->
<string name="la_notice_title_simplex_lock">SimpleX Lock</string>
@@ -813,6 +814,14 @@
<!-- CallView -->
<string name="unable_to_open_browser_title">Error opening browser</string>
<string name="unable_to_open_browser_desc">The default web browser is required for calls. Please configure the default browser in the system, and share more information with the developers.</string>
<string name="permissions_required">Grant permissions</string>
<string name="permissions_record_audio">Microphone</string>
<string name="permissions_camera">Camera</string>
<string name="permissions_camera_and_record_audio">Camera and microphone</string>
<string name="permissions_grant">Grant permission(s) to make calls</string>
<string name="permissions_grant_in_settings">Grant in settings</string>
<string name="permissions_find_in_settings_and_grant">Find this permission in Android settings and grant it manually.</string>
<string name="permissions_open_settings">Open settings</string>
<!-- SimpleXInfo -->
<string name="next_generation_of_private_messaging">The next generation of private messaging</string>
@@ -1628,7 +1628,7 @@
<string name="profile_update_event_updated_profile">актуализиран профил</string>
<string name="note_folder_local_display_name">Лични бележки</string>
<string name="message_too_large">Съобщението е твърде голямо</string>
<string name="welcome_message_is_too_long">Съобщението при посрещане е твърде голямо</string>
<string name="welcome_message_is_too_long">Съобщението при посрещане е твърде дълго</string>
<string name="database_migration_in_progress">Извършва се миграция на базата данни.
\nМоже да отнеме няколко минути.</string>
<string name="call_service_notification_audio_call">Аудио разговор</string>
@@ -1636,4 +1636,80 @@
<string name="unable_to_open_browser_desc">За разговори е необходим уеб браузър по подразбиране. Моля, конфигурирайте браузъра по подразбиране в системните настройки и споделете повече информация с разработчиците.</string>
<string name="call_service_notification_video_call">Видео разговор</string>
<string name="call_service_notification_end_call">Край на разговора</string>
<string name="e2ee_info_pq"><![CDATA[Съобщенията, файловете и разговорите са защитени чрез <b>квантово устойчиво e2e криптиране</b> с перфектна секретност при препращане, правдоподобно опровержение и възстановяване при взлом.]]></string>
<string name="auth_open_migration_to_another_device">Отвори екрана за мигриране</string>
<string name="migrate_from_another_device">Мигриране от друго устройство</string>
<string name="set_passphrase">Задаване на парола</string>
<string name="conn_event_enabled_pq">квантово устойчиво e2e криптиране</string>
<string name="conn_event_disabled_pq">стандартно криптиране от край до край</string>
<string name="migrate_to_device_chat_migrated">Чатът е мигриран!</string>
<string name="migrate_to_device_finalize_migration">Завършете миграцията на другото устройство.</string>
<string name="migrate_to_device_confirm_network_settings">Потвърди мрежовите настройки</string>
<string name="migrate_to_device_error_downloading_archive">Грешка при изтеглянето на архива</string>
<string name="migrate_from_device_database_init">Подготвя се качване</string>
<string name="migrate_from_device_error_exporting_archive">Грешка при експортиране на чат базата данни</string>
<string name="migrate_from_device_start_chat">Стартиране на чата</string>
<string name="v5_6_quantum_resistant_encryption">Квантово устойчиво криптиране</string>
<string name="v5_6_app_data_migration">Миграция на данните от приложението</string>
<string name="v5_6_app_data_migration_descr">Мигрирайте към друго устройство чрез QR код.</string>
<string name="v5_6_picture_in_picture_calls">Обаждания \"картина в картина\"</string>
<string name="v5_6_safer_groups">По-безопасни групи</string>
<string name="v5_6_safer_groups_descr">Администраторите могат да блокират член за всички.</string>
<string name="migrate_to_device_downloading_details">Подробности за линка се изтеглят</string>
<string name="migrate_to_device_downloading_archive">Архива се изтегля</string>
<string name="migrate_to_device_repeat_download">Повтори изтеглянето</string>
<string name="migrate_to_device_download_failed">Неуспешно изтегляне</string>
<string name="migrate_to_device_try_again">Можете да опитате още веднъж.</string>
<string name="migrate_to_device_importing_archive">Импортиране на архив</string>
<string name="migrate_to_device_import_failed">Неуспешно импортиране</string>
<string name="migrate_to_device_repeat_import">Повтори импортирането</string>
<string name="migrate_to_device_file_delete_or_link_invalid">Файлът е изтрит или линкът е невалиден</string>
<string name="migrate_to_device_confirm_network_settings_footer">Моля, потвърдете, че мрежовите настройки са правилни за това устройство.</string>
<string name="migrate_to_device_apply_onion">Приложи</string>
<string name="migrate_from_device_title">Мигрирай устройството</string>
<string name="migrate_from_device_to_another_device">Миграция към друго устройство</string>
<string name="migrate_from_device_error_saving_settings">Грешка при запазване на настройките</string>
<string name="migrate_from_device_exported_file_doesnt_exist">Експортираният файл не съществува</string>
<string name="migrate_from_device_error_uploading_archive">Грешка при качването на архива</string>
<string name="migrate_from_device_error_deleting_database">Грешка при изтриване на база данни</string>
<string name="migrate_from_device_stopping_chat">Спиране на чата</string>
<string name="migrate_from_device_chat_should_be_stopped">За да продължите, чатът трябва да бъде спрян.</string>
<string name="migrate_from_device_all_data_will_be_uploaded">Всички ваши контакти, разговори и файлове ще бъдат сигурно криптирани и качени на парчета в конфигурираните XFTP релета.</string>
<string name="migrate_from_device_uploading_archive">Архивът се качва</string>
<string name="migrate_from_device_try_again">Можете да опитате още веднъж.</string>
<string name="migrate_from_device_creating_archive_link">Създаване на архивен линк</string>
<string name="migrate_from_device_cancel_migration">Отмени миграцията</string>
<string name="migrate_from_device_finalize_migration">Завърши миграцията</string>
<string name="migrate_from_device_or_share_this_file_link">Или сигурно споделете този линк към файла</string>
<string name="migrate_from_device_delete_database_from_device">Изтриване на базата данни от това устройство</string>
<string name="migrate_from_device_migration_complete">Миграцията е завършена</string>
<string name="migrate_from_device_you_must_not_start_database_on_two_device"><![CDATA[<b>Не трябва</b> да използвате една и съща база данни на две устройства.]]></string>
<string name="migrate_from_device_using_on_two_device_breaks_encryption"><![CDATA[<b>Моля, обърнете внимание</b>: използването на една и съща база данни на две устройства ще наруши декриптирането на съобщенията от вашите връзки като защита на сигурността.]]></string>
<string name="migrate_from_device_verify_database_passphrase">Проверете паролата на базата данни</string>
<string name="migrate_from_device_confirm_you_remember_passphrase">Потвърдете, че помните паролата на базата данни, преди да я мигрирате.</string>
<string name="migrate_from_device_verify_passphrase">Провери паролата</string>
<string name="migrate_from_device_error_verifying_passphrase">Грешка при проверката на паролата:</string>
<string name="migrate_to_device_title">Мигрирай тук</string>
<string name="paste_archive_link">Постави архивен линк</string>
<string name="invalid_file_link">Невалиден линк</string>
<string name="migrate_to_device_migrating">Мигриране</string>
<string name="migrate_to_device_database_init">Изтеглянето се подготвя</string>
<string name="migrate_to_device_bytes_downloaded">%s изтеглени</string>
<string name="v5_6_picture_in_picture_calls_descr">Използвайте приложението по време на разговора.</string>
<string name="e2ee_info_no_pq_short">Този чат е защитен чрез криптиране от край до край.</string>
<string name="e2ee_info_pq_short">Този чат е защитен от квантово устойчиво криптиране от край до край.</string>
<string name="e2ee_info_no_pq"><![CDATA[Съобщенията, файловете и разговорите са защитени чрез <b>криптиране от край до край</b> с перфектна секретност при препращане, правдоподобно опровержение и възстановяване при взлом.]]></string>
<string name="or_paste_archive_link">Или постави архивен линк</string>
<string name="migrate_to_device_enter_passphrase">Въведи парола</string>
<string name="migrate_from_device_confirm_upload">Потвърди качването</string>
<string name="migrate_from_device_archive_and_upload">Архивиране и качване</string>
<string name="migrate_from_device_archiving_database">Архивиране на база данни</string>
<string name="migrate_from_device_bytes_uploaded">%s качени</string>
<string name="migrate_from_device_upload_failed">Неуспешно качване</string>
<string name="migrate_from_device_repeat_upload">Повтори качването</string>
<string name="migrate_from_device_choose_migrate_from_another_device"><![CDATA[Изберете <i>Миграция от друго устройство</i> на новото устройство и сканирайте QR кода.]]></string>
<string name="migrate_from_device_starting_chat_on_multiple_devices_unsupported">Внимание: стартирането на чата на множество устройства не се поддържа и ще доведе до неуспешно изпращане на съобщения</string>
<string name="migrate_from_device_check_connection_and_try_again">Проверете вашата интернет връзка и опитайте отново</string>
<string name="migrate_from_device_archive_will_be_deleted"><![CDATA[<b>Внимание</b>: архивът ще бъде изтрит.]]></string>
<string name="v5_6_quantum_resistant_encryption_descr">Активиране в личните чатове (БЕТА)!</string>
</resources>
@@ -379,7 +379,7 @@
<string name="your_settings">Vaše nastavení</string>
<string name="your_simplex_contact_address">Vaše SimpleX adresa</string>
<string name="database_passphrase_and_export">Přístupová fráze k databázi a export</string>
<string name="your_chat_profiles">Vaše chatovací profily</string>
<string name="your_chat_profiles">Vaše chat profily</string>
<string name="chat_with_the_founder">Zaslat otázky a nápady</string>
<string name="smp_servers_test_server">Test serveru</string>
<string name="enter_one_ICE_server_per_line">Servery ICE (jeden na řádek)</string>
@@ -719,7 +719,7 @@
<string name="settings_section_title_support">PODPOŘIT SIMPLEX CHAT</string>
<string name="settings_developer_tools">Nástroje pro vývojáře</string>
<string name="settings_section_title_incognito">Inkognito mód</string>
<string name="your_chat_database">Vaše chatovací databáze</string>
<string name="your_chat_database">Vaše chat databáze</string>
<string name="run_chat_section">SPUSTIT CHAT</string>
<string name="chat_is_running">Chat je spuštěn</string>
<string name="chat_is_stopped">Chat je zastaven</string>
@@ -262,7 +262,7 @@
<string name="gallery_video_button">Video</string>
<!-- help - ChatHelpView.kt -->
<string name="thank_you_for_installing_simplex">Danke, dass Sie SimpleX Chat installiert haben!</string>
<string name="you_can_connect_to_simplex_chat_founder"><![CDATA[Sie können sich <font color="#0088ff">mit SimpleX-Chat-Entwicklern verbinden, um Fragen zu stellen und Updates zu erhalten</font>.]]></string>
<string name="you_can_connect_to_simplex_chat_founder"><![CDATA[Sie können sich <font color="#0088ff">mit den SimpleX-Chat-Entwicklern verbinden, um Fragen zu stellen und aktuelle Informationen zu erhalten</font>.]]></string>
<string name="to_start_a_new_chat_help_header">Um einen neuen Chat zu starten</string>
<string name="chat_help_tap_button">Schaltfläche antippen</string>
<string name="above_then_preposition_continuation">Danach die gewünschte Aktion auswählen:</string>
@@ -1214,7 +1214,7 @@
<string name="create_address_and_let_people_connect">Erstellen Sie eine Adresse, damit sich Personen mit Ihnen verbinden können.</string>
<string name="create_simplex_address">SimpleX-Adresse erstellen</string>
<string name="share_with_contacts">Mit Kontakten teilen</string>
<string name="your_contacts_will_remain_connected">Ihre Kontakte bleiben verbunden.</string>
<string name="your_contacts_will_remain_connected">Ihre Kontakte bleiben weiterhin verbunden.</string>
<string name="auto_accept_contact">Automatisch akzeptieren</string>
<string name="enter_welcome_message_optional">Geben Sie eine Begrüßungsmeldung ein … (optional)</string>
<string name="invite_friends">Freunde einladen</string>
@@ -1725,7 +1725,7 @@
<string name="migrate_from_device_choose_migrate_from_another_device"><![CDATA[Wählen Sie auf dem neuen Gerät <i>Von einem anderen Gerät migrieren</i> und scannen Sie den QR-Code.]]></string>
<string name="migrate_from_device_delete_database_from_device">Datenbank auf diesem Gerät löschen</string>
<string name="v5_6_app_data_migration">App-Daten-Migration</string>
<string name="v5_6_safer_groups_descr">Administratoren können für ein Mitglied alle Funktionen blockieren.</string>
<string name="v5_6_safer_groups_descr">Administratoren können ein Gruppenmitglied für Alle blockieren.</string>
<string name="migrate_to_device_downloading_details">Link-Details werden heruntergeladen</string>
<string name="migrate_to_device_downloading_archive">Archiv wird heruntergeladen</string>
<string name="migrate_to_device_apply_onion">Anwenden</string>
@@ -1737,7 +1737,7 @@
<string name="migrate_from_device_using_on_two_device_breaks_encryption"><![CDATA[<b>Bitte beachten Sie</b>: Aus Sicherheitsgründen wird die Nachrichtenentschlüsselung Ihrer Verbindungen abgebrochen, wenn Sie die gleiche Datenbank auf zwei Geräten nutzen.]]></string>
<string name="migrate_from_device_cancel_migration">Migration abbrechen</string>
<string name="migrate_to_device_confirm_network_settings">Bestätigen Sie die Netzwerkeinstellungen</string>
<string name="migrate_from_device_confirm_you_remember_passphrase">Für die Migration bestätigen Sie bitte, dass Sie sich an das Datenbank-Passwort erinnern.</string>
<string name="migrate_from_device_confirm_you_remember_passphrase">Bitte bestätigen Sie für die Migration, dass Sie sich an Ihr Datenbank-Passwort erinnern.</string>
<string name="migrate_from_device_confirm_upload">Hochladen bestätigen</string>
<string name="migrate_to_device_download_failed">Herunterladen fehlgeschlagen</string>
<string name="e2ee_info_no_pq"><![CDATA[Nachrichten, Dateien und Anrufe sind durch <b>Ende-zu-Ende-Verschlüsselung</b> mit Perfect Forward Secrecy, Ablehnung und Einbruchs-Wiederherstellung geschützt.]]></string>
@@ -1759,7 +1759,7 @@
<string name="migrate_from_device_start_chat">Chat starten</string>
<string name="v5_6_quantum_resistant_encryption_descr">Kann in direkten Chats aktiviert werden (BETA)!</string>
<string name="v5_6_quantum_resistant_encryption">Quantum-resistente Verschlüsselung</string>
<string name="v5_6_app_data_migration_descr">Über einen QR-Code auf ein anderes Gerät migrieren.</string>
<string name="v5_6_app_data_migration_descr">Daten können über einen QR-Code auf ein anderes Gerät migriert werden.</string>
<string name="v5_6_picture_in_picture_calls">Bild-in-Bild-Anrufe</string>
<string name="v5_6_safer_groups">Sicherere Gruppen</string>
<string name="v5_6_picture_in_picture_calls_descr">Die App kann während eines Anrufs genutzt werden.</string>
@@ -1796,4 +1796,5 @@
<string name="migrate_to_device_confirm_network_settings_footer">Bitte bestätigen Sie, dass die Netzwerkeinstellungen auf diesem Gerät richtig sind.</string>
<string name="conn_event_disabled_pq">Standard-Ende-zu-Ende-Verschlüsselung</string>
<string name="migrate_from_device_you_must_not_start_database_on_two_device"><![CDATA[Sie dürfen die selbe Datenbank <b>nicht</b> auf zwei Geräten nutzen.]]></string>
<string name="error_showing_desktop_notification">Fehler beim Anzeigen der Benachrichtigung. Bitte kontaktieren Sie die Entwickler.</string>
</resources>
@@ -1648,4 +1648,72 @@
<string name="migrate_to_device_apply_onion">Aplicar</string>
<string name="migrate_from_device_archive_and_upload">Archivar y subir</string>
<string name="migrate_from_device_cancel_migration">Cancelar migración</string>
<string name="e2ee_info_no_pq_short">Este chat está protegido por cifrado de extremo a extremo.</string>
<string name="migrate_from_another_device">Migrar desde otro dispositivo</string>
<string name="conn_event_enabled_pq">cifrado e2e resistente a tecnologías cuánticas</string>
<string name="conn_event_disabled_pq">cifrado estándar de extremo a extremo</string>
<string name="migrate_to_device_bytes_downloaded">%s descargado</string>
<string name="migrate_from_device_or_share_this_file_link">O comparta de forma segura este enlace de archivo</string>
<string name="migrate_from_device_migration_complete">Migración completada</string>
<string name="migrate_from_device_start_chat">Empezar chat</string>
<string name="migrate_from_device_starting_chat_on_multiple_devices_unsupported">Advertencia: el inicio del chat en varios dispositivos no es compatible y provocará fallos en la entrega de mensajes.</string>
<string name="migrate_from_device_verify_passphrase">Verificar la frase de contraseña</string>
<string name="migrate_from_device_verify_database_passphrase">Verificar la contraseña de la base de datos</string>
<string name="v5_6_quantum_resistant_encryption_descr">¡Habilitar en chats directos (BETA)!</string>
<string name="v5_6_picture_in_picture_calls_descr">Usar la aplicación durante la llamada.</string>
<string name="v5_6_safer_groups">Grupos más seguros</string>
<string name="migrate_to_device_downloading_details">Descargando detalles del enlace</string>
<string name="invalid_file_link">Enlace inválido</string>
<string name="migrate_to_device_migrating">Migrando</string>
<string name="paste_archive_link">Pegar enlace de archivo</string>
<string name="migrate_to_device_database_init">Preparando descarga</string>
<string name="migrate_to_device_repeat_download">Repetir descarga</string>
<string name="migrate_to_device_try_again">Puedes intentarlo de nuevo.</string>
<string name="migrate_to_device_enter_passphrase">Introducir frase de contraseña</string>
<string name="migrate_to_device_error_downloading_archive">Error al descargar el archivo</string>
<string name="migrate_to_device_file_delete_or_link_invalid">El archivo se ha eliminado o el enlace no es válido</string>
<string name="migrate_to_device_finalize_migration">Finalizar la migración en otro dispostivo.</string>
<string name="migrate_to_device_import_failed">Error de importación</string>
<string name="migrate_to_device_importing_archive">Importando archivo</string>
<string name="migrate_to_device_repeat_import">Repetir importación</string>
<string name="migrate_from_device_title">Migrar dispositivo</string>
<string name="migrate_to_device_confirm_network_settings_footer">Por favor confirme que la configuración de red es correcta para este dispositivo.</string>
<string name="migrate_from_device_error_deleting_database">Error al borrar la base de datos</string>
<string name="migrate_from_device_error_uploading_archive">Error al subir el archivo</string>
<string name="migrate_from_device_stopping_chat">Deteniendo chat</string>
<string name="migrate_from_device_repeat_upload">Repetir la carga</string>
<string name="migrate_from_device_bytes_uploaded">%s subidos</string>
<string name="migrate_from_device_upload_failed">Error de subida</string>
<string name="migrate_from_device_uploading_archive">Subiendo archivo</string>
<string name="migrate_from_device_try_again">Puedes intentarlo de nuevo.</string>
<string name="migrate_from_device_creating_archive_link">Creando enlace de archivo</string>
<string name="migrate_from_device_delete_database_from_device">Borrar la base de datos de este dispositivo</string>
<string name="migrate_from_device_finalize_migration">Finalizar la migración</string>
<string name="migrate_from_device_archive_will_be_deleted"><![CDATA[<b>Atención</b>: el archivo se eliminará.]]></string>
<string name="migrate_from_device_check_connection_and_try_again">Compruebe su conexión a Internet y vuelva a intentarlo</string>
<string name="migrate_from_device_confirm_you_remember_passphrase">Confirme que recuerda la contraseña de la base de datos para migrarla.</string>
<string name="migrate_from_device_error_verifying_passphrase">Error al verificar la contraseña:</string>
<string name="migrate_from_device_using_on_two_device_breaks_encryption"><![CDATA[<b>Ten en cuenta</b>: usar la misma base de datos en dos dispositivos romperá el descifrado de mensajes de tus conexiones, como protección de seguridad.]]></string>
<string name="migrate_from_device_choose_migrate_from_another_device"><![CDATA[Elige <i>Migrar desde otro dispositivo</i> en el nuevo dispositivo y escanea el código QR.]]></string>
<string name="migrate_to_device_confirm_network_settings">Confirmar la configuración de red</string>
<string name="migrate_from_device_confirm_upload">Confirmar carga</string>
<string name="migrate_to_device_download_failed">Descarga fallida</string>
<string name="migrate_to_device_downloading_archive">Descargando archivo</string>
<string name="migrate_from_device_error_exporting_archive">Error al exportar la base de datos de chats</string>
<string name="migrate_from_device_error_saving_settings">Error al guardar los ajustes</string>
<string name="migrate_from_device_exported_file_doesnt_exist">El archivo exportado no existe</string>
<string name="migrate_from_device_chat_should_be_stopped">Para continuar, el chat debe detenerse.</string>
<string name="e2ee_info_no_pq"><![CDATA[Los mensajes, archivos y llamadas están protegidos por <b>cifrado de extremo a extremo</b> con perfecta confidencialidad, repudio y recuperación tras ataques.]]></string>
<string name="e2ee_info_pq"><![CDATA[Los mensajes, archivos y llamadas están protegidos por <b>cifrado de extremo a extremo resistente a computación cuántica</b> con perfecta confidencialidad, repudio y recuperación tras ataques.]]></string>
<string name="migrate_to_device_title">Migrar aquí</string>
<string name="migrate_from_device_to_another_device">Migrar hacia otro dispositivo</string>
<string name="v5_6_app_data_migration_descr">Migrar hacia otro dispositivo mediante código QR.</string>
<string name="auth_open_migration_to_another_device">Abrir pantalla de migración</string>
<string name="or_paste_archive_link">O pegar enlace del archivo</string>
<string name="v5_6_picture_in_picture_calls">Llamadas picture-in-picture</string>
<string name="migrate_from_device_database_init">Preparando subida</string>
<string name="v5_6_quantum_resistant_encryption">Cifrado resistente a tecnologías cuánticas</string>
<string name="set_passphrase">Establecer frase de contraseña</string>
<string name="e2ee_info_pq_short">Este chat está protegido por un cifrado de extremo a extremo resistente a tecnología cuántica.</string>
<string name="migrate_from_device_you_must_not_start_database_on_two_device"><![CDATA[<b>No debes</b> utilizar la misma base de datos en dos dispositivos.]]></string>
</resources>
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="alert_text_decryption_error_n_messages_failed_to_decrypt">%1$d üzenet visszafejtése sikertelen</string>
<string name="alert_text_decryption_error_n_messages_failed_to_decrypt">%1$d üzenet visszafejtése sikertelen.</string>
<string name="alert_text_decryption_error_too_many_skipped">%1$d üzenet kihagyva.</string>
<string name="integrity_msg_skipped">%1$d kihagyott üzenet</string>
<string name="group_info_section_title_num_members">%1$s TAG</string>
@@ -726,7 +726,7 @@
<string name="v4_6_reduced_battery_usage_descr">Hamarosan további fejlesztések érkeznek!</string>
<string name="message_reactions_prohibited_in_this_chat">Az üzenetreakciók ebben a csevegésben le vannak tiltva.</string>
<string name="incorrect_code">Helytelen biztonsági kód!</string>
<string name="alert_text_fragment_encryption_out_of_sync_old_database">Ez akkor fordulhat elő, ha ön, vagy a kapcsolata régi adatbázis biztonsági mentést használt.</string>
<string name="alert_text_fragment_encryption_out_of_sync_old_database">Ez akkor fordulhat elő, ha ön, vagy az ismerőse régi adatbázis biztonsági mentést használt.</string>
<string name="v5_3_new_desktop_app">Új asztali alkalmazás!</string>
<string name="v4_6_group_moderation_descr">Most már az adminok is:
\n- törölhetik a tagok üzeneteit.
@@ -740,15 +740,15 @@
<string name="new_member_role">Új tag szerepköre</string>
<string name="la_mode_off">Ki</string>
<string name="invalid_contact_link">Érvénytelen hivatkozás!</string>
<string name="network_use_onion_hosts_required_desc_in_alert">A csatlakozáshoz Onion host-okra lesz szükség.</string>
<string name="network_use_onion_hosts_required_desc_in_alert">A csatlakozáshoz Onion kiszolgálókra lesz szükség.</string>
<string name="new_in_version">Változások a %s verzióban</string>
<string name="network_use_onion_hosts_prefer_desc_in_alert">Onion host-ok használata, ha azok rendelkezésre állnak.</string>
<string name="network_use_onion_hosts_prefer_desc_in_alert">Onion kiszolgálók használata, ha azok rendelkezésre állnak.</string>
<string name="smp_servers_invalid_address">Érvénytelen kiszolgálócím!</string>
<string name="thousand_abbreviation">k</string>
<string name="chat_item_ttl_none">soha</string>
<string name="new_desktop"><![CDATA[<i>(új)</i>]]></string>
<string name="ensure_smp_server_address_are_correct_format_and_unique">Győződjön meg arról, hogy az SMP-kiszolgáló címei megfelelő formátumúak, sorszeparáltak és nincsenek duplikálva.</string>
<string name="network_use_onion_hosts_no_desc">Onion host-ok nem lesznek használva.</string>
<string name="network_use_onion_hosts_no_desc">Onion kiszolgálók nem lesznek használva.</string>
<string name="custom_time_unit_minutes">perc</string>
<string name="learn_more">Tudjon meg többet</string>
<string name="notification_new_contact_request">Új kapcsolattartási kérelem</string>
@@ -765,7 +765,7 @@
<string name="chat_preferences_on">be</string>
<string name="v5_1_japanese_portuguese_interface">Japán és Portugál kezelőfelület</string>
<string name="message_deletion_prohibited_in_chat">Ebben a csoportban az üzenetek visszafordíthatatlan törlése le van tiltva.</string>
<string name="network_use_onion_hosts_no_desc_in_alert">Onion host-ok nem lesznek használva.</string>
<string name="network_use_onion_hosts_no_desc_in_alert">Onion kiszolgálók nem lesznek használva.</string>
<string name="remote_host_was_disconnected_toast"><![CDATA[A(z) <b>%s</b> eszközzel megszakadt a kapcsolat]]></string>
<string name="custom_time_unit_months">hónap</string>
<string name="privacy_message_draft">Üzenetvázlat</string>
@@ -777,7 +777,7 @@
<string name="message_deletion_prohibited">Ebben a csevegésben az üzenetek visszafordíthatatlan törlése le van tiltva.</string>
<string name="v4_3_voice_messages_desc">Max 40 másodperc, azonnal fogadható.</string>
<string name="description_via_contact_address_link_incognito">inkognitó a ismerős azonosító hivatkozáson keresztül</string>
<string name="network_use_onion_hosts_required_desc">A kapcsolódáshoz Onion host-okra lesz szükség.
<string name="network_use_onion_hosts_required_desc">A kapcsolódáshoz Onion kiszolgálókra lesz szükség.
\nFigyelem: .onion cím nélkül nem fog tudni kapcsolódni a kiszolgálókhoz.</string>
<string name="v4_5_italian_interface">Olasz kezelőfelület</string>
<string name="system_restricted_background_in_call_title">Nincsenek háttérhívások</string>
@@ -833,8 +833,8 @@
\n3. A kapcsolat sérült.</string>
<string name="group_member_role_observer">megfigyelő</string>
<string name="description_via_group_link_incognito">inkognitó a csoportos hivatkozáson keresztül</string>
<string name="network_use_onion_hosts_prefer_desc">Onion host-ok használata, ha azok rendelkezésre állnak.</string>
<string name="invite_friends">Barátok meghívása</string>
<string name="network_use_onion_hosts_prefer_desc">Onion kiszolgálók használata, ha azok rendelkezésre állnak.</string>
<string name="invite_friends">Ismerősök meghívása</string>
<string name="color_surface">Menük és figyelmeztetések</string>
<string name="icon_descr_add_members">Tagok meghívása</string>
<string name="group_preview_join_as">csatlakozás mint %s</string>
@@ -1158,7 +1158,7 @@
<string name="whats_new">Változáslista</string>
<string name="connect_plan_open_group">Csoport megnyitása</string>
<string name="info_row_sent_at">Elküldve ekkor</string>
<string name="prohibit_sending_voice">Hangüzenetek küldésének letiltása.</string>
<string name="prohibit_sending_voice">Hangüzenetek küldése le van tiltva.</string>
<string name="privacy_show_last_messages">Utolsó üzenetek megjelenítése</string>
<string name="smp_servers_preset_address">Az előre beállított kiszolgáló címe</string>
<string name="periodic_notifications_disabled">Rendszeres értesítések letiltva!</string>
@@ -1477,7 +1477,7 @@
<string name="v5_0_app_passcode_descr">Rendszerhitelesítés helyetti beállítás.</string>
<string name="switch_receiving_address_desc">A fogadó cím egy másik kiszolgálóra változik. A címváltoztatás a feladó online állapotba kerülése után fejeződik be.</string>
<string name="stop_chat_to_export_import_or_delete_chat_database">A csevegés leállítása a csevegő adatbázis exportálásához, importálásához, vagy törléséhez. A csevegés leállítása alatt nem tud üzeneteket fogadni és küldeni.</string>
<string name="save_passphrase_in_keychain">Jelmondat mentése a kulcstárolóban</string>
<string name="save_passphrase_in_keychain">Jelmondat mentése a kulcstárolóba</string>
<string name="v4_6_chinese_spanish_interface_descr">Köszönet a felhasználóknak - hozzájárulás a Weblaten!</string>
<string name="save_passphrase_in_settings">Jelmondat mentése a beállításokban</string>
<string name="send_receipts_disabled_alert_msg">Ennek a csoportnak több mint %1$d tagja van, a kézbesítési jelentések nem kerülnek elküldésre.</string>
@@ -1710,4 +1710,5 @@
<string name="e2ee_info_pq_short">Ez a csevegés végpontok közötti kvantumrezisztens tikosítással védett.</string>
<string name="e2ee_info_no_pq"><![CDATA[Az üzeneteket, fájlokat és hívásokat <b>végpontok közötti titkosítással</b> és sérülés utáni titkosságvédelemmel, visszautasítással és sérülés utáni helyreállítással védi.]]></string>
<string name="e2ee_info_pq"><![CDATA[Az üzeneteket, fájlokat és hívásokat <b>végpontok közötti kvantumrezisztens titkosítással</b> és sérülés utáni titkosságvédelemmel, visszautasítással és sérülés utáni helyreállítással védi.]]></string>
<string name="error_showing_desktop_notification">Hiba az értesítés megjelenítésekor, lépjen kapcsolatba a fejlesztőkkel.</string>
</resources>
@@ -0,0 +1,44 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
width="120"
height="120"
viewBox="121 0 40 40"
fill="none"
version="1.1"
id="svg3"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg">
<path
fill-rule="evenodd"
clip-rule="evenodd"
d="m 126.52238,11.425398 5.80302,5.716401 5.88962,-5.889626 2.8582,2.858201 L 135.1836,20 l 5.7164,5.716402 -2.94482,2.8582 -5.7164,-5.629789 -5.88962,5.803014 -2.8582,-2.858201 5.88962,-5.803014 -5.803,-5.716402 z"
fill="#030749"
id="path1"
style="stroke-width:0.866122" />
<path
fill-rule="evenodd"
clip-rule="evenodd"
d="m 137.86858,28.661214 2.94481,-2.944812 v 0 l 5.88963,-5.803014 -5.80302,-5.62979 v 0 l -2.8582,-2.8582 -5.7164,-5.7164023 2.94481,-2.9448129 5.7164,5.7164017 5.88963,-5.8030138 2.8582,2.8582008 -5.88962,5.8030145 5.7164,5.716401 5.88962,-5.803014 2.8582,2.858201 -5.88962,5.803014 5.803,5.716402 -2.9448,2.858201 -5.7164,-5.716402 -5.88963,5.803013 5.7164,5.716402 -2.8582,2.944813 -5.80301,-5.716402 -5.80302,5.803015 -2.8582,-2.858201 z"
fill="url(#paint0_linear_40_164)"
id="path2"
style="fill:url(#paint0_linear_40_164);stroke-width:0.866122" />
<defs
id="defs3">
<linearGradient
x1="135.948"
y1="-0.81632602"
x2="132.09599"
y2="36.985699"
gradientUnits="userSpaceOnUse"
id="paint0_linear_40_164"
gradientTransform="matrix(0.86612147,0,0,0.86612147,18.863485,2.6775707)">
<stop
stop-color="#01f1ff"
id="stop2" />
<stop
offset="1"
stop-color="#0197ff"
id="stop3" />
</linearGradient>
</defs>
</svg>

After

Width:  |  Height:  |  Size: 1.7 KiB

@@ -1500,7 +1500,7 @@
<string name="v5_4_block_group_members">Blocca i membri dei gruppi</string>
<string name="v5_4_incognito_groups_descr">Crea un gruppo usando un profilo casuale.</string>
<string name="v5_4_link_mobile_desktop">Collega le app mobile e desktop! 🔗</string>
<string name="v5_4_link_mobile_desktop_descr">Tramite protocollo sicuro resistente al quantistico.</string>
<string name="v5_4_link_mobile_desktop_descr">Tramite protocollo sicuro resistente alla quantistica.</string>
<string name="v5_4_block_group_members_descr">Per nascondere messaggi indesiderati.</string>
<string name="v5_4_better_groups">Gruppi migliorati</string>
<string name="v5_4_incognito_groups">Gruppi in incognito</string>
@@ -1640,7 +1640,7 @@
<string name="unable_to_open_browser_title">Errore di apertura del browser</string>
<string name="unable_to_open_browser_desc">Il browser predefinito è necessario per le chiamate. Configura il browser predefinito nel sistema, poi condividi più informazioni con gli sviluppatori.</string>
<string name="e2ee_info_no_pq_short">Questa chat è protetta da crittografia end-to-end.</string>
<string name="e2ee_info_pq_short">Questa chat è protetta da crittografia end-to-end resistente al quantistico.</string>
<string name="e2ee_info_pq_short">Questa chat è protetta da crittografia end-to-end resistente alla quantistica.</string>
<string name="migrate_from_device_start_chat">Avvia chat</string>
<string name="migrate_to_device_title">Migra qui</string>
<string name="migrate_to_device_downloading_details">Scaricamento dettagli del link</string>
@@ -1680,7 +1680,7 @@
<string name="migrate_to_device_importing_archive">Importazione archivio</string>
<string name="invalid_file_link">Link non valido</string>
<string name="e2ee_info_no_pq"><![CDATA[I messaggi, i file e le chiamate sono protetti da <b>crittografia end-to-end</b> con perfect forward secrecy, ripudio e recupero da intrusione.]]></string>
<string name="e2ee_info_pq"><![CDATA[I messaggi, i file e le chiamate sono protetti da <b>crittografia e2e resistente al quantistico</b> con perfect forward secrecy, ripudio e recupero da intrusione.]]></string>
<string name="e2ee_info_pq"><![CDATA[I messaggi, i file e le chiamate sono protetti da <b>crittografia e2e resistente alla quantistica</b> con perfect forward secrecy, ripudio e recupero da intrusione.]]></string>
<string name="migrate_from_device_title">Migra dispositivo</string>
<string name="migrate_from_another_device">Migra da un altro dispositivo</string>
<string name="migrate_from_device_to_another_device">Migra ad un altro dispositivo</string>
@@ -1694,10 +1694,10 @@
<string name="v5_6_picture_in_picture_calls">Chiamate picture-in-picture</string>
<string name="migrate_to_device_confirm_network_settings_footer">Conferma che le impostazioni di rete sono corrette per questo dispositivo.</string>
<string name="migrate_from_device_database_init">Preparazione del caricamento</string>
<string name="conn_event_enabled_pq">crittografia e2e resistente al quantistico</string>
<string name="conn_event_enabled_pq">crittografia e2e resistente alla quantistica</string>
<string name="migrate_to_device_repeat_import">Ripeti importazione</string>
<string name="migrate_to_device_database_init">Preparazione dello scaricamento</string>
<string name="v5_6_quantum_resistant_encryption">Crittografia resistente al quantistico</string>
<string name="v5_6_quantum_resistant_encryption">Crittografia resistente alla quantistica</string>
<string name="migrate_to_device_repeat_download">Ripeti scaricamento</string>
<string name="migrate_from_device_repeat_upload">Ripeti caricamento</string>
<string name="v5_6_safer_groups">Gruppi più sicuri</string>
@@ -37,7 +37,7 @@
<string name="allow_your_contacts_to_send_disappearing_messages">אפשר לאנשי קשר לשלוח הודעות נעלמות.</string>
<string name="allow_voice_messages_only_if">אפשר הודעות קוליות רק אם איש הקשר מאפשר אותן.</string>
<string name="allow_your_contacts_to_call">אפשר לאנשי קשר להתקשר אליכם.</string>
<string name="allow_to_delete_messages">אפשר מחיקה בלתי הפיכה של הודעות שנשלחו.</string>
<string name="allow_to_delete_messages">אפשר למחוק הודעות שנשלחו באופן בלתי הפיך. (24 שעות)</string>
<string name="allow_to_send_disappearing">אפשר שליחת הודעות נעלמות.</string>
<string name="allow_to_send_voice">אפשר שליחת הודעות קוליות.</string>
<string name="group_member_role_admin">מנהל</string>
@@ -47,7 +47,7 @@
<string name="v4_3_improved_server_configuration_desc">הוספת שרתים על ידי סריקת קוד QR.</string>
<string name="smp_servers_add_to_another_device">הוסף למכשיר אחר</string>
<string name="allow_calls_only_if">אפשר שיחות רק אם איש הקשר מאפשר אותן.</string>
<string name="allow_irreversible_message_deletion_only_if">אפשר לאנשי קשר מחיקת הודעות בלתי הפיכה רק אם הם מאפשרים לך לעשות זאת.</string>
<string name="allow_irreversible_message_deletion_only_if">אפשר מחיקת הודעות בלתי הפיכה רק אם האיש קשר מאפשר את זה (24 שעות)</string>
<string name="allow_direct_messages">אפשר שליחת הודעות ישירות לחברי הקבוצה.</string>
<string name="allow_voice_messages_question">לאפשר הודעות קוליות\?</string>
<string name="allow_your_contacts_to_send_voice_messages">אפשר לאנשי קשר לשלוח הודעות קוליות.</string>
@@ -95,7 +95,7 @@
<string name="auth_unavailable">אימות לא זמין</string>
<string name="onboarding_notifications_mode_off_desc"><![CDATA[<b>הטוב ביותר לסוללה</b>. התראות יוצגו רק כאשר האפליקציה מופעלת (ללא שירות רקע).]]></string>
<string name="onboarding_notifications_mode_periodic_desc"><![CDATA[<b>טוב לסוללה</b>. שירות הרקע ייבדוק הודעות כל 10 דקות. שיחות או הודעות דחופות עלולות להתפספס.]]></string>
<string name="both_you_and_your_contacts_can_delete">גם אתם וגם איש הקשר יכולים למחוק באופן בלתי הפיך הודעות שנשלחו.</string>
<string name="both_you_and_your_contacts_can_delete">גם אתה וגם איש הקשר שלך יכולים למחוק הודעות שנשלחו באופן בלתי הפיך. (24 שעות)</string>
<string name="both_you_and_your_contact_can_send_disappearing">גם אתם וגם איש הקשר יכולים לשלוח הודעות נעלמות.</string>
<string name="cannot_receive_file">לא ניתן לקבל את הקובץ</string>
<string name="icon_descr_cancel_image_preview">בטל תצוגה מקדימה של תמונות</string>
@@ -117,9 +117,9 @@
<string name="callstatus_calling">מתקשר…</string>
<string name="callstatus_ended">השיחה הסתיימה %1$s</string>
<string name="icon_descr_cancel_file_preview">בטל תצוגה מקדימה של קבצים</string>
<string name="connect_via_contact_link">להתחבר באמצעות קישור ליצירת קשר\?</string>
<string name="connect_via_contact_link">להתחבר באמצעות קישור ליצירת קשר?</string>
<string name="connect_via_link_verb">התחבר</string>
<string name="connect_via_group_link">להתחבר באמצעות קישור קבוצה\?</string>
<string name="connect_via_group_link">להצטרף לקבוצה?</string>
<string name="server_connected">מחובר</string>
<string name="server_connecting">מתחבר</string>
<string name="display_name_connecting">מתחבר…</string>
@@ -197,7 +197,7 @@
<string name="icon_descr_server_status_connected">מחובר</string>
<string name="display_name_connection_established">חיבור נוצר</string>
<string name="connection_local_display_name">חיבור %1$d</string>
<string name="connect_via_invitation_link">להתחבר באמצעות קישור הזמנה\?</string>
<string name="connect_via_invitation_link">להתחבר דרך קישור חד-פעמי?</string>
<string name="contact_already_exists">איש הקשר כבר קיים</string>
<string name="delete_contact_all_messages_deleted_cannot_undo_warning">איש הקשר וכל ההודעות יימחקו – לא ניתן לבטל זאת!</string>
<string name="connect_via_link_or_qr">התחברות באמצעות קישור / קוד QR</string>
@@ -333,7 +333,7 @@
<string name="la_enter_app_passcode">הזינו קוד גישה</string>
<string name="auth_enable_simplex_lock">הפעלת נעילת SimpleX</string>
<string name="edit_verb">ערוך</string>
<string name="display_name__field">שם תצוגה:</string>
<string name="display_name__field">שם פרופיל:</string>
<string name="edit_image">ערוך תמונה</string>
<string name="enter_correct_passphrase">הזינו סיסמה נכונה.</string>
<string name="mtr_error_different">העברת נתונים שונה באפליקציה/מסד נתונים: %s / %s</string>
@@ -389,7 +389,7 @@
<string name="v4_5_multiple_chat_profiles_descr">שמות שונים, אווטארים ובידוד תעבורה.</string>
<string name="conn_level_desc_direct">ישיר</string>
<string name="direct_messages_are_prohibited_in_chat">הודעות ישירות בין חברי קבוצה אסורות בקבוצה זו.</string>
<string name="display_name">שם תצוגה</string>
<string name="display_name">הזן את שמך:</string>
<string name="display_name_cannot_contain_whitespace">שם תצוגה אינו יכול להכיל רווחים.</string>
<string name="ttl_months">%d חודשים</string>
<string name="ttl_mth">%d ח׳</string>
@@ -436,7 +436,7 @@
<string name="file_with_path">קובץ: %s</string>
<string name="icon_descr_group_inactive">קבוצה לא פעילה</string>
<string name="group_invitation_expired">פג תוקפה של ההזמנה לקבוצה</string>
<string name="group_display_name_field">שם תצוגה של הקבוצה:</string>
<string name="group_display_name_field">הזן שם של הקבוצה:</string>
<string name="group_full_name_field">שם מלא של הקבוצה:</string>
<string name="v4_2_group_links">קישורי קבוצה</string>
<string name="icon_descr_file">קובץ</string>
@@ -495,7 +495,7 @@
<string name="delete_group_for_self_cannot_undo_warning">הקבוצה תימחק עבורך – לא ניתן לבטל זאת!</string>
<string name="user_hide">הסתר</string>
<string name="group_preferences">העדפות קבוצה</string>
<string name="group_members_can_delete">חברי הקבוצה יכולים למחוק באופן בלתי הפיך הודעות שנשלחו.</string>
<string name="group_members_can_delete">חברי קבוצה יכולים למחוק הודעות שנשלחו באופן בלתי הפיך. (24 שעות)</string>
<string name="group_members_can_send_disappearing">חברי הקבוצה יכולים לשלוח הודעות נעלמות.</string>
<string name="group_members_can_send_dms">חברי הקבוצה יכולים לשלוח הודעות ישירות.</string>
<string name="group_members_can_send_voice">חברי הקבוצה יכולים לשלוח הודעות קוליות.</string>
@@ -627,7 +627,7 @@
<string name="chat_preferences_on">פעיל</string>
<string name="chat_preferences_no">לא</string>
<string name="chat_preferences_off">כבוי</string>
<string name="only_you_can_delete_messages">רק אתם יכולים למחוק הודעות באופן בלתי הפיך (איש הקשר שלכם יכול לסמן אותן למחיקה).</string>
<string name="only_you_can_delete_messages">רק אתה יכול למחוק הודעות באופן בלתי הפיך (איש הקשר שלך יכול לסמן אותן למחיקה). (24 שעות)</string>
<string name="only_you_can_send_voice">רק אתם יכולים לשלוח הודעות קוליות.</string>
<string name="only_your_contact_can_send_voice">רק איש הקשר שלכם יכול לשלוח הודעות קוליות.</string>
<string name="only_you_can_make_calls">רק אתם יכולים לבצע שיחות.</string>
@@ -640,7 +640,7 @@
<string name="no_contacts_to_add">אין אנשי קשר להוסיף</string>
<string name="only_you_can_send_disappearing">רק אתם יכולים לשלוח הודעות נעלמות.</string>
<string name="only_your_contact_can_send_disappearing">רק איש הקשר שלכם יכול לשלוח הודעות נעלמות.</string>
<string name="only_your_contact_can_delete">רק איש הקשר שלכם יכול למחוק הודעות באופן בלתי הפיך (אתם יכולים לסמן אותן למחיקה).</string>
<string name="only_your_contact_can_delete">רק איש הקשר שלך יכול למחוק הודעות באופן בלתי הפיך (אתה יכול לסמן אותן למחיקה). (24 שעות)</string>
<string name="v4_5_message_draft">טיוטת הודעה</string>
<string name="v4_5_multiple_chat_profiles">פרופילי צ׳אט מרובים</string>
<string name="v4_5_reduced_battery_usage_descr">שיפורים נוספים יגיעו בקרוב!</string>
@@ -761,7 +761,7 @@
<string name="smp_servers_preset_address">כתובת שרת מוגדר מראש</string>
<string name="password_to_show">סיסמה להצגה</string>
<string name="onboarding_notifications_mode_title">התראות פרטיות</string>
<string name="paste_the_link_you_received">הדבק קישור שהתקבל</string>
<string name="paste_the_link_you_received">הדבק את הקישור שקיבלת</string>
<string name="call_connection_peer_to_peer">עמית־לעמית</string>
<string name="icon_descr_call_pending_sent">שיחה ממתינה</string>
<string name="alert_text_fragment_please_report_to_developers">אנא דווחו על כך למפתחים.</string>
@@ -1156,7 +1156,7 @@
<string name="you_accepted_connection">אישרת את החיבור</string>
<string name="image_descr_simplex_logo">סמל SimpleX</string>
<string name="xftp_servers">שרתי XFTP</string>
<string name="alert_text_decryption_error_too_many_skipped">%1$d הודעות דולגו.</string>
<string name="alert_text_decryption_error_too_many_skipped">דילג על %1$d הודעות.</string>
<string name="wrong_passphrase">סיסמת מסד נתונים שגויה</string>
<string name="you_are_invited_to_group">הוזמנת לקבוצה</string>
<string name="you_joined_this_group">הצטרפת לקבוצה זו</string>
@@ -1219,7 +1219,7 @@
<string name="your_ice_servers">שרתי ה־ICE שלך</string>
<string name="you_will_be_connected_when_your_connection_request_is_accepted">אתם תהיו מחוברים כאשר בקשת החיבור תאושר, אנא חכו או בידקו מאוחר יותר!</string>
<string name="profile_will_be_sent_to_contact_sending_link">הפרופיל שלך יישלח לאיש הקשר ממנו קיבלת קישור זה.</string>
<string name="you_will_join_group">אתם תצטרפו לקבוצה אליה קישור זה מפנה ותתחברו לחברי הקבוצה.</string>
<string name="you_will_join_group">תתחבר לכל חברי הקבוצה.</string>
<string name="description_you_shared_one_time_link_incognito">שיתפת קישור חד־פעמי לזהות נסתרת</string>
<string name="la_notice_turn_on">הפעלת נעילה</string>
<string name="incognito_random_profile">הפרופיל האקראי שלך</string>
@@ -1374,7 +1374,7 @@
<string name="error_creating_member_contact">שגיאה ביצירת איש קשר</string>
<string name="socks_proxy_setting_limitations"><![CDATA[<b>שימו לב</b>: ממסרי הודעות וקבצים מחוברים דרך פרוקסי SOCKS. שיחות ושליחת תצוגות מקדימות של קישורים משתמשים בחיבור ישיר.]]></string>
<string name="encrypt_local_files">הצפין קבצים מקומיים</string>
<string name="v5_3_new_desktop_app">אפליקציית שולחן עבודה חדשה!</string>
<string name="v5_3_new_desktop_app">אפליקציה חדשה למחשב השולחני!</string>
<string name="v5_3_new_interface_languages">6 שפות ממשק חדשות</string>
<string name="v5_3_encrypt_local_files_descr">האפליקציה מצפינה קבצים מקומיים חדשים (למעט סרטונים).</string>
<string name="you_can_change_it_later">ביטוי סיסמה אקראי מאוחסן בהגדרות כטקסט רגיל.
@@ -1399,4 +1399,321 @@
<string name="settings_is_storing_in_clear_text">ביטוי הסיסמה מאוחסן בהגדרות כטקסט רגיל.</string>
<string name="member_contact_send_direct_message">שלח הודעה ישירה</string>
<string name="rcv_group_event_member_created_contact">מחובר ישירות</string>
<string name="terminal_always_visible">הצג קונסולה בחלון חדש</string>
<string name="v5_5_private_notes">הערות פרטיות</string>
<string name="v5_5_private_notes_descr">עם הצפנת קבצים ומדיה.</string>
<string name="v5_5_new_interface_languages">ממשק משתמש בהונגרית ובטורקית</string>
<string name="v5_5_message_delivery_descr">עם צריכת סוללה מופחתת.</string>
<string name="remote_host_was_disconnected_title">החיבור עצר</string>
<string name="agent_critical_error_title">שגיאה קריטית</string>
<string name="agent_internal_error_title">שגיאה פנימית</string>
<string name="agent_critical_error_desc">אנא דווח על כך למפתחים:
\n%s
\n
\nמומלץ לאתחל מחדש את האפליקציה.</string>
<string name="note_folder_local_display_name">הערות פרטיות</string>
<string name="call_service_notification_audio_call">שיחה קולית</string>
<string name="call_service_notification_video_call">שיחת וידאו</string>
<string name="auth_open_migration_to_another_device">פתח מסך העברה</string>
<string name="expand_verb">הרחב</string>
<string name="code_you_scanned_is_not_simplex_link_qr_code">הקוד שסרקת אינו קוד QR של קישור SimpleX.</string>
<string name="you_can_make_address_visible_via_settings">תוכל להפוך אותו לגלוי לאנשי הקשר שלך ב-SimpleX דרך ההגדרות.</string>
<string name="invalid_name">שם לא חוקי!</string>
<string name="set_passphrase">הגדר סיסמא</string>
<string name="group_member_status_unknown_short">לא ידוע</string>
<string name="past_member_vName">משתתף לשעבר %1$s</string>
<string name="conn_event_enabled_pq">הצפנה קצה-אל-קצה עמידה בפני מחשוב קוונטי</string>
<string name="group_members_2">%s ו-%s</string>
<string name="snd_group_event_member_blocked">חסמת את %s</string>
<string name="conn_event_disabled_pq">סטנדרט הצפנה קצה-אל-קצה</string>
<string name="block_for_all">חסימה לכולם</string>
<string name="block_for_all_question">לחסום משתתף להכל?</string>
<string name="error_sending_message_contact_invitation">שגיאה בשליחת הזמנה</string>
<string name="unblock_member_confirmation">בטל נעילה</string>
<string name="recent_history">צפיה בהיסטוריה</string>
<string name="v5_4_better_groups">קבוצות טובות יותר</string>
<string name="v5_4_incognito_groups_descr">צור קבוצה באמצעות פרופיל רנדומלי.</string>
<string name="v5_4_better_groups_descr">הצטרפות מהירה יותר והודעות אמינות יותר.</string>
<string name="v5_4_incognito_groups">קבוצות חשאיות</string>
<string name="v5_4_link_mobile_desktop">קשר בין האפליקציות במכשיר הנייד והמחשב השולחני! 🔗</string>
<string name="v5_5_simpler_connect_ui">הדבק קישור כדי להתחבר!</string>
<string name="v5_5_join_group_conversation_descr">היסטוריה אחרונה ובוט משופר.</string>
<string name="v5_4_link_mobile_desktop_descr">דרך פרוטוקול מאובטח עמיד בפני מחשוב קוונטי</string>
<string name="linked_mobiles">מכשירי נייד מקושרים</string>
<string name="migrate_to_device_chat_migrated">הצ׳אט הועבר!</string>
<string name="migrate_from_device_try_again">אתה יכול לנסות שוב.</string>
<string name="migrate_from_device_archive_will_be_deleted"><![CDATA[<b>אזהרה</b>: הארכיון יימחק.]]></string>
<string name="retry_verb">נסה שוב</string>
<string name="v5_6_quantum_resistant_encryption">הצפנה עמידה בפני מחשוב קוונטי</string>
<string name="v5_6_app_data_migration">העברת נתוני אפליקציה</string>
<string name="v5_6_quantum_resistant_encryption_descr">אפשר בצ\'אטים ישירים (בטא)!</string>
<string name="v5_6_app_data_migration_descr">העבר למכשיר אחר באמצעות קוד QR.</string>
<string name="v5_6_picture_in_picture_calls">שיחות תמונה-בתמונה</string>
<string name="v5_6_safer_groups_descr">מנהל יכול לחסום את כל החברים בקבוצה</string>
<string name="link_a_mobile">קשר מכשיר נייד</string>
<string name="scan_from_mobile">סרוק מהנייד</string>
<string name="this_device_version"><![CDATA[<i>(גרסת המכשיר הזה %s)</i>]]></string>
<string name="unlink_desktop_question">האם לבטל את הקישור למחשב השולחני?</string>
<string name="verify_code_with_desktop">אמת קוד עם המחשב השולחני</string>
<string name="linked_desktops">מחשבים שולחניים מקושרים</string>
<string name="not_compatible">לא תואם!</string>
<string name="random_port">אקראי</string>
<string name="remote_host_error_inactive"><![CDATA[הנייד <b>%s</b> לא פעיל]]></string>
<string name="open_port_in_firewall_title">פתח פורט בחומת האש</string>
<string name="remote_ctrl_error_busy">המחשב השולחני עמוס</string>
<string name="remote_ctrl_error_disconnected">המחשב השולחני מנותק</string>
<string name="connect_plan_you_are_already_connecting_to_vName"><![CDATA[אתה כבר מתחבר אל <b>%1$s</b>.]]></string>
<string name="connect_plan_this_is_your_own_one_time_link">זה הקישור חד-פעמי שלך!</string>
<string name="connect_plan_this_is_your_link_for_group_vName"><![CDATA[זהו הקישור שלך לקבוצה <b>%1$s</b>!]]></string>
<string name="connect_plan_group_already_exists">קבוצה כבר קיימת!</string>
<string name="restart_chat_button">התחל צ׳אט מחדש</string>
<string name="or_paste_archive_link">או הדבק קישור ארכיון</string>
<string name="migrate_to_device_download_failed">הורדה נכשלה</string>
<string name="migrate_to_device_downloading_details">מוריד פרטי קישור</string>
<string name="invalid_file_link">קישור לא תקף</string>
<string name="migrate_to_device_migrating">מתבצעת העברה</string>
<string name="migrate_to_device_database_init">מכין את ההורדה</string>
<string name="migrate_to_device_bytes_downloaded">%s הורד</string>
<string name="migrate_to_device_repeat_download">הורדה מחדש</string>
<string name="migrate_to_device_try_again">אתה יכול לנסות שוב.</string>
<string name="migrate_to_device_error_downloading_archive">שגיאה בהורדה של ארכיון</string>
<string name="migrate_to_device_file_delete_or_link_invalid">הקובץ נמחק או שהקישור אינו תקף</string>
<string name="migrate_from_device_title">העבר מכשיר</string>
<string name="migrate_from_device_to_another_device">העבר אל מכשיר אחר</string>
<string name="migrate_from_device_error_deleting_database">שגיאה במחיקת מסד נתונים</string>
<string name="migrate_from_device_error_uploading_archive">שגיאה בהעלאה לארכיון</string>
<string name="migrate_from_device_exported_file_doesnt_exist">קובץ ייצוא אינו קיים</string>
<string name="migrate_from_device_chat_should_be_stopped">כדי להמשיך, יש לעצור את הצ\'אט.</string>
<string name="migrate_from_device_database_init">מכין את העלאה</string>
<string name="migrate_from_device_stopping_chat">עצירת צ׳אט</string>
<string name="migrate_from_device_archive_and_upload">העבר לארכיון והעלאה</string>
<string name="migrate_from_device_confirm_upload">אשר העלאה</string>
<string name="migrate_from_device_archiving_database">העברת בסיס נתונים לארכיון</string>
<string name="migrate_from_device_bytes_uploaded">%s העלה</string>
<string name="migrate_from_device_uploading_archive">העלאת ארכיון</string>
<string name="migrate_from_device_cancel_migration">בטל העברה</string>
<string name="migrate_from_device_finalize_migration">סיים את ההעברה</string>
<string name="migrate_from_device_repeat_upload">העלאה מחדש</string>
<string name="migrate_from_device_or_share_this_file_link">או שתף באופן מאובטח את קישור הקובץ הזה</string>
<string name="migrate_from_device_delete_database_from_device">מחק את המסד נתונים מהמכשיר.</string>
<string name="migrate_from_device_starting_chat_on_multiple_devices_unsupported">אזהרה: התחלת צ׳אט על מספר מכשירים אינה נתמכת ויכולה לגרום בבעיות בהעברת הודעות</string>
<string name="migrate_from_device_start_chat">התחל צ׳אט</string>
<string name="migrate_from_device_migration_complete">העברה הושלמה</string>
<string name="migrate_from_device_you_must_not_start_database_on_two_device"><![CDATA[אתה <b>חייב לא</b> להשתמש באותה מסד נתונים על שני מכשירים.]]></string>
<string name="migrate_from_device_check_connection_and_try_again">תבדוק את החיבור לאינטרנט ונסה שוב</string>
<string name="migrate_from_device_error_verifying_passphrase">שגיאה באימות סיסמה:</string>
<string name="migrate_from_device_verify_database_passphrase">אימות סיסמא של מסד נתונים</string>
<string name="migrate_from_device_verify_passphrase">אימות סיסמא</string>
<string name="connect_plan_you_are_already_joining_the_group_via_this_link">אתה כבר מצטרף לקבוצה באמצעות הקישור הזה.</string>
<string name="remote_host_disconnected_from"><![CDATA[נותק מהנייד <b>%s</b> מהסיבה: %s]]></string>
<string name="remote_host_error_missing"><![CDATA[הנייד <b>%s</b> חסר]]></string>
<string name="connect_plan_already_connecting">כבר מחובר!</string>
<string name="blocked_by_admin_item_description">חסום על ידי מנהל</string>
<string name="failed_to_create_user_invalid_desc">שם התצוגה הזה אינו חוקי. אנא בחר שם אחר.</string>
<string name="error_deleting_note_folder">שגיאה במחיקת הערות פרטיות</string>
<string name="loading_chats">טעינת צ׳אטים…</string>
<string name="connect_with_contact_name_question">להתחבר עם %1$s?</string>
<string name="new_chat">צ׳אט חדש</string>
<string name="or_show_this_qr_code">או הצג את הקוד הזה</string>
<string name="or_scan_qr_code">או סרוק קוד QR</string>
<string name="keep_invitation_link">שמור</string>
<string name="snd_group_event_member_unblocked">ביטלת חסימה של %s</string>
<string name="group_member_role_author">מחבר</string>
<string name="saved_message_title">הודעה נשמרה</string>
<string name="unblock_for_all_question">האם לבטל חסימה של משתתף לכולם?</string>
<string name="unblock_for_all">בטל חסימה לכולם</string>
<string name="member_blocked_by_admin">חסום על ידי מנהל</string>
<string name="member_info_member_blocked">חסום</string>
<string name="error_blocking_member_for_all">שגיאה בחסימת משתתף לכולם</string>
<string name="v5_5_simpler_connect_ui_descr">שורת החיפוש מקבלת קישורי הזמנה.</string>
<string name="v5_5_join_group_conversation">הצטרף לשיחות קבוצתיות</string>
<string name="v5_5_message_delivery">שיפור במסירת הודעות</string>
<string name="remote_ctrl_error_inactive">מחשב שולחני לא פעיל</string>
<string name="connect_plan_connect_via_link">להתחבר דרך קישור?</string>
<string name="agent_internal_error_desc">אנא דווח על כך למפתחים:
\n%s</string>
<string name="start_chat_question">האם להתחיל צ׳אט?</string>
<string name="unlink_desktop">בטל קישור</string>
<string name="call_service_notification_end_call">סיום שיחה</string>
<string name="tap_to_scan">לחץ לסריקה</string>
<string name="create_group_button_to_create_new_group"><![CDATA[<b>צור קבוצה</b>: כדי ליצור קבוצה חדשה.]]></string>
<string name="clear_note_folder_question">למחוק הערות פרטיות?</string>
<string name="add_contact_tab">הוסף איש קשר</string>
<string name="you_can_view_invitation_link_again">תוכל לראות את קישור ההזמנה שוב בפרטי החיבור.</string>
<string name="keep_unused_invitation_question">האם לשמור הזמנה שלא נעשה בה שימוש?</string>
<string name="the_text_you_pasted_is_not_a_link">הטקסט שהדבקת אינו קישור של SimpleX.</string>
<string name="show_slow_api_calls">הצג קריאות API איטיות</string>
<string name="developer_options_section">אפשרויות למפתח</string>
<string name="create_another_profile_button">צור פרופיל</string>
<string name="rcv_group_and_other_events">ו %d שאר האירועים</string>
<string name="profile_update_event_set_new_address">הגדר כתובת איש קשר חדש</string>
<string name="contact_tap_to_connect">לחץ לחיבור</string>
<string name="unable_to_open_browser_desc">דפדפן האינטרנט המוגדר כברירת מחדל נדרש לשיחות. אנא הגדר דפדפן ברירת מחדל במערכת, ושתף מידע נוסף עם המפתחים.</string>
<string name="e2ee_info_no_pq_short">השיחה הזו מוגנת באמצעות הצפנה קצה-אל-קצה.</string>
<string name="e2ee_info_pq_short">השיחה הזו מוגנת באמצעות הצפנה קצה-אל-קצה עמידה בפני מחשוב קוונטי.</string>
<string name="connect_plan_this_is_your_own_simplex_address">זהו כתובת ה-SimpleX שלך!</string>
<string name="remote_host_error_timeout"><![CDATA[הסתיים פסק הזמן הקצוב להתחברות למכשיר נייד <b>%s</b>]]></string>
<string name="clear_note_folder_warning">כל ההודעות יימחקו- לא ניתן לשוב לאחור</string>
<string name="block_member_desc">כל ההודעות החדשות מ %s יהיו מוחבאות</string>
<string name="remote_ctrl_error_bad_state">החיבור לשולחן העבודה נמצא במצב לקוי</string>
<string name="correct_name_to">לתקן את השם ל-%s?</string>
<string name="migrate_from_device_all_data_will_be_uploaded">כל אנשי הקשר שלך, שיחות וקבצים יהיו מוצפנים באופן מאובטח ויעלו בחתיכות לריליים של XFTP שהוגדרו.</string>
<string name="migrate_to_device_apply_onion">החל</string>
<string name="la_app_passcode">קוד עבור אפליקציה</string>
<string name="add_contact_button_to_create_link_or_connect_via_link"><![CDATA[<b>הוסף איש קשר</b>: כדי ליצור קישור הזמנה חדש, או להתחבר דרך קישור שקיבלת.]]></string>
<string name="migrate_from_device_using_on_two_device_breaks_encryption"><![CDATA[<b>שים לב</b>: שימוש באותו מסד נתונים על שני מכשירים ישבור את הפענוח ההצפנה של ההודעות מהחיבורים שלך, נועד כהגנה בטחונית.]]></string>
<string name="chat_is_stopped_you_should_transfer_database">הצ\'אט נסגר. אם כבר השתמשת במסד נתונים זה במכשיר אחר, עליך להעבירו חזרה לפני שתתחיל בצ\'אט.</string>
<string name="migrate_from_device_choose_migrate_from_another_device"><![CDATA[בחר <i>העבר ממכשיר אחר</i> במכשיר החדש וסרוק קוד QR.]]></string>
<string name="migrate_to_device_confirm_network_settings">אשר הגדרות רשת</string>
<string name="migrate_from_device_confirm_you_remember_passphrase">אשר שאתה זוכר את סיסמת מסד הנתונים כדי להעביר אותו.</string>
<string name="connected_desktop">התחבר למחשב השולחני</string>
<string name="migrate_from_device_creating_archive_link">יוצר קישור ארכיון</string>
<string name="creating_link">יוצר קישור…</string>
<string name="delete_and_notify_contact">מחק והודע לאיש קשר</string>
<string name="delete_messages__question">האם למחוק %d הודעות?</string>
<string name="remote_ctrl_error_bad_version">למחשב השולחני יש גרסה שאינה נתמכת. אנא, ודא שאתה משתמש באותה גרסה על שני המכשירים</string>
<string name="remote_ctrl_error_bad_invitation">למחשב השולחני יש קוד הזמנה שגוי</string>
<string name="migrate_to_device_downloading_archive">מוריד ארכיון</string>
<string name="enable_camera_access">אפשר גישה למצלמה</string>
<string name="encryption_renegotiation_error">שגיאת משא ומתן מחדש של הצפנה</string>
<string name="alert_text_encryption_renegotiation_failed">המשא ומתן מחדש של ההצפנה נכשל.</string>
<string name="migrate_to_device_enter_passphrase">הזן סיסמא</string>
<string name="error_alert_title">שגיאה</string>
<string name="error_creating_message">שגיאה ביצירת הודעה</string>
<string name="migrate_from_device_error_exporting_archive">שגיאה בייצוא מסד נתוני צ\'אט</string>
<string name="unable_to_open_browser_title">שגיאה בפתיחת דפדפן</string>
<string name="migrate_from_device_error_saving_settings">שגיאה בשמירת אפשרויות</string>
<string name="migrate_to_device_finalize_migration">סיים את ההעברה על מכשיר נוסף.</string>
<string name="invalid_qr_code">קוד QR לא חוקי</string>
<string name="recent_history_is_not_sent_to_new_members">ההיסטוריה לא נשלחת לחברים חדשים.</string>
<string name="migrate_to_device_import_failed">יבוא נכשל</string>
<string name="migrate_to_device_importing_archive">מייבא ארכיון</string>
<string name="connect_plan_join_your_group">האם להצטרף אל הקבוצה?</string>
<string name="new_desktop"><![CDATA[<i>(חדש)</i>]]></string>
<string name="profile_update_event_member_name_changed">משתתף %1$s השתנה ל-%2$s</string>
<string name="e2ee_info_no_pq"><![CDATA[הודעות, קבצים ושיחות מוגנים על ידי <b>הצפנה מקצה לקצה</b> עם סודיות קדימה מושלמת, הכחשה ושחזור לאחר פריצה.]]></string>
<string name="e2ee_info_pq"><![CDATA[הודעות, קבצים ושיחות מוגנים על ידי <b>הצפנה מקצה לקצה עמידה בפני מחשוב קוונטי</b> עם סודיות קדימה מושלמת, הכחשה ושחזור לאחר פריצה.]]></string>
<string name="migrate_from_another_device">העבר ממכשיר אחר</string>
<string name="migrate_to_device_title">העבר לכאן</string>
<string name="remote_host_error_busy"><![CDATA[הנייד <b>%s</b> תפוס]]></string>
<string name="multicast_discoverable_via_local_network">ניתן לגילוי דרך רשת מקומית</string>
<string name="camera_not_available">מצלמה לא זמינה</string>
<string name="no_connected_mobile">אין מכשיר נייד מחובר</string>
<string name="paste_archive_link">הדבק לינק ארכיון</string>
<string name="migrate_to_device_confirm_network_settings_footer">אנא אשר שהגדרות הרשת נכונות למכשיר זה.</string>
<string name="refresh_qr_code">רענון</string>
<string name="migrate_to_device_repeat_import">יבוא מחדש</string>
<string name="v5_6_safer_groups">קבוצות בטוחות יותר</string>
<string name="verify_connection">אימות חיבור</string>
<string name="open_port_in_firewall_desc">כדי לאפשר לאפליקציה במכשיר הנייד להתחבר למחשב השולחני, פתח את הפורט הזה בחומת האש שלך, אם היא מופעלת</string>
<string name="connect_plan_you_have_already_requested_connection_via_this_address">כבר ביקשת להתחבר באמצעות כתובת זו!</string>
<string name="rcv_group_event_member_unblocked">ביטלת חסימה של %s</string>
<string name="unblock_member_button">בטל חסימה של משתתף</string>
<string name="unblock_member_question">האם לבטל חסימה עבור משתתף?</string>
<string name="migrate_from_device_upload_failed">העלאה נכשלה</string>
<string name="v5_6_picture_in_picture_calls_descr">השתמש באפליקציה במהלך השיחה.</string>
<string name="show_internal_errors">הצג שגיאות פנימיות</string>
<string name="enable_sending_recent_history">שלח עד 100 הודעות אחרונות לחברים חדשים.</string>
<string name="disable_sending_recent_history">אל תשלח היסטוריה לחברים חדשים.</string>
<string name="recent_history_is_sent_to_new_members">עד 100 ההודעות האחרונות נשלחות לחברים חדשים.</string>
<string name="session_code">קוד סשן</string>
<string name="remote_host_error_disconnected"><![CDATA[מכשיר נייד <b>%s</b> התנתק]]></string>
<string name="remote_host_error_bad_state"><![CDATA[החיבור לנייד <b>%s</b> נמצא במצב לקוי]]></string>
<string name="remote_host_error_bad_version"><![CDATA[הנייד <b>%s</b> משתמש בגרסה שאינה נתמכת. אנא, ודא שאתה משתמש באותה גרסה על שני המכשירים]]></string>
<string name="failed_to_create_user_invalid_title">שם תצוגה לא חוקי!</string>
<string name="search_or_paste_simplex_link">חפש או הדבק קישור של SimpleX</string>
<string name="verify_code_on_mobile">אמת קוד במכשיר הנייד</string>
<string name="remote_ctrl_was_disconnected_title">החיבור עצר</string>
<string name="non_content_uri_alert_title">נתיב קובץ לא חוקי</string>
<string name="non_content_uri_alert_text">שיתפת נתיב קובץ לא חוקי. דווח על הבעיה למפתחי האפליקציה.</string>
<string name="moderated_items_description">%1$d הודעות שנערכו על ידי %2$s</string>
<string name="marked_deleted_items_description">%d הודעות סומנו כנמחקות</string>
<string name="connect_plan_repeat_connection_request">האם לחזור על בקשת החיבור?</string>
<string name="blocked_item_description">חסום</string>
<string name="blocked_items_description">%d הודעות נחסמו</string>
<string name="loading_remote_file_desc">אנא המתן בזמן שהקובץ נטען מהמכשיר הנייד המקושר</string>
<string name="button_remove_member_question">האם להסיר משתתף?</string>
<string name="disconnect_remote_host">מנותק</string>
<string name="disconnect_desktop_question">האם לנתק את המחשב השולחני?</string>
<string name="disconnect_remote_hosts">נתק מכשירי נייד</string>
<string name="only_one_device_can_work_at_the_same_time">רק מכשיר אחד יכול לעבוד בו זמנית.</string>
<string name="waiting_for_desktop">ממתין למחשב השולחני…</string>
<string name="open_on_mobile_and_scan_qr_code"><![CDATA[פתח <i>שימוש ממחשב שולחני</i> באפליקציה בנייד וסרוק קוד QR.]]></string>
<string name="database_migration_in_progress">העברת מסד הנתונים בתהליך.
\nזה עשוי לקחת כמה דקות.</string>
<string name="blocked_by_admin_items_description">%d הודעות נחסמו על ידי מנהל</string>
<string name="app_was_crashed">מסך קרס</string>
<string name="video_decoding_exception_desc">לא ניתן לפענח את הווידאו. אנא נסה וידאו אחר או צור קשר עם המפתחים.</string>
<string name="share_this_1_time_link">שתף את הקישור הזמנה החד-פעמי הזה</string>
<string name="tap_to_paste_link">לחץ להדבקת קישור</string>
<string name="loading_remote_file_title">טעינה של הקובץ</string>
<string name="settings_section_title_use_from_desktop">שימוש ממחשב שולחני</string>
<string name="rcv_group_event_member_blocked">חסומים %s</string>
<string name="rcv_direct_event_contact_deleted">מחק איש קשר</string>
<string name="rcv_group_events_count">%d אירועי קבוצה</string>
<string name="group_members_n">%s, %s ו-%d חברים</string>
<string name="profile_update_event_contact_name_changed">איש הקשר %1$s השתנה ל-%2$s</string>
<string name="profile_update_event_removed_address">כתובת איש קשר הוסרה</string>
<string name="profile_update_event_removed_picture">תמונת פרופיל הוסרה</string>
<string name="profile_update_event_set_new_picture">הגדר תמונת פרופיל חדשה</string>
<string name="profile_update_event_updated_profile">עדכן פרופיל</string>
<string name="group_member_status_unknown">מצב לא ידוע</string>
<string name="info_row_created_at">נוצר ב</string>
<string name="share_text_created_at">נוצר בתאריך: %s</string>
<string name="message_too_large">הודעה ארוכה מדי</string>
<string name="welcome_message_is_too_long">הודעת ברוכים הבאים ארוכה מדי</string>
<string name="connected_mobile">התחבר לנייד</string>
<string name="connected_to_desktop">התחבר למחשב השולחני</string>
<string name="connected_to_mobile">התחבר לנייד</string>
<string name="connecting_to_desktop">התחבר למחשב השולחני</string>
<string name="connect_to_desktop">חיבור למחשב השולחני</string>
<string name="desktop_app_version_is_incompatible">גרסת אפליקציית שולחן העבודה %s אינה תואמת לאפליקציה זו.</string>
<string name="devices">מכשירים</string>
<string name="error">שגיאה</string>
<string name="desktop_incompatible_version">גירסא לא מתאימה</string>
<string name="found_desktop">מצא מחשב שולחני</string>
<string name="new_mobile_device">מכשיר נייד חדש</string>
<string name="this_device_name">השם של המכשיר הזה</string>
<string name="multicast_connect_automatically">התחבר אוטומטית</string>
<string name="error_showing_message">שגיאה בהצגת הודעה</string>
<string name="error_showing_content">שגיאה בהצגת תוכן</string>
<string name="rcv_group_event_1_member_connected">%s מחובר</string>
<string name="block_member_confirmation">חסום</string>
<string name="block_member_button">חסום משתתף</string>
<string name="block_member_question">לחסום משתתף?</string>
<string name="unblock_member_desc">הודעות מ-%s יוצגו!</string>
<string name="create_group_button">צור קבוצה</string>
<string name="this_device">המכשיר הזה</string>
<string name="v5_4_more_things_descr">- אפשרות להודיע לאנשי קשר שנמחקו.
\n- שמות פרופיל עם רווחים.
\n- ועוד!</string>
<string name="v5_4_block_group_members_descr">כדי להסתיר הודעות לא רצויות.</string>
<string name="v5_4_block_group_members">תחסום חברים בקבוצה</string>
<string name="desktop_device">מחשב שולחני</string>
<string name="desktop_address">כתובת של המחשב השולחני</string>
<string name="paste_desktop_address">הדבק כתובת של המחשב שולחני</string>
<string name="scan_qr_code_from_desktop">סרוק קוד QR מהמחשב השולחני</string>
<string name="connect_plan_connect_to_yourself">להתחבר אל עצמך?</string>
<string name="verify_connections">אימות חיבורים</string>
<string name="discover_on_network">גלה דרך רשת מקומית</string>
<string name="linked_desktop_options">האפשרויות של המחשב השולחני מקושרות</string>
<string name="desktop_devices">מחשבים שולחניים</string>
<string name="connect_plan_you_are_already_connecting_via_this_one_time_link">אתה כבר מתחבר באמצעות קישור חד-פעמי זה!</string>
<string name="connect_plan_open_group">פתח קבוצה</string>
<string name="connect_plan_you_are_already_in_group_vName"><![CDATA[אתה כבר בקבוצה <b>%1$s</b>.]]></string>
<string name="connect_plan_repeat_join_request">האם לחזור על בקשת הצטרפות?</string>
<string name="bad_desktop_address">הכתובת של המחשב השולחני שגויה</string>
<string name="remote_host_was_disconnected_toast"><![CDATA[מכשיר נייד <b>%s</b> התנתק]]></string>
<string name="this_device_name_shared_with_mobile">שם המכשיר ישותף עם מכשיר הנייד המחובר.</string>
<string name="enter_this_device_name">הזן את שם המכשיר הזה…</string>
<string name="possible_slow_function_desc">ביצוע הפונקציה לוקח זמן רב מדי: %1$d שניות: %2$s</string>
<string name="possible_slow_function_title">פונקציה איטית</string>
<string name="desktop_connection_terminated">החיבור הופסק</string>
<string name="remote_ctrl_disconnected_with_reason">נותק מהסיבה: %s</string>
<string name="waiting_for_mobile_to_connect">ממתין לחיבור עם מכשיר נייד:</string>
<string name="create_chat_profile">צור פרופיל צאט</string>
<string name="connect_plan_already_joining_the_group">כבר הצטרפת לקבוצה!</string>
<string name="connect_plan_you_are_already_joining_the_group_vName"><![CDATA[אתה כבר מצטרף לקבוצה <b>%1$s</b>.]]></string>
<string name="remove_member_button">הסר משתתף</string>
<string name="remote_ctrl_error_timeout">הסתיים פסק הזמן הקצוב להתחברות למחשב השולחני</string>
</resources>
@@ -191,7 +191,7 @@
<string name="v4_3_improved_server_configuration">サーバ設定の向上</string>
<string name="v4_3_improved_privacy_and_security">プライバシーとセキュリティ強化</string>
<string name="settings_section_title_incognito">シークレットモード</string>
<string name="new_in_version">%s バージョンアップで新しい</string>
<string name="new_in_version">%s の新機能</string>
<string name="new_passphrase">新しい暗証フレーズ</string>
<string name="chat_item_ttl_none">一度も</string>
<string name="notification_preview_new_message">新しいメッセージ</string>
@@ -838,7 +838,7 @@
<string name="you_are_invited_to_group">グループ招待が届きました</string>
<string name="network_option_seconds_label">秒</string>
<string name="network_option_tcp_connection_timeout">TCP接続タイムアウト</string>
<string name="save_group_profile">保存グループのプロフィール</string>
<string name="save_group_profile">グループプロフィールの保存</string>
<string name="v4_3_irreversible_message_deletion_desc">連絡先がメッセージの完全削除を許可できます。</string>
<string name="failed_to_create_user_duplicate_desc">同じ表示名前のチャットプロフィールが既にあります。別のを選んでください。</string>
<string name="smp_server_test_secure_queue">セキュアな未送信メッセージ</string>
@@ -1593,4 +1593,127 @@
<string name="possible_slow_function_title">遅延が発生した機能</string>
<string name="show_slow_api_calls">遅いAPIコールを表示</string>
<string name="group_member_status_unknown">ステータス不明</string>
<string name="v5_5_private_notes">プライベートノート</string>
<string name="v5_5_message_delivery">メッセージ配信の改善</string>
<string name="e2ee_info_no_pq"><![CDATA[メッセージ、ファイル、通話は、前方秘匿性、否認防止および及び侵入復元性を備えた <b>エンドツーエンドの暗号化</b>によって保護されます。]]></string>
<string name="e2ee_info_pq"><![CDATA[メッセージ、ファイル、通話は、前方秘匿性、否認防止および及び侵入復元性を備えた <b>耐量子E2E暗号化</b>によって保護されます。]]></string>
<string name="e2ee_info_no_pq_short">このチャットはエンドツーエンド暗号化により保護されています。</string>
<string name="e2ee_info_pq_short">このチャットは耐量子エンドツーエンド暗号化により保護されています。</string>
<string name="note_folder_local_display_name">プライベートノート</string>
<string name="call_service_notification_end_call">通話終了</string>
<string name="unable_to_open_browser_title">ブラウザ起動エラー</string>
<string name="migrate_from_another_device">別の端末から移行</string>
<string name="set_passphrase">暗証フレーズを設定</string>
<string name="snd_group_event_member_blocked">%s をブロック済</string>
<string name="member_blocked_by_admin">管理者によりブロック済</string>
<string name="v5_5_private_notes_descr">暗号化されたファイルとメディア</string>
<string name="v5_5_simpler_connect_ui">リンクの貼り付けで接続する!</string>
<string name="v5_5_simpler_connect_ui_descr">検索バーに招待リンクを貼り付けて接続。</string>
<string name="v5_6_quantum_resistant_encryption">耐量子暗号化チャット</string>
<string name="v5_6_picture_in_picture_calls">ピクチャー イン ピクチャー 通話</string>
<string name="v5_6_app_data_migration_descr">QRコードを利用して別のデバイスに移行できます。</string>
<string name="v5_6_safer_groups">より安全なグループ</string>
<string name="migrate_to_device_title">ここから移行</string>
<string name="migrate_to_device_migrating">移行中</string>
<string name="migrate_to_device_database_init">ダウンロードの準備中</string>
<string name="invalid_file_link">無効なリンク</string>
<string name="migrate_to_device_download_failed">ダウンロード失敗</string>
<string name="migrate_to_device_repeat_download">再ダウンロード</string>
<string name="migrate_to_device_try_again">もう一度お試し下さい。</string>
<string name="migrate_to_device_bytes_downloaded">%s ダウンロード済</string>
<string name="migrate_to_device_importing_archive">アーカイブをインポート中</string>
<string name="migrate_to_device_import_failed">インポート失敗</string>
<string name="migrate_to_device_chat_migrated">チャット移行済み!</string>
<string name="migrate_to_device_finalize_migration">別のデバイスで移行を確定してください。</string>
<string name="migrate_to_device_file_delete_or_link_invalid">ファイルが削除されているか、リンクが無効です</string>
<string name="migrate_to_device_error_downloading_archive">アーカイブダウンロードエラー</string>
<string name="migrate_to_device_apply_onion">適用</string>
<string name="migrate_from_device_title">端末の移行</string>
<string name="migrate_from_device_to_another_device">別の端末に移行</string>
<string name="migrate_from_device_error_saving_settings">設定保存エラー</string>
<string name="migrate_from_device_error_exporting_archive">チャットデータベースエクスポートエラー</string>
<string name="migrate_from_device_database_init">アップロード準備中</string>
<string name="migrate_from_device_error_deleting_database">データベース削除エラー</string>
<string name="migrate_from_device_error_uploading_archive">アーカイブアップロードエラー</string>
<string name="migrate_from_device_chat_should_be_stopped">続けるには、チャットを停止する必要があります。</string>
<string name="migrate_from_device_archive_and_upload">アーカイブとアップロード</string>
<string name="migrate_from_device_confirm_upload">アップロードの確認</string>
<string name="migrate_from_device_bytes_uploaded">%s アップロード中</string>
<string name="migrate_from_device_upload_failed">アップロード失敗</string>
<string name="migrate_from_device_archiving_database">データベースをアーカイブ中</string>
<string name="migrate_from_device_uploading_archive">アーカイブのアップロード中</string>
<string name="migrate_from_device_cancel_migration">移行の中止</string>
<string name="migrate_from_device_finalize_migration">移行の確定</string>
<string name="migrate_from_device_creating_archive_link">アーカイブリンクの作成中</string>
<string name="migrate_from_device_delete_database_from_device">この端末からデータベースを削除</string>
<string name="migrate_from_device_or_share_this_file_link">ファイルリンクで安全に共有する</string>
<string name="migrate_from_device_migration_complete">移行完了</string>
<string name="migrate_from_device_start_chat">チャット開始</string>
<string name="migrate_from_device_you_must_not_start_database_on_two_device"><![CDATA[2つの端末上で同じデータベースを使用することは<b>できません</b>。]]></string>
<string name="migrate_from_device_verify_passphrase">パスフレーズの検証</string>
<string name="migrate_from_device_verify_database_passphrase">データベースパスフレーズの検証</string>
<string name="migrate_from_device_check_connection_and_try_again">インターネット接続を確認して再試行してください</string>
<string name="migrate_from_device_confirm_you_remember_passphrase">移行するデータベースのパスフレーズを覚えていることを確認して下さい。</string>
<string name="migrate_from_device_archive_will_be_deleted"><![CDATA[<b>警告</b>: アーカイブデータは削除されます。]]></string>
<string name="migrate_from_device_error_verifying_passphrase">パスフレーズ検証エラー:</string>
<string name="error_deleting_note_folder">プライベートノート削除エラー</string>
<string name="share_text_created_at">送信日: %s</string>
<string name="block_for_all">全てをブロック</string>
<string name="block_for_all_question">このメンバーをブロックしますか?</string>
<string name="member_info_member_blocked">ブロック中</string>
<string name="v5_5_join_group_conversation">グループ会話への参加</string>
<string name="call_service_notification_audio_call">音声通話</string>
<string name="call_service_notification_video_call">ビデオ通話</string>
<string name="blocked_by_admin_item_description">管理者によりブロック済</string>
<string name="v5_6_app_data_migration">アプリデータの移行</string>
<string name="v5_6_safer_groups_descr">グループ管理者は、他のすべてのメンバーに対してメンバーをブロックできます。</string>
<string name="v5_6_picture_in_picture_calls_descr">通話中にアプリが利用できます。</string>
<string name="v5_6_quantum_resistant_encryption_descr">ダイレクトチャットで有効にする(ベータ版)!</string>
<string name="welcome_message_is_too_long">ウェルカムメッセージが長すぎます</string>
<string name="clear_note_folder_warning">全てのメッセージが削除されます - これは元に戻せません!</string>
<string name="migrate_from_device_choose_migrate_from_another_device"><![CDATA[新しい端末で<i>別の端末に移行</i>を選択し、QRコードをスキャンします。]]></string>
<string name="migrate_from_device_all_data_will_be_uploaded">すべての連絡先、会話、ファイルは安全に暗号化され、設定されたXFTPリレーに分割でアップロードされます。</string>
<string name="unblock_for_all">ブロックの解除</string>
<string name="unblock_for_all_question">ブロックを解除しますか?</string>
<string name="blocked_by_admin_items_description">%d のメッセージが管理者によりブロック済</string>
<string name="snd_group_event_member_unblocked">%s のブロックを解除</string>
<string name="migrate_to_device_enter_passphrase">パスフレーズの入力</string>
<string name="migrate_from_device_exported_file_doesnt_exist">エクスポートされたファイルが存在しません</string>
<string name="info_row_created_at">送信日</string>
<string name="message_too_large">メッセージが長すぎます</string>
<string name="database_migration_in_progress">データベース移行の進行中。
\nこれには数分掛かる場合があります。</string>
<string name="clear_note_folder_question">プライベートノートを消しますか?</string>
<string name="v5_5_new_interface_languages">ハンガリー語、トルコ語</string>
<string name="v5_5_message_delivery_descr">バッテリー使用量低減</string>
<string name="v5_5_join_group_conversation_descr">最近のメッセージ履歴送信機能追加とディレクトリボットの改善が行われました。</string>
<string name="migrate_to_device_downloading_details">リンクの詳細をダウンロード中</string>
<string name="migrate_to_device_downloading_archive">アーカイブをダウンロード中</string>
<string name="error_creating_message">メッセージ作成エラー</string>
<string name="rcv_group_event_member_unblocked">%s のブロックを解除</string>
<string name="profile_update_event_removed_address">アドレスが削除されました</string>
<string name="or_paste_archive_link">アーカイブリンクを貼り付け</string>
<string name="paste_archive_link">アーカイブリンクの貼り付け</string>
<string name="migrate_to_device_repeat_import">再インポート</string>
<string name="migrate_from_device_try_again">もう一度お試し下さい。</string>
<string name="migrate_from_device_starting_chat_on_multiple_devices_unsupported">警告:複数端末でのチャット利用はサポートされていません。</string>
<string name="profile_update_event_set_new_address">新しいアドレスが設定されました</string>
<string name="error_blocking_member_for_all">メンバーブロックエラー</string>
<string name="rcv_group_event_member_blocked">%s をブロック済</string>
<string name="conn_event_disabled_pq">標準的のエンドツーエンド暗号化</string>
<string name="conn_event_enabled_pq">耐量子エンドツーエンド暗号化</string>
<string name="migrate_from_device_repeat_upload">再アップロード</string>
<string name="profile_update_event_contact_name_changed">連絡先 %1$s が %2$s に変更されました</string>
<string name="profile_update_event_set_new_picture">新しいプロフィール画像が設定されました</string>
<string name="profile_update_event_removed_picture">プロフィール画像が削除されました</string>
<string name="auth_open_migration_to_another_device">移行画面を開く</string>
<string name="unable_to_open_browser_desc">通話には既定のウェブブラウザが必要です。既定のブラウザを設定し、開発者へ情報を共有してください。</string>
<string name="profile_update_event_updated_profile">プロフィール更新済</string>
<string name="profile_update_event_member_name_changed">メンバーの %1$sが %2$sに名前変更済</string>
<string name="migrate_to_device_confirm_network_settings">ネットワーク設定を確認してください</string>
<string name="migrate_to_device_confirm_network_settings_footer">この端末のネットワーク設定が正しいことを確認してください。</string>
<string name="migrate_from_device_using_on_two_device_breaks_encryption"><![CDATA[<b>注意</b>: 2つの端末で同じデータベースを使用すると、セキュリティ保護として、あなたが接続しているメッセージの復号化が解除されます。]]></string>
<string name="saved_message_title">メッセージ保存済</string>
<string name="migrate_from_device_stopping_chat">チャット停止中</string>
<string name="error_showing_desktop_notification">エラーが表示された場合は、開発者に連絡してください。</string>
</resources>
@@ -595,7 +595,7 @@
<string name="feature_offered_item">voorgesteld %s</string>
<string name="store_passphrase_securely_without_recover">Sla het wachtwoord veilig op. Als u deze kwijtraakt, heeft u GEEN toegang tot de gesprekken.</string>
<string name="store_passphrase_securely">Bewaar het wachtwoord veilig, u kunt deze NIET wijzigen als u deze kwijtraakt.</string>
<string name="open_chat">Gesprekken openen</string>
<string name="open_chat">Chat openen</string>
<string name="restore_database_alert_desc">Voer het vorige wachtwoord in na het herstellen van de database back-up. Deze actie kan niet ongedaan gemaakt worden.</string>
<string name="icon_descr_call_pending_sent">Oproep in behandeling</string>
<string name="simplex_link_mode_browser_warning">Het openen van de link in de browser kan de privacy en beveiliging van de verbinding verminderen. Niet vertrouwde SimpleX links worden rood weergegeven.</string>
@@ -1713,4 +1713,5 @@
<string name="migrate_to_device_bytes_downloaded">%s gedownload</string>
<string name="set_passphrase">Wachtwoord instellen</string>
<string name="e2ee_info_pq_short">Deze chat wordt beschermd door quantum bestendige end-to-end codering.</string>
<string name="error_showing_desktop_notification">Fout bij weergeven van melding. Neem contact op met ontwikkelaars.</string>
</resources>
@@ -376,7 +376,7 @@
<string name="invalid_connection_link">Ligação de conexão inválida</string>
<string name="save_verb">Salvar</string>
<string name="if_you_received_simplex_invitation_link_you_can_open_in_browser">Se você recebeu convite de ligação do SimpleX Chat, você pode abri-lo no seu navegador:</string>
<string name="group_invitation_tap_to_join_incognito">Toque para entrar em modo anónimo</string>
<string name="group_invitation_tap_to_join_incognito">Toque para entrar no modo anônimo</string>
<string name="save_passphrase_in_keychain">Salvar senha na Keystore</string>
<string name="if_you_cannot_meet_in_person_show_QR_in_video_call_or_via_another_channel"><![CDATA[Se não se poderem encontrar pessoalmente, <b>mostre o código QR na chamada de vídeo </b> ou partilhe a ligação.]]></string>
<string name="save_auto_accept_settings">Salvar definições de aceitação automática</string>
@@ -733,4 +733,51 @@
<string name="feature_enabled_for_you">activado para si</string>
<string name="search_verb">Pesquisar</string>
<string name="la_mode_off">Desativado</string>
<string name="error_smp_test_failed_at_step">O teste falhou na etapa %s.</string>
<string name="smp_servers">Servidor SMP</string>
<string name="smp_servers_test_server">Servidor de teste</string>
<string name="chat_item_ttl_seconds">%s segundo(s)</string>
<string name="stop_chat_question">Parar conversa?</string>
<string name="theme_system">Sistema</string>
<string name="v4_6_audio_video_calls_descr">Suporte a bluetooth e outras melhorias.</string>
<string name="migrate_from_device_stopping_chat">Parando a conversa</string>
<string name="migrate_from_device_bytes_uploaded">%s enviado</string>
<string name="migrate_from_device_start_chat">Iniciar conversa</string>
<string name="tap_to_paste_link">Toque para colar o link</string>
<string name="stop_sharing_address">Parar de compartilhar o endereço?</string>
<string name="callstate_starting">iniciando…</string>
<string name="stop_chat_to_export_import_or_delete_chat_database">Pare a conversa para exportar, importar ou excluir o banco de dados de conversa. Você não poderá receber e enviar mensagens enquanto a conversa for interrompida.</string>
<string name="rcv_group_event_n_members_connected">%s, %s e %d outros membros conectados</string>
<string name="start_chat_question">Iniciar conversa?</string>
<string name="notifications_mode_periodic">Começa periodicamente</string>
<string name="tap_to_start_new_chat">Toque para iniciar uma nova conversa</string>
<string name="la_lock_mode_system">Sistema de autenticação</string>
<string name="stop_rcv_file__title">Parar de receber o arquivo?</string>
<string name="smp_servers_test_servers">Servidores de teste</string>
<string name="smp_servers_test_some_failed">Alguns servidores falharam no teste:</string>
<string name="stop_sharing">Parar compartilhamento</string>
<string name="alert_title_skipped_messages">Mensagens ignoradas</string>
<string name="receipts_section_groups">Grupos pequeno (máx. 20)</string>
<string name="non_fatal_errors_occured_during_import">Alguns erros não fatais ocorreram durante a importação - você pode ver o console de conversa para obter mais detalhes.</string>
<string name="conn_event_disabled_pq">encriptação end-to-end padrão</string>
<string name="chat_help_tap_button">Toque no botão</string>
<string name="tap_to_activate_profile">Toque para ativar o perfil.</string>
<string name="stop_snd_file__title">Parar de enviar o arquivo?</string>
<string name="v4_4_french_interface_descr">Obrigado aos usuários – contribuam via Weblate!</string>
<string name="stop_file__confirm">Pare</string>
<string name="stop_chat_confirmation">Pare</string>
<string name="icon_descr_call_rejected">Chamada rejeitada</string>
<string name="stop_file__action">Parar arquivo</string>
<string name="contact_tap_to_connect">Toque para Conectar</string>
<string name="group_members_n">%s, %s e %d membros</string>
<string name="add_contact_or_create_group">Iniciar nova conversa</string>
<string name="la_mode_system">Sistema</string>
<string name="stop_chat_to_enable_database_actions">Parar conversa para habilitar ações do banco de dados</string>
<string name="group_invitation_tap_to_join">Toque para participar</string>
<string name="rcv_group_event_3_members_connected">%s, %s e %s conectado</string>
<string name="network_option_tcp_connection_timeout">Tempo esgotado da conexão TCP</string>
<string name="language_system">Sistema</string>
<string name="auth_stop_chat">Parar conversa</string>
<string name="v4_5_italian_interface_descr">Obrigado aos usuários – contribuam via Weblate!</string>
<string name="possible_slow_function_title">Função lenta</string>
</resources>
@@ -343,7 +343,7 @@
<string name="your_settings">Настройки</string>
<string name="your_simplex_contact_address">Ваш SimpleX адрес</string>
<string name="database_passphrase_and_export">База данных</string>
<string name="about_simplex_chat">Информация о SimpleX Chat</string>
<string name="about_simplex_chat">Подробнее о SimpleX Chat</string>
<string name="how_to_use_simplex_chat">Как использовать</string>
<string name="markdown_help">Форматирование сообщений</string>
<string name="markdown_in_messages">Форматирование сообщений</string>
@@ -768,7 +768,7 @@
<string name="invite_prohibited_description">Вы пытаетесь пригласить инкогнито контакт в группу, где Вы используете свой основной профиль</string>
<!-- GroupChatInfoView.kt -->
<string name="button_add_members">Пригласить членов группы</string>
<string name="group_info_section_title_num_members">ЧЛЕНОВ ГРУППЫ: %1$s</string>
<string name="group_info_section_title_num_members">УЧАСТНИКОВ ГРУППЫ: %1$s</string>
<string name="group_info_member_you">Вы: %1$s</string>
<string name="button_delete_group">Удалить группу</string>
<string name="delete_group_question">Удалить группу?</string>
@@ -1337,7 +1337,7 @@
<string name="snd_conn_event_ratchet_sync_ok">шифрование работает для %s</string>
<string name="snd_conn_event_ratchet_sync_required">требуется новое соглашение о шифровании для %s</string>
<string name="abort_switch_receiving_address_desc">Изменение адреса будет прекращено. Будет использоваться старый адрес.</string>
<string name="abort_switch_receiving_address">Прекратить изменение адреса</string>
<string name="abort_switch_receiving_address">Остановить изменение адреса</string>
<string name="receipts_section_contacts">Контакты</string>
<string name="receipts_contacts_disable_keep_overrides">Выключить (кроме исключений)</string>
<string name="conn_event_ratchet_sync_started">шифрование согласовывается…</string>
@@ -1359,7 +1359,7 @@
<string name="you_can_enable_delivery_receipts_later_alert">Вы можете включить их позже в настройках Конфиденциальности.</string>
<string name="error_aborting_address_change">Ошибка при прекращении изменения адреса</string>
<string name="abort_switch_receiving_address_confirm">Прекратить</string>
<string name="abort_switch_receiving_address_question">Прекратить изменение адреса\?</string>
<string name="abort_switch_receiving_address_question">Остановить изменение адреса?</string>
<string name="unfavorite_chat">Не избранный</string>
<string name="shutdown_alert_desc">Нотификации перестанут работать, пока вы не перезапустите приложение</string>
<string name="network_option_protocol_timeout_per_kb">Таймаут протокола на KB</string>
@@ -595,7 +595,7 @@
<string name="video_descr">Відео</string>
<string name="contact_sent_large_file">Ваш контакт відправив файл, розмір якого більший, ніж поточно підтримуваний максимальний розмір (%1$s).</string>
<string name="maximum_supported_file_size">Поточно максимально підтримуваний розмір файлу - %1$s.</string>
<string name="switch_receiving_address_desc">Адреса для отримання буде змінена на інший сервер. Зміна адреси завершиться після включення відправника.</string>
<string name="switch_receiving_address_desc">Адреса отримувача буде змінена на інший сервер. Зміна адреси завершиться після того, як відправник з\'явиться в мережі.</string>
<string name="verify_security_code">Перевірити код безпеки</string>
<string name="icon_descr_send_message">Надіслати повідомлення</string>
<string name="icon_descr_record_voice_message">Записати голосове повідомлення</string>
@@ -1637,4 +1637,80 @@
<string name="call_service_notification_audio_call">Аудіодзвінок</string>
<string name="unable_to_open_browser_title">Помилка відкриття браузера</string>
<string name="unable_to_open_browser_desc">Для використання дзвінків потрібен браузер за замовчуванням. Будь ласка, налаштуйте браузер за замовчуванням в системі та надайте більше інформації розробникам.</string>
<string name="migrate_from_another_device">Перехід з іншого пристрою</string>
<string name="conn_event_enabled_pq">квантово-стійке шифрування e2e</string>
<string name="conn_event_disabled_pq">стандартне наскрізне шифрування</string>
<string name="e2ee_info_no_pq_short">Цей чат захищений наскрізним шифруванням.</string>
<string name="e2ee_info_pq_short">Цей чат захищений квантово-стійким наскрізним шифруванням.</string>
<string name="v5_6_safer_groups_descr">Адміністратори можуть заблокувати користувача для всіх.</string>
<string name="v5_6_app_data_migration">Міграція даних додатків</string>
<string name="v5_6_app_data_migration_descr">Перейдіть на інший пристрій за допомогою QR-коду.</string>
<string name="v5_6_picture_in_picture_calls">Дзвінки картинка в картинці</string>
<string name="v5_6_quantum_resistant_encryption">Квантово-стійке шифрування</string>
<string name="v5_6_safer_groups">Безпечніші групи</string>
<string name="invalid_file_link">Невірне посилання</string>
<string name="migrate_to_device_title">Мігруйте сюди</string>
<string name="migrate_to_device_migrating">Міграція</string>
<string name="or_paste_archive_link">Або вставте посилання на архів</string>
<string name="paste_archive_link">Вставити посилання на архів</string>
<string name="migrate_to_device_download_failed">Не вдалося завантажити</string>
<string name="migrate_to_device_downloading_details">Деталі посилання для завантаження</string>
<string name="migrate_to_device_database_init">Підготовка до завантаження</string>
<string name="migrate_to_device_repeat_download">Повторити завантаження</string>
<string name="migrate_to_device_bytes_downloaded">%s завантажено</string>
<string name="migrate_to_device_enter_passphrase">Введіть парольну фразу</string>
<string name="migrate_to_device_file_delete_or_link_invalid">Файл було видалено або посилання недійсне</string>
<string name="migrate_to_device_import_failed">Не вдалося імпортувати</string>
<string name="migrate_to_device_importing_archive">Імпорт архіву</string>
<string name="migrate_to_device_repeat_import">Повторний імпорт</string>
<string name="migrate_to_device_finalize_migration">Завершіть міграцію на іншому пристрої.</string>
<string name="migrate_to_device_apply_onion">Подати заявку</string>
<string name="migrate_from_device_title">Перенести пристрій</string>
<string name="migrate_from_device_to_another_device">Перехід на інший пристрій</string>
<string name="migrate_from_device_error_exporting_archive">Помилка експорту бази даних чату</string>
<string name="migrate_from_device_error_saving_settings">Налаштування збереження помилок</string>
<string name="migrate_from_device_error_uploading_archive">Помилка завантаження архіву</string>
<string name="migrate_from_device_exported_file_doesnt_exist">Експортований файл не існує</string>
<string name="migrate_from_device_archive_and_upload">Архівування та завантаження</string>
<string name="migrate_from_device_archiving_database">Архівування бази даних</string>
<string name="migrate_from_device_confirm_upload">Підтвердити завантаження</string>
<string name="migrate_from_device_error_deleting_database">Помилка видалення бази даних</string>
<string name="migrate_from_device_chat_should_be_stopped">Для того, щоб продовжити, чат слід зупинити.</string>
<string name="migrate_from_device_stopping_chat">Зупинка чату</string>
<string name="migrate_from_device_bytes_uploaded">%s завантажено</string>
<string name="migrate_from_device_uploading_archive">Завантаження архіву</string>
<string name="migrate_from_device_creating_archive_link">Створення архівного посилання</string>
<string name="migrate_from_device_delete_database_from_device">Видалити базу даних з цього пристрою</string>
<string name="migrate_from_device_finalize_migration">Завершити міграцію</string>
<string name="migrate_from_device_or_share_this_file_link">Або безпечно поділіться цим посиланням на файл</string>
<string name="migrate_from_device_repeat_upload">Повторити завантаження</string>
<string name="migrate_from_device_try_again">Ви можете спробувати ще раз.</string>
<string name="migrate_from_device_start_chat">Почати чат</string>
<string name="migrate_from_device_starting_chat_on_multiple_devices_unsupported">Попередження: запуск чату на декількох пристроях не підтримується і може призвести до збоїв у доставці повідомлень</string>
<string name="migrate_from_device_migration_complete">Міграція завершена</string>
<string name="migrate_from_device_verify_database_passphrase">Перевірте пароль до бази даних</string>
<string name="migrate_from_device_you_must_not_start_database_on_two_device"><![CDATA[Ви <b>не повинні</b> використовувати одну і ту ж базу даних на двох пристроях.]]></string>
<string name="migrate_from_device_archive_will_be_deleted"><![CDATA[<b>Warning</b>: архів буде видалено.]]></string>
<string name="migrate_from_device_check_connection_and_try_again">Перевірте підключення до Інтернету та спробуйте ще раз</string>
<string name="migrate_from_device_confirm_you_remember_passphrase">Переконайтеся, що ви пам\'ятаєте пароль до бази даних для її перенесення.</string>
<string name="migrate_from_device_error_verifying_passphrase">Помилка при перевірці парольної фрази:</string>
<string name="migrate_from_device_all_data_will_be_uploaded">Всі ваші контакти, розмови та файли будуть надійно зашифровані та завантажені частинами на налаштовані XFTP-реле.</string>
<string name="migrate_from_device_using_on_two_device_breaks_encryption"><![CDATA[<b>Please note</b>: використання однієї і тієї ж бази даних на двох пристроях порушить розшифровку повідомлень з ваших з\'єднань, як захист безпеки.]]></string>
<string name="migrate_from_device_cancel_migration">Скасувати міграцію</string>
<string name="migrate_to_device_chat_migrated">Чат перемістився!</string>
<string name="migrate_from_device_choose_migrate_from_another_device"><![CDATA[Обирайте <i>Migrate from another device</i> на новому пристрої та відскануйте QR-код.]]></string>
<string name="migrate_to_device_confirm_network_settings">Підтвердьте налаштування мережі</string>
<string name="migrate_to_device_downloading_archive">Завантажити архів</string>
<string name="v5_6_quantum_resistant_encryption_descr">Увімкнути в прямих чатах (BETA)!</string>
<string name="migrate_to_device_error_downloading_archive">Помилка завантаження архіву</string>
<string name="e2ee_info_no_pq"><![CDATA[Повідомлення, файли та дзвінки захищені <b>наскрізним шифруванням</b> з ідеальною секретністю переадресації, відмовою та відновленням після злому.]]></string>
<string name="e2ee_info_pq"><![CDATA[Повідомлення, файли та дзвінки захищені <b>квантово-стійким шифруванням e2e</b> з ідеальною прямою секретністю, відмовою та відновленням після злому.]]></string>
<string name="auth_open_migration_to_another_device">Відкрийте екран міграції</string>
<string name="migrate_to_device_confirm_network_settings_footer">Переконайтеся, що налаштування мережі для цього пристрою є правильними.</string>
<string name="migrate_from_device_database_init">Підготовка до завантаження</string>
<string name="set_passphrase">Встановити парольну фразу</string>
<string name="migrate_from_device_upload_failed">Не вдалося завантажити</string>
<string name="v5_6_picture_in_picture_calls_descr">Використовуйте додаток під час розмови.</string>
<string name="migrate_from_device_verify_passphrase">Підтвердіть парольну фразу</string>
<string name="migrate_to_device_try_again">Ви можете спробувати ще раз.</string>
</resources>
@@ -85,4 +85,15 @@
<string name="rcv_group_and_other_events">và %d sự kiện khác</string>
<string name="keychain_is_storing_securely">Android Keystore được sử dụng để lưu trữ passphrase - nó cho phép dịch vụ thông báo hoạt động.</string>
<string name="keychain_allows_to_receive_ntfs">Android Keystore sẽ được sử dụng để lưu trữ passphrase một cách an toàn sau khi bạn khởi động lại ứng dụng hoặc thay đổi passphrase - nó cho phép tiếp nhận thông báo.</string>
<string name="migrate_from_device_all_data_will_be_uploaded">Tất cả các liên hệ, cuộc hội thoại và tệp của bạn sẽ được mã hóa an toàn và tải lên từng phần tới các XFTP relay được chỉ định.</string>
<string name="v5_6_safer_groups_descr">Quản trị viên có thể chặn một thành viên khỏi tất cả.</string>
<string name="empty_chat_profile_is_created">Một hồ sơ trống với tên chỉ định đã được tạo, và ứng dụng sẽ mở ra như bình thường.</string>
<string name="answer_call">Trả lời cuộc gọi</string>
<string name="connect__a_new_random_profile_will_be_shared">Một hồ sơ ngẫu nhiên mới sẽ được chia sẻ.</string>
<string name="notifications_mode_off_desc">Ứng dụng chỉ có thể nhận thông báo khi nó đang chạy, không có dịch vụ nền nào được khởi động</string>
<string name="app_version_code">Bản dựng ứng dụng: %s</string>
<string name="appearance_settings">Giao diện</string>
<string name="settings_section_title_app">ỨNG DỤNG</string>
<string name="v5_6_app_data_migration">Di chuyển dữ liệu ứng dụng</string>
<string name="full_backup">Sao lưu dữ liệu ứng dụng</string>
</resources>
@@ -21,6 +21,7 @@ import chat.simplex.common.ui.theme.SimpleXTheme
import chat.simplex.common.views.TerminalView
import chat.simplex.common.views.helpers.*
import chat.simplex.res.MR
import dev.icerock.moko.resources.compose.painterResource
import dev.icerock.moko.resources.compose.stringResource
import kotlinx.coroutines.*
import java.awt.event.WindowEvent
@@ -103,7 +104,7 @@ private fun ApplicationScope.AppWindow(closedByError: MutableState<Boolean>) {
simplexWindowState.windowState = windowState
// Reload all strings in all @Composable's after language change at runtime
if (remember { ChatController.appPrefs.appLanguage.state }.value != "") {
Window(state = windowState, onCloseRequest = { closedByError.value = false; exitApplication() }, onKeyEvent = {
Window(state = windowState, icon = painterResource(MR.images.ic_simplex), onCloseRequest = { closedByError.value = false; exitApplication() }, onKeyEvent = {
if (it.key == Key.Escape && it.type == KeyEventType.KeyUp) {
simplexWindowState.backstack.lastOrNull()?.invoke() != null
} else {
@@ -111,8 +111,12 @@ object NtfManager {
}
try {
prevNtfs.add(chatId to builder.toast())
} catch (e: Exception) {
} catch (e: Throwable) {
Log.e(TAG, e.stackTraceToString())
if (e !is Exception) {
val text = e.stackTraceToString().lines().getOrNull(0) ?: ""
showToast(generalGetString(MR.strings.error_showing_desktop_notification) + " " + text, 4_000)
}
}
}
@@ -32,9 +32,9 @@ fun initApp() {
//testCrypto()
}
fun discoverVlcLibs(path: String) {
uk.co.caprica.vlcj.binding.LibC.INSTANCE.setenv("VLC_PLUGIN_PATH", path, 1)
}
//fun discoverVlcLibs(path: String) {
// uk.co.caprica.vlcj.binding.LibC.INSTANCE.setenv("VLC_PLUGIN_PATH", path, 1)
//}
private fun applyAppLocale() {
val lang = ChatController.appPrefs.appLanguage.get()
@@ -1,5 +1,6 @@
package chat.simplex.common.ui.theme
import androidx.compose.runtime.Composable
import chat.simplex.common.platform.Log
import chat.simplex.common.platform.TAG
import com.jthemedetecor.OsThemeDetector
@@ -9,6 +10,7 @@ private val detector: OsThemeDetector = OsThemeDetector.getDetector()
registerListener(::reactOnDarkThemeChanges)
}
@Composable
actual fun isSystemInDarkTheme(): Boolean = try {
detector.isDark
}
@@ -7,6 +7,8 @@ import androidx.compose.ui.Modifier
import androidx.compose.ui.platform.LocalDensity
import androidx.compose.ui.unit.Dp
import chat.simplex.common.platform.*
import chat.simplex.common.simplexWindowState
import java.awt.Window
@Composable
actual fun PlayerView(player: VideoPlayer, width: Dp, onClick: () -> Unit, onLongClick: () -> Unit, stop: () -> Unit) {
@@ -23,14 +25,15 @@ actual fun PlayerView(player: VideoPlayer, width: Dp, onClick: () -> Unit, onLon
}
}
/*
* This function doesn't take into account multi-window environment. In case more windows will be used, modify the code
* */
@Composable
actual fun LocalWindowWidth(): Dp {
return with(LocalDensity.current) { (java.awt.Window.getWindows().find { it.isActive }?.width ?: 0).toDp() }
/*val density = LocalDensity.current
var width by remember { mutableStateOf(with(density) { (java.awt.Window.getWindows().find { it.isActive }?.width ?: 0).toDp() }) }
SideEffect {
if (width != with(density) { (java.awt.Window.getWindows().find { it.isActive }?.width ?: 0).toDp() })
width = with(density) { (java.awt.Window.getWindows().find { it.isActive }?.width ?: 0).toDp() }
actual fun LocalWindowWidth(): Dp = with(LocalDensity.current) {
val windows = java.awt.Window.getWindows()
if (windows.size == 1) {
(windows.getOrNull(0)?.width ?: 0).toDp()
} else {
simplexWindowState.windowState.size.width
}
return width.also { println("LALAL $it") }*/
}