Merge branch 'develop' into feature/realm_10

This commit is contained in:
Benoit Marty 2020-11-05 16:14:19 +01:00 committed by GitHub
commit 9068168378
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
47 changed files with 1565 additions and 1450 deletions

View file

@ -1,9 +1,30 @@
Changes in Element 1.0.10 (2020-XX-XX)
Changes in Element 1.0.11 (2020-XX-XX)
===================================================
Features ✨:
-
Improvements 🙌:
-
Bugfix 🐛:
-
Translations 🗣:
-
SDK API changes ⚠️:
-
Build 🧱:
-
Other changes:
- Upgrade Realm dependency to 10.0.0
Changes in Element 1.0.10 (2020-11-04)
===================================================
Improvements 🙌:
- Rework sending Event management (#154)
- New room creation screen: set topic and avatar in the room creation form (#2078)
@ -24,18 +45,9 @@ Bugfix 🐛:
- Messages encrypted with no way to decrypt after SDK update from 0.18 to 1.0.0 (#2252)
- Incoming call continues to ring if call is answered on another device (#1921)
- Search Result | scroll jumps after pagination (#2238)
Translations 🗣:
-
SDK API changes ⚠️:
-
Build 🧱:
-
Other changes:
- Upgrade Realm dependency to 10.0.0
- Badly formatted mentions in body (#1506)
- KeysBackup: Avoid using `!!` (#2262)
- Two elements in the task switcher (#2299)
Changes in Element 1.0.9 (2020-10-16)
===================================================

View file

@ -0,0 +1,30 @@
Element е приложение от нов тип за съобщения и сътрудничество:
1. Дава Ви контрол, за да запазите поверителността си
2. Позволява ви да комуникирате с всеки в мрежата на Matrix и дори извън него, като се интегрира с приложения като Slack
3. Предпазва ви от реклами, изтичане на данни и търговско следене
4. Защитава ви чрез шифроване от край до край, с кръстосано подписване, за да проверите другите
Element е напълно различен от другите приложения за съобщения и сътрудничество, понеже е децентрализиран и с отворен код.
Element ви позволява да го хоствате самостоятелно - или да изберете хост - така че да имате поверителност, собственост и контрол върху Вашите данни и разговори. Дава ви достъп до отворена мрежа, така че комуникацията Ви не е ограничена до потребителите на Element. И е много сигурно.
Element е в състояние да направи всичко това, защото работи върху Matrix - стандартът за отворена, децентрализирана комуникация.
Element ви дава контрол, като ви позволява да изберете кой да хоства Вашите разговори. От приложението Element можете да изберете хостване по различни начини:
1. Вземете безплатен профил на публичния сървър на matrix.org, хостван от разработчиците на Matrix, или изберете от хиляди публични сървъри, хоствани от доброволци
2. Самостоятелно хоствайте профила си, като пуснете сървър на собствен хардуер
3. Регистрирайте се за профил на персонализиран сървър, като се абонирате за хостинг платформата Element Matrix Services
<b>Защо да изберете Element?</b>
<b>ПРИТЕЖАВАЙТЕ ДАННИТЕ СИ</b>: Вие решавате къде да съхранявате вашите данни и съобщения. Вие ги притежавате и контролирате, а не някаква МЕГАКОРПОРАЦИЯ, която складира вашите данни или дава достъп на трети страни.
<b>ОТВОРЕНИ СЪОБЩЕНИЯ И СЪТРУДНИЧЕСТВО</b>: Можете да разговаряте с всеки друг в мрежата на Matrix, независимо дали използва Element или друго приложение на Matrix и дори ако използва различна система за съобщения като Slack, IRC or XMPP.
<b>СВРЪХ СИГУРНО</b>: Реално шифроване от край до край (само тези в разговора могат да дешифрират съобщения) и кръстосано подписване за проверка на устройствата на участниците в разговора.
<b>ПЪЛНА КОМУНИКАЦИЯ</b>: Съобщения, гласови и видео разговори, споделяне на файлове, споделяне на екран и цял куп интеграции, ботове и джаджи. Изграждайте стаи, общности, поддържайте връзка и направете нещата завършени.
<b>НАВСЯКЪДЕ КЪДЕТО СТЕ</b>: Поддържайте връзка, където и да сте, с напълно синхронизирана история на съобщенията на всичките ви устройства и чрез web на https://app.element.io.

View file

@ -0,0 +1 @@
Сигурен децентрализиран чат и VoIP. Пазете данните си от външни лица.

View file

@ -0,0 +1 @@
Element (предишен Riot.im)

View file

@ -1 +1,2 @@
// TODO
This new version mainly contains bug fixes and improvements. Sending a message is now much faster.
Full changelog: https://github.com/vector-im/element-android/releases/tag/v1.0.10

View file

@ -0,0 +1,30 @@
Element est une nouvelle application de messagerie et de collaboration qui :
1) Vous place aux commandes de votre vie privée
2) Vous permet de communiquer avec n'importe qui du réseau Matrix, et plus encore par des intégrations d'autres applications comme Slack ou Discord
3) Vous protège de la publicité et de la collecte de données
4) Vous sécurise grâce à du chiffrement bout-à-bout, avec de la signature croisée pour authentifier les autres utilisateurs
Element est complètement différent des autres applications de messagerie et de collaboration puisque l'application est décentralisée et open-source.
Element vous permet d'héberger vous-même -ou de choisir un hôte- vous permettant d'assurer votre vie privée, la propriété et le contrôle de vos données et de vos conversations. Cela vous offre l'accès à un réseau ouvert, vous n'êtes donc pas condamné à parler à d'autres utilisateurs d'Element seulement. Et c'est très sécurisé.
Element peut faire tout ça car il est basé sur Matrix, le protocole standard pour la communication ouverte et décentralisée.
Element vous donne le contrôle en vous laissant choisir qui héberge vos conversations. Depuis l'application Element, vous pouvez choisir votre hôte de différentes manières :
1) Créer un compte gratuit sur le serveur public matrix.org hébergé par les développeurs de Matrix, ou choisir parler les milliers de serveurs public hébergés par des bénévoles
2) Héberger vous-même votre compte en installant un serveur sur votre propre machine
3) Créer un compte sur un serveur personnalisé en souscrivant sur la plateforme d'hébergement « Element Matrix Services » (EMS)
<b>Pourquoi choisir Element ?</b>
<b>POSSÉDEZ VOS DONNÉES</b> : Vous décidez où conserver vos données et vos messages. Vous les possédez et vous les contrôlez, et non une MEGACORP qui mine vos données ou les donnent à des tiers
<b>UNE MESSAGERIE OUVERTE ET COLLABORATIVE</b> : Vous pouvez discuter avec n'importe qui sur le réseau Matrix, qu'ils utilisent Element ou une autre application basée sur Matrix, et même s'ils utilisent un système de messagerie différent comment Slack, Discord, IRC ou XMPP.
<b>SUPER SÉCURISÉ</b> : Un réel chiffrement bout-à-bout (seulement ceux deux la conversation peuvent déchiffrer les messages), et une signature croisée pour vérifier les appareils des participants de la conversation.
<b>COMMUNICATION COMPLÈTE</b> : Messagerie, appels vocaux et vidéo, transfert de fichiers, partage d'écran et un tas d'intégrations, robots et widgets. Construisez des salons, des communautés, restez en contact et accomplissez de grandes choses.
<b>PARTOUT OÙ VOUS ÊTES</b> : Restez connectés peu import où vous êtes avec la synchronisation complète de l'historique des messages sur tous vos appareils et sur le web sur https://app.element.io.

View file

@ -1 +1 @@
Element (előzőleg Riot.im)
Element (régebben Riot.im)

View file

@ -245,7 +245,8 @@ class CryptoTestHelper(private val mTestHelper: CommonTestHelper) {
fun createFakeMegolmBackupCreationInfo(): MegolmBackupCreationInfo {
return MegolmBackupCreationInfo(
algorithm = MXCRYPTO_ALGORITHM_MEGOLM_BACKUP,
authData = createFakeMegolmBackupAuthData()
authData = createFakeMegolmBackupAuthData(),
recoveryKey = "fake"
)
}

View file

@ -115,9 +115,8 @@ class KeysBackupTest : InstrumentedTest {
}
assertEquals(MXCRYPTO_ALGORITHM_MEGOLM_BACKUP, megolmBackupCreationInfo.algorithm)
assertNotNull(megolmBackupCreationInfo.authData)
assertNotNull(megolmBackupCreationInfo.authData!!.publicKey)
assertNotNull(megolmBackupCreationInfo.authData!!.signatures)
assertNotNull(megolmBackupCreationInfo.authData.publicKey)
assertNotNull(megolmBackupCreationInfo.authData.signatures)
assertNotNull(megolmBackupCreationInfo.recoveryKey)
stateObserver.stopAndCheckStates(null)
@ -258,14 +257,14 @@ class KeysBackupTest : InstrumentedTest {
// - Check encryptGroupSession() returns stg
val keyBackupData = keysBackup.encryptGroupSession(session)
assertNotNull(keyBackupData)
assertNotNull(keyBackupData.sessionData)
assertNotNull(keyBackupData!!.sessionData)
// - Check pkDecryptionFromRecoveryKey() is able to create a OlmPkDecryption
val decryption = keysBackup.pkDecryptionFromRecoveryKey(keyBackupCreationInfo.recoveryKey)
assertNotNull(decryption)
// - Check decryptKeyBackupData() returns stg
val sessionData = keysBackup
.decryptKeyBackupData(keyBackupData,
.decryptKeyBackupData(keyBackupData!!,
session.olmInboundGroupSession!!.sessionIdentifier(),
cryptoTestData.roomId,
decryption!!)

View file

@ -25,6 +25,8 @@ import org.junit.Test
import org.junit.runner.RunWith
import org.junit.runners.MethodSorters
import org.matrix.android.sdk.InstrumentedTest
import org.matrix.android.sdk.internal.session.room.send.pills.MentionLinkSpecComparator
import org.matrix.android.sdk.internal.session.room.send.pills.TextPillsUtils
/**
* It will not be possible to test all combinations. For the moment I add a few tests, then, depending on the problem discovered in the wild,
@ -45,7 +47,8 @@ class MarkdownParserTest : InstrumentedTest {
*/
private val markdownParser = MarkdownParser(
Parser.builder().build(),
HtmlRenderer.builder().build()
HtmlRenderer.builder().softbreak("<br />").build(),
TextPillsUtils(MentionLinkSpecComparator())
)
@Test
@ -144,12 +147,14 @@ class MarkdownParserTest : InstrumentedTest {
)
}
// TODO. Improve testTypeNewLines function to cover <pre><code class="language-code">test</code></pre>
@Test
fun parseCodeNewLines() {
fun parseCodeNewLines_not_passing() {
testTypeNewLines(
name = "code",
markdownPattern = "`",
htmlExpectedTag = "code"
markdownPattern = "```",
htmlExpectedTag = "code",
softBreak = "\n"
)
}
@ -163,7 +168,7 @@ class MarkdownParserTest : InstrumentedTest {
}
@Test
fun parseCode2NewLines() {
fun parseCode2NewLines_not_passing() {
testTypeNewLines(
name = "code",
markdownPattern = "``",
@ -181,7 +186,7 @@ class MarkdownParserTest : InstrumentedTest {
}
@Test
fun parseCode3NewLines() {
fun parseCode3NewLines_not_passing() {
testTypeNewLines(
name = "code",
markdownPattern = "```",
@ -243,7 +248,7 @@ class MarkdownParserTest : InstrumentedTest {
}
@Test
fun parseBoldNewLines_not_passing() {
fun parseBoldNewLines2() {
"**bold**\nline2".let { markdownParser.parse(it).expect(it, "<strong>bold</strong><br />line2") }
}
@ -334,13 +339,14 @@ class MarkdownParserTest : InstrumentedTest {
private fun testTypeNewLines(name: String,
markdownPattern: String,
htmlExpectedTag: String) {
htmlExpectedTag: String,
softBreak: String = "<br />") {
// With new line inside the block
"$markdownPattern$name\n$name$markdownPattern"
.let {
markdownParser.parse(it)
.expect(expectedText = it,
expectedFormattedText = "<$htmlExpectedTag>$name<br />$name</$htmlExpectedTag>")
expectedFormattedText = "<$htmlExpectedTag>$name$softBreak$name</$htmlExpectedTag>")
}
// With new line between two blocks
@ -348,7 +354,7 @@ class MarkdownParserTest : InstrumentedTest {
.let {
markdownParser.parse(it)
.expect(expectedText = it,
expectedFormattedText = "<$htmlExpectedTag>$name</$htmlExpectedTag><$htmlExpectedTag>$name</$htmlExpectedTag>")
expectedFormattedText = "<$htmlExpectedTag>$name</$htmlExpectedTag><br /><$htmlExpectedTag>$name</$htmlExpectedTag>")
}
}

View file

@ -30,7 +30,6 @@ import org.matrix.android.sdk.api.listeners.StepProgressListener
import org.matrix.android.sdk.api.session.crypto.keysbackup.KeysBackupService
import org.matrix.android.sdk.api.session.crypto.keysbackup.KeysBackupState
import org.matrix.android.sdk.api.session.crypto.keysbackup.KeysBackupStateListener
import org.matrix.android.sdk.api.util.JsonDict
import org.matrix.android.sdk.internal.crypto.MXCRYPTO_ALGORITHM_MEGOLM_BACKUP
import org.matrix.android.sdk.internal.crypto.MXOlmDevice
import org.matrix.android.sdk.internal.crypto.MegolmSessionData
@ -85,6 +84,7 @@ import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.delay
import kotlinx.coroutines.launch
import kotlinx.coroutines.withContext
import org.matrix.android.sdk.internal.crypto.keysbackup.model.SignalableMegolmBackupAuthData
import org.matrix.olm.OlmException
import org.matrix.olm.OlmPkDecryption
import org.matrix.olm.OlmPkEncryption
@ -170,7 +170,7 @@ internal class DefaultKeysBackupService @Inject constructor(
runCatching {
withContext(coroutineDispatchers.crypto) {
val olmPkDecryption = OlmPkDecryption()
val megolmBackupAuthData = if (password != null) {
val signalableMegolmBackupAuthData = if (password != null) {
// Generate a private key from the password
val backgroundProgressListener = if (progressListener == null) {
null
@ -189,7 +189,7 @@ internal class DefaultKeysBackupService @Inject constructor(
}
val generatePrivateKeyResult = generatePrivateKeyWithPassword(password, backgroundProgressListener)
MegolmBackupAuthData(
SignalableMegolmBackupAuthData(
publicKey = olmPkDecryption.setPrivateKey(generatePrivateKeyResult.privateKey),
privateKeySalt = generatePrivateKeyResult.salt,
privateKeyIterations = generatePrivateKeyResult.iterations
@ -197,14 +197,17 @@ internal class DefaultKeysBackupService @Inject constructor(
} else {
val publicKey = olmPkDecryption.generateKey()
MegolmBackupAuthData(
SignalableMegolmBackupAuthData(
publicKey = publicKey
)
}
val canonicalJson = JsonCanonicalizer.getCanonicalJson(Map::class.java, megolmBackupAuthData.signalableJSONDictionary())
val canonicalJson = JsonCanonicalizer.getCanonicalJson(Map::class.java, signalableMegolmBackupAuthData.signalableJSONDictionary())
val signedMegolmBackupAuthData = megolmBackupAuthData.copy(
val signedMegolmBackupAuthData = MegolmBackupAuthData(
publicKey = signalableMegolmBackupAuthData.publicKey,
privateKeySalt = signalableMegolmBackupAuthData.privateKeySalt,
privateKeyIterations = signalableMegolmBackupAuthData.privateKeyIterations,
signatures = objectSigner.signObject(canonicalJson)
)
@ -223,8 +226,7 @@ internal class DefaultKeysBackupService @Inject constructor(
@Suppress("UNCHECKED_CAST")
val createKeysBackupVersionBody = CreateKeysBackupVersionBody(
algorithm = keysBackupCreationInfo.algorithm,
authData = MoshiProvider.providesMoshi().adapter(Map::class.java)
.fromJson(keysBackupCreationInfo.authData?.toJsonString() ?: "") as JsonDict?
authData = keysBackupCreationInfo.authData.toJsonDict()
)
keysBackupStateManager.state = KeysBackupState.Enabling
@ -245,7 +247,7 @@ internal class DefaultKeysBackupService @Inject constructor(
version = data.version,
// We can consider that the server does not have keys yet
count = 0,
hash = null
hash = ""
)
enableKeysBackup(keyBackupVersion)
@ -267,7 +269,7 @@ internal class DefaultKeysBackupService @Inject constructor(
withContext(coroutineDispatchers.crypto) {
// If we're currently backing up to this backup... stop.
// (We start using it automatically in createKeysBackupVersion so this is symmetrical).
if (keysBackupVersion != null && version == keysBackupVersion!!.version) {
if (keysBackupVersion != null && version == keysBackupVersion?.version) {
resetKeysBackupData()
keysBackupVersion = null
keysBackupStateManager.state = KeysBackupState.Unknown
@ -408,10 +410,7 @@ internal class DefaultKeysBackupService @Inject constructor(
val keysBackupVersionTrust = KeysBackupVersionTrust()
val authData = keysBackupVersion.getAuthDataAsMegolmBackupAuthData()
if (keysBackupVersion.algorithm == null
|| authData == null
|| authData.publicKey.isEmpty()
|| authData.signatures.isNullOrEmpty()) {
if (authData == null || authData.publicKey.isEmpty() || authData.signatures.isEmpty()) {
Timber.v("getKeysBackupTrust: Key backup is absent or missing required data")
return keysBackupVersionTrust
}
@ -479,7 +478,7 @@ internal class DefaultKeysBackupService @Inject constructor(
cryptoCoroutineScope.launch(coroutineDispatchers.main) {
val updateKeysBackupVersionBody = withContext(coroutineDispatchers.crypto) {
// Get current signatures, or create an empty set
val myUserSignatures = authData.signatures?.get(userId)?.toMutableMap() ?: HashMap()
val myUserSignatures = authData.signatures[userId].orEmpty().toMutableMap()
if (trust) {
// Add current device signature
@ -498,26 +497,23 @@ internal class DefaultKeysBackupService @Inject constructor(
// Create an updated version of KeysVersionResult
val newMegolmBackupAuthData = authData.copy()
val newSignatures = newMegolmBackupAuthData.signatures!!.toMutableMap()
val newSignatures = newMegolmBackupAuthData.signatures.toMutableMap()
newSignatures[userId] = myUserSignatures
val newMegolmBackupAuthDataWithNewSignature = newMegolmBackupAuthData.copy(
signatures = newSignatures
)
val moshi = MoshiProvider.providesMoshi()
val adapter = moshi.adapter(Map::class.java)
@Suppress("UNCHECKED_CAST")
UpdateKeysBackupVersionBody(
algorithm = keysBackupVersion.algorithm,
authData = adapter.fromJson(newMegolmBackupAuthDataWithNewSignature.toJsonString()) as Map<String, Any>?,
version = keysBackupVersion.version!!)
authData = newMegolmBackupAuthDataWithNewSignature.toJsonDict(),
version = keysBackupVersion.version)
}
// And send it to the homeserver
updateKeysBackupVersionTask
.configureWith(UpdateKeysBackupVersionTask.Params(keysBackupVersion.version!!, updateKeysBackupVersionBody)) {
.configureWith(UpdateKeysBackupVersionTask.Params(keysBackupVersion.version, updateKeysBackupVersionBody)) {
this.callback = object : MatrixCallback<Unit> {
override fun onSuccess(data: Unit) {
// Relaunch the state machine on this updated backup version
@ -688,7 +684,7 @@ internal class DefaultKeysBackupService @Inject constructor(
stepProgressListener?.onStepProgress(StepProgressListener.Step.DownloadingKey)
// Get backed up keys from the homeserver
val data = getKeys(sessionId, roomId, keysVersionResult.version!!)
val data = getKeys(sessionId, roomId, keysVersionResult.version)
withContext(coroutineDispatchers.computation) {
val sessionsData = ArrayList<MegolmSessionData>()
@ -1023,19 +1019,10 @@ internal class DefaultKeysBackupService @Inject constructor(
* @return the authentication if found and valid, null in other case
*/
private fun getMegolmBackupAuthData(keysBackupData: KeysVersionResult): MegolmBackupAuthData? {
if (keysBackupData.version.isNullOrBlank()
|| keysBackupData.algorithm != MXCRYPTO_ALGORITHM_MEGOLM_BACKUP
|| keysBackupData.authData == null) {
return null
}
val authData = keysBackupData.getAuthDataAsMegolmBackupAuthData()
if (authData?.signatures == null || authData.publicKey.isBlank()) {
return null
}
return authData
return keysBackupData
.takeIf { it.version.isNotEmpty() && it.algorithm == MXCRYPTO_ALGORITHM_MEGOLM_BACKUP }
?.getAuthDataAsMegolmBackupAuthData()
?.takeIf { it.publicKey.isNotEmpty() }
}
/**
@ -1123,34 +1110,29 @@ internal class DefaultKeysBackupService @Inject constructor(
* @param keysVersionResult backup information object as returned by [getCurrentVersion].
*/
private fun enableKeysBackup(keysVersionResult: KeysVersionResult) {
if (keysVersionResult.authData != null) {
val retrievedMegolmBackupAuthData = keysVersionResult.getAuthDataAsMegolmBackupAuthData()
val retrievedMegolmBackupAuthData = keysVersionResult.getAuthDataAsMegolmBackupAuthData()
if (retrievedMegolmBackupAuthData != null) {
keysBackupVersion = keysVersionResult
cryptoCoroutineScope.launch(coroutineDispatchers.crypto) {
cryptoStore.setKeyBackupVersion(keysVersionResult.version)
}
onServerDataRetrieved(keysVersionResult.count, keysVersionResult.hash)
try {
backupOlmPkEncryption = OlmPkEncryption().apply {
setRecipientKey(retrievedMegolmBackupAuthData.publicKey)
}
} catch (e: OlmException) {
Timber.e(e, "OlmException")
keysBackupStateManager.state = KeysBackupState.Disabled
return
}
keysBackupStateManager.state = KeysBackupState.ReadyToBackUp
maybeBackupKeys()
} else {
Timber.e("Invalid authentication data")
keysBackupStateManager.state = KeysBackupState.Disabled
if (retrievedMegolmBackupAuthData != null) {
keysBackupVersion = keysVersionResult
cryptoCoroutineScope.launch(coroutineDispatchers.crypto) {
cryptoStore.setKeyBackupVersion(keysVersionResult.version)
}
onServerDataRetrieved(keysVersionResult.count, keysVersionResult.hash)
try {
backupOlmPkEncryption = OlmPkEncryption().apply {
setRecipientKey(retrievedMegolmBackupAuthData.publicKey)
}
} catch (e: OlmException) {
Timber.e(e, "OlmException")
keysBackupStateManager.state = KeysBackupState.Disabled
return
}
keysBackupStateManager.state = KeysBackupState.ReadyToBackUp
maybeBackupKeys()
} else {
Timber.e("Invalid authentication data")
keysBackupStateManager.state = KeysBackupState.Disabled
@ -1160,11 +1142,11 @@ internal class DefaultKeysBackupService @Inject constructor(
/**
* Update the DB with data fetch from the server
*/
private fun onServerDataRetrieved(count: Int?, hash: String?) {
private fun onServerDataRetrieved(count: Int?, etag: String?) {
cryptoStore.setKeysBackupData(KeysBackupDataEntity()
.apply {
backupLastServerNumberOfKeys = count
backupLastServerHash = hash
backupLastServerHash = etag
}
)
}
@ -1179,6 +1161,7 @@ internal class DefaultKeysBackupService @Inject constructor(
cryptoStore.setKeyBackupVersion(null)
cryptoStore.setKeysBackupData(null)
backupOlmPkEncryption?.releaseEncryption()
backupOlmPkEncryption = null
// Reset backup markers
@ -1229,22 +1212,19 @@ internal class DefaultKeysBackupService @Inject constructor(
// Gather data to send to the homeserver
// roomId -> sessionId -> MXKeyBackupData
val keysBackupData = KeysBackupData(
roomIdToRoomKeysBackupData = HashMap()
)
val keysBackupData = KeysBackupData()
for (olmInboundGroupSessionWrapper in olmInboundGroupSessionWrappers) {
val keyBackupData = encryptGroupSession(olmInboundGroupSessionWrapper)
if (keysBackupData.roomIdToRoomKeysBackupData[olmInboundGroupSessionWrapper.roomId] == null) {
val roomKeysBackupData = RoomKeysBackupData(
sessionIdToKeyBackupData = HashMap()
)
keysBackupData.roomIdToRoomKeysBackupData[olmInboundGroupSessionWrapper.roomId!!] = roomKeysBackupData
}
olmInboundGroupSessionWrappers.forEach { olmInboundGroupSessionWrapper ->
val roomId = olmInboundGroupSessionWrapper.roomId ?: return@forEach
val olmInboundGroupSession = olmInboundGroupSessionWrapper.olmInboundGroupSession ?: return@forEach
try {
keysBackupData.roomIdToRoomKeysBackupData[olmInboundGroupSessionWrapper.roomId]!!
.sessionIdToKeyBackupData[olmInboundGroupSessionWrapper.olmInboundGroupSession!!.sessionIdentifier()] = keyBackupData
encryptGroupSession(olmInboundGroupSessionWrapper)
?.let {
keysBackupData.roomIdToRoomKeysBackupData
.getOrPut(roomId) { RoomKeysBackupData() }
.sessionIdToKeyBackupData[olmInboundGroupSession.sessionIdentifier()] = it
}
} catch (e: OlmException) {
Timber.e(e, "OlmException")
}
@ -1252,71 +1232,71 @@ internal class DefaultKeysBackupService @Inject constructor(
Timber.v("backupKeys: 4 - Sending request")
val sendingRequestCallback = object : MatrixCallback<BackupKeysResult> {
override fun onSuccess(data: BackupKeysResult) {
uiHandler.post {
Timber.v("backupKeys: 5a - Request complete")
// Make the request
val version = keysBackupVersion?.version ?: return@withContext
// Mark keys as backed up
cryptoStore.markBackupDoneForInboundGroupSessions(olmInboundGroupSessionWrappers)
storeSessionDataTask
.configureWith(StoreSessionsDataTask.Params(version, keysBackupData)) {
this.callback = object : MatrixCallback<BackupKeysResult> {
override fun onSuccess(data: BackupKeysResult) {
uiHandler.post {
Timber.v("backupKeys: 5a - Request complete")
if (olmInboundGroupSessionWrappers.size < KEY_BACKUP_SEND_KEYS_MAX_COUNT) {
Timber.v("backupKeys: All keys have been backed up")
onServerDataRetrieved(data.count, data.hash)
// Mark keys as backed up
cryptoStore.markBackupDoneForInboundGroupSessions(olmInboundGroupSessionWrappers)
// Note: Changing state will trigger the call to backupAllGroupSessionsCallback.onSuccess()
keysBackupStateManager.state = KeysBackupState.ReadyToBackUp
} else {
Timber.v("backupKeys: Continue to back up keys")
keysBackupStateManager.state = KeysBackupState.WillBackUp
if (olmInboundGroupSessionWrappers.size < KEY_BACKUP_SEND_KEYS_MAX_COUNT) {
Timber.v("backupKeys: All keys have been backed up")
onServerDataRetrieved(data.count, data.hash)
backupKeys()
}
}
}
// Note: Changing state will trigger the call to backupAllGroupSessionsCallback.onSuccess()
keysBackupStateManager.state = KeysBackupState.ReadyToBackUp
} else {
Timber.v("backupKeys: Continue to back up keys")
keysBackupStateManager.state = KeysBackupState.WillBackUp
override fun onFailure(failure: Throwable) {
if (failure is Failure.ServerError) {
uiHandler.post {
Timber.e(failure, "backupKeys: backupKeys failed.")
when (failure.error.code) {
MatrixError.M_NOT_FOUND,
MatrixError.M_WRONG_ROOM_KEYS_VERSION -> {
// Backup has been deleted on the server, or we are not using the last backup version
keysBackupStateManager.state = KeysBackupState.WrongBackUpVersion
backupAllGroupSessionsCallback?.onFailure(failure)
resetBackupAllGroupSessionsListeners()
resetKeysBackupData()
keysBackupVersion = null
// Do not stay in KeysBackupState.WrongBackUpVersion but check what is available on the homeserver
checkAndStartKeysBackup()
backupKeys()
}
}
}
override fun onFailure(failure: Throwable) {
if (failure is Failure.ServerError) {
uiHandler.post {
Timber.e(failure, "backupKeys: backupKeys failed.")
when (failure.error.code) {
MatrixError.M_NOT_FOUND,
MatrixError.M_WRONG_ROOM_KEYS_VERSION -> {
// Backup has been deleted on the server, or we are not using the last backup version
keysBackupStateManager.state = KeysBackupState.WrongBackUpVersion
backupAllGroupSessionsCallback?.onFailure(failure)
resetBackupAllGroupSessionsListeners()
resetKeysBackupData()
keysBackupVersion = null
// Do not stay in KeysBackupState.WrongBackUpVersion but check what is available on the homeserver
checkAndStartKeysBackup()
}
else ->
// Come back to the ready state so that we will retry on the next received key
keysBackupStateManager.state = KeysBackupState.ReadyToBackUp
}
}
} else {
uiHandler.post {
backupAllGroupSessionsCallback?.onFailure(failure)
resetBackupAllGroupSessionsListeners()
Timber.e("backupKeys: backupKeys failed.")
// Retry a bit later
keysBackupStateManager.state = KeysBackupState.ReadyToBackUp
maybeBackupKeys()
}
}
else ->
// Come back to the ready state so that we will retry on the next received key
keysBackupStateManager.state = KeysBackupState.ReadyToBackUp
}
}
} else {
uiHandler.post {
backupAllGroupSessionsCallback?.onFailure(failure)
resetBackupAllGroupSessionsListeners()
Timber.e("backupKeys: backupKeys failed.")
// Retry a bit later
keysBackupStateManager.state = KeysBackupState.ReadyToBackUp
maybeBackupKeys()
}
}
}
}
// Make the request
storeSessionDataTask
.configureWith(StoreSessionsDataTask.Params(keysBackupVersion!!.version!!, keysBackupData)) {
this.callback = sendingRequestCallback
}
.executeBy(taskExecutor)
}
@ -1325,47 +1305,45 @@ internal class DefaultKeysBackupService @Inject constructor(
@VisibleForTesting
@WorkerThread
fun encryptGroupSession(olmInboundGroupSessionWrapper: OlmInboundGroupSessionWrapper2): KeyBackupData {
fun encryptGroupSession(olmInboundGroupSessionWrapper: OlmInboundGroupSessionWrapper2): KeyBackupData? {
// Gather information for each key
val device = cryptoStore.deviceWithIdentityKey(olmInboundGroupSessionWrapper.senderKey!!)
val device = olmInboundGroupSessionWrapper.senderKey?.let { cryptoStore.deviceWithIdentityKey(it) }
// Build the m.megolm_backup.v1.curve25519-aes-sha2 data as defined at
// https://github.com/uhoreg/matrix-doc/blob/e2e_backup/proposals/1219-storing-megolm-keys-serverside.md#mmegolm_backupv1curve25519-aes-sha2-key-format
val sessionData = olmInboundGroupSessionWrapper.exportKeys()
val sessionData = olmInboundGroupSessionWrapper.exportKeys() ?: return null
val sessionBackupData = mapOf(
"algorithm" to sessionData!!.algorithm,
"algorithm" to sessionData.algorithm,
"sender_key" to sessionData.senderKey,
"sender_claimed_keys" to sessionData.senderClaimedKeys,
"forwarding_curve25519_key_chain" to (sessionData.forwardingCurve25519KeyChain
?: ArrayList<Any>()),
"forwarding_curve25519_key_chain" to (sessionData.forwardingCurve25519KeyChain.orEmpty()),
"session_key" to sessionData.sessionKey)
var encryptedSessionBackupData: OlmPkMessage? = null
val json = MoshiProvider.providesMoshi()
.adapter(Map::class.java)
.toJson(sessionBackupData)
val moshi = MoshiProvider.providesMoshi()
val adapter = moshi.adapter(Map::class.java)
try {
val json = adapter.toJson(sessionBackupData)
encryptedSessionBackupData = backupOlmPkEncryption?.encrypt(json)
val encryptedSessionBackupData = try {
backupOlmPkEncryption?.encrypt(json)
} catch (e: OlmException) {
Timber.e(e, "OlmException")
null
}
?: return null
// Build backup data for that key
return KeyBackupData(
firstMessageIndex = try {
olmInboundGroupSessionWrapper.olmInboundGroupSession!!.firstKnownIndex
olmInboundGroupSessionWrapper.olmInboundGroupSession?.firstKnownIndex ?: 0
} catch (e: OlmException) {
Timber.e(e, "OlmException")
0L
},
forwardedCount = olmInboundGroupSessionWrapper.forwardingCurve25519KeyChain!!.size,
forwardedCount = olmInboundGroupSessionWrapper.forwardingCurve25519KeyChain.orEmpty().size,
isVerified = device?.isVerified == true,
sessionData = mapOf(
"ciphertext" to encryptedSessionBackupData!!.mCipherText,
"ciphertext" to encryptedSessionBackupData.mCipherText,
"mac" to encryptedSessionBackupData.mMac,
"ephemeral" to encryptedSessionBackupData.mEphemeralKey)
)
@ -1378,9 +1356,9 @@ internal class DefaultKeysBackupService @Inject constructor(
val jsonObject = keyBackupData.sessionData
val ciphertext = jsonObject?.get("ciphertext")?.toString()
val mac = jsonObject?.get("mac")?.toString()
val ephemeralKey = jsonObject?.get("ephemeral")?.toString()
val ciphertext = jsonObject["ciphertext"]?.toString()
val mac = jsonObject["mac"]?.toString()
val ephemeralKey = jsonObject["ephemeral"]?.toString()
if (ciphertext != null && mac != null && ephemeralKey != null) {
val encrypted = OlmPkMessage()
@ -1425,8 +1403,7 @@ internal class DefaultKeysBackupService @Inject constructor(
@Suppress("UNCHECKED_CAST")
val createKeysBackupVersionBody = CreateKeysBackupVersionBody(
algorithm = keysBackupCreationInfo.algorithm,
authData = MoshiProvider.providesMoshi().adapter(Map::class.java)
.fromJson(keysBackupCreationInfo.authData?.toJsonString() ?: "") as JsonDict?
authData = keysBackupCreationInfo.authData.toJsonDict()
)
createKeysBackupVersionTask

View file

@ -35,7 +35,7 @@ import retrofit2.http.Path
import retrofit2.http.Query
/**
* Ref: https://github.com/uhoreg/matrix-doc/blob/e2e_backup/proposals/1219-storing-megolm-keys-serverside.md
* Ref: https://matrix.org/docs/spec/client_server/unstable#server-side-key-backups
*/
internal interface RoomKeysApi {

View file

@ -18,6 +18,7 @@ package org.matrix.android.sdk.internal.crypto.keysbackup.model
import com.squareup.moshi.Json
import com.squareup.moshi.JsonClass
import org.matrix.android.sdk.api.util.JsonDict
import org.matrix.android.sdk.internal.di.MoshiProvider
/**
@ -30,7 +31,7 @@ data class MegolmBackupAuthData(
* The curve25519 public key used to encrypt the backups.
*/
@Json(name = "public_key")
val publicKey: String = "",
val publicKey: String,
/**
* In case of a backup created from a password, the salt associated with the backup
@ -50,20 +51,38 @@ data class MegolmBackupAuthData(
* userId -> (deviceSignKeyId -> signature)
*/
@Json(name = "signatures")
val signatures: Map<String, Map<String, String>>? = null
val signatures: Map<String, Map<String, String>>
) {
fun toJsonString(): String {
return MoshiProvider.providesMoshi()
fun toJsonDict(): JsonDict {
val moshi = MoshiProvider.providesMoshi()
val adapter = moshi.adapter(Map::class.java)
return moshi
.adapter(MegolmBackupAuthData::class.java)
.toJson(this)
.let {
@Suppress("UNCHECKED_CAST")
adapter.fromJson(it) as JsonDict
}
}
/**
* Same as the parent [MXJSONModel JSONDictionary] but return only
* data that must be signed.
*/
fun signalableJSONDictionary(): Map<String, Any> = HashMap<String, Any>().apply {
fun signalableJSONDictionary(): JsonDict {
return SignalableMegolmBackupAuthData(
publicKey = publicKey,
privateKeySalt = privateKeySalt,
privateKeyIterations = privateKeyIterations
)
.signalableJSONDictionary()
}
}
internal data class SignalableMegolmBackupAuthData(
val publicKey: String,
val privateKeySalt: String? = null,
val privateKeyIterations: Int? = null
) {
fun signalableJSONDictionary(): JsonDict = HashMap<String, Any>().apply {
put("public_key", publicKey)
privateKeySalt?.let {

View file

@ -23,15 +23,15 @@ data class MegolmBackupCreationInfo(
/**
* The algorithm used for storing backups [org.matrix.androidsdk.crypto.MXCRYPTO_ALGORITHM_MEGOLM_BACKUP].
*/
val algorithm: String = "",
val algorithm: String,
/**
* Authentication data.
*/
val authData: MegolmBackupAuthData? = null,
val authData: MegolmBackupAuthData,
/**
* The Base58 recovery key.
*/
val recoveryKey: String = ""
val recoveryKey: String
)

View file

@ -16,15 +16,16 @@
package org.matrix.android.sdk.internal.crypto.keysbackup.model.rest
import com.squareup.moshi.Json
import com.squareup.moshi.JsonClass
@JsonClass(generateAdapter = true)
data class BackupKeysResult(
internal data class BackupKeysResult(
// The hash value which is an opaque string representing stored keys in the backup
var hash: String? = null,
@Json(name = "etag")
val hash: String,
// The number of keys stored in the backup.
var count: Int? = null
@Json(name = "count")
val count: Int
)

View file

@ -21,17 +21,17 @@ import com.squareup.moshi.JsonClass
import org.matrix.android.sdk.api.util.JsonDict
@JsonClass(generateAdapter = true)
data class CreateKeysBackupVersionBody(
internal data class CreateKeysBackupVersionBody(
/**
* The algorithm used for storing backups. Currently, only "m.megolm_backup.v1.curve25519-aes-sha2" is defined
*/
@Json(name = "algorithm")
override val algorithm: String? = null,
override val algorithm: String,
/**
* algorithm-dependent data, for "m.megolm_backup.v1.curve25519-aes-sha2"
* see [org.matrix.android.sdk.internal.crypto.keysbackup.MegolmBackupAuthData]
*/
@Json(name = "auth_data")
override val authData: JsonDict? = null
override val authData: JsonDict
) : KeysAlgorithmAndData

View file

@ -18,7 +18,7 @@ package org.matrix.android.sdk.internal.crypto.keysbackup.model.rest
import com.squareup.moshi.Json
import com.squareup.moshi.JsonClass
import org.matrix.android.sdk.internal.di.MoshiProvider
import org.matrix.android.sdk.api.util.JsonDict
import org.matrix.android.sdk.internal.network.parsing.ForceToBoolean
/**
@ -30,13 +30,13 @@ data class KeyBackupData(
* Required. The index of the first message in the session that the key can decrypt.
*/
@Json(name = "first_message_index")
val firstMessageIndex: Long = 0,
val firstMessageIndex: Long,
/**
* Required. The number of times this key has been forwarded.
*/
@Json(name = "forwarded_count")
val forwardedCount: Int = 0,
val forwardedCount: Int,
/**
* Whether the device backing up the key has verified the device that the key is from.
@ -44,16 +44,11 @@ data class KeyBackupData(
*/
@ForceToBoolean
@Json(name = "is_verified")
val isVerified: Boolean = false,
val isVerified: Boolean,
/**
* Algorithm-dependent data.
*/
@Json(name = "session_data")
val sessionData: Map<String, Any>? = null
) {
fun toJsonString(): String {
return MoshiProvider.providesMoshi().adapter(KeyBackupData::class.java).toJson(this)
}
}
val sessionData: JsonDict
)

View file

@ -17,6 +17,7 @@
package org.matrix.android.sdk.internal.crypto.keysbackup.model.rest
import org.matrix.android.sdk.api.util.JsonDict
import org.matrix.android.sdk.internal.crypto.MXCRYPTO_ALGORITHM_MEGOLM_BACKUP
import org.matrix.android.sdk.internal.crypto.keysbackup.model.MegolmBackupAuthData
import org.matrix.android.sdk.internal.di.MoshiProvider
@ -37,24 +38,25 @@ import org.matrix.android.sdk.internal.di.MoshiProvider
* }
* </pre>
*/
interface KeysAlgorithmAndData {
internal interface KeysAlgorithmAndData {
/**
* The algorithm used for storing backups. Currently, only "m.megolm_backup.v1.curve25519-aes-sha2" is defined
*/
val algorithm: String?
val algorithm: String
/**
* algorithm-dependent data, for "m.megolm_backup.v1.curve25519-aes-sha2" see [org.matrix.android.sdk.internal.crypto.keysbackup.MegolmBackupAuthData]
*/
val authData: JsonDict?
val authData: JsonDict
/**
* Facility method to convert authData to a MegolmBackupAuthData object
*/
fun getAuthDataAsMegolmBackupAuthData(): MegolmBackupAuthData? {
return MoshiProvider.providesMoshi()
.adapter(MegolmBackupAuthData::class.java)
.fromJsonValue(authData)
.takeIf { algorithm == MXCRYPTO_ALGORITHM_MEGOLM_BACKUP }
?.adapter(MegolmBackupAuthData::class.java)
?.fromJsonValue(authData)
}
}

View file

@ -23,5 +23,5 @@ import com.squareup.moshi.JsonClass
data class KeysVersion(
// the keys backup version
@Json(name = "version")
val version: String? = null
val version: String
)

View file

@ -26,24 +26,24 @@ data class KeysVersionResult(
* The algorithm used for storing backups. Currently, only "m.megolm_backup.v1.curve25519-aes-sha2" is defined
*/
@Json(name = "algorithm")
override val algorithm: String? = null,
override val algorithm: String,
/**
* algorithm-dependent data, for "m.megolm_backup.v1.curve25519-aes-sha2"
* see [org.matrix.android.sdk.internal.crypto.keysbackup.MegolmBackupAuthData]
*/
@Json(name = "auth_data")
override val authData: JsonDict? = null,
override val authData: JsonDict,
// the backup version
@Json(name = "version")
val version: String? = null,
val version: String,
// The hash value which is an opaque string representing stored keys in the backup
@Json(name = "hash")
val hash: String? = null,
@Json(name = "etag")
val hash: String,
// The number of keys stored in the backup.
@Json(name = "count")
val count: Int? = null
val count: Int
) : KeysAlgorithmAndData

View file

@ -26,16 +26,16 @@ data class UpdateKeysBackupVersionBody(
* The algorithm used for storing backups. Currently, only "m.megolm_backup.v1.curve25519-aes-sha2" is defined
*/
@Json(name = "algorithm")
override val algorithm: String? = null,
override val algorithm: String,
/**
* algorithm-dependent data, for "m.megolm_backup.v1.curve25519-aes-sha2"
* see [org.matrix.android.sdk.internal.crypto.keysbackup.MegolmBackupAuthData]
*/
@Json(name = "auth_data")
override val authData: JsonDict? = null,
override val authData: JsonDict,
// the backup version, mandatory
// Optional. The backup version. If present, must be the same as the path parameter.
@Json(name = "version")
val version: String
val version: String? = null
) : KeysAlgorithmAndData

View file

@ -48,15 +48,12 @@ class OlmInboundGroupSessionWrapper2 : Serializable {
*/
val firstKnownIndex: Long?
get() {
if (null != olmInboundGroupSession) {
try {
return olmInboundGroupSession!!.firstKnownIndex
} catch (e: Exception) {
Timber.e(e, "## getFirstKnownIndex() : getFirstKnownIndex failed")
}
return try {
olmInboundGroupSession?.firstKnownIndex
} catch (e: Exception) {
Timber.e(e, "## getFirstKnownIndex() : getFirstKnownIndex failed")
null
}
return null
}
/**
@ -90,11 +87,13 @@ class OlmInboundGroupSessionWrapper2 : Serializable {
@Throws(Exception::class)
constructor(megolmSessionData: MegolmSessionData) {
try {
olmInboundGroupSession = OlmInboundGroupSession.importSession(megolmSessionData.sessionKey!!)
if (olmInboundGroupSession!!.sessionIdentifier() != megolmSessionData.sessionId) {
throw Exception("Mismatched group session Id")
}
val safeSessionKey = megolmSessionData.sessionKey ?: throw Exception("invalid data")
olmInboundGroupSession = OlmInboundGroupSession.importSession(safeSessionKey)
.also {
if (it.sessionIdentifier() != megolmSessionData.sessionId) {
throw Exception("Mismatched group session Id")
}
}
senderKey = megolmSessionData.senderKey
keysClaimed = megolmSessionData.senderClaimedKeys
@ -120,16 +119,18 @@ class OlmInboundGroupSessionWrapper2 : Serializable {
return null
}
val wantedIndex = index ?: olmInboundGroupSession!!.firstKnownIndex
val safeOlmInboundGroupSession = olmInboundGroupSession ?: return null
val wantedIndex = index ?: safeOlmInboundGroupSession.firstKnownIndex
MegolmSessionData(
senderClaimedEd25519Key = keysClaimed?.get("ed25519"),
forwardingCurve25519KeyChain = ArrayList(forwardingCurve25519KeyChain!!),
forwardingCurve25519KeyChain = forwardingCurve25519KeyChain?.toList().orEmpty(),
senderKey = senderKey,
senderClaimedKeys = keysClaimed,
roomId = roomId,
sessionId = olmInboundGroupSession!!.sessionIdentifier(),
sessionKey = olmInboundGroupSession!!.export(wantedIndex),
sessionId = safeOlmInboundGroupSession.sessionIdentifier(),
sessionKey = safeOlmInboundGroupSession.export(wantedIndex),
algorithm = MXCRYPTO_ALGORITHM_MEGOLM
)
} catch (e: Exception) {
@ -145,14 +146,11 @@ class OlmInboundGroupSessionWrapper2 : Serializable {
* @return the exported data
*/
fun exportSession(messageIndex: Long): String? {
if (null != olmInboundGroupSession) {
try {
return olmInboundGroupSession!!.export(messageIndex)
} catch (e: Exception) {
Timber.e(e, "## exportSession() : export failed")
}
return try {
return olmInboundGroupSession?.export(messageIndex)
} catch (e: Exception) {
Timber.e(e, "## exportSession() : export failed")
null
}
return null
}
}

View file

@ -101,6 +101,7 @@ internal abstract class RoomModule {
fun providesHtmlRenderer(): HtmlRenderer {
return HtmlRenderer
.builder()
.softbreak("<br />")
.build()
}
}

View file

@ -90,8 +90,7 @@ internal class LocalEchoEventFactory @Inject constructor(
private fun createTextContent(text: CharSequence, autoMarkdown: Boolean): TextContent {
if (autoMarkdown) {
val source = textPillsUtils.processSpecialSpansToMarkdown(text) ?: text.toString()
return markdownParser.parse(source)
return markdownParser.parse(text)
} else {
// Try to detect pills
textPillsUtils.processSpecialSpansToHtml(text)?.let {

View file

@ -18,6 +18,7 @@ package org.matrix.android.sdk.internal.session.room.send
import org.commonmark.parser.Parser
import org.commonmark.renderer.html.HtmlRenderer
import org.matrix.android.sdk.internal.session.room.send.pills.TextPillsUtils
import javax.inject.Inject
/**
@ -27,18 +28,21 @@ import javax.inject.Inject
*/
internal class MarkdownParser @Inject constructor(
private val parser: Parser,
private val htmlRenderer: HtmlRenderer
private val htmlRenderer: HtmlRenderer,
private val textPillsUtils: TextPillsUtils
) {
private val mdSpecialChars = "[`_\\-*>.\\[\\]#~]".toRegex()
fun parse(text: String): TextContent {
fun parse(text: CharSequence): TextContent {
val source = textPillsUtils.processSpecialSpansToMarkdown(text) ?: text.toString()
// If no special char are detected, just return plain text
if (text.contains(mdSpecialChars).not()) {
return TextContent(text)
if (source.contains(mdSpecialChars).not()) {
return TextContent(source)
}
val document = parser.parse(text)
val document = parser.parse(source)
val htmlText = htmlRenderer.render(document)
// Cleanup extra paragraph
@ -48,13 +52,14 @@ internal class MarkdownParser @Inject constructor(
htmlText
}
return if (isFormattedTextPertinent(text, cleanHtmlText)) {
return if (isFormattedTextPertinent(source, cleanHtmlText)) {
// According to https://matrix.org/docs/spec/client_server/latest#m-room-message-msgtypes:
// The plain text version of the HTML should be provided in the body.
// But it caused too many problems so it has been removed in #2002
TextContent(text, cleanHtmlText.postTreatment())
// See #739
TextContent(text.toString(), cleanHtmlText.postTreatment())
} else {
TextContent(text)
TextContent(source)
}
}

View file

@ -154,7 +154,7 @@
<string name="notice_room_ban_with_reason">%1$s vykázali %2$s. Důvod: %3$s</string>
<string name="notice_room_ban_with_reason_by_you">Vykázali jste %1$s. Důvod: %2$s</string>
<string name="notice_room_third_party_invite_with_reason">%1$s poslali %2$s pozvání, aby vstoupili do místnosti. Důvod: %3$s</string>
<string name="notice_room_third_party_invite_with_reason_by_you">"Poslali jste %1$s pozvání, aby vstoupili do místnosti. Důvod: %2$s"</string>
<string name="notice_room_third_party_invite_with_reason_by_you">Poslali jste %1$s pozvání, aby vstoupili do místnosti. Důvod: %2$s</string>
<string name="notice_room_third_party_revoked_invite_with_reason">%1$s zrušili pozvání do místnosti pro %2$s. Důvod: %3$s</string>
<string name="notice_room_third_party_revoked_invite_with_reason_by_you">Zrušili jste pozvání do místnosti pro %1$s. Důvod: %2$s</string>
<string name="notice_room_third_party_registered_invite_with_reason">%1$s přijali pozvání pro %2$s. Důvod: %3$s</string>
@ -187,7 +187,7 @@
<string name="notice_room_canonical_alias_set_by_you">Nastavili jste %1$s na hlavní adresu této místnosti.</string>
<string name="notice_room_canonical_alias_unset">%1$s odstranili hlavní adresu této místnosti.</string>
<string name="notice_room_canonical_alias_unset_by_you">Odstranili jste hlavní adresu této místnosti.</string>
<string name="notice_room_guest_access_can_join">"%1$s povolili hostům vstoupit do místnosti."</string>
<string name="notice_room_guest_access_can_join">%1$s povolili hostům vstoupit do místnosti.</string>
<string name="notice_room_guest_access_can_join_by_you">Povolili jste hostům vstoupit do místnosti.</string>
<string name="notice_room_guest_access_forbidden">%1$s zamezili hostům vstoupit do místnosti.</string>
<string name="notice_room_guest_access_forbidden_by_you">Zamezili jste hostům vstoupit do místnosti.</string>
@ -196,4 +196,26 @@
<string name="notice_end_to_end_unknown_algorithm">%1$s zapnuli end-to-end šifrování (neznámý algoritmus %2$s).</string>
<string name="notice_end_to_end_unknown_algorithm_by_you">Zapnuli jste end-to-end šifrování (neznámý algoritmus %1$s).</string>
<string name="key_verification_request_fallback_message">%s žádá ověření Vašeho klíče, ale Váš klient nepodporuje ověření klíče v chatu. Budete muset k ověření klíčů použít zastaralý způsob ověření.</string>
<string name="notice_direct_room_guest_access_forbidden_by_you">Zamezili jste hostům vstoupit do této místnosti.</string>
<string name="notice_direct_room_guest_access_forbidden">%1$s zamezil hostům vstoupit do této místnosti.</string>
<string name="notice_direct_room_guest_access_can_join_by_you">Povolili jste hostům vstoupit.</string>
<string name="notice_direct_room_guest_access_can_join">%1$s povolil hostům vstoupit.</string>
<string name="notice_direct_room_leave_with_reason_by_you">Odešli jste. Důvod: %1$s</string>
<string name="notice_direct_room_leave_with_reason">%1$s odešli. Důvod: %2$s</string>
<string name="notice_direct_room_join_with_reason_by_you">Vstoupili jste. Důvod: %1$s</string>
<string name="notice_direct_room_join_with_reason">%1$s vstoupili. Důvod: %2$s</string>
<string name="notice_direct_room_third_party_revoked_invite_by_you">Vy jste zrušili pozvání pro %1$s</string>
<string name="notice_direct_room_third_party_revoked_invite">%1$s zrušili pozvání pro %2$s</string>
<string name="notice_direct_room_third_party_invite_by_you">Vy jste pozvali %1$s</string>
<string name="notice_direct_room_third_party_invite">%1$s pozvali %2$s</string>
<string name="notice_direct_room_update_by_you">Vy jste tady provedli upgrade.</string>
<string name="notice_direct_room_update">%s tady provedli upgrade.</string>
<string name="notice_made_future_direct_room_visibility_by_you">Učinili jste budoucí zprávy viditelné pro %1$s</string>
<string name="notice_made_future_direct_room_visibility">%1$s učinili budoucí zprávy viditelné pro %2$s</string>
<string name="notice_direct_room_leave_by_you">Odešli jste z místnosti</string>
<string name="notice_direct_room_leave">%1$s odešli z místnosti</string>
<string name="notice_direct_room_join_by_you">Vstoupili jste</string>
<string name="notice_direct_room_join">%1$s vstoupili</string>
<string name="notice_direct_room_created_by_you">Založili jste diskusi</string>
<string name="notice_direct_room_created">%1$s založil diskusi</string>
</resources>

View file

@ -1,8 +1,7 @@
<?xml version='1.0' encoding='UTF-8'?>
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="summary_message">%1$s: %2$s</string>
<string name="summary_user_sent_image">%1$s küldött egy képet.</string>
<string name="notice_room_invite_no_invitee">%s meghívója</string>
<string name="notice_room_invite">%1$s meghívta: %2$s</string>
<string name="notice_room_invite_you">%1$s meghívott</string>
@ -20,7 +19,7 @@
<string name="notice_room_topic_changed">%1$s megváltoztatta a témát erre: %2$s</string>
<string name="notice_room_name_changed">%1$s megváltoztatta a szoba nevét erre: %2$s</string>
<string name="notice_placed_video_call">%s videóhívást kezdeményezett.</string>
<string name="notice_placed_voice_call">%s hanghívást kezdeményezett.</string>
<string name="notice_placed_voice_call">%s hanghívást indított.</string>
<string name="notice_answered_call">%s fogadta a hívást.</string>
<string name="notice_ended_call">%s befejezte a hívást.</string>
<string name="notice_made_future_room_visibility">%1$s láthatóvá tette a jövőbeli előzményeket %2$s számára</string>
@ -30,54 +29,39 @@
<string name="notice_room_visibility_world_readable">bárki.</string>
<string name="notice_room_visibility_unknown">ismeretlen (%s).</string>
<string name="notice_end_to_end">%1$s bekapcsolta a végpontok közötti titkosítást (%2$s)</string>
<string name="notice_requested_voip_conference">%1$s hanghívás konferenciát kérelmezett</string>
<string name="notice_voip_started">Hanghívás konferencia elindult</string>
<string name="notice_voip_finished">Hanghívás konferencia befejeződött</string>
<string name="notice_avatar_changed_too">(a profilkép is megváltozott)</string>
<string name="notice_room_name_removed">%1$s eltávolította a szoba nevét</string>
<string name="notice_room_topic_removed">%1$s eltávolította a szoba témáját</string>
<string name="notice_profile_change_redacted">%1$s megváltoztatta a(z) %2$s profilját</string>
<string name="notice_room_third_party_invite">%1$s meghívót küldött %2$s számára, hogy csatlakozzon a szobához</string>
<string name="notice_room_third_party_registered_invite">%1$s elfogadta a meghívót ebbe: %2$s</string>
<string name="notice_crypto_unable_to_decrypt">** Visszafejtés sikertelen: %s **</string>
<string name="notice_crypto_error_unkwown_inbound_session_id">A küldő eszköze nem küldte el a kulcsokat ehhez az üzenethez.</string>
<string name="could_not_redact">Kitakarás sikertelen</string>
<string name="unable_to_send_message">Üzenet küldése sikertelen</string>
<string name="message_failed_to_upload">Kép feltöltése sikertelen</string>
<string name="network_error">Hálózati hiba</string>
<string name="matrix_error">Matrix hiba</string>
<string name="room_error_join_failed_empty_room">Jelenleg nem lehetséges újracsatlakozni egy üres szobához.</string>
<string name="encrypted_message">Titkosított üzenet</string>
<string name="medium_email">E-mail cím</string>
<string name="medium_phone_number">Telefonszám</string>
<string name="summary_user_sent_sticker">%1$s küldött egy matricát.</string>
<string name="room_displayname_invite_from">Meghívó tőle: %s</string>
<string name="room_displayname_room_invite">Meghívó egy szobába</string>
<string name="room_displayname_two_members">%1$s és %2$s</string>
<string name="room_displayname_empty_room">Üres szoba</string>
<plurals name="room_displayname_three_and_more_members">
<item quantity="one">%1$s és 1 másik</item>
<item quantity="other">%1$s és %2$d másik</item>
</plurals>
<string name="notice_event_redacted">Üzenet eltávolítva</string>
<string name="notice_event_redacted_by">Üzenetet eltávolította: %1$s</string>
<string name="notice_event_redacted_with_reason">Üzenet eltávolítva [ok: %1$s]</string>
<string name="notice_event_redacted_by_with_reason">Üzenetet eltávolította: %1$s [ok: %2$s]</string>
<string name="initial_sync_start_importing_account">Induló szinkronizáció:
\nFiók betöltése…</string>
<string name="initial_sync_start_importing_account_crypto">Induló szinkronizáció:
@ -94,12 +78,9 @@
\nKözösségek betöltése</string>
<string name="initial_sync_start_importing_account_data">Induló szinkronizáció:
\nFiók adatok betöltése</string>
<string name="notice_room_update">%s frissítette ezt a szobát.</string>
<string name="event_status_sending_message">Üzenet küldése…</string>
<string name="clear_timeline_send_queue">Küldő sor ürítése</string>
<string name="notice_room_third_party_revoked_invite">%1$s visszavonta %2$s meghívását, hogy csatlakozzon a szobához</string>
<string name="notice_room_invite_no_invitee_with_reason">%1$s meghívója. Ok: %2$s</string>
<string name="notice_room_invite_with_reason">%1$s meghívta őt: %2$s. Ok: %3$s</string>
@ -114,29 +95,48 @@
<string name="notice_room_third_party_revoked_invite_with_reason">%1$s visszavonta %2$s meghívóját a szobába való belépéshez. Ok: %3$s</string>
<string name="notice_room_third_party_registered_invite_with_reason">%1$s elfogadta a meghívót ide: %2$s. Ok: %3$s</string>
<string name="notice_room_withdraw_with_reason">%1$s visszavonta %2$s meghívóját. Ok: %3$s</string>
<plurals name="notice_room_aliases_added">
<item quantity="one">%1$s ezt a címet adta a szobához: %2$s.</item>
<item quantity="other">%1$s ezeket a címeket adta a szobához: %2$s.</item>
</plurals>
<plurals name="notice_room_aliases_removed">
<item quantity="one">%1$s ezt a címet törölte a szobából: %3$s.</item>
<item quantity="other">%1$s ezeket a címeket törölte a szobából: %3$s.</item>
</plurals>
<string name="notice_room_aliases_added_and_removed">%1$s a szobához adta ezeket:%2$s és törölte ezeket: %3$s.</string>
<string name="notice_room_canonical_alias_set">%1$s a szoba elsődleges címét erre állította be: %2$s.</string>
<string name="notice_room_canonical_alias_unset">%1$s eltávolította a szoba elsődleges címét.</string>
<string name="notice_room_guest_access_can_join">%1$s megengedte a vendégeknek, hogy belépjenek ebbe a szobába.</string>
<string name="notice_room_guest_access_forbidden">%1$s megtiltotta a vendégeknek, hogy belépjenek ebbe a szobába.</string>
<string name="notice_end_to_end_ok">%1$s bekapcsolta a végpontok közötti titkosítást.</string>
<string name="notice_end_to_end_unknown_algorithm">%1$s bekapcsolta a végpontok közötti titkosítást (ismeretlen algoritmus %2$s).</string>
<string name="key_verification_request_fallback_message">%s kéri a kulcsok ellenőrzését de a kliens nem támogatja a szobán belüli kulcs ellenőrzést. A hagyományos módon kell ellenőrizned a kulcsokat.</string>
<string name="notice_room_created">%1$s szobát készített</string>
</resources>
<string name="notice_answered_call_by_you">Fogadtad a hívást.</string>
<string name="notice_ended_call_by_you">Befejezted a hívást.</string>
<string name="notice_call_candidates_by_you">Hívási adatokat küldtél.</string>
<string name="notice_call_candidates">%s hívási adatokat küldött.</string>
<string name="notice_placed_voice_call_by_you">Hanghívást indítottál.</string>
<string name="notice_placed_video_call_by_you">Videóhívást indítottál.</string>
<string name="notice_room_avatar_changed_by_you">Megváltoztattad a szoba képét</string>
<string name="notice_room_avatar_changed">%1$s megváltoztatta a szoba képét</string>
<string name="notice_room_topic_changed_by_you">Megváltoztattad a témát erre: %1$s</string>
<string name="notice_avatar_url_changed_by_you">Megváltoztattad a profilképed</string>
<string name="notice_room_withdraw_by_you">Visszavontad %1$s meghívóját</string>
<string name="notice_room_ban_by_you">Kitiltottad %1$s felhasználót</string>
<string name="notice_room_unban_by_you">Visszaengedted %1$s felhasználót</string>
<string name="notice_room_kick_by_you">Kirúgtad %1$s felhasználót</string>
<string name="notice_room_reject_by_you">Visszautasítottad a meghívót</string>
<string name="notice_direct_room_leave_by_you">Elhagytad a szobát</string>
<string name="notice_direct_room_leave">%1$s elhagyta a szobát</string>
<string name="notice_room_leave_by_you">Elhagytad a szobát</string>
<string name="notice_direct_room_join_by_you">Csatlakoztál</string>
<string name="notice_direct_room_join">%1$s csatlakozott</string>
<string name="notice_room_join_by_you">Beléptél a szobába</string>
<string name="notice_room_invite_by_you">Meghívtad: %1$s</string>
<string name="notice_direct_room_created_by_you">Létrehoztad a beszélgetést</string>
<string name="notice_direct_room_created">%1$s létrehozta a beszélgetést</string>
<string name="notice_room_created_by_you">Létrehoztad a szobát</string>
<string name="summary_you_sent_sticker">Matricát küldtél.</string>
<string name="summary_you_sent_image">Képet küldtél.</string>
</resources>

View file

@ -0,0 +1,68 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<!-- Generated file, do not edit -->
<string name="verification_emoji_dog">Cane</string>
<string name="verification_emoji_cat">Gatto</string>
<string name="verification_emoji_lion">Leone</string>
<string name="verification_emoji_horse">Cavallo</string>
<string name="verification_emoji_unicorn">Unicorno</string>
<string name="verification_emoji_pig">Maiale</string>
<string name="verification_emoji_elephant">Elefante</string>
<string name="verification_emoji_rabbit">Coniglio</string>
<string name="verification_emoji_panda">Panda</string>
<string name="verification_emoji_rooster">Gallo</string>
<string name="verification_emoji_penguin">Pinguino</string>
<string name="verification_emoji_turtle">Tartaruga</string>
<string name="verification_emoji_fish">Pesce</string>
<string name="verification_emoji_octopus">Polpo</string>
<string name="verification_emoji_butterfly">Farfalla</string>
<string name="verification_emoji_flower">Fiore</string>
<string name="verification_emoji_tree">Albero</string>
<string name="verification_emoji_cactus">Cactus</string>
<string name="verification_emoji_mushroom">Fungo</string>
<string name="verification_emoji_globe">Globo</string>
<string name="verification_emoji_moon">Luna</string>
<string name="verification_emoji_cloud">Nuvola</string>
<string name="verification_emoji_fire">Fuoco</string>
<string name="verification_emoji_banana">Banana</string>
<string name="verification_emoji_apple">Mela</string>
<string name="verification_emoji_strawberry">Fragola</string>
<string name="verification_emoji_corn">Mais</string>
<string name="verification_emoji_pizza">Pizza</string>
<string name="verification_emoji_cake">Torta</string>
<string name="verification_emoji_heart">Cuore</string>
<string name="verification_emoji_smiley">Faccina sorridente</string>
<string name="verification_emoji_robot">Robot</string>
<string name="verification_emoji_hat">Cappello</string>
<string name="verification_emoji_glasses">Occhiali</string>
<string name="verification_emoji_spanner">Chiave inglese</string>
<string name="verification_emoji_santa">Babbo Natale</string>
<string name="verification_emoji_thumbs_up">Pollice alzato</string>
<string name="verification_emoji_umbrella">Ombrello</string>
<string name="verification_emoji_hourglass">Clessidra</string>
<string name="verification_emoji_clock">Orologio</string>
<string name="verification_emoji_gift">Regalo</string>
<string name="verification_emoji_light_bulb">Lampadina</string>
<string name="verification_emoji_book">Libro</string>
<string name="verification_emoji_pencil">Matita</string>
<string name="verification_emoji_paperclip">Graffetta</string>
<string name="verification_emoji_scissors">Forbici</string>
<string name="verification_emoji_lock">Lucchetto</string>
<string name="verification_emoji_key">Chiave</string>
<string name="verification_emoji_hammer">Martello</string>
<string name="verification_emoji_telephone">Telefono</string>
<string name="verification_emoji_flag">Bandiera</string>
<string name="verification_emoji_train">Treno</string>
<string name="verification_emoji_bicycle">Bicicletta</string>
<string name="verification_emoji_aeroplane">Aeroplano</string>
<string name="verification_emoji_rocket">Razzo</string>
<string name="verification_emoji_trophy">Trofeo</string>
<string name="verification_emoji_ball">Palla</string>
<string name="verification_emoji_guitar">Chitarra</string>
<string name="verification_emoji_trumpet">Trombetta</string>
<string name="verification_emoji_bell">Campana</string>
<string name="verification_emoji_anchor">Ancora</string>
<string name="verification_emoji_headphones">Cuffie</string>
<string name="verification_emoji_folder">Cartella</string>
<string name="verification_emoji_pin">Puntina</string>
</resources>

View file

@ -191,4 +191,26 @@
<string name="notice_room_guest_access_forbidden_by_you">U keni penguar mysafirëve të vijnë në dhomë.</string>
<string name="notice_end_to_end_ok_by_you">Aktivizuat fshehtëzimin skaj-më-skaj.</string>
<string name="notice_end_to_end_unknown_algorithm_by_you">Aktivizuat fshehtëzimin skaj-më-skaj (algoritëm %1$s i panjohur).</string>
<string name="notice_direct_room_guest_access_forbidden_by_you">Keni penguar të vijnë në dhomë mysafirë.</string>
<string name="notice_direct_room_guest_access_forbidden">%1$s ka penguar të vijnë në dhomë mysafirë.</string>
<string name="notice_direct_room_guest_access_can_join_by_you">Keni lejuar të vijnë mysafirë këtu.</string>
<string name="notice_direct_room_guest_access_can_join">%1$s ka lejuar të vijnë këtu mysafirë.</string>
<string name="notice_direct_room_leave_with_reason_by_you">Dolët. Arsye: %1$s</string>
<string name="notice_direct_room_leave_with_reason">%1$s doli. Arsye: %2$s</string>
<string name="notice_direct_room_join_with_reason_by_you">Erdhët. Arsye: %1$s</string>
<string name="notice_direct_room_join_with_reason">%1$s erdhi. Arsye: %2$s</string>
<string name="notice_direct_room_third_party_revoked_invite_by_you">Shfuqizuat ftesën për %1$s</string>
<string name="notice_direct_room_third_party_revoked_invite">%1$s shfuqizoi ftesën për %2$s</string>
<string name="notice_direct_room_third_party_invite_by_you">Ftuat %1$s</string>
<string name="notice_direct_room_third_party_invite">%1$s ftoi %2$s</string>
<string name="notice_direct_room_update_by_you">U përmirësuat këtu.</string>
<string name="notice_direct_room_update">%s këtu u përmirësua.</string>
<string name="notice_made_future_direct_room_visibility_by_you">I bëtë mesazhet e ardhshëm të dukshëm për %1$s</string>
<string name="notice_made_future_direct_room_visibility">%1$s i bëri mesazhet e ardhshëm të dukshëm për %2$s</string>
<string name="notice_direct_room_leave_by_you">Dolët nga dhoma</string>
<string name="notice_direct_room_leave">%1$s doli nga dhoma</string>
<string name="notice_direct_room_join_by_you">Erdhët</string>
<string name="notice_direct_room_join">%1$s erdhi</string>
<string name="notice_direct_room_created_by_you">Krijuat diskutimin</string>
<string name="notice_direct_room_created">%1$s krijoi diskutimin</string>
</resources>

View file

@ -17,7 +17,7 @@ androidExtensions {
// Note: 2 digits max for each value
ext.versionMajor = 1
ext.versionMinor = 0
ext.versionPatch = 10
ext.versionPatch = 11
static def getGitTimestamp() {
def cmd = 'git show -s --format=%ct'

View file

@ -63,7 +63,6 @@
<activity
android:name=".features.MainActivity"
android:launchMode="singleTask"
android:taskAffinity=""
android:theme="@style/AppTheme.Launcher" />

View file

@ -103,7 +103,7 @@ class BootstrapSharedViewModel @AssistedInject constructor(
} else {
// we need to get existing backup passphrase/key and convert to SSSS
val keyVersion = awaitCallback<KeysVersionResult?> {
session.cryptoService().keysBackupService().getVersion(version.version ?: "", it)
session.cryptoService().keysBackupService().getVersion(version.version, it)
}
if (keyVersion == null) {
// strange case... just finish?

View file

@ -53,7 +53,7 @@
<string name="room_participants_action_set_moderator">Направи модератор</string>
<string name="room_participants_action_set_admin">Направи администратор</string>
<string name="room_participants_power_level_prompt">Няма да можете да възвърнете тази промяна, тъй като повишавате този потребител до същото ниво на достъп като Вашето.
Сигурни ли сте?</string>
\nСигурни ли сте\?</string>
<string name="people_search_local_contacts">ЛОКАЛНИ КОНТАКТИ (%d)</string>
<string name="people_search_user_directory">ДИРЕКТОРИЯ С ПОТРЕБИТЕЛИ (%s)</string>
<string name="room_one_user_is_typing">%s пише…</string>
@ -212,8 +212,8 @@
<string name="auth_reset_password_email_validation_message">Беше изпратен имейл на %s. След като проследите съдържащата се в него връзка, натиснете по-долу.</string>
<string name="auth_reset_password_error_unauthorized">Неуспешно потвърждаване на имейл адреса: уверете се, че сте кликнали върху връзката в имейла</string>
<string name="auth_reset_password_success_message">Вашата парола беше възстановена.
Бяхте изхвърлени от профила Ви на всички устройства и вече няма да получавате известия на тях. За да ги включите отново, влезте в профила си от всяко едно устройство.</string>
\n
\nБяхте изхвърлени от профила Ви на всички устройства и вече няма да получавате известия на тях. За да ги включите отново, влезте в профила си от всяко едно устройство.</string>
<string name="login_error_must_start_http">URL адресът трябва да започва с http[s]://</string>
<string name="login_error_network_error">Неуспешно влизане в профила: Грешка в мрежата</string>
<string name="login_error_unable_login">Неуспешно влизане в профила</string>
@ -223,8 +223,8 @@
<string name="auth_send_reset_email">Изпрати имейл за възстановяване</string>
<string name="auth_return_to_login">Връщане към страницата за влизане в профила</string>
<string name="auth_threepid_warning_message">Регистрация с имейл и телефонен номер наведнъж не се поддържа в момента. Само телефонен номер се взима под внимание.
Можете да добавите имейл към профила си в настройките.</string>
\n
\nМожете да добавите имейл към профила си в настройките.</string>
<string name="login_error_registration_network_error">Неуспешна регистрация: Грешка в мрежата</string>
<string name="login_error_unable_register">Неуспешна регистрация</string>
<string name="login_error_unable_register_mail_ownership">Неуспешна регистрация: неуспешно потвърждаване на собствеността на имейла</string>
@ -260,7 +260,7 @@
<string name="room_participants_action_mention">Спомени</string>
<string name="room_participants_action_devices_list">Покажи списъка с устройства</string>
<string name="room_participants_invite_prompt_msg">Сигурни ли сте, че искате да поканите %s в този чат?</string>
<string name="room_participants_ban_prompt_msg">Сигурни ли сте, че искате да блокирате този потребител в този чат?</string>
<string name="room_participants_ban_prompt_msg">Блокирането на потребител ще го изгони от стаята и няма да му позволи да влезе отново.</string>
<string name="people_search_filter_text">Само потребители на Matrix</string>
<string name="room_many_users_are_typing">%1$s, %2$s и други пишат…</string>
<string name="room_message_placeholder_encrypted">Изпрати шифровано съобщение…</string>
@ -296,9 +296,9 @@
<string name="malformed_id">Грешно формиранo ID. Трябва да бъде имейл адрес или Matrix ID, например \'@localpart:domain\'</string>
<string name="room_details_people_invited_group_name">ПОКАНЕНИ</string>
<string name="room_event_action_report_prompt_reason">Причина за докладване на това съдържание</string>
<string name="room_event_action_report_prompt_ignore_user">Искате ли да скриете всички съобщения от този потребител?
Имайте предвид, че това действие ще рестартира приложението, което може да отнеме известно време.</string>
<string name="room_event_action_report_prompt_ignore_user">Искате ли да скриете всички съобщения от този потребител\?
\n
\nИмайте предвид, че това действие ще рестартира приложението, което може да отнеме известно време.</string>
<string name="room_event_action_cancel_download">Откажи изтеглянето</string>
<string name="room_event_action_cancel_upload">Откажи качването</string>
<string name="search_hint">Търси</string>
@ -390,8 +390,8 @@
<string name="devices_details_device_name">Обнови публичното име</string>
<string name="devices_details_last_seen_title">Последно видян</string>
<string name="devices_details_last_seen_format">%1$s @ %2$s</string>
<string name="devices_delete_dialog_text">Тази операция изискра допълнителна автентикация.
За да продължите, моля, въведете Вашата парола.</string>
<string name="devices_delete_dialog_text">Тази операция изисква допълнително удостоверяване.
\nЗа да продължите, моля, въведете Вашата парола.</string>
<string name="devices_delete_dialog_title">Автентикация</string>
<string name="devices_delete_pswd">Парола:</string>
<string name="devices_delete_submit_button_label">Изпрати</string>
@ -413,9 +413,9 @@
<string name="settings_confirm_password">Потвърди новата парола</string>
<string name="settings_fail_to_update_password">Неуспешно обновяване на паролата</string>
<string name="settings_password_updated">Вашата парола беше обновена</string>
<string name="settings_unignore_user">Показване на всички съобщения от %s?
Имайте предвид, че това действие ще рестартира приложението, което може да отнеме известно време.</string>
<string name="settings_unignore_user">Показване на всички съобщения от %s\?
\n
\nИмайте предвид, че това действие ще рестартира приложението, което може да отнеме известно време.</string>
<string name="settings_delete_threepid_confirmation">Сигурни ли сте, че искате да премахнете %1$s %2$s?</string>
<string name="settings_select_country">Избор на държава</string>
<string name="settings_phone_number_country_label">Държава</string>
@ -478,8 +478,8 @@
<string name="room_settings_copy_room_address">Копирай адреса на стаята</string>
<string name="room_settings_addresses_e2e_enabled">Шифроването е включено в тази стая.</string>
<string name="room_settings_addresses_e2e_disabled">Шифроването е изключено в тази стая.</string>
<string name="room_settings_addresses_e2e_encryption_warning">Включване на шифроване
(не може да се изключи в последствие!)</string>
<string name="room_settings_addresses_e2e_encryption_warning">Включване на шифроване
\n(не може да се изключи в последствие!)</string>
<string name="directory_title">Директория</string>
<string name="settings_theme">Тема</string>
<string name="failed_to_load_timeline_position">%s се опита да зареди конкретна позиция от хронологията на тази стая, но не я намери.</string>
@ -504,9 +504,9 @@
<string name="encryption_export_export">Експортирай</string>
<string name="passphrase_enter_passphrase">Въведи парола</string>
<string name="passphrase_confirm_passphrase">Потвърди парола</string>
<string name="encryption_export_saved_as">E2E ключовете бяха запазени в \'%s\'
Внимание: ако приложението бъде деинсталирано, този файл може да бъде изтрит.</string>
<string name="encryption_export_saved_as">E2E ключовете бяха запазени в \'%s\'.
\n
\nВнимание: ако приложението бъде деинсталирано, този файл може да бъде изтрит.</string>
<string name="encryption_import_e2e_room_keys">Импортирай E2E ключове за стая</string>
<string name="encryption_import_room_keys">Импортиране на ключове за стая</string>
<string name="encryption_import_room_keys_summary">Импортирай ключовете в локален файл</string>
@ -528,10 +528,10 @@
<string name="encryption_information_verify_key_match">Потвърждавам, че ключовете съвпадат</string>
<string name="unknown_devices_alert_title">Стаята съдържа непознати устройства</string>
<string name="unknown_devices_alert_message">Тази стая съдържа непознати устройства, който не са били потвърдени.
Това означава, че няма гаранция, че устройствата принадлежат на потребителите, на който се твърди, че принадлежат.
Препоръчваме Ви да минете през процеса за потвърждение за всяко устройство, за да потвърдите, че принадлежат на легитимен собственик. Ако предпочитате, можете да изпратите съобщението без потвърждение.
Непознати устройства:</string>
\nТова означава, че няма гаранция, че устройствата принадлежат на потребителите, на който се твърди, че принадлежат.
\nПрепоръчваме Ви да минете през процеса за потвърждение за всяко устройство, за да потвърдите, че принадлежат на легитимен собственик. Ако предпочитате, можете да изпратите съобщението без потвърждение.
\n
\nНепознати устройства:</string>
<string name="directory_server_fail_to_retrieve_server">Сървърът може би е недостъпен или претоварен</string>
<string name="directory_server_type_homeserver">Въведете Home сървър, от който да се покажат публични стаи</string>
<string name="directory_server_placeholder">Адрес на Home сървър</string>
@ -561,22 +561,20 @@
<string name="widget_integration_room_not_visible">Стая %s не е видима.</string>
<string name="room_add_matrix_apps">Добави Matrix приложения</string>
<string name="permissions_rationale_msg_storage">Element иска разрешение за достъп до Вашата галерия със снимки и видеа, за да изпраща и запазва прикачени файлове.
Моля, разрешете достъпа от следващия прозорец, който се покаже, за да можете да изпращате файлове от телефона си.</string>
<string name="permissions_rationale_msg_camera">Element иска разшерение за достъп до Вашата камера, за да прави снимки или да осъществи видео разговори.</string>
<string name="permissions_rationale_msg_camera_explanation">
Моля, разрешете достъпа от следващия прозорец, който ще се покаже, за да можете да се обадите.</string>
<string name="permissions_rationale_msg_record_audio">Element иска разшерение за достъп до Вашия микрофон, за да се извърши звуков разговор.</string>
<string name="permissions_rationale_msg_record_audio_explanation">
Моля, разрешете достъпа от следващия прозорец, който ще се покаже, за да можете да се обадите.</string>
<string name="permissions_rationale_msg_camera_and_audio">Element иска разшерение за достъп до микрофона и камерата Ви, за да извърши видео разговор.
Моля, разрешете достъпа от следващия прозорец, който ще се покаже, за да можете да се обадите.</string>
<string name="permissions_rationale_msg_contacts">Element може да провери контактите ви, за да намери други Matrix потребители по имейл или телефонен номер.
\n
\nАко сте съгласни да споделите списъка с контактите си за тази цел, моля разрешете достъп при предстоящото запитване.</string>
\nМоля, разрешете достъпа от следващия прозорец, който се покаже, за да можете да изпращате файлове от телефона си.</string>
<string name="permissions_rationale_msg_camera">Element иска разшерение за достъп до Вашата камера, за да прави снимки или да осъществи видео разговори.</string>
<string name="permissions_rationale_msg_camera_explanation">"
\n
\nМоля, разрешете достъпа от следващия прозорец, който ще се покаже, за да можете да се обадите."</string>
<string name="permissions_rationale_msg_record_audio">Element иска разшерение за достъп до Вашия микрофон, за да се извърши звуков разговор.</string>
<string name="permissions_rationale_msg_record_audio_explanation">"
\n
\nМоля, разрешете достъпа от следващия прозорец, който ще се покаже, за да можете да се обадите."</string>
<string name="permissions_rationale_msg_camera_and_audio">Element иска разширение за достъп до микрофона и камерата Ви, за да извърши видео разговор.
\n
\nМоля, разрешете достъпа от следващия прозорец, който ще се покаже, за да можете да се обадите.</string>
<string name="permissions_rationale_msg_contacts">Element може да провери контактите ви, за да намери други Matrix потребители по имейл или телефонен номер. Ако сте съгласни да споделите списъка с контактите си за тази цел, моля разрешете достъп при предстоящото запитване.</string>
<string name="permissions_msg_contacts_warning_other_androids">Element може да провери контактите ви, за да намери други Matrix потребители по имейл и телефонен номер.
\n
\nРазрешавате ли да се сподели списъка с контакти за тази цел\?</string>
@ -708,8 +706,8 @@
<string name="title_activity_choose_sticker">Изпрати стикер</string>
<string name="option_send_sticker">Изпрати стикер</string>
<string name="no_sticker_application_dialog_content">В момента нямате активирани пакети със стикери.
Добавете сега?</string>
\n
\nДобавете сега\?</string>
<string name="settings_deactivate_account_section">Деактивиране на акаунт</string>
<string name="settings_deactivate_my_account">Деактивирай акаунта ми</string>
<string name="settings_opt_in_of_analytics">Изпращане на статистически данни</string>
@ -722,10 +720,10 @@
<string name="dialog_user_consent_submit">Прегледай сега</string>
<string name="deactivate_account_title">Деактивиране на акаунт</string>
<string name="deactivate_account_content">Това ще направи акаунта Ви неизползваем завинаги. Няма да можете да влезете пак, а регистрирането повторно на същия потребителски идентификатор няма да е възможно. Акаунтът Ви да напусне всички стаи, в които участва. Ще бъдат премахнати и данните за акаунта Ви от сървъра за самоличност. <b>Действието е необратимо.</b>
Деактивирането на акаунта Ви <b>по подразбиране не прави така, че изпратените съобщения да бъдат забравени.</b> Ако искате да забравим съобщенията Ви, моля отбележете с отметка по-долу.
Видимостта на съобщенията в Matrix е подобно на имейл системата. Нашето забравяне означава, че: изпратените от Вас съобщения няма да бъдат споделяни с нови или нерегистрирани потребители, но регистрираните потребители имащи достъп до тях ще продължат да имат достъп до своето копие.</string>
\n
\nДеактивирането на акаунта Ви <b>по подразбиране не прави така, че изпратените съобщения да бъдат забравени.</b> Ако искате да забравим съобщенията Ви, моля отбележете с отметка по-долу.
\n
\nВидимостта на съобщенията в Matrix е подобно на имейл системата. Нашето забравяне означава, че: изпратените от Вас съобщения няма да бъдат споделяни с нови или нерегистрирани потребители, но регистрираните потребители имащи достъп до тях ще продължат да имат достъп до своето копие.</string>
<string name="deactivate_account_delete_checkbox">Моля, забравете всички изпратени от мен съобщения, когато акаунта ми се деактивира (Внимание: това ще направи бъдещите потребители да имат само частичен поглед върху кореспонденцията)</string>
<string name="deactivate_account_prompt_password">За да продължите, моля въведете паролата си:</string>
<string name="deactivate_account_submit">Деактивирай акаунта</string>
@ -866,36 +864,36 @@
<string name="settings_notification_troubleshoot">Диагностика на проблеми с известията</string>
<string name="settings_troubleshoot_test_system_settings_success">Уведомленията са разрешени в системните настройки.</string>
<string name="settings_troubleshoot_test_system_settings_failed">Уведомленията са забранени в системните настройки.
Моля, проверете системните настройки.</string>
\nМоля, проверете системните настройки.</string>
<string name="open_settings">Отвори настройки</string>
<string name="settings_troubleshoot_test_account_settings_title">Настройки на профила.</string>
<string name="settings_troubleshoot_test_account_settings_success">Уведомленията са разрешени за този профил.</string>
<string name="settings_troubleshoot_test_account_settings_failed">Уведомленията са забранени за този профил.
Моля, проверете настройките на профила.</string>
\nМоля, проверете настройките на профила.</string>
<string name="settings_troubleshoot_test_account_settings_quickfix">Разреши</string>
<string name="settings_troubleshoot_test_device_settings_title">Настройки на устройството.</string>
<string name="settings_troubleshoot_test_device_settings_success">Уведомленията са разрешени за това устройство.</string>
<string name="settings_troubleshoot_test_device_settings_failed">Уведомленията са забранени за това устройство.
Моля, проверете настройките на Element.</string>
<string name="settings_troubleshoot_test_device_settings_failed">Уведомленията са забранени за тази сесия.
\nМоля, проверете настройките на Element.</string>
<string name="settings_troubleshoot_test_device_settings_quickfix">Разреши</string>
<string name="settings_troubleshoot_test_play_services_title">Проверка на Google Play услугите</string>
<string name="settings_troubleshoot_test_play_services_success">APK пакет за Google Play услугите е наличен и с актуална версия.</string>
<string name="settings_troubleshoot_test_play_services_failed">Element използва Google Play услугите за да доставя известия за съобщения, но изглежда те не са конфигурирани правилно:
%1$s</string>
\n%1$s</string>
<string name="settings_troubleshoot_test_play_services_quickfix">Поправи Google Play услугите</string>
<string name="settings_troubleshoot_test_fcm_title">Firebase токен</string>
<string name="settings_troubleshoot_test_fcm_success">Успешно получаване на FCM токен:
%1$s</string>
\n%1$s</string>
<string name="settings_troubleshoot_test_fcm_failed">Неуспешно получаване на FCM токен:
%1$s</string>
\n%1$s</string>
<string name="settings_troubleshoot_test_token_registration_title">Токен регистрация</string>
<string name="settings_troubleshoot_test_token_registration_success">FCM токенът беше успешно регистриран със сървъра.</string>
<string name="settings_troubleshoot_test_token_registration_failed">Неуспешна регистрация на FCM токена със сървъра:
%1$s</string>
\n%1$s</string>
<string name="settings_troubleshoot_test_foreground_service_started_title">Услуга за известия</string>
<string name="settings_troubleshoot_test_foreground_service_startedt_success">Услугата за известия работи.</string>
<string name="settings_troubleshoot_test_foreground_service_started_failed">Услугата за известия не работи.
Опитайте да рестартирате приложението.</string>
\nОпитайте да рестартирате приложението.</string>
<string name="settings_troubleshoot_test_foreground_service_started_quickfix">Стартирай услугата</string>
<string name="settings_troubleshoot_test_service_restart_title">Автоматично рестартиране на услугата за известия</string>
<string name="settings_troubleshoot_test_service_restart_success">Услугата беше спряна и рестартирана автоматично.</string>
@ -906,10 +904,10 @@
<string name="settings_troubleshoot_test_service_boot_quickfix">Стартирай при старт на системата</string>
<string name="settings_troubleshoot_test_bg_restricted_title">Проверка на фоновите ограничения</string>
<string name="settings_troubleshoot_test_bg_restricted_success">Ограниченията във фонов режим са изключени за Element. Тази проверка трябва да се изпълни използвайки мобилни данни (не на Wi-Fi).
%1$s</string>
\n%1$s</string>
<string name="settings_troubleshoot_test_bg_restricted_failed">Активирани са ограничения във фонов режим за Element.
Работата, която приложението се опитва да извършва във фонов режим бива агресивно ограничена. Това може да повлияе на известяването.
%1$s</string>
\nРаботата, която приложението се опитва да извършва във фонов режим бива агресивно ограничена. Това може да повлияе на известяването.
\n%1$s</string>
<string name="settings_troubleshoot_test_bg_restricted_quickfix">Премахни ограниченията</string>
<string name="settings_troubleshoot_test_battery_title">Оптимизация на батерията</string>
<string name="settings_troubleshoot_test_battery_success">Element не се влияе от Оптимизация на батерията.</string>
@ -917,7 +915,7 @@
<string name="settings_troubleshoot_test_battery_quickfix">Игнорирай оптимизацията</string>
<string name="startup_notification_fdroid_battery_optim_title">Връзка във фонов режим</string>
<string name="startup_notification_fdroid_battery_optim_message">Element трябва да поддържа ниско-натоварваща връзка във фонов режим, за да може известията да пристигат надеждно.
На следващия екран, ще бъдете попитани дали да позволите на Element винаги да работи във фонов режим. Моля, приемете.</string>
\nНа следващия екран, ще бъдете попитани дали да позволите на Element винаги да работи във фонов режим. Моля, приемете.</string>
<string name="startup_notification_fdroid_battery_optim_button_grant">Разреши</string>
<string name="account_email_error">Възникна грешка при проверката на имейл адреса Ви.</string>
<string name="account_phone_number_error">Възникна грешка при проверката на телефонния Ви номер.</string>
@ -937,11 +935,11 @@
<string name="settings_troubleshoot_test_bing_settings_failed_to_load_rules">Неуспешно зареждане на собствените правила. Опитайте пак.</string>
<string name="settings_troubleshoot_test_bing_settings_quickfix">Провери настройките</string>
<string name="settings_troubleshoot_test_fcm_failed_too_many_registration">[%1$s]
Тази грешка е извън контрола на Element. Според Google, грешката показва, че устройството има прекалено много приложения регистрирани към системата за известия FCM. Проблема се случва само в случай на огромен брой приложения, така че не би трябвало да повлияе средно-статистическия потребител.</string>
\nТази грешка е извън контрола на Element. Според Google, грешката показва, че устройството има прекалено много приложения регистрирани към системата за известия FCM. Проблема се случва само в случай на огромен брой приложения, така че не би трябвало да повлияе средно-статистическия потребител.</string>
<string name="settings_troubleshoot_test_fcm_failed_service_not_available">[%1$s]
Тази грешка е извън контрола на Element. Може да се случи поради няколко причини. Възможно е проблема да изчезне, ако опитате по-късно. Също така, може да проверите дали Google Play услугите не са ограничени откъм мобилни данни (вижте системните настройки), или че часовникът на устройството е правилен. Възможно е грешката да възникне и ако използвате модифицирана операционна система (custom ROM).</string>
\nТази грешка е извън контрола на Element. Може да се случи поради няколко причини. Възможно е проблема да изчезне, ако опитате по-късно. Също така, може да проверите дали Google Play услугите не са ограничени откъм мобилни данни (вижте системните настройки), или че часовникът на устройството е правилен. Възможно е грешката да възникне и ако използвате модифицирана операционна система (custom ROM).</string>
<string name="settings_troubleshoot_test_fcm_failed_account_missing">[%1$s]
Тази грешка е извън контрола на Element. Няма Google акаунт на телефонът. Отворете системата за управления на акаунти и добавете Google акаунт.</string>
\nТази грешка е извън контрола на Element. Няма Google акаунт на телефонът. Отворете системата за управления на акаунти и добавете Google акаунт.</string>
<string name="settings_troubleshoot_test_fcm_failed_account_missing_quick_fix">Добави акаунт</string>
<string name="settings_noisy_notifications_preferences">Настройка на шумни известия</string>
<string name="settings_call_notifications_preferences">Настройка на известия за разговори</string>
@ -956,15 +954,15 @@
<string name="keys_backup_no_session_error">Не беше открита Matrix сесия</string>
<string name="keys_backup_setup_step1_title">Никога не губете шифровани съобщения</string>
<string name="keys_backup_setup_step1_description">Съобщения в шифровани стаи са защитени с шифроване от край до край. Само Вие и получателят (получателите) имате ключовете за прочитането им.
Правете резервно копие на ключовете, за да не ги загубите.</string>
\n
\nПравете резервно копие на ключовете, за да не ги загубите.</string>
<string name="keys_backup_setup_step2_button_title">Настройка на парола</string>
<string name="keys_backup_setup_step3_button_title">Готово</string>
<string name="keys_backup_setup_step3_copy_button_title">Запази ключа за възстановяване</string>
<string name="keys_backup_setup_step3_save_button_title">Запази като файл</string>
<string name="recovery_key_export_saved_as_warning">Ключът за възстановяване беше запазен в \'%s\'.
Внимание: този файл може да изчезне, ако деинсталирате приложението.</string>
\n
\nВнимание: този файл може да изчезне, ако деинсталирате приложението.</string>
<string name="keys_backup_setup_step3_please_make_copy">Моля, направете копие</string>
<string name="keys_backup_setup_step3_share_intent_chooser_title">Сподели ключа за възстановяване с…</string>
<string name="keys_backup_setup_step3_generating_key_status">Генериране на ключ за възстановяване използвайки парола. Процесът може да отнеме няколко секунди.</string>
@ -1035,16 +1033,15 @@
<string name="keys_backup_setup_step1_manual_export">Ръчно експортиране на ключовете</string>
<string name="keys_backup_setup_step2_text_title">Защитете резервното копие с парола.</string>
<string name="keys_backup_setup_step2_text_description">Ще съхраним резервно копие на ключовете Ви на Вашия сървър. Защитете резервното копие с парола.
За максимална защита, паролата е добре да е различна от тази за акаунта Ви.</string>
\n
\nЗа максимална защита, паролата е добре да е различна от тази за акаунта Ви.</string>
<string name="keys_backup_setup_creating_backup">Създаване на резервно копие</string>
<string name="keys_backup_setup_step1_recovery_key_alternative">Или защитете резервното копие с ключ за възстановяване, който ще трябва да пазите на безопасно място.</string>
<string name="keys_backup_setup_step2_skip_button_title">(За напреднали) Настройка с ключ за възстановяване</string>
<string name="keys_backup_setup_step3_success_title">Успешно!</string>
<string name="keys_backup_setup_step3_text_line1">Прави се резервно копие на ключовете Ви.</string>
<string name="keys_backup_setup_step3_text_line2">Ключът за възстановяване е допълнителна застраховка - ако забравите паролата, може да използвате ключа за да възстановите достъпа до шифрованите съобщения.
Пазете ключа за възстановяване на много безопасно място, например в password manager програма (или сейф)</string>
\nПазете ключа за възстановяване на много безопасно място, например в password manager програма (или сейф)</string>
<string name="keys_backup_setup_step3_text_line2_no_passphrase">Пазете ключа за възстановяване на много безопасно място, например в password manager програма (или сейф)</string>
<string name="keys_backup_setup_step3_button_title_no_passphrase">Направих копие</string>
<string name="keys_backup_setup_step3_share_recovery_file">Сподели</string>
@ -1066,8 +1063,8 @@
<string name="keys_backup_settings_untrusted_backup">За да използвате резервно копие на ключовете, възстановете с паролата или ключа за възстановяване.</string>
<string name="new_recovery_method_popup_title">Ново резервно копие на ключовете</string>
<string name="new_recovery_method_popup_description">Беше открито ново резервно копие на ключовете.
Ако не сте конфигурирали нов метод за възстановяване, е възможно някой да се опитва да достъпи акаунта Ви. Веднага сменете паролата на акаунта и настройте нов метод за възстановяване в Настройки.</string>
\n
\nАко не сте конфигурирали нов метод за възстановяване, е възможно някой да се опитва да достъпи акаунта Ви. Веднага сменете паролата на акаунта и настройте нов метод за възстановяване в Настройки.</string>
<string name="new_recovery_method_popup_was_me">Бях аз</string>
<string name="keys_backup_restoring_computing_key_waiting_message">Изчисляване на ключ за възстановяване…</string>
<string name="keys_backup_restoring_downloading_backup_waiting_message">Изтегляне на ключове…</string>
@ -1203,7 +1200,7 @@
<string name="fab_menu_create_chat">Директни съобщения</string>
<string name="create_room_title">Нова стая</string>
<string name="create_room_action_create">СЪЗДАЙ</string>
<string name="create_room_name_hint">Име на стая</string>
<string name="create_room_name_hint">Име</string>
<string name="create_room_public_title">Публична</string>
<string name="create_room_public_description">Всеки ще може да се присъедини към стаята</string>
<string name="create_room_directory_title">Директория със стаи</string>
@ -1432,7 +1429,7 @@
<string name="room_join_rules_public">%1$s направи стаята публична за всеки знаещ връзката.</string>
<string name="room_join_rules_invite">%1$s направи стаята само за поканени.</string>
<string name="timeline_unread_messages">Непрочетени съобщения</string>
<string name="login_splash_title">Освободете комуникацията си</string>
<string name="login_splash_title">Освободете комуникацията си.</string>
<string name="login_splash_text1">Чатете с хора директно или в групи</string>
<string name="login_splash_text2">Дръжте кореспонденцията защитена с шифроване</string>
<string name="login_splash_text3">Разширете и настройте изживяването си</string>
@ -1915,7 +1912,7 @@
\nКлючовете не са доверени</string>
<string name="encryption_information_dg_xsigning_trusted">Кръстосаното-подписване е включено
\nКлючовете са доверени.
\nЧастните ключове са неизвестни.</string>
\nЧастните ключове са неизвестни</string>
<string name="encryption_information_dg_xsigning_complete">Кръстосаното-подписване е включено.
\nЧастните ключове са на устройството.</string>
<string name="identity_server_error_outdated_home_server">Операцията е невъзможна. Сървърът е стар.</string>
@ -2186,4 +2183,15 @@
<string name="identity_server_error_bulk_sha256_not_supported">За вашата поверителност, Element поддържа изпращането на адреси и телефонни номера на потребители само в хеширан вид.</string>
<string name="identity_server_error_terms_not_signed">Първо приемете условията за сървъра за идентичност от Настройки.</string>
<string name="identity_server_error_no_identity_server_configured">Конфигурирайте сървъра си за идентичност.</string>
<string name="warning_unsaved_change_discard">Отхвърляне на промените</string>
<string name="warning_unsaved_change">Има незапазени промени. Да се отхвърлят ли промените\?</string>
<string name="warning_room_not_created_yet">Стаята все още не е създадена. Отказване създаването на стаята\?</string>
<string name="room_list_quick_actions_low_priority_remove">Премахни от нисък приоритет</string>
<string name="room_list_quick_actions_low_priority_add">Добави към нисък приоритет</string>
<string name="rotate_and_crop_screen_title">Завъртане и изрязване</string>
<string name="attachment_type_dialog_title">Добави изображение от</string>
<string name="create_room_settings_section">Настройки на стаята</string>
<string name="create_room_topic_hint">Тема</string>
<string name="create_room_topic_section">Тема на стаята (опция)</string>
<string name="create_room_name_section">Име на стая</string>
</resources>

File diff suppressed because it is too large Load diff

View file

@ -1233,7 +1233,7 @@
<string name="fab_menu_create_chat">Direktnachrichten</string>
<string name="create_room_title">Neuer Raum</string>
<string name="create_room_action_create">ERSTELLEN</string>
<string name="create_room_name_hint">Raumname</string>
<string name="create_room_name_hint">Name</string>
<string name="create_room_public_title">Öffentlich</string>
<string name="create_room_public_description">Jeder wird diesem Raum beitreten können</string>
<string name="create_room_directory_title">Raumverzeichnis</string>
@ -2233,4 +2233,15 @@
<string name="settings_security_pin_code_grace_period_summary_on">PIN-Code ist erforderlich, nachdem Element 2 Minuten lang nicht verwendet wurde.</string>
<string name="settings_security_pin_code_grace_period_title">Fordere PIN nach 2 Minuten an</string>
<string name="settings_security_pin_code_notifications_summary_off">Zeige nur die Anzahl von ungelesenen Nachrichten in einer einfachen Benachrichtigung.</string>
<string name="attachment_type_dialog_title">Bild hinzufügen von</string>
<string name="warning_room_not_created_yet">Der Raum ist noch nicht erstellt. Raumerstellung abbrechen\?</string>
<string name="room_list_quick_actions_low_priority_add">Zu niedrige Priorität hinzufügen</string>
<string name="create_room_topic_hint">Thema</string>
<string name="warning_unsaved_change_discard">Änderungen verwerfen</string>
<string name="warning_unsaved_change">Es gibt ungespeicherte Änderungen. Änderungen verwerfen\?</string>
<string name="room_list_quick_actions_low_priority_remove">Von niedrige Priorität entfernen</string>
<string name="rotate_and_crop_screen_title">Rotieren und Zuschneiden</string>
<string name="create_room_settings_section">Raumeinstellungen</string>
<string name="create_room_topic_section">Raum-Thema (optional)</string>
<string name="create_room_name_section">Raumname</string>
</resources>

View file

@ -910,7 +910,7 @@
\n%s</string>
<string name="create_room_public_description">Ĉiu ajn povos aliĝi al la ĉambro</string>
<string name="create_room_public_title">Publika</string>
<string name="create_room_name_hint">Nomo de ĉambro</string>
<string name="create_room_name_hint">Nomo</string>
<string name="create_room_action_create">KREI</string>
<string name="create_room_title">Nova ĉambro</string>
<string name="fab_menu_create_chat">Rektaj interparoloj</string>
@ -2160,4 +2160,16 @@
<string name="room_recents_directory">KATALOGO</string>
<string name="people_search_user_directory">KATALOGO DE UZANTOJ (%s)</string>
<string name="user_directory_header">Katalogo de uzantoj</string>
<string name="warning_room_not_created_yet">La ĉambro ankoraŭ ne kreiĝis. Ĉu nuligi kreadon de la ĉambro\?</string>
<string name="room_list_quick_actions_low_priority_remove">Forigi de malalte prioritataj</string>
<string name="room_list_quick_actions_low_priority_add">Aldoni al malalte prioritataj</string>
<string name="rotate_and_crop_screen_title">Turni kaj tondi</string>
<string name="attachment_type_dialog_title">Aldoni bildon el</string>
<string name="create_room_settings_section">Agordoj de ĉambro</string>
<string name="create_room_topic_hint">Temo</string>
<string name="create_room_topic_section">Temo de ĉambro (malnepra)</string>
<string name="create_room_name_section">Nomo de ĉambro</string>
<string name="autodiscover_well_known_autofill_dialog_message">Element trovis propran servilan agordaron per la retnomo «%1$s» el via identigilo de uzanto:
\n%2$s</string>
<string name="autodiscover_invalid_response">Nevalidas hejmservil-serĉanta respondo</string>
</resources>

View file

@ -550,7 +550,7 @@
<string name="fab_menu_create_chat">Isiklikud sõnumid</string>
<string name="create_room_title">Uus jututuba</string>
<string name="create_room_action_create">LOO</string>
<string name="create_room_name_hint">Jututoa nimi</string>
<string name="create_room_name_hint">Nimi</string>
<string name="create_room_public_title">Avalik</string>
<string name="create_room_public_description">Kõik võivad selle jututoaga liituda</string>
<string name="create_room_directory_title">Jututubade loend</string>
@ -1272,8 +1272,9 @@
<string name="settings_labs_enable_send_voice_summary">Selle valiku kasutamine eeldab kolmanda osapoole rakendust sõnumite salvestamiseks.</string>
<string name="widget_integration_review_terms">Jätkamaks pead nõustuma kasutustingimustega.</string>
<string name="you_added_a_new_device">Sa oled lisanud uue sessiooni \'%s\', mis soovib saada krüptimisvõtmeid.</string>
<string name="you_added_a_new_device_with_info">Uus sessioon soovib krüptovõtmeid. Sessiooni nimi: %1$s
\nViimati nähtud: %2$s
<string name="you_added_a_new_device_with_info">Uus sessioon soovib krüptovõtmeid.
\nSessiooni nimi: %1$s
\nViimati nähtud: %2$s
\nKui sa pole mõnes muus seadmes sisse loginud, siis ära pane seda teadet tähele.</string>
<string name="your_unverified_device_requesting">Sinu verifitseerimata sessioon \'%s\' soovib saada krüptimisvõtmeid.</string>
<string name="your_unverified_device_requesting_with_info">Verifitseerimata sessioon soovib krüptovõtmeid.
@ -2175,4 +2176,15 @@
<string name="no_permissions_to_start_webrtc_call_in_direct_room">Sul ei ole õigusi siin jututoas helistamiseks</string>
<string name="no_permissions_to_start_conf_call_in_direct_room">Sul ei ole piisavalt õigusi, et selles jututoas alustada konverentsikõnet</string>
<string name="reset">Taasta algolek</string>
<string name="warning_unsaved_change_discard">Loobu muudatustest</string>
<string name="warning_unsaved_change">Sa oled teinud muudatusi, mis on veel salvestamata. Kas soovid muudatustest loobuda\?</string>
<string name="warning_room_not_created_yet">See jututuba on veel loomata. Kas katkestame selle tegevuse\?</string>
<string name="room_list_quick_actions_low_priority_remove">Eemalda vähetähtsate jututubade seast</string>
<string name="room_list_quick_actions_low_priority_add">Märgi vähetähtsaks</string>
<string name="rotate_and_crop_screen_title">Pööra ja kadreeri</string>
<string name="attachment_type_dialog_title">Lisa pildid valitud asukohast</string>
<string name="create_room_name_section">Jututoa nimi</string>
<string name="create_room_settings_section">Jututoa seadistused</string>
<string name="create_room_topic_hint">Teema</string>
<string name="create_room_topic_section">Jututoa teema (kui soovid)</string>
</resources>

View file

@ -421,8 +421,8 @@
<item quantity="other">%d اتاق</item>
</plurals>
<plurals name="notification_compat_summary_title">
<item quantity="one">۱ آگاهی</item>
<item quantity="other">%d آگاهی</item>
<item quantity="one">%d اعلان</item>
<item quantity="other">%d اعلان‌ها</item>
</plurals>
<string name="room_widget_permission_theme">زمینه‌تان</string>
<string name="room_add_matrix_apps">افزودن کاره‌های ماتریکس</string>
@ -481,7 +481,7 @@
<string name="fab_menu_create_chat">پیام‌های مستقیم</string>
<string name="create_room_title">اتاق جدید</string>
<string name="create_room_action_create">ایجاد</string>
<string name="create_room_name_hint">نام اتاق</string>
<string name="create_room_name_hint">نام</string>
<string name="create_room_public_title">عمومی</string>
<string name="create_room_public_description">هرکسی می‌تواند به این اتاق بپیوندد</string>
<string name="create_room_directory_title">نمایهٔ اتاق‌ها</string>
@ -850,7 +850,7 @@
<string name="room_settings_read_history_entry_members_only_joined">فقط اعضا (از زمان پیوستنشان)</string>
<plurals name="room_settings_banned_users_count">
<item quantity="one">%d کاربر مسدود</item>
<item quantity="other">%d کاربر مسدود</item>
<item quantity="other">%d کاربران مسدود</item>
</plurals>
<string name="room_settings_labs_warning_message">این‌ها ویژگی‌های آزمایشی‌ای هستند که ممکن است به روش‌های نامنتظره‌ای حراب شوندا. با احتیاط استفاده کنید.</string>
<string name="room_settings_never_send_to_unverified_devices_summary">هرگز پیام‌های رمزشده از این نشست به نشست‌های تأییدنشده در این اتاق فرستاده نشود.</string>
@ -894,12 +894,12 @@
<string name="directory_server_fail_to_retrieve_server">ممکن است کارساز در دسترس نبوده یا شلوغ باشد</string>
<string name="lock_screen_hint">این‌جا بنویسید…</string>
<plurals name="notification_unread_notified_messages">
<item quantity="one">%d پیام آگاهی نخوانده</item>
<item quantity="other">%d پیام آگاهی نخوانده</item>
<item quantity="one">%d اعلان خوانده‌نشده</item>
<item quantity="other">%d اعلان‌های خوانده‌نشده</item>
</plurals>
<plurals name="notification_unread_notified_messages_in_room_msgs">
<item quantity="one">%d پیام آگاهی نخوانده</item>
<item quantity="other">%d پیام آگاهی نخوانده</item>
<item quantity="one">%d اعلان خوانده‌نشده</item>
<item quantity="other">%d اعلان‌های خوانده‌نشده</item>
</plurals>
<plurals name="notification_compat_summary_line_for_room">
<item quantity="one">%1$s: %2$d پیام</item>
@ -1334,8 +1334,8 @@
<string name="encryption_information_device_info">اطّلاعات رویداد</string>
<string name="encryption_information_title">اطّلاعات رمزنگاری سرتاسری</string>
<string name="directory_title">شاخه</string>
<string name="room_settings_addresses_e2e_encryption_warning">به کار انداختن رمزنگاری.
\n(هشدار: نمی‌تواند دوباره از کار بیفتد!)</string>
<string name="room_settings_addresses_e2e_encryption_warning">فعال‌کردن رمزنگاری
\n(هشدار: نمی‌تواند دوباره غیر فعال شود!)</string>
<string name="room_settings_addresses_e2e_disabled">رمزنگاری در این اتاق از کار افتاده است.</string>
<string name="room_settings_copy_room_address">رونوشت از نشانی اتاق</string>
<string name="room_settings_copy_room_id">رونوشت از شناسهٔ اتاق</string>
@ -1479,4 +1479,679 @@
<string name="no_permissions_to_start_webrtc_call_in_direct_room">اجازهٔ آغاز یک تماس را ندارید</string>
<string name="no_permissions_to_start_conf_call_in_direct_room">اجازهٔ آغاز یک تماس کنفرانسی را ندارید</string>
<string name="reset">بازنشانی</string>
<string name="startup_notification_privacy_button_other">انتخاب گزینه‌ی دیگر</string>
<string name="startup_notification_privacy_button_grant">مجوز دادن</string>
<string name="startup_notification_privacy_message">المنت می تواند در پس‌زمینه اجرا شود تا اعلان های شما را به صورت ایمن و اختصاصی مدیریت کند. این ممکن است بر میزان مصرف باتری شما تأثیر منفی بگذارد.</string>
<string name="reset_secure_backup_warning">این کار کلید امنیتی قبلی شما را حذف می‌کند.</string>
<string name="reset_secure_backup_title">یک کلید امنیتی جدید به صورت تصادفی ایجاد کنید یا یک عبارت امنیتی جدید برای فایل‌های پشتیبان موجود خود تنظیم کنید.</string>
<string name="settings_send_message_with_enter_summary">فشردن اینتر به جای رفتن به خط بعد، پیام را ارسال خواهد کرد</string>
<string name="settings_send_message_with_enter">ارسال با فشردن اینتر</string>
<string name="settings_preview_media_before_sending">پیش‌نمایش محتوای چندرسانه‌ای قبل از ارسال</string>
<string name="settings_vibrate_on_mention">لرزیدن گوشی در هنگام ذکر یک کاربر</string>
<string name="settings_show_avatar_display_name_changes_messages_summary">شامل مواردی مانند تغییر نام و تصویر پروفایل می‌شود.</string>
<string name="settings_show_avatar_display_name_changes_messages">نمایش پیام‌های مربوط به حساب کاربری</string>
<string name="settings_show_join_leave_messages_summary">دعوت‌ها و حذف توسط مدیر به هر صورت نمایش داده می‌شوند.</string>
<string name="settings_show_join_leave_messages">نمایش پیام‌های پیوستن و ترک اتاق</string>
<string name="settings_inline_url_preview_summary">پیش‌نمایشی از آدرس‌های URL در پیام‌ها نمایش داده شود.</string>
<string name="settings_set_workmanager_delay_summary">%s
\nبسته به شارژ دستگاه یا وضعیت دستگاه(خاموش بودن صفحه) ممکن است همگام‌سازی به تعویق بیوفتد.</string>
<string name="settings_background_fdroid_sync_mode_real_time_description">المنت بصورت دوره‌ای و در بازه‌های قابل تنظیم در پس زمینه همگام‌سازی می شود.
\nاین بر مصرف باتری شما تأثیر می‌گذارد، یک اعلان دائمی نمایش داده می‌شود که المنت برای رویدادها گوش می‌دهد.</string>
<string name="settings_background_fdroid_sync_mode_battery_description">المنت در پس زمینه همگام‌سازی می‌کند به گونه ای که منابع محدود دستگاه (باتری) حفظ می‌شود.
\nبسته به شارژ گوشی شما، ممکن است همگام‌سازی توسط سیستم‌عامل به تعویق بیوفتد.</string>
<string name="settings_turn_screen_on">روشن کردن صفحه برای ۳ ثانیه</string>
<string name="settings_notification_privacy_message_content_not_shown">• محتوای پیام در اعلان‌ها <b>نمایش داده نمی‌شوند</b></string>
<string name="settings_notification_privacy_nosecure_message_content">• اعلان ها حاوی <b>فرا داده و محتوای پیام هستند</b></string>
<string name="settings_notification_privacy_secure_message_content">• محتوای پیام اعلان <b> به طور ایمن و مستقیم از سرور هیوا دریافت می‌شود</b></string>
<string name="settings_notification_privacy_metadata">• اعلان ها فقط حاوی فرا داده هستند</string>
<string name="settings_notification_privacy_fcm">• اعلان ها از طریق سرور Firebase ارسال می شوند</string>
<string name="settings_troubleshoot_test_battery_failed">اگر دستگاه برای مدتی از شارژر جدا باشد و از دستگاه نیز استفاده نشود، گوشی وارد حالت غیر هوشیار می‌شود. در این حالت از دسترسی برنامه‌ها به اینترنت جلوگیری می‌شود و همگام سازی و هشدارهای استاندارد آن‌ها به تعویق می‌افتد.</string>
<string name="settings_troubleshoot_test_service_boot_failed">این سرویس با ری‌استارت دستگاه شروع نمی‌شود. تا وقتی المنت را یک بار باز نکنید اعلانی دریافت نخواهید کرد.</string>
<string name="settings_troubleshoot_test_notification_notification_clicked">بر روی اعلان کلیک شد!</string>
<string name="settings_troubleshoot_test_notification_notice">لطفا بر روی اعلان کلیک کنید. اگر اعلان را نمی‌بینید، تنظیمات دستگاه را بررسی نمائید.</string>
<string name="settings_troubleshoot_test_notification_title">نمایش اعلان</string>
<string name="settings_troubleshoot_test_push_notification_content">شما اعلان را مشاهده می‌کنید! کلیک کنید!</string>
<string name="settings_troubleshoot_test_push_loop_failed">دریافت Push با خطا مواجه شد. نصب مجدد برنامه می‌تواند یکی از راه‌حل‌های احتمالی باشد.</string>
<string name="settings_troubleshoot_test_push_loop_success">برنامه Push دریافت کرد</string>
<string name="settings_troubleshoot_test_push_loop_waiting_for_push">برنامه منتظر دریافت Push است</string>
<string name="settings_troubleshoot_test_push_loop_title">تست Push</string>
<string name="settings_troubleshoot_test_token_registration_failed">ثبت توکن FCM در سرور موفقیت آمیز نبود:
\n%1$s</string>
<string name="settings_troubleshoot_test_token_registration_success">توکن FCM با موفقیت در سرور ثبت شد.</string>
<string name="settings_troubleshoot_test_token_registration_title">ثبت توکن</string>
<string name="settings_troubleshoot_test_fcm_failed_account_missing_quick_fix">افزودن حساب کاربری</string>
<string name="settings_troubleshoot_test_fcm_failed_account_missing">[%1$s]
\nاین خطا از کنترل المنت خارج است. هیچ حساب Googleای روی تلفن وجود ندارد. لطفاً مدیریت حساب را در تنظیمات گوشی باز کرده و یک حساب Google اضافه کنید.</string>
<string name="settings_troubleshoot_test_fcm_failed_service_not_available">[%1$s]
\nاین خطا از کنترل المنت خارج است و به چند دلیل ممکن است رخ داده باشد. امکان دارد در صورت تلاش مجدد مشکل رفع شود، همچنین می‌توانید بررسی کنید که سرویس Google Play در استفاده از اینترنت در تنظیمات گوشی محدودیتی نداشته باشد یا ساعت دستگاه شما درست باشد. همچنین ممکن است به علت استفاده از ROM سفارشی‌شده این خطا رخ داده باشد.</string>
<string name="settings_troubleshoot_test_fcm_failed_too_many_registration">[%1$s]
\nاین خطا از کنترل هیوا خارج است و طبق گفته گوگل ، این خطا نشان می دهد که دستگاه بیش از حد مجاز، برنامه های ثبت شده در FCM دارد. این خطا فقط در مواردی رخ می دهد که تعداد زیادی برنامه وجود دارد، بنابراین نباید بر کاربر عادی رخ دهد.</string>
<string name="settings_troubleshoot_test_fcm_failed">بازیابی توکن FCM با مشکل مواجه شد:
\n%1$s</string>
<string name="settings_troubleshoot_test_fcm_success">توکن FCM با موفقیت بازیابی شد:
\n%1$s</string>
<string name="settings_troubleshoot_test_fcm_title">توکن Firebase</string>
<string name="settings_troubleshoot_test_play_services_quickfix">مشکل Google Play Services را برطرف کنید</string>
<string name="settings_troubleshoot_test_play_services_failed">المنت از Google Play Services برای ارسال اعلان‌ها استفاده می‌کند اما به نظر می‌رسد به درستی پیکربندی نشده است:
\n%1$s</string>
<string name="settings_troubleshoot_test_play_services_success">Google Play Services در دسترس و بروز است.</string>
<string name="settings_troubleshoot_test_bing_settings_failed_to_load_rules">تنظیمات سفارشی بارگذاری نشد، لطفاً دوباره امتحان کنید.</string>
<string name="settings_troubleshoot_diagnostic_success_status">عیب‌یابی اولیه مشکلی را نشان نمی‌دهد. اگر همچنان در دریافت اعلان‌ها مشکل دارید لطفا خطا را گزارش کرده تا آن را بررسی کنیم.</string>
<string name="settings_troubleshoot_diagnostic_failure_status_no_quickfix">یک یا چند تست ناموفق بودند، لطفا خطا را گزارش کرده تا آن را بررسی کنیم.</string>
<string name="settings_troubleshoot_diagnostic_failure_status_with_quickfix">یک یا چند تست ناموفق بودند، راه حل(های) پیشنهادی را امتحان کنید.</string>
<string name="settings_troubleshoot_diagnostic_running_status">در حال اجرا (%1$d از %2$d)</string>
<string name="settings_troubleshoot_diagnostic_run_button_title">تست‌ها را اجرا کن</string>
<string name="settings_troubleshoot_diagnostic">در حال تشخیص مشکل</string>
<string name="error_threepid_auth_failed">مطمئن شوید لینک فعال‌سازی‌ای را که به ایمیل شما ارسال شده، باز کرده‌اید.</string>
<string name="settings_remove_three_pid_confirmation_content">%s حذف شود؟</string>
<string name="settings_phone_numbers">شماره تلفن‌های شما</string>
<string name="settings_emails_empty">هیچ آدرس ایمیلی تا کنون به حساب کاربری شما افزوده نشده است</string>
<string name="settings_emails">آدرس ایمیل‌های شما</string>
<string name="settings_phone_number_empty">هیچ شماره تلفنی تا کنون به اکانت شما افزوده نشده است</string>
<string name="search_is_not_supported_in_e2e_room">قابلیت جستجو در اتاق‌های رمزشده هنوز پیاده‌سازی نشده است.</string>
<string name="search_no_results">نتیجه‌ای در پی نداشت</string>
<string name="search_banned_user_hint">فیلترکردن کاربران مسدود شده</string>
<string name="room_event_action_cancel_download">لغو دانلود</string>
<string name="room_event_action_cancel_upload">لغو آپلود</string>
<string name="room_event_action_report_prompt_ignore_user">آیا مطمئن هستید که تمام پیام‌های ارسالی از طرف این کاربر پنهان شود؟
\n
\nاین کار برنامه را مجدداً باز می‌کند و ممکن است کمی به طول انجامد.</string>
<string name="room_event_action_report_prompt_reason">دلیل گزارش این محتوا</string>
<string name="room_details_people_present_group_name">عضو شد</string>
<string name="room_details_people_invited_group_name">دعوت‌شدگان</string>
<string name="malformed_id">شناسه نامعتبر است. باید یک آدرس ایمیل یا شناسه‌ای در قالب \\\'@localpart:domain\\\' وارد نمایید</string>
<plurals name="room_details_selected">
<item quantity="one">%d مورد</item>
<item quantity="other">%d مورد</item>
</plurals>
<string name="room_details_files">پرونده‌ها</string>
<string name="room_details_people">اعضا</string>
<string name="room_details_title">اطلاعات اتاق</string>
<string name="ssl_only_accept">گواهی را تنها در صورتی تایید کنید که اثر انگشت آن با اثر انگشتی که ادمین سرور ارائه کرده‌است برابر باشد.</string>
<string name="ssl_expected_existing_expl">گواهی سرور تغییر کرده‌است. ممکن است این اتفاق به دلیل تمدید گواهی سرور رخ داده باشد. توصیه می‌شود از ادمین سرور سوال کنید.</string>
<string name="ssl_unexpected_existing_expl">گواهی سرور تغییر کرده است. این مورد بسیار نادر است. توصیه می شود گواهی جدید را قبول نکنید.</string>
<string name="ssl_cert_new_account_expl">اگر مدیر سرور گفته است که این مسئله اشکالی ندارد، اطمینان حاصل کنید که اثر انگشت زیر با اثر انگشت ارائه شده توسط آنها مطابقت دارد.</string>
<string name="ssl_cert_not_trust">این می‌تواند به این معنی باشد که حمله‌ی مرد میانی رخ داده است و یا اینکه گوشی شما، گواهی سرور را معتبر نمی‌داند.</string>
<string name="room_unknown_devices_messages_notification">پیام به دلیل حضور یک دستگاه ناشناس ارسال نشد. %1$s یا %2$s؟</string>
<string name="room_unsent_messages_notification">پیام ارسال نشد. %1$s یا %2$s؟</string>
<string name="room_participants_unban_prompt_msg">با لغو مسدودیت، کاربر می‌تواند مجددا به اتاق اضافه شود.</string>
<string name="room_participants_action_unignore_prompt_msg">حذف کاربر از لیست سیاه سبب می‌شود مجددا تمام پیام‌های او نمایش داده شود.</string>
<string name="room_participants_action_ignore_prompt_msg">افزودن کاربر به لیست سیاه سبب می‌شود پیام های او از اتاق‌هایی که به اشتراک می گذارید حذف شود.
\n
\nهر زمان که خواستید، می‌توانید در تنظیمات کاربر را از لیست سیاه حذف کنید.</string>
<string name="room_participants_power_level_demote">تنزل بده</string>
<string name="room_participants_power_level_demote_warning_prompt">شما نمی‌توانید این تغییر را بازگردانید زیرا در حال تنزل نقش خود در اتاق هستید، اگر آخرین کاربر ممتاز در اتاق باشید، امکان دستیابی مجدد به دسترسی‌های سطح بالای اتاق غیرممکن است.</string>
<string name="room_participants_power_level_demote_warning_title">تنزل نقش شما در اتاق؟</string>
<string name="room_participants_power_level_prompt">شما نمی‌توانید این تغییر را بازگردانید. زیرا در حال ارتقای سطح کاربر دیگر به سطح خودتان هستید.
\nآیا مطمئن هستید؟</string>
<string name="room_preview_try_join_an_unknown_room">شما در حال دسترسی به %s هستید. آیا می خواهید به این اتاق بپیوندید؟</string>
<string name="room_preview_unlinked_email_warning">این دعوت به %s ارسال شده است، که هیچ ارتباطی با اکانت شما ندارد.
\nممکن است بخواهید با اکانت دیگری وارد شوید یا این ایمیل را به اکانت خود اضافه کنید.</string>
<string name="permissions_action_not_performed_missing_permissions">متاسفانه به دلیل عدم دسترسی، درخواست شما امکان پذیر نمی باشد</string>
<string name="permissions_msg_contacts_warning_other_androids">هیوا می‌تواند با دیدن دفترچه تلفن شما کاربرهای دیگر هیوا را بر اساس ایمبل و شماره تلفنشان پیدا کند.
\n
\nآیا موافق با اشتراک‌گذاری دفترچه تلفنتان به این منظور هستید؟</string>
<string name="permissions_rationale_msg_contacts">هیوا می‌تواند با دیدن دفترچه تلفن شما کاربرهای دیگر هیوا را بر اساس ایمبل و شماره تلفنشان پیدا کند. اگر مایل به اشتراک گذاری دفترچه تلفنتان به این منظور هستید لطفا در پنجره‌ی بعد اجازه‌ی این کار را بدهید.</string>
<string name="permissions_rationale_msg_camera_and_audio">هیوا برای برقراری تماس تصویری نیازمند دسترسی به میکروفون و دوربین است.
\n
\nلطفا در پنجره های بعدی دسترسی های لازم را بدهید.</string>
<string name="permissions_rationale_msg_record_audio_explanation">"
\n
\nلطفا برای برقراری تماس در پنجره بعدی دسترسی لازم را بدهید."</string>
<string name="permissions_rationale_msg_record_audio">هیوا برای برقراری تماس صوتی نیازمند دسترسی به میکروفون است.</string>
<string name="permissions_rationale_msg_camera_explanation">"
\n
\nلطفا برای برقراری تماس در پنجره بعدی دسترسی لازم را بدهید."</string>
<string name="permissions_rationale_msg_storage">هیوا برای ارسال و ذخیره‌ی فایل‌ها نیاز به دسترسی به گالری شما را دارد.
\n
\nلطفا در پنجره‌ای که باز می‌شود این دسترسی را بدهید.</string>
<string name="settings_call_ringtone_use_default_stun_sum">هنگامی که سرور شما قابلیت تماس ندارد، از سرور %s استفاده کن</string>
<string name="settings_call_ringtone_use_default_stun">اجازه استفاده از سرور تماس پشتیبان</string>
<string name="login_error_ssl_peer_unverified">خطای SSL: هویت طرف مقابل تأیید نشد.</string>
<string name="call_failed_no_connection_description">اتصال برقرار نشد.
\nلطفا از ادمین سرور بخواهید جهت برقراری مطمئن تماس‌ها، سرور turn را پیکربندی کند.</string>
<string name="call_failed_no_ice_description">لطفا از ادمین سرور (%1$s) بخواهید جهت برقراری مطمئن تماس‌ها، turn server را پیکربندی کند.
\n
\nبه عنوان جایگزین می‌توانید از سرور عمومی %2$s استفاده کنید، اما این راه مطمئنی نیست چرا که آدرس IP شما در اختیار آن سرور قرار خواهد گرفت. برای مدیریت این بخش می‌توانید به تنظیمات مراجعه نمائید.</string>
<string name="secure_backup_reset_no_history">بعد از راه‌اندازی مجدد، هیچ تاریخچه، پیام، دستگاه تائید شده یا کاربر تائید شده‌ای در حساب شما وجود نخواهد داشت</string>
<string name="secure_backup_reset_if_you_reset_all">اگر همه چیز را بازنشانی کنید</string>
<string name="secure_backup_reset_all_no_other_devices">تنها در صورتی این کار را انجام دهید که از هیچ دستگاه دیگری نمی‌توانید این دستگاه را تائید نمائید.</string>
<string name="secure_backup_reset_all">بازنشانی همه چیز</string>
<string name="bad_passphrase_key_reset_all_action">همه‌ی گزینه‌های بازیابی را فراموش و یا گم کرده‌اید؟ همه چیز را بازنشانی کنید</string>
<string name="failed_to_access_secure_storage">دسترسی به حافظه امن انجام نشد</string>
<string name="keys_backup_recovery_key_error_decrypt">نسخه پشتیبان با این کلید بازیابی رمزگشایی نمی‌شود: لطفاً تأیید کنید که کلید بازیابی درست را وارد کرده‌اید.</string>
<string name="enter_secret_storage_input_key">کلید پشتیبان خود را انتخاب کنید، یا با تایپ کردن و یا کپی‌کردن، آن را وارد کنید</string>
<string name="command_description_discard_session">نشست‌های خارجی را مجبور به ترک گروه می‌کند</string>
<string name="use_other_session_content_description">از آخرین نسخه‌ی المنت روی دستگاه‌های دیگرتان استفاده کنید: نسخه وب المنت، نسخه دسکتاپ المنت، نسخه IOS المنت و نسخه اندروید المنت</string>
<string name="change_password_summary">تنظیم گذرواژه جدید…</string>
<string name="error_saving_media_file">فایل رسانه ذخیره نشد</string>
<string name="error_adding_media_file_to_gallery">فایل به گالری افزوده نشد</string>
<string name="bootstrap_migration_with_passphrase_helper_with_link">کلید امنیتی خود را نمی‌دانید، شما می‌توانید %s.</string>
<string name="bootstrap_progress_storing_in_sss">ذخیره رمز پشتیبان‌گیری کلید در SSSS</string>
<string name="bootstrap_progress_generating_ssss_recovery">تولید کلید SSSS از روی کلید بازیابی</string>
<string name="bootstrap_progress_generating_ssss_with_info">تولید کلید SSSS از روی کلید امنیتی (%s)</string>
<string name="bootstrap_progress_generating_ssss">تولید کلید SSSS از روی کلید امنیتی</string>
<string name="bootstrap_progress_compute_curve_key">محاسبه‌ی کلید curve</string>
<string name="auth_invalid_login_param_space_in_password">نام‌کاربری یا گذواژه‌ی اشتباه. ابتدا یا انتهای گذرواژه‌ی وارد شده کاراکتر space قرار دارد، لطفا بررسی کنید.</string>
<string name="command_description_plain">پیام‌ها را بدون در نظرگرفتن markdown ارسال کن</string>
<string name="bootstrap_cancel_text">اگر اکنون لغو کنید و از حساب خود خارج شوید، دسترسی به پیام‌های رمزشده را از دست می‌دهید.
\n
\nالبته شما همچنان قادر هستید که پشتیبان امن و کلید‌های ‌آن را در تنظیمات، مدیریت کنید.</string>
<string name="bootstrap_skip_text_no_gen_key">تنظیم کلید امنیتی به شما اماکن امن‌کردن پیام‌ها و دسترسی به پیام‌های رمزشده را می‌دهد.</string>
<string name="bootstrap_skip_text">تنظیم کلید امنیتی به شما اجازه دسترسی به پیام‌های رمز شده را می‌دهد.
\n
\nاگر مایل به تنظیم کلید امنیتی نیستید، می‌توانید آن را به صورت تصادفی تولید کنید.</string>
<string name="auth_flow_not_supported">از طریق نلفن‌همراه نمی توانید این کار را انجام دهید</string>
<string name="bootstrap_crosssigning_save_cloud">آن را در فضای ابری خود کپی کنید</string>
<string name="bootstrap_crosssigning_save_usb">آن را روی فلش یا حافظه‌ای دیگر ذخیره کنید</string>
<string name="bootstrap_crosssigning_print_it">آن را چاپ کرده و در محلی امن و مطمئن نگهداری کنید</string>
<string name="bootstrap_cross_signing_success">%2$s و %1$s شما تنظیم شد.
\n
\nآنها را در جای مطمئن و امن نگهداری کنید! درصورتی که همه‌ی نشست‌های خود را از دست بدهید، به این دو جهت رمزگشایی پیام‌های رمزشده‌ی قبلی و اطلاعات امن نیاز دارید.</string>
<string name="bootstrap_crosssigning_progress_key_backup">تنظیم پشتیبان‌گیری از کلید</string>
<string name="bootstrap_crosssigning_progress_save_ssk">همگام‌سازی کلید Self Signing</string>
<string name="bootstrap_crosssigning_progress_save_usk">همگام‌سازی کلید کاربر</string>
<string name="bootstrap_crosssigning_progress_save_msk">همگام‌سازی کلید اصلی</string>
<string name="bootstrap_crosssigning_progress_default_key">تعریف کلید پیش‌فرض SSSS</string>
<string name="bootstrap_crosssigning_progress_pbkdf2">ایجاد کلید امن از روی کلید امنیتی</string>
<string name="bootstrap_crosssigning_progress_initializing">انتشار کلید‌های هویتی ایجاد شده</string>
<string name="bootstrap_save_key_description">در صورتی که %2$s را فراموش کردید از %1$s به عنوان safety net استفاده کنید.</string>
<string name="bootstrap_loading_text">این ممکن است چند ثانیه طول بکشد، لطفاً صبور باشید.</string>
<string name="bootstrap_info_text_2">یک کلید امنیتی وارد کنید. از این عبارت جهت ذخیره امن کلید‌ها در سمت سرور استفاده می‌شود.</string>
<string name="bootstrap_dont_reuse_pwd">ترجیحا از گذرواژه حساب خود استفاده نکنید.</string>
<string name="bootstrap_info_confirm_text">برای تایید، %s خود را دوباره وارد کنید.</string>
<string name="bootstrap_info_text">افزایش امنیت و رمزگشایی پیام‌های رمزشده و اعتماد به %s.</string>
<string name="verify_not_me_self_verification">ممکن است یکی از موارد زیر به خطر افتاده‌باشد:
\n
\n- گذرواژه شما
\n- سرور شما
\n- این دستگاه یا دستگاه دیگر
\n- اتصال اینترنت دستگاه
\n
\nما توصیه می‌کنیم گذرواژه و کلید بازیابی خود را بلافاصله در تنظیمات تغییر دهید.</string>
<string name="verify_cancel_other">اگر اکنون انصراف دهید، %1$s (%2$s) را تأیید نخواهید کرد. البته می‌توانید از طریق پروفایل کاربری آنها نیز این کار را انجام دهید.</string>
<string name="verify_cancel_self_verification_from_trusted">اگر لغو کنید، نمی توانید پیام های رمزگذاری شده را در دستگاه جدید خود بخوانید و سایر کاربران به آن اعتماد نخواهند کرد</string>
<string name="verify_cancel_self_verification_from_untrusted">در صورت لغو ، نمی توانید پیام های رمزشده را در این دستگاه بخوانید و سایر کاربران به آن اعتماد نخواهند کرد</string>
<string name="verify_new_session_compromized">ممکن است اکانت شما هک شده باشد</string>
<string name="verify_new_session_notice">با استفاده از این نشست، نشست جدید خود را تأیید کرده و به آن دسترسی مشاهده‌ی پیام‌های رمزشده را بدهید.</string>
<string name="keys_backup_restore_success_title_already_up_to_date">کلیدها به روز هستند!</string>
<string name="event_redacted_by_admin_reason_with_reason">رویداد توسط ادمین به این دلیل تغییر داده شد: %1$s</string>
<string name="event_redacted_by_user_reason_with_reason">رویداد توسط کاربر به این دلیل حذف شد: %1$s</string>
<string name="delete_event_dialog_reason_hint">علت حذف</string>
<string name="delete_event_dialog_content">آیا مطمئن هستید که می‌خواهید این رویداد را حذف کنید؟ توجه داشته باشید که اگر نام اتاق یا توضیح آن را حذف کنید، این تغییر می تواند لغو شده و رویداد حذف نشود.</string>
<string name="enter_secret_storage_passphrase">کلید امنیتی حافظه‌ی ذخیره‌سازی امن را وارد کنید</string>
<string name="enter_secret_storage_invalid">رمزی در حافظه پیدا نشد</string>
<string name="delete_account_data_warning">داده‌های حساب از نوع %1$s حذف شوند؟
\n
\nبا احتیاط استفاده کنید، چرا که ممکن است منجر به یک رفتار غیرمنتظره شود.</string>
<string name="initialize_cross_signing">شروع فرآیند تائید متقابل</string>
<string name="verification_profile_device_untrust_info">تا زمانی که این کاربر این نشست را تایید کند، پیام های ارسالی و دریافتی در آن با برچسب هشدار نشانه‌گذاری می شوند. البته شما می‌توانید این نشست را به صورت دستی تأیید کنید.</string>
<string name="verification_profile_device_new_signing">%1$s (%2$s) با یک نشست جدید وارد شد:</string>
<string name="verification_profile_device_verified_because">این نشست برای ارسال امن پیام‌ها مورد اعتماد است، چرا که %1$s (%2$s) آن را تأیید کرده است:</string>
<string name="settings_active_sessions_unverified_device_desc">این نشست را تأیید کنید تا به عنوان معتمد علامت‌گذاری شود و به آن اجازه دسترسی به پیام‌های رمزگذاری شده داده شود. اگر این نشست مربوط به شما نیست، ممکن است حساب شما هک شده باشد:</string>
<string name="settings_active_sessions_verified_device_desc">این نشست برای ارسال امن پیام‌ها مورد اعتماد است، چرا که شما آن را تأیید کرده اید:</string>
<string name="settings_failed_to_get_crypto_device_info">اطلاعات رمزنگاری در دسترس نیست</string>
<string name="verification_conclusion_ok_self_notice">نشست جدید شما اکنون تأیید شده‌است. این نشست به پیام‌های رمزگذاری شده‌ی شما دسترسی داشته و سایر کاربران نیز این نشست را قابل اعتماد می دانند.</string>
<string name="verification_conclusion_ok_notice">پیام‌های این کاربر به صورت سرتاسر رمزگذاری شده و توسط افراد دیگر قابل خواندن نیستند.</string>
<string name="verification_code_notice">کد را با کدی که در صفحه کاربر دیگر نمایش داده شده مقایسه کنید.</string>
<string name="verification_emoji_notice">شکلک‌ها را مقایسه کنید، از ترتیب نمایش آنان نیز مطمئن شوید.</string>
<string name="verification_request_start_notice">بهتر است اینکار را به صورت حضوری و یا با استفاده از یک روش ارتباطی مطمئن انجام دهید.</string>
<string name="verification_request_notice">برای امنیت بیشتر، %s را با بررسی یک کد یکبارمصرف تایید کنید.</string>
<string name="room_settings_enable_encryption_dialog_content">پس از فعال‌شدن ، نمی‌توان رمزگذاری برای یک اتاق را غیرفعال کرد. پیام های ارسالی در یک اتاق رمزگذاری شده توسط سرور قابل مشاهده نیست و فقط توسط اعضای اتاق قابل مشاهده است. فعال کردن رمزنگاری ممکن است از کارکرد بسیاری از ربات ها و پل ها جلوگیری کند.</string>
<string name="room_settings_enable_encryption_dialog_title">رمزگذاری فعال شود؟</string>
<string name="room_settings_enable_encryption">فعال‌سازی رمزنگاری سرتاسر</string>
<string name="command_description_rainbow_emote">شکلک را با رنگ‌بندی رنگین گمان ارسال می کند</string>
<string name="command_description_rainbow">پیام را با رنگ‌بندی رنگین کمان ارسال می کند</string>
<string name="verify_cannot_cross_sign">این نشست نمی‌تواند تائید را با نشست‌های دیگر شما به اشتراک بگذارد.
\nتائید به صورت محلی ذخیره می‌شود و در نسخه‌ی بعدی برنامه به اشتراک گذاشته می‌شود.</string>
<string name="rendering_event_error_exception">المنت هنگام ارائه محتوای رویدادی با شناسه \'%1$s\' با مشکل روبرو شد</string>
<string name="rendering_event_error_type_of_message_not_handled">المنت پیام‌های \'%1$s\' را پشتیبانی نمی‌کند</string>
<string name="rendering_event_error_type_of_event_not_handled">المنت رویداد \'%1$s\' را پشتیبانی نمی‌کند</string>
<string name="verification_conclusion_compromised">ممکن است یکی از موارد زیر به خطر افتاده باشد:
\n
\n- سرور میزبان شما
\n- سرور کاربری که او را تائید می‌کنید
\n- اتصال اینترنت شما یا کاربران دیگر
\n- دستگاه شما یا دستگاه سایر کاربران</string>
<string name="verification_green_shield">برای اطمینان از صحت هویت کاربران، به رنگ آیکون سپر آنان توجه کنید. رنگ سبز به معنای هویت تائید شده‌ی است. برای اطمینان از امنیت اتاق، همه کاربران آن اتاق را تائید کنید.</string>
<string name="verify_user_sas_emoji_security_tip">برای امنیت بالا ، از یک روش ارتباطی امن دیگر استفاده کنید یا این کار را حضوری انجام دهید.</string>
<string name="verify_user_sas_emoji_help_text">با تأیید شکلک‌های منحصر به فرد زیر در صفحه نمایش طرف مقابل به همان ترتیب، این کاربر را تأئید کنید.</string>
<string name="login_error_threepid_denied">دامنه ایمیل شما مجاز به ثبت نام در این سرور نیست</string>
<string name="command_description_shrug">¯\\\\_(ツ)_/¯ را به یک پیام متنی ساده تغییر می دهد</string>
<string name="permalink_malformed">لینک مشکل دارد</string>
<string name="soft_logout_sso_not_same_user_error">نشست فعلی مربوط به کاربر %1$s است و شما اطلاعات حساب کاربر %2$s را ارائه داده‌اید. این مورد توسط المنت پشتیبانی نمی‌شود .
\nلطفا ابتدا داده ها را پاک کنید، سپس با یک حساب دیگر وارد برنامه شوید.</string>
<string name="soft_logout_clear_data_dialog_e2e_warning_content">دسترسی به پیام‌های رمزشده را از دست خواهید داد مگر اینکه برای بازیابی کلیدهای رمزگذاری خود، به حساب خود وارد شوید.</string>
<string name="soft_logout_clear_data_dialog_content">آیا تمامی اطلاعات ذخیره‌شده در این دستگاه پاک شود؟
\nبرای دسترسی به اطلاعات و پیام‌های حساب خود، دوباره وارد شوید.</string>
<string name="soft_logout_clear_data_notice">هشدار: اطلاعات شخصی شما (شامل کلید‌های رمزنگاری) همچنان روی این دستگاه ذخیره شده‌اند.
\n
\nاگر نمی‌خواهید از این دستگاه استفاده کنید، یا می‌خواهید با اکانت دیگری وارد شوید، این اطلاعات را حذف کنید.</string>
<string name="soft_logout_signin_e2e_warning_notice">برای بازیابی کلیدهای رمزگذاری ذخیره شده در این دستگاه، وارد حساب خود شوید. شما برای خواندن همه پیام‌های رمزشده‌ی خود در هر دستگاهی به این کلید‌ها نیاز دارید.</string>
<string name="soft_logout_signin_notice">ادمین سرور (%1$s) شما را از حسابتان خارج کرده‌است %2$s (%3$s).</string>
<string name="signed_out_notice">این می تواند به دلایل مختلف باشد:
\n
\n• شما گذرواژه خود را در نشست دیگری تغییر داده‌اید.
\n
\n• این نشست را در یکی از نشست دیگر خود حذف کرده‌اید.
\n
\n• ادمین سرور حساب شما را غیرفعال کرده‌است.</string>
<string name="autodiscover_well_known_error">سرور معتبر نیست. لطفا شناسه‌کاربری خود را بررسی کنید</string>
<string name="login_signin_matrix_id_error_invalid_matrix_id">این یک شناسه کاربری معتبر نیست. قالب صحیح: \\\'@user:homeserver.org\\\'</string>
<string name="login_signin_matrix_id_password_notice">اگر گذرواژه خود را نمی‌دانید، برای تنظیم مجدد آن بازگردید.</string>
<string name="login_signin_matrix_id_notice">اگر یک حساب کاربری بر روی یک سرور دارید، از شناسه ماتریکس (به عنوان مثال @user:domain.com) و گذرواژه برای ورود استفاده کنید.</string>
<string name="login_connect_using_matrix_id_notice">همچنین اگر قبلاً حساب کاربری داشته و از نام‌کاربری و گذرواژه خود اطلاع دارید، می توانید از این روش استفاده کنید:</string>
<plurals name="login_error_limit_exceeded_retry_after">
<item quantity="one">درخواست های زیادی ارسال شده است. می توانید در %1$d ثانیه دوباره امتحان کنید…</item>
<item quantity="other">درخواست های زیادی ارسال شده است. می توانید در %1$d ثانیه دوباره امتحان کنید…</item>
</plurals>
<string name="login_error_outdated_homeserver_warning_content">این نسخه سرور بسیار قدیمی است. از ادمین خود بخواهید که آن را ارتقا دهد. البته شما می‌توانید ادامه دهید ، اما برخی از ویژگی ها ممکن است به درستی کار نکنند.</string>
<string name="login_error_outdated_homeserver_content">این نسخه سرور بسیار قدیمی است. از ادمین خود بخواهید که آن را ارتقا دهد.</string>
<string name="login_error_outdated_homeserver_title">سرور به روز نشده</string>
<string name="login_validation_code_is_not_correct">کد وارد شده صحیح نیست. لطفا بررسی فرمائید.</string>
<string name="login_wait_for_email_notice">ما ایمیلی به %1$s ارسال کردیم.
\nلطفاً برای ادامه فرآیند ایجاد حساب‌کاربری بر روی لینک موجود در آن کلیک کنید.</string>
<string name="login_wait_for_email_title">لطفا ایمیل خود را بررسی کنید</string>
<string name="login_terms_title">برای ادامه، شرایط را قبول کنید</string>
<string name="login_a11y_captcha_container">لطفا کپچا را حل کنید</string>
<string name="login_a11y_choose_other">انتخاب سرور دلخواه</string>
<string name="login_a11y_choose_modular">انتخاب سرورهای المنت</string>
<string name="login_a11y_choose_matrix_org">انتخاب matrix.org</string>
<string name="login_signup_cancel_confirmation_content">حساب شما هنوز ایجاد نشده‌است.
\n
\nفرآیند ثبت‌نام متوقف شود؟</string>
<string name="login_signin_username_hint">نام‌کاربری یا ایمیل</string>
<string name="login_signup_to">ثبت نام در %1$s</string>
<string name="login_msisdn_error_other">شماره تلفن نامعتبر است. لطفا آن را بررسی کنید</string>
<string name="login_msisdn_confirm_notice">ما یک کد فعال‌سازی به %1$s ارسال کردیم. لطفا آن را وارد کنید.</string>
<string name="login_set_email_notice">برای بازیابی حساب خود یک ایمیل تنظیم کنید. بعداً، در صورتی که تمایل داشتید می‌توانید به افراد اجازه دهید با ایمیل، شما را پیدا کنند.</string>
<string name="login_set_msisdn_notice">یک شماره تلفن تنظیم کنید تا در صورتی که تمایل دارید، به افراد اجازه پیدا کردن شما را با استفاده از آن بدهد.</string>
<string name="login_reset_password_cancel_confirmation_content">گذرواژه شما هنوز تغییر نکرده‌است.
\n
\nفرآیند تغییر گذرواژه را متوقف می‌کنید؟</string>
<string name="login_reset_password_success_notice_2">شما از همه نشست‌ها خارج شده‌اید و دیگر اعلان‌ها را دریافت نخواهید کرد. برای فعال کردن مجدد اعلان‌ها، در دستگاه‌های خود وارد حسابتان شوید.</string>
<string name="login_reset_password_mail_confirmation_submit">ایمیل را تایید کردم</string>
<string name="login_reset_password_mail_confirmation_notice_2">برای تایید گذرواژه جدید لینک ارسالی را باز کرده، سپس روی متن زیر کلیک کنید.</string>
<string name="login_reset_password_mail_confirmation_notice">یک ایمیل تائید به %1$s ارسال شد.</string>
<string name="login_reset_password_mail_confirmation_title">صندوق ایمیل خود را بررسی کنید</string>
<string name="login_reset_password_error_not_found">این ایمیل به هیچ حسابی متصل نشده‌است</string>
<string name="login_reset_password_warning_content">با تغییر گذرواژه ، کلیدهای رمزگذاری سرتاسر در تمام نشست‌های شما تغییر کرده و تاریخچه گفتگوی رمزشده‌ی شما غیرقابل خواندن می‌شود. قبل از تغییر گذرواژه، کلید امنیتی یا کلید پشتیبان را وارد کرده و یا کلیدهای اتاق خود را از نشست دیگری استخراج کنید.</string>
<string name="login_reset_password_submit">بعدی</string>
<string name="login_reset_password_notice">برای تأیید تنظیم گذرواژه‌ی جدید ، یک ایمیل تأیید به آدرس ایمیل شما ارسال خواهد شد.</string>
<string name="login_reset_password_on">بازنشانی گذرواژه در %1$s</string>
<string name="login_login_with_email_error">این ایمیل به هیچ حسابی مرتبط نیست.</string>
<string name="login_registration_not_supported">برنامه قادر به ایجاد حساب در این سرور نیست.
\n
\nآیا می خواهید با استفاده از مرورگر حساب کاربری بسازید؟</string>
<string name="login_registration_disabled">متأسفیم، این سرور حساب‌های جدید را نمی پذیرد.</string>
<string name="login_mode_not_supported">برنامه نمی‌تواند به این سرور متصل شود. سرور از این مکانیزم‌(ها) برای ورود پشتیبانی می کند: %1$s.
\n
\nآیا می خواهید با استفاده از مرورگر وارد شوید؟</string>
<string name="login_sso_error_message">هنگام بارگیری صفحه، خطایی روی داد: %1$s (%2$d)</string>
<string name="login_server_url_form_common_notice">آدرس سرور مورد نظر خود را وارد کنید</string>
<string name="login_server_url_form_other_notice">آدرس سروری را که می‌‌خواهید به آن متصل شوید، وارد کنید</string>
<string name="login_server_url_form_modular_notice">آدرس سروری را که می‌‌خواهید از آن استفاده کنید، وارد کنید</string>
<string name="login_server_matrix_org_text">به میلیون ها نفر در بزرگترین سرور عمومی بپیوندید</string>
<string name="login_server_text">درست مانند ایمیل، حساب‌های کاربری یک خانه دارند؛ اگرچه می توانید با هر کسی که دوست دارید، صحبت کنید</string>
<string name="login_server_title">یک سرور انتخاب کنید</string>
<string name="login_splash_submit">شروع کنید</string>
<string name="login_splash_text3">تجارب خود را گسترش داده و شخصی‌سازی کنید</string>
<string name="login_splash_text2">گفتگوهای خصوصی خود را با رمزگذاری محافظت کنید</string>
<string name="login_splash_text1">با افراد به صورت مستقیم و یا در قالب گروه گپ بزنید</string>
<string name="login_splash_title">صاحب گفتگوهای خود باشید.</string>
<string name="timeline_unread_messages">پیام‌های خوانده نشده</string>
<string name="direct_room_join_rules_invite_by_you">شما اتاق را به گونه‌ای تنظیم کردید که تنها افراد با دعوت بتوانند به اتاق بپیوندند.</string>
<string name="direct_room_join_rules_invite">%1$s اتاق را به گونه‌ای تنظیم کرده که تنها افراد با دعوت بتوانند به اتاق بپیوندند.</string>
<string name="room_join_rules_invite_by_you">شما اتاق را به گونه‌ای تنظیم کرده‌اید که تنها افراد با دعوت بتوانند به اتاق بپیوندند.</string>
<string name="room_join_rules_invite">%1$s اتاق را به گونه‌ای تنظیم کرده‌است که تنها اعضا با دعوت بتوانند به اتاق بپیوندند.</string>
<string name="room_join_rules_public_by_you">شما اتاق را برای هر فردی که لینک آن را دارد عمومی کردید.</string>
<string name="room_join_rules_public">%1$s اتاق را برای هر کس که لینک آن را دارد، عمومی کن.</string>
<string name="help_long_click_on_room_for_more_options">برای دیدن گزینه‌های بیشتر، روی یک اتاق کلیک طولانی کنید</string>
<string name="spoiler">تباه‌کننده</string>
<string name="command_description_spoiler">ارسال به عنوان پیام تباه‌کننده</string>
<string name="room_list_quick_actions_low_priority_remove">حذف‌کردن از اولویت پایین</string>
<string name="room_list_quick_actions_low_priority_add">اضافه‌کردن به اولویت پایین</string>
<string name="no_network_indicator">در حال حاضر اتصال شبکه‌ای وجود ندارد</string>
<string name="permissions_rationale_msg_keys_backup_export">المنت برای ذخیره کلیدهای رمزنگاری سرتاسر شما بر روی حافظه نیاز به مجوز دارد.
\n
\nلطفاً در پنجره بعدی اجازه دسترسی دهید تا بتوانید کلیدهای خود را به صورت دستی ذخیره کنید.</string>
<string name="content_reported_as_inappropriate_content">این محتوا به عنوان محتوای نامناسب گزارش شده‌است.
\n
\nاگر نمی‌خواهید محتوای بیشتری از این کاربر مشاهده کنید ، می توانید او را در لیست سیاه قرار دهید تا پیام‌های او را مشاهده نکنید.</string>
<string name="content_reported_as_spam_content">این محتوا به عنوان هرز‌نامه گزارش شده‌است.
\n
\nاگر نمی‌خواهید محتوای بیشتری از این کاربر مشاهده کنید ، می توانید او را در لیست سیاه قرار دهید تا پیام‌های او را مشاهده نکنید.</string>
<string name="content_reported_content">این محتوا گزارش شده‌است.
\n
\nاگر نمی‌خواهید محتوای بیشتری از این کاربر مشاهده کنید، می توانید او را در لیست سیاه قرار دهید تا پیام‌های او را مشاهده نکنید.</string>
<string name="error_handling_incoming_share">امکان به اشتراک‌گذاری این محتوا وجود ندارد</string>
<string name="rotate_and_crop_screen_title">چرخش و برش</string>
<string name="attachment_type_dialog_title">اضافه کردن تصویر از</string>
<string name="error_attachment">هنگام دریافت پیوست خطایی رخ داد.</string>
<string name="error_file_too_big">پرونده \'%1$s\' (%2$s) برای آپلود بسیار بزرگ است. محدودیت آپلود %3$s است.</string>
<plurals name="fallback_users_read">
<item quantity="one">%d کاربر خواند</item>
<item quantity="other">%d کاربر خواندند</item>
</plurals>
<string name="one_user_read">%s خواند</string>
<string name="two_users_read">%1$s و %2$s خواندند</string>
<string name="three_users_read">%1$s ، %2$s و %3$s خواندند</string>
<plurals name="two_and_some_others_read">
<item quantity="one">%1$s ، %2$s و %3$d نفر دیگر خواندند</item>
<item quantity="other">%1$s ، %2$s و %3$d نفر دیگر خواندند</item>
</plurals>
<string name="a11y_jump_to_bottom">به پایین بروید</string>
<string name="a11y_close_keys_backup_banner">بستن بنر پشتیبان کلیدها</string>
<string name="a11y_create_menu_close">باز کردن منوی ایجاد اتاق…</string>
<string name="a11y_create_menu_open">باز کردن منوی ایجاد اتاق</string>
<string name="a11y_open_drawer">کشوی پیمایش را باز کنید</string>
<string name="send_attachment">ارسال ضمیمه</string>
<string name="error_network_timeout">به نظر می رسد پاسخگویی سرور بسیار طولانی شده‌است، این امر می‌تواند به دلیل اتصال ضعیف یا خطای موجود در سرور باشد. لطفا پس از مدتی دوباره امتحان کنید.</string>
<string name="error_terms_not_accepted">لطفاً هنگامی که شرایط و ضوابط سرور خود را پذیرفتید، دوباره امتحان کنید.</string>
<string name="settings_agree_to_terms">با شرایط خدمات سرور هویت‌سنجی (%s) موافقت کنید تا بتوانید از طریق آدرس ایمیل یا شماره تلفن قابل پیدا شدن باشید.</string>
<string name="settings_discovery_disconnect_with_bound_pid">شما در حال حاضر آدرس‌های ایمیل یا شماره تلفن‌ها را در سرور هویت‌سنجی %1$s به اشتراک می گذارید. برای توقف اشتراک آنها باید دوباره به %2$s متصل شوید.</string>
<string name="settings_text_message_sent_wrong_code">کد تائید صحیح نیست.</string>
<string name="settings_text_message_sent_hint">کد</string>
<string name="settings_text_message_sent">پیامکی به %s ارسال شده است. لطفاً کد تأیید موجود در آن را وارد کنید.</string>
<string name="settings_discovery_no_terms">سرور هویت‌سنجی‌ای که انتخاب کرده‌اید هیچگونه شرایط و ضوابطی ندارد. فقط اگر به صاحب سرویس اعتماد دارید ادامه دهید</string>
<string name="settings_discovery_no_terms_title">سرور هویت‌سنجی شرایط و ضوابط استفاده ندارد</string>
<string name="settings_discovery_please_enter_server">آدرس سرور هویت‌سنجی را وارد کنید</string>
<string name="settings_discovery_bad_identity_server">اتصال به سرور هویت‌سنجی امکان پذیر نیست</string>
<string name="settings_discovery_enter_identity_server">آدرس سرور هویت‌سنجی را وارد کنید</string>
<string name="settings_discovery_confirm_mail_not_clicked">ما یک ایمیل تأیید به %s ارسال کردیم، ابتدا ایمیل خود را بررسی کرده و روی لینک تأیید کلیک کنید</string>
<string name="settings_discovery_confirm_mail">ما یک ایمیل تأیید به %s ارسال کردیم، ایمیل خود را بررسی کرده و روی لینک تأیید کلیک کنید</string>
<string name="settings_discovery_disconnect_identity_server_info">قطع ارتباط با سرور هویت‌سنجی به این معنی است که توسط کاربران دیگر قابل شناسایی نخواهید بود و نمی توانید دیگران را از طریق ایمیل یا تلفن دعوت کنید.</string>
<string name="settings_discovery_identity_server_info_none">شما در حال حاضر از سرور هویت‌سنجی استفاده نمی‌کنید. برای اینکه مخاطبین فعلی‌ای را که می‌شناسید پیدا کرده و آنها نیز شما را پیدا کنند، این سرور را در زیر پیکربندی کنید.</string>
<string name="settings_discovery_identity_server_info">شما در حال حاضر از %1$s استفاده می کنید تا مخاطبین فعلی را که می‌شناسید پیدا کرده و آنها نیز شما را پیدا کنند.</string>
<string name="read_at">بخوانید در</string>
<string name="settings_troubleshoot_test_token_registration_quick_fix">ثبت توکن</string>
<string name="push_gateway_item_format">فرمت:</string>
<string name="push_gateway_item_url">آدرس:</string>
<string name="push_gateway_item_device_name">نام نشست:</string>
<string name="push_gateway_item_app_display_name">نام برنامه:</string>
<string name="push_gateway_item_push_key">کلید push:</string>
<string name="push_gateway_item_app_id">شناسه برنامه:</string>
<string name="settings_push_gateway_no_pushers">هیچ push gatewayای ثبت نشده است</string>
<string name="settings_push_rules_no_rules">هیچ قانونی برای push تعریف نشده است</string>
<string name="settings_expert">ماهر</string>
<string name="quick_reactions">واکنش‌های سریع</string>
<string name="navigate_to_room_when_already_in_the_room">شما در حال مشاهده این اتاق هستید!</string>
<string name="settings_other_third_party_notices">سایر اعلامیه‌های شخص ثالث</string>
<string name="import_e2e_keys_from_file">در حال بارگیری کلید‌های رمزنگاری سرتاسر از فایل \"%1$s\".</string>
<string name="keys_backup_unable_to_get_keys_backup_data">هنگام دریافت داده‌های پشتیبان کلیدها، خطایی روی داد</string>
<string name="keys_backup_unable_to_get_trust_info">هنگام دریافت اطلاعات مورد اعتماد خطایی رخ داد</string>
<string name="create_room_federation_error">اتاق ایجاد شده است ، اما برخی از دعوت‌ها به این دلیل ارسال نشده است:
\n
\n%s</string>
<string name="create_room_settings_section">تنظیمات اتاق</string>
<string name="create_room_topic_hint">توضیحات</string>
<string name="create_room_topic_section">توضیح در مورد اتاق (اختیاری)</string>
<string name="create_room_name_section">نام اتاق</string>
<string name="event_redacted">پیام پاک شد</string>
<string name="error_user_already_logged_in">به نظر می‌رسد که شما در حال تلاش برای اتصال به یک سرور دیگر هستید. آیا می خواهید از اکانت خود خارج شوید؟</string>
<string name="identity_server_not_defined_for_password_reset">برای بازنشانی گذرواژه‌ی خود نیاز به پیکربندی سرور هویت‌سنجی دارید.</string>
<string name="identity_server_not_defined">شما از سرور هویت‌سنجی استفاده نمی‌کنید</string>
<string name="sas_error_unknown">خطای نامشخص</string>
<string name="sas_error_m_user_error">عدم تطابق کاربر</string>
<string name="sas_error_m_key_mismatch">عدم تطابق کلید</string>
<string name="sas_error_m_invalid_message">یک پیام نامتعبر دریافت شد</string>
<string name="sas_error_m_unexpected_message">نشست یک پیام غیرمنتظره دریافت کرد</string>
<string name="sas_error_m_mismatched_sas">SAS تطابق نداشت</string>
<string name="sas_error_m_mismatched_commitment">Hash تطابق نداشت</string>
<string name="sas_error_m_unknown_method">نشست نمی تواند در مورد روش‌های فرآیند تائید: hash ، MAC یا روش SAS به توافق برسد</string>
<string name="sas_error_m_unknown_transaction">نشست از آن تعامل اطلاعی ندارد</string>
<string name="sas_error_m_timeout">زمان فرآیند تائید به پایان رسید</string>
<string name="sas_error_m_user">کاربر فرآیند تائید را لغو کرد</string>
<string name="sas_incoming_request_notif_content">%s می‌خواهد نشست شما را تائید کند</string>
<string name="sas_incoming_request_notif_title">درخواست فرآیند تائید</string>
<string name="sas_verification_request_notification_channel">تائید تعاملی نشست</string>
<string name="sas_cancelled_by_me">فرآیند تائید لغو شد.
\nدلیل: %s</string>
<string name="sas_cancelled_by_other">طرف مقابل فرآیند تائید را لغو کرد.
\n%s</string>
<string name="sas_legacy_verification_button_title">از روش قدیمی برای فرآیند تائید استفاده کنید.</string>
<string name="sas_verifying_keys">چیزی نمایش داده نشده‌است؟ هنوز تمام کلاینت‌ها از امکان تائید به روش تعاملی پشتیبانی نمی‌کنند. از تائید به روش قدیمی استفاده کنید.</string>
<string name="sas_verified_successful">شما با موفقیت این نشست را تائید کردید.</string>
<string name="sas_waiting_for_partner">منتظر تائید طرف مقابل…</string>
<string name="sas_incoming_verification_request_dialog">شما یک درخواست فرآیند تأئید داخلی دریافت کرده اید.</string>
<string name="sas_decimal_description">این نشست را با تصدیق اعداد زیر که روی صفحه‌ی طرف مقابل نیز ظاهر شده‌است، تائید کنید</string>
<string name="sas_emoji_description">با تأئید یکسان بودن شکلک‌های زیر در صفحه طرف مقابل، این نشست را تأئید کنید</string>
<string name="sas_incoming_request_description_2">با تأئید این نشست، آن را به عنوان معتمد علامت‌گذاری می‌کنیم و همچنین نشست خود را به عنوان معتمد برای طرف مقابل علامت‌گذاری می کنیم.</string>
<string name="sas_verification_request_notification_channel_title">فرآیند تائید کلید</string>
<string name="sas_view_request_action">نمایش درخواست</string>
<string name="sas_cancelled_dialog_title">درخواست لغو شد</string>
<string name="sas_got_it">فهمیدم</string>
<string name="sas_verified_successful_description">محتوای گفتگوی امن شما با این کاربر رمزنگاری سرتاسر شده و امکان دسترسی به آن‌ها توسط فرد سومی مقدور نیست.</string>
<string name="sas_verified">نشست تائید شد!</string>
<string name="sas_incoming_request_description">این نشست را تأیید کنید تا به عنوان معتمد علامت‌گذاری شود. اعتماد به نشست‌ها هنگام استفاده از پیام های رمزشده به صورت سرتاسر ، به شما اطمینان بیشتری از امنیت گفتگو‌ها می‌دهد.</string>
<string name="sas_incoming_request_title">درخواست فرآیند تأیید داخلی</string>
<string name="sas_verify_start_button_title">شروع فرآیند تایید کردن</string>
<string name="sas_security_advise">برای امنیت بیشتر پیشنهاد می‌کنیم که این بخش را یا به صورت حضوری یا با استفاده از یک راهکار ارتباطی امن دیگر تکمیل کنید.</string>
<string name="sas_verify_title">با مقایسه‌کردن یک رشته‌ی متنی کوتاه تایید کنید.</string>
<string name="invalid_or_expired_credentials">شما به دلیل اطلاعات نادرست حساب کاربری یا انقضای نشست از حساب خارج شدید.</string>
<string name="autodiscover_well_known_autofill_confirm">از پیکربندی استفاده کنید</string>
<string name="autodiscover_well_known_autofill_dialog_message">المنت یک پیکربندی اختصاصی سرور برای دامنه‌ی شناسه‌ی کاربری شما \"%1$s\" تشخیص داده است:
\n%2$s</string>
<string name="autodiscover_well_known_autofill_dialog_title">تکمیل خودکار گزینه‌های مربوط به سرور</string>
<string name="keys_backup_info_title_signature">امضاء</string>
<string name="keys_backup_info_title_algorithm">الگوریتم</string>
<plurals name="keys_backup_info_keys_backing_up">
<item quantity="one">در حال پشتیبان‌گیری از %d کلید…</item>
<item quantity="other">در حال پشتیبان‌گیری از %d کلید…</item>
</plurals>
<string name="keys_backup_info_keys_all_backup_up">از تمام کلیدها نسخه‌ی پشتیبان ایجاد شد</string>
<string name="keys_backup_banner_in_progress">پشتیبان‌گیری از کلیدهای شما. این ممکن است چند دقیقه طول بکشد…</string>
<string name="keys_backup_banner_update_line2">مدیریت در بخش پشتیبان‌گیری از کلید</string>
<string name="keys_backup_banner_update_line1">کلیدهای رمزگذاری جدید</string>
<string name="new_recovery_method_popup_description">کلید پشتیبان گیر جدیدی شناسایی شده‌است.
\n
\nاگر شما این کلید را تنظیم نکرده‌اید ، ممکن است هکری در تلاش برای دسترسی به حساب شما باشد. رمز ورود حساب خود را تغییر دهید و بلافاصله در تنظیمات یک روش بازیابی جدید تنظیم کنید.</string>
<string name="new_recovery_method_popup_title">پشتیبان گیری از کلید جدید</string>
<string name="keys_backup_settings_delete_confirm_message">کلیدهای رمزگذاری پشتیبان شما از سرور حذف شوند؟ در اینن صورت دیگر نخواهید توانست از کلید بازیابی خود برای خواندن پیام رمزشده‌ی قبلی خود استفاده کنید.</string>
<string name="keys_backup_settings_delete_confirm_title">حذف نسخه‌ی پشتیبان</string>
<string name="keys_backup_settings_checking_backup_state">در حال بررسی وضعیت نسخه‌ی پشتیبان</string>
<string name="keys_backup_settings_delete_backup_error">حذف پشتیبان (%s) با خطا مواجه شد</string>
<string name="keys_backup_settings_deleting_backup">در حال حذف نسخه‌ی پشتیبان…</string>
<string name="keys_backup_settings_untrusted_backup">برای استفاده از کلید پشتیبان در این نشست، از کلید امنیتی یا کلید بازیابی خود استفاده کنید.</string>
<string name="keys_backup_get_trust_error">دریافت اطلاعات اعتمادسنجی برای نسخه‌ی پشتیبان (%s) انجام نشد.</string>
<string name="keys_backup_settings_invalid_signature_from_unverified_device">پشتیبان از نشست تأیید نشده %s امضا غیر‌معتبری دارد</string>
<string name="keys_backup_settings_invalid_signature_from_verified_device">پشتیبان از نشست تأیید شده %s امضا غیر‌معتبری دارد</string>
<string name="keys_backup_settings_valid_signature_from_unverified_device">پشتیبان از نشست تأیید نشده %s امضا معتبری دارد</string>
<string name="keys_backup_settings_valid_signature_from_verified_device">پشتیبان از نشست تأیید شده %s امضا معتبری دارد.</string>
<string name="keys_backup_settings_valid_signature_from_this_device">پشتیبان از این نشست امضای معتبری دارد.</string>
<string name="keys_backup_settings_signature_from_unknown_device">پشتیبان از نشست ناشناخته با شناسه %s امضا دارد.</string>
<string name="keys_backup_settings_status_not_setup">برای کلید‌های مربوط به این نشست، نسخه‌ی پشتیبانی وجود ندارد.</string>
<string name="keys_backup_settings_status_ko">پشتیبان‌گیری از کلیدها برای این نشست فعال نیست.</string>
<string name="keys_backup_settings_status_ok">پشتیبان‌گیری از کلیدها به درستی برای این نشست تنظیم شده است.</string>
<string name="keys_backup_settings_delete_backup_button">حذف نسخه پشتیبان</string>
<string name="keys_backup_settings_restore_backup_button">بازیابی از نسخه‌ی پشتیبان</string>
<string name="keys_backup_no_keysbackup_sdk_error">رمزنگاری نشست فعال نیست</string>
<plurals name="keys_backup_restore_success_description_part2">
<item quantity="one">%d کلید جدید به این نشست اضافه شد.</item>
<item quantity="other">%d کلید جدید به این نشست اضافه شد.</item>
</plurals>
<string name="keys_backup_restore_success_title">پشتیبان بازیابی شد %s !</string>
<plurals name="keys_backup_restore_success_description_part1">
<item quantity="one">پشتیبان با %d کلید بازیابی شد.</item>
<item quantity="other">پشتیبان با %d کلید بازیابی شد.</item>
</plurals>
<string name="keys_backup_recovery_code_error_decrypt">رمزگشایی با این کلید بازیابی امکان‌پذیر نیست: لطفاً بررسی کنید که کلید بازیابی را به درستی وارد کرده‌اید.</string>
<string name="keys_backup_unlock_button">رمزگشایی پیام‌های قبلی</string>
<string name="keys_backup_restoring_importing_keys_waiting_message">بارگذاری کلید‌ها…</string>
<string name="keys_backup_restoring_downloading_backup_waiting_message">در حال دریافت کلید‌های بازیابی…</string>
<string name="keys_backup_restoring_waiting_message">بازیابی نسخه پشتیبان:</string>
<string name="network_error_please_check_and_retry">خطای شبکه: لطفاً اتصال خود را بررسی کنید و دوباره امتحان کنید.</string>
<string name="keys_backup_passphrase_error_decrypt">رمزگشایی با این کلید امنیتی امکان‌پذیر نیست: لطفاً بررسی کنید که کلید امنیتی را به درستی وارد کرده‌اید.</string>
<string name="keys_backup_restore_with_key_helper">کلید بازیابی خود را گم کرده‌اید؟ می‌توانید کلید جدیدی را در تنظیمات تنظیم کنید.</string>
<string name="keys_backup_restore_with_recovery_key">از کلید بازیابی برای رمزگشایی پیام‌های رمزشده‌ی قبلی خود استفاده کنید</string>
<string name="keys_backup_restore_with_passphrase_helper_with_link">کلید امنیتی خود را نمی‌دانید؟ شما می‌توانید %s.</string>
<string name="keys_backup_restore_with_passphrase">از کلید امنیتی برای رمزگشایی پیام‌های رمزشده‌ی قبلی خود استفاده کنید</string>
<string name="keys_backup_setup_skip_msg">اگر از دستگاه خارج شوید یا دستگاه خود را از دست دهید، ممکن است امکان دسترسی به پیام های خود را نداشته باشید.</string>
<string name="keys_backup_setup_backup_started_message">کلیدهای رمزگذاری شما اکنون در پس زمینه در حال پشتیبان‌گیری بر روی سرور است. تهیه نسخه‌ی پشتیبان اولیه ممکن است چند دقیقه طول بکشد.</string>
<string name="keys_backup_setup_step3_generating_key_status">در حال تولید کلید پشتیبان با استفاده از کلید امنیتی، این ممکن است چند ثانیه زمان ببرد.</string>
<string name="keys_backup_setup_override_backup_prompt_description">به نظر می‌رسد شما در یک نشست دیگر کلید پشتیبان تهیه کرده‌اید. آیا می‌خواهید آن را با موردی که ایجاد می‌کنید جایگزین کنید؟</string>
<string name="keys_backup_setup_override_backup_prompt_tile">یک نسخه‌ی پشتیبان از قبل در سرور وجود دارد</string>
<string name="recovery_key_export_saved">کلید بازیابی ذخیره شد.</string>
<string name="recovery_key_export_saved_as_warning">کلید بازیابی در \\\'%s\\\' ذخیره شده است.
\n
\nهشدار: ممکن است در صورت حذف اپلیکیشن، این فایل نیز حذف شود.</string>
<string name="keys_backup_setup_step3_text_line2_no_passphrase">کلید بازیابی خود را در جایی بسیار امن نظیر برنامه‌های شناخته‌شده‌ی مدیریت گذرواژه نگه دارید</string>
<string name="keys_backup_setup_step3_text_line2">کلید بازیابی شما برای روز مبادا است - اگر کلید امنیتی خود را فراموش کنید می توانید از آن برای بازیابی دسترسی به پیام‌های رمزگذاری شده استفاده کنید.
\nکلید بازیابی خود را در جایی بسیار امن نظیر برنامه‌های شناخته‌شده‌ی مدیریت گذرواژه نگه دارید</string>
<string name="keys_backup_setup_step3_text_line1">درحال پشتیبان‌گیری از کلید‌های شما.</string>
<string name="keys_backup_setup_step1_recovery_key_alternative">یا، نسخه‌ی پشتیبان خود را با یک کلید بازیابی ایمن کنید، و آن را در جایی امن ذخیره کنید.</string>
<string name="keys_backup_setup_step2_text_description">ما یک نسخه رمزگذاری شده از کلیدهای شما را در سرور ذخیره خواهیم کرد. با استفاده از کلید امنیتی قوی، از نسخه‌ی پشتیبان خود محافظت کنید.
\n
\nبرای حداکثر امنیت، کلید امنیتی باید با رمز ورود حساب شما متفاوت باشد.</string>
<string name="keys_backup_setup_step1_description">پیام‌های موجود در اتاق های رمزگذاری شده به صورت سرتاسری رمز و ایمن می‌شوند. کلیدهای این پیام‌ها فقط در دسترس شما و گیرنده‌(ها) می‌باشد.
\n
\nبرای جلوگیری از از دست دادن کلیدهای خود به طور ایمن از آنها پشتیبان تهیه کنید.</string>
<string name="keys_backup_no_session_error">هیچ نشست ماتریکسی موجود نیست</string>
<string name="keys_backup_passphrase_not_empty_error_message">اگر می خواهید المنت یک کلید بازیابی ایجاد کند، لطفاً کلید امنیتی را حذف کنید.</string>
<string name="passphrase_passphrase_too_weak">کلید امنیتی بسیار ضعیف است</string>
<string name="passphrase_empty_error_message">لطفا کلید امنیتی را وارد کنید</string>
<string name="passphrase_passphrase_does_not_match">کلید امنیتی یکسان نبود</string>
<string name="passphrase_enter_passphrase">ورود کلید امنیتی</string>
<string name="passphrase_confirm_passphrase">تائید کلید امنیتی</string>
<string name="passphrase_create_passphrase">ایجاد کلید امنیتی</string>
<string name="no_valid_google_play_services_apk">APK معتبر Google Play Services پیدا نشد. اعلان‌ها ممکن است به درستی کار نکنند.</string>
<string name="x_plus">%d+</string>
<string name="plus_x">+%d</string>
<string name="generic_label_and_value">%1$s: %2$s</string>
<string name="generic_label">%1$s:</string>
<string name="show_info_area_only_errors">فقط برای خطاها</string>
<string name="show_info_area_messages_and_errors">برای پیام‌ها و خطاها</string>
<string name="show_info_area_always">همواره</string>
<string name="settings_info_area_show">نمایش جزيیات</string>
<string name="merged_events_collapse">جمع کردن</string>
<string name="merged_events_expand">باز کردن</string>
<string name="unknown_error">متأسفیم ، خطایی رخ داد</string>
<string name="resource_limit_hard_contact">لطفا %s تا استفاده از این سرویس را ادامه دهید.</string>
<string name="resource_limit_soft_contact">لطفا %s تا این محدودیت را برطرف نمائید.</string>
<string name="resource_limit_hard_mau">این سرور به محدودیت کاربر فعال ماهانه خود رسیده است.</string>
<string name="resource_limit_soft_mau"> این سرور به محدودیت کاربر فعال ماهانه خود رسیده است <b>بنابراین برخی از کاربران نمی توانند وارد سیستم شوند</b>.</string>
<string name="resource_limit_hard_default">سرور از یکی از محدودیت های منابع خود فراتر رفته است.</string>
<string name="resource_limit_soft_default">سرور از یکی از محدودیت های منابع خود فراتر رفته است <b>بنابراین برخی از کاربران نمی توانند وارد سیستم شوند</b>.</string>
<string name="room_tombstone_continuation_description">این اتاق ادامه‌ی گفتگوی دیگر است</string>
<string name="room_tombstone_continuation_link">گفتگو در اینجا ادامه دارد</string>
<string name="room_tombstone_versioned_description">این اتاق جایگزین شده و دیگر فعال نیست</string>
<string name="deactivate_account_delete_checkbox">لطفاً تمام پیام‌های ارسال شده‌ی من را حدف کن (هشدار: این امر باعث می شود کاربران آینده مکالمات را به صورت ناقص ببینند)</string>
<string name="deactivate_account_content">این کار باعث می شود حساب شما برای همیشه غیرقابل استفاده شود. شما قادر به ورود به سیستم نخواهید بود و هیچ کس نمی تواند شناسه کاربری مشابه را دوباره ثبت کند. این باعث می شود که حساب شما از همه اتاق هایی که در آن شرکت می کند خارج شود و جزئیات حساب شما از سرور هویت حذف می شود. <b>این اقدام برگشت ناپذیر است </b>.
\n
\nغیرفعال کردن حساب شما <b> به طور پیش فرض باعث نمی شود پیام های ارسالی شما را حذف کنیم </b>. اگر می خواهید پیام های شما را فراموش کنیم ، لطفاً کادر زیر را علامت بزنید.
\n
\nقابلیت مشاهده پیام در المنت مانند ایمیل است. حذف کردن پیام‌های شما به این معنی است که پیام‌هایی که ارسال کرده‌اید به هیچ کاربر جدید یا ثبت نشده‌ای نمایش داده نمی شود، اما کاربران ثبت‌نام شده که از قبل به این پیام ها دسترسی داشتند همچنان به نسخه خود دسترسی خواهند داشت.</string>
<string name="dialog_user_consent_content">برای ادامه استفاده از سرور %1$s باید شرایط و ضوابط را خوانده و موافقت کنید.</string>
<string name="markdown_has_been_disabled">Markdown غیرفعال شده است.</string>
<string name="markdown_has_been_enabled">Markdown فعال شده است.</string>
<string name="command_description_clear_scalar_token">جهت رفع مشکلات مدیریت برنامه‌های هیوا</string>
<string name="command_description_markdown">فعال و غیرفعال کردن markdown</string>
<string name="command_description_nick">نام مستعار شما را تغییر می‌دهد</string>
<string name="command_description_kick_user">اخراج کاربر با شناسه داده شده</string>
<string name="command_description_topic">بیشتر درباره‌ی اتاق توضیح دهید</string>
<string name="command_description_part_room">ترک اتاق</string>
<string name="command_description_join_room">با نام مستعار داده‌شده به اتاق بپیوندید</string>
<string name="command_description_invite_user">کاربر با شناسه داده شده را به این اتاق دعوت می کند</string>
<string name="command_description_deop_user">کاربر با شناسه داده شده را غیر‌فعال می‌کند</string>
<string name="command_description_op_user">سطح اختیارات و دسترسی کاربر را مشخص می‌کند</string>
<string name="command_description_unban_user">کاربر با شناسه داده شده را رفع مسدودیت می کند</string>
<string name="command_description_ban_user">کاربر با شناسه داده شده را مسدود می کند</string>
<string name="command_description_emote">نمایش اقدام</string>
<string name="command_problem_with_parameters">دستور \\\"%s\\\" پارامتر‌های بیشتری نیاز دارد، یا اینکه برخی پارامتر‌ها به درستی وارد نشده‌اند.</string>
<string name="unrecognized_command">دستور ناشناخته: %s</string>
<string name="command_error">خطا در اجرای دستور</string>
<string name="conference_call_warning_message">قابلیت همایش تصویری در حال توسعه بوده و ممکن است به درستی کار نکند.</string>
<string name="your_unverified_device_requesting_with_info">یک نشست تایید نشده، درخواست کلید‌های رمزنگاری را دارد.
\nنام نشست: %1$s
\nآخرین بازدید: %2$s
\nاگر در دستگاه دیگری وارد اکانت خود نشده‌اید این درخواست را نادیده بگیرید.</string>
<string name="your_unverified_device_requesting">نشست تایید نشده‌ی شما \\\'%s\\\' درخواست کلید‌های رمزنگاری را دارد.</string>
<string name="you_added_a_new_device_with_info">نشست جدید درخواست دریافت کلید‌های رمزنگاری را دارد.
\nنام نشست: %1$s
\nآخرین بازدید: %2$s
\nاگر در دستگاه دیگری وارد حساب خود نشده‌اید، این درخواست را نادیده بگیرید.</string>
<string name="you_added_a_new_device">شما یک نشست جدید \\\'%s\\\' اضافه کرده‌اید که درخواست کلید‌های رمزنگاری را دارد.</string>
<string name="widget_integration_invalid_parameter">پارامتر مورد نیاز معتبر نمی‌باشد.</string>
<string name="widget_integration_missing_parameter">پارامتر مورد نیاز وجود ندارد.</string>
<string name="historical_placeholder">جستجوی تاریخچه</string>
<string name="notification_unread_notified_messages_and_invitation">%1$s و %2$s</string>
<string name="notification_unread_notified_messages_in_room_and_invitation">%1$s در %2$s و %3$s</string>
<plurals name="notification_invitations">
<item quantity="one">%d دعوت</item>
<item quantity="other">%d دعوت</item>
</plurals>
<string name="directory_server_placeholder">آدرس سرور</string>
<string name="unknown_devices_alert_message">این اتاق شامل نشست‌های تایید نشده هستند.
\nهیچ تضمینی وجود ندارد این نشست‌های تائیدنشده متعلق به کاربرانی باشد که فکر می‌کنید.
\nتوضیه می‌شود افراد نشست‌های خود را تائید کنند. هر چند در صورتی که تمایلی به این کار ندارید، همچنان می‌توانید پیام ارسال کنید.
\n
\nنشستهای تایید نشده عبارتند از:</string>
<plurals name="encryption_import_room_keys_success">
<item quantity="one">%1$d از %2$d کلید با موفقیت بارگذاری شد.</item>
<item quantity="other">%1$d از %2$d کلید با موفقیت بارگذاری شدند.</item>
</plurals>
<string name="encryption_exported_successfully">کلیدها با موفقیت بر روی دستگاه استخراج شدند</string>
<string name="encryption_export_saved_as">کلیدهای رمزنگاری در \\\'%s\\\' ذخیره شد.
\n
\nهشدار: با حذف برنامه ممکن است این فایل نیز پاک شود.</string>
<string name="encryption_export_notice">لطفاً یک رمز برای رمزنگاری کلیدها وارد کنید. ورود این رمز برای بارگذاری کلیدها ضروری خواهد بود.</string>
<string name="device_name_warning">نام عمومی یک نشست برای افرادی که با آنها در ارتباط هستید، قابل مشاهده است</string>
<string name="encryption_information_device_name_with_warning">نام دستگاه (برای افرادی که با آنها ارتباط برقرار می کنید قابل مشاهده است)</string>
<string name="encryption_information_claimed_ed25519_fingerprint_key">اثرانگشت ادعایی Ed25519</string>
<string name="encryption_information_curve25519_identity_key">شناسه کلید Curve25519</string>
<string name="failed_to_load_timeline_position">%s سعی داشت پیام‌های خاصی را مشاهده کند که این پیام‌ها پیدا نشدند.</string>
<string name="room_settings_addresses_disable_main_address_prompt_msg">برای این اتاق آدرس اصلی‌ای مشخص نکرده‌اید.</string>
<string name="room_settings_addresses_invalid_format_dialog_body">\\\'%s\\\' یک قالب نامعتبر برای اسم مستعار است</string>
<string name="room_settings_no_flair">این اتاق در هیچ اجتماع خاصی قرار نگرفته‌است</string>
<string name="room_settings_room_access_entry_anyone_with_link_including_guest">هر کسی که لینک اتاق را دارد ( حتی اگر کاربر مهمان باشد)</string>
<string name="room_settings_room_access_entry_anyone_with_link_apart_guest">هر کسی که لینک اتاق را دارد (به جز کاربران مهمان‌)</string>
<string name="room_settings_room_access_entry_only_invited">تنها افرادی که دعوت شده‌اند</string>
<string name="room_settings_room_access_warning">برای لینک دادن به یک اتاق، آن اتاق باید آدرس داشته باشد.</string>
<string name="settings_flair">اجتماع</string>
<string name="settings_play_shutter_sound">پخش صدای شاتر دوربین</string>
<string name="media_source_choose">انتخاب کنید</string>
<string name="settings_default_media_source">منبع پیش‌فرض رسانه</string>
<string name="compression_opt_list_choose">انتخاب کنید</string>
<string name="settings_default_compression">فشرده سازی پیش‌فرض</string>
<string name="settings_media">رسانه</string>
<string name="account_additional_info">اطلاعات اضافه: %s</string>
<string name="account_phone_number_error">خطایی هنگام تایید شماره تلفن رخ داده است.</string>
<string name="settings_phone_number_code">کد</string>
<string name="settings_phone_number_verification_error">خطایی هنگام تایید شماره تلفن رخ داده است</string>
<string name="settings_phone_number_verification_error_empty_code">کد فعال‌سازی را وارد کنید</string>
<string name="settings_phone_number_verification_instruction">ما یک پیام کوتاه با کد فعال‌سازی ارسال کرده‌ایم. لطفاً این کد را در زیر وارد کنید.</string>
<string name="settings_phone_number_verification">تایید شماره تلفن</string>
<string name="settings_phone_number_error">شماره تلفن نامعتبر برای کشور مورد نظر</string>
<string name="settings_phone_number_label">شماره تلفن</string>
<string name="settings_phone_number_country_error">لطفا یک کشور را انتخاب نمائید</string>
<string name="settings_phone_number_country_label">کشور</string>
<string name="settings_select_country">انتخاب کشور</string>
<string name="settings_delete_threepid_confirmation">آیا از حذف %1$s %2$s مطمئن هستید؟</string>
<string name="account_email_error">خطایی در هنگام تایید ایمیل شما رخ داده است.</string>
<string name="account_phone_number_already_used_error">این شماره تلفن قبلا استفاده شده‌است.</string>
<string name="account_email_not_found_error">این آدرس ایمیل یافت نشد.</string>
<string name="account_email_already_used_error">این آدرس ایمیل قبلا استفاده شده‌است.</string>
<string name="account_email_validation_error">آدرس ایمیل تایید نشده‌است. لطفاً ایمیل خود را بررسی کنید و روی لینک ارسال شده، کلیک کنید. پس از انجام این کار، روی ادامه کلیک کنید.</string>
<string name="account_email_validation_message">لطفاً ایمیل خود را بررسی کنید و روی لینک ارسال شده، کلیک کنید. پس از انجام این کار، روی ادامه کلیک کنید.</string>
<string name="account_email_validation_title">در انتظار تایید</string>
<string name="disabled_integration_dialog_content">برای انجام این کار اجازه‌ی یکپارچه‌سازی را در تنظیمات فعال کنید.</string>
<string name="disabled_integration_dialog_title">یکپارچه‌سازی‌ها غیر فعال هستند</string>
<string name="devices_delete_dialog_text">این اقدام نیاز به احراز هویت دارد.
\nلطفا گذرواژه خود را وارد نمایید.</string>
<string name="devices_details_last_seen_format">%1$s @ %2$s</string>
<string name="devices_details_last_seen_title">آخرین اتصال</string>
<string name="devices_details_name_title">نام عمومی</string>
<string name="devices_details_device_name">به‌روزرسانی نام عمومی</string>
<string name="devices_details_id_title">شناسه</string>
<string name="devices_details_dialog_title">اطلاعات دستگاه</string>
<string name="settings_data_save_mode_summary">حالت صرفه‌جویی داده یک فیلتر خاص را اعمال می کند، که در نتیجه‌ی آن به‌روزرسانی‌های وضعیت آنلاین بودن و اعلان‌های تایپ فیلتر می شوند.</string>
<string name="settings_data_save_mode">حالت صرفه‌جویی در مصرف دیتا</string>
<string name="settings_opt_in_of_analytics_ok">بله ، من می خواهم کمک کنم!</string>
<string name="settings_opt_in_of_analytics_prompt">لطفاً برای کمک به ما در بهبود المنت، ارسال ناشناس تجزیه و تحلیل را فعال کنید.</string>
<string name="startup_notification_fdroid_battery_optim_message">المنت برای داشتن اعلان‌های قابل اعتماد نیاز به فعالیت در پس زمینه دارد.
\nدر صفحه بعدی از شما خواسته می شود که المنت همیشه در پس زمینه اجرا شود ، لطفاً آن را بپذیرید.</string>
<string name="settings_opt_in_of_analytics_summary">المنت اطلاعاتی را جمع آوری می کند و با ارسال آنان به صورت ناشناس به ما امکان بهبود برنامه را می‌دهد.</string>
<string name="settings_opt_in_of_analytics">ارسال داده های تجزیه و تحلیل</string>
<string name="settings_analytics">تجزیه و تحلیل</string>
<string name="startup_notification_fdroid_battery_optim_button_grant">مجوز دادن</string>
</resources>

View file

@ -1201,7 +1201,7 @@
<string name="fab_menu_create_chat">Messages directs</string>
<string name="create_room_title">Nouveau salon</string>
<string name="create_room_action_create">CRÉER</string>
<string name="create_room_name_hint">Nom du salon</string>
<string name="create_room_name_hint">Nom</string>
<string name="create_room_public_title">Public</string>
<string name="create_room_public_description">Tout le monde pourra rejoindre ce salon</string>
<string name="create_room_directory_title">Annuaire des salons</string>
@ -2184,4 +2184,15 @@
\n
\nÀ utiliser avec précaution, ceci peut entraîner des comportements inattendus.</string>
<string name="sent_verification_conclusion">Conclusion de la vérification</string>
<string name="warning_unsaved_change_discard">Annuler les changements</string>
<string name="warning_unsaved_change">Il y a des modifications non-enregistrées. Annuler les changements \?</string>
<string name="warning_room_not_created_yet">Le salon n\'est pas encore créé. Annuler la création du salon \?</string>
<string name="room_list_quick_actions_low_priority_remove">Retirer de la priorité faible</string>
<string name="room_list_quick_actions_low_priority_add">Ajouter à la priorité faible</string>
<string name="rotate_and_crop_screen_title">Pivoter et rogner</string>
<string name="attachment_type_dialog_title">Ajouter une image à partir de</string>
<string name="create_room_settings_section">Paramètres du salon</string>
<string name="create_room_topic_hint">Sujet</string>
<string name="create_room_topic_section">Sujet du salon (facultatif)</string>
<string name="create_room_name_section">Nom du salon</string>
</resources>

File diff suppressed because it is too large Load diff

View file

@ -528,7 +528,8 @@
<string name="room_settings_copy_room_address">Copia indirizzo stanza</string>
<string name="room_settings_addresses_e2e_enabled">Crittografia abilitata in questa stanza.</string>
<string name="room_settings_addresses_e2e_disabled">Crittografia disabilitata in questa stanza.</string>
<string name="room_settings_addresses_e2e_encryption_warning">Abilita crittografia\n(attenzione: non può più essere disabilitata!)</string>
<string name="room_settings_addresses_e2e_encryption_warning">Attiva crittografia
\n(attenzione: non potrà più essere disattivata!)</string>
<!-- Directory -->
<string name="directory_title">Elenco</string>
<string name="settings_theme">Tema</string>
@ -1167,8 +1168,9 @@
<string name="error_jitsi_not_supported_on_old_device">Purtroppo i vecchi dispositivi (quelli con Android precedenti al 5.0) non supportano le conferenze con Jitsi</string>
<string name="title_activity_verify_device">Verifica sessione</string>
<string name="encryption_information_unknown_ip">IP sconosciuto</string>
<string name="you_added_a_new_device_with_info">Una nuova sessione sta chiedendo le chiavi crittografiche. Nome sessione: %1$s
\nUltimo accesso: %2$s
<string name="you_added_a_new_device_with_info">Una nuova sessione sta chiedendo le chiavi crittografiche.
\nNome sessione: %1$s
\nUltimo accesso: %2$s
\nSe non hai effettuato l\'accesso da un\'altra sessione, ignora questa richiesta.</string>
<string name="your_unverified_device_requesting_with_info">Una sessione non verificata sta chiedendo le chiavi crittografiche.
\nNome sessione: %1$s
@ -1256,7 +1258,7 @@
<string name="fab_menu_create_chat">Messaggi diretti</string>
<string name="create_room_title">Nuova stanza</string>
<string name="create_room_action_create">CREA</string>
<string name="create_room_name_hint">Nome stanza</string>
<string name="create_room_name_hint">Nome</string>
<string name="create_room_public_title">Pubblica</string>
<string name="create_room_public_description">Tutti potranno entrare in questa stanza</string>
<string name="create_room_directory_title">Elenco stanze</string>
@ -2237,4 +2239,15 @@
<string name="settings_security_pin_code_grace_period_title">Richiedi il PIN dopo 2 minuti</string>
<string name="direct_room_created_summary_item">%s è entrato.</string>
<string name="settings_troubleshoot_test_push_loop_waiting_for_push">L\'applicazione è in attesa del PUSH</string>
<string name="warning_unsaved_change_discard">Scarta modifiche</string>
<string name="warning_unsaved_change">Ci sono modifiche non salvate. Scartare le modifiche\?</string>
<string name="warning_room_not_created_yet">La stanza non è ancora stata creata. Annullare la creazione della stanza\?</string>
<string name="room_list_quick_actions_low_priority_remove">Rimuovi da priorità bassa</string>
<string name="room_list_quick_actions_low_priority_add">Aggiungi in priorità bassa</string>
<string name="rotate_and_crop_screen_title">Ruota e ritaglia</string>
<string name="attachment_type_dialog_title">Aggiungi immagine da</string>
<string name="create_room_settings_section">Impostazioni stanza</string>
<string name="create_room_topic_hint">Argomento</string>
<string name="create_room_topic_section">Argomento stanza (facoltativo)</string>
<string name="create_room_name_section">Nome stanza</string>
</resources>

View file

@ -541,9 +541,9 @@
<string name="encryption_export_export">Exportar</string>
<string name="passphrase_enter_passphrase">Digite a frase secreta</string>
<string name="passphrase_confirm_passphrase">Confirme a frase secreta</string>
<string name="encryption_export_saved_as">As chaves de sala E2E foram salvas em \'%s\'
Atenção: este arquivo poderá ser apagado se o aplicativo for desinstalado.</string>
<string name="encryption_export_saved_as">As chaves E2E da sala foram salvas em \'%s\'.
\n
\nAtenção: este arquivo poderá ser apagado se o aplicativo for desinstalado.</string>
<string name="encryption_import_e2e_room_keys">Importar chaves de sala E2E</string>
<string name="encryption_import_room_keys">Importar chaves de sala</string>
<string name="encryption_import_room_keys_summary">Importar as chaves de um arquivo local</string>
@ -887,7 +887,8 @@ Atenção: este arquivo poderá ser apagado se o aplicativo for desinstalado.</s
<string name="settings_troubleshoot_diagnostic_failure_status_no_quickfix">Um ou mais testes falharam, por favor relate um erro para nos ajudar a investigar.</string>
<string name="settings_troubleshoot_test_system_settings_title">Configurações do sistema</string>
<string name="settings_troubleshoot_test_system_settings_success">Notificações estão ativadas nas configurações do sistema.</string>
<string name="settings_troubleshoot_test_system_settings_failed">Notificações estão desativadas nas configurações do sistema. Por favor, revise as configurações do sistema.</string>
<string name="settings_troubleshoot_test_system_settings_failed">Notificações estão desativadas nas configurações do sistema.
\nPor favor, revise as configurações do sistema.</string>
<string name="open_settings">Abra as Configurações</string>
<string name="settings_troubleshoot_test_account_settings_title">Configurações da conta</string>
<string name="settings_troubleshoot_test_account_settings_success">Notificações estão ativadas para sua conta.</string>
@ -902,23 +903,23 @@ Atenção: este arquivo poderá ser apagado se o aplicativo for desinstalado.</s
<string name="settings_troubleshoot_test_device_settings_quickfix">Ativar</string>
<string name="settings_troubleshoot_test_play_services_title">Versão do Google Play Services</string>
<string name="settings_troubleshoot_test_play_services_success">Google Play Services APK está disponível e atualizado.</string>
<string name="settings_troubleshoot_test_play_services_failed">Element usa Google Play Services para entregar mensagens push, mas isto não parece está configurado corretamente:
%1$s</string>
<string name="settings_troubleshoot_test_play_services_failed">Element usa Google Play Services para entregar mensagens push, mas isto não parece estar configurado corretamente:
\n%1$s</string>
<string name="settings_troubleshoot_test_play_services_quickfix">Consertar Play Services</string>
<string name="settings_troubleshoot_test_fcm_title">Token do Firebase</string>
<string name="settings_troubleshoot_test_fcm_success">Token FCM recuperado com sucesso:
%1$s</string>
\n%1$s</string>
<string name="call_anyway">Ligar mesmo assim</string>
<string name="settings_troubleshoot_test_fcm_failed">Falha ao recuperar o token do FCM:
%1$s</string>
\n%1$s</string>
<string name="settings_troubleshoot_test_token_registration_title">Registro do token do Firebase</string>
<string name="settings_troubleshoot_test_token_registration_success">Token FCM registrado com sucesso no HomeServer.</string>
<string name="settings_troubleshoot_test_token_registration_failed">Falha ao registrar o token FCM no HomeServer:
%1$s</string>
<string name="settings_troubleshoot_test_token_registration_failed">Falha ao registrar o token FCM no servidor local:
\n%1$s</string>
<string name="settings_troubleshoot_test_foreground_service_started_title">Serviço de Notificações</string>
<string name="settings_troubleshoot_test_foreground_service_startedt_success">Serviço de Notificações está em execução.</string>
<string name="settings_troubleshoot_test_foreground_service_started_failed">Serviço de Notificações não está em execução.
Tente reiniciar a aplicação.</string>
\nTente reiniciar o aplicativo.</string>
<string name="settings_troubleshoot_test_foreground_service_started_quickfix">Iniciar Serviço</string>
<string name="settings_troubleshoot_test_service_restart_success">O serviço foi encerrado e reiniciado automaticamente.</string>
<string name="settings_troubleshoot_test_service_restart_failed">Falha ao reiniciar Serviço</string>
@ -943,7 +944,7 @@ Tente reiniciar a aplicação.</string>
<string name="settings_show_avatar_display_name_changes_messages_summary">Mostrar alterações de foto de perfil e de nome e sobrenome.</string>
<string name="startup_notification_fdroid_battery_optim_title">Conexão em segundo plano</string>
<string name="startup_notification_fdroid_battery_optim_message">Element precisa manter um baixo impacto na conexão em segundo plano para ter notificações confiáveis.
Na próxima tela, você será solicitado a permitir que o Element funcione sempre em segundo plano, por favor aceite.</string>
\nNa próxima tela, você será solicitado a permitir que o Element funcione sempre em segundo plano. Por favor, aceite.</string>
<string name="settings_troubleshoot_test_bg_restricted_success">Restrições de segundo plano estão desativadas para o Element. Este teste deve ser realizado usando dados móveis (sem Wi-Fi).
\n%1$s</string>
<string name="settings_troubleshoot_test_bg_restricted_failed">Restrições em segundo plano estão ativadas para o Element.
@ -1189,7 +1190,8 @@ Na próxima tela, você será solicitado a permitir que o Element funcione sempr
<string name="room_widget_webview_read_protected_media">Ler as mídias protegidos por DRM</string>
<string name="integration_manager_not_configured">O gerenciador de integrações não está configurado.</string>
<string name="widget_integration_review_terms">Para continuar, você precisa aceitar os termos de serviço.</string>
<string name="you_added_a_new_device_with_info">Uma nova sessão está solicitando chaves de criptografia. Nome da sessão: %1$s
<string name="you_added_a_new_device_with_info">Uma nova sessão está solicitando chaves de criptografia.
\nNome da sessão: %1$s
\nVisto por último às: %2$s
\nSe você não fez login em outra sessão, ignore essa solicitação.</string>
<string name="your_unverified_device_requesting_with_info">Uma nova sessão está solicitando chaves de criptografia.
@ -1401,7 +1403,7 @@ Na próxima tela, você será solicitado a permitir que o Element funcione sempr
<string name="fab_menu_create_chat">Conversas</string>
<string name="create_room_title">Nova Sala</string>
<string name="create_room_action_create">CRIAR</string>
<string name="create_room_name_hint">Nome da sala</string>
<string name="create_room_name_hint">Nome</string>
<string name="create_room_public_title">Público</string>
<string name="create_room_public_description">Qualquer pessoa poderá entrar nesta sala</string>
<string name="create_room_directory_title">Lista de Salas</string>
@ -1652,8 +1654,7 @@ Na próxima tela, você será solicitado a permitir que o Element funcione sempr
<string name="login_signup_cancel_confirmation_title">Atenção</string>
<string name="login_signup_cancel_confirmation_content">Sua conta ainda não foi criada.
\n
\n
\nParar o processo de registro\?</string>
\nCancelar o processo de registro\?</string>
<string name="login_a11y_choose_matrix_org">Selecione matrix.org</string>
<string name="login_a11y_choose_modular">Selecione Element nos Serviços de Matrix</string>
<string name="login_a11y_choose_other">Selecione um servidor personalizado</string>
@ -1703,9 +1704,8 @@ Na próxima tela, você será solicitado a permitir que o Element funcione sempr
\nEntre novamente para acessar os dados e mensagens da sua conta.</string>
<string name="soft_logout_clear_data_dialog_e2e_warning_content">Você perderá o acesso as mensagens seguras a menos que você faça login para recuperar suas chaves de criptografia.</string>
<string name="soft_logout_clear_data_dialog_submit">Limpar dados</string>
<string name="soft_logout_sso_not_same_user_error">A sessão atual é para o usuário %1$s e você fornece credenciais para o usuário %2$s. Isto não é suportado por Element.
\n
\nPor favor, primeiro limpe os dados, depois faça o login novamente em outra conta.</string>
<string name="soft_logout_sso_not_same_user_error">A sessão atual é para o usuário %1$s e você fornece credenciais para o usuário %2$s. Isto não é suportado no Element.
\nPor favor, limpe os dados do aplicativo, depois faça o login novamente em outra conta.</string>
<string name="permalink_malformed">Seu link do matrix.to foi malformado</string>
<string name="bug_report_error_too_short">A descrição é curta demais</string>
<string name="notification_initial_sync">Sincronia Inicial…</string>
@ -2239,4 +2239,15 @@ Na próxima tela, você será solicitado a permitir que o Element funcione sempr
<item quantity="one">%d convite</item>
<item quantity="other">%d convites</item>
</plurals>
<string name="room_list_quick_actions_low_priority_remove">Remover baixa prioridade</string>
<string name="room_list_quick_actions_low_priority_add">Definir como baixa prioridade</string>
<string name="attachment_type_dialog_title">Adicionar imagem</string>
<string name="warning_unsaved_change_discard">Descartar alterações</string>
<string name="warning_unsaved_change">Existem alterações não salvas. Descartar as alterações\?</string>
<string name="warning_room_not_created_yet">A sala ainda não foi criada. Cancelar a criação da sala\?</string>
<string name="rotate_and_crop_screen_title">Girar e recortar</string>
<string name="create_room_settings_section">Configurações da sala</string>
<string name="create_room_topic_hint">Descrição</string>
<string name="create_room_topic_section">Descrição da sala (opcional)</string>
<string name="create_room_name_section">Nome da sala</string>
</resources>

View file

@ -851,14 +851,16 @@
<item quantity="other">%d мин.</item>
</plurals>
<plurals name="format_time_h">
<item quantity="one">%d час</item>
<item quantity="few">%d часа</item>
<item quantity="many">%d часов</item>
<item quantity="one">%dh</item>
<item quantity="few">%dh</item>
<item quantity="many">%dh</item>
<item quantity="other">%dh</item>
</plurals>
<plurals name="format_time_d">
<item quantity="one">%d день</item>
<item quantity="few">%d дни</item>
<item quantity="many">%d дней</item>
<item quantity="one">%dd</item>
<item quantity="few">%dd</item>
<item quantity="many">%dd</item>
<item quantity="other">%dd</item>
</plurals>
<string name="room_participants_now">Сейчас %1$s</string>
<string name="room_participants_ago">%1$s %2$s назад</string>
@ -1292,7 +1294,7 @@
<string name="fab_menu_create_chat">Диалоги</string>
<string name="create_room_title">Новая комната</string>
<string name="create_room_action_create">СОЗДАТЬ</string>
<string name="create_room_name_hint">Имя комнаты</string>
<string name="create_room_name_hint">Имя</string>
<string name="create_room_public_title">Публичные</string>
<string name="create_room_public_description">Любой сможет присоединиться к этой комнате</string>
<string name="create_room_directory_title">Каталог номеров</string>
@ -2282,10 +2284,21 @@
</plurals>
<string name="settings_troubleshoot_test_notification_notification_clicked">Уведомление нажато!</string>
<string name="settings_troubleshoot_test_notification_notice">Пожалуйста, нажмите на уведомление. Если вы не видите уведомления, проверьте настройки системы.</string>
<string name="settings_troubleshoot_test_notification_title">Визуализировать уведомления</string>
<string name="settings_troubleshoot_test_notification_title">Отображение уведомления</string>
<string name="settings_troubleshoot_test_push_notification_content">Вы видите уведомление! Нажмите сюда!</string>
<string name="settings_troubleshoot_test_push_loop_failed">Не удалось получить push-уведомление. Переустановка приложения может быть возможным решением.</string>
<string name="settings_troubleshoot_test_push_loop_success">Приложение получило push-уведомление</string>
<string name="settings_troubleshoot_test_push_loop_waiting_for_push">Приложение ожидает push-уведомление</string>
<string name="settings_troubleshoot_test_push_loop_title">Тестирование push-уведомлений</string>
<string name="warning_unsaved_change">Есть несохраненные изменения. Отменить изменения\?</string>
<string name="room_list_quick_actions_low_priority_remove">Удалить из низкого приоритета</string>
<string name="rotate_and_crop_screen_title">Повернуть и обрезать</string>
<string name="create_room_settings_section">Настройки комнаты</string>
<string name="create_room_topic_section">Тема комнаты (опционально)</string>
<string name="warning_unsaved_change_discard">Отменить изменения</string>
<string name="warning_room_not_created_yet">Комната ещё не создана. Отменить создание комнаты\?</string>
<string name="room_list_quick_actions_low_priority_add">Добавить к низкому приоритету</string>
<string name="attachment_type_dialog_title">Добавить изображение из</string>
<string name="create_room_topic_hint">Тема</string>
<string name="create_room_name_section">Название Комнаты</string>
</resources>

View file

@ -1188,7 +1188,7 @@
<string name="fab_menu_create_chat">Mesazhe të Drejtpërdrejtë</string>
<string name="create_room_title">Dhomë e Re</string>
<string name="create_room_action_create">KRIJOJE</string>
<string name="create_room_name_hint">Emër dhome</string>
<string name="create_room_name_hint">Emër</string>
<string name="create_room_public_title">Publike</string>
<string name="create_room_public_description">Kushdo do të jetë në gjendje të marrë pjesë në këtë dhomë</string>
<string name="create_room_directory_title">Drejtori Dhomash</string>
@ -2166,4 +2166,15 @@
<string name="search_banned_user_hint">Filtro përdorues të dëbuar</string>
<string name="no_permissions_to_start_webrtc_call_in_direct_room">Skeni leje të nisni një thirrje</string>
<string name="no_permissions_to_start_conf_call_in_direct_room">Skeni leje të nisni një thirrje konferencë</string>
<string name="warning_unsaved_change_discard">Hidhi tej ndryshimet</string>
<string name="warning_unsaved_change">Ka ndryshime të paruajtura. Të hidhen tej ndryshimet\?</string>
<string name="warning_room_not_created_yet">Dhoma sështë krijuar ende. Të anulohet krijimi i dhomës\?</string>
<string name="room_list_quick_actions_low_priority_remove">Hiqe prej përparësie të ulët</string>
<string name="room_list_quick_actions_low_priority_add">Shtoje te përparësi e ulët</string>
<string name="rotate_and_crop_screen_title">Rrotullojeni dhe qetheni</string>
<string name="attachment_type_dialog_title">Shtoni figurë prej</string>
<string name="create_room_settings_section">Rregullime dhome</string>
<string name="create_room_topic_hint">Subjekt</string>
<string name="create_room_topic_section">Subjekt dhome (në daçi)</string>
<string name="create_room_name_section">Emër dhome</string>
</resources>

View file

@ -1143,7 +1143,8 @@
<string name="unknown_devices_alert_title">Rummet innehåller okända sessioner</string>
<string name="settings_labs_enable_send_voice_summary">Detta alternativ kräver en tredjepartsapplikation för att spela in meddelandena.</string>
<string name="you_added_a_new_device">Du har lagt till en ny session \'%s\', vilken begär krypteringsnycklar.</string>
<string name="you_added_a_new_device_with_info">En ny session begär krypteringsnycklar. Sessionsnamn: %1$s
<string name="you_added_a_new_device_with_info">En ny session begär krypteringsnycklar.
\nSessionsnamn: %1$s
\nSenast sedd: %2$s
\nOm du inte loggade in i en annan session, ignorera denna begäran.</string>
<string name="your_unverified_device_requesting">Din overifierade session \'%s\' begär krypteringsnycklar.</string>
@ -1681,7 +1682,7 @@
<string name="room_preview_world_readable_room_not_supported_yet">Förhandsgranskning av världsläsbara rum stöds inte än av Element</string>
<string name="create_room_title">Nytt rum</string>
<string name="create_room_action_create">SKAPA</string>
<string name="create_room_name_hint">Rumsnamn</string>
<string name="create_room_name_hint">Namn</string>
<string name="create_room_public_title">Publikt</string>
<string name="create_room_public_description">Vem som helst kommer kunna gå med i det här rummet</string>
<string name="create_room_directory_title">Rumskatalog</string>
@ -2175,4 +2176,15 @@
<string name="no_permissions_to_start_webrtc_call_in_direct_room">Du har inte behörighet att starta ett samtal</string>
<string name="no_permissions_to_start_conf_call_in_direct_room">Du har inte behörighet att starta ett gruppsamtal</string>
<string name="reset">Återställ</string>
<string name="create_room_topic_hint">Ämne</string>
<string name="warning_unsaved_change_discard">Förkasta ändringar</string>
<string name="warning_unsaved_change">Det finns osparade ändringar. Förkasta ändringarna\?</string>
<string name="warning_room_not_created_yet">Det här rummet har inte skapats än. Avbryt rumsskapande\?</string>
<string name="room_list_quick_actions_low_priority_remove">Ta bort från lågprioriterade</string>
<string name="room_list_quick_actions_low_priority_add">Lägg till i lågprioriterade</string>
<string name="rotate_and_crop_screen_title">Rotera och beskär</string>
<string name="attachment_type_dialog_title">Lägg till bild från</string>
<string name="create_room_settings_section">Rumsinställningar</string>
<string name="create_room_topic_section">Rumsämne (valfritt)</string>
<string name="create_room_name_section">Rumsnamn</string>
</resources>

View file

@ -0,0 +1,9 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="title_activity_settings">Tisɣal</string>
<string name="title_activity_home">Tuzinin</string>
<string name="status_theme">Asgum Status.im</string>
<string name="resources_script">Latn</string>
<string name="resources_country_code">MA</string>
<string name="resources_language">tzm</string>
</resources>

View file

@ -1082,8 +1082,9 @@
<string name="error_jitsi_not_supported_on_old_device">抱歉,使用 Jitsi 建立會議通話在舊裝置上並不支援Android 系統版本小於 5.0 的裝置)</string>
<string name="title_activity_verify_device">驗證工作階段</string>
<string name="encryption_information_unknown_ip">未知的 IP</string>
<string name="you_added_a_new_device_with_info">有新工作階段正在要求加密金鑰。 工作階段名稱:%1$s
\n上次檢視%2$s
<string name="you_added_a_new_device_with_info">有新工作階段正在要求加密金鑰。
\n工作階段名稱%1$s
\n上次檢視%2$s
\n如果您沒有登入其他工作階段請忽略本請求。</string>
<string name="your_unverified_device_requesting_with_info">有未驗證的工作階段正在要求加密金鑰。
\n工作階段名稱%1$s
@ -1172,7 +1173,7 @@
<string name="fab_menu_create_chat">直接訊息</string>
<string name="create_room_title">新聊天室</string>
<string name="create_room_action_create">建立</string>
<string name="create_room_name_hint">聊天室名稱</string>
<string name="create_room_name_hint">名稱</string>
<string name="create_room_public_title">公開</string>
<string name="create_room_public_description">任何人都可以加入此聊天室</string>
<string name="create_room_directory_title">聊天室目錄</string>
@ -2137,4 +2138,15 @@
<string name="no_permissions_to_start_conf_call_in_direct_room">您沒有開始會議通話的權限</string>
<string name="reset">重設</string>
<string name="settings_security_pin_code_use_biometrics_title">啟用生物識別技術</string>
<string name="warning_unsaved_change_discard">放棄變更</string>
<string name="warning_unsaved_change">有未儲存的變更。要放棄變更嗎?</string>
<string name="warning_room_not_created_yet">聊天室尚未建立。取消建立聊天室?</string>
<string name="room_list_quick_actions_low_priority_remove">從低優先度移除</string>
<string name="room_list_quick_actions_low_priority_add">新增到低優先度</string>
<string name="rotate_and_crop_screen_title">旋轉並裁切</string>
<string name="attachment_type_dialog_title">新增圖片從</string>
<string name="create_room_settings_section">聊天室設定</string>
<string name="create_room_topic_hint">主題</string>
<string name="create_room_topic_section">聊天室主題(選擇性)</string>
<string name="create_room_name_section">聊天是名稱</string>
</resources>