mirror of
https://github.com/simplex-chat/simplex-chat.git
synced 2024-12-17 17:20:21 +01:00
Merge branch 'stable' into stable-android
This commit is contained in:
@@ -8,12 +8,14 @@ plugins {
|
||||
}
|
||||
|
||||
android {
|
||||
compileSdkVersion(34)
|
||||
compileSdk = 34
|
||||
|
||||
defaultConfig {
|
||||
applicationId = "chat.simplex.app"
|
||||
minSdkVersion(28)
|
||||
targetSdkVersion(33)
|
||||
namespace = "chat.simplex.app"
|
||||
minSdk = 28
|
||||
//noinspection OldTargetApi
|
||||
targetSdk = 33
|
||||
// !!!
|
||||
// skip version code after release to F-Droid, as it uses two version codes
|
||||
versionCode = (extra["android.version_code"] as String).toInt()
|
||||
@@ -46,12 +48,7 @@ android {
|
||||
proguardFiles(getDefaultProguardFile("proguard-android-optimize.txt"), "proguard-rules.pro")
|
||||
}
|
||||
}
|
||||
compileOptions {
|
||||
sourceCompatibility = JavaVersion.VERSION_1_8
|
||||
targetCompatibility = JavaVersion.VERSION_1_8
|
||||
}
|
||||
kotlinOptions {
|
||||
jvmTarget = "1.8"
|
||||
freeCompilerArgs += "-opt-in=kotlinx.coroutines.DelicateCoroutinesApi"
|
||||
freeCompilerArgs += "-opt-in=androidx.compose.foundation.ExperimentalFoundationApi"
|
||||
freeCompilerArgs += "-opt-in=androidx.compose.ui.text.ExperimentalTextApi"
|
||||
@@ -71,18 +68,20 @@ android {
|
||||
isMinifyEnabled = false
|
||||
}
|
||||
}
|
||||
packagingOptions {
|
||||
buildFeatures {
|
||||
buildConfig = true
|
||||
}
|
||||
packaging {
|
||||
resources {
|
||||
excludes += "/META-INF/{AL2.0,LGPL2.1}"
|
||||
}
|
||||
jniLibs.useLegacyPackaging = rootProject.extra["compression.level"] as Int != 0
|
||||
}
|
||||
android.sourceSets["main"].assets.setSrcDirs(listOf("../common/src/commonMain/resources/assets"))
|
||||
val isRelease = gradle.startParameter.taskNames.find { it.toLowerCase().contains("release") } != null
|
||||
val isBundle = gradle.startParameter.taskNames.find { it.toLowerCase().contains("bundle") } != null
|
||||
// if (isRelease) {
|
||||
val isRelease = gradle.startParameter.taskNames.find { it.lowercase().contains("release") } != null
|
||||
val isBundle = gradle.startParameter.taskNames.find { it.lowercase().contains("bundle") } != null
|
||||
// Comma separated list of languages that will be included in the apk
|
||||
android.defaultConfig.resConfigs(
|
||||
android.defaultConfig.resourceConfigurations += listOf(
|
||||
"en",
|
||||
"ar",
|
||||
"bg",
|
||||
@@ -104,7 +103,7 @@ android {
|
||||
"uk",
|
||||
"zh-rCN"
|
||||
)
|
||||
// }
|
||||
ndkVersion = "23.1.7779620"
|
||||
if (isBundle) {
|
||||
defaultConfig.ndk.abiFilters("arm64-v8a", "armeabi-v7a")
|
||||
} else {
|
||||
@@ -125,41 +124,44 @@ android {
|
||||
|
||||
dependencies {
|
||||
implementation(project(":common"))
|
||||
implementation("androidx.core:core-ktx:1.7.0")
|
||||
implementation("androidx.core:core-ktx:1.12.0")
|
||||
//implementation("androidx.compose.ui:ui:${rootProject.extra["compose.version"] as String}")
|
||||
//implementation("androidx.compose.material:material:$compose_version")
|
||||
//implementation("androidx.compose.ui:ui-tooling-preview:$compose_version")
|
||||
implementation("androidx.appcompat:appcompat:1.5.1")
|
||||
implementation("androidx.lifecycle:lifecycle-runtime-ktx:2.4.1")
|
||||
implementation("androidx.lifecycle:lifecycle-process:2.4.1")
|
||||
implementation("androidx.activity:activity-compose:1.5.0")
|
||||
val work_version = "2.7.1"
|
||||
implementation("androidx.work:work-runtime-ktx:$work_version")
|
||||
implementation("androidx.work:work-multiprocess:$work_version")
|
||||
implementation("androidx.appcompat:appcompat:1.6.1")
|
||||
implementation("androidx.lifecycle:lifecycle-runtime-ktx:2.7.0")
|
||||
implementation("androidx.lifecycle:lifecycle-process:2.7.0")
|
||||
implementation("androidx.activity:activity-compose:1.8.2")
|
||||
val workVersion = "2.9.0"
|
||||
implementation("androidx.work:work-runtime-ktx:$workVersion")
|
||||
implementation("androidx.work:work-multiprocess:$workVersion")
|
||||
|
||||
implementation("com.jakewharton:process-phoenix:2.1.2")
|
||||
implementation("com.jakewharton:process-phoenix:2.2.0")
|
||||
|
||||
//Camera Permission
|
||||
implementation("com.google.accompanist:accompanist-permissions:0.23.0")
|
||||
|
||||
//implementation("androidx.compose.material:material-icons-extended:$compose_version")
|
||||
//implementation("androidx.compose.ui:ui-util:$compose_version")
|
||||
|
||||
testImplementation("junit:junit:4.13.2")
|
||||
androidTestImplementation("androidx.test.ext:junit:1.1.3")
|
||||
androidTestImplementation("androidx.test.espresso:espresso-core:3.4.0")
|
||||
androidTestImplementation("androidx.test.ext:junit:1.1.5")
|
||||
androidTestImplementation("androidx.test.espresso:espresso-core:3.5.1")
|
||||
//androidTestImplementation("androidx.compose.ui:ui-test-junit4:$compose_version")
|
||||
debugImplementation("androidx.compose.ui:ui-tooling:1.4.3")
|
||||
debugImplementation("androidx.compose.ui:ui-tooling:1.6.4")
|
||||
}
|
||||
|
||||
tasks {
|
||||
val compressApk by creating {
|
||||
doLast {
|
||||
val isRelease = gradle.startParameter.taskNames.find { it.toLowerCase().contains("release") } != null
|
||||
val isRelease = gradle.startParameter.taskNames.find { it.lowercase().contains("release") } != null
|
||||
val buildType: String = if (isRelease) "release" else "debug"
|
||||
val javaHome = System.getProperties()["java.home"] ?: org.gradle.internal.jvm.Jvm.current().javaHome
|
||||
val sdkDir = android.sdkDirectory.absolutePath
|
||||
var keyAlias = ""
|
||||
var keyPassword = ""
|
||||
var storeFile = ""
|
||||
var storePassword = ""
|
||||
val keyAlias: String
|
||||
val keyPassword: String
|
||||
val storeFile: String
|
||||
val storePassword: String
|
||||
if (project.properties["android.injected.signing.key.alias"] != null) {
|
||||
keyAlias = project.properties["android.injected.signing.key.alias"] as String
|
||||
keyPassword = project.properties["android.injected.signing.key.password"] as String
|
||||
@@ -184,16 +186,16 @@ tasks {
|
||||
}
|
||||
exec {
|
||||
workingDir("../../../scripts/android")
|
||||
setEnvironment(mapOf("JAVA_HOME" to "$javaHome"))
|
||||
environment = mapOf("JAVA_HOME" to "$javaHome")
|
||||
commandLine = listOf(
|
||||
"./compress-and-sign-apk.sh",
|
||||
"${rootProject.extra["compression.level"]}",
|
||||
"$outputDir",
|
||||
"$sdkDir",
|
||||
"$storeFile",
|
||||
"$storePassword",
|
||||
"$keyAlias",
|
||||
"$keyPassword"
|
||||
sdkDir,
|
||||
storeFile,
|
||||
storePassword,
|
||||
keyAlias,
|
||||
keyPassword
|
||||
)
|
||||
}
|
||||
|
||||
|
||||
@@ -6,6 +6,7 @@ import android.content.*
|
||||
import android.content.pm.PackageManager
|
||||
import android.net.Uri
|
||||
import android.os.*
|
||||
import android.os.SystemClock
|
||||
import android.provider.Settings
|
||||
import androidx.compose.foundation.layout.*
|
||||
import androidx.compose.material.*
|
||||
|
||||
+2
-1
@@ -4,6 +4,7 @@ import android.app.*
|
||||
import android.app.TaskStackBuilder
|
||||
import android.content.*
|
||||
import android.content.pm.PackageManager
|
||||
import android.graphics.Bitmap
|
||||
import android.graphics.BitmapFactory
|
||||
import android.hardware.display.DisplayManager
|
||||
import android.media.AudioAttributes
|
||||
@@ -218,7 +219,7 @@ object NtfManager {
|
||||
.setGroup(MessageGroup)
|
||||
.setGroupAlertBehavior(NotificationCompat.GROUP_ALERT_CHILDREN)
|
||||
.setSmallIcon(R.drawable.ntf_icon)
|
||||
.setLargeIcon(null)
|
||||
.setLargeIcon(null as Bitmap?)
|
||||
.setColor(0x88FFFF)
|
||||
.setAutoCancel(true)
|
||||
.setVibrate(null)
|
||||
|
||||
+33
-1
@@ -1,7 +1,9 @@
|
||||
package chat.simplex.app.views.call
|
||||
|
||||
import android.Manifest
|
||||
import android.app.*
|
||||
import android.content.*
|
||||
import android.content.pm.PackageManager
|
||||
import android.content.res.Configuration
|
||||
import android.graphics.Rect
|
||||
import android.os.*
|
||||
@@ -28,6 +30,7 @@ import androidx.compose.ui.res.painterResource
|
||||
import androidx.compose.ui.text.style.TextAlign
|
||||
import androidx.compose.ui.unit.dp
|
||||
import androidx.compose.ui.unit.sp
|
||||
import androidx.core.content.ContextCompat
|
||||
import androidx.lifecycle.Lifecycle
|
||||
import chat.simplex.app.*
|
||||
import chat.simplex.app.R
|
||||
@@ -36,10 +39,12 @@ import chat.simplex.app.model.NtfManager
|
||||
import chat.simplex.app.model.NtfManager.AcceptCallAction
|
||||
import chat.simplex.common.model.*
|
||||
import chat.simplex.common.platform.*
|
||||
import chat.simplex.common.platform.chatModel
|
||||
import chat.simplex.common.ui.theme.*
|
||||
import chat.simplex.common.views.call.*
|
||||
import chat.simplex.common.views.helpers.*
|
||||
import chat.simplex.res.MR
|
||||
import com.google.accompanist.permissions.rememberMultiplePermissionsState
|
||||
import dev.icerock.moko.resources.compose.stringResource
|
||||
import kotlinx.coroutines.launch
|
||||
import kotlinx.datetime.Clock
|
||||
@@ -109,9 +114,20 @@ class CallActivity: ComponentActivity(), ServiceConnection {
|
||||
m.callCommand.add(WCallCommand.Layout(layoutType))
|
||||
}
|
||||
|
||||
private fun hasGrantedPermissions(): Boolean {
|
||||
val grantedAudio = ContextCompat.checkSelfPermission(this, android.Manifest.permission.RECORD_AUDIO) == PackageManager.PERMISSION_GRANTED
|
||||
val grantedCamera = !callSupportsVideo() || ContextCompat.checkSelfPermission(this, android.Manifest.permission.CAMERA) == PackageManager.PERMISSION_GRANTED
|
||||
return grantedAudio && grantedCamera
|
||||
}
|
||||
|
||||
override fun onBackPressed() {
|
||||
if (isOnLockScreenNow()) {
|
||||
super.onBackPressed()
|
||||
} else if (!hasGrantedPermissions() && !callSupportsVideo()) {
|
||||
val call = m.activeCall.value
|
||||
if (call != null) {
|
||||
withBGApi { chatModel.callManager.endCall(call) }
|
||||
}
|
||||
} else {
|
||||
m.activeCallViewIsCollapsed.value = true
|
||||
}
|
||||
@@ -223,8 +239,21 @@ fun CallActivityView() {
|
||||
}
|
||||
Box(Modifier.background(Color.Black)) {
|
||||
if (call != null) {
|
||||
val permissionsState = rememberMultiplePermissionsState(
|
||||
permissions = if (callSupportsVideo()) {
|
||||
listOf(Manifest.permission.CAMERA, Manifest.permission.RECORD_AUDIO)
|
||||
} else {
|
||||
listOf(Manifest.permission.RECORD_AUDIO)
|
||||
}
|
||||
)
|
||||
if (permissionsState.allPermissionsGranted) {
|
||||
ActiveCallView()
|
||||
} else {
|
||||
CallPermissionsView(remember { m.activeCallViewIsCollapsed }.value, callSupportsVideo()) {
|
||||
withBGApi { chatModel.callManager.endCall(call) }
|
||||
}
|
||||
}
|
||||
val view = LocalView.current
|
||||
ActiveCallView()
|
||||
if (callSupportsVideo()) {
|
||||
val scope = rememberCoroutineScope()
|
||||
LaunchedEffect(Unit) {
|
||||
@@ -252,6 +281,9 @@ fun CallActivityView() {
|
||||
}
|
||||
}
|
||||
}
|
||||
if (!m.activeCallViewIsCollapsed.value) {
|
||||
AlertManager.shared.showInView()
|
||||
}
|
||||
}
|
||||
LaunchedEffect(call == null) {
|
||||
if (call != null) {
|
||||
|
||||
@@ -47,6 +47,9 @@ buildscript {
|
||||
classpath(kotlin("gradle-plugin", version = rootProject.extra["kotlin.version"] as String))
|
||||
classpath("dev.icerock.moko:resources-generator:0.23.0")
|
||||
|
||||
// Workaround gradle sync issue: https://github.com/gmazzo/gradle-buildconfig-plugin/issues/137#issuecomment-1935739759
|
||||
classpath("com.squareup:kotlinpoet:1.16.0")
|
||||
|
||||
// NOTE: Do not place your application dependencies here; they belong
|
||||
// in the individual module build.gradle files
|
||||
}
|
||||
@@ -80,6 +83,30 @@ plugins {
|
||||
id("org.jetbrains.kotlin.plugin.serialization") apply false
|
||||
}
|
||||
|
||||
// https://raymondctc.medium.com/configuring-your-sourcecompatibility-targetcompatibility-and-kotlinoptions-jvmtarget-all-at-once-66bf2198145f
|
||||
val jvmVersion: Provider<String> = providers.gradleProperty("kotlin.jvm.target")
|
||||
|
||||
configure(subprojects) {
|
||||
// Apply compileOptions to subprojects
|
||||
plugins.withType<com.android.build.gradle.BasePlugin>().configureEach {
|
||||
extensions.findByType<com.android.build.gradle.BaseExtension>()?.apply {
|
||||
jvmVersion.map { JavaVersion.toVersion(it) }.orNull?.let {
|
||||
compileOptions {
|
||||
sourceCompatibility = it
|
||||
targetCompatibility = it
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Apply kotlinOptions.jvmTarget to subprojects
|
||||
tasks.withType<org.jetbrains.kotlin.gradle.tasks.KotlinCompile>().configureEach {
|
||||
kotlinOptions {
|
||||
if (jvmVersion.isPresent) jvmTarget = jvmVersion.get()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
tasks.register("clean", Delete::class) {
|
||||
delete(rootProject.buildDir)
|
||||
}
|
||||
|
||||
@@ -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")
|
||||
}
|
||||
}
|
||||
|
||||
+30
@@ -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,
|
||||
)
|
||||
}
|
||||
+163
-60
@@ -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 */ }
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
+1
-2
@@ -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())
|
||||
|
||||
+2
-1
@@ -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()
|
||||
|
||||
+14
-13
@@ -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()
|
||||
|
||||
+8
-4
@@ -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))
|
||||
|
||||
+3
-2
@@ -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()
|
||||
|
||||
+28
-3
@@ -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) {
|
||||
|
||||
+3
-2
@@ -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
|
||||
|
||||
+4
-1
@@ -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() {
|
||||
|
||||
+20
-6
@@ -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 {
|
||||
|
||||
+5
-1
@@ -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)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
+3
-3
@@ -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()
|
||||
|
||||
+2
@@ -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
|
||||
}
|
||||
|
||||
+11
-8
@@ -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") }*/
|
||||
}
|
||||
|
||||
@@ -12,16 +12,13 @@ version = extra["desktop.version_name"] as String
|
||||
|
||||
|
||||
kotlin {
|
||||
jvm {
|
||||
jvmToolchain(11)
|
||||
withJava()
|
||||
}
|
||||
jvm()
|
||||
sourceSets {
|
||||
val jvmMain by getting {
|
||||
dependencies {
|
||||
implementation(project(":common"))
|
||||
implementation(compose.desktop.currentOs)
|
||||
implementation("net.java.dev.jna:jna:5.13.0")
|
||||
implementation("net.java.dev.jna:jna:5.14.0")
|
||||
}
|
||||
}
|
||||
val jvmTest by getting
|
||||
@@ -151,7 +148,7 @@ cmake {
|
||||
tasks.named("clean") {
|
||||
dependsOn("cmakeClean")
|
||||
}
|
||||
tasks.named("compileJava") {
|
||||
tasks.named("compileKotlinJvm") {
|
||||
dependsOn("cmakeBuildAndCopy")
|
||||
}
|
||||
afterEvaluate {
|
||||
|
||||
@@ -24,13 +24,14 @@ android.nonTransitiveRClass=true
|
||||
# Automatically convert third-party libraries to use AndroidX
|
||||
android.enableJetifier=true
|
||||
kotlin.mpp.androidSourceSetLayoutVersion=2
|
||||
kotlin.jvm.target=11
|
||||
|
||||
android.version_name=5.6
|
||||
android.version_code=191
|
||||
android.version_name=5.6.1
|
||||
android.version_code=193
|
||||
|
||||
desktop.version_name=5.6
|
||||
desktop.version_code=35
|
||||
desktop.version_name=5.6.1
|
||||
desktop.version_code=36
|
||||
|
||||
kotlin.version=1.8.20
|
||||
gradle.plugin.version=7.4.2
|
||||
compose.version=1.5.10
|
||||
kotlin.version=1.9.23
|
||||
gradle.plugin.version=8.2.0
|
||||
compose.version=1.6.1
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
#Mon Feb 14 14:23:51 GMT 2022
|
||||
distributionBase=GRADLE_USER_HOME
|
||||
distributionUrl=https\://services.gradle.org/distributions/gradle-7.5.1-bin.zip
|
||||
distributionUrl=https\://services.gradle.org/distributions/gradle-8.7-bin.zip
|
||||
distributionPath=wrapper/dists
|
||||
zipStorePath=wrapper/dists
|
||||
zipStoreBase=GRADLE_USER_HOME
|
||||
|
||||
Reference in New Issue
Block a user