From ead67adeb8195b6caf96c8dd9e695c2ce7e27805 Mon Sep 17 00:00:00 2001 From: Stanislav Dmitrenko <7953703+avently@users.noreply.github.com> Date: Fri, 14 Apr 2023 00:09:41 +0300 Subject: [PATCH 1/8] android: passcode implementation (#2177) * android: passcode implementation * layout * passcode view * unused param * text for auth * small changes * fix * use preference instead of toggle * removed useless code and changed title of auth screen * removed unneeded function * EOLs * changed local variable logic to global variable * formatting * different alert * changed code placement * alert behaviour * button size * tint of buttons * error instead of failed status * do not show auth alerts on failures, only on final errors --------- Co-authored-by: Evgeny Poberezkin <2769109+epoberezkin@users.noreply.github.com> --- .../java/chat/simplex/app/MainActivity.kt | 184 ++++++++++-- .../java/chat/simplex/app/SimplexService.kt | 2 +- .../java/chat/simplex/app/model/SimpleXAPI.kt | 54 +--- .../java/chat/simplex/app/ui/theme/Shape.kt | 2 +- .../java/chat/simplex/app/ui/theme/Theme.kt | 2 +- .../chat/simplex/app/views/WelcomeView.kt | 2 +- .../simplex/app/views/call/CallManager.kt | 2 +- .../simplex/app/views/call/SoundPlayer.kt | 2 +- .../simplex/app/views/chat/VerifyCodeView.kt | 2 +- .../app/views/chat/item/CICallItemView.kt | 2 +- .../app/views/chatlist/ChatListView.kt | 3 +- .../views/database/DatabaseEncryptionView.kt | 10 +- .../app/views/database/DatabaseErrorView.kt | 4 +- .../app/views/database/DatabaseView.kt | 21 +- .../app/views/helpers/DatabaseUtils.kt | 53 ++-- .../views/helpers/DefaultBasicTextField.kt | 2 +- .../app/views/helpers/LocalAuthentication.kt | 72 +++-- .../chat/simplex/app/views/helpers/Util.kt | 18 +- .../app/views/localauth/LocalAuthView.kt | 22 ++ .../app/views/localauth/PasscodeView.kt | 100 +++++++ .../app/views/localauth/PasswordEntry.kt | 183 ++++++++++++ .../app/views/localauth/SetAppPasscodeView.kt | 48 ++++ .../app/views/onboarding/HowItWorks.kt | 2 +- .../app/views/usersettings/DeveloperView.kt | 1 - .../views/usersettings/HiddenProfileView.kt | 2 +- .../app/views/usersettings/PrivacySettings.kt | 266 +++++++++++++++++- .../app/views/usersettings/SettingsView.kt | 34 +-- .../views/usersettings/UserProfilesView.kt | 2 +- .../app/src/main/res/values/strings.xml | 30 ++ .../Views/UserSettings/PrivacySettings.swift | 2 +- 30 files changed, 968 insertions(+), 161 deletions(-) create mode 100644 apps/android/app/src/main/java/chat/simplex/app/views/localauth/LocalAuthView.kt create mode 100644 apps/android/app/src/main/java/chat/simplex/app/views/localauth/PasscodeView.kt create mode 100644 apps/android/app/src/main/java/chat/simplex/app/views/localauth/PasswordEntry.kt create mode 100644 apps/android/app/src/main/java/chat/simplex/app/views/localauth/SetAppPasscodeView.kt diff --git a/apps/android/app/src/main/java/chat/simplex/app/MainActivity.kt b/apps/android/app/src/main/java/chat/simplex/app/MainActivity.kt index 0c147eba16..c35ae1d418 100644 --- a/apps/android/app/src/main/java/chat/simplex/app/MainActivity.kt +++ b/apps/android/app/src/main/java/chat/simplex/app/MainActivity.kt @@ -1,5 +1,6 @@ package chat.simplex.app +import SectionItemView import android.app.Application import android.content.Intent import android.net.Uri @@ -12,8 +13,7 @@ import androidx.activity.viewModels import androidx.compose.animation.core.* import androidx.compose.foundation.background import androidx.compose.foundation.layout.* -import androidx.compose.material.MaterialTheme -import androidx.compose.material.Surface +import androidx.compose.material.* import androidx.compose.material.icons.Icons import androidx.compose.material.icons.outlined.Lock import androidx.compose.runtime.* @@ -21,12 +21,13 @@ import androidx.compose.runtime.saveable.rememberSaveable import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.graphicsLayer +import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.res.stringResource import androidx.compose.ui.unit.dp import androidx.fragment.app.FragmentActivity import androidx.lifecycle.* -import chat.simplex.app.model.ChatModel -import chat.simplex.app.model.NtfManager +import chat.simplex.app.MainActivity.Companion.enteredBackground +import chat.simplex.app.model.* import chat.simplex.app.model.NtfManager.Companion.getUserIdFromIntent import chat.simplex.app.ui.theme.SimpleButton import chat.simplex.app.ui.theme.SimpleXTheme @@ -37,8 +38,11 @@ import chat.simplex.app.views.chat.ChatView import chat.simplex.app.views.chatlist.* import chat.simplex.app.views.database.DatabaseErrorView import chat.simplex.app.views.helpers.* +import chat.simplex.app.views.helpers.DatabaseUtils.ksAppPassword +import chat.simplex.app.views.localauth.SetAppPasscodeView import chat.simplex.app.views.newchat.* import chat.simplex.app.views.onboarding.* +import chat.simplex.app.views.usersettings.LAMode import kotlinx.coroutines.* import kotlinx.coroutines.flow.distinctUntilChanged @@ -93,7 +97,7 @@ class MainActivity: FragmentActivity() { laFailed, ::runAuthenticate, ::setPerformLA, - showLANotice = { m.controller.showLANotice(this) } + showLANotice = { showLANotice(m.controller.appPrefs.laNoticeShown, this) } ) } } @@ -111,7 +115,8 @@ class MainActivity: FragmentActivity() { override fun onResume() { super.onResume() val enteredBackgroundVal = enteredBackground.value - if (enteredBackgroundVal == null || elapsedRealtime() - enteredBackgroundVal >= 30_000) { + val delay = vm.chatModel.controller.appPrefs.laLockDelay.get() + if (enteredBackgroundVal == null || elapsedRealtime() - enteredBackgroundVal >= delay * 1000) { runAuthenticate() } } @@ -165,16 +170,27 @@ class MainActivity: FragmentActivity() { delay(50) withContext(Dispatchers.Main) { authenticate( - generalGetString(R.string.auth_unlock), - generalGetString(R.string.auth_log_in_using_credential), + if (m.controller.appPrefs.laMode.get() == LAMode.SYSTEM) + generalGetString(R.string.auth_unlock) + else + generalGetString(R.string.la_enter_app_passcode), + if (m.controller.appPrefs.laMode.get() == LAMode.SYSTEM) + generalGetString(R.string.auth_log_in_using_credential) + else + generalGetString(R.string.auth_unlock), this@MainActivity, completed = { laResult -> when (laResult) { LAResult.Success -> userAuthorized.value = true - is LAResult.Error, LAResult.Failed -> + is LAResult.Failed -> { /* Can be called multiple times on every failure */ } + is LAResult.Error -> { laFailed.value = true - LAResult.Unavailable -> { + if (m.controller.appPrefs.laMode.get() == LAMode.PASSCODE) { + laFailedAlert() + } + } + is LAResult.Unavailable -> { userAuthorized.value = true m.performLA.value = false m.controller.appPrefs.performLA.set(false) @@ -188,21 +204,116 @@ class MainActivity: FragmentActivity() { } } - private fun setPerformLA(on: Boolean) { - vm.chatModel.controller.appPrefs.laNoticeShown.set(true) - if (on) { - enableLA() - } else { - disableLA() + private fun showLANotice(laNoticeShown: SharedPreference, activity: FragmentActivity) { + Log.d(TAG, "showLANotice") + if (!laNoticeShown.get()) { + laNoticeShown.set(true) + AlertManager.shared.showAlertDialog( + title = generalGetString(R.string.la_notice_title_simplex_lock), + text = generalGetString(R.string.la_notice_to_protect_your_information_turn_on_simplex_lock_you_will_be_prompted_to_complete_authentication_before_this_feature_is_enabled), + confirmText = generalGetString(R.string.la_notice_turn_on), + onConfirm = { + withBGApi { // to remove this call, change ordering of onConfirm call in AlertManager + showChooseLAMode(laNoticeShown, activity) + } + } + ) } } - private fun enableLA() { + private fun showChooseLAMode(laNoticeShown: SharedPreference, activity: FragmentActivity) { + Log.d(TAG, "showLANotice") + laNoticeShown.set(true) + AlertManager.shared.showAlertDialogStacked( + title = generalGetString(R.string.la_lock_mode), + text = null, + confirmText = generalGetString(R.string.la_lock_mode_passcode), + dismissText = generalGetString(R.string.la_lock_mode_system), + onConfirm = { + AlertManager.shared.hideAlert() + setPasscode() + }, + onDismiss = { + AlertManager.shared.hideAlert() + initialEnableLA(activity) + } + ) + } + + private fun initialEnableLA(activity: FragmentActivity) { val m = vm.chatModel + val appPrefs = m.controller.appPrefs + m.controller.appPrefs.laMode.set(LAMode.SYSTEM) authenticate( generalGetString(R.string.auth_enable_simplex_lock), generalGetString(R.string.auth_confirm_credential), - this@MainActivity, + activity, + completed = { laResult -> + when (laResult) { + LAResult.Success -> { + m.performLA.value = true + appPrefs.performLA.set(true) + laTurnedOnAlert() + } + is LAResult.Failed -> { /* Can be called multiple times on every failure */ } + is LAResult.Error -> { + m.performLA.value = false + appPrefs.performLA.set(false) + laFailedAlert() + } + is LAResult.Unavailable -> { + m.performLA.value = false + appPrefs.performLA.set(false) + m.showAdvertiseLAUnavailableAlert.value = true + } + } + } + ) + } + + private fun setPasscode() { + val chatModel = vm.chatModel + val appPrefs = chatModel.controller.appPrefs + ModalManager.shared.showCustomModal { close -> + Surface(Modifier.fillMaxSize(), color = MaterialTheme.colors.background) { + SetAppPasscodeView( + submit = { + chatModel.performLA.value = true + appPrefs.performLA.set(true) + appPrefs.laMode.set(LAMode.PASSCODE) + laTurnedOnAlert() + }, + cancel = { + chatModel.performLA.value = false + appPrefs.performLA.set(false) + laPasscodeNotSetAlert() + }, + close) + } + } + } + + private fun setPerformLA(on: Boolean, activity: FragmentActivity) { + vm.chatModel.controller.appPrefs.laNoticeShown.set(true) + if (on) { + enableLA(activity) + } else { + disableLA(activity) + } + } + + private fun enableLA(activity: FragmentActivity) { + val m = vm.chatModel + authenticate( + if (m.controller.appPrefs.laMode.get() == LAMode.SYSTEM) + generalGetString(R.string.auth_enable_simplex_lock) + else + generalGetString(R.string.new_passcode), + if (m.controller.appPrefs.laMode.get() == LAMode.SYSTEM) + generalGetString(R.string.auth_confirm_credential) + else + "", + activity, completed = { laResult -> val prefPerformLA = m.controller.appPrefs.performLA when (laResult) { @@ -211,11 +322,13 @@ class MainActivity: FragmentActivity() { prefPerformLA.set(true) laTurnedOnAlert() } - is LAResult.Error, LAResult.Failed -> { + is LAResult.Failed -> { /* Can be called multiple times on every failure */ } + is LAResult.Error -> { m.performLA.value = false prefPerformLA.set(false) + laFailedAlert() } - LAResult.Unavailable -> { + is LAResult.Unavailable -> { m.performLA.value = false prefPerformLA.set(false) laUnavailableInstructionAlert() @@ -225,24 +338,33 @@ class MainActivity: FragmentActivity() { ) } - private fun disableLA() { + private fun disableLA(activity: FragmentActivity) { val m = vm.chatModel authenticate( - generalGetString(R.string.auth_disable_simplex_lock), - generalGetString(R.string.auth_confirm_credential), - this@MainActivity, + if (m.controller.appPrefs.laMode.get() == LAMode.SYSTEM) + generalGetString(R.string.auth_disable_simplex_lock) + else + generalGetString(R.string.la_enter_app_passcode), + if (m.controller.appPrefs.laMode.get() == LAMode.SYSTEM) + generalGetString(R.string.auth_confirm_credential) + else + generalGetString(R.string.auth_disable_simplex_lock), + activity, completed = { laResult -> val prefPerformLA = m.controller.appPrefs.performLA when (laResult) { LAResult.Success -> { m.performLA.value = false prefPerformLA.set(false) + ksAppPassword.remove() } - is LAResult.Error, LAResult.Failed -> { + is LAResult.Failed -> { /* Can be called multiple times on every failure */ } + is LAResult.Error -> { m.performLA.value = true prefPerformLA.set(true) + laFailedAlert() } - LAResult.Unavailable -> { + is LAResult.Unavailable -> { m.performLA.value = false prefPerformLA.set(false) laUnavailableTurningOffAlert() @@ -264,7 +386,7 @@ fun MainPage( userAuthorized: MutableState, laFailed: MutableState, runAuthenticate: () -> Unit, - setPerformLA: (Boolean) -> Unit, + setPerformLA: (Boolean, FragmentActivity) -> Unit, showLANotice: () -> Unit ) { var showChatDatabaseError by rememberSaveable { @@ -392,6 +514,14 @@ fun MainPage( if (invitation != null) IncomingCallAlertView(invitation, chatModel) AlertManager.shared.showInView() } + + DisposableEffectOnRotate { + // When using lock delay = 0 and screen rotates, the app will be locked which is not useful. + // Let's prolong the unlocked period to 3 sec for screen rotation to take place + if (chatModel.controller.appPrefs.laLockDelay.get() == 0) { + enteredBackground.value = elapsedRealtime() + 3000 + } + } } fun processNotificationIntent(intent: Intent?, chatModel: ChatModel) { diff --git a/apps/android/app/src/main/java/chat/simplex/app/SimplexService.kt b/apps/android/app/src/main/java/chat/simplex/app/SimplexService.kt index 4f5eb464b5..63e31cb226 100644 --- a/apps/android/app/src/main/java/chat/simplex/app/SimplexService.kt +++ b/apps/android/app/src/main/java/chat/simplex/app/SimplexService.kt @@ -326,4 +326,4 @@ class SimplexService: Service() { private fun getPreferences(context: Context): SharedPreferences = context.getSharedPreferences(SHARED_PREFS_ID, Context.MODE_PRIVATE) } -} \ No newline at end of file +} diff --git a/apps/android/app/src/main/java/chat/simplex/app/model/SimpleXAPI.kt b/apps/android/app/src/main/java/chat/simplex/app/model/SimpleXAPI.kt index b5fd441123..a817c402e5 100644 --- a/apps/android/app/src/main/java/chat/simplex/app/model/SimpleXAPI.kt +++ b/apps/android/app/src/main/java/chat/simplex/app/model/SimpleXAPI.kt @@ -20,7 +20,6 @@ import androidx.compose.ui.graphics.vector.ImageVector import androidx.compose.ui.res.stringResource import androidx.compose.ui.text.font.FontWeight import androidx.compose.ui.unit.dp -import androidx.fragment.app.FragmentActivity import chat.simplex.app.* import chat.simplex.app.R import chat.simplex.app.ui.theme.* @@ -84,6 +83,8 @@ class AppPreferences(val context: Context) { set = fun(action: CallOnLockScreen) { _callOnLockScreen.set(action.name) } ) val performLA = mkBoolPreference(SHARED_PREFS_PERFORM_LA, false) + val laMode = mkEnumPreference(SHARED_PREFS_LA_MODE, LAMode.SYSTEM) { LAMode.values().firstOrNull { it.name == this } } + val laLockDelay = mkIntPreference(SHARED_PREFS_LA_LOCK_DELAY, 30) val laNoticeShown = mkBoolPreference(SHARED_PREFS_LA_NOTICE_SHOWN, false) val webrtcIceServers = mkStrPreference(SHARED_PREFS_WEBRTC_ICE_SERVERS, null) val privacyProtectScreen = mkBoolPreference(SHARED_PREFS_PRIVACY_PROTECT_SCREEN, true) @@ -142,6 +143,8 @@ class AppPreferences(val context: Context) { val initialRandomDBPassphrase = mkBoolPreference(SHARED_PREFS_INITIAL_RANDOM_DB_PASSPHRASE, false) val encryptedDBPassphrase = mkStrPreference(SHARED_PREFS_ENCRYPTED_DB_PASSPHRASE, null) val initializationVectorDBPassphrase = mkStrPreference(SHARED_PREFS_INITIALIZATION_VECTOR_DB_PASSPHRASE, null) + val encryptedAppPassphrase = mkStrPreference(SHARED_PREFS_ENCRYPTED_APP_PASSPHRASE, null) + val initializationVectorAppPassphrase = mkStrPreference(SHARED_PREFS_INITIALIZATION_VECTOR_APP_PASSPHRASE, null) val encryptionStartedAt = mkDatePreference(SHARED_PREFS_ENCRYPTION_STARTED_AT, null, true) val confirmDBUpgrades = mkBoolPreference(SHARED_PREFS_CONFIRM_DB_UPGRADES, false) @@ -184,6 +187,12 @@ class AppPreferences(val context: Context) { set = fun(value) = sharedPreferences.edit().putString(prefName, value).apply() ) + private fun mkEnumPreference(prefName: String, default: T, construct: String.() -> T?): SharedPreference = + SharedPreference( + get = fun() = sharedPreferences.getString(prefName, default.toString())?.construct() ?: default, + set = fun(value) = sharedPreferences.edit().putString(prefName, value.toString()).apply() + ) + /** * Provide `[commit] = true` to save preferences right now, not after some unknown period of time. * So in case of a crash this value will be saved 100% @@ -210,6 +219,8 @@ class AppPreferences(val context: Context) { private const val SHARED_PREFS_WEBRTC_POLICY_RELAY = "WebrtcPolicyRelay" private const val SHARED_PREFS_WEBRTC_CALLS_ON_LOCK_SCREEN = "CallsOnLockScreen" private const val SHARED_PREFS_PERFORM_LA = "PerformLA" + private const val SHARED_PREFS_LA_MODE = "LocalAuthenticationMode" + private const val SHARED_PREFS_LA_LOCK_DELAY = "LocalAuthenticationLockDelay" private const val SHARED_PREFS_LA_NOTICE_SHOWN = "LANoticeShown" private const val SHARED_PREFS_WEBRTC_ICE_SERVERS = "WebrtcICEServers" private const val SHARED_PREFS_PRIVACY_PROTECT_SCREEN = "PrivacyProtectScreen" @@ -246,6 +257,8 @@ class AppPreferences(val context: Context) { private const val SHARED_PREFS_INITIAL_RANDOM_DB_PASSPHRASE = "InitialRandomDBPassphrase" private const val SHARED_PREFS_ENCRYPTED_DB_PASSPHRASE = "EncryptedDBPassphrase" private const val SHARED_PREFS_INITIALIZATION_VECTOR_DB_PASSPHRASE = "InitializationVectorDBPassphrase" + private const val SHARED_PREFS_ENCRYPTED_APP_PASSPHRASE = "EncryptedAppPassphrase" + private const val SHARED_PREFS_INITIALIZATION_VECTOR_APP_PASSPHRASE = "InitializationVectorAppPassphrase" private const val SHARED_PREFS_ENCRYPTION_STARTED_AT = "EncryptionStartedAt" private const val SHARED_PREFS_CONFIRM_DB_UPGRADES = "ConfirmDBUpgrades" private const val SHARED_PREFS_CURRENT_THEME = "CurrentTheme" @@ -1707,43 +1720,6 @@ open class ChatController(var ctrl: ChatCtrl?, val ntfManager: NtfManager, val a ) } - fun showLANotice(activity: FragmentActivity) { - Log.d(TAG, "showLANotice") - if (!appPrefs.laNoticeShown.get()) { - appPrefs.laNoticeShown.set(true) - AlertManager.shared.showAlertDialog( - title = generalGetString(R.string.la_notice_title_simplex_lock), - text = generalGetString(R.string.la_notice_to_protect_your_information_turn_on_simplex_lock_you_will_be_prompted_to_complete_authentication_before_this_feature_is_enabled), - confirmText = generalGetString(R.string.la_notice_turn_on), - onConfirm = { - authenticate( - generalGetString(R.string.auth_enable_simplex_lock), - generalGetString(R.string.auth_confirm_credential), - activity, - completed = { laResult -> - when (laResult) { - LAResult.Success -> { - chatModel.performLA.value = true - appPrefs.performLA.set(true) - laTurnedOnAlert() - } - is LAResult.Error, LAResult.Failed -> { - chatModel.performLA.value = false - appPrefs.performLA.set(false) - } - LAResult.Unavailable -> { - chatModel.performLA.value = false - appPrefs.performLA.set(false) - chatModel.showAdvertiseLAUnavailableAlert.value = true - } - } - } - ) - } - ) - } - } - fun isIgnoringBatteryOptimizations(context: Context): Boolean { val powerManager = context.getSystemService(Application.POWER_SERVICE) as PowerManager return powerManager.isIgnoringBatteryOptimizations(context.packageName) @@ -3669,4 +3645,4 @@ sealed class XFTPErrorType { @Serializable @SerialName("HAS_FILE") object HAS_FILE: XFTPErrorType() @Serializable @SerialName("FILE_IO") object FILE_IO: XFTPErrorType() @Serializable @SerialName("INTERNAL") object INTERNAL: XFTPErrorType() -} \ No newline at end of file +} diff --git a/apps/android/app/src/main/java/chat/simplex/app/ui/theme/Shape.kt b/apps/android/app/src/main/java/chat/simplex/app/ui/theme/Shape.kt index d0a00450f6..79ab4eead4 100644 --- a/apps/android/app/src/main/java/chat/simplex/app/ui/theme/Shape.kt +++ b/apps/android/app/src/main/java/chat/simplex/app/ui/theme/Shape.kt @@ -8,4 +8,4 @@ val Shapes = Shapes( small = RoundedCornerShape(4.dp), medium = RoundedCornerShape(4.dp), large = RoundedCornerShape(0.dp) -) \ No newline at end of file +) diff --git a/apps/android/app/src/main/java/chat/simplex/app/ui/theme/Theme.kt b/apps/android/app/src/main/java/chat/simplex/app/ui/theme/Theme.kt index 7590ecdcfb..8b05e28925 100644 --- a/apps/android/app/src/main/java/chat/simplex/app/ui/theme/Theme.kt +++ b/apps/android/app/src/main/java/chat/simplex/app/ui/theme/Theme.kt @@ -74,4 +74,4 @@ fun SimpleXTheme(darkTheme: Boolean? = null, content: @Composable () -> Unit) { shapes = Shapes, content = content ) -} \ No newline at end of file +} diff --git a/apps/android/app/src/main/java/chat/simplex/app/views/WelcomeView.kt b/apps/android/app/src/main/java/chat/simplex/app/views/WelcomeView.kt index b60df05f9e..fbd765213e 100644 --- a/apps/android/app/src/main/java/chat/simplex/app/views/WelcomeView.kt +++ b/apps/android/app/src/main/java/chat/simplex/app/views/WelcomeView.kt @@ -148,4 +148,4 @@ fun ProfileNameField(name: MutableState, focusRequester: FocusRequester? singleLine = true, cursorBrush = SolidColor(HighOrLowlight) ) -} \ No newline at end of file +} diff --git a/apps/android/app/src/main/java/chat/simplex/app/views/call/CallManager.kt b/apps/android/app/src/main/java/chat/simplex/app/views/call/CallManager.kt index 2a4b397840..a88f07d3c5 100644 --- a/apps/android/app/src/main/java/chat/simplex/app/views/call/CallManager.kt +++ b/apps/android/app/src/main/java/chat/simplex/app/views/call/CallManager.kt @@ -106,4 +106,4 @@ class CallManager(val chatModel: ChatModel) { chatModel.controller.ntfManager.cancelCallNotification() } } -} \ No newline at end of file +} diff --git a/apps/android/app/src/main/java/chat/simplex/app/views/call/SoundPlayer.kt b/apps/android/app/src/main/java/chat/simplex/app/views/call/SoundPlayer.kt index 009ffdf6e1..456f50d0bd 100644 --- a/apps/android/app/src/main/java/chat/simplex/app/views/call/SoundPlayer.kt +++ b/apps/android/app/src/main/java/chat/simplex/app/views/call/SoundPlayer.kt @@ -48,4 +48,4 @@ class SoundPlayer { companion object { val shared = SoundPlayer() } -} \ No newline at end of file +} diff --git a/apps/android/app/src/main/java/chat/simplex/app/views/chat/VerifyCodeView.kt b/apps/android/app/src/main/java/chat/simplex/app/views/chat/VerifyCodeView.kt index fd88ccdc34..58c13e8bb5 100644 --- a/apps/android/app/src/main/java/chat/simplex/app/views/chat/VerifyCodeView.kt +++ b/apps/android/app/src/main/java/chat/simplex/app/views/chat/VerifyCodeView.kt @@ -134,4 +134,4 @@ private fun splitToParts(s: String, length: Int): String { return (0..(s.length - 1) / length) .map { s.drop(it * length).take(length) } .joinToString(separator = "\n") -} \ No newline at end of file +} diff --git a/apps/android/app/src/main/java/chat/simplex/app/views/chat/item/CICallItemView.kt b/apps/android/app/src/main/java/chat/simplex/app/views/chat/item/CICallItemView.kt index 5ab80774c6..4c9bbae077 100644 --- a/apps/android/app/src/main/java/chat/simplex/app/views/chat/item/CICallItemView.kt +++ b/apps/android/app/src/main/java/chat/simplex/app/views/chat/item/CICallItemView.kt @@ -154,4 +154,4 @@ fun AcceptCallButton(cInfo: ChatInfo, acceptCall: (Contact) -> Unit) { // Image(systemName: "phone.arrow.down.left").foregroundColor(.secondary) // } // } -//} \ No newline at end of file +//} diff --git a/apps/android/app/src/main/java/chat/simplex/app/views/chatlist/ChatListView.kt b/apps/android/app/src/main/java/chat/simplex/app/views/chatlist/ChatListView.kt index 86647a0ef1..89f0a07743 100644 --- a/apps/android/app/src/main/java/chat/simplex/app/views/chatlist/ChatListView.kt +++ b/apps/android/app/src/main/java/chat/simplex/app/views/chatlist/ChatListView.kt @@ -21,6 +21,7 @@ import androidx.compose.ui.text.capitalize import androidx.compose.ui.text.font.FontWeight import androidx.compose.ui.text.intl.Locale import androidx.compose.ui.unit.* +import androidx.fragment.app.FragmentActivity import chat.simplex.app.* import chat.simplex.app.R import chat.simplex.app.model.* @@ -36,7 +37,7 @@ import kotlinx.coroutines.flow.MutableStateFlow import kotlinx.coroutines.launch @Composable -fun ChatListView(chatModel: ChatModel, setPerformLA: (Boolean) -> Unit, stopped: Boolean) { +fun ChatListView(chatModel: ChatModel, setPerformLA: (Boolean, FragmentActivity) -> Unit, stopped: Boolean) { val newChatSheetState by rememberSaveable(stateSaver = AnimatedViewState.saver()) { mutableStateOf(MutableStateFlow(AnimatedViewState.GONE)) } val userPickerState by rememberSaveable(stateSaver = AnimatedViewState.saver()) { mutableStateOf(MutableStateFlow(AnimatedViewState.GONE)) } val showNewChatSheet = { diff --git a/apps/android/app/src/main/java/chat/simplex/app/views/database/DatabaseEncryptionView.kt b/apps/android/app/src/main/java/chat/simplex/app/views/database/DatabaseEncryptionView.kt index 7a616301b7..ff6229e9e6 100644 --- a/apps/android/app/src/main/java/chat/simplex/app/views/database/DatabaseEncryptionView.kt +++ b/apps/android/app/src/main/java/chat/simplex/app/views/database/DatabaseEncryptionView.kt @@ -42,9 +42,9 @@ fun DatabaseEncryptionView(m: ChatModel) { val prefs = m.controller.appPrefs val useKeychain = remember { mutableStateOf(prefs.storeDBPassphrase.get()) } val initialRandomDBPassphrase = remember { mutableStateOf(prefs.initialRandomDBPassphrase.get()) } - val storedKey = remember { val key = DatabaseUtils.getDatabaseKey(); mutableStateOf(key != null && key != "") } + val storedKey = remember { val key = DatabaseUtils.ksDatabasePassword.get(); mutableStateOf(key != null && key != "") } // Do not do rememberSaveable on current key to prevent saving it on disk in clear text - val currentKey = remember { mutableStateOf(if (initialRandomDBPassphrase.value) DatabaseUtils.getDatabaseKey() ?: "" else "") } + val currentKey = remember { mutableStateOf(if (initialRandomDBPassphrase.value) DatabaseUtils.ksDatabasePassword.get() ?: "" else "") } val newKey = rememberSaveable { mutableStateOf("") } val confirmNewKey = rememberSaveable { mutableStateOf("") } @@ -89,7 +89,7 @@ fun DatabaseEncryptionView(m: ChatModel) { prefs.initialRandomDBPassphrase.set(false) initialRandomDBPassphrase.value = false if (useKeychain.value) { - DatabaseUtils.setDatabaseKey(newKey.value) + DatabaseUtils.ksDatabasePassword.set(newKey.value) } resetFormAfterEncryption(m, initialRandomDBPassphrase, currentKey, newKey, confirmNewKey, storedKey, useKeychain.value) operationEnded(m, progressIndicator) { @@ -150,7 +150,7 @@ fun DatabaseEncryptionLayout( text = generalGetString(R.string.notifications_will_be_hidden) + "\n" + storeSecurelyDanger(), confirmText = generalGetString(R.string.remove_passphrase), onConfirm = { - DatabaseUtils.removeDatabaseKey() + DatabaseUtils.ksDatabasePassword.remove() setUseKeychain(false, useKeychain, prefs) storedKey.value = false }, @@ -522,4 +522,4 @@ fun PreviewDatabaseEncryptionLayout() { onConfirmEncrypt = {}, ) } -} \ No newline at end of file +} diff --git a/apps/android/app/src/main/java/chat/simplex/app/views/database/DatabaseErrorView.kt b/apps/android/app/src/main/java/chat/simplex/app/views/database/DatabaseErrorView.kt index 05a8288ada..a59e2820be 100644 --- a/apps/android/app/src/main/java/chat/simplex/app/views/database/DatabaseErrorView.kt +++ b/apps/android/app/src/main/java/chat/simplex/app/views/database/DatabaseErrorView.kt @@ -38,7 +38,7 @@ fun DatabaseErrorView( ) { val progressIndicator = remember { mutableStateOf(false) } val dbKey = remember { mutableStateOf("") } - var storedDBKey by remember { mutableStateOf(DatabaseUtils.getDatabaseKey()) } + var storedDBKey by remember { mutableStateOf(DatabaseUtils.ksDatabasePassword.get()) } var useKeychain by remember { mutableStateOf(appPreferences.storeDBPassphrase.get()) } val context = LocalContext.current val restoreDbFromBackup = remember { mutableStateOf(shouldShowRestoreDbButton(appPreferences, context)) } @@ -49,7 +49,7 @@ fun DatabaseErrorView( } fun saveAndRunChatOnClick() { - DatabaseUtils.setDatabaseKey(dbKey.value) + DatabaseUtils.ksDatabasePassword.set(dbKey.value) storedDBKey = dbKey.value appPreferences.storeDBPassphrase.set(true) useKeychain = true diff --git a/apps/android/app/src/main/java/chat/simplex/app/views/database/DatabaseView.kt b/apps/android/app/src/main/java/chat/simplex/app/views/database/DatabaseView.kt index 4c9bcf6b9f..869a52cd23 100644 --- a/apps/android/app/src/main/java/chat/simplex/app/views/database/DatabaseView.kt +++ b/apps/android/app/src/main/java/chat/simplex/app/views/database/DatabaseView.kt @@ -52,7 +52,7 @@ fun DatabaseView( ) { val context = LocalContext.current val progressIndicator = remember { mutableStateOf(false) } - val runChat = remember { mutableStateOf(m.chatRunning.value ?: true) } + val runChat = remember { m.chatRunning } val prefs = m.controller.appPrefs val useKeychain = remember { mutableStateOf(prefs.storeDBPassphrase.get()) } val chatArchiveName = remember { mutableStateOf(prefs.chatArchiveName.get()) } @@ -76,7 +76,7 @@ fun DatabaseView( ) { DatabaseLayout( progressIndicator.value, - runChat.value, + runChat.value != false, m.chatDbChanged.value, useKeychain.value, m.chatDbEncrypted.value, @@ -388,7 +388,7 @@ fun chatArchiveTitle(chatArchiveTime: Instant, chatLastStart: Instant): String { return stringResource(if (chatArchiveTime < chatLastStart) R.string.old_database_archive else R.string.new_database_archive) } -private fun startChat(m: ChatModel, runChat: MutableState, chatLastStart: MutableState, chatDbChanged: MutableState) { +private fun startChat(m: ChatModel, runChat: MutableState, chatLastStart: MutableState, chatDbChanged: MutableState) { withApi { try { if (chatDbChanged.value) { @@ -417,7 +417,7 @@ private fun startChat(m: ChatModel, runChat: MutableState, chatLastStar } } -private fun stopChatAlert(m: ChatModel, runChat: MutableState, context: Context) { +private fun stopChatAlert(m: ChatModel, runChat: MutableState, context: Context) { AlertManager.shared.showAlertDialog( title = generalGetString(R.string.stop_chat_question), text = generalGetString(R.string.stop_chat_to_export_import_or_delete_chat_database), @@ -434,7 +434,7 @@ private fun exportProhibitedAlert() { ) } -private fun authStopChat(m: ChatModel, runChat: MutableState, context: Context) { +private fun authStopChat(m: ChatModel, runChat: MutableState, context: Context) { if (m.controller.appPrefs.performLA.get()) { authenticate( generalGetString(R.string.auth_stop_chat), @@ -442,12 +442,13 @@ private fun authStopChat(m: ChatModel, runChat: MutableState, context: context as FragmentActivity, completed = { laResult -> when (laResult) { - LAResult.Success, LAResult.Unavailable -> { + LAResult.Success, is LAResult.Unavailable -> { stopChat(m, runChat, context) } is LAResult.Error -> { + runChat.value = true } - LAResult.Failed -> { + is LAResult.Failed -> { runChat.value = true } } @@ -458,7 +459,7 @@ private fun authStopChat(m: ChatModel, runChat: MutableState, context: } } -private fun stopChat(m: ChatModel, runChat: MutableState, context: Context) { +private fun stopChat(m: ChatModel, runChat: MutableState, context: Context) { withApi { try { m.controller.apiStopChat() @@ -592,7 +593,7 @@ private fun importArchive( try { val config = ArchiveConfig(archivePath, parentTempDirectory = context.cacheDir.toString()) m.controller.apiImportArchive(config) - DatabaseUtils.removeDatabaseKey() + DatabaseUtils.ksDatabasePassword.remove() appFilesCountAndSize.value = directoryFileCountAndSize(getAppFilesDirectory(context)) operationEnded(m, progressIndicator) { AlertManager.shared.showAlertMsg(generalGetString(R.string.chat_database_imported), generalGetString(R.string.restart_the_app_to_use_imported_chat_database)) @@ -647,7 +648,7 @@ private fun deleteChat(m: ChatModel, progressIndicator: MutableState) { try { m.controller.apiDeleteStorage() m.chatDbDeleted.value = true - DatabaseUtils.removeDatabaseKey() + DatabaseUtils.ksDatabasePassword.remove() m.controller.appPrefs.storeDBPassphrase.set(true) operationEnded(m, progressIndicator) { AlertManager.shared.showAlertMsg(generalGetString(R.string.chat_database_deleted), generalGetString(R.string.restart_the_app_to_create_a_new_chat_profile)) diff --git a/apps/android/app/src/main/java/chat/simplex/app/views/helpers/DatabaseUtils.kt b/apps/android/app/src/main/java/chat/simplex/app/views/helpers/DatabaseUtils.kt index b723c69465..c82f2773d4 100644 --- a/apps/android/app/src/main/java/chat/simplex/app/views/helpers/DatabaseUtils.kt +++ b/apps/android/app/src/main/java/chat/simplex/app/views/helpers/DatabaseUtils.kt @@ -3,6 +3,7 @@ package chat.simplex.app.views.helpers import android.util.Log import chat.simplex.app.* import chat.simplex.app.model.AppPreferences +import chat.simplex.app.model.SharedPreference import chat.simplex.app.views.usersettings.Cryptor import kotlinx.serialization.* import java.io.File @@ -16,30 +17,36 @@ object DatabaseUtils { } private const val DATABASE_PASSWORD_ALIAS: String = "databasePassword" + private const val APP_PASSWORD_ALIAS: String = "appPassword" + + val ksDatabasePassword = KeyStoreItem(DATABASE_PASSWORD_ALIAS, appPreferences.encryptedDBPassphrase, appPreferences.initializationVectorDBPassphrase) + val ksAppPassword = KeyStoreItem(APP_PASSWORD_ALIAS, appPreferences.encryptedAppPassphrase, appPreferences.initializationVectorAppPassphrase) + + class KeyStoreItem(private val alias: String, val passphrase: SharedPreference, val initVector: SharedPreference) { + fun get(): String? { + return cryptor.decryptData( + passphrase.get()?.toByteArrayFromBase64() ?: return null, + initVector.get()?.toByteArrayFromBase64() ?: return null, + alias, + ) + } + + fun set(key: String) { + val data = cryptor.encryptText(key, alias) + passphrase.set(data.first.toBase64String()) + initVector.set(data.second.toBase64String()) + } + + fun remove() { + cryptor.deleteKey(alias) + passphrase.set(null) + initVector.set(null) + } + } private fun hasDatabase(rootDir: String): Boolean = File(rootDir + File.separator + "files_chat.db").exists() && File(rootDir + File.separator + "files_agent.db").exists() - fun getDatabaseKey(): String? { - return cryptor.decryptData( - appPreferences.encryptedDBPassphrase.get()?.toByteArrayFromBase64() ?: return null, - appPreferences.initializationVectorDBPassphrase.get()?.toByteArrayFromBase64() ?: return null, - DATABASE_PASSWORD_ALIAS, - ) - } - - fun setDatabaseKey(key: String) { - val data = cryptor.encryptText(key, DATABASE_PASSWORD_ALIAS) - appPreferences.encryptedDBPassphrase.set(data.first.toBase64String()) - appPreferences.initializationVectorDBPassphrase.set(data.second.toBase64String()) - } - - fun removeDatabaseKey() { - cryptor.deleteKey(DATABASE_PASSWORD_ALIAS) - appPreferences.encryptedDBPassphrase.set(null) - appPreferences.initializationVectorDBPassphrase.set(null) - } - fun useDatabaseKey(): String { Log.d(TAG, "useDatabaseKey ${appPreferences.storeDBPassphrase.get()}") var dbKey = "" @@ -47,10 +54,10 @@ object DatabaseUtils { if (useKeychain) { if (!hasDatabase(SimplexApp.context.dataDir.absolutePath)) { dbKey = randomDatabasePassword() - setDatabaseKey(dbKey) + ksDatabasePassword.set(dbKey) appPreferences.initialRandomDBPassphrase.set(true) } else { - dbKey = getDatabaseKey() ?: "" + dbKey = ksDatabasePassword.get() ?: "" } } return dbKey @@ -101,4 +108,4 @@ data class UpMigration( sealed class MTRError { @Serializable @SerialName("noDown") class NoDown(val dbMigrations: List): MTRError() @Serializable @SerialName("different") class Different(val appMigration: String, val dbMigration: String): MTRError() -} \ No newline at end of file +} diff --git a/apps/android/app/src/main/java/chat/simplex/app/views/helpers/DefaultBasicTextField.kt b/apps/android/app/src/main/java/chat/simplex/app/views/helpers/DefaultBasicTextField.kt index 51c9870897..18253a3a69 100644 --- a/apps/android/app/src/main/java/chat/simplex/app/views/helpers/DefaultBasicTextField.kt +++ b/apps/android/app/src/main/java/chat/simplex/app/views/helpers/DefaultBasicTextField.kt @@ -225,4 +225,4 @@ fun DefaultConfigurableTextField( } } } -} \ No newline at end of file +} diff --git a/apps/android/app/src/main/java/chat/simplex/app/views/helpers/LocalAuthentication.kt b/apps/android/app/src/main/java/chat/simplex/app/views/helpers/LocalAuthentication.kt index eb52ed137a..818f6b247b 100644 --- a/apps/android/app/src/main/java/chat/simplex/app/views/helpers/LocalAuthentication.kt +++ b/apps/android/app/src/main/java/chat/simplex/app/views/helpers/LocalAuthentication.kt @@ -1,36 +1,66 @@ package chat.simplex.app.views.helpers -import android.content.Context import android.os.Build.VERSION.SDK_INT -import android.widget.Toast import androidx.biometric.BiometricManager import androidx.biometric.BiometricManager.Authenticators.* import androidx.biometric.BiometricPrompt +import androidx.compose.foundation.layout.fillMaxSize +import androidx.compose.material.MaterialTheme +import androidx.compose.material.Surface +import androidx.compose.ui.Modifier import androidx.core.content.ContextCompat import androidx.fragment.app.FragmentActivity import chat.simplex.app.R +import chat.simplex.app.SimplexApp +import chat.simplex.app.views.helpers.DatabaseUtils.ksAppPassword +import chat.simplex.app.views.localauth.LocalAuthView +import chat.simplex.app.views.usersettings.LAMode sealed class LAResult { object Success: LAResult() class Error(val errString: CharSequence): LAResult() - object Failed: LAResult() - object Unavailable: LAResult() + class Failed(val errString: CharSequence? = null): LAResult() + class Unavailable(val errString: CharSequence? = null): LAResult() +} + +data class LocalAuthRequest ( + val title: String?, + val reason: String, + val password: String, + val completed: (LAResult) -> Unit +) { + companion object { + val sample = LocalAuthRequest(generalGetString(R.string.la_enter_app_passcode), generalGetString(R.string.la_authenticate), "") { } + } } fun authenticate( promptTitle: String, promptSubtitle: String, activity: FragmentActivity, + usingLAMode: LAMode = SimplexApp.context.chatModel.controller.appPrefs.laMode.get(), completed: (LAResult) -> Unit ) { - when { - SDK_INT in 28..29 -> - // KeyguardManager.isDeviceSecure()? https://developer.android.com/training/sign-in/biometric-auth#declare-supported-authentication-types - authenticateWithBiometricManager(promptTitle, promptSubtitle, activity, completed, BIOMETRIC_WEAK or DEVICE_CREDENTIAL) - SDK_INT > 29 -> - authenticateWithBiometricManager(promptTitle, promptSubtitle, activity, completed, BIOMETRIC_STRONG or DEVICE_CREDENTIAL) - else -> - completed(LAResult.Unavailable) + when (usingLAMode) { + LAMode.SYSTEM -> when { + SDK_INT in 28..29 -> + // KeyguardManager.isDeviceSecure()? https://developer.android.com/training/sign-in/biometric-auth#declare-supported-authentication-types + authenticateWithBiometricManager(promptTitle, promptSubtitle, activity, completed, BIOMETRIC_WEAK or DEVICE_CREDENTIAL) + SDK_INT > 29 -> + authenticateWithBiometricManager(promptTitle, promptSubtitle, activity, completed, BIOMETRIC_STRONG or DEVICE_CREDENTIAL) + else -> completed(LAResult.Unavailable()) + } + LAMode.PASSCODE -> { + val password = ksAppPassword.get() ?: return completed(LAResult.Unavailable(generalGetString(R.string.la_no_app_password))) + ModalManager.shared.showCustomModal(animated = false) { close -> + Surface(Modifier.fillMaxSize(), color = MaterialTheme.colors.background) { + LocalAuthView(SimplexApp.context.chatModel, LocalAuthRequest(promptTitle, promptSubtitle, password) { + close() + completed(it) + }) + } + } + } } } @@ -66,7 +96,7 @@ private fun authenticateWithBiometricManager( override fun onAuthenticationFailed() { super.onAuthenticationFailed() - completed(LAResult.Failed) + completed(LAResult.Failed()) } } ) @@ -78,9 +108,7 @@ private fun authenticateWithBiometricManager( .build() biometricPrompt.authenticate(promptInfo) } - else -> { - completed(LAResult.Unavailable) - } + else -> completed(LAResult.Unavailable()) } } @@ -89,6 +117,18 @@ fun laTurnedOnAlert() = AlertManager.shared.showAlertMsg( generalGetString(R.string.auth_you_will_be_required_to_authenticate_when_you_start_or_resume) ) +fun laPasscodeNotSetAlert() = AlertManager.shared.showAlertMsg( + generalGetString(R.string.lock_not_enabled), + generalGetString(R.string.you_can_turn_on_lock) +) + +fun laFailedAlert() { + AlertManager.shared.showAlertMsg( + title = generalGetString(R.string.la_auth_failed), + text = generalGetString(R.string.la_could_not_be_verified) + ) +} + fun laUnavailableInstructionAlert() = AlertManager.shared.showAlertMsg( generalGetString(R.string.auth_unavailable), generalGetString(R.string.auth_device_authentication_is_not_enabled_you_can_turn_on_in_settings_once_enabled) diff --git a/apps/android/app/src/main/java/chat/simplex/app/views/helpers/Util.kt b/apps/android/app/src/main/java/chat/simplex/app/views/helpers/Util.kt index 252c5e4edc..ccb00f4613 100644 --- a/apps/android/app/src/main/java/chat/simplex/app/views/helpers/Util.kt +++ b/apps/android/app/src/main/java/chat/simplex/app/views/helpers/Util.kt @@ -640,4 +640,20 @@ fun DisposableEffectOnGone(always: () -> Unit = {}, whenDispose: () -> Unit = {} } } } -} \ No newline at end of file +} + +@Composable +fun DisposableEffectOnRotate(always: () -> Unit = {}, whenDispose: () -> Unit = {}, whenRotate: () -> Unit) { + val context = LocalContext.current + DisposableEffect(Unit) { + always() + val activity = context as? Activity ?: return@DisposableEffect onDispose {} + val orientation = activity.resources.configuration.orientation + onDispose { + whenDispose() + if (orientation != activity.resources.configuration.orientation) { + whenRotate() + } + } + } +} diff --git a/apps/android/app/src/main/java/chat/simplex/app/views/localauth/LocalAuthView.kt b/apps/android/app/src/main/java/chat/simplex/app/views/localauth/LocalAuthView.kt new file mode 100644 index 0000000000..25772c701a --- /dev/null +++ b/apps/android/app/src/main/java/chat/simplex/app/views/localauth/LocalAuthView.kt @@ -0,0 +1,22 @@ +package chat.simplex.app.views.localauth + +import androidx.compose.runtime.Composable +import androidx.compose.runtime.mutableStateOf +import androidx.compose.runtime.saveable.rememberSaveable +import androidx.compose.ui.res.stringResource +import chat.simplex.app.R +import chat.simplex.app.model.ChatModel +import chat.simplex.app.views.helpers.* + +@Composable +fun LocalAuthView(m: ChatModel, authRequest: LocalAuthRequest) { + val passcode = rememberSaveable { mutableStateOf("") } + PasscodeView(passcode, authRequest.title ?: stringResource(R.string.la_enter_app_passcode), authRequest.reason, stringResource(R.string.submit_passcode), + submit = { + val r: LAResult = if (passcode.value == authRequest.password) LAResult.Success else LAResult.Error(generalGetString(R.string.incorrect_passcode)) + authRequest.completed(r) + }, + cancel = { + authRequest.completed(LAResult.Error(generalGetString(R.string.authentication_cancelled))) + }) +} diff --git a/apps/android/app/src/main/java/chat/simplex/app/views/localauth/PasscodeView.kt b/apps/android/app/src/main/java/chat/simplex/app/views/localauth/PasscodeView.kt new file mode 100644 index 0000000000..e6ef8de892 --- /dev/null +++ b/apps/android/app/src/main/java/chat/simplex/app/views/localauth/PasscodeView.kt @@ -0,0 +1,100 @@ +package chat.simplex.app.views.localauth + +import android.content.res.Configuration +import androidx.compose.foundation.layout.* +import androidx.compose.material.MaterialTheme +import androidx.compose.material.Text +import androidx.compose.material.icons.Icons +import androidx.compose.material.icons.filled.Close +import androidx.compose.material.icons.filled.Done +import androidx.compose.runtime.* +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.platform.LocalContext +import androidx.compose.ui.unit.dp +import chat.simplex.app.R +import chat.simplex.app.ui.theme.DEFAULT_PADDING +import chat.simplex.app.ui.theme.SimpleButton +import chat.simplex.app.views.helpers.* + +@Composable +fun PasscodeView( + passcode: MutableState, + title: String, + reason: String? = null, + submitLabel: String, + submitEnabled: ((String) -> Boolean)? = null, + submit: () -> Unit, + cancel: () -> Unit, +) { + @Composable + fun VerticalLayout() { + Column( + horizontalAlignment = Alignment.CenterHorizontally, + verticalArrangement = Arrangement.SpaceEvenly + ) { + Column(horizontalAlignment = Alignment.CenterHorizontally) { + Text(title, style = MaterialTheme.typography.h1) + if (reason != null) { + Text(reason, Modifier.padding(top = 5.dp), style = MaterialTheme.typography.subtitle1) + } + } + PasscodeEntry(passcode, true) + Row { + SimpleButton(generalGetString(R.string.cancel_verb), icon = Icons.Default.Close, click = cancel) + Spacer(Modifier.size(20.dp)) + SimpleButton(submitLabel, icon = Icons.Default.Done, disabled = submitEnabled?.invoke(passcode.value) == false || passcode.value.length < 4, click = submit) + } + } + } + + @Composable + fun HorizontalLayout() { + Row(Modifier.padding(horizontal = DEFAULT_PADDING), horizontalArrangement = Arrangement.Center) { + Column( + Modifier.padding(start = DEFAULT_PADDING, end = DEFAULT_PADDING, top = DEFAULT_PADDING * 4), + horizontalAlignment = Alignment.CenterHorizontally, + verticalArrangement = Arrangement.SpaceBetween + ) { + Column(horizontalAlignment = Alignment.CenterHorizontally) { + Text(title, style = MaterialTheme.typography.h1) + if (reason != null) { + Text(reason, Modifier.padding(top = 5.dp), style = MaterialTheme.typography.subtitle1) + } + } + PasscodeEntry(passcode, false) + } + + Column( + Modifier.padding(start = DEFAULT_PADDING, end = DEFAULT_PADDING, top = DEFAULT_PADDING * 4), + horizontalAlignment = Alignment.CenterHorizontally, + verticalArrangement = Arrangement.SpaceBetween + ) { + // Just to fill space to correctly calculate the height + Column { + Text("", style = MaterialTheme.typography.h1) + if (reason != null) { + Text("", Modifier.padding(top = 5.dp), style = MaterialTheme.typography.subtitle1) + } + PasscodeView(remember { mutableStateOf("") }) + } + BoxWithConstraints { + val s = minOf(maxWidth, maxHeight) / 3.5f + Column( + Modifier.padding(start = 30.dp).height(s * 3), + verticalArrangement = Arrangement.SpaceEvenly + ) { + SimpleButton(generalGetString(R.string.cancel_verb), icon = Icons.Default.Close, click = cancel) + SimpleButton(submitLabel, icon = Icons.Default.Done, disabled = submitEnabled?.invoke(passcode.value) == false || passcode.value.length < 4, click = submit) + } + } + } + } + } + + if (LocalContext.current.resources.configuration.orientation == Configuration.ORIENTATION_PORTRAIT) { + VerticalLayout() + } else { + HorizontalLayout() + } +} diff --git a/apps/android/app/src/main/java/chat/simplex/app/views/localauth/PasswordEntry.kt b/apps/android/app/src/main/java/chat/simplex/app/views/localauth/PasswordEntry.kt new file mode 100644 index 0000000000..d42264e301 --- /dev/null +++ b/apps/android/app/src/main/java/chat/simplex/app/views/localauth/PasswordEntry.kt @@ -0,0 +1,183 @@ +package chat.simplex.app.views.localauth + +import androidx.compose.foundation.background +import androidx.compose.foundation.clickable +import androidx.compose.foundation.layout.* +import androidx.compose.foundation.shape.RoundedCornerShape +import androidx.compose.material.* +import androidx.compose.material.icons.Icons +import androidx.compose.material.icons.filled.Close +import androidx.compose.material.icons.outlined.Backspace +import androidx.compose.runtime.* +import androidx.compose.runtime.saveable.rememberSaveable +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.graphics.Color +import androidx.compose.ui.graphics.vector.ImageVector +import androidx.compose.ui.platform.LocalDensity +import androidx.compose.ui.text.TextStyle +import androidx.compose.ui.text.font.FontWeight +import androidx.compose.ui.unit.* +import chat.simplex.app.model.ChatModel +import chat.simplex.app.ui.theme.HighOrLowlight + +@Composable +fun PasscodeEntry( + password: MutableState, + vertical: Boolean, +) { + Column(horizontalAlignment = Alignment.CenterHorizontally) { + PasscodeView(password) + BoxWithConstraints { + if (vertical) { + VerticalPasswordGrid(password) + } else { + HorizontalPasswordGrid(password) + } + } + } +} + +@Composable +fun PasscodeView(password: MutableState) { + var showPasscode by rememberSaveable { mutableStateOf(false) } + Text( + if (password.value.isEmpty()) " " else remember(password.value, showPasscode) { splitPassword(showPasscode, password.value) }, + Modifier.padding(vertical = 10.dp).clickable { showPasscode = !showPasscode }, + style = MaterialTheme.typography.body1 + ) +} + +@Composable +private fun BoxWithConstraintsScope.VerticalPasswordGrid(password: MutableState) { + val s = minOf(maxWidth, maxHeight) / 4 - 1.dp + Column(Modifier.width(IntrinsicSize.Min)) { + DigitsRow(s, 1, 2, 3, password) + Divider() + DigitsRow(s, 4, 5, 6, password) + Divider() + DigitsRow(s, 7, 8, 9, password) + Divider() + Row(Modifier.requiredHeight(s)) { + PasswordEdit(s, Icons.Default.Close) { + password.value = "" + } + VerticalDivider() + PasswordDigit(s, 0, password) + VerticalDivider() + PasswordEdit(s, Icons.Outlined.Backspace) { + password.value = password.value.dropLast(1) + } + } + } +} + +@Composable +private fun BoxWithConstraintsScope.HorizontalPasswordGrid(password: MutableState) { + val s = minOf(maxWidth, maxHeight) / 3.5f - 1.dp + Column(Modifier.width(IntrinsicSize.Min)) { + Row(Modifier.height(IntrinsicSize.Min)) { + DigitsRow(s, 1, 2, 3, password); + VerticalDivider() + PasswordEdit(s, Icons.Default.Close) { + password.value = "" + } + } + Divider() + Row(Modifier.height(IntrinsicSize.Min)) { + DigitsRow(s, 4, 5, 6, password) + VerticalDivider() + PasswordDigit(s, 0, password) + } + Divider() + Row(Modifier.height(IntrinsicSize.Min)) { + DigitsRow(s, 7, 8, 9, password) + VerticalDivider() + PasswordEdit(s, Icons.Outlined.Backspace) { + password.value = password.value.dropLast(1) + } + } + } +} + +private fun splitPassword(showPassword: Boolean, password: String): String { + val n = if (password.length < 8) 8 else 4 + return password.mapIndexed { index, c -> (if (showPassword) c.toString() else "●") + (if ((index + 1) % n == 0) " " else "") }.joinToString("") +} + +@Composable +private fun DigitsRow(size: Dp, d1: Int, d2: Int, d3: Int, password: MutableState) { + Row(Modifier.height(size)) { + PasswordDigit(size, d1, password) + VerticalDivider() + PasswordDigit(size, d2, password) + VerticalDivider() + PasswordDigit(size, d3, password) + } +} + +@Composable +private fun PasswordDigit(size: Dp, d: Int, password: MutableState) { + val s = d.toString() + return PasswordButton(size, action = { + if (password.value.length < 16) { + password.value += s + } + }) { + Text( + s, + style = TextStyle( + fontWeight = FontWeight.Normal, + fontSize = 30.sp, + letterSpacing = (-0.5).sp + ), + color = HighOrLowlight + ) + } +} + +@Composable +private fun PasswordEdit(size: Dp, image: ImageVector, action: () -> Unit) { + PasswordButton(size, action) { + Icon(image, null, tint = HighOrLowlight) + } +} + +@Composable +private fun PasswordButton(size: Dp, action: () -> Unit, content: @Composable BoxScope.() -> Unit) { + return Box( + Modifier.size(size) + .background(MaterialTheme.colors.background, RoundedCornerShape(50)) + .clickable { action() }, + contentAlignment = Alignment.Center + ) { + content() + } +} + +@Composable +fun VerticalDivider( + modifier: Modifier = Modifier, + color: Color = MaterialTheme.colors.onSurface.copy(alpha = DividerAlpha), + thickness: Dp = 1.dp, + startIndent: Dp = 0.dp +) { + val indentMod = if (startIndent.value != 0f) { + Modifier.padding(top = startIndent) + } else { + Modifier + } + val targetThickness = if (thickness == Dp.Hairline) { + (1f / LocalDensity.current.density).dp + } else { + thickness + } + Box( + modifier.then(indentMod) + .fillMaxHeight() + .width(targetThickness) + .background(color = color) + ) +} + +private const val DividerAlpha = 0.12f diff --git a/apps/android/app/src/main/java/chat/simplex/app/views/localauth/SetAppPasscodeView.kt b/apps/android/app/src/main/java/chat/simplex/app/views/localauth/SetAppPasscodeView.kt new file mode 100644 index 0000000000..0506c592dd --- /dev/null +++ b/apps/android/app/src/main/java/chat/simplex/app/views/localauth/SetAppPasscodeView.kt @@ -0,0 +1,48 @@ +package chat.simplex.app.views.localauth + +import androidx.compose.runtime.* +import androidx.compose.runtime.saveable.rememberSaveable +import chat.simplex.app.R +import chat.simplex.app.views.helpers.DatabaseUtils.ksAppPassword +import chat.simplex.app.views.helpers.generalGetString + +@Composable +fun SetAppPasscodeView( + submit: () -> Unit, + cancel: () -> Unit, + close: () -> Unit +) { + val passcode = rememberSaveable { mutableStateOf("") } + var enteredPassword by rememberSaveable { mutableStateOf("") } + var confirming by rememberSaveable { mutableStateOf(false) } + + @Composable + fun SetPasswordView(title: String, submitLabel: String, submitEnabled: (((String) -> Boolean))? = null, submit: () -> Unit) { + PasscodeView(passcode, title = title, submitLabel = submitLabel, submitEnabled = submitEnabled, submit = submit) { + close() + cancel() + } + } + + if (confirming) { + SetPasswordView( + generalGetString(R.string.confirm_passcode), + generalGetString(R.string.confirm_verb), + submitEnabled = { pwd -> pwd == enteredPassword } + ) { + if (passcode.value == enteredPassword) { + ksAppPassword.set(passcode.value) + enteredPassword = "" + passcode.value = "" + close() + submit() + } + } + } else { + SetPasswordView(generalGetString(R.string.new_passcode), generalGetString(R.string.save_verb)) { + enteredPassword = passcode.value + passcode.value = "" + confirming = true + } + } +} diff --git a/apps/android/app/src/main/java/chat/simplex/app/views/onboarding/HowItWorks.kt b/apps/android/app/src/main/java/chat/simplex/app/views/onboarding/HowItWorks.kt index 3e13b7cf5f..33c4e7ea1a 100644 --- a/apps/android/app/src/main/java/chat/simplex/app/views/onboarding/HowItWorks.kt +++ b/apps/android/app/src/main/java/chat/simplex/app/views/onboarding/HowItWorks.kt @@ -70,4 +70,4 @@ fun PreviewHowItWorks() { SimpleXTheme { HowItWorks(user = null) } -} \ No newline at end of file +} diff --git a/apps/android/app/src/main/java/chat/simplex/app/views/usersettings/DeveloperView.kt b/apps/android/app/src/main/java/chat/simplex/app/views/usersettings/DeveloperView.kt index 55a6dee8ab..e6776a84d5 100644 --- a/apps/android/app/src/main/java/chat/simplex/app/views/usersettings/DeveloperView.kt +++ b/apps/android/app/src/main/java/chat/simplex/app/views/usersettings/DeveloperView.kt @@ -56,4 +56,3 @@ fun DeveloperView( } } } - diff --git a/apps/android/app/src/main/java/chat/simplex/app/views/usersettings/HiddenProfileView.kt b/apps/android/app/src/main/java/chat/simplex/app/views/usersettings/HiddenProfileView.kt index a755313126..6571b8c4af 100644 --- a/apps/android/app/src/main/java/chat/simplex/app/views/usersettings/HiddenProfileView.kt +++ b/apps/android/app/src/main/java/chat/simplex/app/views/usersettings/HiddenProfileView.kt @@ -87,4 +87,4 @@ private fun HiddenProfileLayout( } SectionTextFooter(stringResource(R.string.to_reveal_profile_enter_password)) } -} \ No newline at end of file +} diff --git a/apps/android/app/src/main/java/chat/simplex/app/views/usersettings/PrivacySettings.kt b/apps/android/app/src/main/java/chat/simplex/app/views/usersettings/PrivacySettings.kt index 597a4b4df5..50cffd2976 100644 --- a/apps/android/app/src/main/java/chat/simplex/app/views/usersettings/PrivacySettings.kt +++ b/apps/android/app/src/main/java/chat/simplex/app/views/usersettings/PrivacySettings.kt @@ -7,22 +7,41 @@ import SectionTextFooter import SectionView import android.view.WindowManager import androidx.compose.foundation.layout.* +import androidx.compose.material.* import androidx.compose.material.icons.Icons +import androidx.compose.material.icons.filled.Lock import androidx.compose.material.icons.outlined.* import androidx.compose.runtime.* import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.res.stringResource +import androidx.compose.ui.unit.dp import androidx.fragment.app.FragmentActivity import chat.simplex.app.R import chat.simplex.app.model.* +import chat.simplex.app.ui.theme.HighOrLowlight +import chat.simplex.app.ui.theme.SimplexGreen import chat.simplex.app.views.helpers.* +import chat.simplex.app.views.helpers.DatabaseUtils.ksAppPassword +import chat.simplex.app.views.localauth.SetAppPasscodeView + +enum class LAMode { + SYSTEM, + PASSCODE; + + val text: String + get() = when (this) { + SYSTEM -> generalGetString(R.string.la_mode_system) + PASSCODE -> generalGetString(R.string.la_mode_passcode) + } +} @Composable fun PrivacySettingsView( chatModel: ChatModel, - setPerformLA: (Boolean) -> Unit + showSettingsModal: (@Composable (ChatModel) -> Unit) -> (() -> Unit), + setPerformLA: (Boolean, FragmentActivity) -> Unit ) { Column( Modifier.fillMaxWidth(), @@ -31,7 +50,7 @@ fun PrivacySettingsView( val simplexLinkMode = chatModel.controller.appPrefs.simplexLinkMode AppBarTitle(stringResource(R.string.your_privacy)) SectionView(stringResource(R.string.settings_section_title_device)) { - ChatLockItem(chatModel.performLA, setPerformLA) + ChatLockItem(chatModel, showSettingsModal, setPerformLA) SectionDivider() val context = LocalContext.current SettingsPreferenceItem(Icons.Outlined.VisibilityOff, stringResource(R.string.protect_app_screen), chatModel.controller.appPrefs.privacyProtectScreen) { on -> @@ -52,10 +71,12 @@ fun PrivacySettingsView( SectionDivider() SettingsPreferenceItem(Icons.Outlined.TravelExplore, stringResource(R.string.send_link_previews), chatModel.controller.appPrefs.privacyLinkPreviews) SectionDivider() - SectionItemView { SimpleXLinkOptions(chatModel.simplexLinkMode, onSelected = { - simplexLinkMode.set(it) - chatModel.simplexLinkMode.value = it - }) } + SectionItemView { + SimpleXLinkOptions(chatModel.simplexLinkMode, onSelected = { + simplexLinkMode.set(it) + chatModel.simplexLinkMode.value = it + }) + } } if (chatModel.simplexLinkMode.value == SimplexLinkMode.BROWSER) { SectionTextFooter(stringResource(R.string.simplex_link_mode_browser_warning)) @@ -83,3 +104,236 @@ private fun SimpleXLinkOptions(simplexLinkModeState: State, onS onSelected = onSelected ) } + +private val laDelays = listOf(10, 30, 60, 180, 0) + +@Composable +fun SimplexLockView( + chatModel: ChatModel, + currentLAMode: SharedPreference, + setPerformLA: (Boolean, FragmentActivity) -> Unit +) { + val performLA = remember { chatModel.performLA } + val laMode = remember { chatModel.controller.appPrefs.laMode.state } + val laLockDelay = remember { chatModel.controller.appPrefs.laLockDelay } + val showChangePasscode = remember { derivedStateOf { performLA.value && currentLAMode.state.value == LAMode.PASSCODE } } + val activity = LocalContext.current as FragmentActivity + + fun resetLAEnabled(onOff: Boolean) { + chatModel.controller.appPrefs.performLA.set(onOff) + chatModel.performLA.value = onOff + } + + fun disableUnavailableLA() { + resetLAEnabled(false) + currentLAMode.set(LAMode.SYSTEM) + laUnavailableInstructionAlert() + } + + fun toggleLAMode(toLAMode: LAMode) { + authenticate( + if (toLAMode == LAMode.SYSTEM) { + generalGetString(R.string.la_enter_app_passcode) + } else { + generalGetString(R.string.chat_lock) + }, + generalGetString(R.string.change_lock_mode), activity + ) { laResult -> + when (laResult) { + is LAResult.Error -> { + laFailedAlert() + } + is LAResult.Failed -> { /* Can be called multiple times on every failure */ } + LAResult.Success -> { + when (toLAMode) { + LAMode.SYSTEM -> { + authenticate(generalGetString(R.string.auth_enable_simplex_lock), promptSubtitle = "", activity, toLAMode) { laResult -> + when (laResult) { + LAResult.Success -> { + currentLAMode.set(toLAMode) + ksAppPassword.remove() + laTurnedOnAlert() + } + is LAResult.Unavailable, is LAResult.Error -> { + laFailedAlert() + } + is LAResult.Failed -> { /* Can be called multiple times on every failure */ } + } + } + } + LAMode.PASSCODE -> { + ModalManager.shared.showCustomModal { close -> + Surface(Modifier.fillMaxSize(), color = MaterialTheme.colors.background) { + SetAppPasscodeView( + submit = { + laLockDelay.set(30) + currentLAMode.set(toLAMode) + passcodeAlert(generalGetString(R.string.passcode_set)) + }, + cancel = {}, + close + ) + } + } + } + } + } + is LAResult.Unavailable -> disableUnavailableLA() + } + } + } + + fun changeLAPassword() { + authenticate(generalGetString(R.string.la_current_app_passcode), generalGetString(R.string.la_change_app_passcode), activity) { laResult -> + when (laResult) { + LAResult.Success -> { + ModalManager.shared.showCustomModal { close -> + Surface(Modifier.fillMaxSize(), color = MaterialTheme.colors.background) { + SetAppPasscodeView( + submit = { + passcodeAlert(generalGetString(R.string.passcode_changed)) + }, cancel = { + passcodeAlert(generalGetString(R.string.passcode_not_changed)) + }, close + ) + } + } + } + is LAResult.Error -> laFailedAlert() + is LAResult.Failed -> {} + is LAResult.Unavailable -> disableUnavailableLA() + } + } + } + + Column( + Modifier.fillMaxWidth(), + horizontalAlignment = Alignment.Start + ) { + AppBarTitle(stringResource(R.string.chat_lock)) + SectionView { + EnableLock(performLA) { performLAToggle -> + performLA.value = performLAToggle + chatModel.controller.appPrefs.laNoticeShown.set(true) + if (performLAToggle) { + when (currentLAMode.state.value) { + LAMode.SYSTEM -> { + setPerformLA(true, activity) + } + LAMode.PASSCODE -> { + ModalManager.shared.showCustomModal { close -> + Surface(Modifier.fillMaxSize(), color = MaterialTheme.colors.background) { + SetAppPasscodeView( + submit = { + laLockDelay.set(30) + chatModel.controller.appPrefs.performLA.set(true) + passcodeAlert(generalGetString(R.string.passcode_set)) + }, + cancel = { + resetLAEnabled(false) + }, close + ) + } + } + } + } + } else { + setPerformLA(false, activity) + } + } + SectionDivider() + SectionItemView { + LockModeSelector(laMode) { newLAMode -> + if (laMode.value == newLAMode) return@LockModeSelector + if (chatModel.controller.appPrefs.performLA.get()) { + toggleLAMode(newLAMode) + } else { + currentLAMode.set(newLAMode) + } + } + } + + if (performLA.value) { + SectionDivider() + SectionItemView { + LockDelaySelector(remember { laLockDelay.state }) { laLockDelay.set(it) } + } + if (showChangePasscode.value && laMode.value == LAMode.PASSCODE) { + SectionDivider() + SectionItemView({ changeLAPassword() }) { + Text(generalGetString(R.string.la_change_app_passcode)) + } + } + } + } + } +} + +@Composable +private fun EnableLock(performLA: MutableState, onCheckedChange: (Boolean) -> Unit) { + SectionItemView { + Row(verticalAlignment = Alignment.CenterVertically) { + Text( + stringResource(R.string.enable_lock), Modifier + .padding(end = 24.dp) + .fillMaxWidth() + .weight(1F) + ) + Switch( + checked = performLA.value, + onCheckedChange = onCheckedChange, + colors = SwitchDefaults.colors( + checkedThumbColor = MaterialTheme.colors.primary, + uncheckedThumbColor = HighOrLowlight + ) + ) + } + } +} + +@Composable +private fun LockModeSelector(state: State, onSelected: (LAMode) -> Unit) { + val values by remember { mutableStateOf(LAMode.values().map { it to it.text }) } + ExposedDropDownSettingRow( + generalGetString(R.string.lock_mode), + values, + state, + icon = null, + enabled = remember { mutableStateOf(true) }, + onSelected = onSelected + ) +} + +@Composable +private fun LockDelaySelector(state: State, onSelected: (Int) -> Unit) { + val delays = remember { if (laDelays.contains(state.value)) laDelays else listOf(state.value) + laDelays } + val values by remember { mutableStateOf(delays.map { it to laDelayText(it) }) } + ExposedDropDownSettingRow( + generalGetString(R.string.lock_after), + values, + state, + icon = null, + enabled = remember { mutableStateOf(true) }, + onSelected = onSelected + ) +} + +private fun laDelayText(t: Int): String { + val m = t / 60 + val s = t % 60 + return if (t == 0) { + generalGetString(R.string.la_immediately) + } else if (m == 0 || s != 0) { + // there are no options where both minutes and seconds are needed + generalGetString(R.string.la_seconds).format(s) + } else { + generalGetString(R.string.la_minutes).format(m) + } +} + +private fun passcodeAlert(title: String) { + AlertManager.shared.showAlertMsg( + title = title, + text = generalGetString(R.string.la_please_remember_to_store_password) + ) +} diff --git a/apps/android/app/src/main/java/chat/simplex/app/views/usersettings/SettingsView.kt b/apps/android/app/src/main/java/chat/simplex/app/views/usersettings/SettingsView.kt index e07b3443d0..ca03fbf388 100644 --- a/apps/android/app/src/main/java/chat/simplex/app/views/usersettings/SettingsView.kt +++ b/apps/android/app/src/main/java/chat/simplex/app/views/usersettings/SettingsView.kt @@ -42,7 +42,7 @@ import chat.simplex.app.views.onboarding.SimpleXInfo import chat.simplex.app.views.onboarding.WhatsNewView @Composable -fun SettingsView(chatModel: ChatModel, setPerformLA: (Boolean) -> Unit) { +fun SettingsView(chatModel: ChatModel, setPerformLA: (Boolean, FragmentActivity) -> Unit) { val user = chatModel.currentUser.value val stopped = chatModel.chatRunning.value == false @@ -126,7 +126,7 @@ fun SettingsLayout( incognito: MutableState, incognitoPref: SharedPreference, userDisplayName: String, - setPerformLA: (Boolean) -> Unit, + setPerformLA: (Boolean, FragmentActivity) -> Unit, showModal: (@Composable (ChatModel) -> Unit) -> (() -> Unit), showSettingsModal: (@Composable (ChatModel) -> Unit) -> (() -> Unit), showSettingsModalWithSearch: (@Composable (ChatModel, MutableState) -> Unit) -> Unit, @@ -174,7 +174,7 @@ fun SettingsLayout( SectionDivider() SettingsActionItem(Icons.Outlined.Videocam, stringResource(R.string.settings_audio_video_calls), showSettingsModal { CallSettingsView(it, showModal) }, disabled = stopped) SectionDivider() - SettingsActionItem(Icons.Outlined.Lock, stringResource(R.string.privacy_and_security), showSettingsModal { PrivacySettingsView(it, setPerformLA) }, disabled = stopped) + SettingsActionItem(Icons.Outlined.Lock, stringResource(R.string.privacy_and_security), showSettingsModal { PrivacySettingsView(it, showSettingsModal, setPerformLA) }, disabled = stopped) SectionDivider() SettingsActionItem(Icons.Outlined.LightMode, stringResource(R.string.appearance_settings), showSettingsModal { AppearanceView(it) }, disabled = stopped) SectionDivider() @@ -294,13 +294,20 @@ fun MaintainIncognitoState(chatModel: ChatModel) { ) } -@Composable fun ChatLockItem(performLA: MutableState, setPerformLA: (Boolean) -> Unit) { - SectionItemView() { +@Composable +fun ChatLockItem( + chatModel: ChatModel, + showSettingsModal: (@Composable (ChatModel) -> Unit) -> (() -> Unit), + setPerformLA: (Boolean, FragmentActivity) -> Unit +) { + val performLA = remember { chatModel.performLA } + val currentLAMode = remember { chatModel.controller.appPrefs.laMode } + SectionItemView(showSettingsModal { SimplexLockView(chatModel, currentLAMode, setPerformLA) }) { Row(verticalAlignment = Alignment.CenterVertically) { Icon( - Icons.Outlined.Lock, + if (performLA.value) Icons.Filled.Lock else Icons.Outlined.Lock, contentDescription = stringResource(R.string.chat_lock), - tint = HighOrLowlight, + tint = if (performLA.value) SimplexGreen else HighOrLowlight, ) Spacer(Modifier.padding(horizontal = 4.dp)) Text( @@ -309,14 +316,7 @@ fun MaintainIncognitoState(chatModel: ChatModel) { .fillMaxWidth() .weight(1F) ) - Switch( - checked = performLA.value, - onCheckedChange = { setPerformLA(it) }, - colors = SwitchDefaults.colors( - checkedThumbColor = MaterialTheme.colors.primary, - uncheckedThumbColor = HighOrLowlight - ) - ) + Text(if (performLA.value) remember { currentLAMode.state }.value.text else generalGetString(androidx.compose.ui.R.string.off), color = HighOrLowlight) } } } @@ -517,7 +517,7 @@ private fun runAuth(context: Context, onFinish: (success: Boolean) -> Unit) { generalGetString(R.string.auth_log_in_using_credential), context as FragmentActivity, completed = { laResult -> - onFinish(laResult == LAResult.Success || laResult == LAResult.Unavailable) + onFinish(laResult == LAResult.Success || laResult is LAResult.Unavailable) } ) } @@ -538,7 +538,7 @@ fun PreviewSettingsLayout() { incognito = remember { mutableStateOf(false) }, incognitoPref = SharedPreference({ false }, {}), userDisplayName = "Alice", - setPerformLA = {}, + setPerformLA = { _, _ -> }, showModal = { {} }, showSettingsModal = { {} }, showSettingsModalWithSearch = { }, diff --git a/apps/android/app/src/main/java/chat/simplex/app/views/usersettings/UserProfilesView.kt b/apps/android/app/src/main/java/chat/simplex/app/views/usersettings/UserProfilesView.kt index 2bf1ee352f..8a4675b5ce 100644 --- a/apps/android/app/src/main/java/chat/simplex/app/views/usersettings/UserProfilesView.kt +++ b/apps/android/app/src/main/java/chat/simplex/app/views/usersettings/UserProfilesView.kt @@ -388,4 +388,4 @@ private fun showMuteProfileAlert(showMuteProfileAlert: SharedPreference showMuteProfileAlert.set(false) }, ) -} \ No newline at end of file +} diff --git a/apps/android/app/src/main/res/values/strings.xml b/apps/android/app/src/main/res/values/strings.xml index 7a4526d43c..873305dde9 100644 --- a/apps/android/app/src/main/res/values/strings.xml +++ b/apps/android/app/src/main/res/values/strings.xml @@ -165,6 +165,20 @@ SimpleX Lock To protect your information, turn on SimpleX Lock.\nYou will be prompted to complete authentication before this feature is enabled. Turn on + SimpleX Lock mode + System authentication + Passcode entry + Authentication failed + You could not be verified; please try again. + No app passcode + Enter Passcode + Current Passcode + Change passcode + Authenticate + Immediately + %d seconds + %d minutes + Please remember or store it securely - there is no way to recover a lost password! SimpleX Lock turned on @@ -179,6 +193,8 @@ Device authentication is disabled. Turning off SimpleX Lock. Stop chat Open chat console + SimpleX Lock not enabled! + You can turn on SimpleX Lock via Settings. Message delivery error @@ -735,6 +751,20 @@ Auto-accept images Send link previews App data backup + Enable lock + Lock mode + Lock after + Submit + Confirm Passcode + Incorrect passcode + New Passcode + Authentication cancelled + System + Passcode + Passcode set! + Passcode changed! + Passcode not changed! + Change lock mode YOU diff --git a/apps/ios/Shared/Views/UserSettings/PrivacySettings.swift b/apps/ios/Shared/Views/UserSettings/PrivacySettings.swift index 5be4979f12..dd21ea26c0 100644 --- a/apps/ios/Shared/Views/UserSettings/PrivacySettings.swift +++ b/apps/ios/Shared/Views/UserSettings/PrivacySettings.swift @@ -186,7 +186,7 @@ struct SimplexLockView: View { .onChange(of: laMode) { _ in if performLAModeReset { performLAModeReset = false - } else if performLA { + } else if prefPerformLA { toggleLAMode() } else { updateLAMode() From 14eeb4451c475af22168ed5ec470e5db8e268cb5 Mon Sep 17 00:00:00 2001 From: Evgeny Poberezkin <2769109+epoberezkin@users.noreply.github.com> Date: Fri, 14 Apr 2023 00:11:36 +0200 Subject: [PATCH 2/8] mobile: translations (#2179) * Translated using Weblate (French) Currently translated at 100.0% (1056 of 1056 strings) Translation: SimpleX Chat/SimpleX Chat Android Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/fr/ * Translated using Weblate (French) Currently translated at 100.0% (968 of 968 strings) Translation: SimpleX Chat/SimpleX Chat iOS Translate-URL: https://hosted.weblate.org/projects/simplex-chat/ios/fr/ * Translated using Weblate (Italian) Currently translated at 100.0% (1062 of 1062 strings) Translation: SimpleX Chat/SimpleX Chat Android Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/it/ * Translated using Weblate (Italian) Currently translated at 100.0% (968 of 968 strings) Translation: SimpleX Chat/SimpleX Chat iOS Translate-URL: https://hosted.weblate.org/projects/simplex-chat/ios/it/ * Translated using Weblate (Chinese (Simplified)) Currently translated at 100.0% (1062 of 1062 strings) Translation: SimpleX Chat/SimpleX Chat Android Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/zh_Hans/ * Translated using Weblate (Dutch) Currently translated at 100.0% (1062 of 1062 strings) Translation: SimpleX Chat/SimpleX Chat Android Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/nl/ * Translated using Weblate (Dutch) Currently translated at 100.0% (968 of 968 strings) Translation: SimpleX Chat/SimpleX Chat iOS Translate-URL: https://hosted.weblate.org/projects/simplex-chat/ios/nl/ * Translated using Weblate (Korean) Currently translated at 71.7% (762 of 1062 strings) Translation: SimpleX Chat/SimpleX Chat Android Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/ko/ * Translated using Weblate (Polish) Currently translated at 100.0% (1062 of 1062 strings) Translation: SimpleX Chat/SimpleX Chat Android Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/pl/ * Translated using Weblate (Polish) Currently translated at 100.0% (968 of 968 strings) Translation: SimpleX Chat/SimpleX Chat iOS Translate-URL: https://hosted.weblate.org/projects/simplex-chat/ios/pl/ * Translated using Weblate (Chinese (Simplified)) Currently translated at 100.0% (1062 of 1062 strings) Translation: SimpleX Chat/SimpleX Chat Android Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/zh_Hans/ * Translated using Weblate (Chinese (Simplified)) Currently translated at 100.0% (968 of 968 strings) Translation: SimpleX Chat/SimpleX Chat iOS Translate-URL: https://hosted.weblate.org/projects/simplex-chat/ios/zh_Hans/ * Translated using Weblate (Spanish) Currently translated at 100.0% (1062 of 1062 strings) Translation: SimpleX Chat/SimpleX Chat Android Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/es/ * Translated using Weblate (Spanish) Currently translated at 100.0% (968 of 968 strings) Translation: SimpleX Chat/SimpleX Chat iOS Translate-URL: https://hosted.weblate.org/projects/simplex-chat/ios/es/ * Translated using Weblate (French) Currently translated at 100.0% (1056 of 1056 strings) Translation: SimpleX Chat/SimpleX Chat Android Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/fr/ * Translated using Weblate (French) Currently translated at 100.0% (968 of 968 strings) Translation: SimpleX Chat/SimpleX Chat iOS Translate-URL: https://hosted.weblate.org/projects/simplex-chat/ios/fr/ * Translated using Weblate (Italian) Currently translated at 100.0% (1062 of 1062 strings) Translation: SimpleX Chat/SimpleX Chat Android Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/it/ * Translated using Weblate (Italian) Currently translated at 100.0% (968 of 968 strings) Translation: SimpleX Chat/SimpleX Chat iOS Translate-URL: https://hosted.weblate.org/projects/simplex-chat/ios/it/ * Translated using Weblate (Chinese (Simplified)) Currently translated at 100.0% (1062 of 1062 strings) Translation: SimpleX Chat/SimpleX Chat Android Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/zh_Hans/ * Translated using Weblate (Dutch) Currently translated at 100.0% (1062 of 1062 strings) Translation: SimpleX Chat/SimpleX Chat Android Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/nl/ * Translated using Weblate (Dutch) Currently translated at 100.0% (968 of 968 strings) Translation: SimpleX Chat/SimpleX Chat iOS Translate-URL: https://hosted.weblate.org/projects/simplex-chat/ios/nl/ * Translated using Weblate (Korean) Currently translated at 71.7% (762 of 1062 strings) Translation: SimpleX Chat/SimpleX Chat Android Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/ko/ * Translated using Weblate (Polish) Currently translated at 100.0% (1062 of 1062 strings) Translation: SimpleX Chat/SimpleX Chat Android Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/pl/ * Translated using Weblate (Polish) Currently translated at 100.0% (968 of 968 strings) Translation: SimpleX Chat/SimpleX Chat iOS Translate-URL: https://hosted.weblate.org/projects/simplex-chat/ios/pl/ * Translated using Weblate (Chinese (Simplified)) Currently translated at 100.0% (1062 of 1062 strings) Translation: SimpleX Chat/SimpleX Chat Android Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/zh_Hans/ * Translated using Weblate (Chinese (Simplified)) Currently translated at 100.0% (968 of 968 strings) Translation: SimpleX Chat/SimpleX Chat iOS Translate-URL: https://hosted.weblate.org/projects/simplex-chat/ios/zh_Hans/ * Translated using Weblate (Spanish) Currently translated at 100.0% (1062 of 1062 strings) Translation: SimpleX Chat/SimpleX Chat Android Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/es/ * Translated using Weblate (Spanish) Currently translated at 100.0% (968 of 968 strings) Translation: SimpleX Chat/SimpleX Chat iOS Translate-URL: https://hosted.weblate.org/projects/simplex-chat/ios/es/ * Translated using Weblate (French) Currently translated at 100.0% (1062 of 1062 strings) Translation: SimpleX Chat/SimpleX Chat Android Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/fr/ * Translated using Weblate (French) Currently translated at 100.0% (1014 of 1014 strings) Translation: SimpleX Chat/SimpleX Chat iOS Translate-URL: https://hosted.weblate.org/projects/simplex-chat/ios/fr/ * Translated using Weblate (Italian) Currently translated at 100.0% (1014 of 1014 strings) Translation: SimpleX Chat/SimpleX Chat iOS Translate-URL: https://hosted.weblate.org/projects/simplex-chat/ios/it/ * Translated using Weblate (Chinese (Simplified)) Currently translated at 100.0% (1062 of 1062 strings) Translation: SimpleX Chat/SimpleX Chat Android Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/zh_Hans/ * Translated using Weblate (Chinese (Simplified)) Currently translated at 100.0% (1014 of 1014 strings) Translation: SimpleX Chat/SimpleX Chat iOS Translate-URL: https://hosted.weblate.org/projects/simplex-chat/ios/zh_Hans/ * Translated using Weblate (Spanish) Currently translated at 100.0% (1014 of 1014 strings) Translation: SimpleX Chat/SimpleX Chat iOS Translate-URL: https://hosted.weblate.org/projects/simplex-chat/ios/es/ * Translated using Weblate (Dutch) Currently translated at 100.0% (1014 of 1014 strings) Translation: SimpleX Chat/SimpleX Chat iOS Translate-URL: https://hosted.weblate.org/projects/simplex-chat/ios/nl/ * Translated using Weblate (Hindi) Currently translated at 16.8% (179 of 1062 strings) Translation: SimpleX Chat/SimpleX Chat Android Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/hi/ * Translated using Weblate (Korean) Currently translated at 80.1% (851 of 1062 strings) Translation: SimpleX Chat/SimpleX Chat Android Translate-URL: https://hosted.weblate.org/projects/simplex-chat/android/ko/ * Translated using Weblate (Polish) Currently translated at 100.0% (1014 of 1014 strings) Translation: SimpleX Chat/SimpleX Chat iOS Translate-URL: https://hosted.weblate.org/projects/simplex-chat/ios/pl/ * ios: import/export localizations --------- Co-authored-by: Ophiushi <41908476+ishi-sama@users.noreply.github.com> Co-authored-by: random r Co-authored-by: Float Co-authored-by: John m Co-authored-by: 5olivetree <5olivetree+github.com@mailbox.org> Co-authored-by: B.O.S.S Co-authored-by: sith-on-mars Co-authored-by: No name Co-authored-by: Ram --- .../app/src/main/res/values-es/strings.xml | 32 ++- .../app/src/main/res/values-fr/strings.xml | 20 +- .../app/src/main/res/values-hi/strings.xml | 103 ++++++++ .../app/src/main/res/values-it/strings.xml | 20 +- .../app/src/main/res/values-ko/strings.xml | 140 +++++++++- .../app/src/main/res/values-nl/strings.xml | 20 +- .../app/src/main/res/values-pl/strings.xml | 20 +- .../src/main/res/values-zh-rCN/strings.xml | 22 +- .../es.xcloc/Localized Contents/es.xliff | 50 +++- .../fr.xcloc/Localized Contents/fr.xliff | 42 +++ .../it.xcloc/Localized Contents/it.xliff | 41 +++ .../nl.xcloc/Localized Contents/nl.xliff | 43 ++- .../pl.xcloc/Localized Contents/pl.xliff | 245 ++++++++++++++++++ .../Localized Contents/zh-Hans.xliff | 45 +++- apps/ios/cs.lproj/Localizable.strings | 2 +- apps/ios/de.lproj/Localizable.strings | 2 +- apps/ios/es.lproj/Localizable.strings | 133 +++++++++- apps/ios/fr.lproj/Localizable.strings | 128 ++++++++- apps/ios/it.lproj/Localizable.strings | 125 ++++++++- apps/ios/nl.lproj/Localizable.strings | 127 ++++++++- apps/ios/ru.lproj/Localizable.strings | 2 +- apps/ios/zh-Hans.lproj/Localizable.strings | 129 ++++++++- 22 files changed, 1447 insertions(+), 44 deletions(-) diff --git a/apps/android/app/src/main/res/values-es/strings.xml b/apps/android/app/src/main/res/values-es/strings.xml index bf9683ae60..7e0b3ad4c5 100644 --- a/apps/android/app/src/main/res/values-es/strings.xml +++ b/apps/android/app/src/main/res/values-es/strings.xml @@ -250,8 +250,8 @@ Email Conectar Conectar mediante enlace - Base de Datos -\ny Contraseña + Base de Datos y +\nContraseña Contribuye Core compilado: %s Core versión: v%s @@ -454,7 +454,7 @@ Invitar al grupo Para comprobar el cifrado de extremo a extremo con su contacto compare (o escanee) el código en sus dispositivos. La base de datos no está cifrada. Escribe una contraseña para protegerla. - Asegúrate de que las direcciones del servidor SMP tienen el formato correcto, están separadas por líneas y no duplicadas. + Asegúrate de que las direcciones del servidor SMP tienen el formato correcto, están separadas por líneas y no están duplicadas. Notificación instantánea Configuración de red No se usarán hosts .onion @@ -547,7 +547,7 @@ videollamada (sin cifrado e2e) sin cifrado e2e Importar base de datos - MENSAJES + MENSAJES Y ARCHIVOS ¿Importar base de datos\? Sin archivos recibidos o enviados Mensajes @@ -741,7 +741,7 @@ Activar Compartir envío no autorizado - Escribe el nombre del contacto + Escribe un nombre para el contacto Usar proxy SOCKS (puerto 9050) Error desconocido El rol cambiará a \"%s\". Se notificará a todos los miembros del grupo. @@ -749,7 +749,7 @@ Los mensajes enviados se eliminarán una vez transcurrido el tiempo establecido. Mensajes de chat SimpleX no leído - Escribe el nombre del contacto… + Escribe un nombre para el contacto… ¿Cambiar dirección de recepción\? Usar cámara ¡El contacto con el que has compartido este enlace NO podrá conectarse! @@ -826,7 +826,7 @@ perfil de grupo actualizado Tiempo de espera de la conexión TCP agotado Tema - Establecer preferencias de grupo + Establece preferencias de grupo SOPORTE SIMPLEX CHAT Escribe la contraseña para exportar Actualizar @@ -1059,4 +1059,22 @@ El vídeo se recibirá cuando tu contacto termine de subirlo. Solo se pueden enviar 10 vídeos de forma simultánea Esperando el vídeo + Error guardando servidores SMP + Error cargando servidores XFTP + Error cargando servidores SMP + Asegúrate de que las direcciones del servidor XFTP tienen el formato correcto, están separadas por líneas y no están duplicadas. + El servidor requiere autorización para subir, comprueba la contraseña + Comparar archivo + Crear archivo + Eliminar archivo + Subir archivo + Servidores XFTP + Tus servidores XFTP + Puerto + puerto %d + Establece Usar hosts .onion en No si el proxy SOCKS no los admite. + Descargar archivo + Usar proxy SOCKS + Host + Configuración proxy SOCKS \ No newline at end of file diff --git a/apps/android/app/src/main/res/values-fr/strings.xml b/apps/android/app/src/main/res/values-fr/strings.xml index ff45b454f3..e5e6fd6ede 100644 --- a/apps/android/app/src/main/res/values-fr/strings.xml +++ b/apps/android/app/src/main/res/values-fr/strings.xml @@ -549,7 +549,7 @@ Fonctionnalités expérimentales SOCKS PROXY THEMES - MESSAGES + MESSAGES ET FICHIERS APPELS Importer la base de données Nouvelle archive de base de données @@ -1058,4 +1058,22 @@ La vidéo ne sera reçue que lorsque votre contact sera en ligne. Veuillez patienter ou vérifier plus tard ! Requête de réception de la vidéo Seulement 10 vidéos peuvent être envoyées en même temps + Créer un fichier + Supprimer le fichier + Erreur lors de la sauvegarde des serveurs XFTP + Assurez-vous que les adresses des serveurs XFTP sont au bon format, séparées par des lignes et qu\'elles ne sont pas dupliquées. + Le serveur requiert une autorisation pour uploader, vérifiez le mot de passe + Transférer le fichier + Serveurs XFTP + Vos serveurs XFTP + Comparer le fichier + Télécharger le fichier + Erreur lors du chargement des serveurs SMP + Erreur lors du chargement des serveurs XFTP + Héberger + Port + port %d + Paramètres de proxy SOCKS + Utiliser un proxy SOCKS + Définissez Utiliser les hôtes .onion sur Non si le proxy SOCKS ne les prend pas en charge. \ No newline at end of file diff --git a/apps/android/app/src/main/res/values-hi/strings.xml b/apps/android/app/src/main/res/values-hi/strings.xml index 4b5d0b471d..bafcf87767 100644 --- a/apps/android/app/src/main/res/values-hi/strings.xml +++ b/apps/android/app/src/main/res/values-hi/strings.xml @@ -180,4 +180,107 @@ वापस लौटाना ए + बी आपका यादृच्छिक प्रोफ़ाइल + चैट वरीयताएँ + %d दिनों + ध्वनि संदेशों की अनुमति दें\? + साफ़ + ऑडियो बंद + ऑडियो चालू + गायब होने वाले संदेश + अधिक सुधार जल्द ही आ रहे हैं! + नकलना + भूमिका बदलें + %d घंटा + प्रमाणीकरण अनुपलब्ध + संपादित + समूह मिटाएं\? + संपर्क पहले से मौजूद है + संपर्क नाम + संपर्क छुपाया गया: + मिटाना + जब आप पृष्ठभूमि में 30 सेकंड के बाद ऐप को प्रारंभ या फिर से शुरू करते हैं तो आपको प्रमाणित करने की आवश्यकता होगी। + प्रतिमा प्राप्त करने को कहा + वापस + बंद करें बटन + पता बनाना + संपर्क आमंत्रित नहीं कर सकते! + संपर्क जांचा गया + संपर्क वरीयताएँ + आपकी भूमिका को %s में बदल दिया + साफ़ + गायब होने वाले संदेश + प्रदर्शित होने वाला नाम: + अँधेरा + अपने संपर्कों को ध्वनि संदेश भेजने की अनुमति दें। + %d दिन + %d घंटे + चीनी और स्पेनिश इंटरफ़ेस + विवरण + ऐप केवल तभी सूचनाएं प्राप्त कर सकता है जब वह चल रहा हो, कोई पृष्ठभूमि सेवा प्रारंभ नहीं की जाएगी + संपादन करना + विकेन्द्रीकृत + कॉल समाप्त + कॉल चल रहा है + छवियों को स्वत: स्वीकार करें + चैट संग्रह + चैट रोक दी गई है + चैट संग्रह + आप इस समूह से संदेश प्राप्त करना बंद कर देंगे। चैट इतिहास संरक्षित किया जाएगा। + %s की भूमिका को %s में बदला + पूर्ण + इस चैट में गायब होने वाले संदेश प्रतिबंधित हैं। + इस चैट में गायब होने वाले संदेश प्रतिबंधित हैं। + डेवलपर्स के साथ चैट करें + संपर्क अभी तक जुड़ा नहीं है! + चैट कंसोल + आपके सभी संपर्क जुड़े रहेंगे। + चैट प्रोफ़ाइल + संपर्क अनुरोध + बनाएं + कॉल त्रुटि + कॉल चल रहा है + हमेशा रिले का प्रयोग करें + ऑडियो कॉल + ऑडियो और वीडियो कॉल + कॉल पहले ही खत्म हो चुकी है! + अक्षम करना + संपर्क में ई2ई एन्क्रिप्शन है + संपर्क में कोई ई2ई एन्क्रिप्शन नहीं है + चैट चल रही है + चैट रोक दी गई है + पता बदल रहा है… + %d मिनट + उपकरण + रचनाकार + समूह भूमिका बदलें\? + %d सप्ताह + संपर्क अनुरोधों को स्वत: स्वीकार करें + खराब संदेश हैश + ध्वनि संदेशों को केवल तभी अनुमति दें यदि आपका संपर्क उन्हें अनुमति देता है। + जिस संपर्क से आपने यह लिंक प्राप्त किया है, उसे एक यादृच्छिक प्रोफ़ाइल भेजी जाएगी + कॉल कर रहा है… + रद्द %s + आपके लिए पता बदल दिया + प्रत्येक 10 मिनट में 1 मिनट तक नए संदेशों की जाँच करता है + %d सेकंड + %d महीना + %d महीने + डेवलपर उपकरण + आपके संपर्क को एक यादृच्छिक प्रोफ़ाइल भेजी जाएगी + पता बदल रहा है… + स्वागत संदेश जोड़ें + अपने संपर्कों को भेजे गए संदेशों को अपरिवर्तनीय रूप से हटाने की अनुमति दें। + ध्वनि संदेश भेजने की अनुमति दें। + संपर्कों को आमंत्रित नहीं कर सकते! + %s के लिए पता बदल रहा है… + दोबारा मत दिखाओ + आप और आपका संपर्क दोनों ध्वनि संदेश भेज सकते हैं। + विकास करना + आवाज़ बंद करना + अपने संपर्कों को गायब होने वाले संदेश भेजने की अनुमति दें। + फ़ाइल स्थानांतरण रद्द करें\? + ऑडियो और वीडियो कॉल + अधिक सुधार जल्द ही आ रहे हैं! + वीडियो प्राप्त करने के लिए कहा + संपर्क और सभी संदेशों को हटा दिया जाएगा - इसे पूर्ववत नहीं किया जा सकता! \ No newline at end of file diff --git a/apps/android/app/src/main/res/values-it/strings.xml b/apps/android/app/src/main/res/values-it/strings.xml index f25b2b56a6..2ee5625f20 100644 --- a/apps/android/app/src/main/res/values-it/strings.xml +++ b/apps/android/app/src/main/res/values-it/strings.xml @@ -728,7 +728,7 @@ Importare il database della chat\? Importa database Modalità incognito - MESSAGGI + MESSAGGI E FILE Nuovo archivio database Vecchio archivio del database Riavvia l\'app per creare un profilo di chat nuovo. @@ -1058,4 +1058,22 @@ Il video verrà ricevuto quando il tuo contatto sarà in linea, attendi o controlla più tardi! In attesa del video In attesa del video + Errore nel caricamento dei server XFTP + Errore nel salvataggio dei server XFTP + Il server richiede l\'autorizzazione per l\'invio, controlla la password + Confronta file + Crea file + Scarica file + Invia file + Server XFTP + I tuoi server XFTP + Impostazioni proxy SOCKS + Usa proxy SOCKS + Host + Porta + porta %d + Imposta Usa gli host .onion su No se il proxy SOCKS non li supporta. + Elimina file + Errore nel caricamento dei server SMP + Assicurati che gli indirizzi del server XFTP siano nel formato corretto, uno per riga e non doppi. \ No newline at end of file diff --git a/apps/android/app/src/main/res/values-ko/strings.xml b/apps/android/app/src/main/res/values-ko/strings.xml index ae64af765f..ff15163317 100644 --- a/apps/android/app/src/main/res/values-ko/strings.xml +++ b/apps/android/app/src/main/res/values-ko/strings.xml @@ -10,7 +10,7 @@ 이미 추가된 연락처에요. 연결 연결 오류 (인증) - 대기열 생성 + 대기열 만들기 데이터베이스를 초기화할 수 없어요 앱이 백그라운드에서 항상 실행되어요. 대신 메시지가 도착하자마자 바로 알림이 와요. 10분마다 최대 1분간 새 메시지 확인 @@ -43,10 +43,10 @@ 채팅을 지울까요\? 연결 요청 완료 링크를 통해 연결 - 프리셋 서버 추가 + 프리셋 서버 추가하기 서버 추가… 채팅 콘솔 - 서버 주소를 확인 후 다시 시도하십시오. + 서버 주소를 확인 후 다시 시도해 주세요. ICE 서버 설정 기여 고급 네트워크 설정 @@ -97,8 +97,8 @@ 채팅 기록 보관함 내 역할이 %s 역할로 변경됨. 주소 바꾸는 중… - 주소 바꾸기… - %s의 주소 바꾸기… + 주소 바꾸는 중… + %s의 주소 바꾸는 중… 연결됨 완료 연결됨 @@ -135,7 +135,7 @@ 중국어 및 스페인어 인터페이스 SimpleX에 대하여 수락 - 일회용 초대 링크 생성 + 일회용 초대 링크 만들기 주소 생성 1일 SimpleX에 대하여 @@ -176,7 +176,7 @@ 배터리에 가장 좋음. 앱이 실행 중일 때만 알림을 받게 되며 백그라운드에서 실행되지 않습니다. 설정을 통해 비활성화할 수 있어요. – 앱이 실행되는 동안 알림이 표시되요. 나와 대화 상대 모두 자동 삭제되는 메시지를 보낼 수 있어요. - QR 코드 스캔: QR 코드를 보여주는 사람과 연결해요. + QR 코드 스캔: QR 코드를 보여주는 사람과 연결할 수 있어요. 데이터베이스 암호를 저장하고 있는 암호키 저장소에 접근할 수 없습니다 배터리 많이 사용! 백그라운드에서 항상 실행돼요. 메시지를 수신하자마자 알림이 떠요. 통화 종료됨 %1$s @@ -253,7 +253,7 @@ 다음 기간 이후 자동 삭제 위 다음 : 데이터베이스 삭제 - 데이터베이스는 임의의 비밀번호로 암호화되었습니다. 내보내기 기능 사용 전 비밀번호를 변경해 주세요. + 데이터베이스는 임의의 비밀번호로 암호화되었어요. 내보내기 기능 사용 전 비밀번호를 변경해 주세요. 파일과 미디어를 삭제할까요\? 현재 비밀번호… 데이터베이스 암호화 완료! @@ -764,4 +764,128 @@ 공유한 링크를 통해서만 나에게 연결할 수 있어요. 그룹 프로필 업데이트됨 프로필 비밀번호 + 보이기 + 저장하기 + QR 코드 스캔하기 + 답장 + 초기화 + 저장하기 + 저장하고 모든 대화 상대에게 알리기 + 저장하고 그룹 멤버들에게 알리기 + 저장하고 대화 상대에게 알리기 + 지우기 + 아카이브 저장하기 + 색상 저장하기 + 암호 저장소에 비밀번호 저장하기 + 데이터베이스 백업 복원하기 + 데이터베이스 백업을 복원한 후 이전 비밀번호를 입력해 주세요. 이 작업은 되돌릴 수 없어요. + 데이터베이스 백업을 복원할까요\? + 키스토어에서 암호를 찾을 수 없어요. 직접 입력해 주세요. 백업 도구를 사용하여 복원했을 때 이 문제가 발생할 수 있는데, 그런 경우가 아니라면 개발자에게 알려주세요. + 저장하고 그룹 프로필 업데이트하기 + 환영 메시지를 저장할까요\? + 그룹 프로필 저장하기 + 색상 초기화 + 강퇴하기 + 코드 스캔하기 + 대화 상대의 앱에서 보안 코드를 스캔해 주세요. + 저장된 WebRTC ICE 서버가 제거될 거예요. + 비밀번호 저장하고 채팅 열기 + 역할 + 설정을 저장할까요\? + 프로필 비밀번호 저장하기 + 가져온 채팅 데이터베이스를 사용하려면 앱을 다시 실행해 주세요. + 새 프로필을 만드려면 앱을 다시 실행해 주세요. + 암호 저장소에서 비밀번호를 삭제할까요\? + 채팅 기능 실행하기 + 복원하기 + 대화 상대가 파일 전송을 취소했어요. + 보안 대기열 + 파일 업로드하기 + 파일 비교 + 파일 삭제하기 + 파일 다운로드하기 + 공유 + 라이브 메시지 보내기 + QR코드 보기 + 파일 만들기 + + 파일 보내기는 아직 지원되지 않아요. + %1$s를 통해 + SimpleX 연락처 주소 + SimpleX 그룹 링크 + SimpleX 일회용 초대 링크 + SimpleX 링크 + 브라우저를 통해 + 브라우저에서 링크를 열면 익명성 또는 보안에 문제가 생길 수 있어요. 신뢰할 수 없는 SimpleX 링크는 빨간색으로 표시되어요. + 링크 전체 + 보낸 사람이 연결 요청을 삭제했을 수 있어요. + 즉각적인 알림이 비활성화되었어요! + 미리보기 표시 + 알림 미리보기 + 알림 서비스 + 메시지 받는 중… + SimpleX 채팅 서비스 + 파일 공유… + 이미지 공유… + 메시지 공유… + 라이브 메시지 보내기 - 입력 과정을 실시간으로 상대에게 보여줘요. + 보내기 + 초대 링크 공유 + 연락하고자 하는 사람이 앱에서 QR 코드를 스캔할 수 있어요. + 보안 코드 + 서버 QR코드 스캔 + 일부 서버가 테스트에 통과하지 못했습니다 : + 서버 테스트 실패! + 환영 메시지 + 링크 공유 + 표시하기 + 연락처 선택 + 멤버 초대 건너뛰기 + 다음을 통해 보내기 + XFTP로 동영상 및 파일 보내기 + 멈추기 + %s의 역할을 %s로 변경했어요. + 콘솔용 + 적어도 하나의 숨겨지지 않은 사용자 프로필이 있어야 해요. + 그룹 설정 지정하기 + %s의 주소를 바꿨어요 + 주소를 바꿨어요 + 그룹 프로필 업데이트됨 + 적어도 하나의 사용자 프로필이 있어야 해요. + 서버 테스트하기 + 서버 사용하기 + 새로운 대화에 사용 + 잘못된 서버 주소에요! + 비밀 + 종단 간 암호화 안 됨 + 테마 + 내 역할이 %s로 변경되었어요. + 나감 + 도움말 + 설정 + 링크 미리보기 보내기 + SOCKS 프록시 + SIMPLEX CHAT 도와주기 + + 실험적 기능 + 표시 : + 연락처 이름 설정 + 개발자에게 이메일 보내기 + 서버를 수동으로 입력 + 미리 설정된 서버 + 서버 저장하기 + 서버 테스트하기 + 현재 채팅 프로필의 새로운 연결을 위한 서버 + 서버를 저장할까요\? + GitHub에서 별 주기 + 개발자 옵션 보기 + 메시지 및 파일 + 익명 모드 + 실험적 + 내보낼 비밀번호 설정 + SMP 서버 + 미리 설정된 서버 주소 + 내 서버 + 내 서버 주소 + %1$s을(를) 강퇴했어요. \ No newline at end of file diff --git a/apps/android/app/src/main/res/values-nl/strings.xml b/apps/android/app/src/main/res/values-nl/strings.xml index a2a9e5577e..3206df4484 100644 --- a/apps/android/app/src/main/res/values-nl/strings.xml +++ b/apps/android/app/src/main/res/values-nl/strings.xml @@ -494,7 +494,7 @@ Gebruiker link voorbeeld afbeelding GEBRUIKER - BERICHTEN + BERICHTEN EN BESTANDEN 📱 mobiel: tik op Openen in mobiele app en tik vervolgens op Verbinden in de app. Gebruiker wordt uit de groep verwijderd, dit kan niet ongedaan worden gemaakt! Fout bij bezorging van bericht @@ -1057,4 +1057,22 @@ Wachten op video Video De video wordt ontvangen wanneer uw contactpersoon het uploaden heeft voltooid. + Fout bij opslaan van XFTP-servers + Fout bij het laden van XFTP servers + Server vereist autorisatie om te uploaden, wachtwoord controleren + Bestand vergelijken + Bestand verwijderen + Bestand downloaden + Upload bestand + XFTP servers + Uw XFTP servers + Host + Poort + SOCKS proxy instellingen + Gebruik SOCKS proxy + Stel Use .onion hosts in op Nee als de SOCKS-proxy deze niet ondersteunt. + Bestand maken + Fout bij het laden van SMP servers + Zorg ervoor dat XFTP server adressen de juiste indeling hebben, regel gescheiden zijn en niet gedupliceerd zijn. + poort %d \ No newline at end of file diff --git a/apps/android/app/src/main/res/values-pl/strings.xml b/apps/android/app/src/main/res/values-pl/strings.xml index 826d81cdf4..f5ae2d8e43 100644 --- a/apps/android/app/src/main/res/values-pl/strings.xml +++ b/apps/android/app/src/main/res/values-pl/strings.xml @@ -536,7 +536,7 @@ POMOC Importuj bazę danych Tryb incognito - WIADOMOŚCI + WIADOMOŚCI I PLIKI Nowe archiwum bazy danych Stare archiwum bazy danych Chroń ekran aplikacji @@ -1058,4 +1058,22 @@ Dołączysz do grupy, do której odnosi się ten link i połączysz się z jej członkami. Twoje serwery SMP Zostaniesz połączony, gdy Twoje żądanie połączenia zostanie zaakceptowane, proszę czekać lub sprawdzić później! + Błąd ładowania serwerów SMP + Błąd ładowania serwerów XFTP + Błąd zapisu serwerów XFTP + Utwórz plik + Pobierz plik + Serwer wymaga autoryzacji do przesłania, sprawdź hasło + Prześlij plik + Porównaj plik + Usuń plik + Serwery XFTP + Twoje serwery XFTP + Host + Port + port %d + Ustaw Użyj hostów .onion na Nie jeśli proxy SOCKS ich nie obsługuje. + Ustawienia PROXY SOCKS + Użyj proxy SOCKS + Upewnij się, że adresy serwerów XFTP są w poprawnym formacie, rozdzielone liniami i nie są zduplikowane. \ No newline at end of file diff --git a/apps/android/app/src/main/res/values-zh-rCN/strings.xml b/apps/android/app/src/main/res/values-zh-rCN/strings.xml index d23d5148a9..4731519257 100644 --- a/apps/android/app/src/main/res/values-zh-rCN/strings.xml +++ b/apps/android/app/src/main/res/values-zh-rCN/strings.xml @@ -37,7 +37,7 @@ 删除所有文件 消息 在此后删除消息 - 消息 + 消息和文件 添加个人资料 所有聊天记录和消息将被删除——这一行为无法撤销! 所有聊天记录和消息将被删除——这一行为无法撤销!只有您的消息会被删除。 @@ -103,7 +103,7 @@ 应用程序版本:v%s 仅在运行时应用程序可以接受通知,不会启动后台服务 一个随机资料将发送给您的联系人 - 身份验证不可用 + 身份认证不可用 自动接受图像 附件 语音通话 @@ -1058,4 +1058,22 @@ 视频已发送 要求接收视频 视频将在您的联系人完成上传后收到。 + 服务器需要授权来上传,检查密码 + 上传文件 + XFTP 服务器 + 您的 XFTP 服务器 + 如果 SOCKS 代理不支持它们,请将 Use .onion hosts 设置为否。 + 使用 SOCKS 代理 + 端口 + 删除文件 + 对比文件 + 主机 + 确保 XFTP 服务器地址格式正确、行分隔且不重复。 + 创建文件 + 下载文件 + 加载 SMP 服务器时出错 + 加载 XFTP 服务器时出错 + 保存 SMP 服务器时出错 + 端口 %d + SOCKS 代理设置 \ No newline at end of file diff --git a/apps/ios/SimpleX Localizations/es.xcloc/Localized Contents/es.xliff b/apps/ios/SimpleX Localizations/es.xcloc/Localized Contents/es.xliff index 7f717e831d..4276de3cd3 100644 --- a/apps/ios/SimpleX Localizations/es.xcloc/Localized Contents/es.xliff +++ b/apps/ios/SimpleX Localizations/es.xcloc/Localized Contents/es.xliff @@ -144,6 +144,7 @@ %lld minutes + %lld minutos No comment provided by engineer. @@ -153,6 +154,7 @@ %lld seconds + %lld segundos No comment provided by engineer. @@ -550,6 +552,7 @@ Authentication cancelled + Autenticación cancelada PIN entry @@ -659,6 +662,7 @@ Change Passcode + Cambiar contraseña No comment provided by engineer. @@ -668,6 +672,7 @@ Change lock mode + Cambiar el modo de bloqueo authentication reason @@ -677,6 +682,7 @@ Change passcode + Cambiar contraseña authentication reason @@ -786,6 +792,7 @@ Compare file + Comparar archivo server test step @@ -805,6 +812,7 @@ Confirm Passcode + Confirmar contraseña No comment provided by engineer. @@ -969,6 +977,7 @@ Create file + Crear archivo server test step @@ -1008,6 +1017,7 @@ Current Passcode + Contraseña actual No comment provided by engineer. @@ -1081,8 +1091,7 @@ Database passphrase & export - Base de datos -y Contraseña + Base de datos y contraseña No comment provided by engineer. @@ -1196,6 +1205,7 @@ y Contraseña Delete file + Eliminar archivo server test step @@ -1400,6 +1410,7 @@ y Contraseña Download file + Descargar archivo server test step @@ -1444,6 +1455,7 @@ y Contraseña Enable lock + Activar bloqueo No comment provided by engineer. @@ -1503,6 +1515,7 @@ y Contraseña Enter Passcode + Introducir contraseña No comment provided by engineer. @@ -1647,6 +1660,7 @@ y Contraseña Error loading %@ servers + Error al cargar servidores %@ No comment provided by engineer. @@ -1676,6 +1690,7 @@ y Contraseña Error saving passcode + Error al guardar contraseña No comment provided by engineer. @@ -2055,6 +2070,7 @@ y Contraseña Immediately + Inmediatamente No comment provided by engineer. @@ -2129,6 +2145,7 @@ y Contraseña Incorrect passcode + Contraseña incorrecta PIN entry @@ -2255,6 +2272,7 @@ Añadiremos redundancia de servidores para evitar la pérdida de mensajes. KeyChain error + Error en Keychain No comment provided by engineer. @@ -2319,10 +2337,12 @@ Añadiremos redundancia de servidores para evitar la pérdida de mensajes. Lock after + Bloquear después de No comment provided by engineer. Lock mode + Modo de bloqueo No comment provided by engineer. @@ -2497,6 +2517,7 @@ Añadiremos redundancia de servidores para evitar la pérdida de mensajes. New Passcode + Nueva contraseña No comment provided by engineer. @@ -2541,6 +2562,7 @@ Añadiremos redundancia de servidores para evitar la pérdida de mensajes. No app password + Sin contraseña de la aplicación Authentication unavailable @@ -2594,6 +2616,7 @@ Añadiremos redundancia de servidores para evitar la pérdida de mensajes. Off + Apagado No comment provided by engineer. @@ -2723,22 +2746,27 @@ Añadiremos redundancia de servidores para evitar la pérdida de mensajes. Passcode + Contraseña No comment provided by engineer. Passcode changed! + ¡Contraseña cambiada! No comment provided by engineer. Passcode entry + Entrada de contraseña No comment provided by engineer. Passcode not changed! + ¡Contraseña no cambiada! No comment provided by engineer. Passcode set! + ¡Contraseña guardada! No comment provided by engineer. @@ -2813,6 +2841,7 @@ Añadiremos redundancia de servidores para evitar la pérdida de mensajes. Please remember or store it securely - there is no way to recover a lost passcode! + Por favor, recuerda y guarda la contraseña en un lugar seguro. ¡No hay manera de recuperar una contraseña perdida! No comment provided by engineer. @@ -3282,6 +3311,7 @@ Añadiremos redundancia de servidores para evitar la pérdida de mensajes. Server requires authorization to upload, check password + El servidor requiere autorización para subir, comprueba la contraseña server test error @@ -3386,10 +3416,12 @@ Añadiremos redundancia de servidores para evitar la pérdida de mensajes. SimpleX Lock mode + Modo Bloqueo SimpleX No comment provided by engineer. SimpleX Lock not enabled! + ¡Bloqueo SimpleX no activado! No comment provided by engineer. @@ -3479,6 +3511,7 @@ Añadiremos redundancia de servidores para evitar la pérdida de mensajes. Submit + Enviar No comment provided by engineer. @@ -3493,6 +3526,7 @@ Añadiremos redundancia de servidores para evitar la pérdida de mensajes. System authentication + Autenticación del sistema No comment provided by engineer. @@ -3577,7 +3611,7 @@ Añadiremos redundancia de servidores para evitar la pérdida de mensajes. Thanks to the users – contribute via Weblate! - Gracias a los usuarios: ¡contribuye a través de Weblate! + Agradecimientos a los usuarios. ¡Contribuye a través de Weblate! No comment provided by engineer. @@ -3612,7 +3646,7 @@ Añadiremos redundancia de servidores para evitar la pérdida de mensajes. The group is fully decentralized – it is visible only to the members. - El grupo está totalmente descentralizado: sólo es visible para los miembros. + El grupo está totalmente descentralizado y sólo es visible para los miembros. No comment provided by engineer. @@ -3842,6 +3876,7 @@ Para conectarte, pide a tu contacto que cree otro enlace de conexión y comprueb Unlock app + Desbloquear aplicación authentication reason @@ -3896,6 +3931,7 @@ Para conectarte, pide a tu contacto que cree otro enlace de conexión y comprueb Upload file + Subir archivo server test step @@ -3965,10 +4001,12 @@ Para conectarte, pide a tu contacto que cree otro enlace de conexión y comprueb Video will be received when your contact completes uploading it. + El video se recibirá cuando tu contacto termine de subirlo. No comment provided by engineer. Video will be received when your contact is online, please wait or check later! + El vídeo se recibirá cuando tu contacto esté en línea, por favor espera o compruébalo más tarde. No comment provided by engineer. @@ -4013,6 +4051,7 @@ Para conectarte, pide a tu contacto que cree otro enlace de conexión y comprueb Waiting for video + Esperando el vídeo No comment provided by engineer. @@ -4144,11 +4183,12 @@ SimpleX Lock debe estar activado. You can start chat via app Settings / Database or by restarting the app - Puede iniciar Chat a través de la Configuración / base de datos de la aplicación o reiniciando la aplicación + Puede iniciar Chat a través de la Configuración / Base de datos de la aplicación o reiniciando la aplicación No comment provided by engineer. You can turn on SimpleX Lock via Settings. + Puedes activar el bloqueo de SimpleX a través de Configuración. No comment provided by engineer. diff --git a/apps/ios/SimpleX Localizations/fr.xcloc/Localized Contents/fr.xliff b/apps/ios/SimpleX Localizations/fr.xcloc/Localized Contents/fr.xliff index 4615f04405..9e6dbbc946 100644 --- a/apps/ios/SimpleX Localizations/fr.xcloc/Localized Contents/fr.xliff +++ b/apps/ios/SimpleX Localizations/fr.xcloc/Localized Contents/fr.xliff @@ -144,6 +144,7 @@ %lld minutes + %lld minutes No comment provided by engineer. @@ -153,6 +154,7 @@ %lld seconds + %lld secondes No comment provided by engineer. @@ -550,6 +552,7 @@ Authentication cancelled + Authentification interrompue PIN entry @@ -659,6 +662,7 @@ Change Passcode + Modifier le code d'accès No comment provided by engineer. @@ -668,6 +672,7 @@ Change lock mode + Modifier le mode de verrouillage authentication reason @@ -677,6 +682,7 @@ Change passcode + Modifier le code d'accès authentication reason @@ -786,6 +792,7 @@ Compare file + Comparer le fichier server test step @@ -805,6 +812,7 @@ Confirm Passcode + Confirmer le code d'accès No comment provided by engineer. @@ -969,6 +977,7 @@ Create file + Créer un fichier server test step @@ -1008,6 +1017,7 @@ Current Passcode + Code d'accès actuel No comment provided by engineer. @@ -1195,6 +1205,7 @@ Delete file + Supprimer le fichier server test step @@ -1399,6 +1410,7 @@ Download file + Télécharger le fichier server test step @@ -1443,6 +1455,7 @@ Enable lock + Activer le verrouillage No comment provided by engineer. @@ -1502,6 +1515,7 @@ Enter Passcode + Entrer le code d'accès No comment provided by engineer. @@ -1646,6 +1660,7 @@ Error loading %@ servers + Erreur lors du chargement des serveurs %@ No comment provided by engineer. @@ -1675,6 +1690,7 @@ Error saving passcode + Erreur lors de la sauvegarde du code d'accès No comment provided by engineer. @@ -1784,6 +1800,7 @@ File transfer will be cancelled. If it's in progress it will be stoppped. + Le transfert de fichiers sera annulé. S'il est en cours, il sera interrompu. No comment provided by engineer. @@ -2053,6 +2070,7 @@ Immediately + Immédiatement No comment provided by engineer. @@ -2127,6 +2145,7 @@ Incorrect passcode + Code d'accès erroné PIN entry @@ -2253,6 +2272,7 @@ Nous allons ajouter une redondance des serveurs pour éviter la perte de message KeyChain error + Erreur du trousseau de clés No comment provided by engineer. @@ -2317,10 +2337,12 @@ Nous allons ajouter une redondance des serveurs pour éviter la perte de message Lock after + Verrouillage après No comment provided by engineer. Lock mode + Mode de verrouillage No comment provided by engineer. @@ -2495,6 +2517,7 @@ Nous allons ajouter une redondance des serveurs pour éviter la perte de message New Passcode + Nouveau code d'accès No comment provided by engineer. @@ -2539,6 +2562,7 @@ Nous allons ajouter une redondance des serveurs pour éviter la perte de message No app password + Pas de mot de passe pour l'app Authentication unavailable @@ -2592,6 +2616,7 @@ Nous allons ajouter une redondance des serveurs pour éviter la perte de message Off + Off No comment provided by engineer. @@ -2721,22 +2746,27 @@ Nous allons ajouter une redondance des serveurs pour éviter la perte de message Passcode + Code d'accès No comment provided by engineer. Passcode changed! + Code d'accès modifié ! No comment provided by engineer. Passcode entry + Saisie du code No comment provided by engineer. Passcode not changed! + Le code d'accès n'a pas été modifié ! No comment provided by engineer. Passcode set! + Code d'accès défini ! No comment provided by engineer. @@ -2811,6 +2841,7 @@ Nous allons ajouter une redondance des serveurs pour éviter la perte de message Please remember or store it securely - there is no way to recover a lost passcode! + N'oubliez pas de le mémoriser ou de le conserver en toute sécurité - il n'y a aucun moyen de récupérer un code d'accès perdu ! No comment provided by engineer. @@ -3280,6 +3311,7 @@ Nous allons ajouter une redondance des serveurs pour éviter la perte de message Server requires authorization to upload, check password + Le serveur requiert une autorisation pour uploader, vérifiez le mot de passe server test error @@ -3384,10 +3416,12 @@ Nous allons ajouter une redondance des serveurs pour éviter la perte de message SimpleX Lock mode + Mode de SimpleX Lock No comment provided by engineer. SimpleX Lock not enabled! + SimpleX Lock n'est pas activé ! No comment provided by engineer. @@ -3477,6 +3511,7 @@ Nous allons ajouter une redondance des serveurs pour éviter la perte de message Submit + Soumettre No comment provided by engineer. @@ -3491,6 +3526,7 @@ Nous allons ajouter une redondance des serveurs pour éviter la perte de message System authentication + Authentification du système No comment provided by engineer. @@ -3839,6 +3875,7 @@ Pour vous connecter, veuillez demander à votre contact de créer un autre lien Unlock app + Déverrouiller l'app authentication reason @@ -3893,6 +3930,7 @@ Pour vous connecter, veuillez demander à votre contact de créer un autre lien Upload file + Transférer le fichier server test step @@ -3962,10 +4000,12 @@ Pour vous connecter, veuillez demander à votre contact de créer un autre lien Video will be received when your contact completes uploading it. + La vidéo ne sera reçue que lorsque votre contact aura fini de la transférer. No comment provided by engineer. Video will be received when your contact is online, please wait or check later! + La vidéo ne sera reçue que lorsque votre contact sera en ligne. Veuillez patienter ou vérifier plus tard ! No comment provided by engineer. @@ -4010,6 +4050,7 @@ Pour vous connecter, veuillez demander à votre contact de créer un autre lien Waiting for video + En attente de la vidéo No comment provided by engineer. @@ -4146,6 +4187,7 @@ SimpleX Lock doit être activé. You can turn on SimpleX Lock via Settings. + Vous pouvez activer SimpleX Lock dans les Paramètres. No comment provided by engineer. diff --git a/apps/ios/SimpleX Localizations/it.xcloc/Localized Contents/it.xliff b/apps/ios/SimpleX Localizations/it.xcloc/Localized Contents/it.xliff index 61b7c5d7ea..dbd6245fcf 100644 --- a/apps/ios/SimpleX Localizations/it.xcloc/Localized Contents/it.xliff +++ b/apps/ios/SimpleX Localizations/it.xcloc/Localized Contents/it.xliff @@ -144,6 +144,7 @@ %lld minutes + %lld minuti No comment provided by engineer. @@ -153,6 +154,7 @@ %lld seconds + %lld secondi No comment provided by engineer. @@ -550,6 +552,7 @@ Authentication cancelled + Autenticazione annullata PIN entry @@ -659,6 +662,7 @@ Change Passcode + Cambia codice di accesso No comment provided by engineer. @@ -668,6 +672,7 @@ Change lock mode + Cambia modalità di blocco authentication reason @@ -677,6 +682,7 @@ Change passcode + Cambia codice di accesso authentication reason @@ -786,6 +792,7 @@ Compare file + Confronta file server test step @@ -805,6 +812,7 @@ Confirm Passcode + Conferma il codice di accesso No comment provided by engineer. @@ -969,6 +977,7 @@ Create file + Crea file server test step @@ -1008,6 +1017,7 @@ Current Passcode + Codice di accesso attuale No comment provided by engineer. @@ -1195,6 +1205,7 @@ Delete file + Elimina file server test step @@ -1399,6 +1410,7 @@ Download file + Scarica file server test step @@ -1443,6 +1455,7 @@ Enable lock + Attiva blocco No comment provided by engineer. @@ -1502,6 +1515,7 @@ Enter Passcode + Inserisci il codice di accesso No comment provided by engineer. @@ -1646,6 +1660,7 @@ Error loading %@ servers + Errore nel caricamento dei server %@ No comment provided by engineer. @@ -1675,6 +1690,7 @@ Error saving passcode + Errore nel salvataggio del codice di accesso No comment provided by engineer. @@ -2054,6 +2070,7 @@ Immediately + Immediatamente No comment provided by engineer. @@ -2128,6 +2145,7 @@ Incorrect passcode + Codice di accesso errato PIN entry @@ -2254,6 +2272,7 @@ Aggiungeremo la ridondanza del server per prevenire la perdita di messaggi. KeyChain error + Errore del portachiavi No comment provided by engineer. @@ -2318,10 +2337,12 @@ Aggiungeremo la ridondanza del server per prevenire la perdita di messaggi. Lock after + Blocca dopo No comment provided by engineer. Lock mode + Modalità di blocco No comment provided by engineer. @@ -2496,6 +2517,7 @@ Aggiungeremo la ridondanza del server per prevenire la perdita di messaggi. New Passcode + Nuovo codice di accesso No comment provided by engineer. @@ -2540,6 +2562,7 @@ Aggiungeremo la ridondanza del server per prevenire la perdita di messaggi. No app password + Nessuna password dell'app Authentication unavailable @@ -2593,6 +2616,7 @@ Aggiungeremo la ridondanza del server per prevenire la perdita di messaggi. Off + Off No comment provided by engineer. @@ -2722,22 +2746,27 @@ Aggiungeremo la ridondanza del server per prevenire la perdita di messaggi. Passcode + Codice di accesso No comment provided by engineer. Passcode changed! + Codice di accesso cambiato! No comment provided by engineer. Passcode entry + Inserimento del codice di accesso No comment provided by engineer. Passcode not changed! + Codice di accesso non cambiato! No comment provided by engineer. Passcode set! + Codice di accesso impostato! No comment provided by engineer. @@ -2812,6 +2841,7 @@ Aggiungeremo la ridondanza del server per prevenire la perdita di messaggi. Please remember or store it securely - there is no way to recover a lost passcode! + Ricordalo o conservalo in modo sicuro: non c'è modo di recuperare un codice di accesso perso! No comment provided by engineer. @@ -3281,6 +3311,7 @@ Aggiungeremo la ridondanza del server per prevenire la perdita di messaggi. Server requires authorization to upload, check password + Il server richiede l'autorizzazione per il caricamento, controllare la password server test error @@ -3385,10 +3416,12 @@ Aggiungeremo la ridondanza del server per prevenire la perdita di messaggi. SimpleX Lock mode + Modalità di SimpleX Lock No comment provided by engineer. SimpleX Lock not enabled! + SimpleX Lock non attivato! No comment provided by engineer. @@ -3478,6 +3511,7 @@ Aggiungeremo la ridondanza del server per prevenire la perdita di messaggi. Submit + Invia No comment provided by engineer. @@ -3492,6 +3526,7 @@ Aggiungeremo la ridondanza del server per prevenire la perdita di messaggi. System authentication + Autenticazione di sistema No comment provided by engineer. @@ -3840,6 +3875,7 @@ Per connetterti, chiedi al tuo contatto di creare un altro link di connessione e Unlock app + Sblocca l'app authentication reason @@ -3894,6 +3930,7 @@ Per connetterti, chiedi al tuo contatto di creare un altro link di connessione e Upload file + Invia file server test step @@ -3963,10 +4000,12 @@ Per connetterti, chiedi al tuo contatto di creare un altro link di connessione e Video will be received when your contact completes uploading it. + Il video verrà ricevuto quando il tuo contatto completerà l'invio. No comment provided by engineer. Video will be received when your contact is online, please wait or check later! + Il video verrà ricevuto quando il tuo contatto sarà in linea, attendi o controlla più tardi! No comment provided by engineer. @@ -4011,6 +4050,7 @@ Per connetterti, chiedi al tuo contatto di creare un altro link di connessione e Waiting for video + In attesa del video No comment provided by engineer. @@ -4147,6 +4187,7 @@ SimpleX Lock deve essere attivato. You can turn on SimpleX Lock via Settings. + Puoi attivare SimpleX Lock tramite le impostazioni. No comment provided by engineer. diff --git a/apps/ios/SimpleX Localizations/nl.xcloc/Localized Contents/nl.xliff b/apps/ios/SimpleX Localizations/nl.xcloc/Localized Contents/nl.xliff index 81b58cc34e..8f00cdfa47 100644 --- a/apps/ios/SimpleX Localizations/nl.xcloc/Localized Contents/nl.xliff +++ b/apps/ios/SimpleX Localizations/nl.xcloc/Localized Contents/nl.xliff @@ -144,6 +144,7 @@ %lld minutes + %lld minuten No comment provided by engineer. @@ -153,6 +154,7 @@ %lld seconds + %lld seconden No comment provided by engineer. @@ -550,6 +552,7 @@ Authentication cancelled + Verificatie geannuleerd PIN entry @@ -654,11 +657,12 @@ Change - Wijziging + Veranderen No comment provided by engineer. Change Passcode + Toegangscode wijzigen No comment provided by engineer. @@ -668,6 +672,7 @@ Change lock mode + Wijzig de vergrendelings modus authentication reason @@ -677,6 +682,7 @@ Change passcode + Toegangscode wijzigen authentication reason @@ -786,6 +792,7 @@ Compare file + Bestand vergelijken server test step @@ -805,6 +812,7 @@ Confirm Passcode + Bevestig toegangscode No comment provided by engineer. @@ -969,6 +977,7 @@ Create file + Bestand maken server test step @@ -1008,6 +1017,7 @@ Current Passcode + Huidige toegangscode No comment provided by engineer. @@ -1195,6 +1205,7 @@ Delete file + Verwijder bestand server test step @@ -1399,6 +1410,7 @@ Download file + Download bestand server test step @@ -1443,6 +1455,7 @@ Enable lock + Vergrendeling inschakelen No comment provided by engineer. @@ -1502,6 +1515,7 @@ Enter Passcode + Voer toegangscode in No comment provided by engineer. @@ -1646,6 +1660,7 @@ Error loading %@ servers + Fout bij het laden van %@ servers No comment provided by engineer. @@ -1675,6 +1690,7 @@ Error saving passcode + Fout bij opslaan van toegangscode No comment provided by engineer. @@ -2054,6 +2070,7 @@ Immediately + Onmiddellijk No comment provided by engineer. @@ -2128,6 +2145,7 @@ Incorrect passcode + Onjuiste toegangscode PIN entry @@ -2254,6 +2272,7 @@ We zullen serverredundantie toevoegen om verloren berichten te voorkomen. KeyChain error + Keychain fout No comment provided by engineer. @@ -2318,10 +2337,12 @@ We zullen serverredundantie toevoegen om verloren berichten te voorkomen. Lock after + Vergrendelen na No comment provided by engineer. Lock mode + Vergrendeling modus No comment provided by engineer. @@ -2496,6 +2517,7 @@ We zullen serverredundantie toevoegen om verloren berichten te voorkomen. New Passcode + Nieuwe toegangscode No comment provided by engineer. @@ -2540,6 +2562,7 @@ We zullen serverredundantie toevoegen om verloren berichten te voorkomen. No app password + Geen app wachtwoord Authentication unavailable @@ -2593,6 +2616,7 @@ We zullen serverredundantie toevoegen om verloren berichten te voorkomen. Off + Uit No comment provided by engineer. @@ -2722,22 +2746,27 @@ We zullen serverredundantie toevoegen om verloren berichten te voorkomen. Passcode + Toegangscode No comment provided by engineer. Passcode changed! + Toegangscode gewijzigd! No comment provided by engineer. Passcode entry + Toegangscode invoer No comment provided by engineer. Passcode not changed! + Toegangscode niet gewijzigd! No comment provided by engineer. Passcode set! + Toegangscode ingesteld! No comment provided by engineer. @@ -2812,6 +2841,7 @@ We zullen serverredundantie toevoegen om verloren berichten te voorkomen. Please remember or store it securely - there is no way to recover a lost passcode! + Onthoud het of bewaar het veilig - er is geen manier om een verloren toegangscode te herstellen! No comment provided by engineer. @@ -3281,6 +3311,7 @@ We zullen serverredundantie toevoegen om verloren berichten te voorkomen. Server requires authorization to upload, check password + Server vereist autorisatie om te uploaden, wachtwoord controleren server test error @@ -3385,10 +3416,12 @@ We zullen serverredundantie toevoegen om verloren berichten te voorkomen. SimpleX Lock mode + SimpleX Vergrendel modus No comment provided by engineer. SimpleX Lock not enabled! + SimpleX vergrendeling niet ingeschakeld! No comment provided by engineer. @@ -3478,6 +3511,7 @@ We zullen serverredundantie toevoegen om verloren berichten te voorkomen. Submit + Indienen No comment provided by engineer. @@ -3492,6 +3526,7 @@ We zullen serverredundantie toevoegen om verloren berichten te voorkomen. System authentication + Systeem authenticatie No comment provided by engineer. @@ -3840,6 +3875,7 @@ Om verbinding te maken, vraagt u uw contactpersoon om een andere verbinding link Unlock app + Ontgrendel app authentication reason @@ -3894,6 +3930,7 @@ Om verbinding te maken, vraagt u uw contactpersoon om een andere verbinding link Upload file + Upload bestand server test step @@ -3963,10 +4000,12 @@ Om verbinding te maken, vraagt u uw contactpersoon om een andere verbinding link Video will be received when your contact completes uploading it. + De video wordt ontvangen wanneer uw contactpersoon het uploaden heeft voltooid. No comment provided by engineer. Video will be received when your contact is online, please wait or check later! + De video wordt ontvangen wanneer uw contact online is, even geduld a.u.b. of kijk later! No comment provided by engineer. @@ -4011,6 +4050,7 @@ Om verbinding te maken, vraagt u uw contactpersoon om een andere verbinding link Waiting for video + Wachten op video No comment provided by engineer. @@ -4147,6 +4187,7 @@ SimpleX Lock moet ingeschakeld zijn. You can turn on SimpleX Lock via Settings. + Je kunt SimpleX Vergrendeling aanzetten via Instellingen. No comment provided by engineer. diff --git a/apps/ios/SimpleX Localizations/pl.xcloc/Localized Contents/pl.xliff b/apps/ios/SimpleX Localizations/pl.xcloc/Localized Contents/pl.xliff index ee7cd38aa1..5e0a011a76 100644 --- a/apps/ios/SimpleX Localizations/pl.xcloc/Localized Contents/pl.xliff +++ b/apps/ios/SimpleX Localizations/pl.xcloc/Localized Contents/pl.xliff @@ -4845,6 +4845,251 @@ Serwery SimpleX nie mogą zobaczyć Twojego profilu. \~strajk~ No comment provided by engineer. + + Send videos and files via XFTP + Wysyłaj filmy i pliki przez XFTP + No comment provided by engineer. + + + %@ servers + %@ serwery + No comment provided by engineer. + + + %lld minutes + %lld minut + No comment provided by engineer. + + + %lld seconds + %lld sekund + No comment provided by engineer. + + + Authentication cancelled + Uwierzytelnianie anulowane + PIN entry + + + Change Passcode + Zmień kod dostępu + No comment provided by engineer. + + + Change lock mode + Zmień tryb blokady + authentication reason + + + Change passcode + Zmień pin + authentication reason + + + Compare file + Porównaj plik + server test step + + + Confirm Passcode + Potwierdź Pin + No comment provided by engineer. + + + Create file + Utwórz plik + server test step + + + Current Passcode + Aktualny Pin + No comment provided by engineer. + + + Delete file + Usuń plik + server test step + + + Download file + Pobierz plik + server test step + + + Enable lock + Włącz blokadę + No comment provided by engineer. + + + Enter Passcode + Wprowadź Pin + No comment provided by engineer. + + + Error loading %@ servers + Błąd ładowania %@ serwerów + No comment provided by engineer. + + + Error saving %@ servers + Błąd zapisu %@ serwerów + No comment provided by engineer. + + + Error saving passcode + Błąd zapisu pinu + No comment provided by engineer. + + + Immediately + Natychmiast + No comment provided by engineer. + + + KeyChain error + Błąd pęku kluczy + No comment provided by engineer. + + + Lock after + Zablokuj po + No comment provided by engineer. + + + Lock mode + Tryb blokady + No comment provided by engineer. + + + Make sure %@ server addresses are in correct format, line separated and are not duplicated (%@). + Upewnij się, że adresy serwerów %@ są w poprawnym formacie, rozdzielone liniami i nie są zduplikowane (%@). + No comment provided by engineer. + + + Messages & files + Wiadomości i pliki + No comment provided by engineer. + + + New Passcode + Nowy Pin + No comment provided by engineer. + + + No app password + Brak hasła aplikacji + Authentication unavailable + + + Off + Wyłączony + No comment provided by engineer. + + + Passcode + Pin + No comment provided by engineer. + + + Passcode changed! + Pin zmieniony! + No comment provided by engineer. + + + Passcode entry + Wpis pinu + No comment provided by engineer. + + + Passcode not changed! + Pin nie został zmieniony! + No comment provided by engineer. + + + Passcode set! + Pin ustawiony! + No comment provided by engineer. + + + Please remember or store it securely - there is no way to recover a lost passcode! + Prosimy o jego zapamiętanie lub bezpieczne przechowywanie - nie ma możliwości odzyskania utraconego pinu! + No comment provided by engineer. + + + Server requires authorization to upload, check password + Serwer wymaga autoryzacji do przesłania, sprawdź hasło + server test error + + + SimpleX Lock mode + Tryb blokady SimpleX + No comment provided by engineer. + + + SimpleX Lock not enabled! + Blokada SimpleX wyłączona! + No comment provided by engineer. + + + Submit + Zatwierdź + No comment provided by engineer. + + + System authentication + Uwierzytelnianie systemu + No comment provided by engineer. + + + Unlock app + Odblokuj aplikację + authentication reason + + + Upload file + Prześlij plik + server test step + + + Video will be received when your contact completes uploading it. + Film zostanie odebrany, gdy kontakt zakończy jego przesyłanie. + No comment provided by engineer. + + + Video will be received when your contact is online, please wait or check later! + Film zostanie odebrany, gdy kontakt będzie online, poczekaj lub sprawdź później! + No comment provided by engineer. + + + Waiting for video + Oczekiwanie na film + No comment provided by engineer. + + + XFTP servers + Serwery XFTP + No comment provided by engineer. + + + You can turn on SimpleX Lock via Settings. + Możesz włączyć blokadę SimpleX poprzez Ustawienia. + No comment provided by engineer. + + + Your %@ servers + Twoje serwery %@ + No comment provided by engineer. + + + Your XFTP servers + Twoje serwery XFTP + No comment provided by engineer. + + + Incorrect passcode + Nieprawidłowy pin + PIN entry + diff --git a/apps/ios/SimpleX Localizations/zh-Hans.xcloc/Localized Contents/zh-Hans.xliff b/apps/ios/SimpleX Localizations/zh-Hans.xcloc/Localized Contents/zh-Hans.xliff index 09ec544522..a56def180b 100644 --- a/apps/ios/SimpleX Localizations/zh-Hans.xcloc/Localized Contents/zh-Hans.xliff +++ b/apps/ios/SimpleX Localizations/zh-Hans.xcloc/Localized Contents/zh-Hans.xliff @@ -144,6 +144,7 @@ %lld minutes + %lld 分钟 No comment provided by engineer. @@ -153,6 +154,7 @@ %lld seconds + %lld 秒 No comment provided by engineer. @@ -550,11 +552,12 @@ Authentication cancelled + 身份验证已取消 PIN entry Authentication failed - 认证失败 + 身份认证失败 No comment provided by engineer. @@ -564,7 +567,7 @@ Authentication unavailable - 认证不可用 + 身份认证不可用 No comment provided by engineer. @@ -659,6 +662,7 @@ Change Passcode + 更改密码 No comment provided by engineer. @@ -668,6 +672,7 @@ Change lock mode + 更改锁定模式 authentication reason @@ -677,6 +682,7 @@ Change passcode + 更改密码 authentication reason @@ -786,6 +792,7 @@ Compare file + 对比文件 server test step @@ -805,6 +812,7 @@ Confirm Passcode + 确认密码 No comment provided by engineer. @@ -969,6 +977,7 @@ Create file + 创建文件 server test step @@ -1008,6 +1017,7 @@ Current Passcode + 当前密码 No comment provided by engineer. @@ -1195,6 +1205,7 @@ Delete file + 删除文件 server test step @@ -1399,6 +1410,7 @@ Download file + 下载文件 server test step @@ -1443,6 +1455,7 @@ Enable lock + 启用锁定 No comment provided by engineer. @@ -1502,6 +1515,7 @@ Enter Passcode + 输入密码 No comment provided by engineer. @@ -1646,6 +1660,7 @@ Error loading %@ servers + 加载 %@ 服务器错误 No comment provided by engineer. @@ -1675,6 +1690,7 @@ Error saving passcode + 保存密码错误 No comment provided by engineer. @@ -2054,6 +2070,7 @@ Immediately + 立即 No comment provided by engineer. @@ -2128,6 +2145,7 @@ Incorrect passcode + 密码错误 PIN entry @@ -2254,6 +2272,7 @@ We will be adding server redundancy to prevent lost messages. KeyChain error + 钥匙串错误 No comment provided by engineer. @@ -2318,10 +2337,12 @@ We will be adding server redundancy to prevent lost messages. Lock after + 在此后锁定 No comment provided by engineer. Lock mode + 锁定模式 No comment provided by engineer. @@ -2496,6 +2517,7 @@ We will be adding server redundancy to prevent lost messages. New Passcode + 新密码 No comment provided by engineer. @@ -2540,6 +2562,7 @@ We will be adding server redundancy to prevent lost messages. No app password + 没有应用程序密码 Authentication unavailable @@ -2593,6 +2616,7 @@ We will be adding server redundancy to prevent lost messages. Off + 关闭 No comment provided by engineer. @@ -2722,22 +2746,27 @@ We will be adding server redundancy to prevent lost messages. Passcode + 密码 No comment provided by engineer. Passcode changed! + 密码已更改! No comment provided by engineer. Passcode entry + 密码输入 No comment provided by engineer. Passcode not changed! + 密码未更改! No comment provided by engineer. Passcode set! + 密码已设置! No comment provided by engineer. @@ -2812,6 +2841,7 @@ We will be adding server redundancy to prevent lost messages. Please remember or store it securely - there is no way to recover a lost passcode! + 请牢记或妥善保管——丢失的密码将无法恢复! No comment provided by engineer. @@ -3281,6 +3311,7 @@ We will be adding server redundancy to prevent lost messages. Server requires authorization to upload, check password + 服务器需要授权来上传,检查密码 server test error @@ -3385,10 +3416,12 @@ We will be adding server redundancy to prevent lost messages. SimpleX Lock mode + SimpleX 锁定模式 No comment provided by engineer. SimpleX Lock not enabled! + 未启用 SimpleX 锁定! No comment provided by engineer. @@ -3478,6 +3511,7 @@ We will be adding server redundancy to prevent lost messages. Submit + 提交 No comment provided by engineer. @@ -3492,6 +3526,7 @@ We will be adding server redundancy to prevent lost messages. System authentication + 系统认证 No comment provided by engineer. @@ -3840,6 +3875,7 @@ To connect, please ask your contact to create another connection link and check Unlock app + 解锁应用程序 authentication reason @@ -3894,6 +3930,7 @@ To connect, please ask your contact to create another connection link and check Upload file + 上传文件 server test step @@ -3963,10 +4000,12 @@ To connect, please ask your contact to create another connection link and check Video will be received when your contact completes uploading it. + 视频将在您的联系人完成上传后收到。 No comment provided by engineer. Video will be received when your contact is online, please wait or check later! + 视频将在您的联系人在线时收到,请稍等或稍后查看! No comment provided by engineer. @@ -4011,6 +4050,7 @@ To connect, please ask your contact to create another connection link and check Waiting for video + 等待视频中 No comment provided by engineer. @@ -4147,6 +4187,7 @@ SimpleX Lock must be enabled. You can turn on SimpleX Lock via Settings. + 您可以通过设置开启 SimpleX 锁定。 No comment provided by engineer. diff --git a/apps/ios/cs.lproj/Localizable.strings b/apps/ios/cs.lproj/Localizable.strings index 83e6a86cc3..75132b2764 100644 --- a/apps/ios/cs.lproj/Localizable.strings +++ b/apps/ios/cs.lproj/Localizable.strings @@ -2502,7 +2502,7 @@ /* No comment provided by engineer. */ "Unless your contact deleted the connection or this link was already used, it might be a bug - please report it.\nTo connect, please ask your contact to create another connection link and check that you have a stable network connection." = "Pokud váš kontakt neodstranil připojení nebo tento odkaz již nebyl použit, může se jednat o chybu – nahlaste ji.\nChcete-li se připojit, požádejte svůj kontakt o vytvoření dalšího odkazu na připojení a zkontrolujte, zda máte stabilní připojení k síti."; -/* authentication reason */ +/* No comment provided by engineer. */ "Unlock" = "Odemknout"; /* No comment provided by engineer. */ diff --git a/apps/ios/de.lproj/Localizable.strings b/apps/ios/de.lproj/Localizable.strings index 6071cc50f5..12ea011e46 100644 --- a/apps/ios/de.lproj/Localizable.strings +++ b/apps/ios/de.lproj/Localizable.strings @@ -2502,7 +2502,7 @@ /* No comment provided by engineer. */ "Unless your contact deleted the connection or this link was already used, it might be a bug - please report it.\nTo connect, please ask your contact to create another connection link and check that you have a stable network connection." = "Entweder hat Ihr Kontakt die Verbindung gelöscht, oder dieser Link wurde bereits verwendet, es könnte sich um einen Fehler handeln - Bitte melden Sie es uns.\nBitten Sie Ihren Kontakt darum einen weiteren Verbindungs-Link zu erzeugen, um sich neu verbinden zu können und stellen Sie sicher, dass Sie eine stabile Netzwerk-Verbindung haben."; -/* authentication reason */ +/* No comment provided by engineer. */ "Unlock" = "Entsperren"; /* No comment provided by engineer. */ diff --git a/apps/ios/es.lproj/Localizable.strings b/apps/ios/es.lproj/Localizable.strings index 9018def7fa..0a3d0dc0b9 100644 --- a/apps/ios/es.lproj/Localizable.strings +++ b/apps/ios/es.lproj/Localizable.strings @@ -142,9 +142,15 @@ /* No comment provided by engineer. */ "%lld members" = "%lld miembros"; +/* No comment provided by engineer. */ +"%lld minutes" = "%lld minutos"; + /* No comment provided by engineer. */ "%lld second(s)" = "%lld segundo(s)"; +/* No comment provided by engineer. */ +"%lld seconds" = "%lld segundos"; + /* No comment provided by engineer. */ "%lldd" = "%lldd"; @@ -350,6 +356,9 @@ /* No comment provided by engineer. */ "audio call (not e2e encrypted)" = "llamada de audio (sin cifrado e2e)"; +/* PIN entry */ +"Authentication cancelled" = "Autenticación cancelada"; + /* No comment provided by engineer. */ "Authentication failed" = "Autenticación fallida"; @@ -437,9 +446,18 @@ /* No comment provided by engineer. */ "Change database passphrase?" = "¿Cambiar contraseña de la base de datos?"; +/* authentication reason */ +"Change lock mode" = "Cambiar el modo de bloqueo"; + /* No comment provided by engineer. */ "Change member role?" = "¿Cambiar el rol del miembro?"; +/* authentication reason */ +"Change passcode" = "Cambiar contraseña"; + +/* No comment provided by engineer. */ +"Change Passcode" = "Cambiar contraseña"; + /* No comment provided by engineer. */ "Change receiving address" = "Cambiar la dirección de recepción"; @@ -521,6 +539,9 @@ /* No comment provided by engineer. */ "Colors" = "Colores"; +/* server test step */ +"Compare file" = "Comparar archivo"; + /* No comment provided by engineer. */ "Compare security codes with your contacts." = "Compare los códigos de seguridad con sus contactos."; @@ -539,6 +560,9 @@ /* No comment provided by engineer. */ "Confirm new passphrase…" = "Confirme nueva contraseña…"; +/* No comment provided by engineer. */ +"Confirm Passcode" = "Confirmar contraseña"; + /* No comment provided by engineer. */ "Confirm password" = "Confirmar contraseña"; @@ -668,6 +692,9 @@ /* No comment provided by engineer. */ "Create address" = "Crear dirección"; +/* server test step */ +"Create file" = "Crear archivo"; + /* No comment provided by engineer. */ "Create group link" = "Crear enlace de grupo"; @@ -692,6 +719,9 @@ /* No comment provided by engineer. */ "creator" = "creador"; +/* No comment provided by engineer. */ +"Current Passcode" = "Contraseña actual"; + /* No comment provided by engineer. */ "Current passphrase…" = "Contraseña actual…"; @@ -732,7 +762,7 @@ "Database passphrase" = "Contraseña de la base de datos"; /* No comment provided by engineer. */ -"Database passphrase & export" = "Base de datos\ny Contraseña"; +"Database passphrase & export" = "Base de datos y contraseña"; /* No comment provided by engineer. */ "Database passphrase is different from saved in the keychain." = "La contraseña es distinta a la almacenada en Keychain."; @@ -803,6 +833,9 @@ /* No comment provided by engineer. */ "Delete database" = "Eliminar base de datos"; +/* server test step */ +"Delete file" = "Eliminar archivo"; + /* No comment provided by engineer. */ "Delete files and media?" = "Eliminar archivos y multimedia?"; @@ -935,6 +968,9 @@ /* No comment provided by engineer. */ "Downgrade and open chat" = "Degradar y abrir Chat"; +/* server test step */ +"Download file" = "Descargar archivo"; + /* No comment provided by engineer. */ "Duplicate display name!" = "¡Nombre mostrado duplicado!"; @@ -959,6 +995,9 @@ /* No comment provided by engineer. */ "Enable instant notifications?" = "¿Activar notificación instantánea?"; +/* No comment provided by engineer. */ +"Enable lock" = "Activar bloqueo"; + /* No comment provided by engineer. */ "Enable notifications" = "Activar notificaciones"; @@ -1016,6 +1055,9 @@ /* No comment provided by engineer. */ "Enter correct passphrase." = "Introduce la contraseña correcta."; +/* No comment provided by engineer. */ +"Enter Passcode" = "Introducir contraseña"; + /* No comment provided by engineer. */ "Enter passphrase…" = "Introduce la contraseña…"; @@ -1100,6 +1142,9 @@ /* No comment provided by engineer. */ "Error joining group" = "Error uniéndose al grupo"; +/* No comment provided by engineer. */ +"Error loading %@ servers" = "Error al cargar servidores %@"; + /* No comment provided by engineer. */ "Error receiving file" = "Error recibiendo archivo"; @@ -1115,6 +1160,9 @@ /* No comment provided by engineer. */ "Error saving ICE servers" = "Error guardando servidores ICE"; +/* No comment provided by engineer. */ +"Error saving passcode" = "Error al guardar contraseña"; + /* No comment provided by engineer. */ "Error saving passphrase to keychain" = "Error guardando contraseña en Keychain"; @@ -1346,6 +1394,9 @@ /* No comment provided by engineer. */ "Image will be received when your contact is online, please wait or check later!" = "La imagen se recibirá cuando tu contacto esté en línea, por favor espera o compruébalo más tarde."; +/* No comment provided by engineer. */ +"Immediately" = "Inmediatamente"; + /* No comment provided by engineer. */ "Immune to spam and abuse" = "Inmune a spam y abuso"; @@ -1397,6 +1448,9 @@ /* No comment provided by engineer. */ "Incompatible database version" = "Versión de base de datos incompatible"; +/* PIN entry */ +"Incorrect passcode" = "Contraseña incorrecta"; + /* No comment provided by engineer. */ "Incorrect security code!" = "¡Código de seguridad incorrecto!"; @@ -1505,6 +1559,9 @@ /* No comment provided by engineer. */ "Keychain error" = "Error en Keychain"; +/* No comment provided by engineer. */ +"KeyChain error" = "Error en Keychain"; + /* No comment provided by engineer. */ "Large file!" = "¡Archivo grande!"; @@ -1541,6 +1598,12 @@ /* No comment provided by engineer. */ "Local profile data only" = "Sólo datos del perfil local"; +/* No comment provided by engineer. */ +"Lock after" = "Bloquear después de"; + +/* No comment provided by engineer. */ +"Lock mode" = "Modo de bloqueo"; + /* No comment provided by engineer. */ "Make a private connection" = "Establecer una conexión privada"; @@ -1688,6 +1751,9 @@ /* notification */ "New message" = "mensaje nuevo"; +/* No comment provided by engineer. */ +"New Passcode" = "Nueva contraseña"; + /* No comment provided by engineer. */ "New passphrase…" = "Contraseña nueva…"; @@ -1697,6 +1763,9 @@ /* No comment provided by engineer. */ "No" = "No"; +/* Authentication unavailable */ +"No app password" = "Sin contraseña de la aplicación"; + /* No comment provided by engineer. */ "No contacts selected" = "Ningún contacto seleccionado"; @@ -1734,6 +1803,9 @@ group pref value */ "off" = "apagado"; +/* No comment provided by engineer. */ +"Off" = "Apagado"; + /* No comment provided by engineer. */ "Off (Local)" = "Apagado (Local)"; @@ -1818,6 +1890,21 @@ /* member role */ "owner" = "propietario"; +/* No comment provided by engineer. */ +"Passcode" = "Contraseña"; + +/* No comment provided by engineer. */ +"Passcode changed!" = "¡Contraseña cambiada!"; + +/* No comment provided by engineer. */ +"Passcode entry" = "Entrada de contraseña"; + +/* No comment provided by engineer. */ +"Passcode not changed!" = "¡Contraseña no cambiada!"; + +/* No comment provided by engineer. */ +"Passcode set!" = "¡Contraseña guardada!"; + /* No comment provided by engineer. */ "Password to show" = "Contraseña para hacerlo visible"; @@ -1869,6 +1956,9 @@ /* No comment provided by engineer. */ "Please enter the previous password after restoring database backup. This action can not be undone." = "Introduce la contraseña anterior después de restaurar la copia de seguridad de la base de datos. Esta acción no se puede deshacer."; +/* No comment provided by engineer. */ +"Please remember or store it securely - there is no way to recover a lost passcode!" = "Por favor, recuerda y guarda la contraseña en un lugar seguro. ¡No hay manera de recuperar una contraseña perdida!"; + /* No comment provided by engineer. */ "Please restart the app and migrate the database to enable push notifications." = "Reinicia la aplicación y migra la base de datos para activar las notificaciones automáticas."; @@ -2169,6 +2259,9 @@ /* server test error */ "Server requires authorization to create queues, check password" = "El servidor requiere autorización para crear colas, comprueba la contraseña"; +/* server test error */ +"Server requires authorization to upload, check password" = "El servidor requiere autorización para subir, comprueba la contraseña"; + /* No comment provided by engineer. */ "Server test failed!" = "¡Error en prueba del servidor!"; @@ -2241,6 +2334,12 @@ /* No comment provided by engineer. */ "SimpleX Lock" = "Bloqueo SimpleX"; +/* No comment provided by engineer. */ +"SimpleX Lock mode" = "Modo Bloqueo SimpleX"; + +/* No comment provided by engineer. */ +"SimpleX Lock not enabled!" = "¡Bloqueo SimpleX no activado!"; + /* No comment provided by engineer. */ "SimpleX Lock turned on" = "Bloqueo SimpleX activado"; @@ -2289,12 +2388,18 @@ /* No comment provided by engineer. */ "strike" = "tachado"; +/* No comment provided by engineer. */ +"Submit" = "Enviar"; + /* No comment provided by engineer. */ "Support SimpleX Chat" = "Soporte SimpleX Chat"; /* No comment provided by engineer. */ "System" = "Sistema"; +/* No comment provided by engineer. */ +"System authentication" = "Autenticación del sistema"; + /* No comment provided by engineer. */ "Take picture" = "Tomar foto"; @@ -2344,7 +2449,7 @@ "Thanks to the users – [contribute via Weblate](https://github.com/simplex-chat/simplex-chat/tree/stable#translate-the-apps)!" = "Gracias a los usuarios: [contribuye vía Weblate](https://github.com/simplex-chat/simplex-chat/tree/stable#traducir-el-aplicaciones)!"; /* No comment provided by engineer. */ -"Thanks to the users – contribute via Weblate!" = "Gracias a los usuarios: ¡contribuye a través de Weblate!"; +"Thanks to the users – contribute via Weblate!" = "Agradecimientos a los usuarios. ¡Contribuye a través de Weblate!"; /* No comment provided by engineer. */ "The 1st platform without any user identifiers – private by design." = "La primera plataforma sin identificadores de usuario: diseñada para la privacidad."; @@ -2365,7 +2470,7 @@ "The created archive is available via app Settings / Database / Old database archive." = "El archivo creado está disponible a través de Configuración / Base de datos / Archivo de base de datos antigua."; /* No comment provided by engineer. */ -"The group is fully decentralized – it is visible only to the members." = "El grupo está totalmente descentralizado: sólo es visible para los miembros."; +"The group is fully decentralized – it is visible only to the members." = "El grupo está totalmente descentralizado y sólo es visible para los miembros."; /* No comment provided by engineer. */ "The message will be deleted for all members." = "El mensaje se eliminará para todos los miembros."; @@ -2502,9 +2607,12 @@ /* No comment provided by engineer. */ "Unless your contact deleted the connection or this link was already used, it might be a bug - please report it.\nTo connect, please ask your contact to create another connection link and check that you have a stable network connection." = "A menos que tu contacto haya eliminado la conexión o\nque este enlace ya se haya utilizado, podría tratarse de un error. Por favor, notifícalo.\nPara conectarte, pide a tu contacto que cree otro enlace de conexión y comprueba que tienes buena conexión de red."; -/* authentication reason */ +/* No comment provided by engineer. */ "Unlock" = "Desbloquear"; +/* authentication reason */ +"Unlock app" = "Desbloquear aplicación"; + /* No comment provided by engineer. */ "Unmute" = "Activar audio"; @@ -2538,6 +2646,9 @@ /* No comment provided by engineer. */ "Upgrade and open chat" = "Actualizar y abrir Chat"; +/* server test step */ +"Upload file" = "Subir archivo"; + /* No comment provided by engineer. */ "Use .onion hosts" = "Usar hosts .onion"; @@ -2598,6 +2709,12 @@ /* No comment provided by engineer. */ "video call (not e2e encrypted)" = "videollamada (sin cifrado e2e)"; +/* No comment provided by engineer. */ +"Video will be received when your contact completes uploading it." = "El video se recibirá cuando tu contacto termine de subirlo."; + +/* No comment provided by engineer. */ +"Video will be received when your contact is online, please wait or check later!" = "El vídeo se recibirá cuando tu contacto esté en línea, por favor espera o compruébalo más tarde."; + /* No comment provided by engineer. */ "View security code" = "Ver código de seguridad"; @@ -2628,6 +2745,9 @@ /* No comment provided by engineer. */ "Waiting for image" = "Esperando imagen"; +/* No comment provided by engineer. */ +"Waiting for video" = "Esperando el vídeo"; + /* No comment provided by engineer. */ "wants to connect to you!" = "¡quiere contactar contigo!"; @@ -2716,7 +2836,10 @@ "You can share your address as a link or as a QR code - anybody will be able to connect to you. You won't lose your contacts if you later delete it." = "Puedes compartir tu dirección como enlace o como código QR: cualquiera podrá conectarse contigo. Si lo eliminas más tarde tus contactos no se perderán."; /* No comment provided by engineer. */ -"You can start chat via app Settings / Database or by restarting the app" = "Puede iniciar Chat a través de la Configuración / base de datos de la aplicación o reiniciando la aplicación"; +"You can start chat via app Settings / Database or by restarting the app" = "Puede iniciar Chat a través de la Configuración / Base de datos de la aplicación o reiniciando la aplicación"; + +/* No comment provided by engineer. */ +"You can turn on SimpleX Lock via Settings." = "Puedes activar el bloqueo de SimpleX a través de Configuración."; /* No comment provided by engineer. */ "You can use markdown to format messages:" = "Puedes usar sintaxis markdown para dar formato a los mensajes:"; diff --git a/apps/ios/fr.lproj/Localizable.strings b/apps/ios/fr.lproj/Localizable.strings index 02e64bff94..1b86793330 100644 --- a/apps/ios/fr.lproj/Localizable.strings +++ b/apps/ios/fr.lproj/Localizable.strings @@ -142,9 +142,15 @@ /* No comment provided by engineer. */ "%lld members" = "%lld membres"; +/* No comment provided by engineer. */ +"%lld minutes" = "%lld minutes"; + /* No comment provided by engineer. */ "%lld second(s)" = "%lld seconde·s"; +/* No comment provided by engineer. */ +"%lld seconds" = "%lld secondes"; + /* No comment provided by engineer. */ "%lldd" = "%lldj"; @@ -350,6 +356,9 @@ /* No comment provided by engineer. */ "audio call (not e2e encrypted)" = "appel audio (sans chiffrement)"; +/* PIN entry */ +"Authentication cancelled" = "Authentification interrompue"; + /* No comment provided by engineer. */ "Authentication failed" = "Échec de l'authentification"; @@ -437,9 +446,18 @@ /* No comment provided by engineer. */ "Change database passphrase?" = "Changer la phrase secrète de la base de données ?"; +/* authentication reason */ +"Change lock mode" = "Modifier le mode de verrouillage"; + /* No comment provided by engineer. */ "Change member role?" = "Changer le rôle du membre ?"; +/* authentication reason */ +"Change passcode" = "Modifier le code d'accès"; + +/* No comment provided by engineer. */ +"Change Passcode" = "Modifier le code d'accès"; + /* No comment provided by engineer. */ "Change receiving address" = "Changer d'adresse de réception"; @@ -521,6 +539,9 @@ /* No comment provided by engineer. */ "Colors" = "Couleurs"; +/* server test step */ +"Compare file" = "Comparer le fichier"; + /* No comment provided by engineer. */ "Compare security codes with your contacts." = "Comparez les codes de sécurité avec vos contacts."; @@ -539,6 +560,9 @@ /* No comment provided by engineer. */ "Confirm new passphrase…" = "Confirmer la nouvelle phrase secrète…"; +/* No comment provided by engineer. */ +"Confirm Passcode" = "Confirmer le code d'accès"; + /* No comment provided by engineer. */ "Confirm password" = "Confirmer le mot de passe"; @@ -668,6 +692,9 @@ /* No comment provided by engineer. */ "Create address" = "Créer une adresse"; +/* server test step */ +"Create file" = "Créer un fichier"; + /* No comment provided by engineer. */ "Create group link" = "Créer un lien de groupe"; @@ -692,6 +719,9 @@ /* No comment provided by engineer. */ "creator" = "créateur"; +/* No comment provided by engineer. */ +"Current Passcode" = "Code d'accès actuel"; + /* No comment provided by engineer. */ "Current passphrase…" = "Phrase secrète actuelle…"; @@ -803,6 +833,9 @@ /* No comment provided by engineer. */ "Delete database" = "Supprimer la base de données"; +/* server test step */ +"Delete file" = "Supprimer le fichier"; + /* No comment provided by engineer. */ "Delete files and media?" = "Supprimer les fichiers et médias ?"; @@ -935,6 +968,9 @@ /* No comment provided by engineer. */ "Downgrade and open chat" = "Rétrograder et ouvrir le chat"; +/* server test step */ +"Download file" = "Télécharger le fichier"; + /* No comment provided by engineer. */ "Duplicate display name!" = "Nom d'affichage en double !"; @@ -959,6 +995,9 @@ /* No comment provided by engineer. */ "Enable instant notifications?" = "Activer les notifications instantanées ?"; +/* No comment provided by engineer. */ +"Enable lock" = "Activer le verrouillage"; + /* No comment provided by engineer. */ "Enable notifications" = "Activer les notifications"; @@ -1016,6 +1055,9 @@ /* No comment provided by engineer. */ "Enter correct passphrase." = "Entrez la phrase secrète correcte."; +/* No comment provided by engineer. */ +"Enter Passcode" = "Entrer le code d'accès"; + /* No comment provided by engineer. */ "Enter passphrase…" = "Entrez la phrase secrète…"; @@ -1100,6 +1142,9 @@ /* No comment provided by engineer. */ "Error joining group" = "Erreur lors de la liaison avec le groupe"; +/* No comment provided by engineer. */ +"Error loading %@ servers" = "Erreur lors du chargement des serveurs %@"; + /* No comment provided by engineer. */ "Error receiving file" = "Erreur lors de la réception du fichier"; @@ -1115,6 +1160,9 @@ /* No comment provided by engineer. */ "Error saving ICE servers" = "Erreur lors de la sauvegarde des serveurs ICE"; +/* No comment provided by engineer. */ +"Error saving passcode" = "Erreur lors de la sauvegarde du code d'accès"; + /* No comment provided by engineer. */ "Error saving passphrase to keychain" = "Erreur lors de l'enregistrement de la phrase de passe dans la keychain"; @@ -1178,6 +1226,9 @@ /* No comment provided by engineer. */ "Failed to remove passphrase" = "Échec de la suppression de la phrase secrète"; +/* No comment provided by engineer. */ +"File transfer will be cancelled. If it's in progress it will be stoppped." = "Le transfert de fichiers sera annulé. S'il est en cours, il sera interrompu."; + /* No comment provided by engineer. */ "File will be received when your contact completes uploading it." = "Le fichier sera reçu lorsque votre contact aura terminé de le mettre en ligne."; @@ -1343,6 +1394,9 @@ /* No comment provided by engineer. */ "Image will be received when your contact is online, please wait or check later!" = "L'image sera reçue quand votre contact sera en ligne, merci d'attendre ou de revenir plus tard !"; +/* No comment provided by engineer. */ +"Immediately" = "Immédiatement"; + /* No comment provided by engineer. */ "Immune to spam and abuse" = "Protégé du spam et des abus"; @@ -1394,6 +1448,9 @@ /* No comment provided by engineer. */ "Incompatible database version" = "Version de la base de données incompatible"; +/* PIN entry */ +"Incorrect passcode" = "Code d'accès erroné"; + /* No comment provided by engineer. */ "Incorrect security code!" = "Code de sécurité incorrect !"; @@ -1502,6 +1559,9 @@ /* No comment provided by engineer. */ "Keychain error" = "Erreur de la keychain"; +/* No comment provided by engineer. */ +"KeyChain error" = "Erreur du trousseau de clés"; + /* No comment provided by engineer. */ "Large file!" = "Fichier trop lourd !"; @@ -1538,6 +1598,12 @@ /* No comment provided by engineer. */ "Local profile data only" = "Données de profil local uniquement"; +/* No comment provided by engineer. */ +"Lock after" = "Verrouillage après"; + +/* No comment provided by engineer. */ +"Lock mode" = "Mode de verrouillage"; + /* No comment provided by engineer. */ "Make a private connection" = "Établir une connexion privée"; @@ -1685,6 +1751,9 @@ /* notification */ "New message" = "Nouveau message"; +/* No comment provided by engineer. */ +"New Passcode" = "Nouveau code d'accès"; + /* No comment provided by engineer. */ "New passphrase…" = "Nouvelle phrase secrète…"; @@ -1694,6 +1763,9 @@ /* No comment provided by engineer. */ "No" = "Non"; +/* Authentication unavailable */ +"No app password" = "Pas de mot de passe pour l'app"; + /* No comment provided by engineer. */ "No contacts selected" = "Aucun contact sélectionné"; @@ -1731,6 +1803,9 @@ group pref value */ "off" = "off"; +/* No comment provided by engineer. */ +"Off" = "Off"; + /* No comment provided by engineer. */ "Off (Local)" = "Off (Local)"; @@ -1815,6 +1890,21 @@ /* member role */ "owner" = "propriétaire"; +/* No comment provided by engineer. */ +"Passcode" = "Code d'accès"; + +/* No comment provided by engineer. */ +"Passcode changed!" = "Code d'accès modifié !"; + +/* No comment provided by engineer. */ +"Passcode entry" = "Saisie du code"; + +/* No comment provided by engineer. */ +"Passcode not changed!" = "Le code d'accès n'a pas été modifié !"; + +/* No comment provided by engineer. */ +"Passcode set!" = "Code d'accès défini !"; + /* No comment provided by engineer. */ "Password to show" = "Mot de passe à entrer"; @@ -1866,6 +1956,9 @@ /* No comment provided by engineer. */ "Please enter the previous password after restoring database backup. This action can not be undone." = "Veuillez entrer le mot de passe précédent après avoir restauré la sauvegarde de la base de données. Cette action ne peut pas être annulée."; +/* No comment provided by engineer. */ +"Please remember or store it securely - there is no way to recover a lost passcode!" = "N'oubliez pas de le mémoriser ou de le conserver en toute sécurité - il n'y a aucun moyen de récupérer un code d'accès perdu !"; + /* No comment provided by engineer. */ "Please restart the app and migrate the database to enable push notifications." = "Veuillez redémarrer l'app et migrer la base de données pour activer les notifications push."; @@ -2166,6 +2259,9 @@ /* server test error */ "Server requires authorization to create queues, check password" = "Le serveur requiert une autorisation pour créer des files d'attente, vérifiez le mot de passe"; +/* server test error */ +"Server requires authorization to upload, check password" = "Le serveur requiert une autorisation pour uploader, vérifiez le mot de passe"; + /* No comment provided by engineer. */ "Server test failed!" = "Échec du test du serveur !"; @@ -2238,6 +2334,12 @@ /* No comment provided by engineer. */ "SimpleX Lock" = "SimpleX Lock"; +/* No comment provided by engineer. */ +"SimpleX Lock mode" = "Mode de SimpleX Lock"; + +/* No comment provided by engineer. */ +"SimpleX Lock not enabled!" = "SimpleX Lock n'est pas activé !"; + /* No comment provided by engineer. */ "SimpleX Lock turned on" = "SimpleX Lock activé"; @@ -2286,12 +2388,18 @@ /* No comment provided by engineer. */ "strike" = "barré"; +/* No comment provided by engineer. */ +"Submit" = "Soumettre"; + /* No comment provided by engineer. */ "Support SimpleX Chat" = "Supporter SimpleX Chat"; /* No comment provided by engineer. */ "System" = "Système"; +/* No comment provided by engineer. */ +"System authentication" = "Authentification du système"; + /* No comment provided by engineer. */ "Take picture" = "Prendre une photo"; @@ -2499,9 +2607,12 @@ /* No comment provided by engineer. */ "Unless your contact deleted the connection or this link was already used, it might be a bug - please report it.\nTo connect, please ask your contact to create another connection link and check that you have a stable network connection." = "A moins que votre contact ait supprimé la connexion ou que ce lien ait déjà été utilisé, il peut s'agir d'un bug - veuillez le signaler.\nPour vous connecter, veuillez demander à votre contact de créer un autre lien de connexion et vérifiez que vous disposez d'une connexion réseau stable."; -/* authentication reason */ +/* No comment provided by engineer. */ "Unlock" = "Déverrouiller"; +/* authentication reason */ +"Unlock app" = "Déverrouiller l'app"; + /* No comment provided by engineer. */ "Unmute" = "Démute"; @@ -2535,6 +2646,9 @@ /* No comment provided by engineer. */ "Upgrade and open chat" = "Mettre à niveau et ouvrir le chat"; +/* server test step */ +"Upload file" = "Transférer le fichier"; + /* No comment provided by engineer. */ "Use .onion hosts" = "Utiliser les hôtes .onions"; @@ -2595,6 +2709,12 @@ /* No comment provided by engineer. */ "video call (not e2e encrypted)" = "appel vidéo (sans chiffrement)"; +/* No comment provided by engineer. */ +"Video will be received when your contact completes uploading it." = "La vidéo ne sera reçue que lorsque votre contact aura fini de la transférer."; + +/* No comment provided by engineer. */ +"Video will be received when your contact is online, please wait or check later!" = "La vidéo ne sera reçue que lorsque votre contact sera en ligne. Veuillez patienter ou vérifier plus tard !"; + /* No comment provided by engineer. */ "View security code" = "Afficher le code de sécurité"; @@ -2625,6 +2745,9 @@ /* No comment provided by engineer. */ "Waiting for image" = "En attente de l'image"; +/* No comment provided by engineer. */ +"Waiting for video" = "En attente de la vidéo"; + /* No comment provided by engineer. */ "wants to connect to you!" = "veut établir une connexion !"; @@ -2715,6 +2838,9 @@ /* No comment provided by engineer. */ "You can start chat via app Settings / Database or by restarting the app" = "Vous pouvez lancer le chat via Paramètres / Base de données ou en redémarrant l'app"; +/* No comment provided by engineer. */ +"You can turn on SimpleX Lock via Settings." = "Vous pouvez activer SimpleX Lock dans les Paramètres."; + /* No comment provided by engineer. */ "You can use markdown to format messages:" = "Vous pouvez utiliser le format markdown pour mettre en forme les messages :"; diff --git a/apps/ios/it.lproj/Localizable.strings b/apps/ios/it.lproj/Localizable.strings index 6f2fb7a5ca..fe173fb936 100644 --- a/apps/ios/it.lproj/Localizable.strings +++ b/apps/ios/it.lproj/Localizable.strings @@ -142,9 +142,15 @@ /* No comment provided by engineer. */ "%lld members" = "%lld membri"; +/* No comment provided by engineer. */ +"%lld minutes" = "%lld minuti"; + /* No comment provided by engineer. */ "%lld second(s)" = "%lld secondo/i"; +/* No comment provided by engineer. */ +"%lld seconds" = "%lld secondi"; + /* No comment provided by engineer. */ "%lldd" = "%lldg"; @@ -350,6 +356,9 @@ /* No comment provided by engineer. */ "audio call (not e2e encrypted)" = "chiamata audio (non crittografata e2e)"; +/* PIN entry */ +"Authentication cancelled" = "Autenticazione annullata"; + /* No comment provided by engineer. */ "Authentication failed" = "Autenticazione fallita"; @@ -437,9 +446,18 @@ /* No comment provided by engineer. */ "Change database passphrase?" = "Cambiare password del database?"; +/* authentication reason */ +"Change lock mode" = "Cambia modalità di blocco"; + /* No comment provided by engineer. */ "Change member role?" = "Cambiare ruolo del membro?"; +/* authentication reason */ +"Change passcode" = "Cambia codice di accesso"; + +/* No comment provided by engineer. */ +"Change Passcode" = "Cambia codice di accesso"; + /* No comment provided by engineer. */ "Change receiving address" = "Cambia indirizzo di ricezione"; @@ -521,6 +539,9 @@ /* No comment provided by engineer. */ "Colors" = "Colori"; +/* server test step */ +"Compare file" = "Confronta file"; + /* No comment provided by engineer. */ "Compare security codes with your contacts." = "Confronta i codici di sicurezza con i tuoi contatti."; @@ -539,6 +560,9 @@ /* No comment provided by engineer. */ "Confirm new passphrase…" = "Conferma password nuova…"; +/* No comment provided by engineer. */ +"Confirm Passcode" = "Conferma il codice di accesso"; + /* No comment provided by engineer. */ "Confirm password" = "Conferma password"; @@ -668,6 +692,9 @@ /* No comment provided by engineer. */ "Create address" = "Crea indirizzo"; +/* server test step */ +"Create file" = "Crea file"; + /* No comment provided by engineer. */ "Create group link" = "Crea link del gruppo"; @@ -692,6 +719,9 @@ /* No comment provided by engineer. */ "creator" = "creatore"; +/* No comment provided by engineer. */ +"Current Passcode" = "Codice di accesso attuale"; + /* No comment provided by engineer. */ "Current passphrase…" = "Password attuale…"; @@ -803,6 +833,9 @@ /* No comment provided by engineer. */ "Delete database" = "Elimina database"; +/* server test step */ +"Delete file" = "Elimina file"; + /* No comment provided by engineer. */ "Delete files and media?" = "Eliminare i file e i multimediali?"; @@ -935,6 +968,9 @@ /* No comment provided by engineer. */ "Downgrade and open chat" = "Esegui downgrade e apri chat"; +/* server test step */ +"Download file" = "Scarica file"; + /* No comment provided by engineer. */ "Duplicate display name!" = "Nome da mostrare doppio!"; @@ -959,6 +995,9 @@ /* No comment provided by engineer. */ "Enable instant notifications?" = "Attivare le notifiche istantanee?"; +/* No comment provided by engineer. */ +"Enable lock" = "Attiva blocco"; + /* No comment provided by engineer. */ "Enable notifications" = "Attiva le notifiche"; @@ -1016,6 +1055,9 @@ /* No comment provided by engineer. */ "Enter correct passphrase." = "Inserisci la password giusta."; +/* No comment provided by engineer. */ +"Enter Passcode" = "Inserisci il codice di accesso"; + /* No comment provided by engineer. */ "Enter passphrase…" = "Inserisci la password…"; @@ -1100,6 +1142,9 @@ /* No comment provided by engineer. */ "Error joining group" = "Errore di ingresso nel gruppo"; +/* No comment provided by engineer. */ +"Error loading %@ servers" = "Errore nel caricamento dei server %@"; + /* No comment provided by engineer. */ "Error receiving file" = "Errore nella ricezione del file"; @@ -1115,6 +1160,9 @@ /* No comment provided by engineer. */ "Error saving ICE servers" = "Errore nel salvataggio dei server ICE"; +/* No comment provided by engineer. */ +"Error saving passcode" = "Errore nel salvataggio del codice di accesso"; + /* No comment provided by engineer. */ "Error saving passphrase to keychain" = "Errore nel salvataggio della password nel portachiavi"; @@ -1346,6 +1394,9 @@ /* No comment provided by engineer. */ "Image will be received when your contact is online, please wait or check later!" = "L'immagine verrà ricevuta quando il tuo contatto sarà in linea, aspetta o controlla più tardi!"; +/* No comment provided by engineer. */ +"Immediately" = "Immediatamente"; + /* No comment provided by engineer. */ "Immune to spam and abuse" = "Immune a spam e abusi"; @@ -1397,6 +1448,9 @@ /* No comment provided by engineer. */ "Incompatible database version" = "Versione del database incompatibile"; +/* PIN entry */ +"Incorrect passcode" = "Codice di accesso errato"; + /* No comment provided by engineer. */ "Incorrect security code!" = "Codice di sicurezza sbagliato!"; @@ -1505,6 +1559,9 @@ /* No comment provided by engineer. */ "Keychain error" = "Errore del portachiavi"; +/* No comment provided by engineer. */ +"KeyChain error" = "Errore del portachiavi"; + /* No comment provided by engineer. */ "Large file!" = "File grande!"; @@ -1541,6 +1598,12 @@ /* No comment provided by engineer. */ "Local profile data only" = "Solo dati del profilo locale"; +/* No comment provided by engineer. */ +"Lock after" = "Blocca dopo"; + +/* No comment provided by engineer. */ +"Lock mode" = "Modalità di blocco"; + /* No comment provided by engineer. */ "Make a private connection" = "Crea una connessione privata"; @@ -1688,6 +1751,9 @@ /* notification */ "New message" = "Nuovo messaggio"; +/* No comment provided by engineer. */ +"New Passcode" = "Nuovo codice di accesso"; + /* No comment provided by engineer. */ "New passphrase…" = "Nuova password…"; @@ -1697,6 +1763,9 @@ /* No comment provided by engineer. */ "No" = "No"; +/* Authentication unavailable */ +"No app password" = "Nessuna password dell'app"; + /* No comment provided by engineer. */ "No contacts selected" = "Nessun contatto selezionato"; @@ -1734,6 +1803,9 @@ group pref value */ "off" = "off"; +/* No comment provided by engineer. */ +"Off" = "Off"; + /* No comment provided by engineer. */ "Off (Local)" = "Off (Locale)"; @@ -1818,6 +1890,21 @@ /* member role */ "owner" = "proprietario"; +/* No comment provided by engineer. */ +"Passcode" = "Codice di accesso"; + +/* No comment provided by engineer. */ +"Passcode changed!" = "Codice di accesso cambiato!"; + +/* No comment provided by engineer. */ +"Passcode entry" = "Inserimento del codice di accesso"; + +/* No comment provided by engineer. */ +"Passcode not changed!" = "Codice di accesso non cambiato!"; + +/* No comment provided by engineer. */ +"Passcode set!" = "Codice di accesso impostato!"; + /* No comment provided by engineer. */ "Password to show" = "Password per mostrare"; @@ -1869,6 +1956,9 @@ /* No comment provided by engineer. */ "Please enter the previous password after restoring database backup. This action can not be undone." = "Inserisci la password precedente dopo aver ripristinato il backup del database. Questa azione non può essere annullata."; +/* No comment provided by engineer. */ +"Please remember or store it securely - there is no way to recover a lost passcode!" = "Ricordalo o conservalo in modo sicuro: non c'è modo di recuperare un codice di accesso perso!"; + /* No comment provided by engineer. */ "Please restart the app and migrate the database to enable push notifications." = "Riavvia l'app ed esegui la migrazione del database per attivare le notifiche push."; @@ -2169,6 +2259,9 @@ /* server test error */ "Server requires authorization to create queues, check password" = "Il server richiede l'autorizzazione di creare code, controlla la password"; +/* server test error */ +"Server requires authorization to upload, check password" = "Il server richiede l'autorizzazione per il caricamento, controllare la password"; + /* No comment provided by engineer. */ "Server test failed!" = "Test del server fallito!"; @@ -2241,6 +2334,12 @@ /* No comment provided by engineer. */ "SimpleX Lock" = "SimpleX Lock"; +/* No comment provided by engineer. */ +"SimpleX Lock mode" = "Modalità di SimpleX Lock"; + +/* No comment provided by engineer. */ +"SimpleX Lock not enabled!" = "SimpleX Lock non attivato!"; + /* No comment provided by engineer. */ "SimpleX Lock turned on" = "SimpleX Lock attivato"; @@ -2289,12 +2388,18 @@ /* No comment provided by engineer. */ "strike" = "barrato"; +/* No comment provided by engineer. */ +"Submit" = "Invia"; + /* No comment provided by engineer. */ "Support SimpleX Chat" = "Supporta SimpleX Chat"; /* No comment provided by engineer. */ "System" = "Sistema"; +/* No comment provided by engineer. */ +"System authentication" = "Autenticazione di sistema"; + /* No comment provided by engineer. */ "Take picture" = "Scatta foto"; @@ -2502,9 +2607,12 @@ /* No comment provided by engineer. */ "Unless your contact deleted the connection or this link was already used, it might be a bug - please report it.\nTo connect, please ask your contact to create another connection link and check that you have a stable network connection." = "A meno che il tuo contatto non abbia eliminato la connessione o che questo link non sia già stato usato, potrebbe essere un errore; per favore segnalalo.\nPer connetterti, chiedi al tuo contatto di creare un altro link di connessione e controlla di avere una connessione di rete stabile."; -/* authentication reason */ +/* No comment provided by engineer. */ "Unlock" = "Sblocca"; +/* authentication reason */ +"Unlock app" = "Sblocca l'app"; + /* No comment provided by engineer. */ "Unmute" = "Riattiva audio"; @@ -2538,6 +2646,9 @@ /* No comment provided by engineer. */ "Upgrade and open chat" = "Aggiorna e apri chat"; +/* server test step */ +"Upload file" = "Invia file"; + /* No comment provided by engineer. */ "Use .onion hosts" = "Usa gli host .onion"; @@ -2598,6 +2709,12 @@ /* No comment provided by engineer. */ "video call (not e2e encrypted)" = "videochiamata (non crittografata e2e)"; +/* No comment provided by engineer. */ +"Video will be received when your contact completes uploading it." = "Il video verrà ricevuto quando il tuo contatto completerà l'invio."; + +/* No comment provided by engineer. */ +"Video will be received when your contact is online, please wait or check later!" = "Il video verrà ricevuto quando il tuo contatto sarà in linea, attendi o controlla più tardi!"; + /* No comment provided by engineer. */ "View security code" = "Vedi codice di sicurezza"; @@ -2628,6 +2745,9 @@ /* No comment provided by engineer. */ "Waiting for image" = "In attesa dell'immagine"; +/* No comment provided by engineer. */ +"Waiting for video" = "In attesa del video"; + /* No comment provided by engineer. */ "wants to connect to you!" = "vuole connettersi con te!"; @@ -2718,6 +2838,9 @@ /* No comment provided by engineer. */ "You can start chat via app Settings / Database or by restarting the app" = "Puoi avviare la chat via Impostazioni / Database o riavviando l'app"; +/* No comment provided by engineer. */ +"You can turn on SimpleX Lock via Settings." = "Puoi attivare SimpleX Lock tramite le impostazioni."; + /* No comment provided by engineer. */ "You can use markdown to format messages:" = "Puoi usare il markdown per formattare i messaggi:"; diff --git a/apps/ios/nl.lproj/Localizable.strings b/apps/ios/nl.lproj/Localizable.strings index b4d0273113..4f168cf35d 100644 --- a/apps/ios/nl.lproj/Localizable.strings +++ b/apps/ios/nl.lproj/Localizable.strings @@ -142,9 +142,15 @@ /* No comment provided by engineer. */ "%lld members" = "%lld leden"; +/* No comment provided by engineer. */ +"%lld minutes" = "%lld minuten"; + /* No comment provided by engineer. */ "%lld second(s)" = "%lld seconde(n)"; +/* No comment provided by engineer. */ +"%lld seconds" = "%lld seconden"; + /* No comment provided by engineer. */ "%lldd" = "%lldd"; @@ -350,6 +356,9 @@ /* No comment provided by engineer. */ "audio call (not e2e encrypted)" = "audio oproep (niet e2e versleuteld)"; +/* PIN entry */ +"Authentication cancelled" = "Verificatie geannuleerd"; + /* No comment provided by engineer. */ "Authentication failed" = "Verificatie mislukt"; @@ -432,14 +441,23 @@ "Cannot receive file" = "Kan bestand niet ontvangen"; /* No comment provided by engineer. */ -"Change" = "Wijziging"; +"Change" = "Veranderen"; /* No comment provided by engineer. */ "Change database passphrase?" = "Wachtwoord database wijzigen?"; +/* authentication reason */ +"Change lock mode" = "Wijzig de vergrendelings modus"; + /* No comment provided by engineer. */ "Change member role?" = "Rol van gebruiker wijzigen?"; +/* authentication reason */ +"Change passcode" = "Toegangscode wijzigen"; + +/* No comment provided by engineer. */ +"Change Passcode" = "Toegangscode wijzigen"; + /* No comment provided by engineer. */ "Change receiving address" = "Ontvangst adres wijzigen"; @@ -521,6 +539,9 @@ /* No comment provided by engineer. */ "Colors" = "Kleuren"; +/* server test step */ +"Compare file" = "Bestand vergelijken"; + /* No comment provided by engineer. */ "Compare security codes with your contacts." = "Vergelijk beveiligingscodes met je contacten."; @@ -539,6 +560,9 @@ /* No comment provided by engineer. */ "Confirm new passphrase…" = "Bevestig nieuw wachtwoord…"; +/* No comment provided by engineer. */ +"Confirm Passcode" = "Bevestig toegangscode"; + /* No comment provided by engineer. */ "Confirm password" = "Bevestig wachtwoord"; @@ -668,6 +692,9 @@ /* No comment provided by engineer. */ "Create address" = "Adres aanmaken"; +/* server test step */ +"Create file" = "Bestand maken"; + /* No comment provided by engineer. */ "Create group link" = "Groep link maken"; @@ -692,6 +719,9 @@ /* No comment provided by engineer. */ "creator" = "creator"; +/* No comment provided by engineer. */ +"Current Passcode" = "Huidige toegangscode"; + /* No comment provided by engineer. */ "Current passphrase…" = "Huidige wachtwoord…"; @@ -803,6 +833,9 @@ /* No comment provided by engineer. */ "Delete database" = "Database verwijderen"; +/* server test step */ +"Delete file" = "Verwijder bestand"; + /* No comment provided by engineer. */ "Delete files and media?" = "Bestanden en media verwijderen?"; @@ -935,6 +968,9 @@ /* No comment provided by engineer. */ "Downgrade and open chat" = "Downgraden en chat openen"; +/* server test step */ +"Download file" = "Download bestand"; + /* No comment provided by engineer. */ "Duplicate display name!" = "Dubbele weergavenaam!"; @@ -959,6 +995,9 @@ /* No comment provided by engineer. */ "Enable instant notifications?" = "Onmiddellijke meldingen inschakelen?"; +/* No comment provided by engineer. */ +"Enable lock" = "Vergrendeling inschakelen"; + /* No comment provided by engineer. */ "Enable notifications" = "Meldingen aanzetten"; @@ -1016,6 +1055,9 @@ /* No comment provided by engineer. */ "Enter correct passphrase." = "Voer het juiste wachtwoord in."; +/* No comment provided by engineer. */ +"Enter Passcode" = "Voer toegangscode in"; + /* No comment provided by engineer. */ "Enter passphrase…" = "Voer wachtwoord in…"; @@ -1100,6 +1142,9 @@ /* No comment provided by engineer. */ "Error joining group" = "Fout bij lid worden van groep"; +/* No comment provided by engineer. */ +"Error loading %@ servers" = "Fout bij het laden van %@ servers"; + /* No comment provided by engineer. */ "Error receiving file" = "Fout bij ontvangen van bestand"; @@ -1115,6 +1160,9 @@ /* No comment provided by engineer. */ "Error saving ICE servers" = "Fout bij opslaan van ICE servers"; +/* No comment provided by engineer. */ +"Error saving passcode" = "Fout bij opslaan van toegangscode"; + /* No comment provided by engineer. */ "Error saving passphrase to keychain" = "Fout bij opslaan van wachtwoord in de keychain"; @@ -1346,6 +1394,9 @@ /* No comment provided by engineer. */ "Image will be received when your contact is online, please wait or check later!" = "De afbeelding wordt ontvangen wanneer uw contact online is, even geduld a.u.b. of kijk later!"; +/* No comment provided by engineer. */ +"Immediately" = "Onmiddellijk"; + /* No comment provided by engineer. */ "Immune to spam and abuse" = "Immuun voor spam en misbruik"; @@ -1397,6 +1448,9 @@ /* No comment provided by engineer. */ "Incompatible database version" = "Incompatibele database versie"; +/* PIN entry */ +"Incorrect passcode" = "Onjuiste toegangscode"; + /* No comment provided by engineer. */ "Incorrect security code!" = "Onjuiste beveiligingscode!"; @@ -1505,6 +1559,9 @@ /* No comment provided by engineer. */ "Keychain error" = "Keychain fout"; +/* No comment provided by engineer. */ +"KeyChain error" = "Keychain fout"; + /* No comment provided by engineer. */ "Large file!" = "Groot bestand!"; @@ -1541,6 +1598,12 @@ /* No comment provided by engineer. */ "Local profile data only" = "Alleen lokale profielgegevens"; +/* No comment provided by engineer. */ +"Lock after" = "Vergrendelen na"; + +/* No comment provided by engineer. */ +"Lock mode" = "Vergrendeling modus"; + /* No comment provided by engineer. */ "Make a private connection" = "Maak een privéverbinding"; @@ -1688,6 +1751,9 @@ /* notification */ "New message" = "nieuw bericht"; +/* No comment provided by engineer. */ +"New Passcode" = "Nieuwe toegangscode"; + /* No comment provided by engineer. */ "New passphrase…" = "Nieuw wachtwoord…"; @@ -1697,6 +1763,9 @@ /* No comment provided by engineer. */ "No" = "Nee"; +/* Authentication unavailable */ +"No app password" = "Geen app wachtwoord"; + /* No comment provided by engineer. */ "No contacts selected" = "Geen contacten geselecteerd"; @@ -1734,6 +1803,9 @@ group pref value */ "off" = "uit"; +/* No comment provided by engineer. */ +"Off" = "Uit"; + /* No comment provided by engineer. */ "Off (Local)" = "Uit (lokaal)"; @@ -1818,6 +1890,21 @@ /* member role */ "owner" = "Eigenaar"; +/* No comment provided by engineer. */ +"Passcode" = "Toegangscode"; + +/* No comment provided by engineer. */ +"Passcode changed!" = "Toegangscode gewijzigd!"; + +/* No comment provided by engineer. */ +"Passcode entry" = "Toegangscode invoer"; + +/* No comment provided by engineer. */ +"Passcode not changed!" = "Toegangscode niet gewijzigd!"; + +/* No comment provided by engineer. */ +"Passcode set!" = "Toegangscode ingesteld!"; + /* No comment provided by engineer. */ "Password to show" = "Wachtwoord om weer te geven"; @@ -1869,6 +1956,9 @@ /* No comment provided by engineer. */ "Please enter the previous password after restoring database backup. This action can not be undone." = "Voer het vorige wachtwoord in na het herstellen van de database back-up. Deze actie kan niet ongedaan gemaakt worden."; +/* No comment provided by engineer. */ +"Please remember or store it securely - there is no way to recover a lost passcode!" = "Onthoud het of bewaar het veilig - er is geen manier om een verloren toegangscode te herstellen!"; + /* No comment provided by engineer. */ "Please restart the app and migrate the database to enable push notifications." = "Start de app opnieuw en migreer de database om push meldingen in te schakelen."; @@ -2169,6 +2259,9 @@ /* server test error */ "Server requires authorization to create queues, check password" = "Server vereist autorisatie om wachtrijen te maken, controleer wachtwoord"; +/* server test error */ +"Server requires authorization to upload, check password" = "Server vereist autorisatie om te uploaden, wachtwoord controleren"; + /* No comment provided by engineer. */ "Server test failed!" = "Servertest mislukt!"; @@ -2241,6 +2334,12 @@ /* No comment provided by engineer. */ "SimpleX Lock" = "SimpleX Vergrendelen"; +/* No comment provided by engineer. */ +"SimpleX Lock mode" = "SimpleX Vergrendel modus"; + +/* No comment provided by engineer. */ +"SimpleX Lock not enabled!" = "SimpleX vergrendeling niet ingeschakeld!"; + /* No comment provided by engineer. */ "SimpleX Lock turned on" = "SimpleX Vergrendelen ingeschakeld"; @@ -2289,12 +2388,18 @@ /* No comment provided by engineer. */ "strike" = "staking"; +/* No comment provided by engineer. */ +"Submit" = "Indienen"; + /* No comment provided by engineer. */ "Support SimpleX Chat" = "Ondersteuning van SimpleX Chat"; /* No comment provided by engineer. */ "System" = "Systeem"; +/* No comment provided by engineer. */ +"System authentication" = "Systeem authenticatie"; + /* No comment provided by engineer. */ "Take picture" = "Foto nemen"; @@ -2502,9 +2607,12 @@ /* No comment provided by engineer. */ "Unless your contact deleted the connection or this link was already used, it might be a bug - please report it.\nTo connect, please ask your contact to create another connection link and check that you have a stable network connection." = "Tenzij uw contactpersoon de verbinding heeft verwijderd of deze link al is gebruikt, kan het een bug zijn. Meld het alstublieft.\nOm verbinding te maken, vraagt u uw contactpersoon om een andere verbinding link te maken en te controleren of u een stabiele netwerkverbinding heeft."; -/* authentication reason */ +/* No comment provided by engineer. */ "Unlock" = "Ontgrendelen"; +/* authentication reason */ +"Unlock app" = "Ontgrendel app"; + /* No comment provided by engineer. */ "Unmute" = "Dempen opheffen"; @@ -2538,6 +2646,9 @@ /* No comment provided by engineer. */ "Upgrade and open chat" = "Upgrade en open chat"; +/* server test step */ +"Upload file" = "Upload bestand"; + /* No comment provided by engineer. */ "Use .onion hosts" = "Gebruik .onion-hosts"; @@ -2598,6 +2709,12 @@ /* No comment provided by engineer. */ "video call (not e2e encrypted)" = "video gesprek (niet e2e versleuteld)"; +/* No comment provided by engineer. */ +"Video will be received when your contact completes uploading it." = "De video wordt ontvangen wanneer uw contactpersoon het uploaden heeft voltooid."; + +/* No comment provided by engineer. */ +"Video will be received when your contact is online, please wait or check later!" = "De video wordt ontvangen wanneer uw contact online is, even geduld a.u.b. of kijk later!"; + /* No comment provided by engineer. */ "View security code" = "Beveiligingscode bekijken"; @@ -2628,6 +2745,9 @@ /* No comment provided by engineer. */ "Waiting for image" = "Wachten op afbeelding"; +/* No comment provided by engineer. */ +"Waiting for video" = "Wachten op video"; + /* No comment provided by engineer. */ "wants to connect to you!" = "wil met je in contact komen!"; @@ -2718,6 +2838,9 @@ /* No comment provided by engineer. */ "You can start chat via app Settings / Database or by restarting the app" = "U kunt de chat starten via app Instellingen / Database of door de app opnieuw op te starten"; +/* No comment provided by engineer. */ +"You can turn on SimpleX Lock via Settings." = "Je kunt SimpleX Vergrendeling aanzetten via Instellingen."; + /* No comment provided by engineer. */ "You can use markdown to format messages:" = "U kunt markdown gebruiken voor opmaak in berichten:"; diff --git a/apps/ios/ru.lproj/Localizable.strings b/apps/ios/ru.lproj/Localizable.strings index 7192486e96..28e626479e 100644 --- a/apps/ios/ru.lproj/Localizable.strings +++ b/apps/ios/ru.lproj/Localizable.strings @@ -2502,7 +2502,7 @@ /* No comment provided by engineer. */ "Unless your contact deleted the connection or this link was already used, it might be a bug - please report it.\nTo connect, please ask your contact to create another connection link and check that you have a stable network connection." = "Возможно, Ваш контакт удалил ссылку, или она уже была использована. Если это не так, то это может быть ошибкой - пожалуйста, сообщите нам об этом.\nЧтобы установить соединение, попросите Ваш контакт создать еще одну ссылку и проверьте Ваше соединение с сетью."; -/* authentication reason */ +/* No comment provided by engineer. */ "Unlock" = "Разблокировать"; /* No comment provided by engineer. */ diff --git a/apps/ios/zh-Hans.lproj/Localizable.strings b/apps/ios/zh-Hans.lproj/Localizable.strings index 58381900c1..cbfc39437a 100644 --- a/apps/ios/zh-Hans.lproj/Localizable.strings +++ b/apps/ios/zh-Hans.lproj/Localizable.strings @@ -142,9 +142,15 @@ /* No comment provided by engineer. */ "%lld members" = "%lld 成员"; +/* No comment provided by engineer. */ +"%lld minutes" = "%lld 分钟"; + /* No comment provided by engineer. */ "%lld second(s)" = "%lld 秒"; +/* No comment provided by engineer. */ +"%lld seconds" = "%lld 秒"; + /* No comment provided by engineer. */ "%lldd" = "%lldd"; @@ -350,14 +356,17 @@ /* No comment provided by engineer. */ "audio call (not e2e encrypted)" = "语音通话(非端到端加密)"; +/* PIN entry */ +"Authentication cancelled" = "身份验证已取消"; + /* No comment provided by engineer. */ -"Authentication failed" = "认证失败"; +"Authentication failed" = "身份认证失败"; /* No comment provided by engineer. */ "Authentication is required before the call is connected, but you may miss calls." = "通话接通前需要进行认证,但您可能会错过来电。"; /* No comment provided by engineer. */ -"Authentication unavailable" = "认证不可用"; +"Authentication unavailable" = "身份认证不可用"; /* No comment provided by engineer. */ "Auto-accept contact requests" = "自动接受联系人请求"; @@ -437,9 +446,18 @@ /* No comment provided by engineer. */ "Change database passphrase?" = "更改数据库密码?"; +/* authentication reason */ +"Change lock mode" = "更改锁定模式"; + /* No comment provided by engineer. */ "Change member role?" = "更改成员角色?"; +/* authentication reason */ +"Change passcode" = "更改密码"; + +/* No comment provided by engineer. */ +"Change Passcode" = "更改密码"; + /* No comment provided by engineer. */ "Change receiving address" = "更改接收地址"; @@ -521,6 +539,9 @@ /* No comment provided by engineer. */ "Colors" = "颜色"; +/* server test step */ +"Compare file" = "对比文件"; + /* No comment provided by engineer. */ "Compare security codes with your contacts." = "与您的联系人比较安全码。"; @@ -539,6 +560,9 @@ /* No comment provided by engineer. */ "Confirm new passphrase…" = "确认新密码……"; +/* No comment provided by engineer. */ +"Confirm Passcode" = "确认密码"; + /* No comment provided by engineer. */ "Confirm password" = "确认密码"; @@ -668,6 +692,9 @@ /* No comment provided by engineer. */ "Create address" = "创建地址"; +/* server test step */ +"Create file" = "创建文件"; + /* No comment provided by engineer. */ "Create group link" = "创建群组链接"; @@ -692,6 +719,9 @@ /* No comment provided by engineer. */ "creator" = "创建者"; +/* No comment provided by engineer. */ +"Current Passcode" = "当前密码"; + /* No comment provided by engineer. */ "Current passphrase…" = "现有密码……"; @@ -803,6 +833,9 @@ /* No comment provided by engineer. */ "Delete database" = "删除数据库"; +/* server test step */ +"Delete file" = "删除文件"; + /* No comment provided by engineer. */ "Delete files and media?" = "删除文件和媒体文件吗?"; @@ -935,6 +968,9 @@ /* No comment provided by engineer. */ "Downgrade and open chat" = "降级并打开聊天"; +/* server test step */ +"Download file" = "下载文件"; + /* No comment provided by engineer. */ "Duplicate display name!" = "重复的显示名!"; @@ -959,6 +995,9 @@ /* No comment provided by engineer. */ "Enable instant notifications?" = "启用即时通知?"; +/* No comment provided by engineer. */ +"Enable lock" = "启用锁定"; + /* No comment provided by engineer. */ "Enable notifications" = "启用通知"; @@ -1016,6 +1055,9 @@ /* No comment provided by engineer. */ "Enter correct passphrase." = "输入正确密码。"; +/* No comment provided by engineer. */ +"Enter Passcode" = "输入密码"; + /* No comment provided by engineer. */ "Enter passphrase…" = "输入密码……"; @@ -1100,6 +1142,9 @@ /* No comment provided by engineer. */ "Error joining group" = "加入群组错误"; +/* No comment provided by engineer. */ +"Error loading %@ servers" = "加载 %@ 服务器错误"; + /* No comment provided by engineer. */ "Error receiving file" = "接收文件错误"; @@ -1115,6 +1160,9 @@ /* No comment provided by engineer. */ "Error saving ICE servers" = "保存 ICE 服务器错误"; +/* No comment provided by engineer. */ +"Error saving passcode" = "保存密码错误"; + /* No comment provided by engineer. */ "Error saving passphrase to keychain" = "保存密码到钥匙串错误"; @@ -1346,6 +1394,9 @@ /* No comment provided by engineer. */ "Image will be received when your contact is online, please wait or check later!" = "图片将在您的联系人在线时收到,请稍等或稍后查看!"; +/* No comment provided by engineer. */ +"Immediately" = "立即"; + /* No comment provided by engineer. */ "Immune to spam and abuse" = "不受垃圾和骚扰消息影响"; @@ -1397,6 +1448,9 @@ /* No comment provided by engineer. */ "Incompatible database version" = "数据库版本不兼容"; +/* PIN entry */ +"Incorrect passcode" = "密码错误"; + /* No comment provided by engineer. */ "Incorrect security code!" = "安全码不正确!"; @@ -1505,6 +1559,9 @@ /* No comment provided by engineer. */ "Keychain error" = "钥匙串错误"; +/* No comment provided by engineer. */ +"KeyChain error" = "钥匙串错误"; + /* No comment provided by engineer. */ "Large file!" = "大文件!"; @@ -1541,6 +1598,12 @@ /* No comment provided by engineer. */ "Local profile data only" = "仅本地配置文件数据"; +/* No comment provided by engineer. */ +"Lock after" = "在此后锁定"; + +/* No comment provided by engineer. */ +"Lock mode" = "锁定模式"; + /* No comment provided by engineer. */ "Make a private connection" = "建立私密连接"; @@ -1688,6 +1751,9 @@ /* notification */ "New message" = "新消息"; +/* No comment provided by engineer. */ +"New Passcode" = "新密码"; + /* No comment provided by engineer. */ "New passphrase…" = "新密码……"; @@ -1697,6 +1763,9 @@ /* No comment provided by engineer. */ "No" = "否"; +/* Authentication unavailable */ +"No app password" = "没有应用程序密码"; + /* No comment provided by engineer. */ "No contacts selected" = "未选择联系人"; @@ -1734,6 +1803,9 @@ group pref value */ "off" = "关闭"; +/* No comment provided by engineer. */ +"Off" = "关闭"; + /* No comment provided by engineer. */ "Off (Local)" = "关闭(本地)"; @@ -1818,6 +1890,21 @@ /* member role */ "owner" = "群主"; +/* No comment provided by engineer. */ +"Passcode" = "密码"; + +/* No comment provided by engineer. */ +"Passcode changed!" = "密码已更改!"; + +/* No comment provided by engineer. */ +"Passcode entry" = "密码输入"; + +/* No comment provided by engineer. */ +"Passcode not changed!" = "密码未更改!"; + +/* No comment provided by engineer. */ +"Passcode set!" = "密码已设置!"; + /* No comment provided by engineer. */ "Password to show" = "显示密码"; @@ -1869,6 +1956,9 @@ /* No comment provided by engineer. */ "Please enter the previous password after restoring database backup. This action can not be undone." = "恢复数据库备份后请输入之前的密码。 此操作无法撤消。"; +/* No comment provided by engineer. */ +"Please remember or store it securely - there is no way to recover a lost passcode!" = "请牢记或妥善保管——丢失的密码将无法恢复!"; + /* No comment provided by engineer. */ "Please restart the app and migrate the database to enable push notifications." = "请重新启动应用程序并迁移数据库以启用推送通知。"; @@ -2169,6 +2259,9 @@ /* server test error */ "Server requires authorization to create queues, check password" = "服务器需要授权才能创建队列,检查密码"; +/* server test error */ +"Server requires authorization to upload, check password" = "服务器需要授权来上传,检查密码"; + /* No comment provided by engineer. */ "Server test failed!" = "服务器测试失败!"; @@ -2241,6 +2334,12 @@ /* No comment provided by engineer. */ "SimpleX Lock" = "SimpleX 锁定"; +/* No comment provided by engineer. */ +"SimpleX Lock mode" = "SimpleX 锁定模式"; + +/* No comment provided by engineer. */ +"SimpleX Lock not enabled!" = "未启用 SimpleX 锁定!"; + /* No comment provided by engineer. */ "SimpleX Lock turned on" = "已开启 SimpleX 锁定"; @@ -2289,12 +2388,18 @@ /* No comment provided by engineer. */ "strike" = "删去"; +/* No comment provided by engineer. */ +"Submit" = "提交"; + /* No comment provided by engineer. */ "Support SimpleX Chat" = "支持 SimpleX Chat"; /* No comment provided by engineer. */ "System" = "系统"; +/* No comment provided by engineer. */ +"System authentication" = "系统认证"; + /* No comment provided by engineer. */ "Take picture" = "拍照"; @@ -2502,9 +2607,12 @@ /* No comment provided by engineer. */ "Unless your contact deleted the connection or this link was already used, it might be a bug - please report it.\nTo connect, please ask your contact to create another connection link and check that you have a stable network connection." = "除非您的联系人已删除此连接或此链接已被使用,否则它可能是一个错误——请报告。\n如果要连接,请让您的联系人创建另一个连接链接,并检查您的网络连接是否稳定。"; -/* authentication reason */ +/* No comment provided by engineer. */ "Unlock" = "解锁"; +/* authentication reason */ +"Unlock app" = "解锁应用程序"; + /* No comment provided by engineer. */ "Unmute" = "取消静音"; @@ -2538,6 +2646,9 @@ /* No comment provided by engineer. */ "Upgrade and open chat" = "升级并打开聊天"; +/* server test step */ +"Upload file" = "上传文件"; + /* No comment provided by engineer. */ "Use .onion hosts" = "使用 .onion 主机"; @@ -2598,6 +2709,12 @@ /* No comment provided by engineer. */ "video call (not e2e encrypted)" = "视频通话(非端到端加密)"; +/* No comment provided by engineer. */ +"Video will be received when your contact completes uploading it." = "视频将在您的联系人完成上传后收到。"; + +/* No comment provided by engineer. */ +"Video will be received when your contact is online, please wait or check later!" = "视频将在您的联系人在线时收到,请稍等或稍后查看!"; + /* No comment provided by engineer. */ "View security code" = "查看安全码"; @@ -2628,6 +2745,9 @@ /* No comment provided by engineer. */ "Waiting for image" = "等待图像中"; +/* No comment provided by engineer. */ +"Waiting for video" = "等待视频中"; + /* No comment provided by engineer. */ "wants to connect to you!" = "想要与您连接!"; @@ -2718,6 +2838,9 @@ /* No comment provided by engineer. */ "You can start chat via app Settings / Database or by restarting the app" = "您可以通过应用程序设置/数据库或重新启动应用程序开始聊天"; +/* No comment provided by engineer. */ +"You can turn on SimpleX Lock via Settings." = "您可以通过设置开启 SimpleX 锁定。"; + /* No comment provided by engineer. */ "You can use markdown to format messages:" = "您可以使用 markdown 来编排消息格式:"; From 06ad2b7972ade86ec0acba21937561f4f8b6a96f Mon Sep 17 00:00:00 2001 From: Evgeny Poberezkin <2769109+epoberezkin@users.noreply.github.com> Date: Fri, 14 Apr 2023 00:15:18 +0200 Subject: [PATCH 3/8] website: translations (#2180) * ios: UI to cancel receiving file * Translated using Weblate (Portuguese (Brazil)) Currently translated at 1.8% (4 of 211 strings) Translation: SimpleX Chat/SimpleX Chat website Translate-URL: https://hosted.weblate.org/projects/simplex-chat/website/pt_BR/ * Revert "ios: UI to cancel receiving file" This reverts commit 0fcae6e8d51ede5acbdf5ec15a75780238654d72. --------- Co-authored-by: Pedro Licio --- website/langs/pt_BR.json | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/website/langs/pt_BR.json b/website/langs/pt_BR.json index 0967ef424b..59bdf0be4a 100644 --- a/website/langs/pt_BR.json +++ b/website/langs/pt_BR.json @@ -1 +1,6 @@ -{} +{ + "home": "Início", + "developers": "Desenvolvedores", + "reference": "Referência", + "blog": "Blog" +} From b40fc7ff180d6c83da17270a70f2b91f3b5901c0 Mon Sep 17 00:00:00 2001 From: Evgeny Poberezkin <2769109+epoberezkin@users.noreply.github.com> Date: Fri, 14 Apr 2023 11:20:58 +0200 Subject: [PATCH 4/8] mobile: add Polish language (#2181) * mobile: add Polish language * update readme --- README.md | 3 +- apps/android/app/build.gradle | 2 +- .../app/views/usersettings/Appearance.kt | 1 + .../AccentColor.colorset/Contents.json | 15 + .../Shared/Assets.xcassets/Contents.json | 6 + .../AccentColor.colorset/Contents.json | 23 + .../Shared/Assets.xcassets/Contents.json | 6 + .../SimpleX NSE/en.lproj/InfoPlist.strings | 6 + .../SimpleX NSE/en.lproj/Localizable.strings | 1 + .../en.lproj/Localizable.strings | 30 + .../en.lproj/SimpleX--iOS--InfoPlist.strings | 10 + .../pl.xcloc/contents.json | 12 + .../SimpleX NSE/pl.lproj/InfoPlist.strings | 9 + .../SimpleX NSE/pl.lproj/Localizable.strings | 1 + apps/ios/SimpleX.xcodeproj/project.pbxproj | 9 + apps/ios/pl.lproj/Localizable.strings | 3020 +++++++++++++++++ .../pl.lproj/SimpleX--iOS--InfoPlist.strings | 15 + scripts/ios/export-localizations.sh | 2 +- scripts/ios/import-localizations.sh | 2 +- 19 files changed, 3169 insertions(+), 4 deletions(-) create mode 100644 apps/ios/SimpleX Localizations/pl.xcloc/Localized Contents/Shared/Assets.xcassets/AccentColor.colorset/Contents.json create mode 100644 apps/ios/SimpleX Localizations/pl.xcloc/Localized Contents/Shared/Assets.xcassets/Contents.json create mode 100644 apps/ios/SimpleX Localizations/pl.xcloc/Source Contents/Shared/Assets.xcassets/AccentColor.colorset/Contents.json create mode 100644 apps/ios/SimpleX Localizations/pl.xcloc/Source Contents/Shared/Assets.xcassets/Contents.json create mode 100644 apps/ios/SimpleX Localizations/pl.xcloc/Source Contents/SimpleX NSE/en.lproj/InfoPlist.strings create mode 100644 apps/ios/SimpleX Localizations/pl.xcloc/Source Contents/SimpleX NSE/en.lproj/Localizable.strings create mode 100644 apps/ios/SimpleX Localizations/pl.xcloc/Source Contents/en.lproj/Localizable.strings create mode 100644 apps/ios/SimpleX Localizations/pl.xcloc/Source Contents/en.lproj/SimpleX--iOS--InfoPlist.strings create mode 100644 apps/ios/SimpleX Localizations/pl.xcloc/contents.json create mode 100644 apps/ios/SimpleX NSE/pl.lproj/InfoPlist.strings create mode 100644 apps/ios/SimpleX NSE/pl.lproj/Localizable.strings create mode 100644 apps/ios/pl.lproj/Localizable.strings create mode 100644 apps/ios/pl.lproj/SimpleX--iOS--InfoPlist.strings diff --git a/README.md b/README.md index b976991e83..abd882b7c6 100644 --- a/README.md +++ b/README.md @@ -86,10 +86,11 @@ Join our translators to help SimpleX grow! |🇫🇷 fr|Français |[ishi_sama](https://github.com/ishi-sama)|[![android app](https://hosted.weblate.org/widgets/simplex-chat/fr/android/svg-badge.svg)](https://hosted.weblate.org/projects/simplex-chat/android/fr/)
[![ios app](https://hosted.weblate.org/widgets/simplex-chat/fr/ios/svg-badge.svg)](https://hosted.weblate.org/projects/simplex-chat/ios/fr/)|[![website](https://hosted.weblate.org/widgets/simplex-chat/fr/website/svg-badge.svg)](https://hosted.weblate.org/projects/simplex-chat/website/fr/)|[✓](https://github.com/simplex-chat/simplex-chat/tree/master/docs/lang/fr)| |🇮🇹 it|Italiano |[unbranched](https://github.com/unbranched)|[![android app](https://hosted.weblate.org/widgets/simplex-chat/it/android/svg-badge.svg)](https://hosted.weblate.org/projects/simplex-chat/android/it/)
[![ios app](https://hosted.weblate.org/widgets/simplex-chat/it/ios/svg-badge.svg)](https://hosted.weblate.org/projects/simplex-chat/ios/it/)|[![website](https://hosted.weblate.org/widgets/simplex-chat/it/website/svg-badge.svg)](https://hosted.weblate.org/projects/simplex-chat/website/it/)|| |🇳🇱 nl|Nederlands|[mika-nl](https://github.com/mika-nl)|[![android app](https://hosted.weblate.org/widgets/simplex-chat/nl/android/svg-badge.svg)](https://hosted.weblate.org/projects/simplex-chat/android/nl/)
[![ios app](https://hosted.weblate.org/widgets/simplex-chat/nl/ios/svg-badge.svg)](https://hosted.weblate.org/projects/simplex-chat/ios/nl/)|[![website](https://hosted.weblate.org/widgets/simplex-chat/nl/website/svg-badge.svg)](https://hosted.weblate.org/projects/simplex-chat/website/nl/)|| +|🇵🇱 pl|Polski |[BxOxSxS](https://github.com/BxOxSxS)|[![android app](https://hosted.weblate.org/widgets/simplex-chat/pl/android/svg-badge.svg)](https://hosted.weblate.org/projects/simplex-chat/android/ru/)
[![ios app](https://hosted.weblate.org/widgets/simplex-chat/ru/ios/svg-badge.svg)](https://hosted.weblate.org/projects/simplex-chat/ios/pl/)||| |🇷🇺 ru|Русский ||[![android app](https://hosted.weblate.org/widgets/simplex-chat/ru/android/svg-badge.svg)](https://hosted.weblate.org/projects/simplex-chat/android/ru/)
[![ios app](https://hosted.weblate.org/widgets/simplex-chat/ru/ios/svg-badge.svg)](https://hosted.weblate.org/projects/simplex-chat/ios/ru/)||| |🇨🇳 zh-CHS|简体中文|[sith-on-mars](https://github.com/sith-on-mars)

[Float-hu](https://github.com/Float-hu)|[![android app](https://hosted.weblate.org/widgets/simplex-chat/zh_Hans/android/svg-badge.svg)](https://hosted.weblate.org/projects/simplex-chat/android/zh_Hans/)
[![ios app](https://hosted.weblate.org/widgets/simplex-chat/zh_Hans/ios/svg-badge.svg)](https://hosted.weblate.org/projects/simplex-chat/ios/zh_Hans/)
 |

[![website](https://hosted.weblate.org/widgets/simplex-chat/zh_Hans/website/svg-badge.svg)](https://hosted.weblate.org/projects/simplex-chat/website/zh_Hans/)|| -Languages in progress: Arabic, Hindi, Japanese, Spanish and [many others](https://hosted.weblate.org/projects/simplex-chat/#languages). We will be adding more languages as some of the already added are completed – please suggest new languages, review the [translation guide](./docs/TRANSLATIONS.md) and get in touch with us! +Languages in progress: Arabic, Japanese, Korean, Portuguese and [others](https://hosted.weblate.org/projects/simplex-chat/#languages). We will be adding more languages as some of the already added are completed – please suggest new languages, review the [translation guide](./docs/TRANSLATIONS.md) and get in touch with us! ## Contribute diff --git a/apps/android/app/build.gradle b/apps/android/app/build.gradle index 86834a8547..2028d9d4a8 100644 --- a/apps/android/app/build.gradle +++ b/apps/android/app/build.gradle @@ -77,7 +77,7 @@ android { def isBundle = gradle.getStartParameter().taskNames.find({ it.toLowerCase().contains("bundle") }) != null // if (isRelease) { // Comma separated list of languages that will be included in the apk - android.defaultConfig.resConfigs("en", "cs", "de", "es", "fr", "it", "nl", "ru", "zh-rCN") + android.defaultConfig.resConfigs("en", "cs", "de", "es", "fr", "it", "nl", "pl", "ru", "zh-rCN") // } if (isBundle) { defaultConfig.ndk.abiFilters 'arm64-v8a', 'armeabi-v7a' diff --git a/apps/android/app/src/main/java/chat/simplex/app/views/usersettings/Appearance.kt b/apps/android/app/src/main/java/chat/simplex/app/views/usersettings/Appearance.kt index 827d5e8836..da340dc890 100644 --- a/apps/android/app/src/main/java/chat/simplex/app/views/usersettings/Appearance.kt +++ b/apps/android/app/src/main/java/chat/simplex/app/views/usersettings/Appearance.kt @@ -236,6 +236,7 @@ private fun LangSelector(state: State, onSelected: (String) -> Unit) { "fr" to "Français", "it" to "Italiano", "nl" to "Nederlands", + "pl" to "Polski", "ru" to "Русский", "zh-CN" to "简体中文" ) diff --git a/apps/ios/SimpleX Localizations/pl.xcloc/Localized Contents/Shared/Assets.xcassets/AccentColor.colorset/Contents.json b/apps/ios/SimpleX Localizations/pl.xcloc/Localized Contents/Shared/Assets.xcassets/AccentColor.colorset/Contents.json new file mode 100644 index 0000000000..66e480e241 --- /dev/null +++ b/apps/ios/SimpleX Localizations/pl.xcloc/Localized Contents/Shared/Assets.xcassets/AccentColor.colorset/Contents.json @@ -0,0 +1,15 @@ +{ + "colors" : [ + { + "idiom" : "universal", + "locale" : "pl" + } + ], + "properties" : { + "localizable" : true + }, + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/apps/ios/SimpleX Localizations/pl.xcloc/Localized Contents/Shared/Assets.xcassets/Contents.json b/apps/ios/SimpleX Localizations/pl.xcloc/Localized Contents/Shared/Assets.xcassets/Contents.json new file mode 100644 index 0000000000..73c00596a7 --- /dev/null +++ b/apps/ios/SimpleX Localizations/pl.xcloc/Localized Contents/Shared/Assets.xcassets/Contents.json @@ -0,0 +1,6 @@ +{ + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/apps/ios/SimpleX Localizations/pl.xcloc/Source Contents/Shared/Assets.xcassets/AccentColor.colorset/Contents.json b/apps/ios/SimpleX Localizations/pl.xcloc/Source Contents/Shared/Assets.xcassets/AccentColor.colorset/Contents.json new file mode 100644 index 0000000000..aaa7f79bc8 --- /dev/null +++ b/apps/ios/SimpleX Localizations/pl.xcloc/Source Contents/Shared/Assets.xcassets/AccentColor.colorset/Contents.json @@ -0,0 +1,23 @@ +{ + "colors" : [ + { + "color" : { + "color-space" : "srgb", + "components" : { + "red" : "0.000", + "alpha" : "1.000", + "blue" : "1.000", + "green" : "0.533" + } + }, + "idiom" : "universal" + } + ], + "properties" : { + "localizable" : true + }, + "info" : { + "version" : 1, + "author" : "xcode" + } +} \ No newline at end of file diff --git a/apps/ios/SimpleX Localizations/pl.xcloc/Source Contents/Shared/Assets.xcassets/Contents.json b/apps/ios/SimpleX Localizations/pl.xcloc/Source Contents/Shared/Assets.xcassets/Contents.json new file mode 100644 index 0000000000..73c00596a7 --- /dev/null +++ b/apps/ios/SimpleX Localizations/pl.xcloc/Source Contents/Shared/Assets.xcassets/Contents.json @@ -0,0 +1,6 @@ +{ + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/apps/ios/SimpleX Localizations/pl.xcloc/Source Contents/SimpleX NSE/en.lproj/InfoPlist.strings b/apps/ios/SimpleX Localizations/pl.xcloc/Source Contents/SimpleX NSE/en.lproj/InfoPlist.strings new file mode 100644 index 0000000000..124ddbcc33 --- /dev/null +++ b/apps/ios/SimpleX Localizations/pl.xcloc/Source Contents/SimpleX NSE/en.lproj/InfoPlist.strings @@ -0,0 +1,6 @@ +/* Bundle display name */ +"CFBundleDisplayName" = "SimpleX NSE"; +/* Bundle name */ +"CFBundleName" = "SimpleX NSE"; +/* Copyright (human-readable) */ +"NSHumanReadableCopyright" = "Copyright © 2022 SimpleX Chat. All rights reserved."; diff --git a/apps/ios/SimpleX Localizations/pl.xcloc/Source Contents/SimpleX NSE/en.lproj/Localizable.strings b/apps/ios/SimpleX Localizations/pl.xcloc/Source Contents/SimpleX NSE/en.lproj/Localizable.strings new file mode 100644 index 0000000000..8b13789179 --- /dev/null +++ b/apps/ios/SimpleX Localizations/pl.xcloc/Source Contents/SimpleX NSE/en.lproj/Localizable.strings @@ -0,0 +1 @@ + diff --git a/apps/ios/SimpleX Localizations/pl.xcloc/Source Contents/en.lproj/Localizable.strings b/apps/ios/SimpleX Localizations/pl.xcloc/Source Contents/en.lproj/Localizable.strings new file mode 100644 index 0000000000..cf485752ea --- /dev/null +++ b/apps/ios/SimpleX Localizations/pl.xcloc/Source Contents/en.lproj/Localizable.strings @@ -0,0 +1,30 @@ +/* No comment provided by engineer. */ +"_italic_" = "\\_italic_"; + +/* No comment provided by engineer. */ +"**Add new contact**: to create your one-time QR Code for your contact." = "**Add new contact**: to create your one-time QR Code or link for your contact."; + +/* No comment provided by engineer. */ +"*bold*" = "\\*bold*"; + +/* No comment provided by engineer. */ +"`a + b`" = "\\`a + b`"; + +/* No comment provided by engineer. */ +"~strike~" = "\\~strike~"; + +/* call status */ +"connecting call" = "connecting call…"; + +/* No comment provided by engineer. */ +"Connecting server…" = "Connecting to server…"; + +/* No comment provided by engineer. */ +"Connecting server… (error: %@)" = "Connecting to server… (error: %@)"; + +/* rcv group event chat item */ +"member connected" = "connected"; + +/* No comment provided by engineer. */ +"No group!" = "Group not found!"; + diff --git a/apps/ios/SimpleX Localizations/pl.xcloc/Source Contents/en.lproj/SimpleX--iOS--InfoPlist.strings b/apps/ios/SimpleX Localizations/pl.xcloc/Source Contents/en.lproj/SimpleX--iOS--InfoPlist.strings new file mode 100644 index 0000000000..3af673b19f --- /dev/null +++ b/apps/ios/SimpleX Localizations/pl.xcloc/Source Contents/en.lproj/SimpleX--iOS--InfoPlist.strings @@ -0,0 +1,10 @@ +/* Bundle name */ +"CFBundleName" = "SimpleX"; +/* Privacy - Camera Usage Description */ +"NSCameraUsageDescription" = "SimpleX needs camera access to scan QR codes to connect to other users and for video calls."; +/* Privacy - Face ID Usage Description */ +"NSFaceIDUsageDescription" = "SimpleX uses Face ID for local authentication"; +/* Privacy - Microphone Usage Description */ +"NSMicrophoneUsageDescription" = "SimpleX needs microphone access for audio and video calls, and to record voice messages."; +/* Privacy - Photo Library Additions Usage Description */ +"NSPhotoLibraryAddUsageDescription" = "SimpleX needs access to Photo Library for saving captured and received media"; diff --git a/apps/ios/SimpleX Localizations/pl.xcloc/contents.json b/apps/ios/SimpleX Localizations/pl.xcloc/contents.json new file mode 100644 index 0000000000..428a0ee109 --- /dev/null +++ b/apps/ios/SimpleX Localizations/pl.xcloc/contents.json @@ -0,0 +1,12 @@ +{ + "developmentRegion" : "en", + "project" : "SimpleX.xcodeproj", + "targetLocale" : "pl", + "toolInfo" : { + "toolBuildNumber" : "14C18", + "toolID" : "com.apple.dt.xcode", + "toolName" : "Xcode", + "toolVersion" : "14.2" + }, + "version" : "1.0" +} \ No newline at end of file diff --git a/apps/ios/SimpleX NSE/pl.lproj/InfoPlist.strings b/apps/ios/SimpleX NSE/pl.lproj/InfoPlist.strings new file mode 100644 index 0000000000..844f6b15c4 --- /dev/null +++ b/apps/ios/SimpleX NSE/pl.lproj/InfoPlist.strings @@ -0,0 +1,9 @@ +/* Bundle display name */ +"CFBundleDisplayName" = "SimpleX NSE"; + +/* Bundle name */ +"CFBundleName" = "SimpleX NSE"; + +/* Copyright (human-readable) */ +"NSHumanReadableCopyright" = "Copyright © 2022 SimpleX Chat. Wszelkie prawa zastrzeżone."; + diff --git a/apps/ios/SimpleX NSE/pl.lproj/Localizable.strings b/apps/ios/SimpleX NSE/pl.lproj/Localizable.strings new file mode 100644 index 0000000000..8b13789179 --- /dev/null +++ b/apps/ios/SimpleX NSE/pl.lproj/Localizable.strings @@ -0,0 +1 @@ + diff --git a/apps/ios/SimpleX.xcodeproj/project.pbxproj b/apps/ios/SimpleX.xcodeproj/project.pbxproj index 4e3a1b7dd0..c83afb1fd7 100644 --- a/apps/ios/SimpleX.xcodeproj/project.pbxproj +++ b/apps/ios/SimpleX.xcodeproj/project.pbxproj @@ -302,6 +302,8 @@ 5C65F341297D3F3600B67AF3 /* VersionView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = VersionView.swift; sourceTree = ""; }; 5C6AD81227A834E300348BD7 /* NewChatButton.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NewChatButton.swift; sourceTree = ""; }; 5C6BA666289BD954009B8ECC /* DismissSheets.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DismissSheets.swift; sourceTree = ""; }; + 5C6D183229E93FBA00D430B3 /* pl */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = pl; path = "pl.lproj/SimpleX--iOS--InfoPlist.strings"; sourceTree = ""; }; + 5C6D183329E93FBA00D430B3 /* pl */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = pl; path = pl.lproj/InfoPlist.strings; sourceTree = ""; }; 5C7031152953C97F00150A12 /* CIFeaturePreferenceView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CIFeaturePreferenceView.swift; sourceTree = ""; }; 5C7505A127B65FDB00BE3227 /* CIMetaView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CIMetaView.swift; sourceTree = ""; }; 5C7505A427B679EE00BE3227 /* NavLinkPlain.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NavLinkPlain.swift; sourceTree = ""; }; @@ -343,6 +345,8 @@ 5CA85D0B297218AA0095AF72 /* it */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = it; path = it.lproj/Localizable.strings; sourceTree = ""; }; 5CA85D0C297219EF0095AF72 /* it */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = it; path = "it.lproj/SimpleX--iOS--InfoPlist.strings"; sourceTree = ""; }; 5CA85D0D297219EF0095AF72 /* it */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = it; path = it.lproj/InfoPlist.strings; sourceTree = ""; }; + 5CAB912529E93F9400F34A95 /* pl */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = pl; path = pl.lproj/Localizable.strings; sourceTree = ""; }; + 5CAB912629E93F9400F34A95 /* pl */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = pl; path = pl.lproj/Localizable.strings; sourceTree = ""; }; 5CADE79929211BB900072E13 /* PreferencesView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PreferencesView.swift; sourceTree = ""; }; 5CADE79B292131E900072E13 /* ContactPreferencesView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ContactPreferencesView.swift; sourceTree = ""; }; 5CB0BA872826CB3A00B3292C /* ru */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ru; path = ru.lproj/InfoPlist.strings; sourceTree = ""; }; @@ -981,6 +985,7 @@ cs, "zh-Hans", es, + pl, ); mainGroup = 5CA059BD279559F40002BEB4; packageReferences = ( @@ -1252,6 +1257,7 @@ 5C8B41CC29AF44CF00888272 /* cs */, 5C65DAE729C771B9003CEE45 /* zh-Hans */, 5C65DAED29CB8908003CEE45 /* es */, + 5C6D183329E93FBA00D430B3 /* pl */, ); name = InfoPlist.strings; sourceTree = ""; @@ -1268,6 +1274,7 @@ 5C8B41CA29AF41BC00888272 /* cs */, 5C65DAE529C77136003CEE45 /* zh-Hans */, 5C65DAEB29CB8867003CEE45 /* es */, + 5CAB912629E93F9400F34A95 /* pl */, ); name = Localizable.strings; sourceTree = ""; @@ -1284,6 +1291,7 @@ 5C8B41C929AF41BC00888272 /* cs */, 5C65DAE429C77136003CEE45 /* zh-Hans */, 5C65DAEA29CB8867003CEE45 /* es */, + 5CAB912529E93F9400F34A95 /* pl */, ); name = Localizable.strings; sourceTree = ""; @@ -1299,6 +1307,7 @@ 5C8B41CB29AF44CF00888272 /* cs */, 5C65DAE629C771B9003CEE45 /* zh-Hans */, 5C65DAEC29CB8908003CEE45 /* es */, + 5C6D183229E93FBA00D430B3 /* pl */, ); name = "SimpleX--iOS--InfoPlist.strings"; sourceTree = ""; diff --git a/apps/ios/pl.lproj/Localizable.strings b/apps/ios/pl.lproj/Localizable.strings new file mode 100644 index 0000000000..c8f52dd87b --- /dev/null +++ b/apps/ios/pl.lproj/Localizable.strings @@ -0,0 +1,3020 @@ +/* No comment provided by engineer. */ +"\n" = "\n"; + +/* No comment provided by engineer. */ +" " = " "; + +/* No comment provided by engineer. */ +" " = " "; + +/* No comment provided by engineer. */ +" " = " "; + +/* No comment provided by engineer. */ +" (" = " ("; + +/* No comment provided by engineer. */ +" (can be copied)" = " (można skopiować)"; + +/* No comment provided by engineer. */ +"_italic_" = "\\_kursywa_"; + +/* No comment provided by engineer. */ +", " = ", "; + +/* No comment provided by engineer. */ +": " = ": "; + +/* No comment provided by engineer. */ +"!1 colored!" = "!1 kolorowy!"; + +/* No comment provided by engineer. */ +"." = "."; + +/* No comment provided by engineer. */ +"(" = "("; + +/* No comment provided by engineer. */ +")" = ")"; + +/* No comment provided by engineer. */ +"[Contribute](https://github.com/simplex-chat/simplex-chat#contribute)" = "[Przyczyń się](https://github.com/simplex-chat/simplex-chat#contribute)"; + +/* No comment provided by engineer. */ +"[Send us email](mailto:chat@simplex.chat)" = "[Wyślij do nas email](mailto:chat@simplex.chat)"; + +/* No comment provided by engineer. */ +"[Star on GitHub](https://github.com/simplex-chat/simplex-chat)" = "[Daj gwiazdkę na GitHub](https://github.com/simplex-chat/simplex-chat)"; + +/* No comment provided by engineer. */ +"**Add new contact**: to create your one-time QR Code for your contact." = "**Dodaj nowy kontakt**: aby stworzyć swój jednorazowy kod QR lub link dla kontaktu."; + +/* No comment provided by engineer. */ +"**Create link / QR code** for your contact to use." = "**Utwórz link / kod QR**, aby Twój kontakt mógł z niego skorzystać."; + +/* No comment provided by engineer. */ +"**e2e encrypted** audio call" = "**szyfrowane e2e** połączenie audio"; + +/* No comment provided by engineer. */ +"**e2e encrypted** video call" = "**szyfrowane e2e** połączenie wideo"; + +/* No comment provided by engineer. */ +"**More private**: check new messages every 20 minutes. Device token is shared with SimpleX Chat server, but not how many contacts or messages you have." = "**Bardziej prywatny**: sprawdzanie nowych wiadomości co 20 minut. Token urządzenia jest współdzielony z serwerem SimpleX Chat, ale nie informacje o liczbie kontaktów lub wiadomości."; + +/* No comment provided by engineer. */ +"**Most private**: do not use SimpleX Chat notifications server, check messages periodically in the background (depends on how often you use the app)." = "**Najbardziej prywatny**: nie korzystaj z serwera powiadomień SimpleX Chat, sprawdzaj wiadomości okresowo w tle (zależy jak często korzystasz z aplikacji)."; + +/* No comment provided by engineer. */ +"**Paste received link** or open it in the browser and tap **Open in mobile app**." = "**Wklej otrzymany link** lub otwórz go w przeglądarce i dotknij **Otwórz w aplikacji mobilnej**."; + +/* No comment provided by engineer. */ +"**Please note**: you will NOT be able to recover or change passphrase if you lose it." = "**Uwaga**: NIE będziesz w stanie odzyskać lub zmienić hasła, jeśli je stracisz."; + +/* No comment provided by engineer. */ +"**Recommended**: device token and notifications are sent to SimpleX Chat notification server, but not the message content, size or who it is from." = "**Zalecane**: token urządzenia i powiadomienia są wysyłane do serwera powiadomień SimpleX Chat, ale nie treść wiadomości, rozmiar lub od kogo jest."; + +/* No comment provided by engineer. */ +"**Scan QR code**: to connect to your contact in person or via video call." = "**Skanuj kod QR**: aby połączyć się z kontaktem osobiście lub za pomocą połączenia wideo."; + +/* No comment provided by engineer. */ +"**Warning**: Instant push notifications require passphrase saved in Keychain." = "**Uwaga**: Natychmiastowe powiadomienia push wymagają hasła zapisanego w Keychain."; + +/* No comment provided by engineer. */ +"*bold*" = "\\*pogrubiony*"; + +/* No comment provided by engineer. */ +"#secret#" = "#sekret#"; + +/* No comment provided by engineer. */ +"%@" = "%@"; + +/* No comment provided by engineer. */ +"%@ / %@" = "%@ / %@"; + +/* No comment provided by engineer. */ +"%@ %@" = "%@ %@"; + +/* notification title */ +"%@ is connected!" = "%@ jest połączony!"; + +/* No comment provided by engineer. */ +"%@ is not verified" = "%@ nie jest zweryfikowany"; + +/* No comment provided by engineer. */ +"%@ is verified" = "%@ jest zweryfikowany"; + +/* No comment provided by engineer. */ +"%@ servers" = "%@ serwery"; + +/* notification title */ +"%@ wants to connect!" = "%@ chce się połączyć!"; + +/* message ttl */ +"%d days" = "%d dni"; + +/* message ttl */ +"%d hours" = "%d godzin"; + +/* message ttl */ +"%d min" = "%d min"; + +/* message ttl */ +"%d months" = "%d miesięcy"; + +/* message ttl */ +"%d sec" = "%d sek"; + +/* integrity error chat item */ +"%d skipped message(s)" = "%d pominięte wiadomość(i)"; + +/* No comment provided by engineer. */ +"%lld" = "%lld"; + +/* No comment provided by engineer. */ +"%lld %@" = "%lld %@"; + +/* No comment provided by engineer. */ +"%lld contact(s) selected" = "%lld wybrany(e) kontakt(y)"; + +/* No comment provided by engineer. */ +"%lld file(s) with total size of %@" = "%lld plik(i) o całkowitym rozmiarze %@"; + +/* No comment provided by engineer. */ +"%lld members" = "%lld członków"; + +/* No comment provided by engineer. */ +"%lld minutes" = "%lld minut"; + +/* No comment provided by engineer. */ +"%lld second(s)" = "%lld sekund(y)"; + +/* No comment provided by engineer. */ +"%lld seconds" = "%lld sekund"; + +/* No comment provided by engineer. */ +"%lldd" = "%lldd"; + +/* No comment provided by engineer. */ +"%lldh" = "%lldh"; + +/* No comment provided by engineer. */ +"%lldk" = "%lldk"; + +/* No comment provided by engineer. */ +"%lldm" = "%lldm"; + +/* No comment provided by engineer. */ +"%lldmth" = "%lldmies"; + +/* No comment provided by engineer. */ +"%llds" = "%llds"; + +/* No comment provided by engineer. */ +"%lldw" = "%lldt"; + +/* No comment provided by engineer. */ +"`a + b`" = "\\`a + b`"; + +/* No comment provided by engineer. */ +"~strike~" = "\\~strajk~"; + +/* message ttl */ +"1 day" = "1 dzień"; + +/* message ttl */ +"1 hour" = "1 godzina"; + +/* message ttl */ +"1 month" = "1 miesiąc"; + +/* message ttl */ +"1 week" = "1 tydzień"; + +/* message ttl */ +"2 weeks" = "2 tygodnie"; + +/* No comment provided by engineer. */ +"6" = "6"; + +/* notification title */ +"A new contact" = "Nowy kontakt"; + +/* No comment provided by engineer. */ +"A random profile will be sent to the contact that you received this link from" = "Losowy profil zostanie wysłany do kontaktu, od którego otrzymałeś ten link"; + +/* No comment provided by engineer. */ +"A random profile will be sent to your contact" = "Losowy profil zostanie wysłany do Twojego kontaktu"; + +/* No comment provided by engineer. */ +"A separate TCP connection will be used **for each chat profile you have in the app**." = "Oddzielne połączenie TCP będzie używane **dla każdego profilu czatu, który masz w aplikacji**."; + +/* No comment provided by engineer. */ +"A separate TCP connection will be used **for each contact and group member**.\n**Please note**: if you have many connections, your battery and traffic consumption can be substantially higher and some connections may fail." = "Oddzielne połączenie TCP będzie używane **dla każdego kontaktu i członka grupy**.\n**Uwaga**: jeśli masz wiele połączeń, zużycie baterii i ruchu może być znacznie wyższe, a niektóre połączenia mogą się nie udać."; + +/* No comment provided by engineer. */ +"About SimpleX" = "O SimpleX"; + +/* No comment provided by engineer. */ +"About SimpleX Chat" = "O SimpleX Chat"; + +/* No comment provided by engineer. */ +"above, then choose:" = "powyżej, a następnie wybierz:"; + +/* No comment provided by engineer. */ +"Accent color" = "Kolor akcentu"; + +/* accept contact request via notification + accept incoming call via notification */ +"Accept" = "Akceptuj"; + +/* No comment provided by engineer. */ +"Accept contact" = "Akceptuj kontakt"; + +/* notification body */ +"Accept contact request from %@?" = "Zaakceptuj prośbę o kontakt od %@?"; + +/* No comment provided by engineer. */ +"Accept incognito" = "Akceptuj incognito"; + +/* No comment provided by engineer. */ +"Accept requests" = "Akceptuj prośby"; + +/* call status */ +"accepted call" = "zaakceptowane połączenie"; + +/* No comment provided by engineer. */ +"Add preset servers" = "Dodaj gotowe serwery"; + +/* No comment provided by engineer. */ +"Add profile" = "Dodaj profil"; + +/* No comment provided by engineer. */ +"Add server…" = "Dodaj serwer…"; + +/* No comment provided by engineer. */ +"Add servers by scanning QR codes." = "Dodaj serwery, skanując kody QR."; + +/* No comment provided by engineer. */ +"Add to another device" = "Dodaj do innego urządzenia"; + +/* No comment provided by engineer. */ +"Add welcome message" = "Dodaj wiadomość powitalną"; + +/* member role */ +"admin" = "administrator"; + +/* No comment provided by engineer. */ +"Admins can create the links to join groups." = "Administratorzy mogą tworzyć linki do dołączania do grup."; + +/* No comment provided by engineer. */ +"Advanced network settings" = "Zaawansowane ustawienia sieci"; + +/* No comment provided by engineer. */ +"All chats and messages will be deleted - this cannot be undone!" = "Wszystkie czaty i wiadomości zostaną usunięte - nie można tego cofnąć!"; + +/* No comment provided by engineer. */ +"All group members will remain connected." = "Wszyscy członkowie grupy pozostaną połączeni."; + +/* No comment provided by engineer. */ +"All messages will be deleted - this cannot be undone! The messages will be deleted ONLY for you." = "Wszystkie wiadomości zostaną usunięte - nie można tego cofnąć! Wiadomości zostaną usunięte TYLKO dla Ciebie."; + +/* No comment provided by engineer. */ +"All your contacts will remain connected" = "Wszystkie Twoje kontakty pozostaną połączone"; + +/* No comment provided by engineer. */ +"Allow" = "Pozwól"; + +/* No comment provided by engineer. */ +"Allow disappearing messages only if your contact allows it to you." = "Zezwól na znikające wiadomości tylko wtedy, gdy Twój kontakt Ci na to pozwoli."; + +/* No comment provided by engineer. */ +"Allow irreversible message deletion only if your contact allows it to you." = "Zezwalaj na nieodwracalne usuwanie wiadomości tylko wtedy, gdy Twój kontakt Ci na to pozwoli."; + +/* No comment provided by engineer. */ +"Allow sending direct messages to members." = "Zezwalaj na wysyłanie bezpośrednich wiadomości do członków."; + +/* No comment provided by engineer. */ +"Allow sending disappearing messages." = "Zezwól na wysyłanie znikających wiadomości."; + +/* No comment provided by engineer. */ +"Allow to irreversibly delete sent messages." = "Zezwól na nieodwracalne usunięcie wysłanych wiadomości."; + +/* No comment provided by engineer. */ +"Allow to send voice messages." = "Zezwól na wysyłanie wiadomości głosowych."; + +/* No comment provided by engineer. */ +"Allow voice messages only if your contact allows them." = "Zezwalaj na wiadomości głosowe tylko wtedy, gdy Twój kontakt na nie pozwala."; + +/* No comment provided by engineer. */ +"Allow voice messages?" = "Zezwolić na wiadomości głosowe?"; + +/* No comment provided by engineer. */ +"Allow your contacts to irreversibly delete sent messages." = "Zezwól swoim kontaktom na nieodwracalne usuwanie wysłanych wiadomości."; + +/* No comment provided by engineer. */ +"Allow your contacts to send disappearing messages." = "Zezwól swoim kontaktom na wysyłanie znikających wiadomości."; + +/* No comment provided by engineer. */ +"Allow your contacts to send voice messages." = "Zezwól swoim kontaktom na wysyłanie wiadomości głosowych."; + +/* No comment provided by engineer. */ +"Already connected?" = "Już połączony?"; + +/* pref value */ +"always" = "zawsze"; + +/* No comment provided by engineer. */ +"Always use relay" = "Zawsze używaj przekaźnika"; + +/* No comment provided by engineer. */ +"Answer call" = "Odbierz połączenie"; + +/* No comment provided by engineer. */ +"App build: %@" = "Kompilacja aplikacji: %@"; + +/* No comment provided by engineer. */ +"App icon" = "Ikona aplikacji"; + +/* No comment provided by engineer. */ +"App version" = "Wersja aplikacji"; + +/* No comment provided by engineer. */ +"App version: v%@" = "Wersja aplikacji: v%@"; + +/* No comment provided by engineer. */ +"Appearance" = "Wygląd"; + +/* No comment provided by engineer. */ +"Attach" = "Dołącz"; + +/* No comment provided by engineer. */ +"Audio & video calls" = "Połączenia audio i wideo"; + +/* No comment provided by engineer. */ +"Audio and video calls" = "Połączenia audio i wideo"; + +/* No comment provided by engineer. */ +"audio call (not e2e encrypted)" = "połączenie audio (nie szyfrowane e2e)"; + +/* PIN entry */ +"Authentication cancelled" = "Uwierzytelnianie anulowane"; + +/* No comment provided by engineer. */ +"Authentication failed" = "Uwierzytelnianie nie powiodło się"; + +/* No comment provided by engineer. */ +"Authentication is required before the call is connected, but you may miss calls." = "Uwierzytelnienie jest wymagane przed połączeniem, ale możesz przegapić połączenia."; + +/* No comment provided by engineer. */ +"Authentication unavailable" = "Uwierzytelnianie niedostępne"; + +/* No comment provided by engineer. */ +"Auto-accept contact requests" = "Automatyczne akceptowanie próśb o kontakt"; + +/* No comment provided by engineer. */ +"Auto-accept images" = "Automatyczne akceptowanie obrazów"; + +/* No comment provided by engineer. */ +"Automatically" = "Automatycznie"; + +/* No comment provided by engineer. */ +"Back" = "Wstecz"; + +/* integrity error chat item */ +"bad message hash" = "zły hash wiadomości"; + +/* integrity error chat item */ +"bad message ID" = "zły identyfikator wiadomości"; + +/* No comment provided by engineer. */ +"bold" = "pogrubiona"; + +/* No comment provided by engineer. */ +"Both you and your contact can irreversibly delete sent messages." = "Zarówno Ty, jak i Twój kontakt możecie nieodwracalnie usunąć wysłane wiadomości."; + +/* No comment provided by engineer. */ +"Both you and your contact can send disappearing messages." = "Zarówno Ty, jak i Twój kontakt możecie wysyłać znikające wiadomości."; + +/* No comment provided by engineer. */ +"Both you and your contact can send voice messages." = "Zarówno Ty, jak i Twój kontakt możecie wysyłać wiadomości głosowe."; + +/* No comment provided by engineer. */ +"By chat profile (default) or [by connection](https://simplex.chat/blog/20230204-simplex-chat-v4-5-user-chat-profiles.html#transport-isolation) (BETA)." = "Według profilu czatu (domyślnie) lub [według połączenia](https://simplex.chat/blog/20230204-simplex-chat-v4-5-user-chat-profiles.html#transport-isolation) (BETA)."; + +/* No comment provided by engineer. */ +"Call already ended!" = "Połączenie już zakończone!"; + +/* call status */ +"call error" = "błąd połączenia"; + +/* call status */ +"call in progress" = "połączenie w toku"; + +/* call status */ +"calling…" = "dzwonie…"; + +/* No comment provided by engineer. */ +"Calls" = "Połączenia"; + +/* No comment provided by engineer. */ +"Can't delete user profile!" = "Nie można usunąć profilu użytkownika!"; + +/* No comment provided by engineer. */ +"Can't invite contact!" = "Nie można zaprosić kontaktu!"; + +/* No comment provided by engineer. */ +"Can't invite contacts!" = "Nie można zaprosić kontaktów!"; + +/* chat item action */ +"Cancel" = "Anuluj"; + +/* No comment provided by engineer. */ +"Cancel file transfer?" = "Anulować transfer plików?"; + +/* feature offered item */ +"cancelled %@" = "anulowany %@"; + +/* No comment provided by engineer. */ +"Cannot access keychain to save database password" = "Nie można uzyskać dostępu do pęku kluczy, aby zapisać hasło do bazy danych"; + +/* No comment provided by engineer. */ +"Cannot receive file" = "Nie można odebrać pliku"; + +/* No comment provided by engineer. */ +"Change" = "Zmień"; + +/* No comment provided by engineer. */ +"Change database passphrase?" = "Zmienić hasło bazy danych?"; + +/* authentication reason */ +"Change lock mode" = "Zmień tryb blokady"; + +/* No comment provided by engineer. */ +"Change member role?" = "Zmienić rolę członka?"; + +/* authentication reason */ +"Change passcode" = "Zmień pin"; + +/* No comment provided by engineer. */ +"Change Passcode" = "Zmień kod dostępu"; + +/* No comment provided by engineer. */ +"Change receiving address" = "Zmień adres odbioru"; + +/* No comment provided by engineer. */ +"Change receiving address?" = "Zmienić adres odbioru?"; + +/* No comment provided by engineer. */ +"Change role" = "Zmień rolę"; + +/* chat item text */ +"changed address for you" = "zmieniono adres dla Ciebie"; + +/* rcv group event chat item */ +"changed role of %@ to %@" = "zmieniono rolę %1$@ na %2$@"; + +/* rcv group event chat item */ +"changed your role to %@" = "zmieniono Twoją rolę na %@"; + +/* chat item text */ +"changing address for %@..." = "zmienienie adresu dla %@..."; + +/* chat item text */ +"changing address..." = "zmienienie adresu..."; + +/* No comment provided by engineer. */ +"Chat archive" = "Archiwum czatu"; + +/* No comment provided by engineer. */ +"Chat console" = "Konsola czatu"; + +/* No comment provided by engineer. */ +"Chat database" = "Baza danych czatu"; + +/* No comment provided by engineer. */ +"Chat database deleted" = "Baza danych czatu usunięta"; + +/* No comment provided by engineer. */ +"Chat database imported" = "Zaimportowano bazę danych czatu"; + +/* No comment provided by engineer. */ +"Chat is running" = "Czat jest uruchomiony"; + +/* No comment provided by engineer. */ +"Chat is stopped" = "Czat jest zatrzymany"; + +/* No comment provided by engineer. */ +"Chat preferences" = "Preferencje czatu"; + +/* No comment provided by engineer. */ +"Chats" = "Czaty"; + +/* No comment provided by engineer. */ +"Check server address and try again." = "Sprawdź adres serwera i spróbuj ponownie."; + +/* No comment provided by engineer. */ +"Chinese and Spanish interface" = "Chiński i hiszpański interfejs"; + +/* No comment provided by engineer. */ +"Choose file" = "Wybierz plik"; + +/* No comment provided by engineer. */ +"Choose from library" = "Wybierz z biblioteki"; + +/* No comment provided by engineer. */ +"Clear" = "Wyczyść"; + +/* No comment provided by engineer. */ +"Clear conversation" = "Wyczyść rozmowę"; + +/* No comment provided by engineer. */ +"Clear conversation?" = "Wyczyścić rozmowę?"; + +/* No comment provided by engineer. */ +"Clear verification" = "Wyczyść weryfikację"; + +/* No comment provided by engineer. */ +"colored" = "kolorowy"; + +/* No comment provided by engineer. */ +"Colors" = "Kolory"; + +/* server test step */ +"Compare file" = "Porównaj plik"; + +/* No comment provided by engineer. */ +"Compare security codes with your contacts." = "Porównaj kody bezpieczeństwa ze swoimi kontaktami."; + +/* No comment provided by engineer. */ +"complete" = "kompletny"; + +/* No comment provided by engineer. */ +"Configure ICE servers" = "Skonfiguruj serwery ICE"; + +/* No comment provided by engineer. */ +"Confirm" = "Potwierdź"; + +/* No comment provided by engineer. */ +"Confirm database upgrades" = "Potwierdź aktualizacje bazy danych"; + +/* No comment provided by engineer. */ +"Confirm new passphrase…" = "Potwierdź nowe hasło…"; + +/* No comment provided by engineer. */ +"Confirm Passcode" = "Potwierdź Pin"; + +/* No comment provided by engineer. */ +"Confirm password" = "Potwierdź hasło"; + +/* server test step */ +"Connect" = "Połącz"; + +/* No comment provided by engineer. */ +"connect to SimpleX Chat developers." = "połącz się z deweloperami SimpleX Chat."; + +/* No comment provided by engineer. */ +"Connect via contact link?" = "Połączyć się przez link kontaktowy?"; + +/* No comment provided by engineer. */ +"Connect via group link?" = "Połącz się przez link grupowy?"; + +/* No comment provided by engineer. */ +"Connect via link" = "Połącz się przez link"; + +/* No comment provided by engineer. */ +"Connect via link / QR code" = "Połącz się przez link / kod QR"; + +/* No comment provided by engineer. */ +"Connect via one-time link?" = "Połączyć się przez jednorazowy link?"; + +/* No comment provided by engineer. */ +"connected" = "połączony"; + +/* No comment provided by engineer. */ +"connecting" = "łączenie"; + +/* No comment provided by engineer. */ +"connecting (accepted)" = "łączenie (zaakceptowane)"; + +/* No comment provided by engineer. */ +"connecting (announced)" = "łączenie (ogłoszone)"; + +/* No comment provided by engineer. */ +"connecting (introduced)" = "łączenie (wprowadzone)"; + +/* No comment provided by engineer. */ +"connecting (introduction invitation)" = "łączenie (wprowadzono zaproszenie)"; + +/* call status */ +"connecting call" = "łączenie połączenia…"; + +/* No comment provided by engineer. */ +"Connecting server…" = "Łączenie z serwerem…"; + +/* No comment provided by engineer. */ +"Connecting server… (error: %@)" = "Łączenie z serwerem... (błąd: %@)"; + +/* chat list item title */ +"connecting…" = "łączenie…"; + +/* No comment provided by engineer. */ +"Connection" = "Połączenie"; + +/* No comment provided by engineer. */ +"Connection error" = "Błąd połączenia"; + +/* No comment provided by engineer. */ +"Connection error (AUTH)" = "Błąd połączenia (UWIERZYTELNIANIE)"; + +/* chat list item title (it should not be shown */ +"connection established" = "połączenie ustanowione"; + +/* No comment provided by engineer. */ +"Connection request" = "Prośba o połączenie"; + +/* No comment provided by engineer. */ +"Connection request sent!" = "Prośba o połączenie wysłana!"; + +/* No comment provided by engineer. */ +"Connection timeout" = "Czas połączenia minął"; + +/* connection information */ +"connection:%@" = "połączenie: %@"; + +/* No comment provided by engineer. */ +"Contact allows" = "Kontakt pozwala"; + +/* No comment provided by engineer. */ +"Contact already exists" = "Kontakt już istnieje"; + +/* No comment provided by engineer. */ +"Contact and all messages will be deleted - this cannot be undone!" = "Kontakt i wszystkie wiadomości zostaną usunięte - nie można tego cofnąć!"; + +/* No comment provided by engineer. */ +"contact has e2e encryption" = "kontakt posiada szyfrowanie e2e"; + +/* No comment provided by engineer. */ +"contact has no e2e encryption" = "kontakt nie posiada szyfrowania e2e"; + +/* notification */ +"Contact hidden:" = "Kontakt ukryty:"; + +/* notification */ +"Contact is connected" = "Kontakt jest połączony"; + +/* No comment provided by engineer. */ +"Contact is not connected yet!" = "Kontakt nie jest jeszcze połączony!"; + +/* No comment provided by engineer. */ +"Contact name" = "Nazwa kontaktu"; + +/* No comment provided by engineer. */ +"Contact preferences" = "Preferencje kontaktu"; + +/* No comment provided by engineer. */ +"Contact requests" = "Prośby kontaktu"; + +/* No comment provided by engineer. */ +"Contacts can mark messages for deletion; you will be able to view them." = "Kontakty mogą oznaczać wiadomości do usunięcia; będziesz mógł je zobaczyć."; + +/* chat item action */ +"Copy" = "Kopiuj"; + +/* No comment provided by engineer. */ +"Core built at: %@" = "Kompilacja rdzenia: %@"; + +/* No comment provided by engineer. */ +"Core version: v%@" = "Wersja rdzenia: v%@"; + +/* No comment provided by engineer. */ +"Create" = "Utwórz"; + +/* No comment provided by engineer. */ +"Create address" = "Utwórz adres"; + +/* server test step */ +"Create file" = "Utwórz plik"; + +/* No comment provided by engineer. */ +"Create group link" = "Utwórz link do grupy"; + +/* No comment provided by engineer. */ +"Create link" = "Utwórz link"; + +/* No comment provided by engineer. */ +"Create one-time invitation link" = "Utwórz jednorazowy link do zaproszenia"; + +/* server test step */ +"Create queue" = "Utwórz kolejkę"; + +/* No comment provided by engineer. */ +"Create secret group" = "Utwórz tajną grupę"; + +/* No comment provided by engineer. */ +"Create your profile" = "Utwórz swój profil"; + +/* No comment provided by engineer. */ +"Created on %@" = "Utworzony w dniu %@"; + +/* No comment provided by engineer. */ +"creator" = "twórca"; + +/* No comment provided by engineer. */ +"Current Passcode" = "Aktualny Pin"; + +/* No comment provided by engineer. */ +"Current passphrase…" = "Obecne hasło…"; + +/* No comment provided by engineer. */ +"Currently maximum supported file size is %@." = "Obecnie maksymalna obsługiwana wielkość pliku wynosi %@."; + +/* No comment provided by engineer. */ +"Dark" = "Ciemny"; + +/* No comment provided by engineer. */ +"Database downgrade" = "Obniż wersję bazy danych"; + +/* No comment provided by engineer. */ +"Database encrypted!" = "Baza danych zaszyfrowana!"; + +/* No comment provided by engineer. */ +"Database encryption passphrase will be updated and stored in the keychain.\n" = "Hasło szyfrowania bazy danych zostanie zaktualizowane i zapisane w pęku kluczy.\n"; + +/* No comment provided by engineer. */ +"Database encryption passphrase will be updated.\n" = "Hasło szyfrowania bazy danych zostanie zaktualizowane.\n"; + +/* No comment provided by engineer. */ +"Database error" = "Błąd bazy danych"; + +/* No comment provided by engineer. */ +"Database ID" = "ID bazy danych"; + +/* No comment provided by engineer. */ +"Database IDs and Transport isolation option." = "ID bazy danych i opcja izolacji transportu."; + +/* No comment provided by engineer. */ +"Database is encrypted using a random passphrase, you can change it." = "Baza danych jest szyfrowana za pomocą losowego hasła, można je zmienić."; + +/* No comment provided by engineer. */ +"Database is encrypted using a random passphrase. Please change it before exporting." = "Baza danych jest zaszyfrowana przy użyciu losowego hasła. Proszę zmienić je przed eksportem."; + +/* No comment provided by engineer. */ +"Database passphrase" = "Hasło do bazy danych"; + +/* No comment provided by engineer. */ +"Database passphrase & export" = "Hasło do bazy danych i eksport"; + +/* No comment provided by engineer. */ +"Database passphrase is different from saved in the keychain." = "Hasło bazy danych jest inne niż zapisane w pęku kluczy."; + +/* No comment provided by engineer. */ +"Database passphrase is required to open chat." = "Hasło do bazy danych jest wymagane do otwarcia czatu."; + +/* No comment provided by engineer. */ +"Database upgrade" = "Aktualizacja bazy danych"; + +/* No comment provided by engineer. */ +"database version is newer than the app, but no down migration for: %@" = "wersja bazy danych jest nowsza od aplikacji, ale nie ma migracji w dół dla: %@"; + +/* No comment provided by engineer. */ +"Database will be encrypted and the passphrase stored in the keychain.\n" = "Baza danych zostanie zaszyfrowana, a hasło zapisane w pęku kluczy.\n"; + +/* No comment provided by engineer. */ +"Database will be encrypted.\n" = "Baza danych zostanie zaszyfrowana.\n"; + +/* No comment provided by engineer. */ +"Database will be migrated when the app restarts" = "Baza danych zostanie zmigrowana po ponownym uruchomieniu aplikacji"; + +/* No comment provided by engineer. */ +"Decentralized" = "Zdecentralizowane"; + +/* pref value */ +"default (%@)" = "domyślne (%@)"; + +/* chat item action */ +"Delete" = "Usuń"; + +/* No comment provided by engineer. */ +"Delete address" = "Usuń adres"; + +/* No comment provided by engineer. */ +"Delete address?" = "Usunąć adres?"; + +/* No comment provided by engineer. */ +"Delete after" = "Usuń po"; + +/* No comment provided by engineer. */ +"Delete all files" = "Usuń wszystkie pliki"; + +/* No comment provided by engineer. */ +"Delete archive" = "Usuń archiwum"; + +/* No comment provided by engineer. */ +"Delete chat archive?" = "Usunąć archiwum czatu?"; + +/* No comment provided by engineer. */ +"Delete chat profile" = "Usuń profil czatu"; + +/* No comment provided by engineer. */ +"Delete chat profile?" = "Usunąć profil czatu?"; + +/* No comment provided by engineer. */ +"Delete connection" = "Usuń połączenie"; + +/* No comment provided by engineer. */ +"Delete contact" = "Usuń kontakt"; + +/* No comment provided by engineer. */ +"Delete Contact" = "Usuń Kontakt"; + +/* No comment provided by engineer. */ +"Delete contact?" = "Usunąć kontakt?"; + +/* No comment provided by engineer. */ +"Delete database" = "Usuń bazę danych"; + +/* server test step */ +"Delete file" = "Usuń plik"; + +/* No comment provided by engineer. */ +"Delete files and media?" = "Usunąć pliki i media?"; + +/* No comment provided by engineer. */ +"Delete files for all chat profiles" = "Usuń pliki dla wszystkich profili czatu"; + +/* chat feature */ +"Delete for everyone" = "Usuń dla wszystkich"; + +/* No comment provided by engineer. */ +"Delete for me" = "Usuń dla mnie"; + +/* No comment provided by engineer. */ +"Delete group" = "Usuń grupę"; + +/* No comment provided by engineer. */ +"Delete group?" = "Usunąć grupę?"; + +/* No comment provided by engineer. */ +"Delete invitation" = "Usuń zaproszenie"; + +/* No comment provided by engineer. */ +"Delete link" = "Usuń link"; + +/* No comment provided by engineer. */ +"Delete link?" = "Usunąć link?"; + +/* No comment provided by engineer. */ +"Delete member message?" = "Usunąć wiadomość członka?"; + +/* No comment provided by engineer. */ +"Delete message?" = "Usunąć wiadomość?"; + +/* No comment provided by engineer. */ +"Delete messages" = "Usuń wiadomości"; + +/* No comment provided by engineer. */ +"Delete messages after" = "Usuń wiadomości po"; + +/* No comment provided by engineer. */ +"Delete old database" = "Usuń starą bazę danych"; + +/* No comment provided by engineer. */ +"Delete old database?" = "Usunąć starą bazę danych?"; + +/* No comment provided by engineer. */ +"Delete pending connection" = "Usuń oczekujące połączenie"; + +/* No comment provided by engineer. */ +"Delete pending connection?" = "Usunąć oczekujące połączenie?"; + +/* No comment provided by engineer. */ +"Delete profile" = "Usuń profil"; + +/* server test step */ +"Delete queue" = "Usuń kolejkę"; + +/* No comment provided by engineer. */ +"Delete user profile?" = "Usunąć profil użytkownika?"; + +/* deleted chat item */ +"deleted" = "usunięty"; + +/* rcv group event chat item */ +"deleted group" = "usunięta grupa"; + +/* No comment provided by engineer. */ +"Description" = "Opis"; + +/* No comment provided by engineer. */ +"Develop" = "Deweloperskie"; + +/* No comment provided by engineer. */ +"Developer tools" = "Narzędzia deweloperskie"; + +/* No comment provided by engineer. */ +"Device" = "Urządzenie"; + +/* No comment provided by engineer. */ +"Device authentication is disabled. Turning off SimpleX Lock." = "Uwierzytelnianie urządzenia jest wyłączone. Wyłączanie blokady SimpleX."; + +/* No comment provided by engineer. */ +"Device authentication is not enabled. You can turn on SimpleX Lock via Settings, once you enable device authentication." = "Uwierzytelnianie urządzenia nie jest włączone. Możesz włączyć blokadę SimpleX w Ustawieniach po włączeniu uwierzytelniania urządzenia."; + +/* No comment provided by engineer. */ +"different migration in the app/database: %@ / %@" = "różne migracje w aplikacji/bazy danych: %@ / %@"; + +/* No comment provided by engineer. */ +"Different names, avatars and transport isolation." = "Różne nazwy, awatary i izolacja transportu."; + +/* connection level description */ +"direct" = "bezpośredni"; + +/* chat feature */ +"Direct messages" = "Bezpośrednie wiadomości"; + +/* No comment provided by engineer. */ +"Direct messages between members are prohibited in this group." = "Bezpośrednie wiadomości między członkami są zabronione w tej grupie."; + +/* authentication reason */ +"Disable SimpleX Lock" = "Wyłącz blokadę SimpleX"; + +/* chat feature */ +"Disappearing messages" = "Znikające wiadomości"; + +/* No comment provided by engineer. */ +"Disappearing messages are prohibited in this chat." = "Znikające wiadomości są zabronione na tym czacie."; + +/* No comment provided by engineer. */ +"Disappearing messages are prohibited in this group." = "Znikające wiadomości są zabronione w tej grupie."; + +/* server test step */ +"Disconnect" = "Rozłącz"; + +/* No comment provided by engineer. */ +"Display name" = "Wyświetlana nazwa"; + +/* No comment provided by engineer. */ +"Display name:" = "Wyświetlana nazwa:"; + +/* No comment provided by engineer. */ +"Do it later" = "Zrób to później"; + +/* No comment provided by engineer. */ +"Do NOT use SimpleX for emergency calls." = "NIE używaj SimpleX do połączeń alarmowych."; + +/* No comment provided by engineer. */ +"Don't show again" = "Nie pokazuj ponownie"; + +/* No comment provided by engineer. */ +"Downgrade and open chat" = "Obniż wersję i otwórz czat"; + +/* server test step */ +"Download file" = "Pobierz plik"; + +/* No comment provided by engineer. */ +"Duplicate display name!" = "Zduplikowana wyświetlana nazwa!"; + +/* integrity error chat item */ +"duplicate message" = "zduplikowana wiadomość"; + +/* No comment provided by engineer. */ +"e2e encrypted" = "zaszyfrowany e2e"; + +/* chat item action */ +"Edit" = "Edytuj"; + +/* No comment provided by engineer. */ +"Edit group profile" = "Edytuj profil grupy"; + +/* No comment provided by engineer. */ +"Enable" = "Włącz"; + +/* No comment provided by engineer. */ +"Enable automatic message deletion?" = "Czy włączyć automatyczne usuwanie wiadomości?"; + +/* No comment provided by engineer. */ +"Enable instant notifications?" = "Włączyć natychmiastowe powiadomienia?"; + +/* No comment provided by engineer. */ +"Enable lock" = "Włącz blokadę"; + +/* No comment provided by engineer. */ +"Enable notifications" = "Włącz powiadomienia"; + +/* No comment provided by engineer. */ +"Enable periodic notifications?" = "Włączyć okresowe powiadomienia?"; + +/* authentication reason */ +"Enable SimpleX Lock" = "Włącz blokadę SimpleX"; + +/* No comment provided by engineer. */ +"Enable TCP keep-alive" = "Włącz utrzymywanie aktywności TCP"; + +/* enabled status */ +"enabled" = "włączone"; + +/* enabled status */ +"enabled for contact" = "włączone dla kontaktu"; + +/* enabled status */ +"enabled for you" = "włączone dla Ciebie"; + +/* No comment provided by engineer. */ +"Encrypt" = "Szyfruj"; + +/* No comment provided by engineer. */ +"Encrypt database?" = "Zaszyfrować bazę danych?"; + +/* No comment provided by engineer. */ +"Encrypted database" = "Zaszyfrowana baza danych"; + +/* notification */ +"Encrypted message or another event" = "Zaszyfrowana wiadomość lub inne zdarzenie"; + +/* notification */ +"Encrypted message: database error" = "Zaszyfrowana wiadomość: błąd bazy danych"; + +/* notification */ +"Encrypted message: database migration error" = "Zaszyfrowana wiadomość: błąd migracji bazy danych"; + +/* notification */ +"Encrypted message: keychain error" = "Zaszyfrowana wiadomość: błąd pęku kluczy"; + +/* notification */ +"Encrypted message: no passphrase" = "Zaszyfrowana wiadomość: brak hasła"; + +/* notification */ +"Encrypted message: unexpected error" = "Zaszyfrowana wiadomość: nieoczekiwany błąd"; + +/* No comment provided by engineer. */ +"ended" = "zakończona"; + +/* call status */ +"ended call %@" = "zakończone połączenie %@"; + +/* No comment provided by engineer. */ +"Enter correct passphrase." = "Wprowadź poprawne hasło."; + +/* No comment provided by engineer. */ +"Enter Passcode" = "Wprowadź Pin"; + +/* No comment provided by engineer. */ +"Enter passphrase…" = "Wprowadź hasło…"; + +/* No comment provided by engineer. */ +"Enter password above to show!" = "Wprowadź hasło powyżej, aby pokazać!"; + +/* No comment provided by engineer. */ +"Enter server manually" = "Wprowadź serwer ręcznie"; + +/* No comment provided by engineer. */ +"error" = "błąd"; + +/* No comment provided by engineer. */ +"Error" = "Błąd"; + +/* No comment provided by engineer. */ +"Error accepting contact request" = "Błąd przyjmowania prośby o kontakt"; + +/* No comment provided by engineer. */ +"Error accessing database file" = "Błąd dostępu do pliku bazy danych"; + +/* No comment provided by engineer. */ +"Error adding member(s)" = "Błąd dodawania członka(ów)"; + +/* No comment provided by engineer. */ +"Error changing address" = "Błąd zmiany adresu"; + +/* No comment provided by engineer. */ +"Error changing role" = "Błąd zmiany roli"; + +/* No comment provided by engineer. */ +"Error changing setting" = "Błąd zmiany ustawienia"; + +/* No comment provided by engineer. */ +"Error creating address" = "Błąd tworzenia adresu"; + +/* No comment provided by engineer. */ +"Error creating group" = "Błąd tworzenia grupy"; + +/* No comment provided by engineer. */ +"Error creating group link" = "Błąd tworzenia linku grupy"; + +/* No comment provided by engineer. */ +"Error creating profile!" = "Błąd tworzenia profilu!"; + +/* No comment provided by engineer. */ +"Error deleting chat database" = "Błąd usuwania bazy danych czatu"; + +/* No comment provided by engineer. */ +"Error deleting chat!" = "Błąd usuwania czatu!"; + +/* No comment provided by engineer. */ +"Error deleting connection" = "Błąd usuwania połączenia"; + +/* No comment provided by engineer. */ +"Error deleting contact" = "Błąd usuwania kontaktu"; + +/* No comment provided by engineer. */ +"Error deleting database" = "Błąd usuwania bazy danych"; + +/* No comment provided by engineer. */ +"Error deleting old database" = "Błąd usuwania starej bazy danych"; + +/* No comment provided by engineer. */ +"Error deleting token" = "Błąd usuwania tokenu"; + +/* No comment provided by engineer. */ +"Error deleting user profile" = "Błąd usuwania profilu użytkownika"; + +/* No comment provided by engineer. */ +"Error enabling notifications" = "Błąd włączania powiadomień"; + +/* No comment provided by engineer. */ +"Error encrypting database" = "Błąd szyfrowania bazy danych"; + +/* No comment provided by engineer. */ +"Error exporting chat database" = "Błąd eksportu bazy danych czatu"; + +/* No comment provided by engineer. */ +"Error importing chat database" = "Błąd importu bazy danych czatu"; + +/* No comment provided by engineer. */ +"Error joining group" = "Błąd dołączenia do grupy"; + +/* No comment provided by engineer. */ +"Error loading %@ servers" = "Błąd ładowania %@ serwerów"; + +/* No comment provided by engineer. */ +"Error receiving file" = "Błąd odbioru pliku"; + +/* No comment provided by engineer. */ +"Error removing member" = "Błąd usuwania członka"; + +/* No comment provided by engineer. */ +"Error saving %@ servers" = "Błąd zapisu %@ serwerów"; + +/* No comment provided by engineer. */ +"Error saving group profile" = "Błąd zapisu profilu grupy"; + +/* No comment provided by engineer. */ +"Error saving ICE servers" = "Błąd zapisu serwerów ICE"; + +/* No comment provided by engineer. */ +"Error saving passcode" = "Błąd zapisu pinu"; + +/* No comment provided by engineer. */ +"Error saving passphrase to keychain" = "Błąd zapisu hasła do pęku kluczy"; + +/* No comment provided by engineer. */ +"Error saving user password" = "Błąd zapisu hasła użytkownika"; + +/* No comment provided by engineer. */ +"Error sending message" = "Błąd wysyłania wiadomości"; + +/* No comment provided by engineer. */ +"Error starting chat" = "Błąd uruchamiania czatu"; + +/* No comment provided by engineer. */ +"Error stopping chat" = "Błąd zatrzymania czatu"; + +/* No comment provided by engineer. */ +"Error switching profile!" = "Błąd przełączania profilu!"; + +/* No comment provided by engineer. */ +"Error updating group link" = "Błąd aktualizacji linku grupy"; + +/* No comment provided by engineer. */ +"Error updating message" = "Błąd aktualizacji wiadomości"; + +/* No comment provided by engineer. */ +"Error updating settings" = "Błąd aktualizacji ustawień"; + +/* No comment provided by engineer. */ +"Error updating user privacy" = "Błąd aktualizacji prywatności użytkownika"; + +/* No comment provided by engineer. */ +"Error: " = "Błąd: "; + +/* No comment provided by engineer. */ +"Error: %@" = "Błąd: %@"; + +/* No comment provided by engineer. */ +"Error: no database file" = "Błąd: brak pliku bazy danych"; + +/* No comment provided by engineer. */ +"Error: URL is invalid" = "Błąd: URL jest nieprawidłowy"; + +/* No comment provided by engineer. */ +"Exit without saving" = "Wyjdź bez zapisywania"; + +/* No comment provided by engineer. */ +"Experimental" = "Eksperymentalne"; + +/* No comment provided by engineer. */ +"Export database" = "Eksportuj bazę danych"; + +/* No comment provided by engineer. */ +"Export error:" = "Błąd eksportu:"; + +/* No comment provided by engineer. */ +"Exported database archive." = "Wyeksportowane archiwum bazy danych."; + +/* No comment provided by engineer. */ +"Exporting database archive..." = "Eksportowanie archiwum bazy danych..."; + +/* No comment provided by engineer. */ +"Failed to remove passphrase" = "Nie udało się usunąć hasła"; + +/* No comment provided by engineer. */ +"File transfer will be cancelled. If it's in progress it will be stoppped." = "Transfer plików zostanie anulowany. Jeśli jest w toku, zostanie zatrzymany."; + +/* No comment provided by engineer. */ +"File will be received when your contact completes uploading it." = "Plik zostanie odebrany, gdy Twój kontakt zakończy przesyłanie."; + +/* No comment provided by engineer. */ +"File will be received when your contact is online, please wait or check later!" = "Plik zostanie odebrany, gdy Twój kontakt będzie online, proszę czekać lub sprawdzić później!"; + +/* No comment provided by engineer. */ +"File: %@" = "Plik: %@"; + +/* No comment provided by engineer. */ +"Files & media" = "Pliki i media"; + +/* No comment provided by engineer. */ +"For console" = "Dla konsoli"; + +/* No comment provided by engineer. */ +"French interface" = "Francuski interfejs"; + +/* No comment provided by engineer. */ +"Full link" = "Pełny link"; + +/* No comment provided by engineer. */ +"Full name (optional)" = "Pełna nazwa (opcjonalna)"; + +/* No comment provided by engineer. */ +"Full name:" = "Pełna nazwa:"; + +/* No comment provided by engineer. */ +"Fully re-implemented - work in background!" = "W pełni ponownie zaimplementowany - praca w tle!"; + +/* No comment provided by engineer. */ +"Further reduced battery usage" = "Jeszcze mniejsze zużycie baterii"; + +/* No comment provided by engineer. */ +"GIFs and stickers" = "GIF-y i naklejki"; + +/* No comment provided by engineer. */ +"Group" = "Grupa"; + +/* No comment provided by engineer. */ +"group deleted" = "grupa usunięta"; + +/* No comment provided by engineer. */ +"Group display name" = "Wyświetlana nazwa grupy"; + +/* No comment provided by engineer. */ +"Group full name (optional)" = "Pełna nazwa grupy (opcjonalne)"; + +/* No comment provided by engineer. */ +"Group image" = "Obraz grupy"; + +/* No comment provided by engineer. */ +"Group invitation" = "Zaproszenie grupy"; + +/* No comment provided by engineer. */ +"Group invitation expired" = "Zaproszenie do grupy wygasło"; + +/* No comment provided by engineer. */ +"Group invitation is no longer valid, it was removed by sender." = "Zaproszenie do grupy jest już nieważne, zostało usunięte przez nadawcę."; + +/* No comment provided by engineer. */ +"Group link" = "Link do grupy"; + +/* No comment provided by engineer. */ +"Group links" = "Linki grupowe"; + +/* No comment provided by engineer. */ +"Group members can irreversibly delete sent messages." = "Członkowie grupy mogą nieodwracalnie usuwać wysłane wiadomości."; + +/* No comment provided by engineer. */ +"Group members can send direct messages." = "Członkowie grupy mogą wysyłać bezpośrednie wiadomości."; + +/* No comment provided by engineer. */ +"Group members can send disappearing messages." = "Członkowie grupy mogą wysyłać znikające wiadomości."; + +/* No comment provided by engineer. */ +"Group members can send voice messages." = "Członkowie grupy mogą wysyłać wiadomości głosowe."; + +/* notification */ +"Group message:" = "Wiadomość grupowa:"; + +/* No comment provided by engineer. */ +"Group moderation" = "Moderacja grupy"; + +/* No comment provided by engineer. */ +"Group preferences" = "Preferencje grupy"; + +/* No comment provided by engineer. */ +"Group profile" = "Profil grupy"; + +/* No comment provided by engineer. */ +"Group profile is stored on members' devices, not on the servers." = "Profil grupy jest przechowywany na urządzeniach członków, a nie na serwerach."; + +/* snd group event chat item */ +"group profile updated" = "zaktualizowano profil grupy"; + +/* No comment provided by engineer. */ +"Group welcome message" = "Wiadomość powitalna grupy"; + +/* No comment provided by engineer. */ +"Group will be deleted for all members - this cannot be undone!" = "Grupa zostanie usunięta dla wszystkich członków - nie można tego cofnąć!"; + +/* No comment provided by engineer. */ +"Group will be deleted for you - this cannot be undone!" = "Grupa zostanie usunięta dla Ciebie - nie można tego cofnąć!"; + +/* No comment provided by engineer. */ +"Help" = "Pomoc"; + +/* No comment provided by engineer. */ +"Hidden" = "Ukryte"; + +/* No comment provided by engineer. */ +"Hidden chat profiles" = "Ukryte profile czatów"; + +/* No comment provided by engineer. */ +"Hidden profile password" = "Hasło ukrytego profilu"; + +/* chat item action */ +"Hide" = "Ukryj"; + +/* No comment provided by engineer. */ +"Hide app screen in the recent apps." = "Ukryj ekran aplikacji w ostatnich aplikacjach."; + +/* No comment provided by engineer. */ +"Hide profile" = "Ukryj profil"; + +/* No comment provided by engineer. */ +"Hide:" = "Ukryj:"; + +/* No comment provided by engineer. */ +"How it works" = "Jak to działa"; + +/* No comment provided by engineer. */ +"How SimpleX works" = "Jak działa SimpleX"; + +/* No comment provided by engineer. */ +"How to" = "Jak"; + +/* No comment provided by engineer. */ +"How to use it" = "Jak korzystać"; + +/* No comment provided by engineer. */ +"How to use your servers" = "Jak korzystać z Twoich serwerów"; + +/* No comment provided by engineer. */ +"ICE servers (one per line)" = "Serwery ICE (po jednym na linię)"; + +/* No comment provided by engineer. */ +"If you can't meet in person, **show QR code in the video call**, or share the link." = "Jeśli nie możesz spotkać się osobiście, **pokaż kod QR w rozmowie wideo** lub udostępnij link."; + +/* No comment provided by engineer. */ +"If you cannot meet in person, you can **scan QR code in the video call**, or your contact can share an invitation link." = "Jeśli nie możesz spotkać się osobiście, możesz **zeskanować kod QR w rozmowie wideo** lub Twój kontakt może udostępnić link z zaproszeniem."; + +/* No comment provided by engineer. */ +"If you need to use the chat now tap **Do it later** below (you will be offered to migrate the database when you restart the app)." = "Jeśli potrzebujesz użyć czatu teraz, dotknij **Zrób to później** poniżej (zostanie Ci zaproponowana migracja bazy danych po ponownym uruchomieniu aplikacji)."; + +/* No comment provided by engineer. */ +"Ignore" = "Ignoruj"; + +/* No comment provided by engineer. */ +"Image will be received when your contact completes uploading it." = "Obraz zostanie odebrany, gdy Twój kontakt zakończy jego przesyłanie."; + +/* No comment provided by engineer. */ +"Image will be received when your contact is online, please wait or check later!" = "Obraz zostanie odebrany, gdy kontakt będzie online, poczekaj lub sprawdź później!"; + +/* No comment provided by engineer. */ +"Immediately" = "Natychmiast"; + +/* No comment provided by engineer. */ +"Immune to spam and abuse" = "Odporność na spam i nadużycia"; + +/* No comment provided by engineer. */ +"Import" = "Importuj"; + +/* No comment provided by engineer. */ +"Import chat database?" = "Zaimportować bazę danych czatu?"; + +/* No comment provided by engineer. */ +"Import database" = "Importuj bazę danych"; + +/* No comment provided by engineer. */ +"Improved privacy and security" = "Zwiększona prywatność i bezpieczeństwo"; + +/* No comment provided by engineer. */ +"Improved server configuration" = "Ulepszona konfiguracja serwera"; + +/* No comment provided by engineer. */ +"Incognito" = "Incognito"; + +/* No comment provided by engineer. */ +"Incognito mode" = "Tryb incognito"; + +/* No comment provided by engineer. */ +"Incognito mode is not supported here - your main profile will be sent to group members" = "Tryb Incognito nie jest tutaj obsługiwany - główny profil zostanie wysłany do członków grupy"; + +/* No comment provided by engineer. */ +"Incognito mode protects the privacy of your main profile name and image — for each new contact a new random profile is created." = "Tryb incognito chroni prywatność nazwy i obrazu głównego profilu — dla każdego nowego kontaktu tworzony jest nowy losowy profil."; + +/* chat list item description */ +"incognito via contact address link" = "incognito poprzez link adresu kontaktowego"; + +/* chat list item description */ +"incognito via group link" = "incognito przez link grupowy"; + +/* chat list item description */ +"incognito via one-time link" = "incognito przez jednorazowy link"; + +/* notification */ +"Incoming audio call" = "Przychodzące połączenie audio"; + +/* notification */ +"Incoming call" = "Przychodzące połączenie"; + +/* notification */ +"Incoming video call" = "Przychodzące połączenie wideo"; + +/* No comment provided by engineer. */ +"Incompatible database version" = "Niekompatybilna wersja bazy danych"; + +/* PIN entry */ +"Incorrect passcode" = "Nieprawidłowy pin"; + +/* No comment provided by engineer. */ +"Incorrect security code!" = "Nieprawidłowy kod bezpieczeństwa!"; + +/* connection level description */ +"indirect (%d)" = "pośrednie (%d)"; + +/* No comment provided by engineer. */ +"Initial role" = "Rola początkowa"; + +/* No comment provided by engineer. */ +"Install [SimpleX Chat for terminal](https://github.com/simplex-chat/simplex-chat)" = "Zainstaluj [SimpleX Chat na terminal](https://github.com/simplex-chat/simplex-chat)"; + +/* No comment provided by engineer. */ +"Instant push notifications will be hidden!\n" = "Natychmiastowe powiadomienia push będą ukryte!\n"; + +/* No comment provided by engineer. */ +"Instantly" = "Natychmiastowo"; + +/* No comment provided by engineer. */ +"Interface" = "Interfejs"; + +/* invalid chat data */ +"invalid chat" = "nieprawidłowy czat"; + +/* No comment provided by engineer. */ +"invalid chat data" = "nieprawidłowe dane czatu"; + +/* No comment provided by engineer. */ +"Invalid connection link" = "Nieprawidłowy link połączenia"; + +/* invalid chat item */ +"invalid data" = "nieprawidłowe dane"; + +/* No comment provided by engineer. */ +"Invalid server address!" = "Nieprawidłowy adres serwera!"; + +/* No comment provided by engineer. */ +"Invitation expired!" = "Zaproszenie wygasło!"; + +/* group name */ +"invitation to group %@" = "zaproszenie do grupy %@"; + +/* No comment provided by engineer. */ +"Invite members" = "Zaproś członków"; + +/* No comment provided by engineer. */ +"Invite to group" = "Zaproś do grupy"; + +/* No comment provided by engineer. */ +"invited" = "zaproszony"; + +/* rcv group event chat item */ +"invited %@" = "zaproszony %@"; + +/* chat list item title */ +"invited to connect" = "zaproszony do połączenia"; + +/* rcv group event chat item */ +"invited via your group link" = "zaproszony przez Twój link grupy"; + +/* No comment provided by engineer. */ +"iOS Keychain is used to securely store passphrase - it allows receiving push notifications." = "iOS Keychain służy do bezpiecznego przechowywania hasła - umożliwia otrzymywanie powiadomień push."; + +/* No comment provided by engineer. */ +"iOS Keychain will be used to securely store passphrase after you restart the app or change passphrase - it will allow receiving push notifications." = "iOS Keychain będzie używany do bezpiecznego przechowywania hasła po ponownym uruchomieniu aplikacji lub zmianie hasła - pozwoli to na otrzymywanie powiadomień push."; + +/* No comment provided by engineer. */ +"Irreversible message deletion" = "Nieodwracalne usuwanie wiadomości"; + +/* No comment provided by engineer. */ +"Irreversible message deletion is prohibited in this chat." = "Nieodwracalne usuwanie wiadomości jest na tym czacie zabronione."; + +/* No comment provided by engineer. */ +"Irreversible message deletion is prohibited in this group." = "Nieodwracalne usuwanie wiadomości jest w tej grupie zabronione."; + +/* No comment provided by engineer. */ +"It allows having many anonymous connections without any shared data between them in a single chat profile." = "Pozwala na posiadanie wielu anonimowych połączeń bez żadnych wspólnych danych między nimi w jednym profilu czatu."; + +/* No comment provided by engineer. */ +"It can happen when:\n1. The messages expire on the server if they were not received for 30 days,\n2. The server you use to receive the messages from this contact was updated and restarted.\n3. The connection is compromised.\nPlease connect to the developers via Settings to receive the updates about the servers.\nWe will be adding server redundancy to prevent lost messages." = "Może to nastąpić, gdy:\n1. Wiadomości wygasają na serwerze, jeśli nie zostały odebrane przez 30 dni,\n2. Serwer, którego używasz do odbierania wiadomości od tego kontaktu został zaktualizowany i uruchomiony ponownie.\n3. Połączenie jest skompromitowane.\nProszę połączyć się z deweloperami przez Ustawienia, aby otrzymać aktualizacje dotyczące serwerów.\nBędziemy dodawać redundancję serwerów, aby zapobiec utracie wiadomości."; + +/* No comment provided by engineer. */ +"It seems like you are already connected via this link. If it is not the case, there was an error (%@)." = "Wygląda na to, że jesteś już połączony przez ten link. Jeśli tak nie jest, wystąpił błąd (%@)."; + +/* No comment provided by engineer. */ +"Italian interface" = "Włoski interfejs"; + +/* No comment provided by engineer. */ +"italic" = "kursywa"; + +/* No comment provided by engineer. */ +"Join" = "Dołącz"; + +/* No comment provided by engineer. */ +"join as %@" = "dołącz jako %@"; + +/* No comment provided by engineer. */ +"Join group" = "Dołącz do grupy"; + +/* No comment provided by engineer. */ +"Join incognito" = "Dołącz incognito"; + +/* No comment provided by engineer. */ +"Joining group" = "Dołączanie do grupy"; + +/* No comment provided by engineer. */ +"Keychain error" = "Błąd pęku kluczy"; + +/* No comment provided by engineer. */ +"KeyChain error" = "Błąd pęku kluczy"; + +/* No comment provided by engineer. */ +"Large file!" = "Duży plik!"; + +/* No comment provided by engineer. */ +"Leave" = "Opuść"; + +/* No comment provided by engineer. */ +"Leave group" = "Opuść grupę"; + +/* No comment provided by engineer. */ +"Leave group?" = "Opuścić grupę?"; + +/* rcv group event chat item */ +"left" = "opuścił"; + +/* No comment provided by engineer. */ +"Light" = "Jasny"; + +/* No comment provided by engineer. */ +"Limitations" = "Ograniczenia"; + +/* No comment provided by engineer. */ +"LIVE" = "NA ŻYWO"; + +/* No comment provided by engineer. */ +"Live message!" = "Wiadomość na żywo!"; + +/* No comment provided by engineer. */ +"Live messages" = "Wiadomości na żywo"; + +/* No comment provided by engineer. */ +"Local name" = "Nazwa lokalna"; + +/* No comment provided by engineer. */ +"Local profile data only" = "Tylko dane profilu lokalnego"; + +/* No comment provided by engineer. */ +"Lock after" = "Zablokuj po"; + +/* No comment provided by engineer. */ +"Lock mode" = "Tryb blokady"; + +/* No comment provided by engineer. */ +"Make a private connection" = "Nawiąż prywatne połączenie"; + +/* No comment provided by engineer. */ +"Make profile private!" = "Ustaw profil jako prywatny!"; + +/* No comment provided by engineer. */ +"Make sure %@ server addresses are in correct format, line separated and are not duplicated (%@)." = "Upewnij się, że adresy serwerów %@ są w poprawnym formacie, rozdzielone liniami i nie są zduplikowane (%@)."; + +/* No comment provided by engineer. */ +"Make sure WebRTC ICE server addresses are in correct format, line separated and are not duplicated." = "Upewnij się, że adresy serwerów WebRTC ICE są w poprawnym formacie, rozdzielone liniami i nie są zduplikowane."; + +/* No comment provided by engineer. */ +"Many people asked: *if SimpleX has no user identifiers, how can it deliver messages?*" = "Wiele osób pytało: *jeśli SimpleX nie ma identyfikatora użytkownika, jak może dostarczać wiadomości?*"; + +/* No comment provided by engineer. */ +"Mark deleted for everyone" = "Oznacz jako usunięty dla wszystkich"; + +/* No comment provided by engineer. */ +"Mark read" = "Oznacz jako przeczytane"; + +/* No comment provided by engineer. */ +"Mark verified" = "Oznacz jako zweryfikowane"; + +/* No comment provided by engineer. */ +"Markdown in messages" = "Markdown w wiadomościach"; + +/* marked deleted chat item preview text */ +"marked deleted" = "zaznaczona jako usunięta"; + +/* No comment provided by engineer. */ +"Max 30 seconds, received instantly." = "Maksymalnie 30 sekund, odbierane natychmiast."; + +/* member role */ +"member" = "członek"; + +/* No comment provided by engineer. */ +"Member" = "Członek"; + +/* rcv group event chat item */ +"member connected" = "połączony"; + +/* No comment provided by engineer. */ +"Member role will be changed to \"%@\". All group members will be notified." = "Rola członka grupy zostanie zmieniona na \"%@\". Wszyscy członkowie grupy zostaną powiadomieni."; + +/* No comment provided by engineer. */ +"Member role will be changed to \"%@\". The member will receive a new invitation." = "Rola członka zostanie zmieniona na \"%@\". Członek otrzyma nowe zaproszenie."; + +/* No comment provided by engineer. */ +"Member will be removed from group - this cannot be undone!" = "Członek zostanie usunięty z grupy - nie można tego cofnąć!"; + +/* No comment provided by engineer. */ +"Message delivery error" = "Błąd dostarczenia wiadomości"; + +/* No comment provided by engineer. */ +"Message draft" = "Wersja robocza wiadomości"; + +/* notification */ +"message received" = "wiadomość otrzymana"; + +/* No comment provided by engineer. */ +"Message text" = "Tekst wiadomości"; + +/* No comment provided by engineer. */ +"Messages" = "Wiadomości"; + +/* No comment provided by engineer. */ +"Messages & files" = "Wiadomości i pliki"; + +/* No comment provided by engineer. */ +"Migrating database archive..." = "Migrowanie archiwum bazy danych..."; + +/* No comment provided by engineer. */ +"Migration error:" = "Błąd migracji:"; + +/* No comment provided by engineer. */ +"Migration failed. Tap **Skip** below to continue using the current database. Please report the issue to the app developers via chat or email [chat@simplex.chat](mailto:chat@simplex.chat)." = "Migracja nie powiodła się. Dotknij **Pomiń** poniżej, aby kontynuować korzystanie z obecnej bazy danych. Prosimy o zgłoszenie problemu do twórców aplikacji poprzez czat lub email [chat@simplex.chat](mailto:chat@simplex.chat)."; + +/* No comment provided by engineer. */ +"Migration is completed" = "Migracja została zakończona"; + +/* No comment provided by engineer. */ +"Migrations: %@" = "Migracje: %@"; + +/* call status */ +"missed call" = "nieodebrane połączenie"; + +/* chat item action */ +"Moderate" = "Moderowany"; + +/* moderated chat item */ +"moderated" = "moderowany"; + +/* No comment provided by engineer. */ +"moderated by %@" = "moderowany przez %@"; + +/* No comment provided by engineer. */ +"More improvements are coming soon!" = "Więcej ulepszeń już wkrótce!"; + +/* No comment provided by engineer. */ +"Most likely this contact has deleted the connection with you." = "Najprawdopodobniej ten kontakt usunął połączenie z Tobą."; + +/* No comment provided by engineer. */ +"Multiple chat profiles" = "Wiele profili czatu"; + +/* No comment provided by engineer. */ +"Mute" = "Wycisz"; + +/* No comment provided by engineer. */ +"Muted when inactive!" = "Wyciszony, gdy jest nieaktywny!"; + +/* No comment provided by engineer. */ +"Name" = "Nazwa"; + +/* No comment provided by engineer. */ +"Network & servers" = "Sieć i serwery"; + +/* No comment provided by engineer. */ +"Network settings" = "Ustawienia sieci"; + +/* No comment provided by engineer. */ +"Network status" = "Status sieci"; + +/* No comment provided by engineer. */ +"never" = "nigdy"; + +/* notification */ +"New contact request" = "Nowa prośba o kontakt"; + +/* notification */ +"New contact:" = "Nowy kontakt:"; + +/* No comment provided by engineer. */ +"New database archive" = "Nowe archiwum bazy danych"; + +/* No comment provided by engineer. */ +"New in %@" = "Nowość w %@"; + +/* No comment provided by engineer. */ +"New member role" = "Nowa rola członka"; + +/* notification */ +"new message" = "nowa wiadomość"; + +/* notification */ +"New message" = "Nowa wiadomość"; + +/* No comment provided by engineer. */ +"New Passcode" = "Nowy Pin"; + +/* No comment provided by engineer. */ +"New passphrase…" = "Nowe hasło…"; + +/* pref value */ +"no" = "nie"; + +/* No comment provided by engineer. */ +"No" = "Nie"; + +/* Authentication unavailable */ +"No app password" = "Brak hasła aplikacji"; + +/* No comment provided by engineer. */ +"No contacts selected" = "Nie wybrano kontaktów"; + +/* No comment provided by engineer. */ +"No contacts to add" = "Brak kontaktów do dodania"; + +/* No comment provided by engineer. */ +"No device token!" = "Brak tokenu urządzenia!"; + +/* No comment provided by engineer. */ +"no e2e encryption" = "brak szyfrowania e2e"; + +/* No comment provided by engineer. */ +"No group!" = "Nie znaleziono grupy!"; + +/* No comment provided by engineer. */ +"No permission to record voice message" = "Brak uprawnień do nagrywania wiadomości głosowej"; + +/* No comment provided by engineer. */ +"No received or sent files" = "Brak odebranych lub wysłanych plików"; + +/* No comment provided by engineer. */ +"Notifications" = "Powiadomienia"; + +/* No comment provided by engineer. */ +"Notifications are disabled!" = "Powiadomienia są wyłączone!"; + +/* No comment provided by engineer. */ +"Now admins can:\n- delete members' messages.\n- disable members (\"observer\" role)" = "Teraz administratorzy mogą:\n- usuwać wiadomości członków.\n- wyłączyć członków (rola \"obserwatora\")"; + +/* member role */ +"observer" = "obserwator"; + +/* enabled status + group pref value */ +"off" = "wyłączony"; + +/* No comment provided by engineer. */ +"Off" = "Wyłączony"; + +/* No comment provided by engineer. */ +"Off (Local)" = "Wyłączony (Lokalnie)"; + +/* feature offered item */ +"offered %@" = "zaoferował %@"; + +/* feature offered item */ +"offered %@: %@" = "zaoferował %1$@: %2$@"; + +/* No comment provided by engineer. */ +"Ok" = "Ok"; + +/* No comment provided by engineer. */ +"Old database" = "Stara baza danych"; + +/* No comment provided by engineer. */ +"Old database archive" = "Stare archiwum bazy danych"; + +/* group pref value */ +"on" = "włączone"; + +/* No comment provided by engineer. */ +"One-time invitation link" = "Jednorazowy link zaproszenia"; + +/* No comment provided by engineer. */ +"Onion hosts will be required for connection. Requires enabling VPN." = "Hosty onion będą wymagane do połączenia. Wymaga włączenia VPN."; + +/* No comment provided by engineer. */ +"Onion hosts will be used when available. Requires enabling VPN." = "Hosty onion będą używane, gdy będą dostępne. Wymaga włączenia VPN."; + +/* No comment provided by engineer. */ +"Onion hosts will not be used." = "Hosty onion nie będą używane."; + +/* No comment provided by engineer. */ +"Only client devices store user profiles, contacts, groups, and messages sent with **2-layer end-to-end encryption**." = "Tylko urządzenia klienckie przechowują profile użytkowników, kontakty, grupy i wiadomości wysyłane za pomocą **2-warstwowego szyfrowania end-to-end**."; + +/* No comment provided by engineer. */ +"Only group owners can change group preferences." = "Tylko właściciele grup mogą zmieniać preferencje grupy."; + +/* No comment provided by engineer. */ +"Only group owners can enable voice messages." = "Tylko właściciele grup mogą włączyć wiadomości głosowe."; + +/* No comment provided by engineer. */ +"Only you can irreversibly delete messages (your contact can mark them for deletion)." = "Tylko Ty możesz nieodwracalnie usunąć wiadomości (Twój kontakt może oznaczyć je do usunięcia)."; + +/* No comment provided by engineer. */ +"Only you can send disappearing messages." = "Tylko Ty możesz wysyłać znikające wiadomości."; + +/* No comment provided by engineer. */ +"Only you can send voice messages." = "Tylko Ty możesz wysyłać wiadomości głosowe."; + +/* No comment provided by engineer. */ +"Only your contact can irreversibly delete messages (you can mark them for deletion)." = "Tylko Twój kontakt może nieodwracalnie usunąć wiadomości (możesz oznaczyć je do usunięcia)."; + +/* No comment provided by engineer. */ +"Only your contact can send disappearing messages." = "Tylko Twój kontakt może wysyłać znikające wiadomości."; + +/* No comment provided by engineer. */ +"Only your contact can send voice messages." = "Tylko Twój kontakt może wysyłać wiadomości głosowe."; + +/* No comment provided by engineer. */ +"Open chat" = "Otwórz czat"; + +/* authentication reason */ +"Open chat console" = "Otwórz konsolę czatu"; + +/* No comment provided by engineer. */ +"Open Settings" = "Otwórz Ustawienia"; + +/* authentication reason */ +"Open user profiles" = "Otwórz profile użytkownika"; + +/* No comment provided by engineer. */ +"Open-source protocol and code – anybody can run the servers." = "Otwarto źródłowy protokół i kod - każdy może uruchomić serwery."; + +/* No comment provided by engineer. */ +"Opening the link in the browser may reduce connection privacy and security. Untrusted SimpleX links will be red." = "Otwarcie łącza w przeglądarce może zmniejszyć prywatność i bezpieczeństwo połączenia. Niezaufane linki SimpleX będą miały kolor czerwony."; + +/* No comment provided by engineer. */ +"or chat with the developers" = "lub porozmawiać z deweloperami"; + +/* member role */ +"owner" = "właściciel"; + +/* No comment provided by engineer. */ +"Passcode" = "Pin"; + +/* No comment provided by engineer. */ +"Passcode changed!" = "Pin zmieniony!"; + +/* No comment provided by engineer. */ +"Passcode entry" = "Wpis pinu"; + +/* No comment provided by engineer. */ +"Passcode not changed!" = "Pin nie został zmieniony!"; + +/* No comment provided by engineer. */ +"Passcode set!" = "Pin ustawiony!"; + +/* No comment provided by engineer. */ +"Password to show" = "Hasło do wyświetlenia"; + +/* No comment provided by engineer. */ +"Paste" = "Wklej"; + +/* No comment provided by engineer. */ +"Paste image" = "Wklej obraz"; + +/* No comment provided by engineer. */ +"Paste received link" = "Wklej otrzymany link"; + +/* No comment provided by engineer. */ +"Paste the link you received into the box below to connect with your contact." = "Wklej otrzymany link w pole poniżej, aby połączyć się z kontaktem."; + +/* No comment provided by engineer. */ +"peer-to-peer" = "peer-to-peer"; + +/* No comment provided by engineer. */ +"People can connect to you only via the links you share." = "Ludzie mogą się z Tobą połączyć tylko poprzez linki, które udostępniasz."; + +/* No comment provided by engineer. */ +"Periodically" = "Okresowo"; + +/* No comment provided by engineer. */ +"PING count" = "Liczba PINGÓW"; + +/* No comment provided by engineer. */ +"PING interval" = "Interwał PINGU"; + +/* No comment provided by engineer. */ +"Please ask your contact to enable sending voice messages." = "Poproś Twój kontakt o włączenie wysyłania wiadomości głosowych."; + +/* No comment provided by engineer. */ +"Please check that you used the correct link or ask your contact to send you another one." = "Sprawdź, czy użyłeś prawidłowego linku lub poproś Twój kontakt o przesłanie innego."; + +/* No comment provided by engineer. */ +"Please check your network connection with %@ and try again." = "Sprawdzić połączenie sieciowe z %@ i spróbować ponownie."; + +/* No comment provided by engineer. */ +"Please check yours and your contact preferences." = "Proszę sprawdzić preferencje Twoje i Twojego kontaktu."; + +/* No comment provided by engineer. */ +"Please contact group admin." = "Skontaktuj się z administratorem grupy."; + +/* No comment provided by engineer. */ +"Please enter correct current passphrase." = "Wprowadź poprawne aktualne hasło."; + +/* No comment provided by engineer. */ +"Please enter the previous password after restoring database backup. This action can not be undone." = "Proszę podać poprzednie hasło po przywróceniu kopii zapasowej bazy danych. Tej czynności nie można cofnąć."; + +/* No comment provided by engineer. */ +"Please remember or store it securely - there is no way to recover a lost passcode!" = "Prosimy o jego zapamiętanie lub bezpieczne przechowywanie - nie ma możliwości odzyskania utraconego pinu!"; + +/* No comment provided by engineer. */ +"Please restart the app and migrate the database to enable push notifications." = "Uruchom ponownie aplikację i przeprowadź migrację bazy danych, aby włączyć powiadomienia push."; + +/* No comment provided by engineer. */ +"Please store passphrase securely, you will NOT be able to access chat if you lose it." = "Prosimy o bezpieczne przechowywanie hasła, w przypadku jego utraty NIE będzie można uzyskać dostępu do czatu."; + +/* No comment provided by engineer. */ +"Please store passphrase securely, you will NOT be able to change it if you lose it." = "Prosimy o bezpieczne przechowywanie hasła, w przypadku jego utraty NIE będzie można go zmienić."; + +/* server test error */ +"Possibly, certificate fingerprint in server address is incorrect" = "Możliwe, że odcisk palca certyfikatu w adresie serwera jest nieprawidłowy"; + +/* No comment provided by engineer. */ +"Preserve the last message draft, with attachments." = "Zachowaj ostatnią wersję roboczą wiadomości wraz z załącznikami."; + +/* No comment provided by engineer. */ +"Preset server" = "Wstępnie ustawiony serwer"; + +/* No comment provided by engineer. */ +"Preset server address" = "Wstępnie ustawiony adres serwera"; + +/* No comment provided by engineer. */ +"Privacy & security" = "Prywatność i bezpieczeństwo"; + +/* No comment provided by engineer. */ +"Privacy redefined" = "Redefinicja prywatności"; + +/* No comment provided by engineer. */ +"Private filenames" = "Prywatne nazwy plików"; + +/* No comment provided by engineer. */ +"Profile and server connections" = "Profil i połączenia z serwerem"; + +/* No comment provided by engineer. */ +"Profile image" = "Zdjęcie profilowe"; + +/* No comment provided by engineer. */ +"Profile password" = "Hasło profilu"; + +/* No comment provided by engineer. */ +"Prohibit irreversible message deletion." = "Zabroń nieodwracalnego usuwania wiadomości."; + +/* No comment provided by engineer. */ +"Prohibit sending direct messages to members." = "Zabroń wysyłania bezpośrednich wiadomości do członków."; + +/* No comment provided by engineer. */ +"Prohibit sending disappearing messages." = "Zabroń wysyłania znikających wiadomości."; + +/* No comment provided by engineer. */ +"Prohibit sending voice messages." = "Zabroń wysyłania wiadomości głosowych."; + +/* No comment provided by engineer. */ +"Protect app screen" = "Chroń ekran aplikacji"; + +/* No comment provided by engineer. */ +"Protect your chat profiles with a password!" = "Chroń swoje profile czatu hasłem!"; + +/* No comment provided by engineer. */ +"Protocol timeout" = "Limit czasu protokołu"; + +/* No comment provided by engineer. */ +"Push notifications" = "Powiadomienia push"; + +/* No comment provided by engineer. */ +"Rate the app" = "Oceń aplikację"; + +/* No comment provided by engineer. */ +"Read" = "Czytaj"; + +/* No comment provided by engineer. */ +"Read more in our [GitHub repository](https://github.com/simplex-chat/simplex-chat#readme)." = "Przeczytaj więcej na naszym [repozytorium GitHub](https://github.com/simplex-chat/simplex-chat#readme)."; + +/* No comment provided by engineer. */ +"Read more in our GitHub repository." = "Przeczytaj więcej na naszym repozytorium GitHub."; + +/* No comment provided by engineer. */ +"received answer…" = "otrzymano odpowiedź…"; + +/* No comment provided by engineer. */ +"received confirmation…" = "otrzymano potwierdzenie…"; + +/* notification */ +"Received file event" = "Otrzymano zdarzenie pliku"; + +/* No comment provided by engineer. */ +"Receiving via" = "Odbieranie przez"; + +/* No comment provided by engineer. */ +"Recipients see updates as you type them." = "Odbiorcy widzą aktualizacje podczas ich wpisywania."; + +/* No comment provided by engineer. */ +"Reduced battery usage" = "Zmniejszone zużycie baterii"; + +/* reject incoming call via notification */ +"Reject" = "Odrzuć"; + +/* No comment provided by engineer. */ +"Reject contact (sender NOT notified)" = "Odrzuć kontakt (nadawca NIE został powiadomiony)"; + +/* No comment provided by engineer. */ +"Reject contact request" = "Odrzuć prośbę kontaktu"; + +/* call status */ +"rejected call" = "odrzucone połączenie"; + +/* No comment provided by engineer. */ +"Relay server is only used if necessary. Another party can observe your IP address." = "Serwer przekaźnikowy jest używany tylko w razie potrzeby. Inna strona może obserwować Twój adres IP."; + +/* No comment provided by engineer. */ +"Relay server protects your IP address, but it can observe the duration of the call." = "Serwer przekaźnikowy chroni Twój adres IP, ale może obserwować czas trwania połączenia."; + +/* No comment provided by engineer. */ +"Remove" = "Usuń"; + +/* No comment provided by engineer. */ +"Remove member" = "Usuń członka"; + +/* No comment provided by engineer. */ +"Remove member?" = "Usunąć członka?"; + +/* No comment provided by engineer. */ +"Remove passphrase from keychain?" = "Usunąć hasło z pęku kluczy?"; + +/* No comment provided by engineer. */ +"removed" = "usunięty"; + +/* rcv group event chat item */ +"removed %@" = "usunięto %@"; + +/* rcv group event chat item */ +"removed you" = "usunął cię"; + +/* chat item action */ +"Reply" = "Odpowiedz"; + +/* No comment provided by engineer. */ +"Required" = "Wymagane"; + +/* No comment provided by engineer. */ +"Reset" = "Resetuj"; + +/* No comment provided by engineer. */ +"Reset colors" = "Resetuj kolory"; + +/* No comment provided by engineer. */ +"Reset to defaults" = "Przywróć wartości domyślne"; + +/* No comment provided by engineer. */ +"Restart the app to create a new chat profile" = "Uruchom ponownie aplikację, aby utworzyć nowy profil czatu"; + +/* No comment provided by engineer. */ +"Restart the app to use imported chat database" = "Uruchom ponownie aplikację, aby użyć zaimportowanej bazy danych czatu"; + +/* No comment provided by engineer. */ +"Restore" = "Przywróć"; + +/* No comment provided by engineer. */ +"Restore database backup" = "Przywróć kopię zapasową bazy danych"; + +/* No comment provided by engineer. */ +"Restore database backup?" = "Przywrócić kopię zapasową bazy danych?"; + +/* No comment provided by engineer. */ +"Restore database error" = "Błąd przywracania bazy danych"; + +/* chat item action */ +"Reveal" = "Ujawnij"; + +/* No comment provided by engineer. */ +"Revert" = "Przywrócić"; + +/* No comment provided by engineer. */ +"Role" = "Rola"; + +/* No comment provided by engineer. */ +"Run chat" = "Uruchom czat"; + +/* chat item action */ +"Save" = "Zapisz"; + +/* No comment provided by engineer. */ +"Save (and notify contacts)" = "Zapisz (i powiadom kontakty)"; + +/* No comment provided by engineer. */ +"Save and notify contact" = "Zapisz i powiadom kontakt"; + +/* No comment provided by engineer. */ +"Save and notify group members" = "Zapisz i powiadom członków grupy"; + +/* No comment provided by engineer. */ +"Save and update group profile" = "Zapisz i zaktualizuj profil grupowy"; + +/* No comment provided by engineer. */ +"Save archive" = "Zapisz archiwum"; + +/* No comment provided by engineer. */ +"Save group profile" = "Zapisz profil grupy"; + +/* No comment provided by engineer. */ +"Save passphrase and open chat" = "Zapisz hasło i otwórz czat"; + +/* No comment provided by engineer. */ +"Save passphrase in Keychain" = "Zapisz hasło w pęku kluczy"; + +/* No comment provided by engineer. */ +"Save preferences?" = "Zapisać preferencje?"; + +/* No comment provided by engineer. */ +"Save profile password" = "Zapisz hasło profilu"; + +/* No comment provided by engineer. */ +"Save servers" = "Zapisz serwery"; + +/* No comment provided by engineer. */ +"Save servers?" = "Zapisać serwery?"; + +/* No comment provided by engineer. */ +"Save welcome message?" = "Zapisać wiadomość powitalną?"; + +/* No comment provided by engineer. */ +"Saved WebRTC ICE servers will be removed" = "Zapisane serwery WebRTC ICE zostaną usunięte"; + +/* No comment provided by engineer. */ +"Scan code" = "Zeskanuj kod"; + +/* No comment provided by engineer. */ +"Scan QR code" = "Zeskanuj kod QR"; + +/* No comment provided by engineer. */ +"Scan security code from your contact's app." = "Zeskanuj kod bezpieczeństwa z aplikacji Twojego kontaktu."; + +/* No comment provided by engineer. */ +"Scan server QR code" = "Zeskanuj kod QR serwera"; + +/* No comment provided by engineer. */ +"Search" = "Szukaj"; + +/* network option */ +"sec" = "sek"; + +/* No comment provided by engineer. */ +"secret" = "sekret"; + +/* server test step */ +"Secure queue" = "Bezpieczna kolejka"; + +/* No comment provided by engineer. */ +"Security assessment" = "Ocena bezpieczeństwa"; + +/* No comment provided by engineer. */ +"Security code" = "Kod bezpieczeństwa"; + +/* No comment provided by engineer. */ +"Send" = "Wyślij"; + +/* No comment provided by engineer. */ +"Send a live message - it will update for the recipient(s) as you type it" = "Wysyłaj wiadomości na żywo - będą one aktualizowane dla odbiorcy(ów) w trakcie ich wpisywania"; + +/* No comment provided by engineer. */ +"Send direct message" = "Wyślij wiadomość bezpośrednią"; + +/* No comment provided by engineer. */ +"Send link previews" = "Wyślij podgląd linku"; + +/* No comment provided by engineer. */ +"Send live message" = "Wyślij wiadomość na żywo"; + +/* No comment provided by engineer. */ +"Send notifications" = "Wyślij powiadomienia"; + +/* No comment provided by engineer. */ +"Send notifications:" = "Wyślij powiadomienia:"; + +/* No comment provided by engineer. */ +"Send questions and ideas" = "Wyślij pytania i pomysły"; + +/* No comment provided by engineer. */ +"Send them from gallery or custom keyboards." = "Wyślij je z galerii lub niestandardowych klawiatur."; + +/* No comment provided by engineer. */ +"Send videos and files via XFTP" = "Wysyłaj filmy i pliki przez XFTP"; + +/* No comment provided by engineer. */ +"Sender cancelled file transfer." = "Nadawca anulował transfer pliku."; + +/* No comment provided by engineer. */ +"Sender may have deleted the connection request." = "Nadawca mógł usunąć prośbę o połączenie."; + +/* No comment provided by engineer. */ +"Sending via" = "Wysyłanie przez"; + +/* notification */ +"Sent file event" = "Wyślij zdarzenie pliku"; + +/* No comment provided by engineer. */ +"Sent messages will be deleted after set time." = "Wysłane wiadomości zostaną usunięte po ustawionym czasie."; + +/* server test error */ +"Server requires authorization to create queues, check password" = "Serwer wymaga autoryzacji do tworzenia kolejek, sprawdź hasło"; + +/* server test error */ +"Server requires authorization to upload, check password" = "Serwer wymaga autoryzacji do przesłania, sprawdź hasło"; + +/* No comment provided by engineer. */ +"Server test failed!" = "Test serwera nie powiódł się!"; + +/* No comment provided by engineer. */ +"Servers" = "Serwery"; + +/* No comment provided by engineer. */ +"Set 1 day" = "Ustaw 1 dzień"; + +/* No comment provided by engineer. */ +"Set contact name…" = "Ustaw nazwę kontaktu…"; + +/* No comment provided by engineer. */ +"Set group preferences" = "Ustaw preferencje grupy"; + +/* No comment provided by engineer. */ +"Set passphrase to export" = "Ustaw hasło do eksportu"; + +/* No comment provided by engineer. */ +"Set the message shown to new members!" = "Ustaw wiadomość wyświetlaną nowym członkom!"; + +/* No comment provided by engineer. */ +"Set timeouts for proxy/VPN" = "Ustaw limity czasu dla serwera proxy/VPN"; + +/* No comment provided by engineer. */ +"Settings" = "Ustawienia"; + +/* chat item action */ +"Share" = "Udostępnij"; + +/* No comment provided by engineer. */ +"Share invitation link" = "Udostępnij link zaproszenia"; + +/* No comment provided by engineer. */ +"Share link" = "Udostępnij link"; + +/* No comment provided by engineer. */ +"Share one-time invitation link" = "Jednorazowy link zaproszenia"; + +/* No comment provided by engineer. */ +"Show calls in phone history" = "Pokaż połączenia w historii telefonu"; + +/* No comment provided by engineer. */ +"Show developer options" = "Pokaż opcje dewelopera"; + +/* No comment provided by engineer. */ +"Show preview" = "Pokaż podgląd"; + +/* No comment provided by engineer. */ +"Show QR code" = "Pokaż kod QR"; + +/* No comment provided by engineer. */ +"Show:" = "Pokaż:"; + +/* No comment provided by engineer. */ +"SimpleX Chat security was [audited by Trail of Bits](https://simplex.chat/blog/20221108-simplex-chat-v4.2-security-audit-new-website.html)." = "Bezpieczeństwo SimpleX Chat zostało [zaudytowane przez Trail of Bits](https://simplex.chat/blog/20221108-simplex-chat-v4.2-security-audit-new-website.html)."; + +/* simplex link type */ +"SimpleX contact address" = "Adres kontaktowy SimpleX"; + +/* notification */ +"SimpleX encrypted message or connection event" = "Szyfrowane zdarzenie wiadomości lub połączenia SimpleX"; + +/* simplex link type */ +"SimpleX group link" = "Link grupy SimpleX"; + +/* No comment provided by engineer. */ +"SimpleX links" = "Linki SimpleX"; + +/* No comment provided by engineer. */ +"SimpleX Lock" = "Blokada SimpleX"; + +/* No comment provided by engineer. */ +"SimpleX Lock mode" = "Tryb blokady SimpleX"; + +/* No comment provided by engineer. */ +"SimpleX Lock not enabled!" = "Blokada SimpleX wyłączona!"; + +/* No comment provided by engineer. */ +"SimpleX Lock turned on" = "Blokada SimpleX włączona"; + +/* simplex link type */ +"SimpleX one-time invitation" = "Zaproszenie jednorazowe SimpleX"; + +/* No comment provided by engineer. */ +"Skip" = "Pomiń"; + +/* No comment provided by engineer. */ +"Skipped messages" = "Pominięte wiadomości"; + +/* No comment provided by engineer. */ +"SMP servers" = "Serwery SMP"; + +/* notification title */ +"Somebody" = "Ktoś"; + +/* No comment provided by engineer. */ +"Start a new chat" = "Rozpocznij nowy czat"; + +/* No comment provided by engineer. */ +"Start chat" = "Rozpocznij czat"; + +/* No comment provided by engineer. */ +"Start migration" = "Rozpocznij migrację"; + +/* No comment provided by engineer. */ +"starting…" = "uruchamianie…"; + +/* No comment provided by engineer. */ +"Stop" = "Zatrzymaj"; + +/* No comment provided by engineer. */ +"Stop chat to enable database actions" = "Zatrzymaj czat, aby umożliwić działania na bazie danych"; + +/* No comment provided by engineer. */ +"Stop chat to export, import or delete chat database. You will not be able to receive and send messages while the chat is stopped." = "Zatrzymaj czat, aby wyeksportować, zaimportować lub usunąć bazę danych czatu. Podczas zatrzymania chatu nie będzie można odbierać ani wysyłać wiadomości."; + +/* No comment provided by engineer. */ +"Stop chat?" = "Zatrzymać czat?"; + +/* authentication reason */ +"Stop SimpleX" = "Zatrzymaj SimpleX"; + +/* No comment provided by engineer. */ +"strike" = "strajk"; + +/* No comment provided by engineer. */ +"Submit" = "Zatwierdź"; + +/* No comment provided by engineer. */ +"Support SimpleX Chat" = "Wspieraj SimpleX Chat"; + +/* No comment provided by engineer. */ +"System" = "System"; + +/* No comment provided by engineer. */ +"System authentication" = "Uwierzytelnianie systemu"; + +/* No comment provided by engineer. */ +"Take picture" = "Zrób zdjęcie"; + +/* No comment provided by engineer. */ +"Tap button " = "Naciśnij przycisk "; + +/* No comment provided by engineer. */ +"Tap to activate profile." = "Dotknij, aby aktywować profil."; + +/* No comment provided by engineer. */ +"Tap to join" = "Dotknij, aby dołączyć"; + +/* No comment provided by engineer. */ +"Tap to join incognito" = "Dotnij, aby dołączyć w trybie incognito"; + +/* No comment provided by engineer. */ +"Tap to start a new chat" = "Dotknij, aby rozpocząć nowy czat"; + +/* No comment provided by engineer. */ +"TCP connection timeout" = "Limit czasu połączenia TCP"; + +/* No comment provided by engineer. */ +"TCP_KEEPCNT" = "TCP_KEEPCNT"; + +/* No comment provided by engineer. */ +"TCP_KEEPIDLE" = "TCP_KEEPIDLE"; + +/* No comment provided by engineer. */ +"TCP_KEEPINTVL" = "TCP_KEEPINTVL"; + +/* server test failure */ +"Test failed at step %@." = "Test nie powiódł się na etapie %@."; + +/* No comment provided by engineer. */ +"Test server" = "Przetestuj serwer"; + +/* No comment provided by engineer. */ +"Test servers" = "Przetestuj serwery"; + +/* No comment provided by engineer. */ +"Tests failed!" = "Testy nie powiodły się!"; + +/* No comment provided by engineer. */ +"Thank you for installing SimpleX Chat!" = "Dziękujemy za zainstalowanie SimpleX Chat!"; + +/* No comment provided by engineer. */ +"Thanks to the users – [contribute via Weblate](https://github.com/simplex-chat/simplex-chat/tree/stable#translate-the-apps)!" = "Podziękowania dla użytkowników - [wkład za pośrednictwem Weblate](https://github.com/simplex-chat/simplex-chat/tree/stable#translate-the-apps)!"; + +/* No comment provided by engineer. */ +"Thanks to the users – contribute via Weblate!" = "Podziękowania dla użytkowników - wkład za pośrednictwem Weblate!"; + +/* No comment provided by engineer. */ +"The 1st platform without any user identifiers – private by design." = "Pierwsza platforma bez żadnych identyfikatorów użytkowników – z założenia prywatna."; + +/* No comment provided by engineer. */ +"The app can notify you when you receive messages or contact requests - please open settings to enable." = "Aplikacja może powiadamiać Cię, gdy otrzymujesz wiadomości lub prośby o kontakt — otwórz ustawienia, aby włączyć."; + +/* No comment provided by engineer. */ +"The attempt to change database passphrase was not completed." = "Próba zmiany hasła bazy danych nie została zakończona."; + +/* No comment provided by engineer. */ +"The connection you accepted will be cancelled!" = "Zaakceptowane przez Ciebie połączenie zostanie anulowane!"; + +/* No comment provided by engineer. */ +"The contact you shared this link with will NOT be able to connect!" = "Kontakt, któremu udostępniłeś ten link, NIE będzie mógł się połączyć!"; + +/* No comment provided by engineer. */ +"The created archive is available via app Settings / Database / Old database archive." = "Utworzone archiwum jest dostępne poprzez aplikację Ustawienia / Baza danych / Stare archiwum bazy danych."; + +/* No comment provided by engineer. */ +"The group is fully decentralized – it is visible only to the members." = "Grupa jest w pełni zdecentralizowana – jest widoczna tylko dla członków."; + +/* No comment provided by engineer. */ +"The message will be deleted for all members." = "Wiadomość zostanie usunięta dla wszystkich członków."; + +/* No comment provided by engineer. */ +"The message will be marked as moderated for all members." = "Wiadomość zostanie oznaczona jako moderowana dla wszystkich członków."; + +/* No comment provided by engineer. */ +"The next generation of private messaging" = "Następna generacja prywatnych wiadomości"; + +/* No comment provided by engineer. */ +"The old database was not removed during the migration, it can be deleted." = "Stara baza danych nie została usunięta podczas migracji, można ją usunąć."; + +/* No comment provided by engineer. */ +"The profile is only shared with your contacts." = "Profil jest udostępniany tylko Twoim kontaktom."; + +/* No comment provided by engineer. */ +"The sender will NOT be notified" = "Nadawca NIE zostanie powiadomiony"; + +/* No comment provided by engineer. */ +"The servers for new connections of your current chat profile **%@**." = "Serwery dla nowych połączeń bieżącego profilu czatu **%@**."; + +/* No comment provided by engineer. */ +"Theme" = "Motyw"; + +/* No comment provided by engineer. */ +"There should be at least one user profile." = "Powinien istnieć co najmniej jeden profil użytkownika."; + +/* No comment provided by engineer. */ +"There should be at least one visible user profile." = "Powinien istnieć co najmniej jeden widoczny profil użytkownika."; + +/* No comment provided by engineer. */ +"This action cannot be undone - all received and sent files and media will be deleted. Low resolution pictures will remain." = "Tego działania nie można cofnąć - wszystkie odebrane i wysłane pliki oraz media zostaną usunięte. Obrazy o niskiej rozdzielczości pozostaną."; + +/* No comment provided by engineer. */ +"This action cannot be undone - the messages sent and received earlier than selected will be deleted. It may take several minutes." = "Tego działania nie można cofnąć - wiadomości wysłane i odebrane wcześniej niż wybrane zostaną usunięte. Może to potrwać kilka minut."; + +/* No comment provided by engineer. */ +"This action cannot be undone - your profile, contacts, messages and files will be irreversibly lost." = "Tego działania nie można cofnąć - Twój profil, kontakty, wiadomości i pliki zostaną nieodwracalnie utracone."; + +/* notification title */ +"this contact" = "ten kontakt"; + +/* No comment provided by engineer. */ +"This feature is experimental! It will only work if the other client has version 4.2 installed. You should see the message in the conversation once the address change is completed – please check that you can still receive messages from this contact (or group member)." = "Ta funkcja jest eksperymentalna! Będzie działać tylko wtedy, gdy drugi klient ma zainstalowaną wersję 4.2. Po zakończeniu zmiany adresu powinieneś zobaczyć wiadomość w konwersacji - sprawdź, czy nadal możesz otrzymywać wiadomości od tego kontaktu (lub członka grupy)."; + +/* No comment provided by engineer. */ +"This group no longer exists." = "Ta grupa już nie istnieje."; + +/* No comment provided by engineer. */ +"This setting applies to messages in your current chat profile **%@**." = "To ustawienie dotyczy wiadomości Twojego bieżącego profilu czatu **%@**."; + +/* No comment provided by engineer. */ +"To ask any questions and to receive updates:" = "Aby zadać wszelkie pytania i otrzymywać aktualizacje:"; + +/* No comment provided by engineer. */ +"To find the profile used for an incognito connection, tap the contact or group name on top of the chat." = "Aby znaleźć profil używany do połączenia incognito, dotknij nazwę kontaktu lub grupy w górnej części czatu."; + +/* No comment provided by engineer. */ +"To make a new connection" = "Aby nawiązać nowe połączenie"; + +/* No comment provided by engineer. */ +"To protect privacy, instead of user IDs used by all other platforms, SimpleX has identifiers for message queues, separate for each of your contacts." = "Aby chronić prywatność, zamiast identyfikatorów użytkowników używanych przez wszystkie inne platformy, SimpleX ma identyfikatory dla kolejek wiadomości, oddzielne dla każdego z Twoich kontaktów."; + +/* No comment provided by engineer. */ +"To protect timezone, image/voice files use UTC." = "Aby chronić strefę czasową, pliki obrazów/głosów używają UTC."; + +/* No comment provided by engineer. */ +"To protect your information, turn on SimpleX Lock.\nYou will be prompted to complete authentication before this feature is enabled." = "Aby chronić swoje informacje, włącz funkcję blokady SimpleX.\nPrzed włączeniem tej funkcji zostanie wyświetlony monit uwierzytelniania."; + +/* No comment provided by engineer. */ +"To record voice message please grant permission to use Microphone." = "Aby nagrać wiadomość głosową należy udzielić zgody na użycie Mikrofonu."; + +/* No comment provided by engineer. */ +"To reveal your hidden profile, enter a full password into a search field in **Your chat profiles** page." = "Aby ujawnić Twój ukryty profil, wprowadź pełne hasło w pole wyszukiwania na stronie **Twoich profili czatu**."; + +/* No comment provided by engineer. */ +"To support instant push notifications the chat database has to be migrated." = "Aby obsługiwać natychmiastowe powiadomienia push, należy zmigrować bazę danych czatu."; + +/* No comment provided by engineer. */ +"To verify end-to-end encryption with your contact compare (or scan) the code on your devices." = "Aby zweryfikować szyfrowanie end-to-end z Twoim kontaktem porównaj (lub zeskanuj) kod na waszych urządzeniach."; + +/* No comment provided by engineer. */ +"Transport isolation" = "Izolacja transportu"; + +/* No comment provided by engineer. */ +"Trying to connect to the server used to receive messages from this contact (error: %@)." = "Próbowanie połączenia z serwerem używanym do odbierania wiadomości od tego kontaktu (błąd: %@)."; + +/* No comment provided by engineer. */ +"Trying to connect to the server used to receive messages from this contact." = "Próbowanie połączenia z serwerem używanym do odbierania wiadomości od tego kontaktu."; + +/* No comment provided by engineer. */ +"Turn off" = "Wyłącz"; + +/* No comment provided by engineer. */ +"Turn off notifications?" = "Wyłączyć powiadomienia?"; + +/* No comment provided by engineer. */ +"Turn on" = "Włącz"; + +/* No comment provided by engineer. */ +"Unable to record voice message" = "Nie można nagrać wiadomości głosowej"; + +/* No comment provided by engineer. */ +"Unexpected error: %@" = "Nieoczekiwany błąd: %@"; + +/* No comment provided by engineer. */ +"Unexpected migration state" = "Nieoczekiwany stan migracji"; + +/* No comment provided by engineer. */ +"Unhide" = "Odkryj"; + +/* No comment provided by engineer. */ +"Unhide chat profile" = "Odkryj profil czatu"; + +/* No comment provided by engineer. */ +"Unhide profile" = "Odkryj profil"; + +/* connection info */ +"unknown" = "nieznany"; + +/* callkit banner */ +"Unknown caller" = "Nieznany rozmówca"; + +/* No comment provided by engineer. */ +"Unknown database error: %@" = "Nieznany błąd bazy danych: %@"; + +/* No comment provided by engineer. */ +"Unknown error" = "Nieznany błąd"; + +/* No comment provided by engineer. */ +"Unless you use iOS call interface, enable Do Not Disturb mode to avoid interruptions." = "O ile nie korzystasz z interfejsu połączeń systemu iOS, włącz tryb Nie przeszkadzać, aby uniknąć przerywania."; + +/* No comment provided by engineer. */ +"Unless your contact deleted the connection or this link was already used, it might be a bug - please report it.\nTo connect, please ask your contact to create another connection link and check that you have a stable network connection." = "O ile Twój kontakt nie usunął połączenia lub ten link był już użyty, może to być błąd - zgłoś go.\nAby się połączyć, poproś Twój kontakt o utworzenie kolejnego linku połączenia i sprawdź, czy masz stabilne połączenie z siecią."; + +/* No comment provided by engineer. */ +"Unlock" = "Odblokuj"; + +/* authentication reason */ +"Unlock app" = "Odblokuj aplikację"; + +/* No comment provided by engineer. */ +"Unmute" = "Wyłącz wyciszenie"; + +/* No comment provided by engineer. */ +"Unread" = "Oznacz jako nieprzeczytane"; + +/* No comment provided by engineer. */ +"Update" = "Aktualizuj"; + +/* No comment provided by engineer. */ +"Update .onion hosts setting?" = "Zaktualizować ustawienie hostów .onion?"; + +/* No comment provided by engineer. */ +"Update database passphrase" = "Aktualizuj hasło do bazy danych"; + +/* No comment provided by engineer. */ +"Update network settings?" = "Zaktualizować ustawienia sieci?"; + +/* No comment provided by engineer. */ +"Update transport isolation mode?" = "Zaktualizować tryb izolacji transportu?"; + +/* rcv group event chat item */ +"updated group profile" = "zaktualizowano profil grupy"; + +/* No comment provided by engineer. */ +"Updating settings will re-connect the client to all servers." = "Aktualizacja ustawień spowoduje ponowne połączenie klienta ze wszystkimi serwerami."; + +/* No comment provided by engineer. */ +"Updating this setting will re-connect the client to all servers." = "Aktualizacja tych ustawień spowoduje ponowne połączenie klienta ze wszystkimi serwerami."; + +/* No comment provided by engineer. */ +"Upgrade and open chat" = "Zaktualizuj i otwórz czat"; + +/* server test step */ +"Upload file" = "Prześlij plik"; + +/* No comment provided by engineer. */ +"Use .onion hosts" = "Użyj hostów .onion"; + +/* No comment provided by engineer. */ +"Use chat" = "Użyj czatu"; + +/* No comment provided by engineer. */ +"Use for new connections" = "Użyj dla nowych połączeń"; + +/* No comment provided by engineer. */ +"Use iOS call interface" = "Użyj interfejsu połączeń iOS"; + +/* No comment provided by engineer. */ +"Use server" = "Użyj serwera"; + +/* No comment provided by engineer. */ +"Use SimpleX Chat servers?" = "Użyć serwerów SimpleX Chat?"; + +/* No comment provided by engineer. */ +"User profile" = "Profil użytkownika"; + +/* No comment provided by engineer. */ +"Using .onion hosts requires compatible VPN provider." = "Używanie hostów .onion wymaga kompatybilnego dostawcy VPN."; + +/* No comment provided by engineer. */ +"Using SimpleX Chat servers." = "Używanie serwerów SimpleX Chat."; + +/* No comment provided by engineer. */ +"v%@ (%@)" = "v%@ (%@)"; + +/* No comment provided by engineer. */ +"v4.6.1+ is required to receive via XFTP." = "v4.6.1+ jest wymagany do odbierania przez XFTP."; + +/* No comment provided by engineer. */ +"Verify connection security" = "Weryfikuj bezpieczeństwo połączenia"; + +/* No comment provided by engineer. */ +"Verify security code" = "Weryfikuj kod bezpieczeństwa"; + +/* No comment provided by engineer. */ +"Via browser" = "Przez przeglądarkę"; + +/* chat list item description */ +"via contact address link" = "przez link adresu kontaktu"; + +/* chat list item description */ +"via group link" = "przez link grupy"; + +/* chat list item description */ +"via one-time link" = "przez jednorazowy link"; + +/* No comment provided by engineer. */ +"via relay" = "przez przekaźnik"; + +/* No comment provided by engineer. */ +"Video call" = "Połączenie wideo"; + +/* No comment provided by engineer. */ +"video call (not e2e encrypted)" = "połączenie wideo (bez szyfrowania e2e)"; + +/* No comment provided by engineer. */ +"Video will be received when your contact completes uploading it." = "Film zostanie odebrany, gdy kontakt zakończy jego przesyłanie."; + +/* No comment provided by engineer. */ +"Video will be received when your contact is online, please wait or check later!" = "Film zostanie odebrany, gdy kontakt będzie online, poczekaj lub sprawdź później!"; + +/* No comment provided by engineer. */ +"View security code" = "Pokaż kod bezpieczeństwa"; + +/* No comment provided by engineer. */ +"Voice message…" = "Wiadomość głosowa…"; + +/* chat feature */ +"Voice messages" = "Wiadomości głosowe"; + +/* No comment provided by engineer. */ +"Voice messages are prohibited in this chat." = "Wiadomości głosowe są zabronione na tym czacie."; + +/* No comment provided by engineer. */ +"Voice messages are prohibited in this group." = "Wiadomości głosowe są zabronione w tej grupie."; + +/* No comment provided by engineer. */ +"Voice messages prohibited!" = "Wiadomości głosowe zabronione!"; + +/* No comment provided by engineer. */ +"waiting for answer…" = "oczekiwanie na odpowiedź…"; + +/* No comment provided by engineer. */ +"waiting for confirmation…" = "oczekiwanie na potwierdzenie…"; + +/* No comment provided by engineer. */ +"Waiting for file" = "Oczekiwanie na plik"; + +/* No comment provided by engineer. */ +"Waiting for image" = "Oczekiwanie na obraz"; + +/* No comment provided by engineer. */ +"Waiting for video" = "Oczekiwanie na film"; + +/* No comment provided by engineer. */ +"wants to connect to you!" = "chce się z Tobą połączyć!"; + +/* No comment provided by engineer. */ +"Warning: you may lose some data!" = "Uwaga: możesz stracić niektóre dane!"; + +/* No comment provided by engineer. */ +"WebRTC ICE servers" = "Serwery WebRTC ICE"; + +/* No comment provided by engineer. */ +"Welcome %@!" = "Witaj %@!"; + +/* No comment provided by engineer. */ +"Welcome message" = "Wiadomość powitalna"; + +/* No comment provided by engineer. */ +"What's new" = "Co nowego"; + +/* No comment provided by engineer. */ +"When available" = "Gdy dostępny"; + +/* No comment provided by engineer. */ +"When you share an incognito profile with somebody, this profile will be used for the groups they invite you to." = "Gdy udostępnisz komuś profil incognito, będzie on używany w grupach, do których Cię zaprosi."; + +/* No comment provided by engineer. */ +"With optional welcome message." = "Z opcjonalną wiadomością powitalną."; + +/* No comment provided by engineer. */ +"Wrong database passphrase" = "Nieprawidłowe hasło bazy danych"; + +/* No comment provided by engineer. */ +"Wrong passphrase!" = "Nieprawidłowe hasło!"; + +/* No comment provided by engineer. */ +"XFTP servers" = "Serwery XFTP"; + +/* pref value */ +"yes" = "tak"; + +/* No comment provided by engineer. */ +"You" = "Ty"; + +/* No comment provided by engineer. */ +"You accepted connection" = "Zaakceptowałeś połączenie"; + +/* No comment provided by engineer. */ +"You allow" = "Pozwalasz"; + +/* No comment provided by engineer. */ +"You already have a chat profile with the same display name. Please choose another name." = "Masz już profil czatu o tej samej nazwie wyświetlanej. Proszę wybrać inną nazwę."; + +/* No comment provided by engineer. */ +"You are already connected to %@." = "Jesteś już połączony z %@."; + +/* No comment provided by engineer. */ +"You are connected to the server used to receive messages from this contact." = "Jesteś połączony z serwerem używanym do odbierania wiadomości od tego kontaktu."; + +/* No comment provided by engineer. */ +"you are invited to group" = "jesteś zaproszony do grupy"; + +/* No comment provided by engineer. */ +"You are invited to group" = "Jesteś zaproszony do grupy"; + +/* No comment provided by engineer. */ +"you are observer" = "jesteś obserwatorem"; + +/* No comment provided by engineer. */ +"You can accept calls from lock screen, without device and app authentication." = "Możesz przyjmować połączenia z ekranu blokady, bez uwierzytelniania urządzenia i aplikacji."; + +/* No comment provided by engineer. */ +"You can also connect by clicking the link. If it opens in the browser, click **Open in mobile app** button." = "Możesz też połączyć się klikając w link. Jeśli otworzy się on w przeglądarce, kliknij przycisk **Otwórz w aplikacji mobilnej**."; + +/* No comment provided by engineer. */ +"You can hide or mute a user profile - swipe it to the right.\nSimpleX Lock must be enabled." = "Możesz ukryć lub wyciszyć profil użytkownika - przesuń palcem w prawo.\nFunkcja blokady SimpleX musi być włączona."; + +/* notification body */ +"You can now send messages to %@" = "Możesz teraz wysyłać wiadomości do %@"; + +/* No comment provided by engineer. */ +"You can set lock screen notification preview via settings." = "Podgląd powiadomień na ekranie blokady można ustawić w ustawieniach."; + +/* No comment provided by engineer. */ +"You can share a link or a QR code - anybody will be able to join the group. You won't lose members of the group if you later delete it." = "Możesz udostępnić link lub kod QR - każdy będzie mógł dołączyć do grupy. Nie stracisz członków grupy, jeśli później ją usuniesz."; + +/* No comment provided by engineer. */ +"You can share your address as a link or as a QR code - anybody will be able to connect to you. You won't lose your contacts if you later delete it." = "Możesz udostępnić swój adres jako link lub jako kod QR - każdy będzie mógł się z Tobą połączyć. Nie stracisz swoich kontaktów, jeśli później go usuniesz."; + +/* No comment provided by engineer. */ +"You can start chat via app Settings / Database or by restarting the app" = "Możesz rozpocząć czat poprzez Ustawienia aplikacji / Baza danych lub poprzez ponowne uruchomienie aplikacji"; + +/* No comment provided by engineer. */ +"You can turn on SimpleX Lock via Settings." = "Możesz włączyć blokadę SimpleX poprzez Ustawienia."; + +/* No comment provided by engineer. */ +"You can use markdown to format messages:" = "Możesz używać markdown do formatowania wiadomości:"; + +/* No comment provided by engineer. */ +"You can't send messages!" = "Nie możesz wysyłać wiadomości!"; + +/* chat item text */ +"you changed address" = "zmieniłeś adres"; + +/* chat item text */ +"you changed address for %@" = "zmieniłeś adres dla %@"; + +/* snd group event chat item */ +"you changed role for yourself to %@" = "zmieniłeś rolę dla siebie na %@"; + +/* snd group event chat item */ +"you changed role of %@ to %@" = "zmieniłeś rolę %1$@ na %2$@"; + +/* No comment provided by engineer. */ +"You control through which server(s) **to receive** the messages, your contacts – the servers you use to message them." = "Kontrolujesz przez który serwer(y) **odbierać** wiadomości, Twoje kontakty - serwery, których używasz do wysyłania im wiadomości."; + +/* No comment provided by engineer. */ +"You could not be verified; please try again." = "Nie można zweryfikować użytkownika; proszę spróbować ponownie."; + +/* No comment provided by engineer. */ +"You have no chats" = "Nie masz czatów"; + +/* No comment provided by engineer. */ +"You have to enter passphrase every time the app starts - it is not stored on the device." = "Musisz wprowadzić hasło przy każdym uruchomieniu aplikacji - nie jest one przechowywane na urządzeniu."; + +/* No comment provided by engineer. */ +"You invited your contact" = "Zaprosiłeś swój kontakt"; + +/* No comment provided by engineer. */ +"You joined this group" = "Dołączyłeś do tej grupy"; + +/* No comment provided by engineer. */ +"You joined this group. Connecting to inviting group member." = "Dołączyłeś do tej grupy. Łączenie z zapraszającym członkiem grupy."; + +/* snd group event chat item */ +"you left" = "wyszedłeś"; + +/* No comment provided by engineer. */ +"You must use the most recent version of your chat database on one device ONLY, otherwise you may stop receiving the messages from some contacts." = "Musisz używać najnowszej wersji bazy danych czatu TYLKO na jednym urządzeniu, w przeciwnym razie możesz przestać otrzymywać wiadomości od niektórych kontaktów."; + +/* No comment provided by engineer. */ +"You need to allow your contact to send voice messages to be able to send them." = "Musisz zezwolić Twojemu kontaktowi na wysyłanie wiadomości głosowych, aby móc je wysyłać."; + +/* No comment provided by engineer. */ +"You rejected group invitation" = "Odrzuciłeś zaproszenie do grupy"; + +/* snd group event chat item */ +"you removed %@" = "usunąłeś %@"; + +/* No comment provided by engineer. */ +"You sent group invitation" = "Wysłałeś zaproszenie do grupy"; + +/* chat list item description */ +"you shared one-time link" = "udostępniłeś jednorazowy link"; + +/* chat list item description */ +"you shared one-time link incognito" = "udostępniłeś jednorazowy link incognito"; + +/* No comment provided by engineer. */ +"You will be connected to group when the group host's device is online, please wait or check later!" = "Zostaniesz połączony do grupy, gdy urządzenie gospodarza grupy będzie online, proszę czekać lub sprawdzić później!"; + +/* No comment provided by engineer. */ +"You will be connected when your connection request is accepted, please wait or check later!" = "Zostaniesz połączony, gdy Twoje żądanie połączenia zostanie zaakceptowane, proszę czekać lub sprawdzić później!"; + +/* No comment provided by engineer. */ +"You will be connected when your contact's device is online, please wait or check later!" = "Zostaniesz połączony, gdy urządzenie Twojego kontaktu będzie online, proszę czekać lub sprawdzić później!"; + +/* No comment provided by engineer. */ +"You will be required to authenticate when you start or resume the app after 30 seconds in background." = "Uwierzytelnienie będzie wymagane przy uruchamianiu lub wznawianiu aplikacji po 30 sekundach w tle."; + +/* No comment provided by engineer. */ +"You will join a group this link refers to and connect to its group members." = "Dołączysz do grupy, do której odnosi się ten link i połączysz się z jej członkami."; + +/* No comment provided by engineer. */ +"You will still receive calls and notifications from muted profiles when they are active." = "Nadal będziesz otrzymywać połączenia i powiadomienia z wyciszonych profili, gdy są one aktywne."; + +/* No comment provided by engineer. */ +"You will stop receiving messages from this group. Chat history will be preserved." = "Przestaniesz otrzymywać wiadomości od tej grupy. Historia czatu zostanie zachowana."; + +/* No comment provided by engineer. */ +"you: " = "ty: "; + +/* No comment provided by engineer. */ +"You're trying to invite contact with whom you've shared an incognito profile to the group in which you're using your main profile" = "Próbujesz zaprosić osobę, z którą masz wspólny profil incognito do grupy, w której używasz swojego głównego profilu"; + +/* No comment provided by engineer. */ +"You're using an incognito profile for this group - to prevent sharing your main profile inviting contacts is not allowed" = "Używasz profilu incognito dla tej grupy - aby zapobiec udostępnianiu głównego profilu zapraszanie kontaktów jest zabronione"; + +/* No comment provided by engineer. */ +"Your %@ servers" = "Twoje serwery %@"; + +/* No comment provided by engineer. */ +"Your calls" = "Twoje połączenia"; + +/* No comment provided by engineer. */ +"Your chat database" = "Twoja baza danych czatu"; + +/* No comment provided by engineer. */ +"Your chat database is not encrypted - set passphrase to encrypt it." = "Baza danych czatu nie jest szyfrowana - ustaw hasło, aby ją zaszyfrować."; + +/* No comment provided by engineer. */ +"Your chat profile will be sent to group members" = "Twój profil czatu zostanie wysłany do członków grupy"; + +/* No comment provided by engineer. */ +"Your chat profile will be sent to your contact" = "Twój profil czatu zostanie wysłany do Twojego kontaktu"; + +/* No comment provided by engineer. */ +"Your chat profiles" = "Twoje profile czatu"; + +/* No comment provided by engineer. */ +"Your chats" = "Twoje czaty"; + +/* No comment provided by engineer. */ +"Your contact address" = "Twój adres kontaktowy"; + +/* No comment provided by engineer. */ +"Your contact can scan it from the app." = "Kontakt może zeskanować go z aplikacji."; + +/* No comment provided by engineer. */ +"Your contact needs to be online for the connection to complete.\nYou can cancel this connection and remove the contact (and try later with a new link)." = "Twój kontakt musi być online, aby połączenie zostało zakończone.\nMożesz anulować to połączenie i usunąć kontakt (i spróbować później z nowym linkiem)."; + +/* No comment provided by engineer. */ +"Your contact sent a file that is larger than currently supported maximum size (%@)." = "Twój kontakt wysłał plik, który jest większy niż obecnie obsługiwany maksymalny rozmiar (%@)."; + +/* No comment provided by engineer. */ +"Your contacts can allow full message deletion." = "Twoje kontakty mogą zezwolić na pełne usunięcie wiadomości."; + +/* No comment provided by engineer. */ +"Your current chat database will be DELETED and REPLACED with the imported one." = "Twoja obecna baza danych czatu zostanie usunięta i zastąpiona zaimportowaną."; + +/* No comment provided by engineer. */ +"Your current profile" = "Twój obecny profil"; + +/* No comment provided by engineer. */ +"Your ICE servers" = "Twoje serwery ICE"; + +/* No comment provided by engineer. */ +"Your preferences" = "Twoje preferencje"; + +/* No comment provided by engineer. */ +"Your privacy" = "Twoja prywatność"; + +/* No comment provided by engineer. */ +"Your profile is stored on your device and shared only with your contacts.\nSimpleX servers cannot see your profile." = "Twój profil jest przechowywany na urządzeniu i udostępniany tylko Twoim kontaktom.\nSerwery SimpleX nie mogą zobaczyć Twojego profilu."; + +/* No comment provided by engineer. */ +"Your profile will be sent to the contact that you received this link from" = "Twój profil zostanie wysłany do kontaktu, od którego otrzymałeś ten link"; + +/* No comment provided by engineer. */ +"Your profile, contacts and delivered messages are stored on your device." = "Twój profil, kontakty i dostarczone wiadomości są przechowywane na Twoim urządzeniu."; + +/* No comment provided by engineer. */ +"Your random profile" = "Twój losowy profil"; + +/* No comment provided by engineer. */ +"Your server" = "Twój serwer"; + +/* No comment provided by engineer. */ +"Your server address" = "Twój adres serwera"; + +/* No comment provided by engineer. */ +"Your settings" = "Twoje ustawienia"; + +/* No comment provided by engineer. */ +"Your SimpleX contact address" = "Twój adres kontaktowy SimpleX"; + +/* No comment provided by engineer. */ +"Your SMP servers" = "Twoje serwery SMP"; + +/* No comment provided by engineer. */ +"Your XFTP servers" = "Twoje serwery XFTP"; + diff --git a/apps/ios/pl.lproj/SimpleX--iOS--InfoPlist.strings b/apps/ios/pl.lproj/SimpleX--iOS--InfoPlist.strings new file mode 100644 index 0000000000..92f6ba7764 --- /dev/null +++ b/apps/ios/pl.lproj/SimpleX--iOS--InfoPlist.strings @@ -0,0 +1,15 @@ +/* Bundle name */ +"CFBundleName" = "SimpleX"; + +/* Privacy - Camera Usage Description */ +"NSCameraUsageDescription" = "SimpleX potrzebuje dostępu do kamery, w celu skanowania kodów QR aby połączyć się z innymi użytkownikami i połączeń wideo."; + +/* Privacy - Face ID Usage Description */ +"NSFaceIDUsageDescription" = "SimpleX używa Face ID do lokalnego uwierzytelniania"; + +/* Privacy - Microphone Usage Description */ +"NSMicrophoneUsageDescription" = "SimpleX potrzebuje dostępu do mikrofonu, w celu połączeń audio i wideo oraz nagrywania wiadomości głosowych."; + +/* Privacy - Photo Library Additions Usage Description */ +"NSPhotoLibraryAddUsageDescription" = "SimpleX potrzebuje dostępu do galerii zdjęć, w celu zapisywania i otrzymywania mediów"; + diff --git a/scripts/ios/export-localizations.sh b/scripts/ios/export-localizations.sh index d09486ff89..d0af2e7cfd 100755 --- a/scripts/ios/export-localizations.sh +++ b/scripts/ios/export-localizations.sh @@ -2,7 +2,7 @@ set -e -langs=( cs de es fr it nl ru zh-Hans ) +langs=( cs de es fr it nl pl ru zh-Hans ) for lang in "${langs[@]}"; do echo "***" diff --git a/scripts/ios/import-localizations.sh b/scripts/ios/import-localizations.sh index f3ffae33cd..ff4f8fe5f8 100755 --- a/scripts/ios/import-localizations.sh +++ b/scripts/ios/import-localizations.sh @@ -2,7 +2,7 @@ set -e -langs=( cs de es fr it nl ru zh-Hans ) +langs=( cs de es fr it nl pl ru zh-Hans ) for lang in "${langs[@]}"; do echo "***" From e5713087e32d0a596a442a91ec2ccff6d3184237 Mon Sep 17 00:00:00 2001 From: Evgeny Poberezkin <2769109+epoberezkin@users.noreply.github.com> Date: Fri, 14 Apr 2023 11:26:13 +0100 Subject: [PATCH 5/8] ios: export Polish localizations --- .../pl.xcloc/Localized Contents/pl.xliff | 4419 ++++++++--------- 1 file changed, 2202 insertions(+), 2217 deletions(-) diff --git a/apps/ios/SimpleX Localizations/pl.xcloc/Localized Contents/pl.xliff b/apps/ios/SimpleX Localizations/pl.xcloc/Localized Contents/pl.xliff index 5e0a011a76..8479fc7c16 100644 --- a/apps/ios/SimpleX Localizations/pl.xcloc/Localized Contents/pl.xliff +++ b/apps/ios/SimpleX Localizations/pl.xcloc/Localized Contents/pl.xliff @@ -5,2139 +5,2234 @@ - + - + No comment provided by engineer. - + - + No comment provided by engineer. - + - + No comment provided by engineer. - + - + No comment provided by engineer. - + ( - ( + ( No comment provided by engineer. - + (can be copied) - (można skopiować) + (można skopiować) No comment provided by engineer. - + !1 colored! - !1 kolorowy! + !1 kolorowy! No comment provided by engineer. - + #secret# - #sekret# + #sekret# No comment provided by engineer. - + %@ - %@ + %@ No comment provided by engineer. - + %@ %@ - %@ %@ + %@ %@ No comment provided by engineer. - + %@ / %@ - %@ / %@ + %@ / %@ No comment provided by engineer. - + %@ is connected! - %@ jest połączony! + %@ jest połączony! notification title - + %@ is not verified - %@ nie jest zweryfikowany + %@ nie jest zweryfikowany No comment provided by engineer. - + %@ is verified - %@ jest zweryfikowany + %@ jest zweryfikowany No comment provided by engineer. - + + %@ servers + %@ serwery + No comment provided by engineer. + + %@ wants to connect! - %@ chce się połączyć! + %@ chce się połączyć! notification title - + %d days - %d dni + %d dni message ttl - + %d hours - %d godzin + %d godzin message ttl - + %d min - %d min + %d min message ttl - + %d months - %d miesięcy + %d miesięcy message ttl - + %d sec - %d sek + %d sek message ttl - + %d skipped message(s) - %d pominięte wiadomość(i) + %d pominięte wiadomość(i) integrity error chat item - + %lld - %lld + %lld No comment provided by engineer. - + %lld %@ - %lld %@ + %lld %@ No comment provided by engineer. - + %lld contact(s) selected - %lld wybrany(e) kontakt(y) + %lld wybrany(e) kontakt(y) No comment provided by engineer. - + %lld file(s) with total size of %@ - %lld plik(i) o całkowitym rozmiarze %@ + %lld plik(i) o całkowitym rozmiarze %@ No comment provided by engineer. - + %lld members - %lld członków + %lld członków No comment provided by engineer. - + + %lld minutes + %lld minut + No comment provided by engineer. + + %lld second(s) - %lld sekund(y) + %lld sekund(y) No comment provided by engineer. - + + %lld seconds + %lld sekund + No comment provided by engineer. + + %lldd - %lldd + %lldd No comment provided by engineer. - + %lldh - %lldh + %lldh No comment provided by engineer. - + %lldk - %lldk + %lldk No comment provided by engineer. - + %lldm - %lldm + %lldm No comment provided by engineer. - + %lldmth - %lldmies + %lldmies No comment provided by engineer. - + %llds - %llds + %llds No comment provided by engineer. - + %lldw - %lldt + %lldt No comment provided by engineer. - + ( - ( + ( No comment provided by engineer. - + ) - ) + ) No comment provided by engineer. - + **Add new contact**: to create your one-time QR Code or link for your contact. - **Dodaj nowy kontakt**: aby stworzyć swój jednorazowy kod QR lub link dla kontaktu. + **Dodaj nowy kontakt**: aby stworzyć swój jednorazowy kod QR lub link dla kontaktu. No comment provided by engineer. - + **Create link / QR code** for your contact to use. - **Utwórz link / kod QR**, aby Twój kontakt mógł z niego skorzystać. + **Utwórz link / kod QR**, aby Twój kontakt mógł z niego skorzystać. No comment provided by engineer. - + **More private**: check new messages every 20 minutes. Device token is shared with SimpleX Chat server, but not how many contacts or messages you have. - **Bardziej prywatny**: sprawdzanie nowych wiadomości co 20 minut. Token urządzenia jest współdzielony z serwerem SimpleX Chat, ale nie informacje o liczbie kontaktów lub wiadomości. + **Bardziej prywatny**: sprawdzanie nowych wiadomości co 20 minut. Token urządzenia jest współdzielony z serwerem SimpleX Chat, ale nie informacje o liczbie kontaktów lub wiadomości. No comment provided by engineer. - + **Most private**: do not use SimpleX Chat notifications server, check messages periodically in the background (depends on how often you use the app). - **Najbardziej prywatny**: nie korzystaj z serwera powiadomień SimpleX Chat, sprawdzaj wiadomości okresowo w tle (zależy jak często korzystasz z aplikacji). + **Najbardziej prywatny**: nie korzystaj z serwera powiadomień SimpleX Chat, sprawdzaj wiadomości okresowo w tle (zależy jak często korzystasz z aplikacji). No comment provided by engineer. - + **Paste received link** or open it in the browser and tap **Open in mobile app**. - **Wklej otrzymany link** lub otwórz go w przeglądarce i dotknij **Otwórz w aplikacji mobilnej**. + **Wklej otrzymany link** lub otwórz go w przeglądarce i dotknij **Otwórz w aplikacji mobilnej**. No comment provided by engineer. - + **Please note**: you will NOT be able to recover or change passphrase if you lose it. - **Uwaga**: NIE będziesz w stanie odzyskać lub zmienić hasła, jeśli je stracisz. + **Uwaga**: NIE będziesz w stanie odzyskać lub zmienić hasła, jeśli je stracisz. No comment provided by engineer. - + **Recommended**: device token and notifications are sent to SimpleX Chat notification server, but not the message content, size or who it is from. - **Zalecane**: token urządzenia i powiadomienia są wysyłane do serwera powiadomień SimpleX Chat, ale nie treść wiadomości, rozmiar lub od kogo jest. + **Zalecane**: token urządzenia i powiadomienia są wysyłane do serwera powiadomień SimpleX Chat, ale nie treść wiadomości, rozmiar lub od kogo jest. No comment provided by engineer. - + **Scan QR code**: to connect to your contact in person or via video call. - **Skanuj kod QR**: aby połączyć się z kontaktem osobiście lub za pomocą połączenia wideo. + **Skanuj kod QR**: aby połączyć się z kontaktem osobiście lub za pomocą połączenia wideo. No comment provided by engineer. - + **Warning**: Instant push notifications require passphrase saved in Keychain. - **Uwaga**: Natychmiastowe powiadomienia push wymagają hasła zapisanego w Keychain. + **Uwaga**: Natychmiastowe powiadomienia push wymagają hasła zapisanego w Keychain. No comment provided by engineer. - + **e2e encrypted** audio call - **szyfrowane e2e** połączenie audio + **szyfrowane e2e** połączenie audio No comment provided by engineer. - + **e2e encrypted** video call - **szyfrowane e2e** połączenie wideo + **szyfrowane e2e** połączenie wideo No comment provided by engineer. - + \*bold* - \*pogrubiony* + \*pogrubiony* No comment provided by engineer. - + , - , + , No comment provided by engineer. - + . - . + . No comment provided by engineer. - + 1 day - 1 dzień + 1 dzień message ttl - + 1 hour - 1 godzina + 1 godzina message ttl - + 1 month - 1 miesiąc + 1 miesiąc message ttl - + 1 week - 1 tydzień + 1 tydzień message ttl - + 2 weeks - 2 tygodnie + 2 tygodnie message ttl - + 6 - 6 + 6 No comment provided by engineer. - + : - : + : No comment provided by engineer. - + A new contact - Nowy kontakt + Nowy kontakt notification title - + A random profile will be sent to the contact that you received this link from - Losowy profil zostanie wysłany do kontaktu, od którego otrzymałeś ten link + Losowy profil zostanie wysłany do kontaktu, od którego otrzymałeś ten link No comment provided by engineer. - + A random profile will be sent to your contact - Losowy profil zostanie wysłany do Twojego kontaktu + Losowy profil zostanie wysłany do Twojego kontaktu No comment provided by engineer. - + A separate TCP connection will be used **for each chat profile you have in the app**. - Oddzielne połączenie TCP będzie używane **dla każdego profilu czatu, który masz w aplikacji**. + Oddzielne połączenie TCP będzie używane **dla każdego profilu czatu, który masz w aplikacji**. No comment provided by engineer. - + A separate TCP connection will be used **for each contact and group member**. **Please note**: if you have many connections, your battery and traffic consumption can be substantially higher and some connections may fail. - Oddzielne połączenie TCP będzie używane **dla każdego kontaktu i członka grupy**. + Oddzielne połączenie TCP będzie używane **dla każdego kontaktu i członka grupy**. **Uwaga**: jeśli masz wiele połączeń, zużycie baterii i ruchu może być znacznie wyższe, a niektóre połączenia mogą się nie udać. No comment provided by engineer. - + About SimpleX - O SimpleX + O SimpleX No comment provided by engineer. - + About SimpleX Chat - O SimpleX Chat + O SimpleX Chat No comment provided by engineer. - + Accent color - Kolor akcentu + Kolor akcentu No comment provided by engineer. - + Accept - Akceptuj + Akceptuj accept contact request via notification accept incoming call via notification - + Accept contact - Akceptuj kontakt + Akceptuj kontakt No comment provided by engineer. - + Accept contact request from %@? - Zaakceptuj prośbę o kontakt od %@? + Zaakceptuj prośbę o kontakt od %@? notification body - + Accept incognito - Akceptuj incognito + Akceptuj incognito No comment provided by engineer. - + Accept requests - Akceptuj prośby + Akceptuj prośby No comment provided by engineer. - + Add preset servers - Dodaj gotowe serwery + Dodaj gotowe serwery No comment provided by engineer. - + Add profile - Dodaj profil + Dodaj profil No comment provided by engineer. - + Add servers by scanning QR codes. - Dodaj serwery, skanując kody QR. + Dodaj serwery, skanując kody QR. No comment provided by engineer. - + Add server… - Dodaj serwer… + Dodaj serwer… No comment provided by engineer. - + Add to another device - Dodaj do innego urządzenia + Dodaj do innego urządzenia No comment provided by engineer. - + Add welcome message - Dodaj wiadomość powitalną + Dodaj wiadomość powitalną No comment provided by engineer. - + Admins can create the links to join groups. - Administratorzy mogą tworzyć linki do dołączania do grup. + Administratorzy mogą tworzyć linki do dołączania do grup. No comment provided by engineer. - + Advanced network settings - Zaawansowane ustawienia sieci + Zaawansowane ustawienia sieci No comment provided by engineer. - + All chats and messages will be deleted - this cannot be undone! - Wszystkie czaty i wiadomości zostaną usunięte - nie można tego cofnąć! + Wszystkie czaty i wiadomości zostaną usunięte - nie można tego cofnąć! No comment provided by engineer. - + All group members will remain connected. - Wszyscy członkowie grupy pozostaną połączeni. + Wszyscy członkowie grupy pozostaną połączeni. No comment provided by engineer. - + All messages will be deleted - this cannot be undone! The messages will be deleted ONLY for you. - Wszystkie wiadomości zostaną usunięte - nie można tego cofnąć! Wiadomości zostaną usunięte TYLKO dla Ciebie. + Wszystkie wiadomości zostaną usunięte - nie można tego cofnąć! Wiadomości zostaną usunięte TYLKO dla Ciebie. No comment provided by engineer. - + All your contacts will remain connected - Wszystkie Twoje kontakty pozostaną połączone + Wszystkie Twoje kontakty pozostaną połączone No comment provided by engineer. - + Allow - Pozwól + Pozwól No comment provided by engineer. - + Allow disappearing messages only if your contact allows it to you. - Zezwól na znikające wiadomości tylko wtedy, gdy Twój kontakt Ci na to pozwoli. + Zezwól na znikające wiadomości tylko wtedy, gdy Twój kontakt Ci na to pozwoli. No comment provided by engineer. - + Allow irreversible message deletion only if your contact allows it to you. - Zezwalaj na nieodwracalne usuwanie wiadomości tylko wtedy, gdy Twój kontakt Ci na to pozwoli. + Zezwalaj na nieodwracalne usuwanie wiadomości tylko wtedy, gdy Twój kontakt Ci na to pozwoli. No comment provided by engineer. - + Allow sending direct messages to members. - Zezwalaj na wysyłanie bezpośrednich wiadomości do członków. + Zezwalaj na wysyłanie bezpośrednich wiadomości do członków. No comment provided by engineer. - + Allow sending disappearing messages. - Zezwól na wysyłanie znikających wiadomości. + Zezwól na wysyłanie znikających wiadomości. No comment provided by engineer. - + Allow to irreversibly delete sent messages. - Zezwól na nieodwracalne usunięcie wysłanych wiadomości. + Zezwól na nieodwracalne usunięcie wysłanych wiadomości. No comment provided by engineer. - + Allow to send voice messages. - Zezwól na wysyłanie wiadomości głosowych. + Zezwól na wysyłanie wiadomości głosowych. No comment provided by engineer. - + Allow voice messages only if your contact allows them. - Zezwalaj na wiadomości głosowe tylko wtedy, gdy Twój kontakt na nie pozwala. + Zezwalaj na wiadomości głosowe tylko wtedy, gdy Twój kontakt na nie pozwala. No comment provided by engineer. - + Allow voice messages? - Zezwolić na wiadomości głosowe? + Zezwolić na wiadomości głosowe? No comment provided by engineer. - + Allow your contacts to irreversibly delete sent messages. - Zezwól swoim kontaktom na nieodwracalne usuwanie wysłanych wiadomości. + Zezwól swoim kontaktom na nieodwracalne usuwanie wysłanych wiadomości. No comment provided by engineer. - + Allow your contacts to send disappearing messages. - Zezwól swoim kontaktom na wysyłanie znikających wiadomości. + Zezwól swoim kontaktom na wysyłanie znikających wiadomości. No comment provided by engineer. - + Allow your contacts to send voice messages. - Zezwól swoim kontaktom na wysyłanie wiadomości głosowych. + Zezwól swoim kontaktom na wysyłanie wiadomości głosowych. No comment provided by engineer. - + Already connected? - Już połączony? + Już połączony? No comment provided by engineer. - + Always use relay - Zawsze używaj przekaźnika + Zawsze używaj przekaźnika No comment provided by engineer. - + Answer call - Odbierz połączenie + Odbierz połączenie No comment provided by engineer. - + App build: %@ - Kompilacja aplikacji: %@ + Kompilacja aplikacji: %@ No comment provided by engineer. - + App icon - Ikona aplikacji + Ikona aplikacji No comment provided by engineer. - + App version - Wersja aplikacji + Wersja aplikacji No comment provided by engineer. - + App version: v%@ - Wersja aplikacji: v%@ + Wersja aplikacji: v%@ No comment provided by engineer. - + Appearance - Wygląd + Wygląd No comment provided by engineer. - + Attach - Dołącz + Dołącz No comment provided by engineer. - + Audio & video calls - Połączenia audio i wideo + Połączenia audio i wideo No comment provided by engineer. - + Audio and video calls - Połączenia audio i wideo + Połączenia audio i wideo No comment provided by engineer. - + + Authentication cancelled + Uwierzytelnianie anulowane + PIN entry + + Authentication failed - Uwierzytelnianie nie powiodło się + Uwierzytelnianie nie powiodło się No comment provided by engineer. - + Authentication is required before the call is connected, but you may miss calls. - Uwierzytelnienie jest wymagane przed połączeniem, ale możesz przegapić połączenia. + Uwierzytelnienie jest wymagane przed połączeniem, ale możesz przegapić połączenia. No comment provided by engineer. - + Authentication unavailable - Uwierzytelnianie niedostępne + Uwierzytelnianie niedostępne No comment provided by engineer. - + Auto-accept contact requests - Automatyczne akceptowanie próśb o kontakt + Automatyczne akceptowanie próśb o kontakt No comment provided by engineer. - + Auto-accept images - Automatyczne akceptowanie obrazów + Automatyczne akceptowanie obrazów No comment provided by engineer. - + Automatically - Automatycznie + Automatycznie No comment provided by engineer. - + Back - Wstecz + Wstecz No comment provided by engineer. - + Both you and your contact can irreversibly delete sent messages. - Zarówno Ty, jak i Twój kontakt możecie nieodwracalnie usunąć wysłane wiadomości. + Zarówno Ty, jak i Twój kontakt możecie nieodwracalnie usunąć wysłane wiadomości. No comment provided by engineer. - + Both you and your contact can send disappearing messages. - Zarówno Ty, jak i Twój kontakt możecie wysyłać znikające wiadomości. + Zarówno Ty, jak i Twój kontakt możecie wysyłać znikające wiadomości. No comment provided by engineer. - + Both you and your contact can send voice messages. - Zarówno Ty, jak i Twój kontakt możecie wysyłać wiadomości głosowe. + Zarówno Ty, jak i Twój kontakt możecie wysyłać wiadomości głosowe. No comment provided by engineer. - + By chat profile (default) or [by connection](https://simplex.chat/blog/20230204-simplex-chat-v4-5-user-chat-profiles.html#transport-isolation) (BETA). - Według profilu czatu (domyślnie) lub [według połączenia](https://simplex.chat/blog/20230204-simplex-chat-v4-5-user-chat-profiles.html#transport-isolation) (BETA). + Według profilu czatu (domyślnie) lub [według połączenia](https://simplex.chat/blog/20230204-simplex-chat-v4-5-user-chat-profiles.html#transport-isolation) (BETA). No comment provided by engineer. - + Call already ended! - Połączenie już zakończone! + Połączenie już zakończone! No comment provided by engineer. - + Calls - Połączenia + Połączenia No comment provided by engineer. - + Can't delete user profile! - Nie można usunąć profilu użytkownika! + Nie można usunąć profilu użytkownika! No comment provided by engineer. - + Can't invite contact! - Nie można zaprosić kontaktu! + Nie można zaprosić kontaktu! No comment provided by engineer. - + Can't invite contacts! - Nie można zaprosić kontaktów! + Nie można zaprosić kontaktów! No comment provided by engineer. - + Cancel - Anuluj + Anuluj chat item action - + Cancel file transfer? - Anulować transfer plików? + Anulować transfer plików? No comment provided by engineer. - + Cannot access keychain to save database password - Nie można uzyskać dostępu do pęku kluczy, aby zapisać hasło do bazy danych + Nie można uzyskać dostępu do pęku kluczy, aby zapisać hasło do bazy danych No comment provided by engineer. - + Cannot receive file - Nie można odebrać pliku + Nie można odebrać pliku No comment provided by engineer. - + Change - Zmień + Zmień No comment provided by engineer. - + + Change Passcode + Zmień kod dostępu + No comment provided by engineer. + + Change database passphrase? - Zmienić hasło bazy danych? + Zmienić hasło bazy danych? No comment provided by engineer. - + + Change lock mode + Zmień tryb blokady + authentication reason + + Change member role? - Zmienić rolę członka? + Zmienić rolę członka? No comment provided by engineer. - + + Change passcode + Zmień pin + authentication reason + + Change receiving address - Zmień adres odbioru + Zmień adres odbioru No comment provided by engineer. - + Change receiving address? - Zmienić adres odbioru? + Zmienić adres odbioru? No comment provided by engineer. - + Change role - Zmień rolę + Zmień rolę No comment provided by engineer. - + Chat archive - Archiwum czatu + Archiwum czatu No comment provided by engineer. - + Chat console - Konsola czatu + Konsola czatu No comment provided by engineer. - + Chat database - Baza danych czatu + Baza danych czatu No comment provided by engineer. - + Chat database deleted - Baza danych czatu usunięta + Baza danych czatu usunięta No comment provided by engineer. - + Chat database imported - Zaimportowano bazę danych czatu + Zaimportowano bazę danych czatu No comment provided by engineer. - + Chat is running - Czat jest uruchomiony + Czat jest uruchomiony No comment provided by engineer. - + Chat is stopped - Czat jest zatrzymany + Czat jest zatrzymany No comment provided by engineer. - + Chat preferences - Preferencje czatu + Preferencje czatu No comment provided by engineer. - + Chats - Czaty + Czaty No comment provided by engineer. - + Check server address and try again. - Sprawdź adres serwera i spróbuj ponownie. + Sprawdź adres serwera i spróbuj ponownie. No comment provided by engineer. - + Chinese and Spanish interface - Chiński i hiszpański interfejs + Chiński i hiszpański interfejs No comment provided by engineer. - + Choose file - Wybierz plik + Wybierz plik No comment provided by engineer. - + Choose from library - Wybierz z biblioteki + Wybierz z biblioteki No comment provided by engineer. - + Clear - Wyczyść + Wyczyść No comment provided by engineer. - + Clear conversation - Wyczyść rozmowę + Wyczyść rozmowę No comment provided by engineer. - + Clear conversation? - Wyczyścić rozmowę? + Wyczyścić rozmowę? No comment provided by engineer. - + Clear verification - Wyczyść weryfikację + Wyczyść weryfikację No comment provided by engineer. - + Colors - Kolory + Kolory No comment provided by engineer. - - Compare security codes with your contacts. - Porównaj kody bezpieczeństwa ze swoimi kontaktami. - No comment provided by engineer. - - - Configure ICE servers - Skonfiguruj serwery ICE - No comment provided by engineer. - - - Confirm - Potwierdź - No comment provided by engineer. - - - Confirm database upgrades - Potwierdź aktualizacje bazy danych - No comment provided by engineer. - - - Confirm new passphrase… - Potwierdź nowe hasło… - No comment provided by engineer. - - - Confirm password - Potwierdź hasło - No comment provided by engineer. - - - Connect - Połącz + + Compare file + Porównaj plik server test step - + + Compare security codes with your contacts. + Porównaj kody bezpieczeństwa ze swoimi kontaktami. + No comment provided by engineer. + + + Configure ICE servers + Skonfiguruj serwery ICE + No comment provided by engineer. + + + Confirm + Potwierdź + No comment provided by engineer. + + + Confirm Passcode + Potwierdź Pin + No comment provided by engineer. + + + Confirm database upgrades + Potwierdź aktualizacje bazy danych + No comment provided by engineer. + + + Confirm new passphrase… + Potwierdź nowe hasło… + No comment provided by engineer. + + + Confirm password + Potwierdź hasło + No comment provided by engineer. + + + Connect + Połącz + server test step + + Connect via contact link? - Połączyć się przez link kontaktowy? + Połączyć się przez link kontaktowy? No comment provided by engineer. - + Connect via group link? - Połącz się przez link grupowy? + Połącz się przez link grupowy? No comment provided by engineer. - + Connect via link - Połącz się przez link + Połącz się przez link No comment provided by engineer. - + Connect via link / QR code - Połącz się przez link / kod QR + Połącz się przez link / kod QR No comment provided by engineer. - + Connect via one-time link? - Połączyć się przez jednorazowy link? + Połączyć się przez jednorazowy link? No comment provided by engineer. - + Connecting to server… - Łączenie z serwerem… + Łączenie z serwerem… No comment provided by engineer. - + Connecting to server… (error: %@) - Łączenie z serwerem... (błąd: %@) + Łączenie z serwerem... (błąd: %@) No comment provided by engineer. - + Connection - Połączenie + Połączenie No comment provided by engineer. - + Connection error - Błąd połączenia + Błąd połączenia No comment provided by engineer. - + Connection error (AUTH) - Błąd połączenia (UWIERZYTELNIANIE) + Błąd połączenia (UWIERZYTELNIANIE) No comment provided by engineer. - + Connection request - Prośba o połączenie + Prośba o połączenie No comment provided by engineer. - + Connection request sent! - Prośba o połączenie wysłana! + Prośba o połączenie wysłana! No comment provided by engineer. - + Connection timeout - Czas połączenia minął + Czas połączenia minął No comment provided by engineer. - + Contact allows - Kontakt pozwala + Kontakt pozwala No comment provided by engineer. - + Contact already exists - Kontakt już istnieje + Kontakt już istnieje No comment provided by engineer. - + Contact and all messages will be deleted - this cannot be undone! - Kontakt i wszystkie wiadomości zostaną usunięte - nie można tego cofnąć! + Kontakt i wszystkie wiadomości zostaną usunięte - nie można tego cofnąć! No comment provided by engineer. - + Contact hidden: - Kontakt ukryty: + Kontakt ukryty: notification - + Contact is connected - Kontakt jest połączony + Kontakt jest połączony notification - + Contact is not connected yet! - Kontakt nie jest jeszcze połączony! + Kontakt nie jest jeszcze połączony! No comment provided by engineer. - + Contact name - Nazwa kontaktu + Nazwa kontaktu No comment provided by engineer. - + Contact preferences - Preferencje kontaktu + Preferencje kontaktu No comment provided by engineer. - + Contact requests - Prośby kontaktu + Prośby kontaktu No comment provided by engineer. - + Contacts can mark messages for deletion; you will be able to view them. - Kontakty mogą oznaczać wiadomości do usunięcia; będziesz mógł je zobaczyć. + Kontakty mogą oznaczać wiadomości do usunięcia; będziesz mógł je zobaczyć. No comment provided by engineer. - + Copy - Kopiuj + Kopiuj chat item action - + Core built at: %@ - Kompilacja rdzenia: %@ + Kompilacja rdzenia: %@ No comment provided by engineer. - + Core version: v%@ - Wersja rdzenia: v%@ + Wersja rdzenia: v%@ No comment provided by engineer. - + Create - Utwórz + Utwórz No comment provided by engineer. - + Create address - Utwórz adres + Utwórz adres No comment provided by engineer. - - Create group link - Utwórz link do grupy - No comment provided by engineer. - - - Create link - Utwórz link - No comment provided by engineer. - - - Create one-time invitation link - Utwórz jednorazowy link do zaproszenia - No comment provided by engineer. - - - Create queue - Utwórz kolejkę + + Create file + Utwórz plik server test step - + + Create group link + Utwórz link do grupy + No comment provided by engineer. + + + Create link + Utwórz link + No comment provided by engineer. + + + Create one-time invitation link + Utwórz jednorazowy link do zaproszenia + No comment provided by engineer. + + + Create queue + Utwórz kolejkę + server test step + + Create secret group - Utwórz tajną grupę + Utwórz tajną grupę No comment provided by engineer. - + Create your profile - Utwórz swój profil + Utwórz swój profil No comment provided by engineer. - + Created on %@ - Utworzony w dniu %@ + Utworzony w dniu %@ No comment provided by engineer. - + + Current Passcode + Aktualny Pin + No comment provided by engineer. + + Current passphrase… - Obecne hasło… + Obecne hasło… No comment provided by engineer. - + Currently maximum supported file size is %@. - Obecnie maksymalna obsługiwana wielkość pliku wynosi %@. + Obecnie maksymalna obsługiwana wielkość pliku wynosi %@. No comment provided by engineer. - + Dark - Ciemny + Ciemny No comment provided by engineer. - + Database ID - ID bazy danych + ID bazy danych No comment provided by engineer. - + Database IDs and Transport isolation option. - ID bazy danych i opcja izolacji transportu. + ID bazy danych i opcja izolacji transportu. No comment provided by engineer. - + Database downgrade - Obniż wersję bazy danych + Obniż wersję bazy danych No comment provided by engineer. - + Database encrypted! - Baza danych zaszyfrowana! + Baza danych zaszyfrowana! No comment provided by engineer. - + Database encryption passphrase will be updated and stored in the keychain. - Hasło szyfrowania bazy danych zostanie zaktualizowane i zapisane w pęku kluczy. + Hasło szyfrowania bazy danych zostanie zaktualizowane i zapisane w pęku kluczy. No comment provided by engineer. - + Database encryption passphrase will be updated. - Hasło szyfrowania bazy danych zostanie zaktualizowane. + Hasło szyfrowania bazy danych zostanie zaktualizowane. No comment provided by engineer. - + Database error - Błąd bazy danych + Błąd bazy danych No comment provided by engineer. - + Database is encrypted using a random passphrase, you can change it. - Baza danych jest szyfrowana za pomocą losowego hasła, można je zmienić. + Baza danych jest szyfrowana za pomocą losowego hasła, można je zmienić. No comment provided by engineer. - + Database is encrypted using a random passphrase. Please change it before exporting. - Baza danych jest zaszyfrowana przy użyciu losowego hasła. Proszę zmienić je przed eksportem. + Baza danych jest zaszyfrowana przy użyciu losowego hasła. Proszę zmienić je przed eksportem. No comment provided by engineer. - + Database passphrase - Hasło do bazy danych + Hasło do bazy danych No comment provided by engineer. - + Database passphrase & export - Hasło do bazy danych i eksport + Hasło do bazy danych i eksport No comment provided by engineer. - + Database passphrase is different from saved in the keychain. - Hasło bazy danych jest inne niż zapisane w pęku kluczy. + Hasło bazy danych jest inne niż zapisane w pęku kluczy. No comment provided by engineer. - + Database passphrase is required to open chat. - Hasło do bazy danych jest wymagane do otwarcia czatu. + Hasło do bazy danych jest wymagane do otwarcia czatu. No comment provided by engineer. - + Database upgrade - Aktualizacja bazy danych + Aktualizacja bazy danych No comment provided by engineer. - + Database will be encrypted and the passphrase stored in the keychain. - Baza danych zostanie zaszyfrowana, a hasło zapisane w pęku kluczy. + Baza danych zostanie zaszyfrowana, a hasło zapisane w pęku kluczy. No comment provided by engineer. - + Database will be encrypted. - Baza danych zostanie zaszyfrowana. + Baza danych zostanie zaszyfrowana. No comment provided by engineer. - + Database will be migrated when the app restarts - Baza danych zostanie zmigrowana po ponownym uruchomieniu aplikacji + Baza danych zostanie zmigrowana po ponownym uruchomieniu aplikacji No comment provided by engineer. - + Decentralized - Zdecentralizowane + Zdecentralizowane No comment provided by engineer. - + Delete - Usuń + Usuń chat item action - + Delete Contact - Usuń Kontakt + Usuń Kontakt No comment provided by engineer. - + Delete address - Usuń adres + Usuń adres No comment provided by engineer. - + Delete address? - Usunąć adres? + Usunąć adres? No comment provided by engineer. - + Delete after - Usuń po + Usuń po No comment provided by engineer. - + Delete all files - Usuń wszystkie pliki + Usuń wszystkie pliki No comment provided by engineer. - + Delete archive - Usuń archiwum + Usuń archiwum No comment provided by engineer. - + Delete chat archive? - Usunąć archiwum czatu? + Usunąć archiwum czatu? No comment provided by engineer. - + Delete chat profile - Usuń profil czatu + Usuń profil czatu No comment provided by engineer. - + Delete chat profile? - Usunąć profil czatu? + Usunąć profil czatu? No comment provided by engineer. - + Delete connection - Usuń połączenie + Usuń połączenie No comment provided by engineer. - + Delete contact - Usuń kontakt + Usuń kontakt No comment provided by engineer. - + Delete contact? - Usunąć kontakt? + Usunąć kontakt? No comment provided by engineer. - + Delete database - Usuń bazę danych + Usuń bazę danych No comment provided by engineer. - + + Delete file + Usuń plik + server test step + + Delete files and media? - Usunąć pliki i media? + Usunąć pliki i media? No comment provided by engineer. - + Delete files for all chat profiles - Usuń pliki dla wszystkich profili czatu + Usuń pliki dla wszystkich profili czatu No comment provided by engineer. - + Delete for everyone - Usuń dla wszystkich + Usuń dla wszystkich chat feature - + Delete for me - Usuń dla mnie + Usuń dla mnie No comment provided by engineer. - + Delete group - Usuń grupę + Usuń grupę No comment provided by engineer. - + Delete group? - Usunąć grupę? + Usunąć grupę? No comment provided by engineer. - + Delete invitation - Usuń zaproszenie + Usuń zaproszenie No comment provided by engineer. - + Delete link - Usuń link + Usuń link No comment provided by engineer. - + Delete link? - Usunąć link? + Usunąć link? No comment provided by engineer. - + Delete member message? - Usunąć wiadomość członka? + Usunąć wiadomość członka? No comment provided by engineer. - + Delete message? - Usunąć wiadomość? + Usunąć wiadomość? No comment provided by engineer. - + Delete messages - Usuń wiadomości + Usuń wiadomości No comment provided by engineer. - + Delete messages after - Usuń wiadomości po + Usuń wiadomości po No comment provided by engineer. - + Delete old database - Usuń starą bazę danych + Usuń starą bazę danych No comment provided by engineer. - + Delete old database? - Usunąć starą bazę danych? + Usunąć starą bazę danych? No comment provided by engineer. - + Delete pending connection - Usuń oczekujące połączenie + Usuń oczekujące połączenie No comment provided by engineer. - + Delete pending connection? - Usunąć oczekujące połączenie? + Usunąć oczekujące połączenie? No comment provided by engineer. - + Delete profile - Usuń profil + Usuń profil No comment provided by engineer. - + Delete queue - Usuń kolejkę + Usuń kolejkę server test step - + Delete user profile? - Usunąć profil użytkownika? + Usunąć profil użytkownika? No comment provided by engineer. - + Description - Opis + Opis No comment provided by engineer. - + Develop - Deweloperskie + Deweloperskie No comment provided by engineer. - + Developer tools - Narzędzia deweloperskie + Narzędzia deweloperskie No comment provided by engineer. - + Device - Urządzenie + Urządzenie No comment provided by engineer. - + Device authentication is disabled. Turning off SimpleX Lock. - Uwierzytelnianie urządzenia jest wyłączone. Wyłączanie blokady SimpleX. + Uwierzytelnianie urządzenia jest wyłączone. Wyłączanie blokady SimpleX. No comment provided by engineer. - + Device authentication is not enabled. You can turn on SimpleX Lock via Settings, once you enable device authentication. - Uwierzytelnianie urządzenia nie jest włączone. Możesz włączyć blokadę SimpleX w Ustawieniach po włączeniu uwierzytelniania urządzenia. + Uwierzytelnianie urządzenia nie jest włączone. Możesz włączyć blokadę SimpleX w Ustawieniach po włączeniu uwierzytelniania urządzenia. No comment provided by engineer. - + Different names, avatars and transport isolation. - Różne nazwy, awatary i izolacja transportu. + Różne nazwy, awatary i izolacja transportu. No comment provided by engineer. - + Direct messages - Bezpośrednie wiadomości + Bezpośrednie wiadomości chat feature - + Direct messages between members are prohibited in this group. - Bezpośrednie wiadomości między członkami są zabronione w tej grupie. + Bezpośrednie wiadomości między członkami są zabronione w tej grupie. No comment provided by engineer. - + Disable SimpleX Lock - Wyłącz blokadę SimpleX + Wyłącz blokadę SimpleX authentication reason - + Disappearing messages - Znikające wiadomości + Znikające wiadomości chat feature - + Disappearing messages are prohibited in this chat. - Znikające wiadomości są zabronione na tym czacie. + Znikające wiadomości są zabronione na tym czacie. No comment provided by engineer. - + Disappearing messages are prohibited in this group. - Znikające wiadomości są zabronione w tej grupie. + Znikające wiadomości są zabronione w tej grupie. No comment provided by engineer. - + Disconnect - Rozłącz + Rozłącz server test step - + Display name - Wyświetlana nazwa + Wyświetlana nazwa No comment provided by engineer. - + Display name: - Wyświetlana nazwa: + Wyświetlana nazwa: No comment provided by engineer. - + Do NOT use SimpleX for emergency calls. - NIE używaj SimpleX do połączeń alarmowych. + NIE używaj SimpleX do połączeń alarmowych. No comment provided by engineer. - + Do it later - Zrób to później + Zrób to później No comment provided by engineer. - + Don't show again - Nie pokazuj ponownie + Nie pokazuj ponownie No comment provided by engineer. - + Downgrade and open chat - Obniż wersję i otwórz czat + Obniż wersję i otwórz czat No comment provided by engineer. - + + Download file + Pobierz plik + server test step + + Duplicate display name! - Zduplikowana wyświetlana nazwa! + Zduplikowana wyświetlana nazwa! No comment provided by engineer. - + Edit - Edytuj + Edytuj chat item action - + Edit group profile - Edytuj profil grupy + Edytuj profil grupy No comment provided by engineer. - + Enable - Włącz + Włącz No comment provided by engineer. - + Enable SimpleX Lock - Włącz blokadę SimpleX + Włącz blokadę SimpleX authentication reason - + Enable TCP keep-alive - Włącz utrzymywanie aktywności TCP + Włącz utrzymywanie aktywności TCP No comment provided by engineer. - + Enable automatic message deletion? - Czy włączyć automatyczne usuwanie wiadomości? + Czy włączyć automatyczne usuwanie wiadomości? No comment provided by engineer. - + Enable instant notifications? - Włączyć natychmiastowe powiadomienia? + Włączyć natychmiastowe powiadomienia? No comment provided by engineer. - + + Enable lock + Włącz blokadę + No comment provided by engineer. + + Enable notifications - Włącz powiadomienia + Włącz powiadomienia No comment provided by engineer. - + Enable periodic notifications? - Włączyć okresowe powiadomienia? + Włączyć okresowe powiadomienia? No comment provided by engineer. - + Encrypt - Szyfruj + Szyfruj No comment provided by engineer. - + Encrypt database? - Zaszyfrować bazę danych? + Zaszyfrować bazę danych? No comment provided by engineer. - + Encrypted database - Zaszyfrowana baza danych + Zaszyfrowana baza danych No comment provided by engineer. - + Encrypted message or another event - Zaszyfrowana wiadomość lub inne zdarzenie + Zaszyfrowana wiadomość lub inne zdarzenie notification - + Encrypted message: database error - Zaszyfrowana wiadomość: błąd bazy danych + Zaszyfrowana wiadomość: błąd bazy danych notification - + Encrypted message: database migration error - Zaszyfrowana wiadomość: błąd migracji bazy danych + Zaszyfrowana wiadomość: błąd migracji bazy danych notification - + Encrypted message: keychain error - Zaszyfrowana wiadomość: błąd pęku kluczy + Zaszyfrowana wiadomość: błąd pęku kluczy notification - + Encrypted message: no passphrase - Zaszyfrowana wiadomość: brak hasła + Zaszyfrowana wiadomość: brak hasła notification - + Encrypted message: unexpected error - Zaszyfrowana wiadomość: nieoczekiwany błąd + Zaszyfrowana wiadomość: nieoczekiwany błąd notification - + + Enter Passcode + Wprowadź Pin + No comment provided by engineer. + + Enter correct passphrase. - Wprowadź poprawne hasło. + Wprowadź poprawne hasło. No comment provided by engineer. - + Enter passphrase… - Wprowadź hasło… + Wprowadź hasło… No comment provided by engineer. - + Enter password above to show! - Wprowadź hasło powyżej, aby pokazać! + Wprowadź hasło powyżej, aby pokazać! No comment provided by engineer. - + Enter server manually - Wprowadź serwer ręcznie + Wprowadź serwer ręcznie No comment provided by engineer. - + Error - Błąd + Błąd No comment provided by engineer. - + Error accepting contact request - Błąd przyjmowania prośby o kontakt + Błąd przyjmowania prośby o kontakt No comment provided by engineer. - + Error accessing database file - Błąd dostępu do pliku bazy danych + Błąd dostępu do pliku bazy danych No comment provided by engineer. - + Error adding member(s) - Błąd dodawania członka(ów) + Błąd dodawania członka(ów) No comment provided by engineer. - + Error changing address - Błąd zmiany adresu + Błąd zmiany adresu No comment provided by engineer. - + Error changing role - Błąd zmiany roli + Błąd zmiany roli No comment provided by engineer. - + Error changing setting - Błąd zmiany ustawienia + Błąd zmiany ustawienia No comment provided by engineer. - + Error creating address - Błąd tworzenia adresu + Błąd tworzenia adresu No comment provided by engineer. - + Error creating group - Błąd tworzenia grupy + Błąd tworzenia grupy No comment provided by engineer. - + Error creating group link - Błąd tworzenia linku grupy + Błąd tworzenia linku grupy No comment provided by engineer. - + Error creating profile! - Błąd tworzenia profilu! + Błąd tworzenia profilu! No comment provided by engineer. - + Error deleting chat database - Błąd usuwania bazy danych czatu + Błąd usuwania bazy danych czatu No comment provided by engineer. - + Error deleting chat! - Błąd usuwania czatu! + Błąd usuwania czatu! No comment provided by engineer. - + Error deleting connection - Błąd usuwania połączenia + Błąd usuwania połączenia No comment provided by engineer. - + Error deleting contact - Błąd usuwania kontaktu + Błąd usuwania kontaktu No comment provided by engineer. - + Error deleting database - Błąd usuwania bazy danych + Błąd usuwania bazy danych No comment provided by engineer. - + Error deleting old database - Błąd usuwania starej bazy danych + Błąd usuwania starej bazy danych No comment provided by engineer. - + Error deleting token - Błąd usuwania tokenu + Błąd usuwania tokenu No comment provided by engineer. - + Error deleting user profile - Błąd usuwania profilu użytkownika + Błąd usuwania profilu użytkownika No comment provided by engineer. - + Error enabling notifications - Błąd włączania powiadomień + Błąd włączania powiadomień No comment provided by engineer. - + Error encrypting database - Błąd szyfrowania bazy danych + Błąd szyfrowania bazy danych No comment provided by engineer. - + Error exporting chat database - Błąd eksportu bazy danych czatu + Błąd eksportu bazy danych czatu No comment provided by engineer. - + Error importing chat database - Błąd importu bazy danych czatu + Błąd importu bazy danych czatu No comment provided by engineer. - + Error joining group - Błąd dołączenia do grupy + Błąd dołączenia do grupy No comment provided by engineer. - + + Error loading %@ servers + Błąd ładowania %@ serwerów + No comment provided by engineer. + + Error receiving file - Błąd odbioru pliku + Błąd odbioru pliku No comment provided by engineer. - + Error removing member - Błąd usuwania członka + Błąd usuwania członka No comment provided by engineer. - + + Error saving %@ servers + Błąd zapisu %@ serwerów + No comment provided by engineer. + + Error saving ICE servers - Błąd zapisu serwerów ICE + Błąd zapisu serwerów ICE No comment provided by engineer. - - Error saving SMP servers - Błąd zapisu serwerów SMP - No comment provided by engineer. - - + Error saving group profile - Błąd zapisu profilu grupy + Błąd zapisu profilu grupy No comment provided by engineer. - + + Error saving passcode + Błąd zapisu pinu + No comment provided by engineer. + + Error saving passphrase to keychain - Błąd zapisu hasła do pęku kluczy + Błąd zapisu hasła do pęku kluczy No comment provided by engineer. - + Error saving user password - Błąd zapisu hasła użytkownika + Błąd zapisu hasła użytkownika No comment provided by engineer. - + Error sending message - Błąd wysyłania wiadomości + Błąd wysyłania wiadomości No comment provided by engineer. - + Error starting chat - Błąd uruchamiania czatu + Błąd uruchamiania czatu No comment provided by engineer. - + Error stopping chat - Błąd zatrzymania czatu + Błąd zatrzymania czatu No comment provided by engineer. - + Error switching profile! - Błąd przełączania profilu! + Błąd przełączania profilu! No comment provided by engineer. - + Error updating group link - Błąd aktualizacji linku grupy + Błąd aktualizacji linku grupy No comment provided by engineer. - + Error updating message - Błąd aktualizacji wiadomości + Błąd aktualizacji wiadomości No comment provided by engineer. - + Error updating settings - Błąd aktualizacji ustawień + Błąd aktualizacji ustawień No comment provided by engineer. - + Error updating user privacy - Błąd aktualizacji prywatności użytkownika + Błąd aktualizacji prywatności użytkownika No comment provided by engineer. - + Error: - Błąd: + Błąd: No comment provided by engineer. - + Error: %@ - Błąd: %@ + Błąd: %@ No comment provided by engineer. - + Error: URL is invalid - Błąd: URL jest nieprawidłowy + Błąd: URL jest nieprawidłowy No comment provided by engineer. - + Error: no database file - Błąd: brak pliku bazy danych + Błąd: brak pliku bazy danych No comment provided by engineer. - + Exit without saving - Wyjdź bez zapisywania + Wyjdź bez zapisywania No comment provided by engineer. - + Experimental - Eksperymentalne + Eksperymentalne No comment provided by engineer. - + Export database - Eksportuj bazę danych + Eksportuj bazę danych No comment provided by engineer. - + Export error: - Błąd eksportu: + Błąd eksportu: No comment provided by engineer. - + Exported database archive. - Wyeksportowane archiwum bazy danych. + Wyeksportowane archiwum bazy danych. No comment provided by engineer. - + Exporting database archive... - Eksportowanie archiwum bazy danych... + Eksportowanie archiwum bazy danych... No comment provided by engineer. - + Failed to remove passphrase - Nie udało się usunąć hasła + Nie udało się usunąć hasła No comment provided by engineer. - + File transfer will be cancelled. If it's in progress it will be stoppped. - Transfer plików zostanie anulowany. Jeśli jest w toku, zostanie zatrzymany. + Transfer plików zostanie anulowany. Jeśli jest w toku, zostanie zatrzymany. No comment provided by engineer. - + File will be received when your contact completes uploading it. - Plik zostanie odebrany, gdy Twój kontakt zakończy przesyłanie. + Plik zostanie odebrany, gdy Twój kontakt zakończy przesyłanie. No comment provided by engineer. - + File will be received when your contact is online, please wait or check later! - Plik zostanie odebrany, gdy Twój kontakt będzie online, proszę czekać lub sprawdzić później! + Plik zostanie odebrany, gdy Twój kontakt będzie online, proszę czekać lub sprawdzić później! No comment provided by engineer. - + File: %@ - Plik: %@ + Plik: %@ No comment provided by engineer. - + Files & media - Pliki i media + Pliki i media No comment provided by engineer. - + For console - Dla konsoli + Dla konsoli No comment provided by engineer. - + French interface - Francuski interfejs + Francuski interfejs No comment provided by engineer. - + Full link - Pełny link + Pełny link No comment provided by engineer. - + Full name (optional) - Pełna nazwa (opcjonalna) + Pełna nazwa (opcjonalna) No comment provided by engineer. - + Full name: - Pełna nazwa: + Pełna nazwa: No comment provided by engineer. - + Fully re-implemented - work in background! - W pełni ponownie zaimplementowany - praca w tle! + W pełni ponownie zaimplementowany - praca w tle! No comment provided by engineer. - + Further reduced battery usage - Jeszcze mniejsze zużycie baterii + Jeszcze mniejsze zużycie baterii No comment provided by engineer. - + GIFs and stickers - GIF-y i naklejki + GIF-y i naklejki No comment provided by engineer. - + Group - Grupa + Grupa No comment provided by engineer. - + Group display name - Wyświetlana nazwa grupy + Wyświetlana nazwa grupy No comment provided by engineer. - + Group full name (optional) - Pełna nazwa grupy (opcjonalne) + Pełna nazwa grupy (opcjonalne) No comment provided by engineer. - + Group image - Obraz grupy + Obraz grupy No comment provided by engineer. - + Group invitation - Zaproszenie grupy + Zaproszenie grupy No comment provided by engineer. - + Group invitation expired - Zaproszenie do grupy wygasło + Zaproszenie do grupy wygasło No comment provided by engineer. - + Group invitation is no longer valid, it was removed by sender. - Zaproszenie do grupy jest już nieważne, zostało usunięte przez nadawcę. + Zaproszenie do grupy jest już nieważne, zostało usunięte przez nadawcę. No comment provided by engineer. - + Group link - Link do grupy + Link do grupy No comment provided by engineer. - + Group links - Linki grupowe + Linki grupowe No comment provided by engineer. - + Group members can irreversibly delete sent messages. - Członkowie grupy mogą nieodwracalnie usuwać wysłane wiadomości. + Członkowie grupy mogą nieodwracalnie usuwać wysłane wiadomości. No comment provided by engineer. - + Group members can send direct messages. - Członkowie grupy mogą wysyłać bezpośrednie wiadomości. + Członkowie grupy mogą wysyłać bezpośrednie wiadomości. No comment provided by engineer. - + Group members can send disappearing messages. - Członkowie grupy mogą wysyłać znikające wiadomości. + Członkowie grupy mogą wysyłać znikające wiadomości. No comment provided by engineer. - + Group members can send voice messages. - Członkowie grupy mogą wysyłać wiadomości głosowe. + Członkowie grupy mogą wysyłać wiadomości głosowe. No comment provided by engineer. - + Group message: - Wiadomość grupowa: + Wiadomość grupowa: notification - + Group moderation - Moderacja grupy + Moderacja grupy No comment provided by engineer. - + Group preferences - Preferencje grupy + Preferencje grupy No comment provided by engineer. - + Group profile - Profil grupy + Profil grupy No comment provided by engineer. - + Group profile is stored on members' devices, not on the servers. - Profil grupy jest przechowywany na urządzeniach członków, a nie na serwerach. + Profil grupy jest przechowywany na urządzeniach członków, a nie na serwerach. No comment provided by engineer. - + Group welcome message - Wiadomość powitalna grupy + Wiadomość powitalna grupy No comment provided by engineer. - + Group will be deleted for all members - this cannot be undone! - Grupa zostanie usunięta dla wszystkich członków - nie można tego cofnąć! + Grupa zostanie usunięta dla wszystkich członków - nie można tego cofnąć! No comment provided by engineer. - + Group will be deleted for you - this cannot be undone! - Grupa zostanie usunięta dla Ciebie - nie można tego cofnąć! + Grupa zostanie usunięta dla Ciebie - nie można tego cofnąć! No comment provided by engineer. - + Help - Pomoc + Pomoc No comment provided by engineer. - + Hidden - Ukryte + Ukryte No comment provided by engineer. - + Hidden chat profiles - Ukryte profile czatów + Ukryte profile czatów No comment provided by engineer. - + Hidden profile password - Hasło ukrytego profilu + Hasło ukrytego profilu No comment provided by engineer. - + Hide - Ukryj + Ukryj chat item action - + Hide app screen in the recent apps. - Ukryj ekran aplikacji w ostatnich aplikacjach. + Ukryj ekran aplikacji w ostatnich aplikacjach. No comment provided by engineer. - + Hide profile - Ukryj profil + Ukryj profil No comment provided by engineer. - + Hide: - Ukryj: + Ukryj: No comment provided by engineer. - + How SimpleX works - Jak działa SimpleX + Jak działa SimpleX No comment provided by engineer. - + How it works - Jak to działa + Jak to działa No comment provided by engineer. - + How to - Jak + Jak No comment provided by engineer. - + How to use it - Jak korzystać + Jak korzystać No comment provided by engineer. - + How to use your servers - Jak korzystać z Twoich serwerów + Jak korzystać z Twoich serwerów No comment provided by engineer. - + ICE servers (one per line) - Serwery ICE (po jednym na linię) + Serwery ICE (po jednym na linię) No comment provided by engineer. - + If you can't meet in person, **show QR code in the video call**, or share the link. - Jeśli nie możesz spotkać się osobiście, **pokaż kod QR w rozmowie wideo** lub udostępnij link. + Jeśli nie możesz spotkać się osobiście, **pokaż kod QR w rozmowie wideo** lub udostępnij link. No comment provided by engineer. - + If you cannot meet in person, you can **scan QR code in the video call**, or your contact can share an invitation link. - Jeśli nie możesz spotkać się osobiście, możesz **zeskanować kod QR w rozmowie wideo** lub Twój kontakt może udostępnić link z zaproszeniem. + Jeśli nie możesz spotkać się osobiście, możesz **zeskanować kod QR w rozmowie wideo** lub Twój kontakt może udostępnić link z zaproszeniem. No comment provided by engineer. - + If you need to use the chat now tap **Do it later** below (you will be offered to migrate the database when you restart the app). - Jeśli potrzebujesz użyć czatu teraz, dotknij **Zrób to później** poniżej (zostanie Ci zaproponowana migracja bazy danych po ponownym uruchomieniu aplikacji). + Jeśli potrzebujesz użyć czatu teraz, dotknij **Zrób to później** poniżej (zostanie Ci zaproponowana migracja bazy danych po ponownym uruchomieniu aplikacji). No comment provided by engineer. - + Ignore - Ignoruj + Ignoruj No comment provided by engineer. - + Image will be received when your contact completes uploading it. - Obraz zostanie odebrany, gdy Twój kontakt zakończy jego przesyłanie. + Obraz zostanie odebrany, gdy Twój kontakt zakończy jego przesyłanie. No comment provided by engineer. - + Image will be received when your contact is online, please wait or check later! - Obraz zostanie odebrany, gdy kontakt będzie online, poczekaj lub sprawdź później! + Obraz zostanie odebrany, gdy kontakt będzie online, poczekaj lub sprawdź później! No comment provided by engineer. - + + Immediately + Natychmiast + No comment provided by engineer. + + Immune to spam and abuse - Odporność na spam i nadużycia + Odporność na spam i nadużycia No comment provided by engineer. - + Import - Importuj + Importuj No comment provided by engineer. - + Import chat database? - Zaimportować bazę danych czatu? + Zaimportować bazę danych czatu? No comment provided by engineer. - + Import database - Importuj bazę danych + Importuj bazę danych No comment provided by engineer. - + Improved privacy and security - Zwiększona prywatność i bezpieczeństwo + Zwiększona prywatność i bezpieczeństwo No comment provided by engineer. - + Improved server configuration - Ulepszona konfiguracja serwera + Ulepszona konfiguracja serwera No comment provided by engineer. - + Incognito - Incognito + Incognito No comment provided by engineer. - + Incognito mode - Tryb incognito + Tryb incognito No comment provided by engineer. - + Incognito mode is not supported here - your main profile will be sent to group members - Tryb Incognito nie jest tutaj obsługiwany - główny profil zostanie wysłany do członków grupy + Tryb Incognito nie jest tutaj obsługiwany - główny profil zostanie wysłany do członków grupy No comment provided by engineer. - + Incognito mode protects the privacy of your main profile name and image — for each new contact a new random profile is created. - Tryb incognito chroni prywatność nazwy i obrazu głównego profilu — dla każdego nowego kontaktu tworzony jest nowy losowy profil. + Tryb incognito chroni prywatność nazwy i obrazu głównego profilu — dla każdego nowego kontaktu tworzony jest nowy losowy profil. No comment provided by engineer. - + Incoming audio call - Przychodzące połączenie audio + Przychodzące połączenie audio notification - + Incoming call - Przychodzące połączenie + Przychodzące połączenie notification - + Incoming video call - Przychodzące połączenie wideo + Przychodzące połączenie wideo notification - + Incompatible database version - Niekompatybilna wersja bazy danych + Niekompatybilna wersja bazy danych No comment provided by engineer. - + + Incorrect passcode + Nieprawidłowy pin + PIN entry + + Incorrect security code! - Nieprawidłowy kod bezpieczeństwa! + Nieprawidłowy kod bezpieczeństwa! No comment provided by engineer. - + Initial role - Rola początkowa + Rola początkowa No comment provided by engineer. - + Install [SimpleX Chat for terminal](https://github.com/simplex-chat/simplex-chat) - Zainstaluj [SimpleX Chat na terminal](https://github.com/simplex-chat/simplex-chat) + Zainstaluj [SimpleX Chat na terminal](https://github.com/simplex-chat/simplex-chat) No comment provided by engineer. - + Instant push notifications will be hidden! - Natychmiastowe powiadomienia push będą ukryte! + Natychmiastowe powiadomienia push będą ukryte! No comment provided by engineer. - + Instantly - Natychmiastowo + Natychmiastowo No comment provided by engineer. - + Interface - Interfejs + Interfejs No comment provided by engineer. - + Invalid connection link - Nieprawidłowy link połączenia + Nieprawidłowy link połączenia No comment provided by engineer. - + Invalid server address! - Nieprawidłowy adres serwera! + Nieprawidłowy adres serwera! No comment provided by engineer. - + Invitation expired! - Zaproszenie wygasło! + Zaproszenie wygasło! No comment provided by engineer. - + Invite members - Zaproś członków + Zaproś członków No comment provided by engineer. - + Invite to group - Zaproś do grupy + Zaproś do grupy No comment provided by engineer. - + Irreversible message deletion - Nieodwracalne usuwanie wiadomości + Nieodwracalne usuwanie wiadomości No comment provided by engineer. - + Irreversible message deletion is prohibited in this chat. - Nieodwracalne usuwanie wiadomości jest na tym czacie zabronione. + Nieodwracalne usuwanie wiadomości jest na tym czacie zabronione. No comment provided by engineer. - + Irreversible message deletion is prohibited in this group. - Nieodwracalne usuwanie wiadomości jest w tej grupie zabronione. + Nieodwracalne usuwanie wiadomości jest w tej grupie zabronione. No comment provided by engineer. - + It allows having many anonymous connections without any shared data between them in a single chat profile. - Pozwala na posiadanie wielu anonimowych połączeń bez żadnych wspólnych danych między nimi w jednym profilu czatu. + Pozwala na posiadanie wielu anonimowych połączeń bez żadnych wspólnych danych między nimi w jednym profilu czatu. No comment provided by engineer. - + It can happen when: 1. The messages expire on the server if they were not received for 30 days, 2. The server you use to receive the messages from this contact was updated and restarted. 3. The connection is compromised. Please connect to the developers via Settings to receive the updates about the servers. We will be adding server redundancy to prevent lost messages. - Może to nastąpić, gdy: + Może to nastąpić, gdy: 1. Wiadomości wygasają na serwerze, jeśli nie zostały odebrane przez 30 dni, 2. Serwer, którego używasz do odbierania wiadomości od tego kontaktu został zaktualizowany i uruchomiony ponownie. 3. Połączenie jest skompromitowane. @@ -2145,2951 +2240,2841 @@ Proszę połączyć się z deweloperami przez Ustawienia, aby otrzymać aktualiz Będziemy dodawać redundancję serwerów, aby zapobiec utracie wiadomości. No comment provided by engineer. - + It seems like you are already connected via this link. If it is not the case, there was an error (%@). - Wygląda na to, że jesteś już połączony przez ten link. Jeśli tak nie jest, wystąpił błąd (%@). + Wygląda na to, że jesteś już połączony przez ten link. Jeśli tak nie jest, wystąpił błąd (%@). No comment provided by engineer. - + Italian interface - Włoski interfejs + Włoski interfejs No comment provided by engineer. - + Join - Dołącz + Dołącz No comment provided by engineer. - + Join group - Dołącz do grupy + Dołącz do grupy No comment provided by engineer. - + Join incognito - Dołącz incognito + Dołącz incognito No comment provided by engineer. - + Joining group - Dołączanie do grupy + Dołączanie do grupy No comment provided by engineer. - + + KeyChain error + Błąd pęku kluczy + No comment provided by engineer. + + Keychain error - Błąd pęku kluczy + Błąd pęku kluczy No comment provided by engineer. - + LIVE - NA ŻYWO + NA ŻYWO No comment provided by engineer. - + Large file! - Duży plik! + Duży plik! No comment provided by engineer. - + Leave - Opuść + Opuść No comment provided by engineer. - + Leave group - Opuść grupę + Opuść grupę No comment provided by engineer. - + Leave group? - Opuścić grupę? + Opuścić grupę? No comment provided by engineer. - + Light - Jasny + Jasny No comment provided by engineer. - + Limitations - Ograniczenia + Ograniczenia No comment provided by engineer. - + Live message! - Wiadomość na żywo! + Wiadomość na żywo! No comment provided by engineer. - + Live messages - Wiadomości na żywo + Wiadomości na żywo No comment provided by engineer. - + Local name - Nazwa lokalna + Nazwa lokalna No comment provided by engineer. - + Local profile data only - Tylko dane profilu lokalnego + Tylko dane profilu lokalnego No comment provided by engineer. - + + Lock after + Zablokuj po + No comment provided by engineer. + + + Lock mode + Tryb blokady + No comment provided by engineer. + + Make a private connection - Nawiąż prywatne połączenie + Nawiąż prywatne połączenie No comment provided by engineer. - + Make profile private! - Ustaw profil jako prywatny! + Ustaw profil jako prywatny! No comment provided by engineer. - - Make sure SMP server addresses are in correct format, line separated and are not duplicated (%@). - Upewnij się, że adresy serwerów SMP są w poprawnym formacie, rozdzielone liniami i nie są zduplikowane (%@). + + Make sure %@ server addresses are in correct format, line separated and are not duplicated (%@). + Upewnij się, że adresy serwerów %@ są w poprawnym formacie, rozdzielone liniami i nie są zduplikowane (%@). No comment provided by engineer. - + Make sure WebRTC ICE server addresses are in correct format, line separated and are not duplicated. - Upewnij się, że adresy serwerów WebRTC ICE są w poprawnym formacie, rozdzielone liniami i nie są zduplikowane. + Upewnij się, że adresy serwerów WebRTC ICE są w poprawnym formacie, rozdzielone liniami i nie są zduplikowane. No comment provided by engineer. - + Many people asked: *if SimpleX has no user identifiers, how can it deliver messages?* - Wiele osób pytało: *jeśli SimpleX nie ma identyfikatora użytkownika, jak może dostarczać wiadomości?* + Wiele osób pytało: *jeśli SimpleX nie ma identyfikatora użytkownika, jak może dostarczać wiadomości?* No comment provided by engineer. - + Mark deleted for everyone - Oznacz jako usunięty dla wszystkich + Oznacz jako usunięty dla wszystkich No comment provided by engineer. - + Mark read - Oznacz jako przeczytane + Oznacz jako przeczytane No comment provided by engineer. - + Mark verified - Oznacz jako zweryfikowane + Oznacz jako zweryfikowane No comment provided by engineer. - + Markdown in messages - Markdown w wiadomościach + Markdown w wiadomościach No comment provided by engineer. - + Max 30 seconds, received instantly. - Maksymalnie 30 sekund, odbierane natychmiast. + Maksymalnie 30 sekund, odbierane natychmiast. No comment provided by engineer. - + Member - Członek + Członek No comment provided by engineer. - + Member role will be changed to "%@". All group members will be notified. - Rola członka grupy zostanie zmieniona na "%@". Wszyscy członkowie grupy zostaną powiadomieni. + Rola członka grupy zostanie zmieniona na "%@". Wszyscy członkowie grupy zostaną powiadomieni. No comment provided by engineer. - + Member role will be changed to "%@". The member will receive a new invitation. - Rola członka zostanie zmieniona na "%@". Członek otrzyma nowe zaproszenie. + Rola członka zostanie zmieniona na "%@". Członek otrzyma nowe zaproszenie. No comment provided by engineer. - + Member will be removed from group - this cannot be undone! - Członek zostanie usunięty z grupy - nie można tego cofnąć! + Członek zostanie usunięty z grupy - nie można tego cofnąć! No comment provided by engineer. - + Message delivery error - Błąd dostarczenia wiadomości + Błąd dostarczenia wiadomości No comment provided by engineer. - + Message draft - Wersja robocza wiadomości + Wersja robocza wiadomości No comment provided by engineer. - + Message text - Tekst wiadomości + Tekst wiadomości No comment provided by engineer. - + Messages - Wiadomości + Wiadomości No comment provided by engineer. - + + Messages & files + Wiadomości i pliki + No comment provided by engineer. + + Migrating database archive... - Migrowanie archiwum bazy danych... + Migrowanie archiwum bazy danych... No comment provided by engineer. - + Migration error: - Błąd migracji: + Błąd migracji: No comment provided by engineer. - + Migration failed. Tap **Skip** below to continue using the current database. Please report the issue to the app developers via chat or email [chat@simplex.chat](mailto:chat@simplex.chat). - Migracja nie powiodła się. Dotknij **Pomiń** poniżej, aby kontynuować korzystanie z obecnej bazy danych. Prosimy o zgłoszenie problemu do twórców aplikacji poprzez czat lub email [chat@simplex.chat](mailto:chat@simplex.chat). + Migracja nie powiodła się. Dotknij **Pomiń** poniżej, aby kontynuować korzystanie z obecnej bazy danych. Prosimy o zgłoszenie problemu do twórców aplikacji poprzez czat lub email [chat@simplex.chat](mailto:chat@simplex.chat). No comment provided by engineer. - + Migration is completed - Migracja została zakończona + Migracja została zakończona No comment provided by engineer. - + Migrations: %@ - Migracje: %@ + Migracje: %@ No comment provided by engineer. - + Moderate - Moderowany + Moderowany chat item action - + More improvements are coming soon! - Więcej ulepszeń już wkrótce! + Więcej ulepszeń już wkrótce! No comment provided by engineer. - + Most likely this contact has deleted the connection with you. - Najprawdopodobniej ten kontakt usunął połączenie z Tobą. + Najprawdopodobniej ten kontakt usunął połączenie z Tobą. No comment provided by engineer. - + Multiple chat profiles - Wiele profili czatu + Wiele profili czatu No comment provided by engineer. - + Mute - Wycisz + Wycisz No comment provided by engineer. - + Muted when inactive! - Wyciszony, gdy jest nieaktywny! + Wyciszony, gdy jest nieaktywny! No comment provided by engineer. - + Name - Nazwa + Nazwa No comment provided by engineer. - + Network & servers - Sieć i serwery + Sieć i serwery No comment provided by engineer. - + Network settings - Ustawienia sieci + Ustawienia sieci No comment provided by engineer. - + Network status - Status sieci + Status sieci No comment provided by engineer. - + + New Passcode + Nowy Pin + No comment provided by engineer. + + New contact request - Nowa prośba o kontakt + Nowa prośba o kontakt notification - + New contact: - Nowy kontakt: + Nowy kontakt: notification - + New database archive - Nowe archiwum bazy danych + Nowe archiwum bazy danych No comment provided by engineer. - + New in %@ - Nowość w %@ + Nowość w %@ No comment provided by engineer. - + New member role - Nowa rola członka + Nowa rola członka No comment provided by engineer. - + New message - Nowa wiadomość + Nowa wiadomość notification - + New passphrase… - Nowe hasło… + Nowe hasło… No comment provided by engineer. - + No - Nie + Nie No comment provided by engineer. - + + No app password + Brak hasła aplikacji + Authentication unavailable + + No contacts selected - Nie wybrano kontaktów + Nie wybrano kontaktów No comment provided by engineer. - + No contacts to add - Brak kontaktów do dodania + Brak kontaktów do dodania No comment provided by engineer. - + No device token! - Brak tokenu urządzenia! + Brak tokenu urządzenia! No comment provided by engineer. - + Group not found! - Nie znaleziono grupy! + Nie znaleziono grupy! No comment provided by engineer. - + No permission to record voice message - Brak uprawnień do nagrywania wiadomości głosowej + Brak uprawnień do nagrywania wiadomości głosowej No comment provided by engineer. - + No received or sent files - Brak odebranych lub wysłanych plików + Brak odebranych lub wysłanych plików No comment provided by engineer. - + Notifications - Powiadomienia + Powiadomienia No comment provided by engineer. - + Notifications are disabled! - Powiadomienia są wyłączone! + Powiadomienia są wyłączone! No comment provided by engineer. - + Now admins can: - delete members' messages. - disable members ("observer" role) - Teraz administratorzy mogą: + Teraz administratorzy mogą: - usuwać wiadomości członków. - wyłączyć członków (rola "obserwatora") No comment provided by engineer. - + + Off + Wyłączony + No comment provided by engineer. + + Off (Local) - Wyłączony (Lokalnie) + Wyłączony (Lokalnie) No comment provided by engineer. - + Ok - Ok + Ok No comment provided by engineer. - + Old database - Stara baza danych + Stara baza danych No comment provided by engineer. - + Old database archive - Stare archiwum bazy danych + Stare archiwum bazy danych No comment provided by engineer. - + One-time invitation link - Jednorazowy link zaproszenia + Jednorazowy link zaproszenia No comment provided by engineer. - + Onion hosts will be required for connection. Requires enabling VPN. - Hosty onion będą wymagane do połączenia. Wymaga włączenia VPN. + Hosty onion będą wymagane do połączenia. Wymaga włączenia VPN. No comment provided by engineer. - + Onion hosts will be used when available. Requires enabling VPN. - Hosty onion będą używane, gdy będą dostępne. Wymaga włączenia VPN. + Hosty onion będą używane, gdy będą dostępne. Wymaga włączenia VPN. No comment provided by engineer. - + Onion hosts will not be used. - Hosty onion nie będą używane. + Hosty onion nie będą używane. No comment provided by engineer. - + Only client devices store user profiles, contacts, groups, and messages sent with **2-layer end-to-end encryption**. - Tylko urządzenia klienckie przechowują profile użytkowników, kontakty, grupy i wiadomości wysyłane za pomocą **2-warstwowego szyfrowania end-to-end**. + Tylko urządzenia klienckie przechowują profile użytkowników, kontakty, grupy i wiadomości wysyłane za pomocą **2-warstwowego szyfrowania end-to-end**. No comment provided by engineer. - + Only group owners can change group preferences. - Tylko właściciele grup mogą zmieniać preferencje grupy. + Tylko właściciele grup mogą zmieniać preferencje grupy. No comment provided by engineer. - + Only group owners can enable voice messages. - Tylko właściciele grup mogą włączyć wiadomości głosowe. + Tylko właściciele grup mogą włączyć wiadomości głosowe. No comment provided by engineer. - + Only you can irreversibly delete messages (your contact can mark them for deletion). - Tylko Ty możesz nieodwracalnie usunąć wiadomości (Twój kontakt może oznaczyć je do usunięcia). + Tylko Ty możesz nieodwracalnie usunąć wiadomości (Twój kontakt może oznaczyć je do usunięcia). No comment provided by engineer. - + Only you can send disappearing messages. - Tylko Ty możesz wysyłać znikające wiadomości. + Tylko Ty możesz wysyłać znikające wiadomości. No comment provided by engineer. - + Only you can send voice messages. - Tylko Ty możesz wysyłać wiadomości głosowe. + Tylko Ty możesz wysyłać wiadomości głosowe. No comment provided by engineer. - + Only your contact can irreversibly delete messages (you can mark them for deletion). - Tylko Twój kontakt może nieodwracalnie usunąć wiadomości (możesz oznaczyć je do usunięcia). + Tylko Twój kontakt może nieodwracalnie usunąć wiadomości (możesz oznaczyć je do usunięcia). No comment provided by engineer. - + Only your contact can send disappearing messages. - Tylko Twój kontakt może wysyłać znikające wiadomości. + Tylko Twój kontakt może wysyłać znikające wiadomości. No comment provided by engineer. - + Only your contact can send voice messages. - Tylko Twój kontakt może wysyłać wiadomości głosowe. + Tylko Twój kontakt może wysyłać wiadomości głosowe. No comment provided by engineer. - + Open Settings - Otwórz Ustawienia + Otwórz Ustawienia No comment provided by engineer. - + Open chat - Otwórz czat + Otwórz czat No comment provided by engineer. - + Open chat console - Otwórz konsolę czatu + Otwórz konsolę czatu authentication reason - + Open user profiles - Otwórz profile użytkownika + Otwórz profile użytkownika authentication reason - + Open-source protocol and code – anybody can run the servers. - Otwarto źródłowy protokół i kod - każdy może uruchomić serwery. + Otwarto źródłowy protokół i kod - każdy może uruchomić serwery. No comment provided by engineer. - + Opening the link in the browser may reduce connection privacy and security. Untrusted SimpleX links will be red. - Otwarcie łącza w przeglądarce może zmniejszyć prywatność i bezpieczeństwo połączenia. Niezaufane linki SimpleX będą miały kolor czerwony. + Otwarcie łącza w przeglądarce może zmniejszyć prywatność i bezpieczeństwo połączenia. Niezaufane linki SimpleX będą miały kolor czerwony. No comment provided by engineer. - + PING count - Liczba PINGÓW + Liczba PINGÓW No comment provided by engineer. - + PING interval - Interwał PINGU + Interwał PINGU No comment provided by engineer. - + + Passcode + Pin + No comment provided by engineer. + + + Passcode changed! + Pin zmieniony! + No comment provided by engineer. + + + Passcode entry + Wpis pinu + No comment provided by engineer. + + + Passcode not changed! + Pin nie został zmieniony! + No comment provided by engineer. + + + Passcode set! + Pin ustawiony! + No comment provided by engineer. + + Password to show - Hasło do wyświetlenia + Hasło do wyświetlenia No comment provided by engineer. - + Paste - Wklej + Wklej No comment provided by engineer. - + Paste image - Wklej obraz + Wklej obraz No comment provided by engineer. - + Paste received link - Wklej otrzymany link + Wklej otrzymany link No comment provided by engineer. - + Paste the link you received into the box below to connect with your contact. - Wklej otrzymany link w pole poniżej, aby połączyć się z kontaktem. + Wklej otrzymany link w pole poniżej, aby połączyć się z kontaktem. No comment provided by engineer. - + People can connect to you only via the links you share. - Ludzie mogą się z Tobą połączyć tylko poprzez linki, które udostępniasz. + Ludzie mogą się z Tobą połączyć tylko poprzez linki, które udostępniasz. No comment provided by engineer. - + Periodically - Okresowo + Okresowo No comment provided by engineer. - + Please ask your contact to enable sending voice messages. - Poproś Twój kontakt o włączenie wysyłania wiadomości głosowych. + Poproś Twój kontakt o włączenie wysyłania wiadomości głosowych. No comment provided by engineer. - + Please check that you used the correct link or ask your contact to send you another one. - Sprawdź, czy użyłeś prawidłowego linku lub poproś Twój kontakt o przesłanie innego. + Sprawdź, czy użyłeś prawidłowego linku lub poproś Twój kontakt o przesłanie innego. No comment provided by engineer. - + Please check your network connection with %@ and try again. - Sprawdzić połączenie sieciowe z %@ i spróbować ponownie. + Sprawdzić połączenie sieciowe z %@ i spróbować ponownie. No comment provided by engineer. - + Please check yours and your contact preferences. - Proszę sprawdzić preferencje Twoje i Twojego kontaktu. + Proszę sprawdzić preferencje Twoje i Twojego kontaktu. No comment provided by engineer. - + Please contact group admin. - Skontaktuj się z administratorem grupy. + Skontaktuj się z administratorem grupy. No comment provided by engineer. - + Please enter correct current passphrase. - Wprowadź poprawne aktualne hasło. + Wprowadź poprawne aktualne hasło. No comment provided by engineer. - + Please enter the previous password after restoring database backup. This action can not be undone. - Proszę podać poprzednie hasło po przywróceniu kopii zapasowej bazy danych. Tej czynności nie można cofnąć. + Proszę podać poprzednie hasło po przywróceniu kopii zapasowej bazy danych. Tej czynności nie można cofnąć. No comment provided by engineer. - + + Please remember or store it securely - there is no way to recover a lost passcode! + Prosimy o jego zapamiętanie lub bezpieczne przechowywanie - nie ma możliwości odzyskania utraconego pinu! + No comment provided by engineer. + + Please restart the app and migrate the database to enable push notifications. - Uruchom ponownie aplikację i przeprowadź migrację bazy danych, aby włączyć powiadomienia push. + Uruchom ponownie aplikację i przeprowadź migrację bazy danych, aby włączyć powiadomienia push. No comment provided by engineer. - + Please store passphrase securely, you will NOT be able to access chat if you lose it. - Prosimy o bezpieczne przechowywanie hasła, w przypadku jego utraty NIE będzie można uzyskać dostępu do czatu. + Prosimy o bezpieczne przechowywanie hasła, w przypadku jego utraty NIE będzie można uzyskać dostępu do czatu. No comment provided by engineer. - + Please store passphrase securely, you will NOT be able to change it if you lose it. - Prosimy o bezpieczne przechowywanie hasła, w przypadku jego utraty NIE będzie można go zmienić. + Prosimy o bezpieczne przechowywanie hasła, w przypadku jego utraty NIE będzie można go zmienić. No comment provided by engineer. - + Possibly, certificate fingerprint in server address is incorrect - Możliwe, że odcisk palca certyfikatu w adresie serwera jest nieprawidłowy + Możliwe, że odcisk palca certyfikatu w adresie serwera jest nieprawidłowy server test error - + Preserve the last message draft, with attachments. - Zachowaj ostatnią wersję roboczą wiadomości wraz z załącznikami. + Zachowaj ostatnią wersję roboczą wiadomości wraz z załącznikami. No comment provided by engineer. - + Preset server - Wstępnie ustawiony serwer + Wstępnie ustawiony serwer No comment provided by engineer. - + Preset server address - Wstępnie ustawiony adres serwera + Wstępnie ustawiony adres serwera No comment provided by engineer. - + Privacy & security - Prywatność i bezpieczeństwo + Prywatność i bezpieczeństwo No comment provided by engineer. - + Privacy redefined - Redefinicja prywatności + Redefinicja prywatności No comment provided by engineer. - + Private filenames - Prywatne nazwy plików + Prywatne nazwy plików No comment provided by engineer. - + Profile and server connections - Profil i połączenia z serwerem + Profil i połączenia z serwerem No comment provided by engineer. - + Profile image - Zdjęcie profilowe + Zdjęcie profilowe No comment provided by engineer. - + Profile password - Hasło profilu + Hasło profilu No comment provided by engineer. - + Prohibit irreversible message deletion. - Zabroń nieodwracalnego usuwania wiadomości. + Zabroń nieodwracalnego usuwania wiadomości. No comment provided by engineer. - + Prohibit sending direct messages to members. - Zabroń wysyłania bezpośrednich wiadomości do członków. + Zabroń wysyłania bezpośrednich wiadomości do członków. No comment provided by engineer. - + Prohibit sending disappearing messages. - Zabroń wysyłania znikających wiadomości. + Zabroń wysyłania znikających wiadomości. No comment provided by engineer. - + Prohibit sending voice messages. - Zabroń wysyłania wiadomości głosowych. + Zabroń wysyłania wiadomości głosowych. No comment provided by engineer. - + Protect app screen - Chroń ekran aplikacji + Chroń ekran aplikacji No comment provided by engineer. - + Protect your chat profiles with a password! - Chroń swoje profile czatu hasłem! + Chroń swoje profile czatu hasłem! No comment provided by engineer. - + Protocol timeout - Limit czasu protokołu + Limit czasu protokołu No comment provided by engineer. - + Push notifications - Powiadomienia push + Powiadomienia push No comment provided by engineer. - + Rate the app - Oceń aplikację + Oceń aplikację No comment provided by engineer. - + Read - Czytaj + Czytaj No comment provided by engineer. - + Read more in our GitHub repository. - Przeczytaj więcej na naszym repozytorium GitHub. + Przeczytaj więcej na naszym repozytorium GitHub. No comment provided by engineer. - + Read more in our [GitHub repository](https://github.com/simplex-chat/simplex-chat#readme). - Przeczytaj więcej na naszym [repozytorium GitHub](https://github.com/simplex-chat/simplex-chat#readme). + Przeczytaj więcej na naszym [repozytorium GitHub](https://github.com/simplex-chat/simplex-chat#readme). No comment provided by engineer. - + Received file event - Otrzymano zdarzenie pliku + Otrzymano zdarzenie pliku notification - + Receiving via - Odbieranie przez + Odbieranie przez No comment provided by engineer. - + Recipients see updates as you type them. - Odbiorcy widzą aktualizacje podczas ich wpisywania. + Odbiorcy widzą aktualizacje podczas ich wpisywania. No comment provided by engineer. - + Reduced battery usage - Zmniejszone zużycie baterii + Zmniejszone zużycie baterii No comment provided by engineer. - + Reject - Odrzuć + Odrzuć reject incoming call via notification - + Reject contact (sender NOT notified) - Odrzuć kontakt (nadawca NIE został powiadomiony) + Odrzuć kontakt (nadawca NIE został powiadomiony) No comment provided by engineer. - + Reject contact request - Odrzuć prośbę kontaktu + Odrzuć prośbę kontaktu No comment provided by engineer. - + Relay server is only used if necessary. Another party can observe your IP address. - Serwer przekaźnikowy jest używany tylko w razie potrzeby. Inna strona może obserwować Twój adres IP. + Serwer przekaźnikowy jest używany tylko w razie potrzeby. Inna strona może obserwować Twój adres IP. No comment provided by engineer. - + Relay server protects your IP address, but it can observe the duration of the call. - Serwer przekaźnikowy chroni Twój adres IP, ale może obserwować czas trwania połączenia. + Serwer przekaźnikowy chroni Twój adres IP, ale może obserwować czas trwania połączenia. No comment provided by engineer. - + Remove - Usuń + Usuń No comment provided by engineer. - + Remove member - Usuń członka + Usuń członka No comment provided by engineer. - + Remove member? - Usunąć członka? + Usunąć członka? No comment provided by engineer. - + Remove passphrase from keychain? - Usunąć hasło z pęku kluczy? + Usunąć hasło z pęku kluczy? No comment provided by engineer. - + Reply - Odpowiedz + Odpowiedz chat item action - + Required - Wymagane + Wymagane No comment provided by engineer. - + Reset - Resetuj + Resetuj No comment provided by engineer. - + Reset colors - Resetuj kolory + Resetuj kolory No comment provided by engineer. - + Reset to defaults - Przywróć wartości domyślne + Przywróć wartości domyślne No comment provided by engineer. - + Restart the app to create a new chat profile - Uruchom ponownie aplikację, aby utworzyć nowy profil czatu + Uruchom ponownie aplikację, aby utworzyć nowy profil czatu No comment provided by engineer. - + Restart the app to use imported chat database - Uruchom ponownie aplikację, aby użyć zaimportowanej bazy danych czatu + Uruchom ponownie aplikację, aby użyć zaimportowanej bazy danych czatu No comment provided by engineer. - + Restore - Przywróć + Przywróć No comment provided by engineer. - + Restore database backup - Przywróć kopię zapasową bazy danych + Przywróć kopię zapasową bazy danych No comment provided by engineer. - + Restore database backup? - Przywrócić kopię zapasową bazy danych? + Przywrócić kopię zapasową bazy danych? No comment provided by engineer. - + Restore database error - Błąd przywracania bazy danych + Błąd przywracania bazy danych No comment provided by engineer. - + Reveal - Ujawnij + Ujawnij chat item action - + Revert - Przywrócić + Przywrócić No comment provided by engineer. - + Role - Rola + Rola No comment provided by engineer. - + Run chat - Uruchom czat + Uruchom czat No comment provided by engineer. - + SMP servers - Serwery SMP + Serwery SMP No comment provided by engineer. - + Save - Zapisz + Zapisz chat item action - + Save (and notify contacts) - Zapisz (i powiadom kontakty) + Zapisz (i powiadom kontakty) No comment provided by engineer. - + Save and notify contact - Zapisz i powiadom kontakt + Zapisz i powiadom kontakt No comment provided by engineer. - + Save and notify group members - Zapisz i powiadom członków grupy + Zapisz i powiadom członków grupy No comment provided by engineer. - + Save and update group profile - Zapisz i zaktualizuj profil grupowy + Zapisz i zaktualizuj profil grupowy No comment provided by engineer. - + Save archive - Zapisz archiwum + Zapisz archiwum No comment provided by engineer. - + Save group profile - Zapisz profil grupy + Zapisz profil grupy No comment provided by engineer. - + Save passphrase and open chat - Zapisz hasło i otwórz czat + Zapisz hasło i otwórz czat No comment provided by engineer. - + Save passphrase in Keychain - Zapisz hasło w pęku kluczy + Zapisz hasło w pęku kluczy No comment provided by engineer. - + Save preferences? - Zapisać preferencje? + Zapisać preferencje? No comment provided by engineer. - + Save profile password - Zapisz hasło profilu + Zapisz hasło profilu No comment provided by engineer. - + Save servers - Zapisz serwery + Zapisz serwery No comment provided by engineer. - + Save servers? - Zapisać serwery? + Zapisać serwery? No comment provided by engineer. - + Save welcome message? - Zapisać wiadomość powitalną? + Zapisać wiadomość powitalną? No comment provided by engineer. - + Saved WebRTC ICE servers will be removed - Zapisane serwery WebRTC ICE zostaną usunięte + Zapisane serwery WebRTC ICE zostaną usunięte No comment provided by engineer. - + Scan QR code - Zeskanuj kod QR + Zeskanuj kod QR No comment provided by engineer. - + Scan code - Zeskanuj kod + Zeskanuj kod No comment provided by engineer. - + Scan security code from your contact's app. - Zeskanuj kod bezpieczeństwa z aplikacji Twojego kontaktu. + Zeskanuj kod bezpieczeństwa z aplikacji Twojego kontaktu. No comment provided by engineer. - + Scan server QR code - Zeskanuj kod QR serwera + Zeskanuj kod QR serwera No comment provided by engineer. - + Search - Szukaj + Szukaj No comment provided by engineer. - + Secure queue - Bezpieczna kolejka + Bezpieczna kolejka server test step - + Security assessment - Ocena bezpieczeństwa + Ocena bezpieczeństwa No comment provided by engineer. - + Security code - Kod bezpieczeństwa + Kod bezpieczeństwa No comment provided by engineer. - + Send - Wyślij + Wyślij No comment provided by engineer. - + Send a live message - it will update for the recipient(s) as you type it - Wysyłaj wiadomości na żywo - będą one aktualizowane dla odbiorcy(ów) w trakcie ich wpisywania + Wysyłaj wiadomości na żywo - będą one aktualizowane dla odbiorcy(ów) w trakcie ich wpisywania No comment provided by engineer. - + Send direct message - Wyślij wiadomość bezpośrednią + Wyślij wiadomość bezpośrednią No comment provided by engineer. - - Send files via XFTP - Wyślij pliki przez XFTP - No comment provided by engineer. - - + Send link previews - Wyślij podgląd linku + Wyślij podgląd linku No comment provided by engineer. - + Send live message - Wyślij wiadomość na żywo + Wyślij wiadomość na żywo No comment provided by engineer. - + Send notifications - Wyślij powiadomienia + Wyślij powiadomienia No comment provided by engineer. - + Send notifications: - Wyślij powiadomienia: + Wyślij powiadomienia: No comment provided by engineer. - + Send questions and ideas - Wyślij pytania i pomysły + Wyślij pytania i pomysły No comment provided by engineer. - + Send them from gallery or custom keyboards. - Wyślij je z galerii lub niestandardowych klawiatur. + Wyślij je z galerii lub niestandardowych klawiatur. No comment provided by engineer. - + + Send videos and files via XFTP + Wysyłaj filmy i pliki przez XFTP + No comment provided by engineer. + + Sender cancelled file transfer. - Nadawca anulował transfer pliku. + Nadawca anulował transfer pliku. No comment provided by engineer. - + Sender may have deleted the connection request. - Nadawca mógł usunąć prośbę o połączenie. + Nadawca mógł usunąć prośbę o połączenie. No comment provided by engineer. - + Sending via - Wysyłanie przez + Wysyłanie przez No comment provided by engineer. - + Sent file event - Wyślij zdarzenie pliku + Wyślij zdarzenie pliku notification - + Sent messages will be deleted after set time. - Wysłane wiadomości zostaną usunięte po ustawionym czasie. + Wysłane wiadomości zostaną usunięte po ustawionym czasie. No comment provided by engineer. - + Server requires authorization to create queues, check password - Serwer wymaga autoryzacji do tworzenia kolejek, sprawdź hasło + Serwer wymaga autoryzacji do tworzenia kolejek, sprawdź hasło server test error - + + Server requires authorization to upload, check password + Serwer wymaga autoryzacji do przesłania, sprawdź hasło + server test error + + Server test failed! - Test serwera nie powiódł się! + Test serwera nie powiódł się! No comment provided by engineer. - + Servers - Serwery + Serwery No comment provided by engineer. - + Set 1 day - Ustaw 1 dzień + Ustaw 1 dzień No comment provided by engineer. - + Set contact name… - Ustaw nazwę kontaktu… + Ustaw nazwę kontaktu… No comment provided by engineer. - + Set group preferences - Ustaw preferencje grupy + Ustaw preferencje grupy No comment provided by engineer. - + Set passphrase to export - Ustaw hasło do eksportu + Ustaw hasło do eksportu No comment provided by engineer. - + Set the message shown to new members! - Ustaw wiadomość wyświetlaną nowym członkom! + Ustaw wiadomość wyświetlaną nowym członkom! No comment provided by engineer. - + Set timeouts for proxy/VPN - Ustaw limity czasu dla serwera proxy/VPN + Ustaw limity czasu dla serwera proxy/VPN No comment provided by engineer. - + Settings - Ustawienia + Ustawienia No comment provided by engineer. - + Share - Udostępnij + Udostępnij chat item action - + Share invitation link - Udostępnij link zaproszenia + Udostępnij link zaproszenia No comment provided by engineer. - + Share link - Udostępnij link + Udostępnij link No comment provided by engineer. - + Share one-time invitation link - Jednorazowy link zaproszenia + Jednorazowy link zaproszenia No comment provided by engineer. - + Show QR code - Pokaż kod QR + Pokaż kod QR No comment provided by engineer. - + Show calls in phone history - Pokaż połączenia w historii telefonu + Pokaż połączenia w historii telefonu No comment provided by engineer. - + Show developer options - Pokaż opcje dewelopera + Pokaż opcje dewelopera No comment provided by engineer. - + Show preview - Pokaż podgląd + Pokaż podgląd No comment provided by engineer. - + Show: - Pokaż: + Pokaż: No comment provided by engineer. - + SimpleX Chat security was [audited by Trail of Bits](https://simplex.chat/blog/20221108-simplex-chat-v4.2-security-audit-new-website.html). - Bezpieczeństwo SimpleX Chat zostało [zaudytowane przez Trail of Bits](https://simplex.chat/blog/20221108-simplex-chat-v4.2-security-audit-new-website.html). + Bezpieczeństwo SimpleX Chat zostało [zaudytowane przez Trail of Bits](https://simplex.chat/blog/20221108-simplex-chat-v4.2-security-audit-new-website.html). No comment provided by engineer. - + SimpleX Lock - Blokada SimpleX + Blokada SimpleX No comment provided by engineer. - + + SimpleX Lock mode + Tryb blokady SimpleX + No comment provided by engineer. + + + SimpleX Lock not enabled! + Blokada SimpleX wyłączona! + No comment provided by engineer. + + SimpleX Lock turned on - Blokada SimpleX włączona + Blokada SimpleX włączona No comment provided by engineer. - + SimpleX contact address - Adres kontaktowy SimpleX + Adres kontaktowy SimpleX simplex link type - + SimpleX encrypted message or connection event - Szyfrowane zdarzenie wiadomości lub połączenia SimpleX + Szyfrowane zdarzenie wiadomości lub połączenia SimpleX notification - + SimpleX group link - Link grupy SimpleX + Link grupy SimpleX simplex link type - + SimpleX links - Linki SimpleX + Linki SimpleX No comment provided by engineer. - + SimpleX one-time invitation - Zaproszenie jednorazowe SimpleX + Zaproszenie jednorazowe SimpleX simplex link type - + Skip - Pomiń + Pomiń No comment provided by engineer. - + Skipped messages - Pominięte wiadomości + Pominięte wiadomości No comment provided by engineer. - + Somebody - Ktoś + Ktoś notification title - + Start a new chat - Rozpocznij nowy czat + Rozpocznij nowy czat No comment provided by engineer. - + Start chat - Rozpocznij czat + Rozpocznij czat No comment provided by engineer. - + Start migration - Rozpocznij migrację + Rozpocznij migrację No comment provided by engineer. - + Stop - Zatrzymaj + Zatrzymaj No comment provided by engineer. - + Stop SimpleX - Zatrzymaj SimpleX + Zatrzymaj SimpleX authentication reason - + Stop chat to enable database actions - Zatrzymaj czat, aby umożliwić działania na bazie danych + Zatrzymaj czat, aby umożliwić działania na bazie danych No comment provided by engineer. - + Stop chat to export, import or delete chat database. You will not be able to receive and send messages while the chat is stopped. - Zatrzymaj czat, aby wyeksportować, zaimportować lub usunąć bazę danych czatu. Podczas zatrzymania chatu nie będzie można odbierać ani wysyłać wiadomości. + Zatrzymaj czat, aby wyeksportować, zaimportować lub usunąć bazę danych czatu. Podczas zatrzymania chatu nie będzie można odbierać ani wysyłać wiadomości. No comment provided by engineer. - + Stop chat? - Zatrzymać czat? + Zatrzymać czat? No comment provided by engineer. - + + Submit + Zatwierdź + No comment provided by engineer. + + Support SimpleX Chat - Wspieraj SimpleX Chat + Wspieraj SimpleX Chat No comment provided by engineer. - + System - System + System No comment provided by engineer. - + + System authentication + Uwierzytelnianie systemu + No comment provided by engineer. + + TCP connection timeout - Limit czasu połączenia TCP + Limit czasu połączenia TCP No comment provided by engineer. - + TCP_KEEPCNT - TCP_KEEPCNT + TCP_KEEPCNT No comment provided by engineer. - + TCP_KEEPIDLE - TCP_KEEPIDLE + TCP_KEEPIDLE No comment provided by engineer. - + TCP_KEEPINTVL - TCP_KEEPINTVL + TCP_KEEPINTVL No comment provided by engineer. - + Take picture - Zrób zdjęcie + Zrób zdjęcie No comment provided by engineer. - + Tap button - Naciśnij przycisk + Naciśnij przycisk No comment provided by engineer. - + Tap to activate profile. - Dotknij, aby aktywować profil. + Dotknij, aby aktywować profil. No comment provided by engineer. - + Tap to join - Dotknij, aby dołączyć + Dotknij, aby dołączyć No comment provided by engineer. - + Tap to join incognito - Dotnij, aby dołączyć w trybie incognito + Dotnij, aby dołączyć w trybie incognito No comment provided by engineer. - + Tap to start a new chat - Dotknij, aby rozpocząć nowy czat + Dotknij, aby rozpocząć nowy czat No comment provided by engineer. - + Test failed at step %@. - Test nie powiódł się na etapie %@. + Test nie powiódł się na etapie %@. server test failure - + Test server - Przetestuj serwer + Przetestuj serwer No comment provided by engineer. - + Test servers - Przetestuj serwery + Przetestuj serwery No comment provided by engineer. - + Tests failed! - Testy nie powiodły się! + Testy nie powiodły się! No comment provided by engineer. - + Thank you for installing SimpleX Chat! - Dziękujemy za zainstalowanie SimpleX Chat! + Dziękujemy za zainstalowanie SimpleX Chat! No comment provided by engineer. - + Thanks to the users – [contribute via Weblate](https://github.com/simplex-chat/simplex-chat/tree/stable#translate-the-apps)! - Podziękowania dla użytkowników - [wkład za pośrednictwem Weblate](https://github.com/simplex-chat/simplex-chat/tree/stable#translate-the-apps)! + Podziękowania dla użytkowników - [wkład za pośrednictwem Weblate](https://github.com/simplex-chat/simplex-chat/tree/stable#translate-the-apps)! No comment provided by engineer. - + Thanks to the users – contribute via Weblate! - Podziękowania dla użytkowników - wkład za pośrednictwem Weblate! + Podziękowania dla użytkowników - wkład za pośrednictwem Weblate! No comment provided by engineer. - + The 1st platform without any user identifiers – private by design. - Pierwsza platforma bez żadnych identyfikatorów użytkowników – z założenia prywatna. + Pierwsza platforma bez żadnych identyfikatorów użytkowników – z założenia prywatna. No comment provided by engineer. - + The app can notify you when you receive messages or contact requests - please open settings to enable. - Aplikacja może powiadamiać Cię, gdy otrzymujesz wiadomości lub prośby o kontakt — otwórz ustawienia, aby włączyć. + Aplikacja może powiadamiać Cię, gdy otrzymujesz wiadomości lub prośby o kontakt — otwórz ustawienia, aby włączyć. No comment provided by engineer. - + The attempt to change database passphrase was not completed. - Próba zmiany hasła bazy danych nie została zakończona. + Próba zmiany hasła bazy danych nie została zakończona. No comment provided by engineer. - + The connection you accepted will be cancelled! - Zaakceptowane przez Ciebie połączenie zostanie anulowane! + Zaakceptowane przez Ciebie połączenie zostanie anulowane! No comment provided by engineer. - + The contact you shared this link with will NOT be able to connect! - Kontakt, któremu udostępniłeś ten link, NIE będzie mógł się połączyć! + Kontakt, któremu udostępniłeś ten link, NIE będzie mógł się połączyć! No comment provided by engineer. - + The created archive is available via app Settings / Database / Old database archive. - Utworzone archiwum jest dostępne poprzez aplikację Ustawienia / Baza danych / Stare archiwum bazy danych. + Utworzone archiwum jest dostępne poprzez aplikację Ustawienia / Baza danych / Stare archiwum bazy danych. No comment provided by engineer. - + The group is fully decentralized – it is visible only to the members. - Grupa jest w pełni zdecentralizowana – jest widoczna tylko dla członków. + Grupa jest w pełni zdecentralizowana – jest widoczna tylko dla członków. No comment provided by engineer. - + The message will be deleted for all members. - Wiadomość zostanie usunięta dla wszystkich członków. + Wiadomość zostanie usunięta dla wszystkich członków. No comment provided by engineer. - + The message will be marked as moderated for all members. - Wiadomość zostanie oznaczona jako moderowana dla wszystkich członków. + Wiadomość zostanie oznaczona jako moderowana dla wszystkich członków. No comment provided by engineer. - + The next generation of private messaging - Następna generacja prywatnych wiadomości + Następna generacja prywatnych wiadomości No comment provided by engineer. - + The old database was not removed during the migration, it can be deleted. - Stara baza danych nie została usunięta podczas migracji, można ją usunąć. + Stara baza danych nie została usunięta podczas migracji, można ją usunąć. No comment provided by engineer. - + The profile is only shared with your contacts. - Profil jest udostępniany tylko Twoim kontaktom. + Profil jest udostępniany tylko Twoim kontaktom. No comment provided by engineer. - + The sender will NOT be notified - Nadawca NIE zostanie powiadomiony + Nadawca NIE zostanie powiadomiony No comment provided by engineer. - + The servers for new connections of your current chat profile **%@**. - Serwery dla nowych połączeń bieżącego profilu czatu **%@**. + Serwery dla nowych połączeń bieżącego profilu czatu **%@**. No comment provided by engineer. - + Theme - Motyw + Motyw No comment provided by engineer. - + There should be at least one user profile. - Powinien istnieć co najmniej jeden profil użytkownika. + Powinien istnieć co najmniej jeden profil użytkownika. No comment provided by engineer. - + There should be at least one visible user profile. - Powinien istnieć co najmniej jeden widoczny profil użytkownika. + Powinien istnieć co najmniej jeden widoczny profil użytkownika. No comment provided by engineer. - + This action cannot be undone - all received and sent files and media will be deleted. Low resolution pictures will remain. - Tego działania nie można cofnąć - wszystkie odebrane i wysłane pliki oraz media zostaną usunięte. Obrazy o niskiej rozdzielczości pozostaną. + Tego działania nie można cofnąć - wszystkie odebrane i wysłane pliki oraz media zostaną usunięte. Obrazy o niskiej rozdzielczości pozostaną. No comment provided by engineer. - + This action cannot be undone - the messages sent and received earlier than selected will be deleted. It may take several minutes. - Tego działania nie można cofnąć - wiadomości wysłane i odebrane wcześniej niż wybrane zostaną usunięte. Może to potrwać kilka minut. + Tego działania nie można cofnąć - wiadomości wysłane i odebrane wcześniej niż wybrane zostaną usunięte. Może to potrwać kilka minut. No comment provided by engineer. - + This action cannot be undone - your profile, contacts, messages and files will be irreversibly lost. - Tego działania nie można cofnąć - Twój profil, kontakty, wiadomości i pliki zostaną nieodwracalnie utracone. + Tego działania nie można cofnąć - Twój profil, kontakty, wiadomości i pliki zostaną nieodwracalnie utracone. No comment provided by engineer. - + This feature is experimental! It will only work if the other client has version 4.2 installed. You should see the message in the conversation once the address change is completed – please check that you can still receive messages from this contact (or group member). - Ta funkcja jest eksperymentalna! Będzie działać tylko wtedy, gdy drugi klient ma zainstalowaną wersję 4.2. Po zakończeniu zmiany adresu powinieneś zobaczyć wiadomość w konwersacji - sprawdź, czy nadal możesz otrzymywać wiadomości od tego kontaktu (lub członka grupy). + Ta funkcja jest eksperymentalna! Będzie działać tylko wtedy, gdy drugi klient ma zainstalowaną wersję 4.2. Po zakończeniu zmiany adresu powinieneś zobaczyć wiadomość w konwersacji - sprawdź, czy nadal możesz otrzymywać wiadomości od tego kontaktu (lub członka grupy). No comment provided by engineer. - + This group no longer exists. - Ta grupa już nie istnieje. + Ta grupa już nie istnieje. No comment provided by engineer. - + This setting applies to messages in your current chat profile **%@**. - To ustawienie dotyczy wiadomości Twojego bieżącego profilu czatu **%@**. + To ustawienie dotyczy wiadomości Twojego bieżącego profilu czatu **%@**. No comment provided by engineer. - + To ask any questions and to receive updates: - Aby zadać wszelkie pytania i otrzymywać aktualizacje: + Aby zadać wszelkie pytania i otrzymywać aktualizacje: No comment provided by engineer. - + To find the profile used for an incognito connection, tap the contact or group name on top of the chat. - Aby znaleźć profil używany do połączenia incognito, dotknij nazwę kontaktu lub grupy w górnej części czatu. + Aby znaleźć profil używany do połączenia incognito, dotknij nazwę kontaktu lub grupy w górnej części czatu. No comment provided by engineer. - + To make a new connection - Aby nawiązać nowe połączenie + Aby nawiązać nowe połączenie No comment provided by engineer. - + To protect privacy, instead of user IDs used by all other platforms, SimpleX has identifiers for message queues, separate for each of your contacts. - Aby chronić prywatność, zamiast identyfikatorów użytkowników używanych przez wszystkie inne platformy, SimpleX ma identyfikatory dla kolejek wiadomości, oddzielne dla każdego z Twoich kontaktów. + Aby chronić prywatność, zamiast identyfikatorów użytkowników używanych przez wszystkie inne platformy, SimpleX ma identyfikatory dla kolejek wiadomości, oddzielne dla każdego z Twoich kontaktów. No comment provided by engineer. - + To protect timezone, image/voice files use UTC. - Aby chronić strefę czasową, pliki obrazów/głosów używają UTC. + Aby chronić strefę czasową, pliki obrazów/głosów używają UTC. No comment provided by engineer. - + To protect your information, turn on SimpleX Lock. You will be prompted to complete authentication before this feature is enabled. - Aby chronić swoje informacje, włącz funkcję blokady SimpleX. + Aby chronić swoje informacje, włącz funkcję blokady SimpleX. Przed włączeniem tej funkcji zostanie wyświetlony monit uwierzytelniania. No comment provided by engineer. - + To record voice message please grant permission to use Microphone. - Aby nagrać wiadomość głosową należy udzielić zgody na użycie Mikrofonu. + Aby nagrać wiadomość głosową należy udzielić zgody na użycie Mikrofonu. No comment provided by engineer. - + To reveal your hidden profile, enter a full password into a search field in **Your chat profiles** page. - Aby ujawnić Twój ukryty profil, wprowadź pełne hasło w pole wyszukiwania na stronie **Twoich profili czatu**. + Aby ujawnić Twój ukryty profil, wprowadź pełne hasło w pole wyszukiwania na stronie **Twoich profili czatu**. No comment provided by engineer. - + To support instant push notifications the chat database has to be migrated. - Aby obsługiwać natychmiastowe powiadomienia push, należy zmigrować bazę danych czatu. + Aby obsługiwać natychmiastowe powiadomienia push, należy zmigrować bazę danych czatu. No comment provided by engineer. - + To verify end-to-end encryption with your contact compare (or scan) the code on your devices. - Aby zweryfikować szyfrowanie end-to-end z Twoim kontaktem porównaj (lub zeskanuj) kod na waszych urządzeniach. + Aby zweryfikować szyfrowanie end-to-end z Twoim kontaktem porównaj (lub zeskanuj) kod na waszych urządzeniach. No comment provided by engineer. - + Transport isolation - Izolacja transportu + Izolacja transportu No comment provided by engineer. - + Trying to connect to the server used to receive messages from this contact (error: %@). - Próbowanie połączenia z serwerem używanym do odbierania wiadomości od tego kontaktu (błąd: %@). + Próbowanie połączenia z serwerem używanym do odbierania wiadomości od tego kontaktu (błąd: %@). No comment provided by engineer. - + Trying to connect to the server used to receive messages from this contact. - Próbowanie połączenia z serwerem używanym do odbierania wiadomości od tego kontaktu. + Próbowanie połączenia z serwerem używanym do odbierania wiadomości od tego kontaktu. No comment provided by engineer. - + Turn off - Wyłącz + Wyłącz No comment provided by engineer. - + Turn off notifications? - Wyłączyć powiadomienia? + Wyłączyć powiadomienia? No comment provided by engineer. - + Turn on - Włącz + Włącz No comment provided by engineer. - + Unable to record voice message - Nie można nagrać wiadomości głosowej + Nie można nagrać wiadomości głosowej No comment provided by engineer. - + Unexpected error: %@ - Nieoczekiwany błąd: %@ + Nieoczekiwany błąd: %@ No comment provided by engineer. - + Unexpected migration state - Nieoczekiwany stan migracji + Nieoczekiwany stan migracji No comment provided by engineer. - + Unhide - Odkryj + Odkryj No comment provided by engineer. - + Unhide chat profile - Odkryj profil czatu + Odkryj profil czatu No comment provided by engineer. - + Unhide profile - Odkryj profil + Odkryj profil No comment provided by engineer. - + Unknown caller - Nieznany rozmówca + Nieznany rozmówca callkit banner - + Unknown database error: %@ - Nieznany błąd bazy danych: %@ + Nieznany błąd bazy danych: %@ No comment provided by engineer. - + Unknown error - Nieznany błąd + Nieznany błąd No comment provided by engineer. - + Unless you use iOS call interface, enable Do Not Disturb mode to avoid interruptions. - O ile nie korzystasz z interfejsu połączeń systemu iOS, włącz tryb Nie przeszkadzać, aby uniknąć przerywania. + O ile nie korzystasz z interfejsu połączeń systemu iOS, włącz tryb Nie przeszkadzać, aby uniknąć przerywania. No comment provided by engineer. - + Unless your contact deleted the connection or this link was already used, it might be a bug - please report it. To connect, please ask your contact to create another connection link and check that you have a stable network connection. - O ile Twój kontakt nie usunął połączenia lub ten link był już użyty, może to być błąd - zgłoś go. + O ile Twój kontakt nie usunął połączenia lub ten link był już użyty, może to być błąd - zgłoś go. Aby się połączyć, poproś Twój kontakt o utworzenie kolejnego linku połączenia i sprawdź, czy masz stabilne połączenie z siecią. No comment provided by engineer. - + Unlock - Odblokuj + Odblokuj + No comment provided by engineer. + + + Unlock app + Odblokuj aplikację authentication reason - + Unmute - Wyłącz wyciszenie + Wyłącz wyciszenie No comment provided by engineer. - + Unread - Oznacz jako nieprzeczytane + Oznacz jako nieprzeczytane No comment provided by engineer. - + Update - Aktualizuj + Aktualizuj No comment provided by engineer. - + Update .onion hosts setting? - Zaktualizować ustawienie hostów .onion? + Zaktualizować ustawienie hostów .onion? No comment provided by engineer. - + Update database passphrase - Aktualizuj hasło do bazy danych + Aktualizuj hasło do bazy danych No comment provided by engineer. - + Update network settings? - Zaktualizować ustawienia sieci? + Zaktualizować ustawienia sieci? No comment provided by engineer. - + Update transport isolation mode? - Zaktualizować tryb izolacji transportu? + Zaktualizować tryb izolacji transportu? No comment provided by engineer. - + Updating settings will re-connect the client to all servers. - Aktualizacja ustawień spowoduje ponowne połączenie klienta ze wszystkimi serwerami. + Aktualizacja ustawień spowoduje ponowne połączenie klienta ze wszystkimi serwerami. No comment provided by engineer. - + Updating this setting will re-connect the client to all servers. - Aktualizacja tych ustawień spowoduje ponowne połączenie klienta ze wszystkimi serwerami. + Aktualizacja tych ustawień spowoduje ponowne połączenie klienta ze wszystkimi serwerami. No comment provided by engineer. - + Upgrade and open chat - Zaktualizuj i otwórz czat + Zaktualizuj i otwórz czat No comment provided by engineer. - + + Upload file + Prześlij plik + server test step + + Use .onion hosts - Użyj hostów .onion + Użyj hostów .onion No comment provided by engineer. - + Use SimpleX Chat servers? - Użyć serwerów SimpleX Chat? + Użyć serwerów SimpleX Chat? No comment provided by engineer. - + Use chat - Użyj czatu + Użyj czatu No comment provided by engineer. - + Use for new connections - Użyj dla nowych połączeń + Użyj dla nowych połączeń No comment provided by engineer. - + Use iOS call interface - Użyj interfejsu połączeń iOS + Użyj interfejsu połączeń iOS No comment provided by engineer. - + Use server - Użyj serwera + Użyj serwera No comment provided by engineer. - + User profile - Profil użytkownika + Profil użytkownika No comment provided by engineer. - + Using .onion hosts requires compatible VPN provider. - Używanie hostów .onion wymaga kompatybilnego dostawcy VPN. + Używanie hostów .onion wymaga kompatybilnego dostawcy VPN. No comment provided by engineer. - + Using SimpleX Chat servers. - Używanie serwerów SimpleX Chat. + Używanie serwerów SimpleX Chat. No comment provided by engineer. - + Verify connection security - Weryfikuj bezpieczeństwo połączenia + Weryfikuj bezpieczeństwo połączenia No comment provided by engineer. - + Verify security code - Weryfikuj kod bezpieczeństwa + Weryfikuj kod bezpieczeństwa No comment provided by engineer. - + Via browser - Przez przeglądarkę + Przez przeglądarkę No comment provided by engineer. - + Video call - Połączenie wideo + Połączenie wideo No comment provided by engineer. - + + Video will be received when your contact completes uploading it. + Film zostanie odebrany, gdy kontakt zakończy jego przesyłanie. + No comment provided by engineer. + + + Video will be received when your contact is online, please wait or check later! + Film zostanie odebrany, gdy kontakt będzie online, poczekaj lub sprawdź później! + No comment provided by engineer. + + View security code - Pokaż kod bezpieczeństwa + Pokaż kod bezpieczeństwa No comment provided by engineer. - + Voice messages - Wiadomości głosowe + Wiadomości głosowe chat feature - + Voice messages are prohibited in this chat. - Wiadomości głosowe są zabronione na tym czacie. + Wiadomości głosowe są zabronione na tym czacie. No comment provided by engineer. - + Voice messages are prohibited in this group. - Wiadomości głosowe są zabronione w tej grupie. + Wiadomości głosowe są zabronione w tej grupie. No comment provided by engineer. - + Voice messages prohibited! - Wiadomości głosowe zabronione! + Wiadomości głosowe zabronione! No comment provided by engineer. - + Voice message… - Wiadomość głosowa… + Wiadomość głosowa… No comment provided by engineer. - + Waiting for file - Oczekiwanie na plik + Oczekiwanie na plik No comment provided by engineer. - + Waiting for image - Oczekiwanie na obraz + Oczekiwanie na obraz No comment provided by engineer. - + + Waiting for video + Oczekiwanie na film + No comment provided by engineer. + + Warning: you may lose some data! - Uwaga: możesz stracić niektóre dane! + Uwaga: możesz stracić niektóre dane! No comment provided by engineer. - + WebRTC ICE servers - Serwery WebRTC ICE + Serwery WebRTC ICE No comment provided by engineer. - + Welcome %@! - Witaj %@! + Witaj %@! No comment provided by engineer. - + Welcome message - Wiadomość powitalna + Wiadomość powitalna No comment provided by engineer. - + What's new - Co nowego + Co nowego No comment provided by engineer. - + When available - Gdy dostępny + Gdy dostępny No comment provided by engineer. - + When you share an incognito profile with somebody, this profile will be used for the groups they invite you to. - Gdy udostępnisz komuś profil incognito, będzie on używany w grupach, do których Cię zaprosi. + Gdy udostępnisz komuś profil incognito, będzie on używany w grupach, do których Cię zaprosi. No comment provided by engineer. - + With optional welcome message. - Z opcjonalną wiadomością powitalną. + Z opcjonalną wiadomością powitalną. No comment provided by engineer. - + Wrong database passphrase - Nieprawidłowe hasło bazy danych + Nieprawidłowe hasło bazy danych No comment provided by engineer. - + Wrong passphrase! - Nieprawidłowe hasło! + Nieprawidłowe hasło! No comment provided by engineer. - + + XFTP servers + Serwery XFTP + No comment provided by engineer. + + You - Ty + Ty No comment provided by engineer. - + You accepted connection - Zaakceptowałeś połączenie + Zaakceptowałeś połączenie No comment provided by engineer. - + You allow - Pozwalasz + Pozwalasz No comment provided by engineer. - + You already have a chat profile with the same display name. Please choose another name. - Masz już profil czatu o tej samej nazwie wyświetlanej. Proszę wybrać inną nazwę. + Masz już profil czatu o tej samej nazwie wyświetlanej. Proszę wybrać inną nazwę. No comment provided by engineer. - + You are already connected to %@. - Jesteś już połączony z %@. + Jesteś już połączony z %@. No comment provided by engineer. - + You are connected to the server used to receive messages from this contact. - Jesteś połączony z serwerem używanym do odbierania wiadomości od tego kontaktu. + Jesteś połączony z serwerem używanym do odbierania wiadomości od tego kontaktu. No comment provided by engineer. - + You are invited to group - Jesteś zaproszony do grupy + Jesteś zaproszony do grupy No comment provided by engineer. - + You can accept calls from lock screen, without device and app authentication. - Możesz przyjmować połączenia z ekranu blokady, bez uwierzytelniania urządzenia i aplikacji. + Możesz przyjmować połączenia z ekranu blokady, bez uwierzytelniania urządzenia i aplikacji. No comment provided by engineer. - + You can also connect by clicking the link. If it opens in the browser, click **Open in mobile app** button. - Możesz też połączyć się klikając w link. Jeśli otworzy się on w przeglądarce, kliknij przycisk **Otwórz w aplikacji mobilnej**. + Możesz też połączyć się klikając w link. Jeśli otworzy się on w przeglądarce, kliknij przycisk **Otwórz w aplikacji mobilnej**. No comment provided by engineer. - + You can hide or mute a user profile - swipe it to the right. SimpleX Lock must be enabled. - Możesz ukryć lub wyciszyć profil użytkownika - przesuń palcem w prawo. + Możesz ukryć lub wyciszyć profil użytkownika - przesuń palcem w prawo. Funkcja blokady SimpleX musi być włączona. No comment provided by engineer. - + You can now send messages to %@ - Możesz teraz wysyłać wiadomości do %@ + Możesz teraz wysyłać wiadomości do %@ notification body - + You can set lock screen notification preview via settings. - Podgląd powiadomień na ekranie blokady można ustawić w ustawieniach. + Podgląd powiadomień na ekranie blokady można ustawić w ustawieniach. No comment provided by engineer. - + You can share a link or a QR code - anybody will be able to join the group. You won't lose members of the group if you later delete it. - Możesz udostępnić link lub kod QR - każdy będzie mógł dołączyć do grupy. Nie stracisz członków grupy, jeśli później ją usuniesz. + Możesz udostępnić link lub kod QR - każdy będzie mógł dołączyć do grupy. Nie stracisz członków grupy, jeśli później ją usuniesz. No comment provided by engineer. - + You can share your address as a link or as a QR code - anybody will be able to connect to you. You won't lose your contacts if you later delete it. - Możesz udostępnić swój adres jako link lub jako kod QR - każdy będzie mógł się z Tobą połączyć. Nie stracisz swoich kontaktów, jeśli później go usuniesz. + Możesz udostępnić swój adres jako link lub jako kod QR - każdy będzie mógł się z Tobą połączyć. Nie stracisz swoich kontaktów, jeśli później go usuniesz. No comment provided by engineer. - + You can start chat via app Settings / Database or by restarting the app - Możesz rozpocząć czat poprzez Ustawienia aplikacji / Baza danych lub poprzez ponowne uruchomienie aplikacji + Możesz rozpocząć czat poprzez Ustawienia aplikacji / Baza danych lub poprzez ponowne uruchomienie aplikacji No comment provided by engineer. - + + You can turn on SimpleX Lock via Settings. + Możesz włączyć blokadę SimpleX poprzez Ustawienia. + No comment provided by engineer. + + You can use markdown to format messages: - Możesz używać markdown do formatowania wiadomości: + Możesz używać markdown do formatowania wiadomości: No comment provided by engineer. - + You can't send messages! - Nie możesz wysyłać wiadomości! + Nie możesz wysyłać wiadomości! No comment provided by engineer. - + You control through which server(s) **to receive** the messages, your contacts – the servers you use to message them. - Kontrolujesz przez który serwer(y) **odbierać** wiadomości, Twoje kontakty - serwery, których używasz do wysyłania im wiadomości. + Kontrolujesz przez który serwer(y) **odbierać** wiadomości, Twoje kontakty - serwery, których używasz do wysyłania im wiadomości. No comment provided by engineer. - + You could not be verified; please try again. - Nie można zweryfikować użytkownika; proszę spróbować ponownie. + Nie można zweryfikować użytkownika; proszę spróbować ponownie. No comment provided by engineer. - + You have no chats - Nie masz czatów + Nie masz czatów No comment provided by engineer. - + You have to enter passphrase every time the app starts - it is not stored on the device. - Musisz wprowadzić hasło przy każdym uruchomieniu aplikacji - nie jest one przechowywane na urządzeniu. + Musisz wprowadzić hasło przy każdym uruchomieniu aplikacji - nie jest one przechowywane na urządzeniu. No comment provided by engineer. - + You invited your contact - Zaprosiłeś swój kontakt + Zaprosiłeś swój kontakt No comment provided by engineer. - + You joined this group - Dołączyłeś do tej grupy + Dołączyłeś do tej grupy No comment provided by engineer. - + You joined this group. Connecting to inviting group member. - Dołączyłeś do tej grupy. Łączenie z zapraszającym członkiem grupy. + Dołączyłeś do tej grupy. Łączenie z zapraszającym członkiem grupy. No comment provided by engineer. - + You must use the most recent version of your chat database on one device ONLY, otherwise you may stop receiving the messages from some contacts. - Musisz używać najnowszej wersji bazy danych czatu TYLKO na jednym urządzeniu, w przeciwnym razie możesz przestać otrzymywać wiadomości od niektórych kontaktów. + Musisz używać najnowszej wersji bazy danych czatu TYLKO na jednym urządzeniu, w przeciwnym razie możesz przestać otrzymywać wiadomości od niektórych kontaktów. No comment provided by engineer. - + You need to allow your contact to send voice messages to be able to send them. - Musisz zezwolić Twojemu kontaktowi na wysyłanie wiadomości głosowych, aby móc je wysyłać. + Musisz zezwolić Twojemu kontaktowi na wysyłanie wiadomości głosowych, aby móc je wysyłać. No comment provided by engineer. - + You rejected group invitation - Odrzuciłeś zaproszenie do grupy + Odrzuciłeś zaproszenie do grupy No comment provided by engineer. - + You sent group invitation - Wysłałeś zaproszenie do grupy + Wysłałeś zaproszenie do grupy No comment provided by engineer. - + You will be connected to group when the group host's device is online, please wait or check later! - Zostaniesz połączony do grupy, gdy urządzenie gospodarza grupy będzie online, proszę czekać lub sprawdzić później! + Zostaniesz połączony do grupy, gdy urządzenie gospodarza grupy będzie online, proszę czekać lub sprawdzić później! No comment provided by engineer. - + You will be connected when your connection request is accepted, please wait or check later! - Zostaniesz połączony, gdy Twoje żądanie połączenia zostanie zaakceptowane, proszę czekać lub sprawdzić później! + Zostaniesz połączony, gdy Twoje żądanie połączenia zostanie zaakceptowane, proszę czekać lub sprawdzić później! No comment provided by engineer. - + You will be connected when your contact's device is online, please wait or check later! - Zostaniesz połączony, gdy urządzenie Twojego kontaktu będzie online, proszę czekać lub sprawdzić później! + Zostaniesz połączony, gdy urządzenie Twojego kontaktu będzie online, proszę czekać lub sprawdzić później! No comment provided by engineer. - + You will be required to authenticate when you start or resume the app after 30 seconds in background. - Uwierzytelnienie będzie wymagane przy uruchamianiu lub wznawianiu aplikacji po 30 sekundach w tle. + Uwierzytelnienie będzie wymagane przy uruchamianiu lub wznawianiu aplikacji po 30 sekundach w tle. No comment provided by engineer. - + You will join a group this link refers to and connect to its group members. - Dołączysz do grupy, do której odnosi się ten link i połączysz się z jej członkami. + Dołączysz do grupy, do której odnosi się ten link i połączysz się z jej członkami. No comment provided by engineer. - + You will still receive calls and notifications from muted profiles when they are active. - Nadal będziesz otrzymywać połączenia i powiadomienia z wyciszonych profili, gdy są one aktywne. + Nadal będziesz otrzymywać połączenia i powiadomienia z wyciszonych profili, gdy są one aktywne. No comment provided by engineer. - + You will stop receiving messages from this group. Chat history will be preserved. - Przestaniesz otrzymywać wiadomości od tej grupy. Historia czatu zostanie zachowana. + Przestaniesz otrzymywać wiadomości od tej grupy. Historia czatu zostanie zachowana. No comment provided by engineer. - + You're trying to invite contact with whom you've shared an incognito profile to the group in which you're using your main profile - Próbujesz zaprosić osobę, z którą masz wspólny profil incognito do grupy, w której używasz swojego głównego profilu + Próbujesz zaprosić osobę, z którą masz wspólny profil incognito do grupy, w której używasz swojego głównego profilu No comment provided by engineer. - + You're using an incognito profile for this group - to prevent sharing your main profile inviting contacts is not allowed - Używasz profilu incognito dla tej grupy - aby zapobiec udostępnianiu głównego profilu zapraszanie kontaktów jest zabronione + Używasz profilu incognito dla tej grupy - aby zapobiec udostępnianiu głównego profilu zapraszanie kontaktów jest zabronione No comment provided by engineer. - + + Your %@ servers + Twoje serwery %@ + No comment provided by engineer. + + Your ICE servers - Twoje serwery ICE + Twoje serwery ICE No comment provided by engineer. - + Your SMP servers - Twoje serwery SMP + Twoje serwery SMP No comment provided by engineer. - + Your SimpleX contact address - Twój adres kontaktowy SimpleX + Twój adres kontaktowy SimpleX No comment provided by engineer. - + + Your XFTP servers + Twoje serwery XFTP + No comment provided by engineer. + + Your calls - Twoje połączenia + Twoje połączenia No comment provided by engineer. - + Your chat database - Twoja baza danych czatu + Twoja baza danych czatu No comment provided by engineer. - + Your chat database is not encrypted - set passphrase to encrypt it. - Baza danych czatu nie jest szyfrowana - ustaw hasło, aby ją zaszyfrować. + Baza danych czatu nie jest szyfrowana - ustaw hasło, aby ją zaszyfrować. No comment provided by engineer. - + Your chat profile will be sent to group members - Twój profil czatu zostanie wysłany do członków grupy + Twój profil czatu zostanie wysłany do członków grupy No comment provided by engineer. - + Your chat profile will be sent to your contact - Twój profil czatu zostanie wysłany do Twojego kontaktu + Twój profil czatu zostanie wysłany do Twojego kontaktu No comment provided by engineer. - + Your chat profiles - Twoje profile czatu + Twoje profile czatu No comment provided by engineer. - + Your chats - Twoje czaty + Twoje czaty No comment provided by engineer. - + Your contact address - Twój adres kontaktowy + Twój adres kontaktowy No comment provided by engineer. - + Your contact can scan it from the app. - Kontakt może zeskanować go z aplikacji. + Kontakt może zeskanować go z aplikacji. No comment provided by engineer. - + Your contact needs to be online for the connection to complete. You can cancel this connection and remove the contact (and try later with a new link). - Twój kontakt musi być online, aby połączenie zostało zakończone. + Twój kontakt musi być online, aby połączenie zostało zakończone. Możesz anulować to połączenie i usunąć kontakt (i spróbować później z nowym linkiem). No comment provided by engineer. - + Your contact sent a file that is larger than currently supported maximum size (%@). - Twój kontakt wysłał plik, który jest większy niż obecnie obsługiwany maksymalny rozmiar (%@). + Twój kontakt wysłał plik, który jest większy niż obecnie obsługiwany maksymalny rozmiar (%@). No comment provided by engineer. - + Your contacts can allow full message deletion. - Twoje kontakty mogą zezwolić na pełne usunięcie wiadomości. + Twoje kontakty mogą zezwolić na pełne usunięcie wiadomości. No comment provided by engineer. - + Your current chat database will be DELETED and REPLACED with the imported one. - Twoja obecna baza danych czatu zostanie usunięta i zastąpiona zaimportowaną. + Twoja obecna baza danych czatu zostanie usunięta i zastąpiona zaimportowaną. No comment provided by engineer. - + Your current profile - Twój obecny profil + Twój obecny profil No comment provided by engineer. - + Your preferences - Twoje preferencje + Twoje preferencje No comment provided by engineer. - + Your privacy - Twoja prywatność + Twoja prywatność No comment provided by engineer. - + Your profile is stored on your device and shared only with your contacts. SimpleX servers cannot see your profile. - Twój profil jest przechowywany na urządzeniu i udostępniany tylko Twoim kontaktom. + Twój profil jest przechowywany na urządzeniu i udostępniany tylko Twoim kontaktom. Serwery SimpleX nie mogą zobaczyć Twojego profilu. No comment provided by engineer. - + Your profile will be sent to the contact that you received this link from - Twój profil zostanie wysłany do kontaktu, od którego otrzymałeś ten link + Twój profil zostanie wysłany do kontaktu, od którego otrzymałeś ten link No comment provided by engineer. - + Your profile, contacts and delivered messages are stored on your device. - Twój profil, kontakty i dostarczone wiadomości są przechowywane na Twoim urządzeniu. + Twój profil, kontakty i dostarczone wiadomości są przechowywane na Twoim urządzeniu. No comment provided by engineer. - + Your random profile - Twój losowy profil + Twój losowy profil No comment provided by engineer. - + Your server - Twój serwer + Twój serwer No comment provided by engineer. - + Your server address - Twój adres serwera + Twój adres serwera No comment provided by engineer. - + Your settings - Twoje ustawienia + Twoje ustawienia No comment provided by engineer. - + [Contribute](https://github.com/simplex-chat/simplex-chat#contribute) - [Przyczyń się](https://github.com/simplex-chat/simplex-chat#contribute) + [Przyczyń się](https://github.com/simplex-chat/simplex-chat#contribute) No comment provided by engineer. - + [Send us email](mailto:chat@simplex.chat) - [Wyślij do nas email](mailto:chat@simplex.chat) + [Wyślij do nas email](mailto:chat@simplex.chat) No comment provided by engineer. - + [Star on GitHub](https://github.com/simplex-chat/simplex-chat) - [Daj gwiazdkę na GitHub](https://github.com/simplex-chat/simplex-chat) + [Daj gwiazdkę na GitHub](https://github.com/simplex-chat/simplex-chat) No comment provided by engineer. - + \_italic_ - \_kursywa_ + \_kursywa_ No comment provided by engineer. - + \`a + b` - \`a + b` + \`a + b` No comment provided by engineer. - + above, then choose: - powyżej, a następnie wybierz: + powyżej, a następnie wybierz: No comment provided by engineer. - + accepted call - zaakceptowane połączenie + zaakceptowane połączenie call status - + admin - administrator + administrator member role - + always - zawsze + zawsze pref value - + audio call (not e2e encrypted) - połączenie audio (nie szyfrowane e2e) + połączenie audio (nie szyfrowane e2e) No comment provided by engineer. - + bad message ID - zły identyfikator wiadomości + zły identyfikator wiadomości integrity error chat item - + bad message hash - zły hash wiadomości + zły hash wiadomości integrity error chat item - + bold - pogrubiona + pogrubiona No comment provided by engineer. - + call error - błąd połączenia + błąd połączenia call status - + call in progress - połączenie w toku + połączenie w toku call status - + calling… - dzwonie… + dzwonie… call status - + cancelled %@ - anulowany %@ + anulowany %@ feature offered item - + changed address for you - zmieniono adres dla Ciebie + zmieniono adres dla Ciebie chat item text - + changed role of %1$@ to %2$@ - zmieniono rolę %1$@ na %2$@ + zmieniono rolę %1$@ na %2$@ rcv group event chat item - + changed your role to %@ - zmieniono Twoją rolę na %@ + zmieniono Twoją rolę na %@ rcv group event chat item - + changing address for %@... - zmienienie adresu dla %@... + zmienienie adresu dla %@... chat item text - + changing address... - zmienienie adresu... + zmienienie adresu... chat item text - + colored - kolorowy + kolorowy No comment provided by engineer. - + complete - kompletny + kompletny No comment provided by engineer. - + connect to SimpleX Chat developers. - połącz się z deweloperami SimpleX Chat. + połącz się z deweloperami SimpleX Chat. No comment provided by engineer. - + connected - połączony + połączony No comment provided by engineer. - + connecting - łączenie + łączenie No comment provided by engineer. - + connecting (accepted) - łączenie (zaakceptowane) + łączenie (zaakceptowane) No comment provided by engineer. - + connecting (announced) - łączenie (ogłoszone) + łączenie (ogłoszone) No comment provided by engineer. - + connecting (introduced) - łączenie (wprowadzone) + łączenie (wprowadzone) No comment provided by engineer. - + connecting (introduction invitation) - łączenie (wprowadzono zaproszenie) + łączenie (wprowadzono zaproszenie) No comment provided by engineer. - + connecting call… - łączenie połączenia… + łączenie połączenia… call status - + connecting… - łączenie… + łączenie… chat list item title - + connection established - połączenie ustanowione + połączenie ustanowione chat list item title (it should not be shown - + connection:%@ - połączenie: %@ + połączenie: %@ connection information - + contact has e2e encryption - kontakt posiada szyfrowanie e2e + kontakt posiada szyfrowanie e2e No comment provided by engineer. - + contact has no e2e encryption - kontakt nie posiada szyfrowania e2e + kontakt nie posiada szyfrowania e2e No comment provided by engineer. - + creator - twórca + twórca No comment provided by engineer. - + database version is newer than the app, but no down migration for: %@ - wersja bazy danych jest nowsza od aplikacji, ale nie ma migracji w dół dla: %@ + wersja bazy danych jest nowsza od aplikacji, ale nie ma migracji w dół dla: %@ No comment provided by engineer. - + default (%@) - domyślne (%@) + domyślne (%@) pref value - + deleted - usunięty + usunięty deleted chat item - + deleted group - usunięta grupa + usunięta grupa rcv group event chat item - + different migration in the app/database: %@ / %@ - różne migracje w aplikacji/bazy danych: %@ / %@ + różne migracje w aplikacji/bazy danych: %@ / %@ No comment provided by engineer. - + direct - bezpośredni + bezpośredni connection level description - + duplicate message - zduplikowana wiadomość + zduplikowana wiadomość integrity error chat item - + e2e encrypted - zaszyfrowany e2e + zaszyfrowany e2e No comment provided by engineer. - + enabled - włączone + włączone enabled status - + enabled for contact - włączone dla kontaktu + włączone dla kontaktu enabled status - + enabled for you - włączone dla Ciebie + włączone dla Ciebie enabled status - + ended - zakończona + zakończona No comment provided by engineer. - + ended call %@ - zakończone połączenie %@ + zakończone połączenie %@ call status - + error - błąd + błąd No comment provided by engineer. - + group deleted - grupa usunięta + grupa usunięta No comment provided by engineer. - + group profile updated - zaktualizowano profil grupy + zaktualizowano profil grupy snd group event chat item - + iOS Keychain is used to securely store passphrase - it allows receiving push notifications. - iOS Keychain służy do bezpiecznego przechowywania hasła - umożliwia otrzymywanie powiadomień push. + iOS Keychain służy do bezpiecznego przechowywania hasła - umożliwia otrzymywanie powiadomień push. No comment provided by engineer. - + iOS Keychain will be used to securely store passphrase after you restart the app or change passphrase - it will allow receiving push notifications. - iOS Keychain będzie używany do bezpiecznego przechowywania hasła po ponownym uruchomieniu aplikacji lub zmianie hasła - pozwoli to na otrzymywanie powiadomień push. + iOS Keychain będzie używany do bezpiecznego przechowywania hasła po ponownym uruchomieniu aplikacji lub zmianie hasła - pozwoli to na otrzymywanie powiadomień push. No comment provided by engineer. - + incognito via contact address link - incognito poprzez link adresu kontaktowego + incognito poprzez link adresu kontaktowego chat list item description - + incognito via group link - incognito przez link grupowy + incognito przez link grupowy chat list item description - + incognito via one-time link - incognito przez jednorazowy link + incognito przez jednorazowy link chat list item description - + indirect (%d) - pośrednie (%d) + pośrednie (%d) connection level description - + invalid chat - nieprawidłowy czat + nieprawidłowy czat invalid chat data - + invalid chat data - nieprawidłowe dane czatu + nieprawidłowe dane czatu No comment provided by engineer. - + invalid data - nieprawidłowe dane + nieprawidłowe dane invalid chat item - + invitation to group %@ - zaproszenie do grupy %@ + zaproszenie do grupy %@ group name - + invited - zaproszony + zaproszony No comment provided by engineer. - + invited %@ - zaproszony %@ + zaproszony %@ rcv group event chat item - + invited to connect - zaproszony do połączenia + zaproszony do połączenia chat list item title - + invited via your group link - zaproszony przez Twój link grupy + zaproszony przez Twój link grupy rcv group event chat item - + italic - kursywa + kursywa No comment provided by engineer. - + join as %@ - dołącz jako %@ + dołącz jako %@ No comment provided by engineer. - + left - opuścił + opuścił rcv group event chat item - + marked deleted - zaznaczona jako usunięta + zaznaczona jako usunięta marked deleted chat item preview text - + member - członek + członek member role - + connected - połączony + połączony rcv group event chat item - + message received - wiadomość otrzymana + wiadomość otrzymana notification - + missed call - nieodebrane połączenie + nieodebrane połączenie call status - + moderated - moderowany + moderowany moderated chat item - + moderated by %@ - moderowany przez %@ + moderowany przez %@ No comment provided by engineer. - + never - nigdy + nigdy No comment provided by engineer. - + new message - nowa wiadomość + nowa wiadomość notification - + no - nie + nie pref value - + no e2e encryption - brak szyfrowania e2e + brak szyfrowania e2e No comment provided by engineer. - + observer - obserwator + obserwator member role - + off - wyłączony + wyłączony enabled status group pref value - + offered %@ - zaoferował %@ + zaoferował %@ feature offered item - + offered %1$@: %2$@ - zaoferował %1$@: %2$@ + zaoferował %1$@: %2$@ feature offered item - + on - włączone + włączone group pref value - + or chat with the developers - lub porozmawiać z deweloperami + lub porozmawiać z deweloperami No comment provided by engineer. - + owner - właściciel + właściciel member role - + peer-to-peer - peer-to-peer + peer-to-peer No comment provided by engineer. - + received answer… - otrzymano odpowiedź… + otrzymano odpowiedź… No comment provided by engineer. - + received confirmation… - otrzymano potwierdzenie… + otrzymano potwierdzenie… No comment provided by engineer. - + rejected call - odrzucone połączenie + odrzucone połączenie call status - + removed - usunięty + usunięty No comment provided by engineer. - + removed %@ - usunięto %@ + usunięto %@ rcv group event chat item - + removed you - usunął cię + usunął cię rcv group event chat item - + sec - sek + sek network option - + secret - sekret + sekret No comment provided by engineer. - + starting… - uruchamianie… + uruchamianie… No comment provided by engineer. - + strike - strajk + strajk No comment provided by engineer. - + this contact - ten kontakt + ten kontakt notification title - + unknown - nieznany + nieznany connection info - + updated group profile - zaktualizowano profil grupy + zaktualizowano profil grupy rcv group event chat item - + v%@ (%@) - v%@ (%@) + v%@ (%@) No comment provided by engineer. - + v4.6.1+ is required to receive via XFTP. - v4.6.1+ jest wymagany do odbierania przez XFTP. + v4.6.1+ jest wymagany do odbierania przez XFTP. No comment provided by engineer. - + via contact address link - przez link adresu kontaktu + przez link adresu kontaktu chat list item description - + via group link - przez link grupy + przez link grupy chat list item description - + via one-time link - przez jednorazowy link + przez jednorazowy link chat list item description - + via relay - przez przekaźnik + przez przekaźnik No comment provided by engineer. - + video call (not e2e encrypted) - połączenie wideo (bez szyfrowania e2e) + połączenie wideo (bez szyfrowania e2e) No comment provided by engineer. - + waiting for answer… - oczekiwanie na odpowiedź… + oczekiwanie na odpowiedź… No comment provided by engineer. - + waiting for confirmation… - oczekiwanie na potwierdzenie… + oczekiwanie na potwierdzenie… No comment provided by engineer. - + wants to connect to you! - chce się z Tobą połączyć! + chce się z Tobą połączyć! No comment provided by engineer. - + yes - tak + tak pref value - + you are invited to group - jesteś zaproszony do grupy + jesteś zaproszony do grupy No comment provided by engineer. - + you are observer - jesteś obserwatorem + jesteś obserwatorem No comment provided by engineer. - + you changed address - zmieniłeś adres + zmieniłeś adres chat item text - + you changed address for %@ - zmieniłeś adres dla %@ + zmieniłeś adres dla %@ chat item text - + you changed role for yourself to %@ - zmieniłeś rolę dla siebie na %@ + zmieniłeś rolę dla siebie na %@ snd group event chat item - + you changed role of %1$@ to %2$@ - zmieniłeś rolę %1$@ na %2$@ + zmieniłeś rolę %1$@ na %2$@ snd group event chat item - + you left - wyszedłeś + wyszedłeś snd group event chat item - + you removed %@ - usunąłeś %@ + usunąłeś %@ snd group event chat item - + you shared one-time link - udostępniłeś jednorazowy link + udostępniłeś jednorazowy link chat list item description - + you shared one-time link incognito - udostępniłeś jednorazowy link incognito + udostępniłeś jednorazowy link incognito chat list item description - + you: - ty: + ty: No comment provided by engineer. - + \~strike~ - \~strajk~ + \~strajk~ No comment provided by engineer. - - Send videos and files via XFTP - Wysyłaj filmy i pliki przez XFTP - No comment provided by engineer. - - - %@ servers - %@ serwery - No comment provided by engineer. - - - %lld minutes - %lld minut - No comment provided by engineer. - - - %lld seconds - %lld sekund - No comment provided by engineer. - - - Authentication cancelled - Uwierzytelnianie anulowane - PIN entry - - - Change Passcode - Zmień kod dostępu - No comment provided by engineer. - - - Change lock mode - Zmień tryb blokady - authentication reason - - - Change passcode - Zmień pin - authentication reason - - - Compare file - Porównaj plik - server test step - - - Confirm Passcode - Potwierdź Pin - No comment provided by engineer. - - - Create file - Utwórz plik - server test step - - - Current Passcode - Aktualny Pin - No comment provided by engineer. - - - Delete file - Usuń plik - server test step - - - Download file - Pobierz plik - server test step - - - Enable lock - Włącz blokadę - No comment provided by engineer. - - - Enter Passcode - Wprowadź Pin - No comment provided by engineer. - - - Error loading %@ servers - Błąd ładowania %@ serwerów - No comment provided by engineer. - - - Error saving %@ servers - Błąd zapisu %@ serwerów - No comment provided by engineer. - - - Error saving passcode - Błąd zapisu pinu - No comment provided by engineer. - - - Immediately - Natychmiast - No comment provided by engineer. - - - KeyChain error - Błąd pęku kluczy - No comment provided by engineer. - - - Lock after - Zablokuj po - No comment provided by engineer. - - - Lock mode - Tryb blokady - No comment provided by engineer. - - - Make sure %@ server addresses are in correct format, line separated and are not duplicated (%@). - Upewnij się, że adresy serwerów %@ są w poprawnym formacie, rozdzielone liniami i nie są zduplikowane (%@). - No comment provided by engineer. - - - Messages & files - Wiadomości i pliki - No comment provided by engineer. - - - New Passcode - Nowy Pin - No comment provided by engineer. - - - No app password - Brak hasła aplikacji - Authentication unavailable - - - Off - Wyłączony - No comment provided by engineer. - - - Passcode - Pin - No comment provided by engineer. - - - Passcode changed! - Pin zmieniony! - No comment provided by engineer. - - - Passcode entry - Wpis pinu - No comment provided by engineer. - - - Passcode not changed! - Pin nie został zmieniony! - No comment provided by engineer. - - - Passcode set! - Pin ustawiony! - No comment provided by engineer. - - - Please remember or store it securely - there is no way to recover a lost passcode! - Prosimy o jego zapamiętanie lub bezpieczne przechowywanie - nie ma możliwości odzyskania utraconego pinu! - No comment provided by engineer. - - - Server requires authorization to upload, check password - Serwer wymaga autoryzacji do przesłania, sprawdź hasło - server test error - - - SimpleX Lock mode - Tryb blokady SimpleX - No comment provided by engineer. - - - SimpleX Lock not enabled! - Blokada SimpleX wyłączona! - No comment provided by engineer. - - - Submit - Zatwierdź - No comment provided by engineer. - - - System authentication - Uwierzytelnianie systemu - No comment provided by engineer. - - - Unlock app - Odblokuj aplikację - authentication reason - - - Upload file - Prześlij plik - server test step - - - Video will be received when your contact completes uploading it. - Film zostanie odebrany, gdy kontakt zakończy jego przesyłanie. - No comment provided by engineer. - - - Video will be received when your contact is online, please wait or check later! - Film zostanie odebrany, gdy kontakt będzie online, poczekaj lub sprawdź później! - No comment provided by engineer. - - - Waiting for video - Oczekiwanie na film - No comment provided by engineer. - - - XFTP servers - Serwery XFTP - No comment provided by engineer. - - - You can turn on SimpleX Lock via Settings. - Możesz włączyć blokadę SimpleX poprzez Ustawienia. - No comment provided by engineer. - - - Your %@ servers - Twoje serwery %@ - No comment provided by engineer. - - - Your XFTP servers - Twoje serwery XFTP - No comment provided by engineer. - - - Incorrect passcode - Nieprawidłowy pin - PIN entry - @@ -5097,29 +5082,29 @@ Serwery SimpleX nie mogą zobaczyć Twojego profilu. - + SimpleX - SimpleX + SimpleX Bundle name - + SimpleX needs camera access to scan QR codes to connect to other users and for video calls. - SimpleX potrzebuje dostępu do kamery, w celu skanowania kodów QR aby połączyć się z innymi użytkownikami i połączeń wideo. + SimpleX potrzebuje dostępu do kamery, w celu skanowania kodów QR aby połączyć się z innymi użytkownikami i połączeń wideo. Privacy - Camera Usage Description - + SimpleX uses Face ID for local authentication - SimpleX używa Face ID do lokalnego uwierzytelniania + SimpleX używa Face ID do lokalnego uwierzytelniania Privacy - Face ID Usage Description - + SimpleX needs microphone access for audio and video calls, and to record voice messages. - SimpleX potrzebuje dostępu do mikrofonu, w celu połączeń audio i wideo oraz nagrywania wiadomości głosowych. + SimpleX potrzebuje dostępu do mikrofonu, w celu połączeń audio i wideo oraz nagrywania wiadomości głosowych. Privacy - Microphone Usage Description - + SimpleX needs access to Photo Library for saving captured and received media - SimpleX potrzebuje dostępu do galerii zdjęć, w celu zapisywania i otrzymywania mediów + SimpleX potrzebuje dostępu do galerii zdjęć, w celu zapisywania i otrzymywania mediów Privacy - Photo Library Additions Usage Description @@ -5129,19 +5114,19 @@ Serwery SimpleX nie mogą zobaczyć Twojego profilu. - + SimpleX NSE - SimpleX NSE + SimpleX NSE Bundle display name - + SimpleX NSE - SimpleX NSE + SimpleX NSE Bundle name - + Copyright © 2022 SimpleX Chat. All rights reserved. - Copyright © 2022 SimpleX Chat. Wszelkie prawa zastrzeżone. + Copyright © 2022 SimpleX Chat. Wszelkie prawa zastrzeżone. Copyright (human-readable) From 4e01970d699a4616b5dc28e940f0b31fac000b6c Mon Sep 17 00:00:00 2001 From: Evgeny Poberezkin <2769109+epoberezkin@users.noreply.github.com> Date: Fri, 14 Apr 2023 13:03:41 +0200 Subject: [PATCH 6/8] core: remove build timestamp from the version info (reproducible builds) (#2182) * core: remove build timestamp from the version info (reproducible builds) * remove strings --- .../main/java/chat/simplex/app/model/SimpleXAPI.kt | 1 - .../app/views/usersettings/VersionInfoView.kt | 1 - .../android/app/src/main/res/values-cs/strings.xml | 1 - .../android/app/src/main/res/values-de/strings.xml | 1 - .../android/app/src/main/res/values-es/strings.xml | 1 - .../android/app/src/main/res/values-fr/strings.xml | 1 - .../android/app/src/main/res/values-it/strings.xml | 1 - .../android/app/src/main/res/values-ja/strings.xml | 1 - .../android/app/src/main/res/values-ko/strings.xml | 1 - .../android/app/src/main/res/values-lt/strings.xml | 1 - .../android/app/src/main/res/values-nl/strings.xml | 1 - .../android/app/src/main/res/values-pl/strings.xml | 1 - .../app/src/main/res/values-pt-rBR/strings.xml | 1 - .../android/app/src/main/res/values-ru/strings.xml | 1 - .../app/src/main/res/values-zh-rCN/strings.xml | 1 - .../app/src/main/res/values-zh-rTW/strings.xml | 1 - apps/android/app/src/main/res/values/strings.xml | 1 - .../Shared/Views/UserSettings/VersionView.swift | 1 - .../cs.xcloc/Localized Contents/cs.xliff | 5 ----- .../de.xcloc/Localized Contents/de.xliff | 5 ----- .../en.xcloc/Localized Contents/en.xliff | 5 ----- .../es.xcloc/Localized Contents/es.xliff | 5 ----- .../fr.xcloc/Localized Contents/fr.xliff | 5 ----- .../it.xcloc/Localized Contents/it.xliff | 5 ----- .../nl.xcloc/Localized Contents/nl.xliff | 5 ----- .../pl.xcloc/Localized Contents/pl.xliff | 5 ----- .../ru.xcloc/Localized Contents/ru.xliff | 5 ----- .../zh-Hans.xcloc/Localized Contents/zh-Hans.xliff | 5 ----- apps/ios/SimpleXChat/APITypes.swift | 1 - apps/ios/cs.lproj/Localizable.strings | 3 --- apps/ios/de.lproj/Localizable.strings | 3 --- apps/ios/es.lproj/Localizable.strings | 3 --- apps/ios/fr.lproj/Localizable.strings | 3 --- apps/ios/it.lproj/Localizable.strings | 3 --- apps/ios/nl.lproj/Localizable.strings | 3 --- apps/ios/pl.lproj/Localizable.strings | 3 --- apps/ios/ru.lproj/Localizable.strings | 3 --- apps/ios/zh-Hans.lproj/Localizable.strings | 3 --- src/Simplex/Chat.hs | 2 +- src/Simplex/Chat/Controller.hs | 14 +++----------- src/Simplex/Chat/View.hs | 4 ++-- 41 files changed, 6 insertions(+), 110 deletions(-) diff --git a/apps/android/app/src/main/java/chat/simplex/app/model/SimpleXAPI.kt b/apps/android/app/src/main/java/chat/simplex/app/model/SimpleXAPI.kt index a817c402e5..7f295029d9 100644 --- a/apps/android/app/src/main/java/chat/simplex/app/model/SimpleXAPI.kt +++ b/apps/android/app/src/main/java/chat/simplex/app/model/SimpleXAPI.kt @@ -3398,7 +3398,6 @@ class AutoAccept(val acceptIncognito: Boolean, val autoReply: MsgContent?) { @Serializable data class CoreVersionInfo( val version: String, - val buildTimestamp: String, val simplexmqVersion: String, val simplexmqCommit: String ) diff --git a/apps/android/app/src/main/java/chat/simplex/app/views/usersettings/VersionInfoView.kt b/apps/android/app/src/main/java/chat/simplex/app/views/usersettings/VersionInfoView.kt index ee2443d72a..64a541a3a8 100644 --- a/apps/android/app/src/main/java/chat/simplex/app/views/usersettings/VersionInfoView.kt +++ b/apps/android/app/src/main/java/chat/simplex/app/views/usersettings/VersionInfoView.kt @@ -23,7 +23,6 @@ fun VersionInfoView(info: CoreVersionInfo) { Text(String.format(stringResource(R.string.app_version_name), BuildConfig.VERSION_NAME)) Text(String.format(stringResource(R.string.app_version_code), BuildConfig.VERSION_CODE)) Text(String.format(stringResource(R.string.core_version), info.version)) - Text(String.format(stringResource(R.string.core_build_timestamp), info.buildTimestamp)) val simplexmqCommit = if (info.simplexmqCommit.length >= 7) info.simplexmqCommit.substring(startIndex = 0, endIndex = 7) else info.simplexmqCommit Text(String.format(stringResource(R.string.core_simplexmq_version), info.simplexmqVersion, simplexmqCommit)) } diff --git a/apps/android/app/src/main/res/values-cs/strings.xml b/apps/android/app/src/main/res/values-cs/strings.xml index 92a2185384..449f875cea 100644 --- a/apps/android/app/src/main/res/values-cs/strings.xml +++ b/apps/android/app/src/main/res/values-cs/strings.xml @@ -655,7 +655,6 @@ Verze aplikace Verze aplikace: v%s Verze jádra: v%s - Jádro sestaveno: %s Smazat adresu\? Všechny vaše kontakty zůstanou připojeny. Žádosti o kontakt diff --git a/apps/android/app/src/main/res/values-de/strings.xml b/apps/android/app/src/main/res/values-de/strings.xml index 4f27d31916..e9ae2b7b0f 100644 --- a/apps/android/app/src/main/res/values-de/strings.xml +++ b/apps/android/app/src/main/res/values-de/strings.xml @@ -1000,7 +1000,6 @@ App Build: %s App Version App Version: v%s - Core übersetzt am: %s Core Version: v%s Profil hinzufügen Alle Chats und Nachrichten werden gelöscht! Dies kann nicht rückgängig gemacht werden! diff --git a/apps/android/app/src/main/res/values-es/strings.xml b/apps/android/app/src/main/res/values-es/strings.xml index 7e0b3ad4c5..23da22ba23 100644 --- a/apps/android/app/src/main/res/values-es/strings.xml +++ b/apps/android/app/src/main/res/values-es/strings.xml @@ -253,7 +253,6 @@ Base de Datos y \nContraseña Contribuye - Core compilado: %s Core versión: v%s Solicitud del contacto Eliminar imagen diff --git a/apps/android/app/src/main/res/values-fr/strings.xml b/apps/android/app/src/main/res/values-fr/strings.xml index e5e6fd6ede..8921f5e409 100644 --- a/apps/android/app/src/main/res/values-fr/strings.xml +++ b/apps/android/app/src/main/res/values-fr/strings.xml @@ -925,7 +925,6 @@ simplexmq : v%s (%2s) Build de l\'app : %s Version de l\'app : v%s - Cœur compilé le : %s Version du cœur : v%s Nombre de PING Toutes les discussions et tous les messages seront supprimés - il est impossible de revenir en arrière ! diff --git a/apps/android/app/src/main/res/values-it/strings.xml b/apps/android/app/src/main/res/values-it/strings.xml index 2ee5625f20..ef1aadaccb 100644 --- a/apps/android/app/src/main/res/values-it/strings.xml +++ b/apps/android/app/src/main/res/values-it/strings.xml @@ -927,7 +927,6 @@ simplexmq: v%s (%2s) Build dell\'app: %s Versione app: v%s - Core compilato il: %s I server per le nuove connessioni del profilo di chat attuale Aggiungi profilo Eliminare il profilo di chat\? diff --git a/apps/android/app/src/main/res/values-ja/strings.xml b/apps/android/app/src/main/res/values-ja/strings.xml index fa9a28cdab..849783d910 100644 --- a/apps/android/app/src/main/res/values-ja/strings.xml +++ b/apps/android/app/src/main/res/values-ja/strings.xml @@ -540,7 +540,6 @@ マークダウン (書式編集) ガイド サーバを手動で入力 接続にオニオンのホストが必要となります。 - コアのビルド@: %s アドレスを作成 アドレスを削除しますか? 表示の名前: diff --git a/apps/android/app/src/main/res/values-ko/strings.xml b/apps/android/app/src/main/res/values-ko/strings.xml index ff15163317..79771994c9 100644 --- a/apps/android/app/src/main/res/values-ko/strings.xml +++ b/apps/android/app/src/main/res/values-ko/strings.xml @@ -206,7 +206,6 @@ 대화 상대와 메시지가 삭제돼요. 삭제 후 되돌릴 수 없어요! 대화 상대와 종단간 암호화됨 대화 상대와 아직 연결되지 않았어요! - 코어 빌드: %s %1$s에 생성 완료 일회용 초대 링크 생성 비밀 그룹 생성 diff --git a/apps/android/app/src/main/res/values-lt/strings.xml b/apps/android/app/src/main/res/values-lt/strings.xml index 41214385de..30600ff520 100644 --- a/apps/android/app/src/main/res/values-lt/strings.xml +++ b/apps/android/app/src/main/res/values-lt/strings.xml @@ -159,7 +159,6 @@ Neteisingas saugumo kodas! Įrašyti serverius Įrašyti serverius\? - Branduolys sudarytas: %s Sukurti adresą Ištrinti adresą Klaida įrašant naudotojo slaptažodį diff --git a/apps/android/app/src/main/res/values-nl/strings.xml b/apps/android/app/src/main/res/values-nl/strings.xml index 3206df4484..8abc6ca752 100644 --- a/apps/android/app/src/main/res/values-nl/strings.xml +++ b/apps/android/app/src/main/res/values-nl/strings.xml @@ -174,7 +174,6 @@ Bijdragen ICE servers configureren Verbinding - Core gebouwd op: %s Core versie: v%s verbonden Verbinden… diff --git a/apps/android/app/src/main/res/values-pl/strings.xml b/apps/android/app/src/main/res/values-pl/strings.xml index f5ae2d8e43..4869140726 100644 --- a/apps/android/app/src/main/res/values-pl/strings.xml +++ b/apps/android/app/src/main/res/values-pl/strings.xml @@ -344,7 +344,6 @@ \nUwaga: jeśli masz wiele połączeń, zużycie baterii i ruchu może być znacznie wyższe, a niektóre połączenia mogą się nie udać. Profil czatu Połączenie - Kompilacja rdzenia: %s Wersja rdzenia: v%s Błąd zapisu serwerów ICE Serwery ICE (po jednym na linię) diff --git a/apps/android/app/src/main/res/values-pt-rBR/strings.xml b/apps/android/app/src/main/res/values-pt-rBR/strings.xml index 52724438dd..97e242bbc2 100644 --- a/apps/android/app/src/main/res/values-pt-rBR/strings.xml +++ b/apps/android/app/src/main/res/values-pt-rBR/strings.xml @@ -664,7 +664,6 @@ Os hosts Onion serão necessários para a conexão. Os hosts Onion serão necessários para a conexão. Versão principal: v%s - Núcleo construído em: %s Leia mais no nosso repositório do GitHub. Pode ser mudado mais tarde via configurações. %1$s quer se conectar com você via diff --git a/apps/android/app/src/main/res/values-ru/strings.xml b/apps/android/app/src/main/res/values-ru/strings.xml index dc70794646..5b5939b69c 100644 --- a/apps/android/app/src/main/res/values-ru/strings.xml +++ b/apps/android/app/src/main/res/values-ru/strings.xml @@ -1025,7 +1025,6 @@ Отдельное TCP-соединение (и авторизация SOCKS) будет использоваться для каждого контакта и члена группы. \nОбратите внимание: если у Вас много контактов, потребление батареи и трафика может быть значительно выше, и некоторые соединения могут не работать. Отдельное TCP-соединение (и авторизация SOCKS) будет использоваться для каждого профиля чата, который Вы имеете в приложении. - Ядро скомпилировано: %s Версия ядра: v%s Удалить профиль чата\? Удалить профиль чата для diff --git a/apps/android/app/src/main/res/values-zh-rCN/strings.xml b/apps/android/app/src/main/res/values-zh-rCN/strings.xml index 4731519257..e74fe34815 100644 --- a/apps/android/app/src/main/res/values-zh-rCN/strings.xml +++ b/apps/android/app/src/main/res/values-zh-rCN/strings.xml @@ -363,7 +363,6 @@ 端到端加密语音通话 ICE 服务器(每行一个) 创建地址 - 核心构建于:%s 核心版本: v%s 显示名: 全名: diff --git a/apps/android/app/src/main/res/values-zh-rTW/strings.xml b/apps/android/app/src/main/res/values-zh-rTW/strings.xml index e7a54a18b6..c2a37deb32 100644 --- a/apps/android/app/src/main/res/values-zh-rTW/strings.xml +++ b/apps/android/app/src/main/res/values-zh-rTW/strings.xml @@ -425,7 +425,6 @@ 刪除地址 顏色 如何使用你的伺服器 - 核心建立於:%s 使用連結連接 💻 桌面版:於應用程式內掃描一個已存在的二維碼,透過二維碼掃描。 設定 diff --git a/apps/android/app/src/main/res/values/strings.xml b/apps/android/app/src/main/res/values/strings.xml index 873305dde9..6aa7a83b46 100644 --- a/apps/android/app/src/main/res/values/strings.xml +++ b/apps/android/app/src/main/res/values/strings.xml @@ -556,7 +556,6 @@ App version: v%s App build: %s Core version: v%s - Core built at: %s simplexmq: v%s (%2s) Show: Hide: diff --git a/apps/ios/Shared/Views/UserSettings/VersionView.swift b/apps/ios/Shared/Views/UserSettings/VersionView.swift index 9f13e4a95b..0fc2b4cb3e 100644 --- a/apps/ios/Shared/Views/UserSettings/VersionView.swift +++ b/apps/ios/Shared/Views/UserSettings/VersionView.swift @@ -18,7 +18,6 @@ struct VersionView: View { Text("App build: \(appBuild ?? "?")") if let info = versionInfo { Text("Core version: v\(info.version)") - Text("Core built at: \(info.buildTimestamp)") if let v = try? AttributedString(markdown: "simplexmq: v\(info.simplexmqVersion) ([\(info.simplexmqCommit.prefix(7))](https://github.com/simplex-chat/simplexmq/commit/\(info.simplexmqCommit)))") { Text(v) } diff --git a/apps/ios/SimpleX Localizations/cs.xcloc/Localized Contents/cs.xliff b/apps/ios/SimpleX Localizations/cs.xcloc/Localized Contents/cs.xliff index 41845a1d1f..226358a008 100644 --- a/apps/ios/SimpleX Localizations/cs.xcloc/Localized Contents/cs.xliff +++ b/apps/ios/SimpleX Localizations/cs.xcloc/Localized Contents/cs.xliff @@ -947,11 +947,6 @@ Kopírovat chat item action
- - Core built at: %@ - Jádro sestavené na: %@ - No comment provided by engineer. - Core version: v%@ Verze jádra: v%@ diff --git a/apps/ios/SimpleX Localizations/de.xcloc/Localized Contents/de.xliff b/apps/ios/SimpleX Localizations/de.xcloc/Localized Contents/de.xliff index 0340acbc5e..eca31200f1 100644 --- a/apps/ios/SimpleX Localizations/de.xcloc/Localized Contents/de.xliff +++ b/apps/ios/SimpleX Localizations/de.xcloc/Localized Contents/de.xliff @@ -947,11 +947,6 @@ Kopieren chat item action - - Core built at: %@ - Core übersetzt am: %@ - No comment provided by engineer. - Core version: v%@ Core Version: v%@ diff --git a/apps/ios/SimpleX Localizations/en.xcloc/Localized Contents/en.xliff b/apps/ios/SimpleX Localizations/en.xcloc/Localized Contents/en.xliff index 849f5130dd..524d253fbf 100644 --- a/apps/ios/SimpleX Localizations/en.xcloc/Localized Contents/en.xliff +++ b/apps/ios/SimpleX Localizations/en.xcloc/Localized Contents/en.xliff @@ -955,11 +955,6 @@ Copy chat item action - - Core built at: %@ - Core built at: %@ - No comment provided by engineer. - Core version: v%@ Core version: v%@ diff --git a/apps/ios/SimpleX Localizations/es.xcloc/Localized Contents/es.xliff b/apps/ios/SimpleX Localizations/es.xcloc/Localized Contents/es.xliff index 4276de3cd3..9deefbc2d7 100644 --- a/apps/ios/SimpleX Localizations/es.xcloc/Localized Contents/es.xliff +++ b/apps/ios/SimpleX Localizations/es.xcloc/Localized Contents/es.xliff @@ -955,11 +955,6 @@ Copiar chat item action - - Core built at: %@ - Core compilado en: %@ - No comment provided by engineer. - Core version: v%@ Versión Core: v%@ diff --git a/apps/ios/SimpleX Localizations/fr.xcloc/Localized Contents/fr.xliff b/apps/ios/SimpleX Localizations/fr.xcloc/Localized Contents/fr.xliff index 9e6dbbc946..c8393c13db 100644 --- a/apps/ios/SimpleX Localizations/fr.xcloc/Localized Contents/fr.xliff +++ b/apps/ios/SimpleX Localizations/fr.xcloc/Localized Contents/fr.xliff @@ -955,11 +955,6 @@ Copier chat item action - - Core built at: %@ - Cœur compilé le : %@ - No comment provided by engineer. - Core version: v%@ Version du cœur : v%@ diff --git a/apps/ios/SimpleX Localizations/it.xcloc/Localized Contents/it.xliff b/apps/ios/SimpleX Localizations/it.xcloc/Localized Contents/it.xliff index dbd6245fcf..cda6d3771e 100644 --- a/apps/ios/SimpleX Localizations/it.xcloc/Localized Contents/it.xliff +++ b/apps/ios/SimpleX Localizations/it.xcloc/Localized Contents/it.xliff @@ -955,11 +955,6 @@ Copia chat item action - - Core built at: %@ - Core compilato il: %@ - No comment provided by engineer. - Core version: v%@ Versione core: v%@ diff --git a/apps/ios/SimpleX Localizations/nl.xcloc/Localized Contents/nl.xliff b/apps/ios/SimpleX Localizations/nl.xcloc/Localized Contents/nl.xliff index 8f00cdfa47..5bac85622e 100644 --- a/apps/ios/SimpleX Localizations/nl.xcloc/Localized Contents/nl.xliff +++ b/apps/ios/SimpleX Localizations/nl.xcloc/Localized Contents/nl.xliff @@ -955,11 +955,6 @@ Kopiëren chat item action - - Core built at: %@ - Core built at: %@ - No comment provided by engineer. - Core version: v%@ Core versie: v% @ diff --git a/apps/ios/SimpleX Localizations/pl.xcloc/Localized Contents/pl.xliff b/apps/ios/SimpleX Localizations/pl.xcloc/Localized Contents/pl.xliff index 8479fc7c16..8958378467 100644 --- a/apps/ios/SimpleX Localizations/pl.xcloc/Localized Contents/pl.xliff +++ b/apps/ios/SimpleX Localizations/pl.xcloc/Localized Contents/pl.xliff @@ -955,11 +955,6 @@ Kopiuj chat item action - - Core built at: %@ - Kompilacja rdzenia: %@ - No comment provided by engineer. - Core version: v%@ Wersja rdzenia: v%@ diff --git a/apps/ios/SimpleX Localizations/ru.xcloc/Localized Contents/ru.xliff b/apps/ios/SimpleX Localizations/ru.xcloc/Localized Contents/ru.xliff index fcda6a846c..074d0f1c2f 100644 --- a/apps/ios/SimpleX Localizations/ru.xcloc/Localized Contents/ru.xliff +++ b/apps/ios/SimpleX Localizations/ru.xcloc/Localized Contents/ru.xliff @@ -947,11 +947,6 @@ Скопировать chat item action - - Core built at: %@ - Ядро скомпилировано: %@ - No comment provided by engineer. - Core version: v%@ Версия ядра: v%@ diff --git a/apps/ios/SimpleX Localizations/zh-Hans.xcloc/Localized Contents/zh-Hans.xliff b/apps/ios/SimpleX Localizations/zh-Hans.xcloc/Localized Contents/zh-Hans.xliff index a56def180b..ba1c4de3df 100644 --- a/apps/ios/SimpleX Localizations/zh-Hans.xcloc/Localized Contents/zh-Hans.xliff +++ b/apps/ios/SimpleX Localizations/zh-Hans.xcloc/Localized Contents/zh-Hans.xliff @@ -955,11 +955,6 @@ 复制 chat item action - - Core built at: %@ - 核心构建于:%@ - No comment provided by engineer. - Core version: v%@ 核心版本: v%@ diff --git a/apps/ios/SimpleXChat/APITypes.swift b/apps/ios/SimpleXChat/APITypes.swift index 75c2ed540b..857221cff1 100644 --- a/apps/ios/SimpleXChat/APITypes.swift +++ b/apps/ios/SimpleXChat/APITypes.swift @@ -1153,7 +1153,6 @@ public enum NotificationPreviewMode: String, SelectableItem { public struct CoreVersionInfo: Decodable { public var version: String - public var buildTimestamp: String public var simplexmqVersion: String public var simplexmqCommit: String } diff --git a/apps/ios/cs.lproj/Localizable.strings b/apps/ios/cs.lproj/Localizable.strings index 75132b2764..8a4ba69af3 100644 --- a/apps/ios/cs.lproj/Localizable.strings +++ b/apps/ios/cs.lproj/Localizable.strings @@ -656,9 +656,6 @@ /* chat item action */ "Copy" = "Kopírovat"; -/* No comment provided by engineer. */ -"Core built at: %@" = "Jádro sestavené na: %@"; - /* No comment provided by engineer. */ "Core version: v%@" = "Verze jádra: v%@"; diff --git a/apps/ios/de.lproj/Localizable.strings b/apps/ios/de.lproj/Localizable.strings index 12ea011e46..46d5dcb981 100644 --- a/apps/ios/de.lproj/Localizable.strings +++ b/apps/ios/de.lproj/Localizable.strings @@ -656,9 +656,6 @@ /* chat item action */ "Copy" = "Kopieren"; -/* No comment provided by engineer. */ -"Core built at: %@" = "Core übersetzt am: %@"; - /* No comment provided by engineer. */ "Core version: v%@" = "Core Version: v%@"; diff --git a/apps/ios/es.lproj/Localizable.strings b/apps/ios/es.lproj/Localizable.strings index 0a3d0dc0b9..4b975f3e50 100644 --- a/apps/ios/es.lproj/Localizable.strings +++ b/apps/ios/es.lproj/Localizable.strings @@ -680,9 +680,6 @@ /* chat item action */ "Copy" = "Copiar"; -/* No comment provided by engineer. */ -"Core built at: %@" = "Core compilado en: %@"; - /* No comment provided by engineer. */ "Core version: v%@" = "Versión Core: v%@"; diff --git a/apps/ios/fr.lproj/Localizable.strings b/apps/ios/fr.lproj/Localizable.strings index 1b86793330..0efce04a3a 100644 --- a/apps/ios/fr.lproj/Localizable.strings +++ b/apps/ios/fr.lproj/Localizable.strings @@ -680,9 +680,6 @@ /* chat item action */ "Copy" = "Copier"; -/* No comment provided by engineer. */ -"Core built at: %@" = "Cœur compilé le : %@"; - /* No comment provided by engineer. */ "Core version: v%@" = "Version du cœur : v%@"; diff --git a/apps/ios/it.lproj/Localizable.strings b/apps/ios/it.lproj/Localizable.strings index fe173fb936..62de299b98 100644 --- a/apps/ios/it.lproj/Localizable.strings +++ b/apps/ios/it.lproj/Localizable.strings @@ -680,9 +680,6 @@ /* chat item action */ "Copy" = "Copia"; -/* No comment provided by engineer. */ -"Core built at: %@" = "Core compilato il: %@"; - /* No comment provided by engineer. */ "Core version: v%@" = "Versione core: v%@"; diff --git a/apps/ios/nl.lproj/Localizable.strings b/apps/ios/nl.lproj/Localizable.strings index 4f168cf35d..92c9bc5b7b 100644 --- a/apps/ios/nl.lproj/Localizable.strings +++ b/apps/ios/nl.lproj/Localizable.strings @@ -680,9 +680,6 @@ /* chat item action */ "Copy" = "Kopiëren"; -/* No comment provided by engineer. */ -"Core built at: %@" = "Core built at: %@"; - /* No comment provided by engineer. */ "Core version: v%@" = "Core versie: v% @"; diff --git a/apps/ios/pl.lproj/Localizable.strings b/apps/ios/pl.lproj/Localizable.strings index c8f52dd87b..22a9b4b264 100644 --- a/apps/ios/pl.lproj/Localizable.strings +++ b/apps/ios/pl.lproj/Localizable.strings @@ -680,9 +680,6 @@ /* chat item action */ "Copy" = "Kopiuj"; -/* No comment provided by engineer. */ -"Core built at: %@" = "Kompilacja rdzenia: %@"; - /* No comment provided by engineer. */ "Core version: v%@" = "Wersja rdzenia: v%@"; diff --git a/apps/ios/ru.lproj/Localizable.strings b/apps/ios/ru.lproj/Localizable.strings index 28e626479e..36a358be64 100644 --- a/apps/ios/ru.lproj/Localizable.strings +++ b/apps/ios/ru.lproj/Localizable.strings @@ -656,9 +656,6 @@ /* chat item action */ "Copy" = "Скопировать"; -/* No comment provided by engineer. */ -"Core built at: %@" = "Ядро скомпилировано: %@"; - /* No comment provided by engineer. */ "Core version: v%@" = "Версия ядра: v%@"; diff --git a/apps/ios/zh-Hans.lproj/Localizable.strings b/apps/ios/zh-Hans.lproj/Localizable.strings index cbfc39437a..f3041985c5 100644 --- a/apps/ios/zh-Hans.lproj/Localizable.strings +++ b/apps/ios/zh-Hans.lproj/Localizable.strings @@ -680,9 +680,6 @@ /* chat item action */ "Copy" = "复制"; -/* No comment provided by engineer. */ -"Core built at: %@" = "核心构建于:%@"; - /* No comment provided by engineer. */ "Core version: v%@" = "核心版本: v%@"; diff --git a/src/Simplex/Chat.hs b/src/Simplex/Chat.hs index 56d3054cb6..a780646569 100644 --- a/src/Simplex/Chat.hs +++ b/src/Simplex/Chat.hs @@ -1467,7 +1467,7 @@ processChatCommand = \case p {groupPreferences = Just . setGroupPreference' SGFTimedMessages pref $ groupPreferences p} QuitChat -> liftIO exitSuccess ShowVersion -> do - let versionInfo = coreVersionInfo $(buildTimestampQ) $(simplexmqCommitQ) + let versionInfo = coreVersionInfo $(simplexmqCommitQ) chatMigrations <- map upMigration <$> withStore' Migrations.getCurrent agentMigrations <- withAgent getAgentMigrations pure $ CRVersionInfo {versionInfo, chatMigrations, agentMigrations} diff --git a/src/Simplex/Chat/Controller.hs b/src/Simplex/Chat/Controller.hs index 6f2dafeba0..5dd6048663 100644 --- a/src/Simplex/Chat/Controller.hs +++ b/src/Simplex/Chat/Controller.hs @@ -33,8 +33,7 @@ import Data.Map.Strict (Map) import Data.String import Data.Text (Text) import Data.Time (ZonedTime) -import Data.Time.Clock (UTCTime, getCurrentTime) -import Data.Time.Format (defaultTimeLocale, formatTime, iso8601DateFormat) +import Data.Time.Clock (UTCTime) import Data.Version (showVersion) import GHC.Generics (Generic) import Language.Haskell.TH (Exp, Q, runIO) @@ -73,11 +72,6 @@ versionString version = "SimpleX Chat v" <> version updateStr :: String updateStr = "To update run: curl -o- https://raw.githubusercontent.com/simplex-chat/simplex-chat/master/install.sh | bash" -buildTimestampQ :: Q Exp -buildTimestampQ = do - s <- formatTime defaultTimeLocale (iso8601DateFormat $ Just "%H:%M:%S") <$> runIO getCurrentTime - [|fromString s|] - simplexmqCommitQ :: Q Exp simplexmqCommitQ = do s <- either error B.unpack . A.parseOnly commitHashP <$> runIO (B.readFile "./cabal.project") @@ -92,11 +86,10 @@ simplexmqCommitQ = do *> "tag: " *> A.takeWhile (A.notInClass " \r\n") -coreVersionInfo :: String -> String -> CoreVersionInfo -coreVersionInfo buildTimestamp simplexmqCommit = +coreVersionInfo :: String -> CoreVersionInfo +coreVersionInfo simplexmqCommit = CoreVersionInfo { version = versionNumber, - buildTimestamp, simplexmqVersion = simplexMQVersion, simplexmqCommit } @@ -724,7 +717,6 @@ data ChatLogLevel = CLLDebug | CLLInfo | CLLWarning | CLLError | CLLImportant data CoreVersionInfo = CoreVersionInfo { version :: String, - buildTimestamp :: String, simplexmqVersion :: String, simplexmqCommit :: String } diff --git a/src/Simplex/Chat/View.hs b/src/Simplex/Chat/View.hs index 6a401f69df..754c14fd2d 100644 --- a/src/Simplex/Chat/View.hs +++ b/src/Simplex/Chat/View.hs @@ -1240,10 +1240,10 @@ instance ToJSON WCallCommand where toJSON = J.genericToJSON . taggedObjectJSON $ dropPrefix "WCCall" viewVersionInfo :: ChatLogLevel -> CoreVersionInfo -> [StyledString] -viewVersionInfo logLevel CoreVersionInfo {version, buildTimestamp, simplexmqVersion, simplexmqCommit} = +viewVersionInfo logLevel CoreVersionInfo {version, simplexmqVersion, simplexmqCommit} = map plain $ if logLevel <= CLLInfo - then [versionString version <> parens buildTimestamp, updateStr, "simplexmq: " <> simplexmqVersion <> parens simplexmqCommit] + then [versionString version, updateStr, "simplexmq: " <> simplexmqVersion <> parens simplexmqCommit] else [versionString version, updateStr] where parens s = " (" <> s <> ")" From eb36f646768c99c8d7cac3e92ca70f355355a914 Mon Sep 17 00:00:00 2001 From: spaced4ndy <8711996+spaced4ndy@users.noreply.github.com> Date: Fri, 14 Apr 2023 15:32:12 +0400 Subject: [PATCH 7/8] core: update simplexmq (digest entity id); integrate xftp snd delete (#2183) --- cabal.project | 2 +- scripts/nix/sha256map.nix | 2 +- src/Simplex/Chat.hs | 35 ++++++++++++++++++++++++----------- src/Simplex/Chat/Store.hs | 28 +++++++++++++++++++++++----- src/Simplex/Chat/Types.hs | 4 ++-- stack.yaml | 2 +- 6 files changed, 52 insertions(+), 21 deletions(-) diff --git a/cabal.project b/cabal.project index 9caea1ac81..556f2d3faf 100644 --- a/cabal.project +++ b/cabal.project @@ -7,7 +7,7 @@ constraints: zip +disable-bzip2 +disable-zstd source-repository-package type: git location: https://github.com/simplex-chat/simplexmq.git - tag: 5e39c479758c8646ba2f943575bf9dca4212a2fe + tag: 9f0b9a83d6dfbd926daf09883a81bf370544f48e source-repository-package type: git diff --git a/scripts/nix/sha256map.nix b/scripts/nix/sha256map.nix index 15d9f5048b..c4109cf7de 100644 --- a/scripts/nix/sha256map.nix +++ b/scripts/nix/sha256map.nix @@ -1,5 +1,5 @@ { - "https://github.com/simplex-chat/simplexmq.git"."5e39c479758c8646ba2f943575bf9dca4212a2fe" = "00i6w13zzv05gamxbas3yspq241s917f0vg2mnnwvmvqq2x5f4jq"; + "https://github.com/simplex-chat/simplexmq.git"."9f0b9a83d6dfbd926daf09883a81bf370544f48e" = "1pnsk2qzb10d3j7rxjqvbwirymky5d55b13y3a6mwj7qbgzzqcy9"; "https://github.com/simplex-chat/hs-socks.git"."a30cc7a79a08d8108316094f8f2f82a0c5e1ac51" = "0yasvnr7g91k76mjkamvzab2kvlb1g5pspjyjn2fr6v83swjhj38"; "https://github.com/kazu-yamamoto/http2.git"."b5a1b7200cf5bc7044af34ba325284271f6dff25" = "0dqb50j57an64nf4qcf5vcz4xkd1vzvghvf8bk529c1k30r9nfzb"; "https://github.com/simplex-chat/direct-sqlcipher.git"."34309410eb2069b029b8fc1872deb1e0db123294" = "0kwkmhyfsn2lixdlgl15smgr1h5gjk7fky6abzh8rng2h5ymnffd"; diff --git a/src/Simplex/Chat.hs b/src/Simplex/Chat.hs index a780646569..068be0df62 100644 --- a/src/Simplex/Chat.hs +++ b/src/Simplex/Chat.hs @@ -60,7 +60,7 @@ import Simplex.Chat.Store import Simplex.Chat.Types import Simplex.FileTransfer.Client.Presets (defaultXFTPServers) import Simplex.FileTransfer.Description (ValidFileDescription, gb, kb, mb) -import Simplex.FileTransfer.Protocol (FileParty (..)) +import Simplex.FileTransfer.Protocol (FileParty (..), FilePartyI) import Simplex.Messaging.Agent as Agent import Simplex.Messaging.Agent.Client (AgentStatsKey (..)) import Simplex.Messaging.Agent.Env.SQLite (AgentConfig (..), InitialAgentServers (..), createAgentStore, defaultAgentConfig) @@ -1961,7 +1961,7 @@ acceptFileReceive user@User {userId} RcvFileTransfer {fileId, xftpRcvFile, fileI receiveViaCompleteFD :: ChatMonad m => User -> FileTransferId -> RcvFileDescr -> m () receiveViaCompleteFD user fileId RcvFileDescr {fileDescrText, fileDescrComplete} = when fileDescrComplete $ do - rd <- parseRcvFileDescription fileDescrText + rd <- parseFileDescription fileDescrText aFileId <- withAgent $ \a -> xftpReceiveFile a (aUserId user) rd startReceivingFile user fileId withStore' $ \db -> updateRcvFileAgentId db fileId (Just $ AgentRcvFileId aFileId) @@ -2335,9 +2335,9 @@ processAgentMsgSndFile _corrId aFileId msg = liftIO $ updateCIFileStatus db user fileId status getChatItemByFileId db user fileId toView $ CRSndFileProgressXFTP user ci ft sndProgress sndTotal - SFDONE _sndDescr rfds -> + SFDONE sndDescr rfds -> unless cancelled $ do - -- TODO save sender file description + withStore' $ \db -> setSndFTPrivateSndDescr db user fileId (fileDescrText sndDescr) ci@(AChatItem _ d cInfo _ci@ChatItem {meta = CIMeta {itemSharedMsgId = msgId_, itemDeleted}}) <- withStore $ \db -> getChatItemByFileId db user fileId case (msgId_, itemDeleted) of @@ -2350,6 +2350,7 @@ processAgentMsgSndFile _corrId aFileId msg = withStore' $ \db -> createExtraSndFTDescrs db user fileId (map fileDescrText extraRFDs) msgDeliveryId <- sendFileDescription sft rfd sharedMsgId $ sendDirectContactMessage ct withStore' $ \db -> updateSndFTDeliveryXFTP db sft msgDeliveryId + agentXFTPDeleteSndFileInternal user aFileId (_, _, SMDSnd, GroupChat g@GroupInfo {groupId}) -> do ms <- withStore' $ \db -> getGroupMembers db user g let rfdsMemberFTs = zip rfds $ memberFTs ms @@ -2359,6 +2360,7 @@ processAgentMsgSndFile _corrId aFileId msg = ci' <- withStore $ \db -> do liftIO $ updateCIFileStatus db user fileId CIFSSndComplete getChatItemByFileId db user fileId + agentXFTPDeleteSndFileInternal user aFileId toView $ CRSndFileCompleteXFTP user ci' ft where memberFTs :: [GroupMember] -> [(Connection, SndFileTransfer)] @@ -2378,9 +2380,10 @@ processAgentMsgSndFile _corrId aFileId msg = SFERR e -> do -- update chat item status -- send status to view - -- agentXFTPDeleteSndFile + agentXFTPDeleteSndFileInternal user aFileId throwChatError $ CEXFTPSndFile fileId (AgentSndFileId aFileId) e where + fileDescrText :: FilePartyI p => ValidFileDescription p -> T.Text fileDescrText = safeDecodeUtf8 . strEncode sendFileDescription :: SndFileTransfer -> ValidFileDescription 'FRecipient -> SharedMsgId -> (ChatMsgEvent 'Json -> m (SndMessage, Int64)) -> m Int64 sendFileDescription sft rfd msgId sendMsg = do @@ -3810,8 +3813,8 @@ processAgentMessageConn user@User {userId} corrId agentConnId agentMessage = do groupMsgToView g' m ci msgMeta createGroupFeatureChangedItems user cd CIRcvGroupFeature g g' -parseRcvFileDescription :: ChatMonad m => Text -> m (ValidFileDescription 'FRecipient) -parseRcvFileDescription = +parseFileDescription :: (ChatMonad m, FilePartyI p) => Text -> m (ValidFileDescription p) +parseFileDescription = liftEither . first (ChatError . CEInvalidFileDescription) . (strDecode . encodeUtf8) sendDirectFileInline :: ChatMonad m => Contact -> FileTransferMeta -> SharedMsgId -> m () @@ -3939,11 +3942,9 @@ cancelSndFile user FileTransferMeta {fileId, xftpSndFile} fts sendCancel = do case xftpSndFile of Nothing -> catMaybes <$> forM fts (\ft -> cancelSndFileTransfer user ft sendCancel) - Just _patternAgentSndFileId -> do + Just xsf -> do forM_ fts (\ft -> cancelSndFileTransfer user ft False) - -- TODO unless agentSndFileDeleted, do agentXFTPDeleteSndFile: - -- TODO - with agent xftpDeleteSndFile - -- TODO - with store setSndFTAgentDeleted + agentXFTPDeleteSndFileRemote user xsf fileId `catchError` (toView . CRChatError (Just user)) pure [] cancelSndFileTransfer :: ChatMonad m => User -> SndFileTransfer -> Bool -> m (Maybe ConnId) @@ -4192,6 +4193,18 @@ agentXFTPDeleteRcvFile user aFileId fileId = do withAgent $ \a -> xftpDeleteRcvFile a (aUserId user) aFileId withStore' $ \db -> setRcvFTAgentDeleted db fileId +agentXFTPDeleteSndFileInternal :: ChatMonad m => User -> SndFileId -> m () +agentXFTPDeleteSndFileInternal user aFileId = do + withAgent (\a -> xftpDeleteSndFileInternal a (aUserId user) aFileId) `catchError` (toView . CRChatError (Just user)) + +agentXFTPDeleteSndFileRemote :: ChatMonad m => User -> XFTPSndFile -> FileTransferId -> m () +agentXFTPDeleteSndFileRemote user XFTPSndFile {agentSndFileId = AgentSndFileId aFileId, privateSndFileDescr, agentSndFileDeleted} fileId = + unless agentSndFileDeleted $ + forM_ privateSndFileDescr $ \sfdText -> do + sd <- parseFileDescription sfdText + withAgent $ \a -> xftpDeleteSndFileRemote a (aUserId user) aFileId sd + withStore' $ \db -> setSndFTAgentDeleted db user fileId + userProfileToSend :: User -> Maybe Profile -> Maybe Contact -> Profile userProfileToSend user@User {profile = p} incognitoProfile ct = let p' = fromMaybe (fromLocalProfile p) incognitoProfile diff --git a/src/Simplex/Chat/Store.hs b/src/Simplex/Chat/Store.hs index 877f8644b8..520dc7fa84 100644 --- a/src/Simplex/Chat/Store.hs +++ b/src/Simplex/Chat/Store.hs @@ -159,9 +159,11 @@ module Simplex.Chat.Store getSndFTViaMsgDelivery, createSndFileTransferXFTP, createSndFTDescrXFTP, + setSndFTPrivateSndDescr, updateSndFTDescrXFTP, createExtraSndFTDescrs, updateSndFTDeliveryXFTP, + setSndFTAgentDeleted, getXFTPSndFileDBId, getXFTPRcvFileDBId, updateFileCancelled, @@ -2789,7 +2791,7 @@ getSndFTViaMsgDelivery db User {userId} Connection {connId, agentConnId} agentMs createSndFileTransferXFTP :: DB.Connection -> User -> ContactOrGroup -> FilePath -> FileInvitation -> AgentSndFileId -> Integer -> IO FileTransferMeta createSndFileTransferXFTP db User {userId} contactOrGroup filePath FileInvitation {fileName, fileSize} agentSndFileId chunkSize = do currentTs <- getCurrentTime - let xftpSndFile = Just XFTPSndFile {agentSndFileId, privateSndFileDescr = Nothing} + let xftpSndFile = Just XFTPSndFile {agentSndFileId, privateSndFileDescr = Nothing, agentSndFileDeleted = False} DB.execute db "INSERT INTO files (contact_id, group_id, user_id, file_name, file_path, file_size, chunk_size, agent_snd_file_id, ci_file_status, protocol, created_at, updated_at) VALUES (?,?,?,?,?,?,?,?,?,?,?,?)" @@ -2811,6 +2813,14 @@ createSndFTDescrXFTP db User {userId} m Connection {connId} FileTransferMeta {fi "INSERT INTO snd_files (file_id, file_status, file_descr_id, group_member_id, connection_id, created_at, updated_at) VALUES (?,?,?,?,?,?,?)" (fileId, fileStatus, fileDescrId, groupMemberId' <$> m, connId, currentTs, currentTs) +setSndFTPrivateSndDescr :: DB.Connection -> User -> FileTransferId -> Text -> IO () +setSndFTPrivateSndDescr db User {userId} fileId sfdText = do + currentTs <- getCurrentTime + DB.execute + db + "UPDATE files SET private_snd_file_descr = ?, updated_at = ? WHERE user_id = ? AND file_id = ?" + (sfdText, currentTs, userId, fileId) + updateSndFTDescrXFTP :: DB.Connection -> User -> SndFileTransfer -> Text -> IO () updateSndFTDescrXFTP db user@User {userId} sft@SndFileTransfer {fileId, fileDescrId} rfdText = do currentTs <- getCurrentTime @@ -2841,6 +2851,14 @@ updateSndFTDeliveryXFTP db SndFileTransfer {connId, fileId, fileDescrId} msgDeli "UPDATE snd_files SET last_inline_msg_delivery_id = ? WHERE connection_id = ? AND file_id = ? AND file_descr_id = ?" (msgDeliveryId, connId, fileId, fileDescrId) +setSndFTAgentDeleted :: DB.Connection -> User -> FileTransferId -> IO () +setSndFTAgentDeleted db User {userId} fileId = do + currentTs <- getCurrentTime + DB.execute + db + "UPDATE files SET agent_snd_file_deleted = 1, updated_at = ? WHERE user_id = ? AND file_id = ?" + (currentTs, userId, fileId) + getXFTPSndFileDBId :: DB.Connection -> User -> AgentSndFileId -> ExceptT StoreError IO FileTransferId getXFTPSndFileDBId db User {userId} aSndFileId = ExceptT . firstRow fromOnly (SESndFileNotFoundXFTP aSndFileId) $ @@ -3330,15 +3348,15 @@ getFileTransferMeta db User {userId} fileId = DB.query db [sql| - SELECT file_name, file_size, chunk_size, file_path, file_inline, agent_snd_file_id, private_snd_file_descr, cancelled + SELECT file_name, file_size, chunk_size, file_path, file_inline, agent_snd_file_id, agent_snd_file_deleted, private_snd_file_descr, cancelled FROM files WHERE user_id = ? AND file_id = ? |] (userId, fileId) where - fileTransferMeta :: (String, Integer, Integer, FilePath, Maybe InlineFileMode, Maybe AgentSndFileId, Maybe Text, Maybe Bool) -> FileTransferMeta - fileTransferMeta (fileName, fileSize, chunkSize, filePath, fileInline, aSndFileId_, privateSndFileDescr, cancelled_) = - let xftpSndFile = (\fId -> XFTPSndFile {agentSndFileId = fId, privateSndFileDescr}) <$> aSndFileId_ + fileTransferMeta :: (String, Integer, Integer, FilePath, Maybe InlineFileMode, Maybe AgentSndFileId, Bool, Maybe Text, Maybe Bool) -> FileTransferMeta + fileTransferMeta (fileName, fileSize, chunkSize, filePath, fileInline, aSndFileId_, agentSndFileDeleted, privateSndFileDescr, cancelled_) = + let xftpSndFile = (\fId -> XFTPSndFile {agentSndFileId = fId, privateSndFileDescr, agentSndFileDeleted}) <$> aSndFileId_ in FileTransferMeta {fileId, xftpSndFile, fileName, fileSize, chunkSize, filePath, fileInline, cancelled = fromMaybe False cancelled_} getContactFileInfo :: DB.Connection -> User -> Contact -> IO [CIFileInfo] diff --git a/src/Simplex/Chat/Types.hs b/src/Simplex/Chat/Types.hs index 23aa4f250b..69aa5e02ff 100644 --- a/src/Simplex/Chat/Types.hs +++ b/src/Simplex/Chat/Types.hs @@ -1737,8 +1737,8 @@ instance ToJSON FileTransferMeta where toEncoding = J.genericToEncoding J.defaul data XFTPSndFile = XFTPSndFile { agentSndFileId :: AgentSndFileId, - privateSndFileDescr :: Maybe Text - -- TODO agentSndFileDeleted :: Bool + privateSndFileDescr :: Maybe Text, + agentSndFileDeleted :: Bool } deriving (Eq, Show, Generic) diff --git a/stack.yaml b/stack.yaml index fcefacecc3..02d0edbc8c 100644 --- a/stack.yaml +++ b/stack.yaml @@ -49,7 +49,7 @@ extra-deps: # - simplexmq-1.0.0@sha256:34b2004728ae396e3ae449cd090ba7410781e2b3cefc59259915f4ca5daa9ea8,8561 # - ../simplexmq - github: simplex-chat/simplexmq - commit: 5e39c479758c8646ba2f943575bf9dca4212a2fe + commit: 9f0b9a83d6dfbd926daf09883a81bf370544f48e - github: kazu-yamamoto/http2 commit: b5a1b7200cf5bc7044af34ba325284271f6dff25 # - ../direct-sqlcipher From 29735a807b5e1d7033340e1d6b07661030736f72 Mon Sep 17 00:00:00 2001 From: spaced4ndy <8711996+spaced4ndy@users.noreply.github.com> Date: Fri, 14 Apr 2023 15:52:39 +0400 Subject: [PATCH 8/8] core: don't delete XFTP file when temporary agent error is reported in RFERR/SFERR (#2184) --- src/Simplex/Chat.hs | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/src/Simplex/Chat.hs b/src/Simplex/Chat.hs index 068be0df62..bc1e537d81 100644 --- a/src/Simplex/Chat.hs +++ b/src/Simplex/Chat.hs @@ -62,7 +62,7 @@ import Simplex.FileTransfer.Client.Presets (defaultXFTPServers) import Simplex.FileTransfer.Description (ValidFileDescription, gb, kb, mb) import Simplex.FileTransfer.Protocol (FileParty (..), FilePartyI) import Simplex.Messaging.Agent as Agent -import Simplex.Messaging.Agent.Client (AgentStatsKey (..)) +import Simplex.Messaging.Agent.Client (AgentStatsKey (..), temporaryAgentError) import Simplex.Messaging.Agent.Env.SQLite (AgentConfig (..), InitialAgentServers (..), createAgentStore, defaultAgentConfig) import Simplex.Messaging.Agent.Lock import Simplex.Messaging.Agent.Protocol @@ -2378,9 +2378,10 @@ processAgentMsgSndFile _corrId aFileId msg = _ -> pure () _ -> pure () -- TODO error? SFERR e -> do - -- update chat item status - -- send status to view - agentXFTPDeleteSndFileInternal user aFileId + unless (temporaryAgentError e) $ do + -- update chat item status + -- send status to view + agentXFTPDeleteSndFileInternal user aFileId throwChatError $ CEXFTPSndFile fileId (AgentSndFileId aFileId) e where fileDescrText :: FilePartyI p => ValidFileDescription p -> T.Text @@ -2435,9 +2436,10 @@ processAgentMsgRcvFile _corrId aFileId msg = agentXFTPDeleteRcvFile user aFileId fileId toView $ CRRcvFileComplete user ci RFERR e -> do - -- update chat item status - -- send status to view - agentXFTPDeleteRcvFile user aFileId fileId + unless (temporaryAgentError e) $ do + -- update chat item status + -- send status to view + agentXFTPDeleteRcvFile user aFileId fileId throwChatError $ CEXFTPRcvFile fileId (AgentRcvFileId aFileId) e processAgentMessageConn :: forall m. ChatMonad m => User -> ACorrId -> ConnId -> ACommand 'Agent 'AEConn -> m ()