Merge branch 'develop' into feature/bma/limitComposerHeight
This commit is contained in:
55
CHANGES.md
55
CHANGES.md
@@ -1,3 +1,58 @@
|
||||
Changes in Element X v25.12.0
|
||||
=============================
|
||||
|
||||
<!-- Release notes generated using configuration in .github/release.yml at v25.12.0 -->
|
||||
|
||||
## What's Changed
|
||||
### ✨ Features
|
||||
* Room list: enable latest event sorter. by @bmarty in https://github.com/element-hq/element-x-android/pull/5825
|
||||
* Add room list indicators about last message by @bmarty in https://github.com/element-hq/element-x-android/pull/5824
|
||||
### 🙌 Improvements
|
||||
* Change : improve room and space member list by @ganfra in https://github.com/element-hq/element-x-android/pull/5806
|
||||
* Change : security and privacy rework by @ganfra in https://github.com/element-hq/element-x-android/pull/5816
|
||||
### 🐛 Bugfixes
|
||||
* Ensure confirmation dialog is displayed when an admin add other admin to a room by @bmarty in https://github.com/element-hq/element-x-android/pull/5786
|
||||
* Edit user profile cancel confirmation by @bmarty in https://github.com/element-hq/element-x-android/pull/5788
|
||||
* Fix editing owner by @bmarty in https://github.com/element-hq/element-x-android/pull/5807
|
||||
* Uris should take precedence in plain text intents by @jmartinesp in https://github.com/element-hq/element-x-android/pull/5785
|
||||
* Fix long voice recording by @bmarty in https://github.com/element-hq/element-x-android/pull/5821
|
||||
### 🗣 Translations
|
||||
* Sync Strings by @ElementBot in https://github.com/element-hq/element-x-android/pull/5792
|
||||
* Sync Strings by @ElementBot in https://github.com/element-hq/element-x-android/pull/5830
|
||||
### 🧱 Build
|
||||
* Use regex to check forbidden terms by @jmartinesp in https://github.com/element-hq/element-x-android/pull/5784
|
||||
* Update Gradle Wrapper from 8.14.3 to 9.2.1 by @ElementBot in https://github.com/element-hq/element-x-android/pull/5751
|
||||
### Dependency upgrades
|
||||
* fix(deps): update dependency androidx.sqlite:sqlite-ktx to v2.6.2 by @renovate[bot] in https://github.com/element-hq/element-x-android/pull/5769
|
||||
* fix(deps): update datastore to v1.2.0 by @renovate[bot] in https://github.com/element-hq/element-x-android/pull/5789
|
||||
* chore(deps): update peter-evans/create-pull-request action to v7.0.9 by @renovate[bot] in https://github.com/element-hq/element-x-android/pull/5793
|
||||
* fix(deps): update dependency io.nlopez.compose.rules:detekt to v0.4.28 by @renovate[bot] in https://github.com/element-hq/element-x-android/pull/5795
|
||||
* fix(deps): update metro to v0.7.7 by @renovate[bot] in https://github.com/element-hq/element-x-android/pull/5771
|
||||
* chore(deps): update plugin sonarqube to v7.1.0.6387 by @renovate[bot] in https://github.com/element-hq/element-x-android/pull/5783
|
||||
* fix(deps): update dependency io.github.sergio-sastre.composablepreviewscanner:android to v0.7.2 by @renovate[bot] in https://github.com/element-hq/element-x-android/pull/5799
|
||||
* fix(deps): update dependency org.matrix.rustcomponents:sdk-android to v25.11.24 by @renovate[bot] in https://github.com/element-hq/element-x-android/pull/5796
|
||||
* fix(deps): update dependency io.sentry:sentry-android to v8.27.1 by @renovate[bot] in https://github.com/element-hq/element-x-android/pull/5803
|
||||
* fix(deps): update dependency io.element.android:emojibase-bindings to v1.5.0 by @renovate[bot] in https://github.com/element-hq/element-x-android/pull/5801
|
||||
* fix(deps): update roborazzi to v1.52.0 by @renovate[bot] in https://github.com/element-hq/element-x-android/pull/5804
|
||||
* fix(deps): update dependency org.maplibre.gl:android-sdk to v12.2.0 by @renovate[bot] in https://github.com/element-hq/element-x-android/pull/5814
|
||||
* chore(deps): update actions/checkout action to v6 by @renovate[bot] in https://github.com/element-hq/element-x-android/pull/5805
|
||||
* fix(deps): update dependency com.google.testparameterinjector:test-parameter-injector to v1.20 by @renovate[bot] in https://github.com/element-hq/element-x-android/pull/5800
|
||||
* fix(deps): update android.gradle.plugin to v8.13.1 by @renovate[bot] in https://github.com/element-hq/element-x-android/pull/5260
|
||||
* fix(deps): update dependency org.matrix.rustcomponents:sdk-android to v25.11.26 by @renovate[bot] in https://github.com/element-hq/element-x-android/pull/5818
|
||||
* fix(deps): update dependencyanalysis to v3.5.1 by @renovate[bot] in https://github.com/element-hq/element-x-android/pull/5819
|
||||
* fix(deps): update dependency com.posthog:posthog-android to v3.27.0 by @renovate[bot] in https://github.com/element-hq/element-x-android/pull/5834
|
||||
* fix(deps): update dependency io.element.android:element-call-embedded to v0.16.3 by @renovate[bot] in https://github.com/element-hq/element-x-android/pull/5839
|
||||
* Upgrade the Rust SDK to `v25.12.2` by @jmartinesp in https://github.com/element-hq/element-x-android/pull/5838
|
||||
### Others
|
||||
* misc : use newLatestEvent api from sdk by @ganfra in https://github.com/element-hq/element-x-android/pull/5809
|
||||
* Inject RoomMemberListDataSource in the presenter constructor. by @bmarty in https://github.com/element-hq/element-x-android/pull/5822
|
||||
* Add more performance checks by @jmartinesp in https://github.com/element-hq/element-x-android/pull/5767
|
||||
* Load `JoinedRoom` in home screen, pass it to the room flow by @jmartinesp in https://github.com/element-hq/element-x-android/pull/5817
|
||||
* Revert "fix(deps): update dependency com.posthog:posthog-android to v3.27.0" by @jmartinesp in https://github.com/element-hq/element-x-android/pull/5836
|
||||
|
||||
|
||||
**Full Changelog**: https://github.com/element-hq/element-x-android/compare/v25.11.3...v25.12.0
|
||||
|
||||
Changes in Element X v25.11.3
|
||||
=============================
|
||||
|
||||
|
||||
@@ -39,7 +39,6 @@ import com.bumble.appyx.navmodel.backstack.operation.replace
|
||||
import com.bumble.appyx.navmodel.backstack.operation.singleTop
|
||||
import dev.zacsweers.metro.Assisted
|
||||
import dev.zacsweers.metro.AssistedInject
|
||||
import im.vector.app.features.analytics.plan.JoinedRoom
|
||||
import io.element.android.annotations.ContributesNode
|
||||
import io.element.android.appnav.loggedin.LoggedInNode
|
||||
import io.element.android.appnav.loggedin.MediaPreviewConfigMigration
|
||||
@@ -84,6 +83,7 @@ import io.element.android.libraries.matrix.api.core.RoomIdOrAlias
|
||||
import io.element.android.libraries.matrix.api.core.UserId
|
||||
import io.element.android.libraries.matrix.api.core.toRoomIdOrAlias
|
||||
import io.element.android.libraries.matrix.api.permalink.PermalinkData
|
||||
import io.element.android.libraries.matrix.api.room.JoinedRoom
|
||||
import io.element.android.libraries.matrix.api.sync.SyncService
|
||||
import io.element.android.libraries.matrix.api.verification.SessionVerificationServiceListener
|
||||
import io.element.android.libraries.matrix.api.verification.VerificationRequest
|
||||
@@ -109,6 +109,7 @@ import java.util.UUID
|
||||
import kotlin.time.Duration.Companion.minutes
|
||||
import kotlin.time.Duration.Companion.seconds
|
||||
import kotlin.time.toKotlinDuration
|
||||
import im.vector.app.features.analytics.plan.JoinedRoom as JoinedRoomAnalyticsEvent
|
||||
|
||||
@ContributesNode(SessionScope::class)
|
||||
@AssistedInject
|
||||
@@ -265,7 +266,7 @@ class LoggedInFlowNode(
|
||||
data class Room(
|
||||
val roomIdOrAlias: RoomIdOrAlias,
|
||||
val serverNames: List<String> = emptyList(),
|
||||
val trigger: JoinedRoom.Trigger? = null,
|
||||
val trigger: JoinedRoomAnalyticsEvent.Trigger? = null,
|
||||
val roomDescription: RoomDescription? = null,
|
||||
val initialElement: RoomNavigationTarget = RoomNavigationTarget.Root(),
|
||||
val targetId: UUID = UUID.randomUUID(),
|
||||
@@ -315,8 +316,13 @@ class LoggedInFlowNode(
|
||||
}
|
||||
NavTarget.Home -> {
|
||||
val callback = object : HomeEntryPoint.Callback {
|
||||
override fun navigateToRoom(roomId: RoomId) {
|
||||
backstack.push(NavTarget.Room(roomId.toRoomIdOrAlias()))
|
||||
override fun navigateToRoom(roomId: RoomId, joinedRoom: JoinedRoom?) {
|
||||
backstack.push(
|
||||
NavTarget.Room(
|
||||
roomIdOrAlias = roomId.toRoomIdOrAlias(),
|
||||
initialElement = RoomNavigationTarget.Root(joinedRoom = joinedRoom)
|
||||
)
|
||||
)
|
||||
}
|
||||
|
||||
override fun navigateToSettings() {
|
||||
@@ -365,7 +371,7 @@ class LoggedInFlowNode(
|
||||
val target = NavTarget.Room(
|
||||
roomIdOrAlias = data.roomIdOrAlias,
|
||||
serverNames = data.viaParameters,
|
||||
trigger = JoinedRoom.Trigger.Timeline,
|
||||
trigger = JoinedRoomAnalyticsEvent.Trigger.Timeline,
|
||||
initialElement = RoomNavigationTarget.Root(data.eventId),
|
||||
)
|
||||
if (pushToBackstack) {
|
||||
@@ -479,7 +485,7 @@ class LoggedInFlowNode(
|
||||
NavTarget.Room(
|
||||
roomIdOrAlias = roomDescription.roomId.toRoomIdOrAlias(),
|
||||
roomDescription = roomDescription,
|
||||
trigger = JoinedRoom.Trigger.RoomDirectory,
|
||||
trigger = JoinedRoomAnalyticsEvent.Trigger.RoomDirectory,
|
||||
)
|
||||
)
|
||||
}
|
||||
@@ -519,7 +525,7 @@ class LoggedInFlowNode(
|
||||
suspend fun attachRoom(
|
||||
roomIdOrAlias: RoomIdOrAlias,
|
||||
serverNames: List<String> = emptyList(),
|
||||
trigger: JoinedRoom.Trigger? = null,
|
||||
trigger: JoinedRoomAnalyticsEvent.Trigger? = null,
|
||||
eventId: EventId? = null,
|
||||
clearBackstack: Boolean,
|
||||
): RoomFlowNode {
|
||||
|
||||
@@ -19,10 +19,10 @@ import com.bumble.appyx.core.node.node
|
||||
import com.bumble.appyx.core.plugin.Plugin
|
||||
import com.bumble.appyx.core.plugin.plugins
|
||||
import com.bumble.appyx.navmodel.backstack.BackStack
|
||||
import com.bumble.appyx.navmodel.backstack.active
|
||||
import com.bumble.appyx.navmodel.backstack.operation.newRoot
|
||||
import dev.zacsweers.metro.Assisted
|
||||
import dev.zacsweers.metro.AssistedInject
|
||||
import im.vector.app.features.analytics.plan.JoinedRoom
|
||||
import io.element.android.annotations.ContributesNode
|
||||
import io.element.android.appnav.room.joined.JoinedRoomFlowNode
|
||||
import io.element.android.appnav.room.joined.JoinedRoomLoadedFlowNode
|
||||
@@ -60,10 +60,13 @@ import kotlinx.coroutines.flow.map
|
||||
import kotlinx.coroutines.flow.onEach
|
||||
import kotlinx.coroutines.flow.shareIn
|
||||
import kotlinx.coroutines.launch
|
||||
import kotlinx.parcelize.IgnoredOnParcel
|
||||
import kotlinx.parcelize.Parcelize
|
||||
import timber.log.Timber
|
||||
import java.util.Optional
|
||||
import kotlin.jvm.optionals.getOrNull
|
||||
import im.vector.app.features.analytics.plan.JoinedRoom as JoinedRoomAnalyticsEvent
|
||||
import io.element.android.libraries.matrix.api.room.JoinedRoom as JoinedRoomInstance
|
||||
|
||||
@ContributesNode(SessionScope::class)
|
||||
@AssistedInject
|
||||
@@ -77,7 +80,14 @@ class RoomFlowNode(
|
||||
private val analyticsService: AnalyticsService,
|
||||
) : BaseFlowNode<RoomFlowNode.NavTarget>(
|
||||
backstack = BackStack(
|
||||
initialElement = NavTarget.Loading,
|
||||
initialElement = run {
|
||||
val joinedRoom = (plugins.filterIsInstance<Inputs>().first().initialElement as? RoomNavigationTarget.Root)?.joinedRoom
|
||||
if (joinedRoom != null) {
|
||||
NavTarget.JoinedRoom(joinedRoom)
|
||||
} else {
|
||||
NavTarget.Loading
|
||||
}
|
||||
},
|
||||
savedStateMap = buildContext.savedStateMap,
|
||||
),
|
||||
buildContext = buildContext,
|
||||
@@ -87,7 +97,7 @@ class RoomFlowNode(
|
||||
val roomIdOrAlias: RoomIdOrAlias,
|
||||
val roomDescription: Optional<RoomDescription>,
|
||||
val serverNames: List<String>,
|
||||
val trigger: Optional<JoinedRoom.Trigger>,
|
||||
val trigger: Optional<JoinedRoomAnalyticsEvent.Trigger>,
|
||||
val initialElement: RoomNavigationTarget,
|
||||
) : NodeInputs
|
||||
|
||||
@@ -104,11 +114,16 @@ class RoomFlowNode(
|
||||
data class JoinRoom(
|
||||
val roomId: RoomId,
|
||||
val serverNames: List<String>,
|
||||
val trigger: im.vector.app.features.analytics.plan.JoinedRoom.Trigger,
|
||||
val trigger: JoinedRoomAnalyticsEvent.Trigger,
|
||||
) : NavTarget
|
||||
|
||||
@Parcelize
|
||||
data class JoinedRoom(val roomId: RoomId) : NavTarget
|
||||
data class JoinedRoom(
|
||||
val roomId: RoomId,
|
||||
@IgnoredOnParcel val joinedRoom: JoinedRoomInstance? = null,
|
||||
) : NavTarget {
|
||||
constructor(joinedRoom: JoinedRoomInstance) : this(joinedRoom.roomId, joinedRoom)
|
||||
}
|
||||
}
|
||||
|
||||
override fun onBuilt() {
|
||||
@@ -133,7 +148,9 @@ class RoomFlowNode(
|
||||
}
|
||||
|
||||
private fun subscribeToRoomInfoFlow(roomId: RoomId, serverNames: List<String>) {
|
||||
val roomInfoFlow = client.getRoomInfoFlow(roomId)
|
||||
val joinedRoom = (inputs.initialElement as? RoomNavigationTarget.Root)?.joinedRoom
|
||||
val roomInfoFlow = joinedRoom?.roomInfoFlow?.map { Optional.of(it) }
|
||||
?: client.getRoomInfoFlow(roomId)
|
||||
|
||||
// This observes the local membership changes for the room
|
||||
val membershipUpdateFlow = membershipObserver.updates
|
||||
@@ -149,6 +166,11 @@ class RoomFlowNode(
|
||||
currentMembershipFlow.onEach { (previousMembership, membership) ->
|
||||
Timber.d("Room membership: $membership")
|
||||
if (membership == CurrentUserMembership.JOINED) {
|
||||
val currentNavTarget = backstack.active?.key?.navTarget
|
||||
if (currentNavTarget is NavTarget.JoinedRoom && currentNavTarget.roomId == roomId) {
|
||||
Timber.d("Already in JoinedRoom $roomId, do nothing")
|
||||
return@onEach
|
||||
}
|
||||
backstack.newRoot(NavTarget.JoinedRoom(roomId))
|
||||
} else {
|
||||
val leavingFromCurrentDevice =
|
||||
@@ -163,7 +185,7 @@ class RoomFlowNode(
|
||||
NavTarget.JoinRoom(
|
||||
roomId = roomId,
|
||||
serverNames = serverNames,
|
||||
trigger = inputs.trigger.getOrNull() ?: JoinedRoom.Trigger.Invite,
|
||||
trigger = inputs.trigger.getOrNull() ?: JoinedRoomAnalyticsEvent.Trigger.Invite,
|
||||
)
|
||||
)
|
||||
}
|
||||
@@ -209,7 +231,8 @@ class RoomFlowNode(
|
||||
val roomFlowNodeCallback = plugins<JoinedRoomLoadedFlowNode.Callback>()
|
||||
val inputs = JoinedRoomFlowNode.Inputs(
|
||||
roomId = navTarget.roomId,
|
||||
initialElement = inputs.initialElement
|
||||
initialElement = inputs.initialElement,
|
||||
joinedRoom = navTarget.joinedRoom,
|
||||
)
|
||||
createNode<JoinedRoomFlowNode>(buildContext, plugins = listOf(inputs) + roomFlowNodeCallback)
|
||||
}
|
||||
|
||||
@@ -10,12 +10,15 @@ package io.element.android.appnav.room
|
||||
|
||||
import android.os.Parcelable
|
||||
import io.element.android.libraries.matrix.api.core.EventId
|
||||
import io.element.android.libraries.matrix.api.room.JoinedRoom
|
||||
import kotlinx.parcelize.IgnoredOnParcel
|
||||
import kotlinx.parcelize.Parcelize
|
||||
|
||||
sealed interface RoomNavigationTarget : Parcelable {
|
||||
@Parcelize
|
||||
data class Root(
|
||||
val eventId: EventId? = null,
|
||||
@IgnoredOnParcel val joinedRoom: JoinedRoom? = null,
|
||||
) : RoomNavigationTarget
|
||||
|
||||
@Parcelize
|
||||
|
||||
@@ -38,6 +38,7 @@ import io.element.android.libraries.di.SessionScope
|
||||
import io.element.android.libraries.matrix.api.core.EventId
|
||||
import io.element.android.libraries.matrix.api.core.RoomId
|
||||
import io.element.android.libraries.matrix.api.core.ThreadId
|
||||
import io.element.android.libraries.matrix.api.room.JoinedRoom
|
||||
import io.element.android.libraries.matrix.ui.room.LoadingRoomState
|
||||
import io.element.android.libraries.matrix.ui.room.LoadingRoomStateFlowFactory
|
||||
import kotlinx.coroutines.flow.distinctUntilChanged
|
||||
@@ -63,11 +64,12 @@ class JoinedRoomFlowNode(
|
||||
) {
|
||||
data class Inputs(
|
||||
val roomId: RoomId,
|
||||
val joinedRoom: JoinedRoom?,
|
||||
val initialElement: RoomNavigationTarget,
|
||||
) : NodeInputs
|
||||
|
||||
private val inputs: Inputs = inputs()
|
||||
private val loadingRoomStateStateFlow = loadingRoomStateFlowFactory.create(lifecycleScope, inputs.roomId)
|
||||
private val loadingRoomStateStateFlow = loadingRoomStateFlowFactory.create(lifecycleScope, inputs.roomId, inputs.joinedRoom)
|
||||
|
||||
sealed interface NavTarget : Parcelable {
|
||||
@Parcelize
|
||||
|
||||
@@ -23,6 +23,19 @@ import kotlinx.coroutines.test.runTest
|
||||
import org.junit.Test
|
||||
|
||||
class LoadingBaseRoomStateFlowFactoryTest {
|
||||
@Test
|
||||
fun `flow should emit only Loaded when we already pass a JoinedRoom`() = runTest {
|
||||
val room = FakeJoinedRoom(baseRoom = FakeBaseRoom(sessionId = A_SESSION_ID, roomId = A_ROOM_ID))
|
||||
val matrixClient = FakeMatrixClient(A_SESSION_ID)
|
||||
val flowFactory = LoadingRoomStateFlowFactory(matrixClient)
|
||||
flowFactory
|
||||
.create(lifecycleScope = this, roomId = A_ROOM_ID, joinedRoom = room)
|
||||
.test {
|
||||
assertThat(awaitItem()).isEqualTo(LoadingRoomState.Loaded(room))
|
||||
ensureAllEventsConsumed()
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
fun `flow should emit Loading and then Loaded when there is a room in cache`() = runTest {
|
||||
val room = FakeJoinedRoom(baseRoom = FakeBaseRoom(sessionId = A_SESSION_ID, roomId = A_ROOM_ID))
|
||||
@@ -31,7 +44,7 @@ class LoadingBaseRoomStateFlowFactoryTest {
|
||||
}
|
||||
val flowFactory = LoadingRoomStateFlowFactory(matrixClient)
|
||||
flowFactory
|
||||
.create(this, A_ROOM_ID)
|
||||
.create(lifecycleScope = this, roomId = A_ROOM_ID, joinedRoom = null)
|
||||
.test {
|
||||
assertThat(awaitItem()).isEqualTo(LoadingRoomState.Loading)
|
||||
assertThat(awaitItem()).isEqualTo(LoadingRoomState.Loaded(room))
|
||||
@@ -45,7 +58,7 @@ class LoadingBaseRoomStateFlowFactoryTest {
|
||||
val matrixClient = FakeMatrixClient(A_SESSION_ID, roomListService = roomListService)
|
||||
val flowFactory = LoadingRoomStateFlowFactory(matrixClient)
|
||||
flowFactory
|
||||
.create(this, A_ROOM_ID)
|
||||
.create(lifecycleScope = this, roomId = A_ROOM_ID, joinedRoom = null)
|
||||
.test {
|
||||
assertThat(awaitItem()).isEqualTo(LoadingRoomState.Loading)
|
||||
matrixClient.givenGetRoomResult(A_ROOM_ID, room)
|
||||
@@ -60,7 +73,7 @@ class LoadingBaseRoomStateFlowFactoryTest {
|
||||
val matrixClient = FakeMatrixClient(A_SESSION_ID, roomListService = roomListService)
|
||||
val flowFactory = LoadingRoomStateFlowFactory(matrixClient)
|
||||
flowFactory
|
||||
.create(this, A_ROOM_ID)
|
||||
.create(lifecycleScope = this, roomId = A_ROOM_ID, joinedRoom = null)
|
||||
.test {
|
||||
assertThat(awaitItem()).isEqualTo(LoadingRoomState.Loading)
|
||||
roomListService.postAllRoomsLoadingState(RoomList.LoadingState.Loaded(1))
|
||||
|
||||
6
fastlane/metadata/android/en-US/changelogs/202512000.txt
Normal file
6
fastlane/metadata/android/en-US/changelogs/202512000.txt
Normal file
@@ -0,0 +1,6 @@
|
||||
Main changes in this version:
|
||||
- Improve the room security and privacy screens.
|
||||
- Better room list sorting.
|
||||
- Fixed crashes when recording long voice messages.
|
||||
- Improved the UX when opening a room from the room list.
|
||||
Full changelog: https://github.com/element-hq/element-x-android/releases
|
||||
@@ -0,0 +1,11 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
|
||||
<string name="screen_space_announcement_item1">"Visualizza gli spazi che hai creato o a cui partecipi"</string>
|
||||
<string name="screen_space_announcement_item2">"Accetta o rifiuta gli inviti agli spazi"</string>
|
||||
<string name="screen_space_announcement_item3">"Scopri tutte le stanze a cui puoi partecipare nei tuoi spazi"</string>
|
||||
<string name="screen_space_announcement_item4">"Unisciti agli spazi pubblici"</string>
|
||||
<string name="screen_space_announcement_item5">"Lascia tutti gli spazi a cui ti sei unito"</string>
|
||||
<string name="screen_space_announcement_notice">"A breve saranno disponibili le funzionalità di filtraggio, creazione e gestione degli spazi."</string>
|
||||
<string name="screen_space_announcement_subtitle">"Benvenuti alla versione beta degli Spazi! Con questa prima versione potrete:"</string>
|
||||
<string name="screen_space_announcement_title">"Ti presentiamo gli Spazi"</string>
|
||||
</resources>
|
||||
@@ -0,0 +1,11 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
|
||||
<string name="screen_space_announcement_item1">"Visualizar espaços que criou ou entrou"</string>
|
||||
<string name="screen_space_announcement_item2">"Aceitar ou recusar convites aos espaços"</string>
|
||||
<string name="screen_space_announcement_item3">"Descobrir quaisquer salas que você pode entrar nos espaços"</string>
|
||||
<string name="screen_space_announcement_item4">"Entrar espaços públicos"</string>
|
||||
<string name="screen_space_announcement_item5">"Sair de quaisquer espaços que entrou"</string>
|
||||
<string name="screen_space_announcement_notice">"Filtrar, criar, e gerenciar espaços virão em breve."</string>
|
||||
<string name="screen_space_announcement_subtitle">"Boas-vindas à versão beta dos Espaços! Com essa primeira versão, você pode:"</string>
|
||||
<string name="screen_space_announcement_title">"Apresentando Espaços"</string>
|
||||
</resources>
|
||||
@@ -2,4 +2,10 @@
|
||||
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
|
||||
<string name="screen_space_announcement_item1">"查看您创建或加入的空间"</string>
|
||||
<string name="screen_space_announcement_item2">"接受或拒绝空间邀请"</string>
|
||||
<string name="screen_space_announcement_item3">"发现您可以加入空间的所有房间"</string>
|
||||
<string name="screen_space_announcement_item4">"加入公共空间"</string>
|
||||
<string name="screen_space_announcement_item5">"离开你加入的所有空间"</string>
|
||||
<string name="screen_space_announcement_notice">"筛选、创建及管理空间功能即将上线。"</string>
|
||||
<string name="screen_space_announcement_subtitle">"欢迎使用 Spaces 测试版!使用首个版本,您可以:"</string>
|
||||
<string name="screen_space_announcement_title">"Spaces 简介"</string>
|
||||
</resources>
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
|
||||
<string name="screen_create_room_action_create_room">"Uusi huone"</string>
|
||||
<string name="screen_create_room_add_people_title">"Kutsu ihmisiä"</string>
|
||||
<string name="screen_create_room_add_people_title">"Kutsu henkilöitä"</string>
|
||||
<string name="screen_create_room_error_creating_room">"Huoneen luomisessa tapahtui virhe"</string>
|
||||
<string name="screen_create_room_private_option_description">"Vain kutsutut henkilöt pääsevät tähän huoneeseen. Kaikki viestit ovat päästä päähän salattuja."</string>
|
||||
<string name="screen_create_room_private_option_title">"Yksityinen huone"</string>
|
||||
|
||||
@@ -14,6 +14,7 @@ Você pode mudar isso a qualquer momento nas configurações da sala."</string>
|
||||
<string name="screen_create_room_room_access_section_knocking_option_description">"Qualquer pessoa pode pedir para entrar na sala, mas um administrador ou moderador terá de aceitar a solicitação"</string>
|
||||
<string name="screen_create_room_room_access_section_knocking_option_title">"Pedir para entrar"</string>
|
||||
<string name="screen_create_room_room_address_section_footer">"Para que esta sala fique visível no diretório público de salas, você precisará de um endereço de sala."</string>
|
||||
<string name="screen_create_room_room_address_section_title">"Endereço da sala"</string>
|
||||
<string name="screen_create_room_room_name_label">"Nome da sala"</string>
|
||||
<string name="screen_create_room_room_visibility_section_title">"Visibilidade da sala"</string>
|
||||
<string name="screen_create_room_title">"Criar uma sala"</string>
|
||||
|
||||
@@ -13,6 +13,7 @@ import com.bumble.appyx.core.node.Node
|
||||
import com.bumble.appyx.core.plugin.Plugin
|
||||
import io.element.android.libraries.architecture.FeatureEntryPoint
|
||||
import io.element.android.libraries.matrix.api.core.RoomId
|
||||
import io.element.android.libraries.matrix.api.room.JoinedRoom
|
||||
|
||||
interface HomeEntryPoint : FeatureEntryPoint {
|
||||
fun createNode(
|
||||
@@ -22,7 +23,7 @@ interface HomeEntryPoint : FeatureEntryPoint {
|
||||
): Node
|
||||
|
||||
interface Callback : Plugin {
|
||||
fun navigateToRoom(roomId: RoomId)
|
||||
fun navigateToRoom(roomId: RoomId, joinedRoom: JoinedRoom?)
|
||||
fun navigateToCreateRoom()
|
||||
fun navigateToSettings()
|
||||
fun navigateToSetUpRecovery()
|
||||
|
||||
@@ -14,6 +14,8 @@ import androidx.activity.compose.LocalActivity
|
||||
import androidx.compose.runtime.Composable
|
||||
import androidx.compose.runtime.collectAsState
|
||||
import androidx.compose.runtime.getValue
|
||||
import androidx.compose.runtime.mutableStateOf
|
||||
import androidx.compose.runtime.remember
|
||||
import androidx.compose.ui.Modifier
|
||||
import androidx.lifecycle.Lifecycle
|
||||
import androidx.lifecycle.coroutineScope
|
||||
@@ -41,20 +43,33 @@ import io.element.android.features.logout.api.direct.DirectLogoutView
|
||||
import io.element.android.features.reportroom.api.ReportRoomEntryPoint
|
||||
import io.element.android.features.rolesandpermissions.api.ChangeRoomMemberRolesEntryPoint
|
||||
import io.element.android.features.rolesandpermissions.api.ChangeRoomMemberRolesListType
|
||||
import io.element.android.libraries.architecture.AsyncData
|
||||
import io.element.android.libraries.architecture.BackstackView
|
||||
import io.element.android.libraries.architecture.BaseFlowNode
|
||||
import io.element.android.libraries.architecture.appyx.launchMolecule
|
||||
import io.element.android.libraries.architecture.callback
|
||||
import io.element.android.libraries.core.extensions.runCatchingExceptions
|
||||
import io.element.android.libraries.deeplink.api.usecase.InviteFriendsUseCase
|
||||
import io.element.android.libraries.designsystem.components.ProgressDialog
|
||||
import io.element.android.libraries.designsystem.utils.DelayedVisibility
|
||||
import io.element.android.libraries.di.SessionScope
|
||||
import io.element.android.libraries.di.annotations.SessionCoroutineScope
|
||||
import io.element.android.libraries.matrix.api.MatrixClient
|
||||
import io.element.android.libraries.matrix.api.core.RoomId
|
||||
import io.element.android.services.analytics.api.AnalyticsService
|
||||
import kotlinx.coroutines.CoroutineScope
|
||||
import kotlinx.coroutines.Job
|
||||
import kotlinx.coroutines.NonCancellable
|
||||
import kotlinx.coroutines.delay
|
||||
import kotlinx.coroutines.isActive
|
||||
import kotlinx.coroutines.job
|
||||
import kotlinx.coroutines.launch
|
||||
import kotlinx.coroutines.runBlocking
|
||||
import kotlinx.coroutines.withContext
|
||||
import kotlinx.parcelize.Parcelize
|
||||
import timber.log.Timber
|
||||
import kotlin.coroutines.cancellation.CancellationException
|
||||
import kotlin.time.Duration.Companion.milliseconds
|
||||
|
||||
@ContributesNode(SessionScope::class)
|
||||
@AssistedInject
|
||||
@@ -71,6 +86,7 @@ class HomeFlowNode(
|
||||
private val declineInviteAndBlockUserEntryPoint: DeclineInviteAndBlockEntryPoint,
|
||||
private val changeRoomMemberRolesEntryPoint: ChangeRoomMemberRolesEntryPoint,
|
||||
private val leaveRoomRenderer: LeaveRoomRenderer,
|
||||
@SessionCoroutineScope private val sessionCoroutineScope: CoroutineScope,
|
||||
) : BaseFlowNode<HomeFlowNode.NavTarget>(
|
||||
backstack = BackStack(
|
||||
initialElement = NavTarget.Root,
|
||||
@@ -150,9 +166,58 @@ class HomeFlowNode(
|
||||
return node(buildContext) { modifier ->
|
||||
val state by stateFlow.collectAsState()
|
||||
val activity = requireNotNull(LocalActivity.current)
|
||||
|
||||
val loadingJoinedRoomJob = remember { mutableStateOf<AsyncData<Job>>(AsyncData.Uninitialized) }
|
||||
if (loadingJoinedRoomJob.value.isLoading()) {
|
||||
DelayedVisibility(duration = 400.milliseconds) {
|
||||
ProgressDialog(
|
||||
onDismissRequest = {
|
||||
loadingJoinedRoomJob.value.dataOrNull()?.cancel()
|
||||
loadingJoinedRoomJob.value = AsyncData.Uninitialized
|
||||
}
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
fun navigateToRoom(
|
||||
roomId: RoomId,
|
||||
) {
|
||||
if (!loadingJoinedRoomJob.value.isUninitialized()) {
|
||||
Timber.w("Already loading a room, ignoring navigateToRoom for $roomId")
|
||||
return
|
||||
}
|
||||
|
||||
val job = sessionCoroutineScope.launch {
|
||||
runCatchingExceptions {
|
||||
matrixClient.getJoinedRoom(roomId)
|
||||
}.fold(
|
||||
onSuccess = { joinedRoom ->
|
||||
if (isActive) {
|
||||
callback.navigateToRoom(roomId, joinedRoom)
|
||||
loadingJoinedRoomJob.value = AsyncData.Success(coroutineContext.job)
|
||||
// Wait a bit before resetting the state to avoid allowing to open several rooms
|
||||
delay(200.milliseconds)
|
||||
loadingJoinedRoomJob.value = AsyncData.Uninitialized
|
||||
}
|
||||
},
|
||||
onFailure = {
|
||||
// If the operation wasn't cancelled, navigate without the room, using the room id
|
||||
if (it !is CancellationException) {
|
||||
callback.navigateToRoom(roomId, null)
|
||||
}
|
||||
loadingJoinedRoomJob.value = AsyncData.Failure(error = it, prevData = coroutineContext.job)
|
||||
// Wait a bit before resetting the state to avoid allowing to open several rooms
|
||||
delay(200.milliseconds)
|
||||
loadingJoinedRoomJob.value = AsyncData.Uninitialized
|
||||
}
|
||||
)
|
||||
}
|
||||
loadingJoinedRoomJob.value = AsyncData.Loading(job)
|
||||
}
|
||||
|
||||
HomeView(
|
||||
homeState = state,
|
||||
onRoomClick = callback::navigateToRoom,
|
||||
onRoomClick = ::navigateToRoom,
|
||||
onSettingsClick = callback::navigateToSettings,
|
||||
onStartChatClick = callback::navigateToCreateRoom,
|
||||
onSetUpRecoveryClick = callback::navigateToSetUpRecovery,
|
||||
@@ -165,7 +230,7 @@ class HomeFlowNode(
|
||||
acceptDeclineInviteView = {
|
||||
acceptDeclineInviteView.Render(
|
||||
state = state.roomListState.acceptDeclineInviteState,
|
||||
onAcceptInviteSuccess = callback::navigateToRoom,
|
||||
onAcceptInviteSuccess = ::navigateToRoom,
|
||||
onDeclineInviteSuccess = { },
|
||||
modifier = Modifier
|
||||
)
|
||||
|
||||
@@ -40,6 +40,7 @@ import androidx.compose.ui.zIndex
|
||||
import io.element.android.compound.theme.ElementTheme
|
||||
import io.element.android.compound.tokens.generated.CompoundIcons
|
||||
import io.element.android.features.home.impl.R
|
||||
import io.element.android.features.home.impl.model.LatestEvent
|
||||
import io.element.android.features.home.impl.model.RoomListRoomSummary
|
||||
import io.element.android.features.home.impl.model.RoomListRoomSummaryProvider
|
||||
import io.element.android.features.home.impl.model.RoomSummaryDisplayType
|
||||
@@ -120,6 +121,7 @@ internal fun RoomSummaryRow(
|
||||
) {
|
||||
NameAndTimestampRow(
|
||||
name = room.name,
|
||||
latestEvent = room.latestEvent,
|
||||
timestamp = room.timestamp,
|
||||
isHighlighted = room.isHighlighted
|
||||
)
|
||||
@@ -136,6 +138,7 @@ internal fun RoomSummaryRow(
|
||||
) {
|
||||
NameAndTimestampRow(
|
||||
name = room.name,
|
||||
latestEvent = room.latestEvent,
|
||||
timestamp = null,
|
||||
isHighlighted = room.isHighlighted
|
||||
)
|
||||
@@ -211,6 +214,7 @@ private fun RoomSummaryScaffoldRow(
|
||||
@Composable
|
||||
private fun NameAndTimestampRow(
|
||||
name: String?,
|
||||
latestEvent: LatestEvent,
|
||||
timestamp: String?,
|
||||
isHighlighted: Boolean,
|
||||
modifier: Modifier = Modifier
|
||||
@@ -219,16 +223,42 @@ private fun NameAndTimestampRow(
|
||||
modifier = modifier.fillMaxWidth(),
|
||||
horizontalArrangement = spacedBy(16.dp)
|
||||
) {
|
||||
// Name
|
||||
Text(
|
||||
Row(
|
||||
modifier = Modifier.weight(1f),
|
||||
style = ElementTheme.typography.fontBodyLgMedium,
|
||||
text = name ?: stringResource(id = CommonStrings.common_no_room_name),
|
||||
fontStyle = FontStyle.Italic.takeIf { name == null },
|
||||
color = ElementTheme.colors.roomListRoomName,
|
||||
maxLines = 1,
|
||||
overflow = TextOverflow.Ellipsis
|
||||
)
|
||||
verticalAlignment = Alignment.CenterVertically,
|
||||
) {
|
||||
// Name
|
||||
Text(
|
||||
style = ElementTheme.typography.fontBodyLgMedium,
|
||||
text = name ?: stringResource(id = CommonStrings.common_no_room_name),
|
||||
fontStyle = FontStyle.Italic.takeIf { name == null },
|
||||
color = ElementTheme.colors.roomListRoomName,
|
||||
maxLines = 1,
|
||||
overflow = TextOverflow.Ellipsis
|
||||
)
|
||||
// Picto
|
||||
when (latestEvent) {
|
||||
is LatestEvent.Sending -> {
|
||||
Spacer(modifier = Modifier.width(4.dp))
|
||||
Icon(
|
||||
modifier = Modifier.size(16.dp),
|
||||
imageVector = CompoundIcons.Time(),
|
||||
contentDescription = null,
|
||||
tint = ElementTheme.colors.iconTertiary,
|
||||
)
|
||||
}
|
||||
is LatestEvent.Error -> {
|
||||
Spacer(modifier = Modifier.width(4.dp))
|
||||
Icon(
|
||||
modifier = Modifier.size(16.dp),
|
||||
imageVector = CompoundIcons.ErrorSolid(),
|
||||
contentDescription = null,
|
||||
tint = ElementTheme.colors.iconCriticalPrimary,
|
||||
)
|
||||
}
|
||||
else -> Unit
|
||||
}
|
||||
}
|
||||
// Timestamp
|
||||
Text(
|
||||
text = timestamp ?: "",
|
||||
@@ -274,21 +304,41 @@ private fun MessagePreviewAndIndicatorRow(
|
||||
modifier = modifier.fillMaxWidth(),
|
||||
horizontalArrangement = spacedBy(28.dp)
|
||||
) {
|
||||
val messagePreview = if (room.isTombstoned) {
|
||||
stringResource(R.string.screen_roomlist_tombstoned_room_description)
|
||||
if (room.isTombstoned) {
|
||||
Text(
|
||||
modifier = Modifier.weight(1f),
|
||||
text = stringResource(R.string.screen_roomlist_tombstoned_room_description),
|
||||
color = ElementTheme.colors.roomListRoomMessage,
|
||||
style = ElementTheme.typography.fontBodyMdRegular,
|
||||
minLines = 2,
|
||||
maxLines = 2,
|
||||
overflow = TextOverflow.Ellipsis,
|
||||
)
|
||||
} else {
|
||||
room.latestEvent.orEmpty()
|
||||
if (room.latestEvent is LatestEvent.Error) {
|
||||
Text(
|
||||
modifier = Modifier.weight(1f),
|
||||
text = stringResource(CommonStrings.common_message_failed_to_send),
|
||||
color = ElementTheme.colors.textCriticalPrimary,
|
||||
style = ElementTheme.typography.fontBodyMdRegular,
|
||||
minLines = 2,
|
||||
maxLines = 2,
|
||||
overflow = TextOverflow.Ellipsis,
|
||||
)
|
||||
} else {
|
||||
val messagePreview = room.latestEvent.content()
|
||||
val annotatedMessagePreview = messagePreview as? AnnotatedString ?: AnnotatedString(text = messagePreview.orEmpty().toString())
|
||||
Text(
|
||||
modifier = Modifier.weight(1f),
|
||||
text = annotatedMessagePreview,
|
||||
color = ElementTheme.colors.roomListRoomMessage,
|
||||
style = ElementTheme.typography.fontBodyMdRegular,
|
||||
minLines = 2,
|
||||
maxLines = 2,
|
||||
overflow = TextOverflow.Ellipsis,
|
||||
)
|
||||
}
|
||||
}
|
||||
val annotatedMessagePreview = messagePreview as? AnnotatedString ?: AnnotatedString(text = messagePreview.toString())
|
||||
Text(
|
||||
modifier = Modifier.weight(1f),
|
||||
text = annotatedMessagePreview,
|
||||
color = ElementTheme.colors.roomListRoomMessage,
|
||||
style = ElementTheme.typography.fontBodyMdRegular,
|
||||
minLines = 2,
|
||||
maxLines = 2,
|
||||
overflow = TextOverflow.Ellipsis
|
||||
)
|
||||
|
||||
// Call and unread
|
||||
Row(
|
||||
|
||||
@@ -9,6 +9,7 @@
|
||||
package io.element.android.features.home.impl.datasource
|
||||
|
||||
import dev.zacsweers.metro.Inject
|
||||
import io.element.android.features.home.impl.model.LatestEvent
|
||||
import io.element.android.features.home.impl.model.RoomListRoomSummary
|
||||
import io.element.android.features.home.impl.model.RoomSummaryDisplayType
|
||||
import io.element.android.libraries.core.extensions.orEmpty
|
||||
@@ -18,6 +19,7 @@ import io.element.android.libraries.designsystem.components.avatar.AvatarSize
|
||||
import io.element.android.libraries.eventformatter.api.RoomLatestEventFormatter
|
||||
import io.element.android.libraries.matrix.api.room.CurrentUserMembership
|
||||
import io.element.android.libraries.matrix.api.room.isDm
|
||||
import io.element.android.libraries.matrix.api.roomlist.LatestEventValue
|
||||
import io.element.android.libraries.matrix.api.roomlist.RoomSummary
|
||||
import io.element.android.libraries.matrix.ui.model.getAvatarData
|
||||
import io.element.android.libraries.matrix.ui.model.toInviteSender
|
||||
@@ -44,7 +46,7 @@ class RoomListRoomSummaryFactory(
|
||||
mode = DateFormatterMode.TimeOrDate,
|
||||
useRelative = true,
|
||||
),
|
||||
latestEvent = roomLatestEventFormatter.format(roomSummary.latestEvent, roomInfo.isDm).orEmpty(),
|
||||
latestEvent = computeLatestEvent(roomSummary.latestEvent, roomInfo.isDm),
|
||||
avatarData = avatarData,
|
||||
userDefinedNotificationMode = roomInfo.userDefinedNotificationMode,
|
||||
hasRoomCall = roomInfo.hasRoomCall,
|
||||
@@ -71,4 +73,28 @@ class RoomListRoomSummaryFactory(
|
||||
isSpace = roomInfo.isSpace,
|
||||
)
|
||||
}
|
||||
|
||||
private fun computeLatestEvent(latestEvent: LatestEventValue, dm: Boolean): LatestEvent {
|
||||
return when (latestEvent) {
|
||||
is LatestEventValue.None -> {
|
||||
LatestEvent.None
|
||||
}
|
||||
is LatestEventValue.Local -> {
|
||||
if (latestEvent.isSending) {
|
||||
val content = roomLatestEventFormatter.format(latestEvent, dm).orEmpty()
|
||||
LatestEvent.Sending(
|
||||
content = content,
|
||||
)
|
||||
} else {
|
||||
LatestEvent.Error
|
||||
}
|
||||
}
|
||||
is LatestEventValue.Remote -> {
|
||||
val content = roomLatestEventFormatter.format(latestEvent, dm).orEmpty()
|
||||
LatestEvent.Synced(
|
||||
content = content,
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,34 @@
|
||||
/*
|
||||
* Copyright (c) 2025 Element Creations Ltd.
|
||||
*
|
||||
* SPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-Element-Commercial.
|
||||
* Please see LICENSE files in the repository root for full details.
|
||||
*/
|
||||
|
||||
package io.element.android.features.home.impl.model
|
||||
|
||||
import androidx.compose.runtime.Immutable
|
||||
|
||||
@Immutable
|
||||
sealed interface LatestEvent {
|
||||
data object None : LatestEvent
|
||||
|
||||
data class Synced(
|
||||
val content: CharSequence?,
|
||||
) : LatestEvent
|
||||
|
||||
data class Sending(
|
||||
val content: CharSequence?,
|
||||
) : LatestEvent
|
||||
|
||||
data object Error : LatestEvent
|
||||
|
||||
fun content(): CharSequence? {
|
||||
return when (this) {
|
||||
is None -> null
|
||||
is Synced -> content
|
||||
is Sending -> content
|
||||
is Error -> null
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -29,7 +29,7 @@ data class RoomListRoomSummary(
|
||||
val numberOfUnreadNotifications: Long,
|
||||
val isMarkedUnread: Boolean,
|
||||
val timestamp: String?,
|
||||
val latestEvent: CharSequence?,
|
||||
val latestEvent: LatestEvent,
|
||||
val avatarData: AvatarData,
|
||||
val userDefinedNotificationMode: RoomNotificationMode?,
|
||||
val hasRoomCall: Boolean,
|
||||
|
||||
@@ -25,12 +25,14 @@ open class RoomListRoomSummaryProvider : PreviewParameterProvider<RoomListRoomSu
|
||||
aRoomListRoomSummary(displayType = RoomSummaryDisplayType.PLACEHOLDER),
|
||||
aRoomListRoomSummary(),
|
||||
aRoomListRoomSummary(name = null),
|
||||
aRoomListRoomSummary(lastMessage = null),
|
||||
aRoomListRoomSummary(latestEvent = LatestEvent.None),
|
||||
aRoomListRoomSummary(
|
||||
name = "A very long room name that should be truncated",
|
||||
lastMessage = "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt" +
|
||||
" ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea com" +
|
||||
"modo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur.",
|
||||
latestEvent = LatestEvent.Synced(
|
||||
"Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt" +
|
||||
" ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea com" +
|
||||
"modo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur."
|
||||
),
|
||||
timestamp = "yesterday",
|
||||
numberOfUnreadMessages = 1,
|
||||
),
|
||||
@@ -44,7 +46,7 @@ open class RoomListRoomSummaryProvider : PreviewParameterProvider<RoomListRoomSu
|
||||
listOf(
|
||||
aRoomListRoomSummary(
|
||||
name = roomNotificationMode.name,
|
||||
lastMessage = "No activity" + if (hasCall) ", call" else "",
|
||||
latestEvent = LatestEvent.Synced("No activity" + if (hasCall) ", call" else ""),
|
||||
notificationMode = roomNotificationMode,
|
||||
numberOfUnreadMessages = 0,
|
||||
numberOfUnreadMentions = 0,
|
||||
@@ -52,7 +54,7 @@ open class RoomListRoomSummaryProvider : PreviewParameterProvider<RoomListRoomSu
|
||||
),
|
||||
aRoomListRoomSummary(
|
||||
name = roomNotificationMode.name,
|
||||
lastMessage = "New messages" + if (hasCall) ", call" else "",
|
||||
latestEvent = LatestEvent.Synced("New messages" + if (hasCall) ", call" else ""),
|
||||
notificationMode = roomNotificationMode,
|
||||
numberOfUnreadMessages = 1,
|
||||
numberOfUnreadMentions = 0,
|
||||
@@ -60,7 +62,7 @@ open class RoomListRoomSummaryProvider : PreviewParameterProvider<RoomListRoomSu
|
||||
),
|
||||
aRoomListRoomSummary(
|
||||
name = roomNotificationMode.name,
|
||||
lastMessage = "New messages, mentions" + if (hasCall) ", call" else "",
|
||||
latestEvent = LatestEvent.Synced("New messages, mentions" + if (hasCall) ", call" else ""),
|
||||
notificationMode = roomNotificationMode,
|
||||
numberOfUnreadMessages = 1,
|
||||
numberOfUnreadMentions = 1,
|
||||
@@ -68,7 +70,7 @@ open class RoomListRoomSummaryProvider : PreviewParameterProvider<RoomListRoomSu
|
||||
),
|
||||
aRoomListRoomSummary(
|
||||
name = roomNotificationMode.name,
|
||||
lastMessage = "New mentions" + if (hasCall) ", call" else "",
|
||||
latestEvent = LatestEvent.Synced("New mentions" + if (hasCall) ", call" else ""),
|
||||
notificationMode = roomNotificationMode,
|
||||
numberOfUnreadMessages = 0,
|
||||
numberOfUnreadMentions = 1,
|
||||
@@ -127,6 +129,10 @@ open class RoomListRoomSummaryProvider : PreviewParameterProvider<RoomListRoomSu
|
||||
isTombstoned = true,
|
||||
)
|
||||
),
|
||||
listOf(
|
||||
aRoomListRoomSummary(latestEvent = LatestEvent.Sending("A sending message")),
|
||||
aRoomListRoomSummary(latestEvent = LatestEvent.Error),
|
||||
)
|
||||
).flatten()
|
||||
}
|
||||
|
||||
@@ -148,8 +154,8 @@ internal fun aRoomListRoomSummary(
|
||||
numberOfUnreadMentions: Long = 0,
|
||||
numberOfUnreadNotifications: Long = 0,
|
||||
isMarkedUnread: Boolean = false,
|
||||
lastMessage: String? = "Last message",
|
||||
timestamp: String? = lastMessage?.let { "88:88" },
|
||||
latestEvent: LatestEvent = LatestEvent.Synced("Last message"),
|
||||
timestamp: String? = latestEvent.takeIf { it !is LatestEvent.None }?.let { "88:88" },
|
||||
notificationMode: RoomNotificationMode? = null,
|
||||
hasRoomCall: Boolean = false,
|
||||
avatarData: AvatarData = AvatarData(id, name, size = AvatarSize.RoomListItem),
|
||||
@@ -171,7 +177,7 @@ internal fun aRoomListRoomSummary(
|
||||
numberOfUnreadNotifications = numberOfUnreadNotifications,
|
||||
isMarkedUnread = isMarkedUnread,
|
||||
timestamp = timestamp,
|
||||
latestEvent = lastMessage,
|
||||
latestEvent = latestEvent,
|
||||
avatarData = avatarData,
|
||||
userDefinedNotificationMode = notificationMode,
|
||||
hasRoomCall = hasRoomCall,
|
||||
|
||||
@@ -11,6 +11,7 @@ package io.element.android.features.home.impl.roomlist
|
||||
import androidx.compose.ui.tooling.preview.PreviewParameterProvider
|
||||
import io.element.android.features.home.impl.filters.RoomListFiltersState
|
||||
import io.element.android.features.home.impl.filters.aRoomListFiltersState
|
||||
import io.element.android.features.home.impl.model.LatestEvent
|
||||
import io.element.android.features.home.impl.model.RoomListRoomSummary
|
||||
import io.element.android.features.home.impl.model.RoomSummaryDisplayType
|
||||
import io.element.android.features.home.impl.model.aRoomListRoomSummary
|
||||
@@ -88,7 +89,7 @@ internal fun aRoomListRoomSummaryList(): ImmutableList<RoomListRoomSummary> {
|
||||
name = "Room",
|
||||
numberOfUnreadMessages = 1,
|
||||
timestamp = "14:18",
|
||||
lastMessage = "A very very very very long message which suites on two lines",
|
||||
latestEvent = LatestEvent.Synced("A very very very very long message which suites on two lines"),
|
||||
avatarData = AvatarData("!id", "R", size = AvatarSize.RoomListItem),
|
||||
id = "!roomId:domain",
|
||||
),
|
||||
@@ -96,7 +97,7 @@ internal fun aRoomListRoomSummaryList(): ImmutableList<RoomListRoomSummary> {
|
||||
name = "Room#2",
|
||||
numberOfUnreadMessages = 0,
|
||||
timestamp = "14:16",
|
||||
lastMessage = "A short message",
|
||||
latestEvent = LatestEvent.Synced("A short message"),
|
||||
avatarData = AvatarData("!id", "Z", size = AvatarSize.RoomListItem),
|
||||
id = "!roomId2:domain",
|
||||
),
|
||||
@@ -119,7 +120,7 @@ internal fun generateRoomListRoomSummaryList(
|
||||
name = "Room#$index",
|
||||
numberOfUnreadMessages = 0,
|
||||
timestamp = "14:16",
|
||||
lastMessage = "A message",
|
||||
latestEvent = LatestEvent.Synced("A message"),
|
||||
avatarData = AvatarData("!id$index", "${(65 + index % 26).toChar()}", size = AvatarSize.RoomListItem),
|
||||
id = "!roomId$index:domain",
|
||||
)
|
||||
|
||||
@@ -6,6 +6,7 @@
|
||||
<string name="banner_set_up_recovery_content">"بازگردانی تاریخچهٔ پیامها و هویت رمزنگاشتهتان با کلید بازیابی در صورت از دست دادن همهٔ افزارههای موجودتان."</string>
|
||||
<string name="banner_set_up_recovery_submit">"برپایی بازیابی"</string>
|
||||
<string name="banner_set_up_recovery_title">"برپایی بازیابی"</string>
|
||||
<string name="confirm_recovery_key_banner_message">"کلید بازیابی خود را تأیید کنید تا دسترسی به حافظه کلیدها و تاریخچه پیامهایتان حفظ شود ."</string>
|
||||
<string name="confirm_recovery_key_banner_primary_button_title">"ورود کلید بازیابیتان"</string>
|
||||
<string name="confirm_recovery_key_banner_title">"ذخیرهساز کلیدتان از همگام بودن در آمده"</string>
|
||||
<string name="full_screen_intent_banner_title">"بهبود تجریهٔ تماستان"</string>
|
||||
|
||||
@@ -3,6 +3,8 @@
|
||||
<string name="banner_battery_optimization_content_android">"Disabilita l\'ottimizzazione della batteria per questa app, per assicurarti che tutte le notifiche vengano ricevute."</string>
|
||||
<string name="banner_battery_optimization_submit_android">"Disabilita l\'ottimizzazione"</string>
|
||||
<string name="banner_battery_optimization_title_android">"Le notifiche non arrivano?"</string>
|
||||
<string name="banner_new_sound_message">"Il ping delle notifiche è stato aggiornato: ora è più chiaro, più rapido e meno fastidioso."</string>
|
||||
<string name="banner_new_sound_title">"Abbiamo rinnovato i tuoi suoni"</string>
|
||||
<string name="banner_set_up_recovery_content">"Recupera la tua identità crittografica e la cronologia dei messaggi con una chiave di recupero se hai perso tutti i tuoi dispositivi."</string>
|
||||
<string name="banner_set_up_recovery_submit">"Configura il recupero"</string>
|
||||
<string name="banner_set_up_recovery_title">"Configura il ripristino"</string>
|
||||
|
||||
@@ -3,6 +3,8 @@
|
||||
<string name="banner_battery_optimization_content_android">"Desative a otimização de bateria para este app, para que tenha certeza que todas as notificações sejam recebidas."</string>
|
||||
<string name="banner_battery_optimization_submit_android">"Desativar otimização"</string>
|
||||
<string name="banner_battery_optimization_title_android">"As notificações não chegam?"</string>
|
||||
<string name="banner_new_sound_message">"O seu ping de notificação foi atualizado—mais suave, mais rápido, e menos disruptivo."</string>
|
||||
<string name="banner_new_sound_title">"Recarregamos seus sons"</string>
|
||||
<string name="banner_set_up_recovery_content">"Recupere sua identidade criptográfica e o histórico de mensagens com uma chave de recuperação caso você perda todos os dispositivos existentes."</string>
|
||||
<string name="banner_set_up_recovery_submit">"Configurar a recuperação"</string>
|
||||
<string name="banner_set_up_recovery_title">"Configure a recuperação para proteger sua conta"</string>
|
||||
@@ -33,6 +35,7 @@ Por enquanto, você pode desmarcar os filtros para ver suas outras conversas"</s
|
||||
<string name="screen_roomlist_filter_invites">"Convites"</string>
|
||||
<string name="screen_roomlist_filter_invites_empty_state_title">"Você não tem nenhum convite pendente."</string>
|
||||
<string name="screen_roomlist_filter_low_priority">"Baixa prioridade"</string>
|
||||
<string name="screen_roomlist_filter_low_priority_empty_state_title">"Você ainda não tem nenhuma conversa de baixa prioridade"</string>
|
||||
<string name="screen_roomlist_filter_mixed_empty_state_subtitle">"Você pode desmarcar filtros para ver suas outras conversas"</string>
|
||||
<string name="screen_roomlist_filter_mixed_empty_state_title">"Você não tem conversas para esta seleção"</string>
|
||||
<string name="screen_roomlist_filter_people">"Pessoas"</string>
|
||||
|
||||
@@ -13,6 +13,7 @@
|
||||
<string name="full_screen_intent_banner_message">"Muhim qoʻngʻiroqlarni oʻtkazib yubormasligingiz uchun telefoningiz qulflangan holatida toʻliq ekranli bildirishnomalarni ko‘rsatishga ruxsat beradigan qilib sozlamalaringizni oʻzgartiring."</string>
|
||||
<string name="full_screen_intent_banner_title">"Qoʻngʻiroq tajribangizni yaxshilang"</string>
|
||||
<string name="screen_home_tab_chats">"Suhbatlar"</string>
|
||||
<string name="screen_home_tab_spaces">"Bo‘shliqlar"</string>
|
||||
<string name="screen_invites_decline_chat_message">"Haqiqatan ham qo\'shilish taklifini rad qilmoqchimisiz%1$s ?"</string>
|
||||
<string name="screen_invites_decline_chat_title">"Taklifni rad etish"</string>
|
||||
<string name="screen_invites_decline_direct_chat_message">"Haqiqatan ham bu shaxsiy chatni rad qilmoqchimisiz%1$s ?"</string>
|
||||
@@ -22,6 +23,7 @@
|
||||
<string name="screen_migration_message">"Bu bir martalik jarayon, kutganingiz uchun rahmat."</string>
|
||||
<string name="screen_migration_title">"Hisobingiz sozlanmoqda."</string>
|
||||
<string name="screen_roomlist_a11y_create_message">"Yangi suhbat yoki xona yarating"</string>
|
||||
<string name="screen_roomlist_clear_filters">"Filtrlarni tozalash"</string>
|
||||
<string name="screen_roomlist_empty_message">"Kimgadir xabar yuborishdan boshlang."</string>
|
||||
<string name="screen_roomlist_empty_title">"Hozircha chatlar yo‘q."</string>
|
||||
<string name="screen_roomlist_filter_favourites">"Sevimlilar"</string>
|
||||
@@ -31,6 +33,7 @@ Hozircha, boshqa suhbatlaringizni ko‘rish uchun filtrlarni bekor qilishingiz m
|
||||
<string name="screen_roomlist_filter_invites">"Takliflar"</string>
|
||||
<string name="screen_roomlist_filter_invites_empty_state_title">"Sizda hech qanday kutilayotgan takliflar yoʻq."</string>
|
||||
<string name="screen_roomlist_filter_low_priority">"Past darajali"</string>
|
||||
<string name="screen_roomlist_filter_low_priority_empty_state_title">"Sizda hali past ustuvor chatlar yoʻq"</string>
|
||||
<string name="screen_roomlist_filter_mixed_empty_state_subtitle">"Boshqa suhbatlaringizni koʻrish uchun filtrlarni bekor qilishingiz mumkin"</string>
|
||||
<string name="screen_roomlist_filter_mixed_empty_state_title">"Sizda bu tanlov uchun chatlar yo‘q"</string>
|
||||
<string name="screen_roomlist_filter_people">"Odamlar"</string>
|
||||
@@ -44,6 +47,7 @@ Sizda oʻqilmagan xabarlar yoʻq!"</string>
|
||||
<string name="screen_roomlist_main_space_title">"Suhbatlar"</string>
|
||||
<string name="screen_roomlist_mark_as_read">"Oʻqilgan deb belgilash"</string>
|
||||
<string name="screen_roomlist_mark_as_unread">"Oʻqilmagan deb belgilash"</string>
|
||||
<string name="screen_roomlist_tombstoned_room_description">"Bu xona yangilandi"</string>
|
||||
<string name="session_verification_banner_message">"Siz yangi qurilmadan foydalanayotganga o‘xshaysiz. Shifrlangan xabarlaringizga kirish uchun boshqa qurilma bilan tasdiqlang."</string>
|
||||
<string name="session_verification_banner_title">"Siz ekanligingizni tasdiqlang"</string>
|
||||
</resources>
|
||||
|
||||
@@ -3,6 +3,8 @@
|
||||
<string name="banner_battery_optimization_content_android">"请关闭本应用的电池优化设置,确保不错过任何消息通知。"</string>
|
||||
<string name="banner_battery_optimization_submit_android">"禁用优化"</string>
|
||||
<string name="banner_battery_optimization_title_android">"通知未送达?"</string>
|
||||
<string name="banner_new_sound_message">"您的通知提示音已升级 - 更清晰、更快速、干扰更少。"</string>
|
||||
<string name="banner_new_sound_title">"我们已更新您的声音"</string>
|
||||
<string name="banner_set_up_recovery_content">"生成新的恢复密钥,该密钥可用于在您无法访问设备时恢复加密的消息历史记录。"</string>
|
||||
<string name="banner_set_up_recovery_submit">"设置恢复"</string>
|
||||
<string name="banner_set_up_recovery_title">"设置恢复"</string>
|
||||
|
||||
@@ -13,17 +13,19 @@ import com.bumble.appyx.core.modality.BuildContext
|
||||
import com.google.common.truth.Truth.assertThat
|
||||
import io.element.android.features.home.api.HomeEntryPoint
|
||||
import io.element.android.libraries.matrix.api.core.RoomId
|
||||
import io.element.android.libraries.matrix.api.room.JoinedRoom
|
||||
import io.element.android.libraries.matrix.test.FakeMatrixClient
|
||||
import io.element.android.services.analytics.test.FakeAnalyticsService
|
||||
import io.element.android.tests.testutils.lambda.lambdaError
|
||||
import io.element.android.tests.testutils.node.TestParentNode
|
||||
import kotlinx.coroutines.test.runTest
|
||||
import org.junit.Test
|
||||
import org.junit.runner.RunWith
|
||||
|
||||
@RunWith(AndroidJUnit4::class)
|
||||
class DefaultHomeEntryPointTest {
|
||||
@Test
|
||||
fun `test node builder`() {
|
||||
fun `test node builder`() = runTest {
|
||||
val entryPoint = DefaultHomeEntryPoint()
|
||||
val parentNode = TestParentNode.create { buildContext, plugins ->
|
||||
HomeFlowNode(
|
||||
@@ -39,10 +41,11 @@ class DefaultHomeEntryPointTest {
|
||||
declineInviteAndBlockUserEntryPoint = { _, _, _ -> lambdaError() },
|
||||
changeRoomMemberRolesEntryPoint = { _, _, _, _ -> lambdaError() },
|
||||
leaveRoomRenderer = { _, _, _ -> lambdaError() },
|
||||
sessionCoroutineScope = backgroundScope,
|
||||
)
|
||||
}
|
||||
val callback = object : HomeEntryPoint.Callback {
|
||||
override fun navigateToRoom(roomId: RoomId) = lambdaError()
|
||||
override fun navigateToRoom(roomId: RoomId, joinedRoom: JoinedRoom?) = lambdaError()
|
||||
override fun navigateToCreateRoom() = lambdaError()
|
||||
override fun navigateToSettings() = lambdaError()
|
||||
override fun navigateToSetUpRecovery() = lambdaError()
|
||||
|
||||
@@ -11,11 +11,12 @@ package io.element.android.features.home.impl.datasource
|
||||
import io.element.android.libraries.dateformatter.api.DateFormatter
|
||||
import io.element.android.libraries.dateformatter.test.FakeDateFormatter
|
||||
import io.element.android.libraries.eventformatter.api.RoomLatestEventFormatter
|
||||
import io.element.android.libraries.eventformatter.test.FakeRoomLatestEventFormatter
|
||||
|
||||
fun aRoomListRoomSummaryFactory(
|
||||
dateFormatter: DateFormatter = FakeDateFormatter { _, _, _ -> "Today" },
|
||||
roomLatestEventFormatter: RoomLatestEventFormatter = RoomLatestEventFormatter { _, _ -> "Hey" }
|
||||
roomLatestEventFormatter: RoomLatestEventFormatter = FakeRoomLatestEventFormatter(),
|
||||
) = RoomListRoomSummaryFactory(
|
||||
dateFormatter = dateFormatter,
|
||||
roomLatestEventFormatter = roomLatestEventFormatter
|
||||
roomLatestEventFormatter = roomLatestEventFormatter,
|
||||
)
|
||||
|
||||
@@ -96,7 +96,7 @@ internal fun createRoomListRoomSummary(
|
||||
numberOfUnreadNotifications = numberOfUnreadNotifications,
|
||||
isMarkedUnread = isMarkedUnread,
|
||||
timestamp = timestamp,
|
||||
latestEvent = "",
|
||||
latestEvent = LatestEvent.Synced(""),
|
||||
avatarData = AvatarData(id = A_ROOM_ID.value, name = A_ROOM_NAME, size = AvatarSize.RoomListItem),
|
||||
displayType = displayType,
|
||||
userDefinedNotificationMode = userDefinedNotificationMode,
|
||||
|
||||
@@ -170,7 +170,7 @@ class RoomListViewTest {
|
||||
// Remove automatic initial events
|
||||
eventsRecorder.clear()
|
||||
|
||||
rule.onNodeWithText(room0.latestEvent!!.toString()).performClick()
|
||||
rule.onNodeWithText(room0.latestEvent.content().toString()).performClick()
|
||||
}
|
||||
|
||||
eventsRecorder.assertEmpty()
|
||||
@@ -192,7 +192,7 @@ class RoomListViewTest {
|
||||
)
|
||||
// Remove automatic initial events
|
||||
eventsRecorder.clear()
|
||||
rule.onNodeWithText(room0.latestEvent!!.toString())
|
||||
rule.onNodeWithText(room0.latestEvent.content().toString())
|
||||
.performClick()
|
||||
.performClick()
|
||||
}
|
||||
@@ -214,7 +214,7 @@ class RoomListViewTest {
|
||||
// Remove automatic initial events
|
||||
eventsRecorder.clear()
|
||||
|
||||
rule.onNodeWithText(room0.latestEvent!!.toString()).performTouchInput { longClick() }
|
||||
rule.onNodeWithText(room0.latestEvent.content().toString()).performTouchInput { longClick() }
|
||||
eventsRecorder.assertSingle(RoomListEvents.ShowContextMenu(room0))
|
||||
}
|
||||
|
||||
|
||||
@@ -1,6 +1,9 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
|
||||
<string name="screen_decline_and_block_block_user_option_description">"Siz bu foydalanuvchidan hech qanday xabar yoki xonaga taklif ko‘rmaysiz"</string>
|
||||
<string name="screen_decline_and_block_block_user_option_title">"Foydalanuvchini bloklash"</string>
|
||||
<string name="screen_decline_and_block_report_user_option_description">"Bu xona haqida hisobingiz provayderiga xabar bering."</string>
|
||||
<string name="screen_decline_and_block_report_user_reason_placeholder">"Xabar berish sababini tushuntiring…"</string>
|
||||
<string name="screen_decline_and_block_title">"Rad etish va bloklash"</string>
|
||||
<string name="screen_invites_decline_chat_message">"Haqiqatan ham qo\'shilish taklifini rad qilmoqchimisiz%1$s ?"</string>
|
||||
<string name="screen_invites_decline_chat_title">"Taklifni rad etish"</string>
|
||||
@@ -8,5 +11,8 @@
|
||||
<string name="screen_invites_decline_direct_chat_title">"Chatni rad etish"</string>
|
||||
<string name="screen_invites_empty_list">"Takliflar yo\'q"</string>
|
||||
<string name="screen_invites_invited_you">"%1$s(%2$s ) sizni taklif qildi"</string>
|
||||
<string name="screen_join_room_decline_and_block_alert_confirmation">"Ha, rad etish va bloklash"</string>
|
||||
<string name="screen_join_room_decline_and_block_alert_message">"Ushbu xonaga qo‘shilish taklifini rad etishga ishonchingiz komilmi? Bu %1$sning siz bilan bog‘lanishiga yoki sizni xonalarga taklif qilishiga ham to‘sqinlik qiladi."</string>
|
||||
<string name="screen_join_room_decline_and_block_alert_title">"Taklifni rad etish va bloklash"</string>
|
||||
<string name="screen_join_room_decline_and_block_button_title">"Rad etish va bloklash"</string>
|
||||
</resources>
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
|
||||
<string name="screen_join_room_ban_by_message">"Sei stato bandito da questa stanza da %1$s."</string>
|
||||
<string name="screen_join_room_ban_message">"Sei stato bandito da questa stanza"</string>
|
||||
<string name="screen_join_room_ban_by_message">"Sei stato bannato da %1$s ."</string>
|
||||
<string name="screen_join_room_ban_message">"Sei stato bannato"</string>
|
||||
<string name="screen_join_room_ban_reason">"Motivo: %1$s"</string>
|
||||
<string name="screen_join_room_cancel_knock_action">"Cancella richiesta"</string>
|
||||
<string name="screen_join_room_cancel_knock_alert_confirmation">"Sì, annulla"</string>
|
||||
@@ -11,10 +11,11 @@
|
||||
<string name="screen_join_room_decline_and_block_alert_message">"Sei sicuro di voler rifiutare l\'invito a entrare in questa stanza? Ciò impedirà a %1$s di contattarti o invitarti nuovamente in una stanza."</string>
|
||||
<string name="screen_join_room_decline_and_block_alert_title">"Rifiuta invito e blocca"</string>
|
||||
<string name="screen_join_room_decline_and_block_button_title">"Rifiuta e blocca"</string>
|
||||
<string name="screen_join_room_fail_message">"L\'accesso alla stanza non è riuscito."</string>
|
||||
<string name="screen_join_room_fail_reason">"Questa stanza è solo su invito o potrebbero esserci delle restrizioni all\'accesso al livello dello spazio."</string>
|
||||
<string name="screen_join_room_forget_action">"Dimentica questa stanza"</string>
|
||||
<string name="screen_join_room_invite_required_message">"Hai bisogno di un invito per entrare in questa stanza"</string>
|
||||
<string name="screen_join_room_fail_message">"Partecipazione non riuscita"</string>
|
||||
<string name="screen_join_room_fail_reason">"Devi essere invitato per partecipare o potrebbero esserci delle restrizioni di accesso."</string>
|
||||
<string name="screen_join_room_forget_action">"Dimentica"</string>
|
||||
<string name="screen_join_room_invite_required_message">"Per partecipare è necessario un invito"</string>
|
||||
<string name="screen_join_room_invited_by">"Invitato da"</string>
|
||||
<string name="screen_join_room_join_action">"Entra"</string>
|
||||
<string name="screen_join_room_join_restricted_message">"Potrebbe essere necessario essere invitati o essere membro di uno spazio per partecipare."</string>
|
||||
<string name="screen_join_room_knock_action">"Bussa per partecipare"</string>
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
|
||||
<string name="screen_join_room_ban_by_message">"Você foi banido desta sala por %1$s."</string>
|
||||
<string name="screen_join_room_ban_message">"Você foi banido desta sala"</string>
|
||||
<string name="screen_join_room_ban_by_message">"Você foi banido por %1$s."</string>
|
||||
<string name="screen_join_room_ban_message">"Você foi banido"</string>
|
||||
<string name="screen_join_room_ban_reason">"Motivo: %1$s."</string>
|
||||
<string name="screen_join_room_cancel_knock_action">"Cancelar pedido"</string>
|
||||
<string name="screen_join_room_cancel_knock_alert_confirmation">"Sim, cancelar"</string>
|
||||
@@ -11,10 +11,11 @@
|
||||
<string name="screen_join_room_decline_and_block_alert_message">"Tem certeza de que quer recusar o convite para entrar nesta sala? Isso também impedirá que %1$s entre em contato com você ou o convide para salas."</string>
|
||||
<string name="screen_join_room_decline_and_block_alert_title">"Recusar convite e bloquear"</string>
|
||||
<string name="screen_join_room_decline_and_block_button_title">"Recusar e bloquear"</string>
|
||||
<string name="screen_join_room_fail_message">"A entrada na sala falhou."</string>
|
||||
<string name="screen_join_room_fail_reason">"Esta sala é apenas para convidados ou pode haver restrições de acesso a nível do espaço."</string>
|
||||
<string name="screen_join_room_forget_action">"Esquecer esta sala"</string>
|
||||
<string name="screen_join_room_invite_required_message">"Você precisa de um convite para entrar nesta sala"</string>
|
||||
<string name="screen_join_room_fail_message">"Falha ao entrar"</string>
|
||||
<string name="screen_join_room_fail_reason">"Você precisa ser convidado ou pode haver restrições ao acesso."</string>
|
||||
<string name="screen_join_room_forget_action">"Esquecer"</string>
|
||||
<string name="screen_join_room_invite_required_message">"Você precisa de um convite para entrar"</string>
|
||||
<string name="screen_join_room_invited_by">"Convidado por"</string>
|
||||
<string name="screen_join_room_join_action">"Entrar"</string>
|
||||
<string name="screen_join_room_join_restricted_message">"Talvez você precise ser convidado ou ser membro de um espaço para participar."</string>
|
||||
<string name="screen_join_room_knock_action">"Enviar solicitação para entrar"</string>
|
||||
|
||||
@@ -1,15 +1,29 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
|
||||
<string name="screen_join_room_ban_by_message">"Siz %1$s tomonidan ushbu xonadan ban qilingansiz."</string>
|
||||
<string name="screen_join_room_ban_message">"Siz bu xonadan chetlashtirilgansiz"</string>
|
||||
<string name="screen_join_room_ban_reason">"Sababi: %1$s ."</string>
|
||||
<string name="screen_join_room_cancel_knock_action">"So‘rovni bekor qilish"</string>
|
||||
<string name="screen_join_room_cancel_knock_alert_confirmation">"Ha, bekor qiling"</string>
|
||||
<string name="screen_join_room_cancel_knock_alert_description">"Bu xonaga qo‘shilish so‘rovingizni bekor qilishni xohlayotganingizga ishonchingiz komilmi?"</string>
|
||||
<string name="screen_join_room_cancel_knock_alert_title">"Qo‘shilish so‘rovini bekor qilish"</string>
|
||||
<string name="screen_join_room_decline_and_block_alert_confirmation">"Ha, rad etish va bloklash"</string>
|
||||
<string name="screen_join_room_decline_and_block_alert_message">"Ushbu xonaga qo‘shilish taklifini rad etishga ishonchingiz komilmi? Bu %1$sning siz bilan bog‘lanishiga yoki sizni xonalarga taklif qilishiga ham to‘sqinlik qiladi."</string>
|
||||
<string name="screen_join_room_decline_and_block_alert_title">"Taklifni rad etish va bloklash"</string>
|
||||
<string name="screen_join_room_decline_and_block_button_title">"Rad etish va bloklash"</string>
|
||||
<string name="screen_join_room_fail_message">"Xonaga qo‘shilish amalga oshmadi"</string>
|
||||
<string name="screen_join_room_fail_reason">"Bu xona faqat taklif etilganlar uchun yoki bu maydonga kirish huquqi cheklangan bo‘lishi mumkin."</string>
|
||||
<string name="screen_join_room_forget_action">"Bu xonani esdan chiqarish"</string>
|
||||
<string name="screen_join_room_invite_required_message">"Bu xonaga kirish uchun taklifnoma kerak"</string>
|
||||
<string name="screen_join_room_join_action">"Qo\'shilish"</string>
|
||||
<string name="screen_join_room_join_restricted_message">"Qo‘shilish uchun sizga taklif kerak yoki siz maydonga a’zo bo‘lishingiz kerak."</string>
|
||||
<string name="screen_join_room_knock_action">"Qoʻshilish soʻrovini yuborish"</string>
|
||||
<string name="screen_join_room_knock_message_characters_count">"Ruxsat etilgan belgilar: %1$d / %2$d"</string>
|
||||
<string name="screen_join_room_knock_message_description">"Xabar (ixtiyoriy)"</string>
|
||||
<string name="screen_join_room_knock_sent_description">"Agar so‘rovingiz qabul qilinsa, xonaga qo‘shilish taklifini olasiz."</string>
|
||||
<string name="screen_join_room_knock_sent_title">"Qo‘shilish so‘rovi yuborildi"</string>
|
||||
<string name="screen_join_room_loading_alert_message">"Xona ko‘rinishini namoyish eta olmadik. Bu tarmoq yoki server muammolari tufayli yuz bergan bo‘lishi mumkin."</string>
|
||||
<string name="screen_join_room_loading_alert_title">"Biz bu xonani oldindan ko‘rishni ko‘rsata olmadik "</string>
|
||||
<string name="screen_join_room_space_not_supported_description">"%1$s hali maydon xizmatini qoʻllab-quvvatlamaydi. maydonga veb-sayt orqali kirishingiz mumkin."</string>
|
||||
<string name="screen_join_room_space_not_supported_title">"Maydonlar hali qoʻllab-quvvatlanmaydi"</string>
|
||||
<string name="screen_join_room_subtitle_knock">"Quyidagi tugmani bosing va xona administratoriga xabar beriladi. Ruxsat berilgandan soʻng suhbatga qoʻshilishingiz mumkin boʻladi."</string>
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
|
||||
<string name="screen_join_room_ban_by_message">"你被 %1$s 从此房间封禁。"</string>
|
||||
<string name="screen_join_room_ban_message">"你已被此房间封禁"</string>
|
||||
<string name="screen_join_room_ban_by_message">"您已被禁止访问%1$s。"</string>
|
||||
<string name="screen_join_room_ban_message">"你已被禁止访问"</string>
|
||||
<string name="screen_join_room_ban_reason">"理由:%1$s。"</string>
|
||||
<string name="screen_join_room_cancel_knock_action">"取消请求"</string>
|
||||
<string name="screen_join_room_cancel_knock_alert_confirmation">"是的,取消"</string>
|
||||
@@ -11,10 +11,10 @@
|
||||
<string name="screen_join_room_decline_and_block_alert_message">"您确定要拒绝加入此房间的邀请吗?这也将阻止%1$s 与您联系或邀请您加入房间。"</string>
|
||||
<string name="screen_join_room_decline_and_block_alert_title">"拒绝邀请并屏蔽"</string>
|
||||
<string name="screen_join_room_decline_and_block_button_title">"拒绝并屏蔽"</string>
|
||||
<string name="screen_join_room_fail_message">"加入房间失败。"</string>
|
||||
<string name="screen_join_room_fail_reason">"要么此房间仅限受邀者,要么可能在空间层级有加入限制。"</string>
|
||||
<string name="screen_join_room_forget_action">"忘记这个房间"</string>
|
||||
<string name="screen_join_room_invite_required_message">"你需要邀请才能加入这个房间"</string>
|
||||
<string name="screen_join_room_fail_message">"加入失败"</string>
|
||||
<string name="screen_join_room_fail_reason">"您需要被邀请加入,否则可能会受到访问限制。"</string>
|
||||
<string name="screen_join_room_forget_action">"忘记"</string>
|
||||
<string name="screen_join_room_invite_required_message">"您需要邀请才能加入"</string>
|
||||
<string name="screen_join_room_invited_by">"受邀于"</string>
|
||||
<string name="screen_join_room_join_action">"加入"</string>
|
||||
<string name="screen_join_room_join_restricted_message">"您可能需要受到邀请或成为某个空间的成员才能加入。"</string>
|
||||
|
||||
@@ -1,5 +1,36 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
|
||||
<string name="screen_knock_requests_list_accept_all_alert_confirm_button_title">"Ha, hammasini qabul qiling"</string>
|
||||
<string name="screen_knock_requests_list_accept_all_alert_description">"Barcha qo‘shilish so‘rovlarini qabul qilishga ishonchingiz komilmi?"</string>
|
||||
<string name="screen_knock_requests_list_accept_all_alert_title">"Barcha so‘rovlarni qabul qilish"</string>
|
||||
<string name="screen_knock_requests_list_accept_all_button_title">"Hammasini qabul qiling"</string>
|
||||
<string name="screen_knock_requests_list_accept_all_failed_alert_description">"Biz barcha so‘rovlarni qabul qila olmadik. Qayta urinib koʻrmoqchimisiz?"</string>
|
||||
<string name="screen_knock_requests_list_accept_all_failed_alert_title">"Barcha so‘rovlar qabul qilinmadi"</string>
|
||||
<string name="screen_knock_requests_list_accept_all_loading_title">"Qo‘shilish so‘rovi qabul qilinmoqda"</string>
|
||||
<string name="screen_knock_requests_list_accept_failed_alert_description">"Biz bu so‘rovni qabul qila olmadik. Yana bir bor urinib ko‘rishni xohlaysizmi?"</string>
|
||||
<string name="screen_knock_requests_list_accept_failed_alert_title">"So‘rovni qabul qilib bo‘lmadi"</string>
|
||||
<string name="screen_knock_requests_list_accept_loading_title">"Qo‘shilish so‘rovi qabul qilinmoqda"</string>
|
||||
<string name="screen_knock_requests_list_ban_alert_confirm_button_title">"Ha, rad eting va taqiqlang"</string>
|
||||
<string name="screen_knock_requests_list_ban_alert_description">"Siz %1$sʼni rad etib, taqiqlashni xohlayotganingizga ishonchingiz komilmi? Bu foydalanuvchi ushbu xonaga qayta kirish uchun ruxsat so‘ray olmaydi."</string>
|
||||
<string name="screen_knock_requests_list_ban_alert_title">"Rad etish va kirishni taqiqlash"</string>
|
||||
<string name="screen_knock_requests_list_ban_loading_title">"Kirishni rad etish va taqiqlash"</string>
|
||||
<string name="screen_knock_requests_list_decline_alert_confirm_button_title">"Ha, rad etish"</string>
|
||||
<string name="screen_knock_requests_list_decline_alert_description">"%1$sning bu xonaga qo‘shilish so‘rovini rad etasizmi?"</string>
|
||||
<string name="screen_knock_requests_list_decline_alert_title">"Kirishni rad etish"</string>
|
||||
<string name="screen_knock_requests_list_decline_and_ban_action_title">"Rad etish va taqiqlash"</string>
|
||||
<string name="screen_knock_requests_list_decline_failed_alert_description">"Biz bu iltimosni rad etolmasdik. Yana bir bor urinib ko‘rishni xohlaysizmi?"</string>
|
||||
<string name="screen_knock_requests_list_decline_failed_alert_title">"So‘rovni rad etib bo‘lmadi"</string>
|
||||
<string name="screen_knock_requests_list_decline_loading_title">"Qo‘shilish so‘rovi rad etilayapti"</string>
|
||||
<string name="screen_knock_requests_list_empty_state_description">"Kimdir xonaga qo‘shilishni so‘raganda, uning iltimosini shu yerda ko‘rishingiz mumkin."</string>
|
||||
<string name="screen_knock_requests_list_empty_state_title">"Qo‘shilish so‘rovi kutilmayapti"</string>
|
||||
<string name="screen_knock_requests_list_initial_loading_title">"Qo‘shilish uchun so‘rovlar yuklanmoqda…"</string>
|
||||
<string name="screen_knock_requests_list_title">"Qo‘shilish uchun so‘rovlar"</string>
|
||||
<plurals name="screen_room_multiple_knock_requests_title">
|
||||
<item quantity="one">"%1$s + %2$d kishi bu xonaga qo‘shilmoqchi"</item>
|
||||
<item quantity="other">"%1$s + %2$d kishi bu xonaga qo‘shilmoqchi"</item>
|
||||
</plurals>
|
||||
<string name="screen_room_multiple_knock_requests_view_all_button_title">"Hammasini ko\'rish"</string>
|
||||
<string name="screen_room_single_knock_request_accept_button_title">"Qabul qiling"</string>
|
||||
<string name="screen_room_single_knock_request_title">"%1$s bu xonaga qo‘shilmoqchi"</string>
|
||||
<string name="screen_room_single_knock_request_view_button_title">"Ko\'rish"</string>
|
||||
</resources>
|
||||
|
||||
@@ -3,5 +3,8 @@
|
||||
<string name="leave_conversation_alert_subtitle">"Bu suhbatni tark etmoqchi ekanligingizga ishonchingiz komilmi? Bu suhbat hammaga ochiq emas va siz taklifsiz qayta qo‘shila olmaysiz."</string>
|
||||
<string name="leave_room_alert_empty_subtitle">"Bu xonani tark etmoqchi ekanligingizga ishonchingiz komilmi? Siz bu yerda yagona odamsiz. Agar siz tark etsangiz, kelajakda hech kim qo\'shila olmaydi, jumladan siz ham."</string>
|
||||
<string name="leave_room_alert_private_subtitle">"Bu xonani tark etmoqchi ekanligingizga ishonchingiz komilmi? Bu xona ochiq emas va siz taklifsiz qayta qo‘shila olmaysiz."</string>
|
||||
<string name="leave_room_alert_select_new_owner_action">"Egalarni tanlang"</string>
|
||||
<string name="leave_room_alert_select_new_owner_subtitle">"Siz bu xonaning yagona egasisiz. Xonadan chiqishdan oldin egalikni boshqaga topshirishingiz kerak."</string>
|
||||
<string name="leave_room_alert_select_new_owner_title">"Egalikni topshirish"</string>
|
||||
<string name="leave_room_alert_subtitle">"Xonani tark etmoqchi ekanligingizga ishonchingiz komilmi?"</string>
|
||||
</resources>
|
||||
|
||||
@@ -24,6 +24,14 @@
|
||||
<string name="screen_app_lock_setup_pin_mismatch_dialog_title">"پینها مطابق نیستند"</string>
|
||||
<string name="screen_app_lock_signout_alert_message">"برای ادامه باید دوباره وارد شده و پینی جدید ایجاد کنید"</string>
|
||||
<string name="screen_app_lock_signout_alert_title">"دارید خارج میشوید"</string>
|
||||
<plurals name="screen_app_lock_subtitle">
|
||||
<item quantity="one">"شما %1$d تلاش برای باز کردن قفل دارید"</item>
|
||||
<item quantity="other">"شما %1$d تلاش برای باز کردن قفل دارید"</item>
|
||||
</plurals>
|
||||
<plurals name="screen_app_lock_subtitle_wrong_pin">
|
||||
<item quantity="one">"پین اشتباه است. شما %1$d شانس دیگر دارید"</item>
|
||||
<item quantity="other">"پین اشتباه است. شما %1$d شانس دیگر دارید"</item>
|
||||
</plurals>
|
||||
<string name="screen_app_lock_use_biometric_android">"استفاده از زیستسنجی"</string>
|
||||
<string name="screen_app_lock_use_pin_android">"استفاده از پین"</string>
|
||||
<string name="screen_signout_in_progress_dialog_content">"خارج شدن…"</string>
|
||||
|
||||
@@ -3,6 +3,7 @@
|
||||
<string name="screen_app_lock_biometric_authentication">"biometrik autentifikatsiya"</string>
|
||||
<string name="screen_app_lock_biometric_unlock">"biometrik qulf ochish"</string>
|
||||
<string name="screen_app_lock_biometric_unlock_title_android">"Biometrik bilan qulfni oching"</string>
|
||||
<string name="screen_app_lock_confirm_biometric_authentication_android">"Biometrikni tasdiqlang"</string>
|
||||
<string name="screen_app_lock_forgot_pin">"PIN kodni unutdingizmi?"</string>
|
||||
<string name="screen_app_lock_settings_change_pin">"PIN kodni o\'zgartirish"</string>
|
||||
<string name="screen_app_lock_settings_enable_biometric_unlock">"Biometrik qulfni ochishga ruxsat bering"</string>
|
||||
|
||||
@@ -13,9 +13,17 @@
|
||||
<string name="screen_change_account_provider_other">"Boshqa"</string>
|
||||
<string name="screen_change_account_provider_subtitle">"Shaxsiy serveringiz yoki ishchi hisob qaydnomangiz kabi boshqa hisob provayderidan foydalaning."</string>
|
||||
<string name="screen_change_account_provider_title">"Hisob provayderini o\'zgartiring"</string>
|
||||
<string name="screen_change_server_error_element_pro_required_action_android">"Google Play"</string>
|
||||
<string name="screen_change_server_error_element_pro_required_message">"%1$s da Element Pro ilovasi talab qilinadi. Iltimos, do‘kondan yuklab oling."</string>
|
||||
<string name="screen_change_server_error_element_pro_required_title">"Element Pro talab qilinadi"</string>
|
||||
<string name="screen_change_server_error_invalid_homeserver">"Bu uy serveriga kira olmadik. Iltimos, uy serverining URL manzilini to\'ri kiritganingizni tekshiring. Agar URL toʻgʻri boʻlsa, qoʻshimcha yordam olish uchun uy serveri administratoriga murojaat qiling."</string>
|
||||
<string name="screen_change_server_error_invalid_well_known">".well-known faylidagi muammo tufayli server mavjud emas: %1$s"</string>
|
||||
<string name="screen_change_server_error_no_sliding_sync_message">"Tanlangan hisob provayderi siljitish sinxronizatsiyasini qo‘llab-quvvatlamaydi. %1$s ishlatish uchun serverni yangilash zarur."</string>
|
||||
<string name="screen_change_server_error_unauthorized_homeserver">"%1$s uchun %2$s bilan ulanishga ruxsat berilmagan."</string>
|
||||
<string name="screen_change_server_error_unauthorized_homeserver_content">"Bu ilova quyidagilarga ruxsat berish uchun sozlangan: %1$s ."</string>
|
||||
<string name="screen_change_server_error_unauthorized_homeserver_title">"Hisob provayderi %1$s ga ruxsat berilmagan."</string>
|
||||
<string name="screen_change_server_form_header">"Uy serverining URL manzili"</string>
|
||||
<string name="screen_change_server_form_notice">"Domen manzilini kiriting."</string>
|
||||
<string name="screen_change_server_subtitle">"Serveringizning manzili nima?"</string>
|
||||
<string name="screen_change_server_title">"Serveringizni tanlang"</string>
|
||||
<string name="screen_create_account_title">"Hisob yaratish"</string>
|
||||
@@ -28,6 +36,7 @@
|
||||
<string name="screen_login_subtitle">"Matrix xavfsiz, markazlashmagan aloqa uchun ochiq tarmoqdir."</string>
|
||||
<string name="screen_login_title">"Qaytib kelganingizdan xursandmiz!"</string>
|
||||
<string name="screen_login_title_with_homeserver">"Kirish%1$s"</string>
|
||||
<string name="screen_onboarding_app_version">"%1$s versiya"</string>
|
||||
<string name="screen_onboarding_sign_in_manually">"Qo\'lda tizimga kiring"</string>
|
||||
<string name="screen_onboarding_sign_in_to">"Kirish%1$s"</string>
|
||||
<string name="screen_onboarding_sign_in_with_qr_code">"QR kod bilan tizimga kiring"</string>
|
||||
@@ -83,5 +92,6 @@ Oddiy usulda kiring yoki boshqa qurilma bilan QR kodni skanerlang."</string>
|
||||
<string name="screen_server_confirmation_message_login_matrix_dot_org">"Matrix xavfsiz, markazlashmagan aloqa uchun ochiq tarmoqdir."</string>
|
||||
<string name="screen_server_confirmation_message_register">"Bu sizning suhbatlaringiz yashaydigan joy - xuddi siz elektron pochta xabarlaringizni saqlash uchun elektron pochta provayderidan foydalanganingiz kabi."</string>
|
||||
<string name="screen_server_confirmation_title_login">"Siz tizimga kirmoqchisiz%1$s"</string>
|
||||
<string name="screen_server_confirmation_title_picker_mode">"Hisob provayderini tanlang"</string>
|
||||
<string name="screen_server_confirmation_title_register">"Hisob yaratmoqchisiz%1$s"</string>
|
||||
</resources>
|
||||
|
||||
@@ -6,6 +6,7 @@
|
||||
<string name="screen_signout_in_progress_dialog_content">"خارج شدن…"</string>
|
||||
<string name="screen_signout_key_backup_disabled_subtitle">"دارید از واپسین نشستتان خارج میشوید. اگر اکنون خارج شوید پیامهای رمزنگاشتهتان را از دست خواهید داد."</string>
|
||||
<string name="screen_signout_key_backup_disabled_title">"پشتیبان را خاموش کردهاید"</string>
|
||||
<string name="screen_signout_key_backup_offline_subtitle">"در هنگامی که آفلاین شدید، کلیدهای شما هنوز در حال پشتیبانگیری بودند. دوباره متصل شوید ، تا قبل از خروج از کلیدهایتان نسخه پشتیبان گرفته شود."</string>
|
||||
<string name="screen_signout_key_backup_offline_title">"کلیدهایتان هنوز در حال پشتیبان گیریند"</string>
|
||||
<string name="screen_signout_key_backup_ongoing_subtitle">"لطفاً پیش از خروج منتظر پایانش شوید."</string>
|
||||
<string name="screen_signout_key_backup_ongoing_title">"کلیدهایتان هنوز در حال پشتیبان گیریند"</string>
|
||||
|
||||
@@ -12,17 +12,17 @@ import androidx.lifecycle.Lifecycle
|
||||
import io.element.android.libraries.textcomposer.model.VoiceMessagePlayerEvent
|
||||
import io.element.android.libraries.textcomposer.model.VoiceMessageRecorderEvent
|
||||
|
||||
sealed interface VoiceMessageComposerEvents {
|
||||
sealed interface VoiceMessageComposerEvent {
|
||||
data class RecorderEvent(
|
||||
val recorderEvent: VoiceMessageRecorderEvent
|
||||
) : VoiceMessageComposerEvents
|
||||
) : VoiceMessageComposerEvent
|
||||
data class PlayerEvent(
|
||||
val playerEvent: VoiceMessagePlayerEvent,
|
||||
) : VoiceMessageComposerEvents
|
||||
data object SendVoiceMessage : VoiceMessageComposerEvents
|
||||
data object DeleteVoiceMessage : VoiceMessageComposerEvents
|
||||
data object AcceptPermissionRationale : VoiceMessageComposerEvents
|
||||
data object DismissPermissionsRationale : VoiceMessageComposerEvents
|
||||
data class LifecycleEvent(val event: Lifecycle.Event) : VoiceMessageComposerEvents
|
||||
data object DismissSendFailureDialog : VoiceMessageComposerEvents
|
||||
) : VoiceMessageComposerEvent
|
||||
data object SendVoiceMessage : VoiceMessageComposerEvent
|
||||
data object DeleteVoiceMessage : VoiceMessageComposerEvent
|
||||
data object AcceptPermissionRationale : VoiceMessageComposerEvent
|
||||
data object DismissPermissionsRationale : VoiceMessageComposerEvent
|
||||
data class LifecycleEvent(val event: Lifecycle.Event) : VoiceMessageComposerEvent
|
||||
data object DismissSendFailureDialog : VoiceMessageComposerEvent
|
||||
}
|
||||
@@ -17,5 +17,5 @@ data class VoiceMessageComposerState(
|
||||
val showPermissionRationaleDialog: Boolean,
|
||||
val showSendFailureDialog: Boolean,
|
||||
val keepScreenOn: Boolean,
|
||||
val eventSink: (VoiceMessageComposerEvents) -> Unit,
|
||||
val eventSink: (VoiceMessageComposerEvent) -> Unit,
|
||||
)
|
||||
|
||||
@@ -49,7 +49,7 @@ import androidx.compose.ui.text.style.TextAlign
|
||||
import androidx.compose.ui.tooling.preview.PreviewParameter
|
||||
import androidx.compose.ui.unit.dp
|
||||
import io.element.android.compound.theme.ElementTheme
|
||||
import io.element.android.features.messages.api.timeline.voicemessages.composer.VoiceMessageComposerEvents
|
||||
import io.element.android.features.messages.api.timeline.voicemessages.composer.VoiceMessageComposerEvent
|
||||
import io.element.android.features.messages.impl.actionlist.ActionListEvents
|
||||
import io.element.android.features.messages.impl.actionlist.ActionListView
|
||||
import io.element.android.features.messages.impl.actionlist.model.TimelineItemAction
|
||||
@@ -126,7 +126,7 @@ fun MessagesView(
|
||||
knockRequestsBannerView: @Composable () -> Unit,
|
||||
) {
|
||||
OnLifecycleEvent { _, event ->
|
||||
state.voiceMessageComposerState.eventSink(VoiceMessageComposerEvents.LifecycleEvent(event))
|
||||
state.voiceMessageComposerState.eventSink(VoiceMessageComposerEvent.LifecycleEvent(event))
|
||||
}
|
||||
|
||||
KeepScreenOn(state.voiceMessageComposerState.keepScreenOn)
|
||||
@@ -413,17 +413,17 @@ private fun MessagesViewContent(
|
||||
if (state.voiceMessageComposerState.showPermissionRationaleDialog) {
|
||||
VoiceMessagePermissionRationaleDialog(
|
||||
onContinue = {
|
||||
state.voiceMessageComposerState.eventSink(VoiceMessageComposerEvents.AcceptPermissionRationale)
|
||||
state.voiceMessageComposerState.eventSink(VoiceMessageComposerEvent.AcceptPermissionRationale)
|
||||
},
|
||||
onDismiss = {
|
||||
state.voiceMessageComposerState.eventSink(VoiceMessageComposerEvents.DismissPermissionsRationale)
|
||||
state.voiceMessageComposerState.eventSink(VoiceMessageComposerEvent.DismissPermissionsRationale)
|
||||
},
|
||||
appName = state.appName
|
||||
)
|
||||
}
|
||||
if (state.voiceMessageComposerState.showSendFailureDialog) {
|
||||
VoiceMessageSendingFailedDialog(
|
||||
onDismiss = { state.voiceMessageComposerState.eventSink(VoiceMessageComposerEvents.DismissSendFailureDialog) },
|
||||
onDismiss = { state.voiceMessageComposerState.eventSink(VoiceMessageComposerEvent.DismissSendFailureDialog) },
|
||||
)
|
||||
}
|
||||
|
||||
|
||||
@@ -18,7 +18,7 @@ import androidx.compose.ui.Modifier
|
||||
import androidx.compose.ui.platform.LocalView
|
||||
import androidx.compose.ui.tooling.preview.PreviewParameter
|
||||
import androidx.compose.ui.unit.dp
|
||||
import io.element.android.features.messages.api.timeline.voicemessages.composer.VoiceMessageComposerEvents
|
||||
import io.element.android.features.messages.api.timeline.voicemessages.composer.VoiceMessageComposerEvent
|
||||
import io.element.android.features.messages.api.timeline.voicemessages.composer.VoiceMessageComposerState
|
||||
import io.element.android.features.messages.api.timeline.voicemessages.composer.VoiceMessageComposerStateProvider
|
||||
import io.element.android.features.messages.api.timeline.voicemessages.composer.aVoiceMessageComposerState
|
||||
@@ -78,19 +78,19 @@ internal fun MessageComposerView(
|
||||
}
|
||||
|
||||
val onVoiceRecorderEvent = { press: VoiceMessageRecorderEvent ->
|
||||
voiceMessageState.eventSink(VoiceMessageComposerEvents.RecorderEvent(press))
|
||||
voiceMessageState.eventSink(VoiceMessageComposerEvent.RecorderEvent(press))
|
||||
}
|
||||
|
||||
val onSendVoiceMessage = {
|
||||
voiceMessageState.eventSink(VoiceMessageComposerEvents.SendVoiceMessage)
|
||||
voiceMessageState.eventSink(VoiceMessageComposerEvent.SendVoiceMessage)
|
||||
}
|
||||
|
||||
val onDeleteVoiceMessage = {
|
||||
voiceMessageState.eventSink(VoiceMessageComposerEvents.DeleteVoiceMessage)
|
||||
voiceMessageState.eventSink(VoiceMessageComposerEvent.DeleteVoiceMessage)
|
||||
}
|
||||
|
||||
val onVoicePlayerEvent = { event: VoiceMessagePlayerEvent ->
|
||||
voiceMessageState.eventSink(VoiceMessageComposerEvents.PlayerEvent(event))
|
||||
voiceMessageState.eventSink(VoiceMessageComposerEvent.PlayerEvent(event))
|
||||
}
|
||||
|
||||
TextComposer(
|
||||
|
||||
@@ -65,6 +65,7 @@ import kotlinx.collections.immutable.persistentListOf
|
||||
import kotlinx.coroutines.CoroutineScope
|
||||
import kotlinx.coroutines.delay
|
||||
import kotlinx.coroutines.flow.combine
|
||||
import kotlinx.coroutines.flow.flowOn
|
||||
import kotlinx.coroutines.flow.launchIn
|
||||
import kotlinx.coroutines.flow.onEach
|
||||
import kotlinx.coroutines.launch
|
||||
@@ -261,6 +262,7 @@ class TimelinePresenter(
|
||||
items
|
||||
}
|
||||
.onEach(redactedVoiceMessageManager::onEachMatrixTimelineItem)
|
||||
.flowOn(dispatchers.computation)
|
||||
.launchIn(this)
|
||||
}
|
||||
|
||||
|
||||
@@ -26,7 +26,7 @@ import dev.zacsweers.metro.AssistedInject
|
||||
import dev.zacsweers.metro.ContributesBinding
|
||||
import im.vector.app.features.analytics.plan.Composer
|
||||
import io.element.android.features.messages.api.MessageComposerContext
|
||||
import io.element.android.features.messages.api.timeline.voicemessages.composer.VoiceMessageComposerEvents
|
||||
import io.element.android.features.messages.api.timeline.voicemessages.composer.VoiceMessageComposerEvent
|
||||
import io.element.android.features.messages.api.timeline.voicemessages.composer.VoiceMessageComposerPresenter
|
||||
import io.element.android.features.messages.api.timeline.voicemessages.composer.VoiceMessageComposerState
|
||||
import io.element.android.libraries.di.RoomScope
|
||||
@@ -164,25 +164,25 @@ class DefaultVoiceMessageComposerPresenter(
|
||||
}
|
||||
}
|
||||
|
||||
fun handleEvent(event: VoiceMessageComposerEvents) {
|
||||
fun handleEvent(event: VoiceMessageComposerEvent) {
|
||||
when (event) {
|
||||
is VoiceMessageComposerEvents.RecorderEvent -> handleVoiceMessageRecorderEvent(event.recorderEvent)
|
||||
is VoiceMessageComposerEvents.PlayerEvent -> handleVoiceMessagePlayerEvent(event.playerEvent)
|
||||
is VoiceMessageComposerEvents.SendVoiceMessage -> localCoroutineScope.launch {
|
||||
is VoiceMessageComposerEvent.RecorderEvent -> handleVoiceMessageRecorderEvent(event.recorderEvent)
|
||||
is VoiceMessageComposerEvent.PlayerEvent -> handleVoiceMessagePlayerEvent(event.playerEvent)
|
||||
is VoiceMessageComposerEvent.SendVoiceMessage -> localCoroutineScope.launch {
|
||||
sendVoiceMessage()
|
||||
}
|
||||
VoiceMessageComposerEvents.DeleteVoiceMessage -> {
|
||||
VoiceMessageComposerEvent.DeleteVoiceMessage -> {
|
||||
player.pause()
|
||||
localCoroutineScope.deleteRecording()
|
||||
}
|
||||
VoiceMessageComposerEvents.DismissPermissionsRationale -> {
|
||||
VoiceMessageComposerEvent.DismissPermissionsRationale -> {
|
||||
permissionState.eventSink(PermissionsEvents.CloseDialog)
|
||||
}
|
||||
VoiceMessageComposerEvents.AcceptPermissionRationale -> {
|
||||
VoiceMessageComposerEvent.AcceptPermissionRationale -> {
|
||||
permissionState.eventSink(PermissionsEvents.OpenSystemSettingAndCloseDialog)
|
||||
}
|
||||
is VoiceMessageComposerEvents.LifecycleEvent -> handleLifecycleEvent(event.event)
|
||||
VoiceMessageComposerEvents.DismissSendFailureDialog -> {
|
||||
is VoiceMessageComposerEvent.LifecycleEvent -> handleLifecycleEvent(event.event)
|
||||
VoiceMessageComposerEvent.DismissSendFailureDialog -> {
|
||||
showSendFailureDialog = false
|
||||
}
|
||||
}
|
||||
@@ -192,7 +192,10 @@ class DefaultVoiceMessageComposerPresenter(
|
||||
voiceMessageState = when (val state = recorderState) {
|
||||
is VoiceRecorderState.Recording -> VoiceMessageState.Recording(
|
||||
duration = state.elapsedTime,
|
||||
levels = state.levels.toImmutableList(),
|
||||
levels = state.levels
|
||||
// Keep only the last 128 samples for display, else we can have a crash
|
||||
.takeLast(128)
|
||||
.toImmutableList(),
|
||||
)
|
||||
is VoiceRecorderState.Finished ->
|
||||
previewState(
|
||||
|
||||
@@ -42,6 +42,10 @@
|
||||
<string name="screen_room_timeline_reactions_show_more">"نمایش بیشتر"</string>
|
||||
<string name="screen_room_timeline_reactions_show_reactions_summary">"نمایش خلاصهٔ واکنشها"</string>
|
||||
<string name="screen_room_timeline_read_marker_title">"جدید"</string>
|
||||
<plurals name="screen_room_timeline_state_changes">
|
||||
<item quantity="one">"%1$dتغییر اتاق"</item>
|
||||
<item quantity="other">"%1$dتغییر اتاق"</item>
|
||||
</plurals>
|
||||
<string name="screen_room_timeline_tombstoned_room_action">"پرش به اتاق جدید"</string>
|
||||
<string name="screen_room_timeline_tombstoned_room_message">"این اتاق جایگزین شده و دیگر فعّال نیست"</string>
|
||||
<string name="screen_room_timeline_upgraded_room_action">"دیدن پیامهای قدیمی"</string>
|
||||
|
||||
@@ -7,6 +7,7 @@
|
||||
<string name="emoji_picker_category_objects">"Oggetti"</string>
|
||||
<string name="emoji_picker_category_people">"Faccine & Persone"</string>
|
||||
<string name="emoji_picker_category_places">"Viaggi & Luoghi"</string>
|
||||
<string name="emoji_picker_category_recent">"Emoji recenti"</string>
|
||||
<string name="emoji_picker_category_symbols">"Simboli"</string>
|
||||
<string name="screen_media_upload_preview_caption_warning">"Le didascalie potrebbero non essere visibili agli utenti di app meno recenti."</string>
|
||||
<string name="screen_media_upload_preview_change_video_quality_prompt">"Tocca per modificare la qualità di caricamento del video"</string>
|
||||
@@ -15,6 +16,7 @@
|
||||
<string name="screen_media_upload_preview_error_failed_sending">"Caricamento del file multimediale fallito, riprova."</string>
|
||||
<string name="screen_media_upload_preview_error_too_large_message">"La dimensione massima consentita del file è %1$s ."</string>
|
||||
<string name="screen_media_upload_preview_error_too_large_title">"Il file è troppo grande per essere caricato"</string>
|
||||
<string name="screen_media_upload_preview_item_count">"Elemento %1$d di %2$d"</string>
|
||||
<string name="screen_media_upload_preview_optimize_image_quality_title">"Ottimizza la qualità delle immagini"</string>
|
||||
<string name="screen_media_upload_preview_processing">"Elaborazione…"</string>
|
||||
<string name="screen_report_content_block_user">"Blocca utente"</string>
|
||||
|
||||
@@ -7,13 +7,18 @@
|
||||
<string name="emoji_picker_category_objects">"Objetos"</string>
|
||||
<string name="emoji_picker_category_people">"Sorrisos & Pessoas"</string>
|
||||
<string name="emoji_picker_category_places">"Viagens & Lugares"</string>
|
||||
<string name="emoji_picker_category_recent">"Emojis recentes"</string>
|
||||
<string name="emoji_picker_category_symbols">"Símbolos"</string>
|
||||
<string name="screen_media_upload_preview_caption_warning">"As legendas podem não ser visíveis para pessoas que usam apps mais antigos."</string>
|
||||
<string name="screen_media_upload_preview_change_video_quality_prompt">"Toque para alterar a qualidade do envio do vídeo"</string>
|
||||
<string name="screen_media_upload_preview_error_could_not_be_uploaded">"O arquivo não pôde ser enviado."</string>
|
||||
<string name="screen_media_upload_preview_error_failed_processing">"Falha ao processar a mídia para o envio. Tente novamente."</string>
|
||||
<string name="screen_media_upload_preview_error_failed_sending">"Falha ao enviar mídia. Tente novamente."</string>
|
||||
<string name="screen_media_upload_preview_error_too_large_message">"O tamanho de arquivo máximo permitido é %1$s."</string>
|
||||
<string name="screen_media_upload_preview_error_too_large_title">"O arquivo é muito grande para enviar"</string>
|
||||
<string name="screen_media_upload_preview_item_count">"%1$d de %2$d itens"</string>
|
||||
<string name="screen_media_upload_preview_optimize_image_quality_title">"Otimizar qualidade da imagem"</string>
|
||||
<string name="screen_media_upload_preview_processing">"Processando…"</string>
|
||||
<string name="screen_report_content_block_user">"Bloquear usuário"</string>
|
||||
<string name="screen_report_content_block_user_hint">"Marque se você deseja ocultar todas as mensagens atuais e futuras desse usuário"</string>
|
||||
<string name="screen_report_content_explanation">"Essa mensagem será reportada ao administrador do seu servidor-casa. Eles não conseguirão ler nenhuma mensagem criptografada."</string>
|
||||
|
||||
@@ -8,8 +8,15 @@
|
||||
<string name="emoji_picker_category_people">"Smayllar va odamlar"</string>
|
||||
<string name="emoji_picker_category_places">"Sayohat va Joylar"</string>
|
||||
<string name="emoji_picker_category_symbols">"Belgilar"</string>
|
||||
<string name="screen_media_upload_preview_caption_warning">"Taglavhalar eski ilovalardan foydalanuvchilarga ko‘rinmasligi mumkin."</string>
|
||||
<string name="screen_media_upload_preview_change_video_quality_prompt">"Video yuklash sifatini oʻzgartirish uchun bosing"</string>
|
||||
<string name="screen_media_upload_preview_error_could_not_be_uploaded">"Faylni yuklab boʻlmadi."</string>
|
||||
<string name="screen_media_upload_preview_error_failed_processing">"Mediani yuklab bo‘lmadi, qayta urinib ko‘ring."</string>
|
||||
<string name="screen_media_upload_preview_error_failed_sending">"Media yuklanmadi, qayta urinib ko‘ring."</string>
|
||||
<string name="screen_media_upload_preview_error_too_large_message">"Ruxsat etilgan maksimal fayl hajmi %1$s ."</string>
|
||||
<string name="screen_media_upload_preview_error_too_large_title">"Fayl yuklash uchun juda katta"</string>
|
||||
<string name="screen_media_upload_preview_optimize_image_quality_title">"Tasvir sifatini optimallashtirish"</string>
|
||||
<string name="screen_media_upload_preview_processing">"Qayta ishlanmoqda…"</string>
|
||||
<string name="screen_report_content_block_user">"Foydalanuvchini bloklash"</string>
|
||||
<string name="screen_report_content_block_user_hint">"Ushbu foydalanuvchidan barcha joriy va kelajakdagi xabarlarni yashirishni xohlayotganingizni tekshiring"</string>
|
||||
<string name="screen_report_content_explanation">"Bu xabar uy serveringiz administratoriga xabar qilinadi. Ular hech qanday shifrlangan xabarlarni o\'qiy olmaydi."</string>
|
||||
@@ -33,16 +40,31 @@
|
||||
<string name="screen_room_timeline_add_reaction">"Emoji qo\'shmoq"</string>
|
||||
<string name="screen_room_timeline_beginning_of_room">"Bu %1$sni boshlanishi"</string>
|
||||
<string name="screen_room_timeline_beginning_of_room_no_name">"Bu suhbatning boshlanishi."</string>
|
||||
<string name="screen_room_timeline_legacy_call">"Chaqiruv qabul qilinmaydi. Chaqiruvchidan yangi Element X ilovasidan foydalanishi mumkinligini so‘rang."</string>
|
||||
<string name="screen_room_timeline_less_reactions">"Kamroq ko\'rsatish"</string>
|
||||
<string name="screen_room_timeline_message_copied">"Xabar nusxalandi"</string>
|
||||
<string name="screen_room_timeline_no_permission_to_post">"Sizda bu xonaga post yozishga ruxsat yo‘q"</string>
|
||||
<plurals name="screen_room_timeline_reaction_a11y">
|
||||
<item quantity="one">"%1$d ta a’zo %2$s bilan munosabat bildirdi"</item>
|
||||
<item quantity="other">"%1$d ta a’zo %2$s bilan munosabat bildirdi"</item>
|
||||
</plurals>
|
||||
<plurals name="screen_room_timeline_reaction_including_you_a11y">
|
||||
<item quantity="one">"Siz va %1$d ta a’zo %2$s bilan munosabat bildirdi"</item>
|
||||
<item quantity="other">"Siz va %1$d ta a’zo %2$s bilan munosabat bildirdi"</item>
|
||||
</plurals>
|
||||
<string name="screen_room_timeline_reaction_you_a11y">"%1$s bilan munosabat bildirdingiz"</string>
|
||||
<string name="screen_room_timeline_reactions_show_less">"Kamroq ko\'rsatish"</string>
|
||||
<string name="screen_room_timeline_reactions_show_more">"Ko\'proq ko\'rsatish"</string>
|
||||
<string name="screen_room_timeline_reactions_show_reactions_summary">"Reaksiyalar xulosasini chiqarish"</string>
|
||||
<string name="screen_room_timeline_read_marker_title">"Yangi"</string>
|
||||
<plurals name="screen_room_timeline_state_changes">
|
||||
<item quantity="one">"%1$dxonani almashtirish"</item>
|
||||
<item quantity="other">"%1$dxona o\'zgarishi"</item>
|
||||
</plurals>
|
||||
<string name="screen_room_timeline_tombstoned_room_action">"Yangi xonaga o‘tish"</string>
|
||||
<string name="screen_room_timeline_tombstoned_room_message">"Bu room almashtirildi va endi faol emas"</string>
|
||||
<string name="screen_room_timeline_upgraded_room_action">"Eski xabarlarni ko‘rish"</string>
|
||||
<string name="screen_room_timeline_upgraded_room_message">"Bu xona boshqa xonaning davomi"</string>
|
||||
<plurals name="screen_room_typing_many_members">
|
||||
<item quantity="one">"%1$s, %2$s va %3$d boshqalar"</item>
|
||||
<item quantity="other">"%1$s, %2$s va %3$d boshqalar"</item>
|
||||
|
||||
@@ -12,13 +12,10 @@ package io.element.android.features.messages.impl.voicemessages.composer
|
||||
|
||||
import android.Manifest
|
||||
import androidx.lifecycle.Lifecycle
|
||||
import app.cash.molecule.RecompositionMode
|
||||
import app.cash.molecule.moleculeFlow
|
||||
import app.cash.turbine.TurbineTestContext
|
||||
import app.cash.turbine.test
|
||||
import com.google.common.truth.Truth.assertThat
|
||||
import im.vector.app.features.analytics.plan.Composer
|
||||
import io.element.android.features.messages.api.timeline.voicemessages.composer.VoiceMessageComposerEvents
|
||||
import io.element.android.features.messages.api.timeline.voicemessages.composer.VoiceMessageComposerEvent
|
||||
import io.element.android.features.messages.api.timeline.voicemessages.composer.VoiceMessageComposerState
|
||||
import io.element.android.features.messages.impl.messagecomposer.aReplyMode
|
||||
import io.element.android.features.messages.test.FakeMessageComposerContext
|
||||
@@ -42,10 +39,12 @@ import io.element.android.libraries.textcomposer.model.VoiceMessagePlayerEvent
|
||||
import io.element.android.libraries.textcomposer.model.VoiceMessageRecorderEvent
|
||||
import io.element.android.libraries.textcomposer.model.VoiceMessageState
|
||||
import io.element.android.libraries.voiceplayer.api.VoiceMessageException
|
||||
import io.element.android.libraries.voicerecorder.api.VoiceRecorder
|
||||
import io.element.android.libraries.voicerecorder.test.FakeVoiceRecorder
|
||||
import io.element.android.services.analytics.test.FakeAnalyticsService
|
||||
import io.element.android.tests.testutils.WarmUpRule
|
||||
import io.element.android.tests.testutils.lambda.lambdaRecorder
|
||||
import io.element.android.tests.testutils.test
|
||||
import kotlinx.collections.immutable.toImmutableList
|
||||
import kotlinx.coroutines.ExperimentalCoroutinesApi
|
||||
import kotlinx.coroutines.test.TestScope
|
||||
@@ -57,7 +56,7 @@ import java.io.File
|
||||
import kotlin.time.Duration
|
||||
import kotlin.time.Duration.Companion.seconds
|
||||
|
||||
class VoiceMessageComposerPresenterTest {
|
||||
class DefaultVoiceMessageComposerPresenterTest {
|
||||
@get:Rule
|
||||
val warmUpRule = WarmUpRule()
|
||||
|
||||
@@ -91,9 +90,7 @@ class VoiceMessageComposerPresenterTest {
|
||||
@Test
|
||||
fun `present - initial state`() = runTest {
|
||||
val presenter = createDefaultVoiceMessageComposerPresenter()
|
||||
moleculeFlow(RecompositionMode.Immediate) {
|
||||
presenter.present()
|
||||
}.test {
|
||||
presenter.test {
|
||||
val initialState = awaitItem()
|
||||
assertThat(initialState.voiceMessageState).isEqualTo(VoiceMessageState.Idle)
|
||||
voiceRecorder.assertCalls(started = 0)
|
||||
@@ -105,10 +102,8 @@ class VoiceMessageComposerPresenterTest {
|
||||
@Test
|
||||
fun `present - recording state`() = runTest {
|
||||
val presenter = createDefaultVoiceMessageComposerPresenter()
|
||||
moleculeFlow(RecompositionMode.Immediate) {
|
||||
presenter.present()
|
||||
}.test {
|
||||
awaitItem().eventSink(VoiceMessageComposerEvents.RecorderEvent(VoiceMessageRecorderEvent.Start))
|
||||
presenter.test {
|
||||
awaitItem().eventSink(VoiceMessageComposerEvent.RecorderEvent(VoiceMessageRecorderEvent.Start))
|
||||
|
||||
val finalState = awaitItem()
|
||||
assertThat(finalState.voiceMessageState).isEqualTo(RECORDING_STATE)
|
||||
@@ -118,20 +113,42 @@ class VoiceMessageComposerPresenterTest {
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
fun `present - recording state - number of levels is limited`() = runTest {
|
||||
val numberOfLevels = 200
|
||||
val levels = List(numberOfLevels) { it / numberOfLevels.toFloat() }
|
||||
val voiceRecorder = FakeVoiceRecorder(
|
||||
levels = levels,
|
||||
recordingDuration = RECORDING_DURATION,
|
||||
)
|
||||
val presenter = createDefaultVoiceMessageComposerPresenter(
|
||||
voiceRecorder = voiceRecorder,
|
||||
)
|
||||
presenter.test {
|
||||
awaitItem().eventSink(VoiceMessageComposerEvent.RecorderEvent(VoiceMessageRecorderEvent.Start))
|
||||
skipItems(numberOfLevels / 2 - 1)
|
||||
val finalState = awaitItem()
|
||||
assertThat(finalState.voiceMessageState).isInstanceOf(VoiceMessageState.Recording::class.java)
|
||||
val recordingState = finalState.voiceMessageState as VoiceMessageState.Recording
|
||||
// The number of levels should be limited to 128 items
|
||||
assertThat(recordingState.levels.size).isEqualTo(128)
|
||||
assertThat(recordingState.levels).isEqualTo(levels.takeLast(128))
|
||||
testPauseAndDestroy(finalState)
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
fun `present - recording keeps screen on`() = runTest {
|
||||
val presenter = createDefaultVoiceMessageComposerPresenter()
|
||||
moleculeFlow(RecompositionMode.Immediate) {
|
||||
presenter.present()
|
||||
}.test {
|
||||
presenter.test {
|
||||
awaitItem().apply {
|
||||
eventSink(VoiceMessageComposerEvents.RecorderEvent(VoiceMessageRecorderEvent.Start))
|
||||
eventSink(VoiceMessageComposerEvent.RecorderEvent(VoiceMessageRecorderEvent.Start))
|
||||
assertThat(keepScreenOn).isFalse()
|
||||
}
|
||||
|
||||
awaitItem().apply {
|
||||
assertThat(keepScreenOn).isTrue()
|
||||
eventSink(VoiceMessageComposerEvents.RecorderEvent(VoiceMessageRecorderEvent.Stop))
|
||||
eventSink(VoiceMessageComposerEvent.RecorderEvent(VoiceMessageRecorderEvent.Stop))
|
||||
}
|
||||
|
||||
val finalState = awaitItem().apply {
|
||||
@@ -145,11 +162,9 @@ class VoiceMessageComposerPresenterTest {
|
||||
@Test
|
||||
fun `present - abort recording`() = runTest {
|
||||
val presenter = createDefaultVoiceMessageComposerPresenter()
|
||||
moleculeFlow(RecompositionMode.Immediate) {
|
||||
presenter.present()
|
||||
}.test {
|
||||
awaitItem().eventSink(VoiceMessageComposerEvents.RecorderEvent(VoiceMessageRecorderEvent.Start))
|
||||
awaitItem().eventSink(VoiceMessageComposerEvents.RecorderEvent(VoiceMessageRecorderEvent.Cancel))
|
||||
presenter.test {
|
||||
awaitItem().eventSink(VoiceMessageComposerEvent.RecorderEvent(VoiceMessageRecorderEvent.Start))
|
||||
awaitItem().eventSink(VoiceMessageComposerEvent.RecorderEvent(VoiceMessageRecorderEvent.Cancel))
|
||||
val finalState = awaitItem()
|
||||
assertThat(finalState.voiceMessageState).isEqualTo(VoiceMessageState.Idle)
|
||||
voiceRecorder.assertCalls(started = 1, stopped = 1, deleted = 1)
|
||||
@@ -160,11 +175,9 @@ class VoiceMessageComposerPresenterTest {
|
||||
@Test
|
||||
fun `present - finish recording`() = runTest {
|
||||
val presenter = createDefaultVoiceMessageComposerPresenter()
|
||||
moleculeFlow(RecompositionMode.Immediate) {
|
||||
presenter.present()
|
||||
}.test {
|
||||
awaitItem().eventSink(VoiceMessageComposerEvents.RecorderEvent(VoiceMessageRecorderEvent.Start))
|
||||
awaitItem().eventSink(VoiceMessageComposerEvents.RecorderEvent(VoiceMessageRecorderEvent.Stop))
|
||||
presenter.test {
|
||||
awaitItem().eventSink(VoiceMessageComposerEvent.RecorderEvent(VoiceMessageRecorderEvent.Start))
|
||||
awaitItem().eventSink(VoiceMessageComposerEvent.RecorderEvent(VoiceMessageRecorderEvent.Stop))
|
||||
|
||||
val finalState = awaitItem()
|
||||
assertThat(finalState.voiceMessageState).isEqualTo(aPreviewState())
|
||||
@@ -177,12 +190,10 @@ class VoiceMessageComposerPresenterTest {
|
||||
@Test
|
||||
fun `present - play recording before it is ready`() = runTest {
|
||||
val presenter = createDefaultVoiceMessageComposerPresenter()
|
||||
moleculeFlow(RecompositionMode.Immediate) {
|
||||
presenter.present()
|
||||
}.test {
|
||||
awaitItem().eventSink(VoiceMessageComposerEvents.RecorderEvent(VoiceMessageRecorderEvent.Start))
|
||||
presenter.test {
|
||||
awaitItem().eventSink(VoiceMessageComposerEvent.RecorderEvent(VoiceMessageRecorderEvent.Start))
|
||||
val finalState = awaitItem().apply {
|
||||
this.eventSink(VoiceMessageComposerEvents.PlayerEvent(VoiceMessagePlayerEvent.Play))
|
||||
this.eventSink(VoiceMessageComposerEvent.PlayerEvent(VoiceMessagePlayerEvent.Play))
|
||||
}
|
||||
|
||||
// Nothing should happen
|
||||
@@ -196,12 +207,10 @@ class VoiceMessageComposerPresenterTest {
|
||||
@Test
|
||||
fun `present - play recording`() = runTest {
|
||||
val presenter = createDefaultVoiceMessageComposerPresenter()
|
||||
moleculeFlow(RecompositionMode.Immediate) {
|
||||
presenter.present()
|
||||
}.test {
|
||||
awaitItem().eventSink(VoiceMessageComposerEvents.RecorderEvent(VoiceMessageRecorderEvent.Start))
|
||||
awaitItem().eventSink(VoiceMessageComposerEvents.RecorderEvent(VoiceMessageRecorderEvent.Stop))
|
||||
awaitItem().eventSink(VoiceMessageComposerEvents.PlayerEvent(VoiceMessagePlayerEvent.Play))
|
||||
presenter.test {
|
||||
awaitItem().eventSink(VoiceMessageComposerEvent.RecorderEvent(VoiceMessageRecorderEvent.Start))
|
||||
awaitItem().eventSink(VoiceMessageComposerEvent.RecorderEvent(VoiceMessageRecorderEvent.Stop))
|
||||
awaitItem().eventSink(VoiceMessageComposerEvent.PlayerEvent(VoiceMessagePlayerEvent.Play))
|
||||
val finalState = awaitItem().also {
|
||||
assertThat(it.voiceMessageState).isEqualTo(aPlayingState())
|
||||
}
|
||||
@@ -214,13 +223,11 @@ class VoiceMessageComposerPresenterTest {
|
||||
@Test
|
||||
fun `present - pause recording`() = runTest {
|
||||
val presenter = createDefaultVoiceMessageComposerPresenter()
|
||||
moleculeFlow(RecompositionMode.Immediate) {
|
||||
presenter.present()
|
||||
}.test {
|
||||
awaitItem().eventSink(VoiceMessageComposerEvents.RecorderEvent(VoiceMessageRecorderEvent.Start))
|
||||
awaitItem().eventSink(VoiceMessageComposerEvents.RecorderEvent(VoiceMessageRecorderEvent.Stop))
|
||||
awaitItem().eventSink(VoiceMessageComposerEvents.PlayerEvent(VoiceMessagePlayerEvent.Play))
|
||||
awaitItem().eventSink(VoiceMessageComposerEvents.PlayerEvent(VoiceMessagePlayerEvent.Pause))
|
||||
presenter.test {
|
||||
awaitItem().eventSink(VoiceMessageComposerEvent.RecorderEvent(VoiceMessageRecorderEvent.Start))
|
||||
awaitItem().eventSink(VoiceMessageComposerEvent.RecorderEvent(VoiceMessageRecorderEvent.Stop))
|
||||
awaitItem().eventSink(VoiceMessageComposerEvent.PlayerEvent(VoiceMessagePlayerEvent.Play))
|
||||
awaitItem().eventSink(VoiceMessageComposerEvent.PlayerEvent(VoiceMessagePlayerEvent.Pause))
|
||||
val finalState = awaitItem().also {
|
||||
assertThat(it.voiceMessageState).isEqualTo(aPausedState())
|
||||
}
|
||||
@@ -233,18 +240,16 @@ class VoiceMessageComposerPresenterTest {
|
||||
@Test
|
||||
fun `present - seek recording`() = runTest {
|
||||
val presenter = createDefaultVoiceMessageComposerPresenter()
|
||||
moleculeFlow(RecompositionMode.Immediate) {
|
||||
presenter.present()
|
||||
}.test {
|
||||
awaitItem().eventSink(VoiceMessageComposerEvents.RecorderEvent(VoiceMessageRecorderEvent.Start))
|
||||
awaitItem().eventSink(VoiceMessageComposerEvents.RecorderEvent(VoiceMessageRecorderEvent.Stop))
|
||||
awaitItem().eventSink(VoiceMessageComposerEvents.PlayerEvent(VoiceMessagePlayerEvent.Seek(0.5f)))
|
||||
presenter.test {
|
||||
awaitItem().eventSink(VoiceMessageComposerEvent.RecorderEvent(VoiceMessageRecorderEvent.Start))
|
||||
awaitItem().eventSink(VoiceMessageComposerEvent.RecorderEvent(VoiceMessageRecorderEvent.Stop))
|
||||
awaitItem().eventSink(VoiceMessageComposerEvent.PlayerEvent(VoiceMessagePlayerEvent.Seek(0.5f)))
|
||||
awaitItem().apply {
|
||||
assertThat(voiceMessageState).isEqualTo(aPreviewState(playbackProgress = 0.5f, time = 0.seconds, showCursor = true))
|
||||
}
|
||||
awaitItem().apply {
|
||||
assertThat(voiceMessageState).isEqualTo(aPreviewState(playbackProgress = 0.5f, time = 5.seconds, showCursor = true))
|
||||
eventSink(VoiceMessageComposerEvents.PlayerEvent(VoiceMessagePlayerEvent.Seek(0.2f)))
|
||||
eventSink(VoiceMessageComposerEvent.PlayerEvent(VoiceMessagePlayerEvent.Seek(0.2f)))
|
||||
}
|
||||
awaitItem().apply {
|
||||
assertThat(voiceMessageState).isEqualTo(aPreviewState(playbackProgress = 0.2f, time = 5.seconds, showCursor = true))
|
||||
@@ -260,12 +265,10 @@ class VoiceMessageComposerPresenterTest {
|
||||
@Test
|
||||
fun `present - delete recording`() = runTest {
|
||||
val presenter = createDefaultVoiceMessageComposerPresenter()
|
||||
moleculeFlow(RecompositionMode.Immediate) {
|
||||
presenter.present()
|
||||
}.test {
|
||||
awaitItem().eventSink(VoiceMessageComposerEvents.RecorderEvent(VoiceMessageRecorderEvent.Start))
|
||||
awaitItem().eventSink(VoiceMessageComposerEvents.RecorderEvent(VoiceMessageRecorderEvent.Stop))
|
||||
awaitItem().eventSink(VoiceMessageComposerEvents.DeleteVoiceMessage)
|
||||
presenter.test {
|
||||
awaitItem().eventSink(VoiceMessageComposerEvent.RecorderEvent(VoiceMessageRecorderEvent.Start))
|
||||
awaitItem().eventSink(VoiceMessageComposerEvent.RecorderEvent(VoiceMessageRecorderEvent.Stop))
|
||||
awaitItem().eventSink(VoiceMessageComposerEvent.DeleteVoiceMessage)
|
||||
|
||||
val finalState = awaitItem()
|
||||
assertThat(finalState.voiceMessageState).isEqualTo(VoiceMessageState.Idle)
|
||||
@@ -278,13 +281,11 @@ class VoiceMessageComposerPresenterTest {
|
||||
@Test
|
||||
fun `present - delete while playing`() = runTest {
|
||||
val presenter = createDefaultVoiceMessageComposerPresenter()
|
||||
moleculeFlow(RecompositionMode.Immediate) {
|
||||
presenter.present()
|
||||
}.test {
|
||||
awaitItem().eventSink(VoiceMessageComposerEvents.RecorderEvent(VoiceMessageRecorderEvent.Start))
|
||||
awaitItem().eventSink(VoiceMessageComposerEvents.RecorderEvent(VoiceMessageRecorderEvent.Stop))
|
||||
awaitItem().eventSink(VoiceMessageComposerEvents.PlayerEvent(VoiceMessagePlayerEvent.Play))
|
||||
awaitItem().eventSink(VoiceMessageComposerEvents.DeleteVoiceMessage)
|
||||
presenter.test {
|
||||
awaitItem().eventSink(VoiceMessageComposerEvent.RecorderEvent(VoiceMessageRecorderEvent.Start))
|
||||
awaitItem().eventSink(VoiceMessageComposerEvent.RecorderEvent(VoiceMessageRecorderEvent.Stop))
|
||||
awaitItem().eventSink(VoiceMessageComposerEvent.PlayerEvent(VoiceMessagePlayerEvent.Play))
|
||||
awaitItem().eventSink(VoiceMessageComposerEvent.DeleteVoiceMessage)
|
||||
awaitItem().apply {
|
||||
assertThat(voiceMessageState).isEqualTo(aPausedState())
|
||||
}
|
||||
@@ -300,12 +301,10 @@ class VoiceMessageComposerPresenterTest {
|
||||
@Test
|
||||
fun `present - send recording`() = runTest {
|
||||
val presenter = createDefaultVoiceMessageComposerPresenter()
|
||||
moleculeFlow(RecompositionMode.Immediate) {
|
||||
presenter.present()
|
||||
}.test {
|
||||
awaitItem().eventSink(VoiceMessageComposerEvents.RecorderEvent(VoiceMessageRecorderEvent.Start))
|
||||
awaitItem().eventSink(VoiceMessageComposerEvents.RecorderEvent(VoiceMessageRecorderEvent.Stop))
|
||||
awaitItem().eventSink(VoiceMessageComposerEvents.SendVoiceMessage)
|
||||
presenter.test {
|
||||
awaitItem().eventSink(VoiceMessageComposerEvent.RecorderEvent(VoiceMessageRecorderEvent.Start))
|
||||
awaitItem().eventSink(VoiceMessageComposerEvent.RecorderEvent(VoiceMessageRecorderEvent.Stop))
|
||||
awaitItem().eventSink(VoiceMessageComposerEvent.SendVoiceMessage)
|
||||
assertThat(awaitItem().voiceMessageState).isEqualTo(aPreviewState().toSendingState())
|
||||
val finalState = awaitItem()
|
||||
assertThat(finalState.voiceMessageState).isEqualTo(VoiceMessageState.Idle)
|
||||
@@ -319,21 +318,19 @@ class VoiceMessageComposerPresenterTest {
|
||||
@Test
|
||||
fun `present - sending is tracked`() = runTest {
|
||||
val presenter = createDefaultVoiceMessageComposerPresenter()
|
||||
moleculeFlow(RecompositionMode.Immediate) {
|
||||
presenter.present()
|
||||
}.test {
|
||||
presenter.test {
|
||||
// Send a normal voice message
|
||||
messageComposerContext.composerMode = MessageComposerMode.Normal
|
||||
awaitItem().eventSink(VoiceMessageComposerEvents.RecorderEvent(VoiceMessageRecorderEvent.Start))
|
||||
awaitItem().eventSink(VoiceMessageComposerEvents.RecorderEvent(VoiceMessageRecorderEvent.Stop))
|
||||
awaitItem().eventSink(VoiceMessageComposerEvents.SendVoiceMessage)
|
||||
awaitItem().eventSink(VoiceMessageComposerEvent.RecorderEvent(VoiceMessageRecorderEvent.Start))
|
||||
awaitItem().eventSink(VoiceMessageComposerEvent.RecorderEvent(VoiceMessageRecorderEvent.Stop))
|
||||
awaitItem().eventSink(VoiceMessageComposerEvent.SendVoiceMessage)
|
||||
skipItems(1) // Sending state
|
||||
advanceUntilIdle()
|
||||
// Now reply with a voice message
|
||||
messageComposerContext.composerMode = aReplyMode()
|
||||
awaitItem().eventSink(VoiceMessageComposerEvents.RecorderEvent(VoiceMessageRecorderEvent.Start))
|
||||
awaitItem().eventSink(VoiceMessageComposerEvents.RecorderEvent(VoiceMessageRecorderEvent.Stop))
|
||||
awaitItem().eventSink(VoiceMessageComposerEvents.SendVoiceMessage)
|
||||
awaitItem().eventSink(VoiceMessageComposerEvent.RecorderEvent(VoiceMessageRecorderEvent.Start))
|
||||
awaitItem().eventSink(VoiceMessageComposerEvent.RecorderEvent(VoiceMessageRecorderEvent.Stop))
|
||||
awaitItem().eventSink(VoiceMessageComposerEvent.SendVoiceMessage)
|
||||
val finalState = awaitItem() // Sending state
|
||||
|
||||
assertThat(analyticsService.capturedEvents).containsExactly(
|
||||
@@ -348,13 +345,11 @@ class VoiceMessageComposerPresenterTest {
|
||||
@Test
|
||||
fun `present - send while playing`() = runTest {
|
||||
val presenter = createDefaultVoiceMessageComposerPresenter()
|
||||
moleculeFlow(RecompositionMode.Immediate) {
|
||||
presenter.present()
|
||||
}.test {
|
||||
awaitItem().eventSink(VoiceMessageComposerEvents.RecorderEvent(VoiceMessageRecorderEvent.Start))
|
||||
awaitItem().eventSink(VoiceMessageComposerEvents.RecorderEvent(VoiceMessageRecorderEvent.Stop))
|
||||
awaitItem().eventSink(VoiceMessageComposerEvents.PlayerEvent(VoiceMessagePlayerEvent.Play))
|
||||
awaitItem().eventSink(VoiceMessageComposerEvents.SendVoiceMessage)
|
||||
presenter.test {
|
||||
awaitItem().eventSink(VoiceMessageComposerEvent.RecorderEvent(VoiceMessageRecorderEvent.Start))
|
||||
awaitItem().eventSink(VoiceMessageComposerEvent.RecorderEvent(VoiceMessageRecorderEvent.Stop))
|
||||
awaitItem().eventSink(VoiceMessageComposerEvent.PlayerEvent(VoiceMessagePlayerEvent.Play))
|
||||
awaitItem().eventSink(VoiceMessageComposerEvent.SendVoiceMessage)
|
||||
assertThat(awaitItem().voiceMessageState).isEqualTo(aPlayingState().toSendingState())
|
||||
skipItems(1) // Duplicate sending state
|
||||
|
||||
@@ -370,14 +365,12 @@ class VoiceMessageComposerPresenterTest {
|
||||
@Test
|
||||
fun `present - send recording before previous completed, waits`() = runTest {
|
||||
val presenter = createDefaultVoiceMessageComposerPresenter()
|
||||
moleculeFlow(RecompositionMode.Immediate) {
|
||||
presenter.present()
|
||||
}.test {
|
||||
awaitItem().eventSink(VoiceMessageComposerEvents.RecorderEvent(VoiceMessageRecorderEvent.Start))
|
||||
awaitItem().eventSink(VoiceMessageComposerEvents.RecorderEvent(VoiceMessageRecorderEvent.Stop))
|
||||
presenter.test {
|
||||
awaitItem().eventSink(VoiceMessageComposerEvent.RecorderEvent(VoiceMessageRecorderEvent.Start))
|
||||
awaitItem().eventSink(VoiceMessageComposerEvent.RecorderEvent(VoiceMessageRecorderEvent.Stop))
|
||||
awaitItem().run {
|
||||
eventSink(VoiceMessageComposerEvents.SendVoiceMessage)
|
||||
eventSink(VoiceMessageComposerEvents.SendVoiceMessage)
|
||||
eventSink(VoiceMessageComposerEvent.SendVoiceMessage)
|
||||
eventSink(VoiceMessageComposerEvent.SendVoiceMessage)
|
||||
}
|
||||
assertThat(awaitItem().voiceMessageState).isEqualTo(aPreviewState().toSendingState())
|
||||
|
||||
@@ -395,14 +388,12 @@ class VoiceMessageComposerPresenterTest {
|
||||
// Let sending fail due to media preprocessing error
|
||||
mediaPreProcessor.givenResult(Result.failure(Exception()))
|
||||
val presenter = createDefaultVoiceMessageComposerPresenter()
|
||||
moleculeFlow(RecompositionMode.Immediate) {
|
||||
presenter.present()
|
||||
}.test {
|
||||
awaitItem().eventSink(VoiceMessageComposerEvents.RecorderEvent(VoiceMessageRecorderEvent.Start))
|
||||
awaitItem().eventSink(VoiceMessageComposerEvents.RecorderEvent(VoiceMessageRecorderEvent.Stop))
|
||||
presenter.test {
|
||||
awaitItem().eventSink(VoiceMessageComposerEvent.RecorderEvent(VoiceMessageRecorderEvent.Start))
|
||||
awaitItem().eventSink(VoiceMessageComposerEvent.RecorderEvent(VoiceMessageRecorderEvent.Stop))
|
||||
awaitItem().apply {
|
||||
assertThat(voiceMessageState).isEqualTo(aPreviewState())
|
||||
eventSink(VoiceMessageComposerEvents.SendVoiceMessage)
|
||||
eventSink(VoiceMessageComposerEvent.SendVoiceMessage)
|
||||
}
|
||||
|
||||
val finalState = awaitItem()
|
||||
@@ -419,15 +410,13 @@ class VoiceMessageComposerPresenterTest {
|
||||
fun `present - send failures can be retried`() = runTest {
|
||||
// Let sending fail due to media preprocessing error
|
||||
val presenter = createDefaultVoiceMessageComposerPresenter()
|
||||
moleculeFlow(RecompositionMode.Immediate) {
|
||||
presenter.present()
|
||||
}.test {
|
||||
presenter.test {
|
||||
mediaPreProcessor.givenResult(Result.failure(Exception()))
|
||||
awaitItem().eventSink(VoiceMessageComposerEvents.RecorderEvent(VoiceMessageRecorderEvent.Start))
|
||||
awaitItem().eventSink(VoiceMessageComposerEvents.RecorderEvent(VoiceMessageRecorderEvent.Stop))
|
||||
awaitItem().eventSink(VoiceMessageComposerEvent.RecorderEvent(VoiceMessageRecorderEvent.Start))
|
||||
awaitItem().eventSink(VoiceMessageComposerEvent.RecorderEvent(VoiceMessageRecorderEvent.Stop))
|
||||
val previewState = awaitItem()
|
||||
|
||||
previewState.eventSink(VoiceMessageComposerEvents.SendVoiceMessage)
|
||||
previewState.eventSink(VoiceMessageComposerEvent.SendVoiceMessage)
|
||||
assertThat(awaitItem().voiceMessageState).isEqualTo(aPreviewState().toSendingState())
|
||||
|
||||
ensureAllEventsConsumed()
|
||||
@@ -435,7 +424,7 @@ class VoiceMessageComposerPresenterTest {
|
||||
sendVoiceMessageResult.assertions().isNeverCalled()
|
||||
|
||||
mediaPreProcessor.givenAudioResult()
|
||||
previewState.eventSink(VoiceMessageComposerEvents.SendVoiceMessage)
|
||||
previewState.eventSink(VoiceMessageComposerEvent.SendVoiceMessage)
|
||||
val finalState = awaitItem()
|
||||
assertThat(finalState.voiceMessageState).isEqualTo(VoiceMessageState.Idle)
|
||||
sendVoiceMessageResult.assertions().isCalledOnce()
|
||||
@@ -448,14 +437,12 @@ class VoiceMessageComposerPresenterTest {
|
||||
@Test
|
||||
fun `present - send failures are displayed as an error dialog`() = runTest {
|
||||
val presenter = createDefaultVoiceMessageComposerPresenter()
|
||||
moleculeFlow(RecompositionMode.Immediate) {
|
||||
presenter.present()
|
||||
}.test {
|
||||
presenter.test {
|
||||
// Let sending fail due to media preprocessing error
|
||||
mediaPreProcessor.givenResult(Result.failure(Exception()))
|
||||
awaitItem().eventSink(VoiceMessageComposerEvents.RecorderEvent(VoiceMessageRecorderEvent.Start))
|
||||
awaitItem().eventSink(VoiceMessageComposerEvents.RecorderEvent(VoiceMessageRecorderEvent.Stop))
|
||||
awaitItem().eventSink(VoiceMessageComposerEvents.SendVoiceMessage)
|
||||
awaitItem().eventSink(VoiceMessageComposerEvent.RecorderEvent(VoiceMessageRecorderEvent.Start))
|
||||
awaitItem().eventSink(VoiceMessageComposerEvent.RecorderEvent(VoiceMessageRecorderEvent.Stop))
|
||||
awaitItem().eventSink(VoiceMessageComposerEvent.SendVoiceMessage)
|
||||
|
||||
assertThat(awaitItem().voiceMessageState).isEqualTo(aPreviewState().toSendingState())
|
||||
|
||||
@@ -467,7 +454,7 @@ class VoiceMessageComposerPresenterTest {
|
||||
awaitItem().apply {
|
||||
assertThat(voiceMessageState).isEqualTo(aPreviewState())
|
||||
assertThat(showSendFailureDialog).isTrue()
|
||||
eventSink(VoiceMessageComposerEvents.DismissSendFailureDialog)
|
||||
eventSink(VoiceMessageComposerEvent.DismissSendFailureDialog)
|
||||
}
|
||||
|
||||
val finalState = awaitItem().apply {
|
||||
@@ -483,12 +470,10 @@ class VoiceMessageComposerPresenterTest {
|
||||
@Test
|
||||
fun `present - send error - missing recording is tracked`() = runTest {
|
||||
val presenter = createDefaultVoiceMessageComposerPresenter()
|
||||
moleculeFlow(RecompositionMode.Immediate) {
|
||||
presenter.present()
|
||||
}.test {
|
||||
presenter.test {
|
||||
val initialState = awaitItem()
|
||||
// Send the message before recording anything
|
||||
initialState.eventSink(VoiceMessageComposerEvents.SendVoiceMessage)
|
||||
initialState.eventSink(VoiceMessageComposerEvent.SendVoiceMessage)
|
||||
|
||||
assertThat(initialState.voiceMessageState).isEqualTo(VoiceMessageState.Idle)
|
||||
sendVoiceMessageResult.assertions().isNeverCalled()
|
||||
@@ -504,11 +489,9 @@ class VoiceMessageComposerPresenterTest {
|
||||
val exception = SecurityException("")
|
||||
voiceRecorder.givenThrowsSecurityException(exception)
|
||||
val presenter = createDefaultVoiceMessageComposerPresenter()
|
||||
moleculeFlow(RecompositionMode.Immediate) {
|
||||
presenter.present()
|
||||
}.test {
|
||||
presenter.test {
|
||||
val initialState = awaitItem()
|
||||
initialState.eventSink(VoiceMessageComposerEvents.RecorderEvent(VoiceMessageRecorderEvent.Start))
|
||||
initialState.eventSink(VoiceMessageComposerEvent.RecorderEvent(VoiceMessageRecorderEvent.Start))
|
||||
|
||||
sendVoiceMessageResult.assertions().isNeverCalled()
|
||||
assertThat(analyticsService.trackedErrors).containsExactly(
|
||||
@@ -528,19 +511,17 @@ class VoiceMessageComposerPresenterTest {
|
||||
val presenter = createDefaultVoiceMessageComposerPresenter(
|
||||
permissionsPresenter = permissionsPresenter,
|
||||
)
|
||||
moleculeFlow(RecompositionMode.Immediate) {
|
||||
presenter.present()
|
||||
}.test {
|
||||
presenter.test {
|
||||
val initialState = awaitItem()
|
||||
initialState.eventSink(VoiceMessageComposerEvents.RecorderEvent(VoiceMessageRecorderEvent.Start))
|
||||
initialState.eventSink(VoiceMessageComposerEvent.RecorderEvent(VoiceMessageRecorderEvent.Start))
|
||||
assertThat(awaitItem().voiceMessageState).isEqualTo(VoiceMessageState.Idle)
|
||||
|
||||
initialState.eventSink(VoiceMessageComposerEvents.RecorderEvent(VoiceMessageRecorderEvent.Stop))
|
||||
initialState.eventSink(VoiceMessageComposerEvent.RecorderEvent(VoiceMessageRecorderEvent.Stop))
|
||||
voiceRecorder.assertCalls(stopped = 1)
|
||||
|
||||
permissionsPresenter.setPermissionGranted()
|
||||
|
||||
awaitItem().eventSink(VoiceMessageComposerEvents.RecorderEvent(VoiceMessageRecorderEvent.Start))
|
||||
awaitItem().eventSink(VoiceMessageComposerEvent.RecorderEvent(VoiceMessageRecorderEvent.Start))
|
||||
val finalState = awaitItem()
|
||||
assertThat(finalState.voiceMessageState).isEqualTo(RECORDING_STATE)
|
||||
voiceRecorder.assertCalls(stopped = 1, started = 1)
|
||||
@@ -557,16 +538,14 @@ class VoiceMessageComposerPresenterTest {
|
||||
val presenter = createDefaultVoiceMessageComposerPresenter(
|
||||
permissionsPresenter = permissionsPresenter,
|
||||
)
|
||||
moleculeFlow(RecompositionMode.Immediate) {
|
||||
presenter.present()
|
||||
}.test {
|
||||
awaitItem().eventSink(VoiceMessageComposerEvents.RecorderEvent(VoiceMessageRecorderEvent.Start))
|
||||
presenter.test {
|
||||
awaitItem().eventSink(VoiceMessageComposerEvent.RecorderEvent(VoiceMessageRecorderEvent.Start))
|
||||
|
||||
// See the dialog and accept it
|
||||
awaitItem().also {
|
||||
assertThat(it.voiceMessageState).isEqualTo(VoiceMessageState.Idle)
|
||||
assertThat(it.showPermissionRationaleDialog).isTrue()
|
||||
it.eventSink(VoiceMessageComposerEvents.AcceptPermissionRationale)
|
||||
it.eventSink(VoiceMessageComposerEvent.AcceptPermissionRationale)
|
||||
}
|
||||
|
||||
// Dialog is hidden, user accepts permissions
|
||||
@@ -574,7 +553,7 @@ class VoiceMessageComposerPresenterTest {
|
||||
|
||||
permissionsPresenter.setPermissionGranted()
|
||||
|
||||
awaitItem().eventSink(VoiceMessageComposerEvents.RecorderEvent(VoiceMessageRecorderEvent.Start))
|
||||
awaitItem().eventSink(VoiceMessageComposerEvent.RecorderEvent(VoiceMessageRecorderEvent.Start))
|
||||
val finalState = awaitItem()
|
||||
assertThat(finalState.voiceMessageState).isEqualTo(RECORDING_STATE)
|
||||
voiceRecorder.assertCalls(started = 1)
|
||||
@@ -591,22 +570,20 @@ class VoiceMessageComposerPresenterTest {
|
||||
val presenter = createDefaultVoiceMessageComposerPresenter(
|
||||
permissionsPresenter = permissionsPresenter,
|
||||
)
|
||||
moleculeFlow(RecompositionMode.Immediate) {
|
||||
presenter.present()
|
||||
}.test {
|
||||
awaitItem().eventSink(VoiceMessageComposerEvents.RecorderEvent(VoiceMessageRecorderEvent.Start))
|
||||
presenter.test {
|
||||
awaitItem().eventSink(VoiceMessageComposerEvent.RecorderEvent(VoiceMessageRecorderEvent.Start))
|
||||
|
||||
// See the dialog and accept it
|
||||
awaitItem().also {
|
||||
assertThat(it.voiceMessageState).isEqualTo(VoiceMessageState.Idle)
|
||||
assertThat(it.showPermissionRationaleDialog).isTrue()
|
||||
it.eventSink(VoiceMessageComposerEvents.DismissPermissionsRationale)
|
||||
it.eventSink(VoiceMessageComposerEvent.DismissPermissionsRationale)
|
||||
}
|
||||
|
||||
// Dialog is hidden, user tries to record again
|
||||
awaitItem().also {
|
||||
assertThat(it.showPermissionRationaleDialog).isFalse()
|
||||
it.eventSink(VoiceMessageComposerEvents.RecorderEvent(VoiceMessageRecorderEvent.Start))
|
||||
it.eventSink(VoiceMessageComposerEvent.RecorderEvent(VoiceMessageRecorderEvent.Start))
|
||||
}
|
||||
|
||||
// Dialog is shown once again
|
||||
@@ -624,7 +601,7 @@ class VoiceMessageComposerPresenterTest {
|
||||
mostRecentState: VoiceMessageComposerState,
|
||||
) {
|
||||
mostRecentState.eventSink(
|
||||
VoiceMessageComposerEvents.LifecycleEvent(event = Lifecycle.Event.ON_PAUSE)
|
||||
VoiceMessageComposerEvent.LifecycleEvent(event = Lifecycle.Event.ON_PAUSE)
|
||||
)
|
||||
|
||||
val onPauseState = when (val state = mostRecentState.voiceMessageState) {
|
||||
@@ -645,7 +622,7 @@ class VoiceMessageComposerPresenterTest {
|
||||
}
|
||||
|
||||
onPauseState.eventSink(
|
||||
VoiceMessageComposerEvents.LifecycleEvent(event = Lifecycle.Event.ON_DESTROY)
|
||||
VoiceMessageComposerEvent.LifecycleEvent(event = Lifecycle.Event.ON_DESTROY)
|
||||
)
|
||||
|
||||
when (val state = onPauseState.voiceMessageState) {
|
||||
@@ -662,6 +639,7 @@ class VoiceMessageComposerPresenterTest {
|
||||
|
||||
private fun TestScope.createDefaultVoiceMessageComposerPresenter(
|
||||
permissionsPresenter: PermissionsPresenter = createFakePermissionsPresenter(),
|
||||
voiceRecorder: VoiceRecorder = this@DefaultVoiceMessageComposerPresenterTest.voiceRecorder,
|
||||
): DefaultVoiceMessageComposerPresenter {
|
||||
return DefaultVoiceMessageComposerPresenter(
|
||||
sessionCoroutineScope = backgroundScope,
|
||||
@@ -1,5 +1,9 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
|
||||
<plurals name="a11y_polls_percent_of_total">
|
||||
<item quantity="one">"Jami ovozlarning %1$d foizi"</item>
|
||||
<item quantity="other">"Jami ovozlarning %1$d foizi"</item>
|
||||
</plurals>
|
||||
<string name="a11y_polls_will_remove_selection">"Oldingi tanlov olib tashlanadi"</string>
|
||||
<string name="a11y_polls_winning_answer">"Bu g\'alaba qozongan javob"</string>
|
||||
</resources>
|
||||
|
||||
@@ -5,6 +5,7 @@
|
||||
<string name="screen_create_poll_anonymous_headline">"Ovozlarni yashirish"</string>
|
||||
<string name="screen_create_poll_answer_hint">"Variant%1$d"</string>
|
||||
<string name="screen_create_poll_cancel_confirmation_content_android">"Oʻzgarishlar saqlanmadi. Haqiqatan ham orqaga qaytmoqchimisiz?"</string>
|
||||
<string name="screen_create_poll_delete_option_a11y">"%1$s variantini o‘chirish"</string>
|
||||
<string name="screen_create_poll_question_desc">"Savol yoki mavzu"</string>
|
||||
<string name="screen_create_poll_question_hint">"So\'rovnoma nima haqida?"</string>
|
||||
<string name="screen_create_poll_title">"So‘rovnoma yaratish"</string>
|
||||
|
||||
@@ -10,6 +10,7 @@
|
||||
<string name="screen_advanced_settings_element_call_base_url_validation_error">"URL non valido, assicurati di includere il protocollo (http/https) e l\'indirizzo corretto."</string>
|
||||
<string name="screen_advanced_settings_hide_invite_avatars_toggle_title">"Nascondi gli avatar nelle richieste di invito alle stanze"</string>
|
||||
<string name="screen_advanced_settings_hide_timeline_media_toggle_title">"Nascondi le anteprime dei media nelle conversazioni"</string>
|
||||
<string name="screen_advanced_settings_labs">"Labs"</string>
|
||||
<string name="screen_advanced_settings_media_compression_description">"Carica foto e video più velocemente e riduci l\'utilizzo dei dati"</string>
|
||||
<string name="screen_advanced_settings_media_compression_title">"Ottimizza la qualità dei contenuti multimediali"</string>
|
||||
<string name="screen_advanced_settings_moderation_and_safety_section_title">"Moderazione e Sicurezza"</string>
|
||||
@@ -43,6 +44,11 @@
|
||||
<string name="screen_edit_profile_error_title">"Impossibile aggiornare il profilo"</string>
|
||||
<string name="screen_edit_profile_title">"Modifica profilo"</string>
|
||||
<string name="screen_edit_profile_updating_details">"Aggiornamento del profilo…"</string>
|
||||
<string name="screen_labs_enable_threads">"Abilita le risposte alle discussioni"</string>
|
||||
<string name="screen_labs_enable_threads_description">"L\'app si riavvierà per applicare questa modifica."</string>
|
||||
<string name="screen_labs_header_description">"Prova le nostre ultime idee in fase di sviluppo. Queste funzionalità non sono definitive; potrebbero essere instabili e soggette a modifiche."</string>
|
||||
<string name="screen_labs_header_title">"Hai voglia di sperimentare?"</string>
|
||||
<string name="screen_labs_title">"Labs"</string>
|
||||
<string name="screen_notification_settings_additional_settings_section_title">"Impostazioni aggiuntive"</string>
|
||||
<string name="screen_notification_settings_calls_label">"Chiamate audio e video"</string>
|
||||
<string name="screen_notification_settings_configuration_mismatch">"Mancata corrispondenza di configurazione"</string>
|
||||
|
||||
@@ -10,9 +10,17 @@
|
||||
<string name="screen_advanced_settings_element_call_base_url_validation_error">"URL inválida, por favor verifique se o protocolo (http/https) está incluso e o endereço correto."</string>
|
||||
<string name="screen_advanced_settings_hide_invite_avatars_toggle_title">"Ocultar avatares em solicitações de convite para salas"</string>
|
||||
<string name="screen_advanced_settings_hide_timeline_media_toggle_title">"Ocultar pré-visualizações de mídia na linha do tempo"</string>
|
||||
<string name="screen_advanced_settings_labs">"Experimentos"</string>
|
||||
<string name="screen_advanced_settings_media_compression_description">"Envie fotos e vídeos com mais rapidez e reduza o uso de dados"</string>
|
||||
<string name="screen_advanced_settings_media_compression_title">"Otimizar a qualidade da mídia"</string>
|
||||
<string name="screen_advanced_settings_moderation_and_safety_section_title">"Moderação e segurança"</string>
|
||||
<string name="screen_advanced_settings_optimise_image_upload_quality_description">"Otimizar automaticamente as imagens para envios mais rápidos e arquivos com tamanhos menores."</string>
|
||||
<string name="screen_advanced_settings_optimise_image_upload_quality_title">"Otimizar qualidade de envio de imagens"</string>
|
||||
<string name="screen_advanced_settings_optimise_video_upload_quality_description">"%1$s. Toque aqui para alterar."</string>
|
||||
<string name="screen_advanced_settings_optimise_video_upload_quality_high">"Alta (1080p)"</string>
|
||||
<string name="screen_advanced_settings_optimise_video_upload_quality_low">"Baixa (480p)"</string>
|
||||
<string name="screen_advanced_settings_optimise_video_upload_quality_standard">"Normal (720p)"</string>
|
||||
<string name="screen_advanced_settings_optimise_video_upload_quality_title">"Qualidade de envio de vídeos"</string>
|
||||
<string name="screen_advanced_settings_push_provider_android">"Provedor de notificações push"</string>
|
||||
<string name="screen_advanced_settings_rich_text_editor_description">"Desative o editor de rich text para digitar Markdown manualmente."</string>
|
||||
<string name="screen_advanced_settings_send_read_receipts">"Confirmações de leitura"</string>
|
||||
@@ -36,6 +44,11 @@
|
||||
<string name="screen_edit_profile_error_title">"Não foi possível atualizar o perfil"</string>
|
||||
<string name="screen_edit_profile_title">"Editar perfil"</string>
|
||||
<string name="screen_edit_profile_updating_details">"Atualizando o perfil…"</string>
|
||||
<string name="screen_labs_enable_threads">"Ativar respostas de tópicos"</string>
|
||||
<string name="screen_labs_enable_threads_description">"O app será reiniciado para aplicar esta mudança."</string>
|
||||
<string name="screen_labs_header_description">"Teste as nossas mais novas ideias em desenvolvimento. Esses recursos não estão finalizados; podem estar instáveis, e podem mudar."</string>
|
||||
<string name="screen_labs_header_title">"Se sentindo experimental?"</string>
|
||||
<string name="screen_labs_title">"Experimentos"</string>
|
||||
<string name="screen_notification_settings_additional_settings_section_title">"Configurações adicionais"</string>
|
||||
<string name="screen_notification_settings_calls_label">"Chamadas de áudio e vídeo"</string>
|
||||
<string name="screen_notification_settings_configuration_mismatch">"Não correspondência de configuração"</string>
|
||||
|
||||
@@ -8,14 +8,29 @@
|
||||
<string name="screen_advanced_settings_element_call_base_url">"Maxsus element qo‘ng‘iroqlar bazasi URL manzili"</string>
|
||||
<string name="screen_advanced_settings_element_call_base_url_description">"Element qo\'ng\'irog\'iga maxsus asosiy url or\'natish"</string>
|
||||
<string name="screen_advanced_settings_element_call_base_url_validation_error">"URL noto‘g‘ri, iltimos, protokol (http/https) va to‘g‘ri manzilni kiritganingizga ishonch hosil qiling."</string>
|
||||
<string name="screen_advanced_settings_hide_invite_avatars_toggle_title">"Xonaga taklif so‘rovlarida avatarlarni berkitish"</string>
|
||||
<string name="screen_advanced_settings_hide_timeline_media_toggle_title">"Vaqt jadvalida mediaga razm solishlarni berkitish"</string>
|
||||
<string name="screen_advanced_settings_media_compression_description">"Rasm va videolarni tezroq yuklang va trafik sarfini kamaytiring"</string>
|
||||
<string name="screen_advanced_settings_media_compression_title">"Media sifatini yaxshilash"</string>
|
||||
<string name="screen_advanced_settings_moderation_and_safety_section_title">"Moderatsiya va xavfsizlik"</string>
|
||||
<string name="screen_advanced_settings_optimise_image_upload_quality_description">"Tezroq yuklash va kichikroq fayl hajmi uchun rasmlarni avtomatik optimallashtirish."</string>
|
||||
<string name="screen_advanced_settings_optimise_image_upload_quality_title">"Rasm yuklash sifatini optimallashtirish"</string>
|
||||
<string name="screen_advanced_settings_optimise_video_upload_quality_description">"%1$s. Oʻzgartirish uchun bu yerga bosing."</string>
|
||||
<string name="screen_advanced_settings_optimise_video_upload_quality_high">"Yuqori (1080p)"</string>
|
||||
<string name="screen_advanced_settings_optimise_video_upload_quality_low">"Past (480p)"</string>
|
||||
<string name="screen_advanced_settings_optimise_video_upload_quality_standard">"Standart (720p)"</string>
|
||||
<string name="screen_advanced_settings_optimise_video_upload_quality_title">"Video yuklash sifati"</string>
|
||||
<string name="screen_advanced_settings_push_provider_android">"Push bildirishnoma provayderi"</string>
|
||||
<string name="screen_advanced_settings_rich_text_editor_description">"Boy matn muharriri o\'chiring Markdown bilan qo\'lda yozish uchun"</string>
|
||||
<string name="screen_advanced_settings_send_read_receipts">"Kvitansiyalarni oʻqish"</string>
|
||||
<string name="screen_advanced_settings_send_read_receipts_description">"Agar oʻchirib qo‘yilsa, sizning oʻqilganlik bildirishnomangiz hech kimga yuborilmaydi. Siz boshqa foydalanuvchilardan oʻqilganlik bildirishnomalarini olishda davom etasiz."</string>
|
||||
<string name="screen_advanced_settings_share_presence">"Mavjudligini ulashish"</string>
|
||||
<string name="screen_advanced_settings_share_presence_description">"Agar oʻchirib qoʻyilsa, siz oʻqilganlik haqidagi bildirishnomalarni yoki yozayotganingiz haqidagi xabarlarni yubora olmaysiz va qabul qila olmaysiz."</string>
|
||||
<string name="screen_advanced_settings_show_media_timeline_always_hide">"Doim berkitilsin"</string>
|
||||
<string name="screen_advanced_settings_show_media_timeline_always_show">"Har doim ko‘rsatish"</string>
|
||||
<string name="screen_advanced_settings_show_media_timeline_private_rooms">"Shaxsiy xonalarda"</string>
|
||||
<string name="screen_advanced_settings_show_media_timeline_subtitle">"Yashirin media har doim unga bosish orqali ko‘rsatilishi mumkin"</string>
|
||||
<string name="screen_advanced_settings_show_media_timeline_title">"Vaqt jadvalida media ko‘rsatish"</string>
|
||||
<string name="screen_advanced_settings_view_source_description">"Xabar manbasini vaqt jadvalida ko‘rish imkoniyatini yoqing."</string>
|
||||
<string name="screen_blocked_users_empty">"Sizda bloklangan foydalanuvchi yo‘q"</string>
|
||||
<string name="screen_blocked_users_unblock_alert_action">"Blokdan chiqarish"</string>
|
||||
@@ -55,6 +70,7 @@ Davom ettirsangiz, baʼzi sozlamalaringiz oʻzgarishi mumkin."</string>
|
||||
<string name="screen_notification_settings_system_notifications_action_required_content_link">"tizim sozlamalari"</string>
|
||||
<string name="screen_notification_settings_system_notifications_turned_off">"Tizim bildirishnomalari o\'chirilgan"</string>
|
||||
<string name="screen_notification_settings_title">"Bildirishnomalar"</string>
|
||||
<string name="troubleshoot_notifications_entry_point_push_history_title">"Bildirishnoma tarixi"</string>
|
||||
<string name="troubleshoot_notifications_entry_point_section">"Muammolarni bartaraf etish"</string>
|
||||
<string name="troubleshoot_notifications_entry_point_title">"Bildirishnomalar bilan bog‘liq muammolarni bartaraf etish"</string>
|
||||
</resources>
|
||||
|
||||
@@ -44,6 +44,10 @@
|
||||
<string name="screen_edit_profile_error_title">"无法更新个人资料"</string>
|
||||
<string name="screen_edit_profile_title">"编辑个人资料"</string>
|
||||
<string name="screen_edit_profile_updating_details">"更新个人资料……"</string>
|
||||
<string name="screen_labs_enable_threads">"启用主题回复"</string>
|
||||
<string name="screen_labs_enable_threads_description">"应用将重启以应用此更改。"</string>
|
||||
<string name="screen_labs_header_description">"尝试我们最新的开发理念。这些功能尚未最终确定,可能不稳定,也可能会发生变化。"</string>
|
||||
<string name="screen_labs_header_title">"想尝试新功能?"</string>
|
||||
<string name="screen_labs_title">"实验室"</string>
|
||||
<string name="screen_notification_settings_additional_settings_section_title">"更多设置"</string>
|
||||
<string name="screen_notification_settings_calls_label">"音视频通话"</string>
|
||||
|
||||
@@ -14,5 +14,7 @@
|
||||
<string name="screen_bug_report_include_screenshot">"Invia istantanea schermo"</string>
|
||||
<string name="screen_bug_report_logs_description">"Per verificare che le cose funzionino come previsto, i log verranno inviati con il tuo messaggio. Per inviare solo il tuo messaggio, disattiva questa impostazione."</string>
|
||||
<string name="screen_bug_report_rash_logs_alert_title">"%1$s si è chiuso inaspettatamente l\'ultima volta che è stato usato. Vuoi condividere con noi un rapporto sull\'arresto anomalo?"</string>
|
||||
<string name="screen_bug_report_send_notification_settings_description">"Se riscontri problemi con le notifiche, caricare le regole per le notifiche push può aiutarci a individuare la causa principale. Tieni presente che queste regole possono contenere informazioni private, come il tuo nome visualizzato o le parole chiave per cui ricevere notifiche."</string>
|
||||
<string name="screen_bug_report_send_notification_settings_title">"Invia impostazioni di notifica"</string>
|
||||
<string name="screen_bug_report_view_logs">"Visualizza i log"</string>
|
||||
</resources>
|
||||
|
||||
@@ -14,5 +14,7 @@
|
||||
<string name="screen_bug_report_include_screenshot">"Enviar captura de tela"</string>
|
||||
<string name="screen_bug_report_logs_description">"Os registros serão incluídos com sua mensagem para garantir que tudo esteja funcionando corretamente. Para enviar sua mensagem sem registros, desative essa configuração."</string>
|
||||
<string name="screen_bug_report_rash_logs_alert_title">"%1$s falhou inesperadamente na última vez que foi usado. Gostaria de compartilhar um relatório de falhas conosco?"</string>
|
||||
<string name="screen_bug_report_send_notification_settings_description">"Se estiver enfrentando problemas com as notificações, enviar as regras de notificações push pode ajudar-nos a descobrir o que está errado. Observe que as regras podem conter informações privadas, como o seu nome de exibição ou palavras chaves de notificação."</string>
|
||||
<string name="screen_bug_report_send_notification_settings_title">"Enviar configurações de notificação"</string>
|
||||
<string name="screen_bug_report_view_logs">"Ver registros"</string>
|
||||
</resources>
|
||||
|
||||
@@ -10,6 +10,7 @@
|
||||
<string name="screen_bug_report_error_description_too_short">"Tavsif juda qisqa, nima boʻlganligi haqida batafsilroq maʼlumot bering. Rahmat!"</string>
|
||||
<string name="screen_bug_report_include_crash_logs">"Buzilish jurnallarini yuboring"</string>
|
||||
<string name="screen_bug_report_include_logs">"Jurnallarga ruxsat bering"</string>
|
||||
<string name="screen_bug_report_include_logs_error">"Sizning jurnallaringiz juda katta, shuning uchun bu hisobotga kiritilmaydi, iltimos ularni bizga boshqa usulda yuboring."</string>
|
||||
<string name="screen_bug_report_include_screenshot">"Ekran tasvirini yuboring"</string>
|
||||
<string name="screen_bug_report_logs_description">"Har bir narsa to\'ri ishlayotganiga ishonch hosil qilish uchun xabaringizga jurnallar kiritiladi. Xabarni jurnallarsiz yuborish uchun ushbu sozlamani oʻchiring."</string>
|
||||
<string name="screen_bug_report_rash_logs_alert_title">"%1$soxirgi marta ishlatilganda qulab tushdi. Biz bilan nosozlik hisobotini baham ko\'rmoqchimisiz?"</string>
|
||||
|
||||
@@ -1,4 +1,8 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
|
||||
<string name="screen_report_room_leave_failed_alert_message">"Hisobotingiz muvaffaqiyatli yuborildi, ammo xonadan chiqishda muammo yuzaga keldi. Iltimos, qaytadan urinib ko‘ring."</string>
|
||||
<string name="screen_report_room_leave_failed_alert_title">"Xonani tark etish imkonsiz"</string>
|
||||
<string name="screen_report_room_reason_footer">"Bu xona haqida administratoringizga xabar bering. Agar xabarlar shifrlangan bo‘lsa, administratoringiz ularni o‘qiy olmaydi."</string>
|
||||
<string name="screen_report_room_reason_placeholder">"Xabar berish sababini tushuntiring…"</string>
|
||||
<string name="screen_report_room_title">"Xona ustidan shikoyat qilish"</string>
|
||||
</resources>
|
||||
|
||||
@@ -1,14 +1,16 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
|
||||
<string name="screen_room_change_permissions_administrators">"Pouze správci"</string>
|
||||
<string name="screen_room_change_permissions_administrators">"Správce"</string>
|
||||
<string name="screen_room_change_permissions_ban_people">"Vykázat lidi"</string>
|
||||
<string name="screen_room_change_permissions_delete_messages">"Odstranit zprávy"</string>
|
||||
<string name="screen_room_change_permissions_invite_people">"Pozvěte lidi a přijímejte žádosti o připojení"</string>
|
||||
<string name="screen_room_change_permissions_everyone">"Člen"</string>
|
||||
<string name="screen_room_change_permissions_invite_people">"Pozvat přátele"</string>
|
||||
<string name="screen_room_change_permissions_member_moderation">"Spravovat členy"</string>
|
||||
<string name="screen_room_change_permissions_messages_and_content">"Zprávy a obsah"</string>
|
||||
<string name="screen_room_change_permissions_moderators">"Správci a moderátoři"</string>
|
||||
<string name="screen_room_change_permissions_remove_people">"Odeberte lidi a odmítněte žádosti o připojení"</string>
|
||||
<string name="screen_room_change_permissions_moderators">"Moderátor"</string>
|
||||
<string name="screen_room_change_permissions_remove_people">"Odebrat osoby"</string>
|
||||
<string name="screen_room_change_permissions_room_avatar">"Změnit avatar místnosti"</string>
|
||||
<string name="screen_room_change_permissions_room_details">"Upravit místnost"</string>
|
||||
<string name="screen_room_change_permissions_room_details">"Upravit podrobnosti"</string>
|
||||
<string name="screen_room_change_permissions_room_name">"Změnit název místnosti"</string>
|
||||
<string name="screen_room_change_permissions_room_topic">"Změnit téma místnosti"</string>
|
||||
<string name="screen_room_change_permissions_send_messages">"Odeslat zprávy"</string>
|
||||
@@ -32,6 +34,13 @@
|
||||
<string name="screen_room_change_role_unsaved_changes_description">"Máte neuložené změny."</string>
|
||||
<string name="screen_room_change_role_unsaved_changes_title">"Uložit změny?"</string>
|
||||
<string name="screen_room_member_list_banned_empty">"V této místnosti nejsou žádní vykázaní uživatelé."</string>
|
||||
<plurals name="screen_room_member_list_banned_header_title">
|
||||
<item quantity="one">"%1$d vykázán(a)"</item>
|
||||
<item quantity="few">"%1$d vykázáni"</item>
|
||||
<item quantity="other">"%1$d vykázáných"</item>
|
||||
</plurals>
|
||||
<string name="screen_room_member_list_empty_search_subtitle">"Zkontrolujte pravopis nebo zkuste nové vyhledávání"</string>
|
||||
<string name="screen_room_member_list_empty_search_title">"Žádné výsledky pro “%1$s”"</string>
|
||||
<plurals name="screen_room_member_list_header_title">
|
||||
<item quantity="one">"%1$d osoba"</item>
|
||||
<item quantity="few">"%1$d osoby"</item>
|
||||
@@ -44,8 +53,14 @@
|
||||
<string name="screen_room_member_list_manage_member_unban_title">"Zrušit vykázání z místnosti"</string>
|
||||
<string name="screen_room_member_list_mode_banned">"Vykázaní"</string>
|
||||
<string name="screen_room_member_list_mode_members">"Členové"</string>
|
||||
<string name="screen_room_member_list_role_administrator">"Pouze správci"</string>
|
||||
<string name="screen_room_member_list_role_moderator">"Správci a moderátoři"</string>
|
||||
<plurals name="screen_room_member_list_pending_header_title">
|
||||
<item quantity="one">"%1$d pozván(a)"</item>
|
||||
<item quantity="few">"%1$d pozváni"</item>
|
||||
<item quantity="other">"%1$d pozvaných"</item>
|
||||
</plurals>
|
||||
<string name="screen_room_member_list_pending_status">"Čekající"</string>
|
||||
<string name="screen_room_member_list_role_administrator">"Správce"</string>
|
||||
<string name="screen_room_member_list_role_moderator">"Moderátor"</string>
|
||||
<string name="screen_room_member_list_role_owner">"Vlastník"</string>
|
||||
<string name="screen_room_member_list_room_members_header_title">"Členové místnosti"</string>
|
||||
<string name="screen_room_member_list_unbanning_user">"Rušení vykázání %1$s"</string>
|
||||
@@ -58,10 +73,12 @@
|
||||
<string name="screen_room_roles_and_permissions_messages_and_content">"Zprávy a obsah"</string>
|
||||
<string name="screen_room_roles_and_permissions_moderators">"Moderátoři"</string>
|
||||
<string name="screen_room_roles_and_permissions_owners">"Vlastníci"</string>
|
||||
<string name="screen_room_roles_and_permissions_permissions_header">"Oprávnění"</string>
|
||||
<string name="screen_room_roles_and_permissions_reset">"Obnovit oprávnění"</string>
|
||||
<string name="screen_room_roles_and_permissions_reset_confirm_description">"Po obnovení oprávnění ztratíte aktuální nastavení."</string>
|
||||
<string name="screen_room_roles_and_permissions_reset_confirm_title">"Obnovit oprávnění?"</string>
|
||||
<string name="screen_room_roles_and_permissions_roles_header">"Role"</string>
|
||||
<string name="screen_room_roles_and_permissions_room_details">"Podrobnosti místnosti"</string>
|
||||
<string name="screen_room_roles_and_permissions_title">"Role a oprávnění"</string>
|
||||
<string name="screen_room_roles_and_permissions_space_details">"Detaily prostoru"</string>
|
||||
<string name="screen_room_roles_and_permissions_title">"Role a oprávnění"</string>
|
||||
</resources>
|
||||
|
||||
@@ -33,6 +33,10 @@
|
||||
<string name="screen_room_change_role_unsaved_changes_description">"تغییراتی ذخیره نشده دارید."</string>
|
||||
<string name="screen_room_change_role_unsaved_changes_title">"ذخیرهٔ تغییرات؟"</string>
|
||||
<string name="screen_room_member_list_banned_empty">"هیچ کاربر محرومی در این اتاق نیست."</string>
|
||||
<plurals name="screen_room_member_list_header_title">
|
||||
<item quantity="one">"%1$d نفر"</item>
|
||||
<item quantity="other">"%1$d نفر"</item>
|
||||
</plurals>
|
||||
<string name="screen_room_member_list_manage_member_remove_confirmation_ban">"برداشت و تحریم عضو"</string>
|
||||
<string name="screen_room_member_list_manage_member_remove_confirmation_kick">"تنها برداشتن عضو"</string>
|
||||
<string name="screen_room_member_list_manage_member_unban_action">"رفع انسداد"</string>
|
||||
|
||||
@@ -1,14 +1,16 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
|
||||
<string name="screen_room_change_permissions_administrators">"Vain ylläpitäjät"</string>
|
||||
<string name="screen_room_change_permissions_administrators">"Ylläpitäjä"</string>
|
||||
<string name="screen_room_change_permissions_ban_people">"Porttikieltojen antaminen"</string>
|
||||
<string name="screen_room_change_permissions_delete_messages">"Viestien poistaminen"</string>
|
||||
<string name="screen_room_change_permissions_everyone">"Jäsen"</string>
|
||||
<string name="screen_room_change_permissions_invite_people">"Ihmisten kutsuminen ja liittymispyyntöjen hyväksyminen"</string>
|
||||
<string name="screen_room_change_permissions_member_moderation">"Jäsenien hallinta"</string>
|
||||
<string name="screen_room_change_permissions_messages_and_content">"Viestit ja sisältö"</string>
|
||||
<string name="screen_room_change_permissions_moderators">"Ylläpitäjät ja valvojat"</string>
|
||||
<string name="screen_room_change_permissions_moderators">"Valvoja"</string>
|
||||
<string name="screen_room_change_permissions_remove_people">"Henkilöiden poistaminen ja liittymispyyntöjen hylkääminen"</string>
|
||||
<string name="screen_room_change_permissions_room_avatar">"Huoneen avatarin vaihtaminen"</string>
|
||||
<string name="screen_room_change_permissions_room_details">"Muokkaa huonetta"</string>
|
||||
<string name="screen_room_change_permissions_room_details">"Muokkaa tietoja"</string>
|
||||
<string name="screen_room_change_permissions_room_name">"Huoneen nimen vaihtaminen"</string>
|
||||
<string name="screen_room_change_permissions_room_topic">"Huoneen aiheen vaihtaminen"</string>
|
||||
<string name="screen_room_change_permissions_send_messages">"Viestien lähettäminen"</string>
|
||||
@@ -31,7 +33,7 @@
|
||||
<string name="screen_room_change_role_section_users">"Jäsenet"</string>
|
||||
<string name="screen_room_change_role_unsaved_changes_description">"Sinulla on tallentamattomia muutoksia"</string>
|
||||
<string name="screen_room_change_role_unsaved_changes_title">"Tallennetaanko muutokset?"</string>
|
||||
<string name="screen_room_member_list_banned_empty">"Tässä huoneessa ei ole porttikieltoja"</string>
|
||||
<string name="screen_room_member_list_banned_empty">"Porttikiellettyjä käyttäjiä ei ole."</string>
|
||||
<plurals name="screen_room_member_list_header_title">
|
||||
<item quantity="one">"%1$d henkilö"</item>
|
||||
<item quantity="other">"%1$d henkilöä"</item>
|
||||
@@ -43,8 +45,8 @@
|
||||
<string name="screen_room_member_list_manage_member_unban_title">"Poista porttikielto huoneesta"</string>
|
||||
<string name="screen_room_member_list_mode_banned">"Porttikiellot"</string>
|
||||
<string name="screen_room_member_list_mode_members">"Jäsenet"</string>
|
||||
<string name="screen_room_member_list_role_administrator">"Vain ylläpitäjät"</string>
|
||||
<string name="screen_room_member_list_role_moderator">"Ylläpitäjät ja valvojat"</string>
|
||||
<string name="screen_room_member_list_role_administrator">"Ylläpitäjä"</string>
|
||||
<string name="screen_room_member_list_role_moderator">"Valvoja"</string>
|
||||
<string name="screen_room_member_list_role_owner">"Omistaja"</string>
|
||||
<string name="screen_room_member_list_room_members_header_title">"Huoneen jäsenet"</string>
|
||||
<string name="screen_room_member_list_unbanning_user">"Poistetaan käyttäjän %1$s porttikieltoa"</string>
|
||||
@@ -57,10 +59,12 @@
|
||||
<string name="screen_room_roles_and_permissions_messages_and_content">"Viestit ja sisältö"</string>
|
||||
<string name="screen_room_roles_and_permissions_moderators">"Valvojat"</string>
|
||||
<string name="screen_room_roles_and_permissions_owners">"Omistajat"</string>
|
||||
<string name="screen_room_roles_and_permissions_permissions_header">"Oikeudet"</string>
|
||||
<string name="screen_room_roles_and_permissions_reset">"Nollaa oikeudet"</string>
|
||||
<string name="screen_room_roles_and_permissions_reset_confirm_description">"Kun nollaat käyttöoikeudet, menetät nykyiset asetukset."</string>
|
||||
<string name="screen_room_roles_and_permissions_reset_confirm_title">"Nollataanko oikeudet?"</string>
|
||||
<string name="screen_room_roles_and_permissions_roles_header">"Roolit"</string>
|
||||
<string name="screen_room_roles_and_permissions_room_details">"Huoneen tiedot"</string>
|
||||
<string name="screen_room_roles_and_permissions_space_details">"Tilan tiedot"</string>
|
||||
<string name="screen_room_roles_and_permissions_title">"Roolit ja oikeudet"</string>
|
||||
</resources>
|
||||
|
||||
@@ -34,9 +34,15 @@
|
||||
<string name="screen_room_change_role_unsaved_changes_description">"Vous avez des modifications non-enregistrées."</string>
|
||||
<string name="screen_room_change_role_unsaved_changes_title">"Enregistrer les changements ?"</string>
|
||||
<string name="screen_room_member_list_banned_empty">"Il n’y a pas d’utilisateur banni."</string>
|
||||
<plurals name="screen_room_member_list_banned_header_title">
|
||||
<item quantity="one">"%1$d Banni(e)"</item>
|
||||
<item quantity="other">"%1$d Banni(e)s"</item>
|
||||
</plurals>
|
||||
<string name="screen_room_member_list_empty_search_subtitle">"Vérifiez la saisie ou effectuez une nouvelle recherche"</string>
|
||||
<string name="screen_room_member_list_empty_search_title">"Aucun résultat pour «%1$s»"</string>
|
||||
<plurals name="screen_room_member_list_header_title">
|
||||
<item quantity="one">"%1$d personne"</item>
|
||||
<item quantity="other">"%1$d personnes"</item>
|
||||
<item quantity="one">"%1$d Personne"</item>
|
||||
<item quantity="other">"%1$d Personnes"</item>
|
||||
</plurals>
|
||||
<string name="screen_room_member_list_manage_member_remove_confirmation_ban">"Bannir du salon"</string>
|
||||
<string name="screen_room_member_list_manage_member_remove_confirmation_kick">"Retirer le membre uniquement"</string>
|
||||
@@ -45,6 +51,11 @@
|
||||
<string name="screen_room_member_list_manage_member_unban_title">"Débannir du salon"</string>
|
||||
<string name="screen_room_member_list_mode_banned">"Bannis"</string>
|
||||
<string name="screen_room_member_list_mode_members">"Membres"</string>
|
||||
<plurals name="screen_room_member_list_pending_header_title">
|
||||
<item quantity="one">"%1$d Invité(e)"</item>
|
||||
<item quantity="other">"%1$d Invité(e)s"</item>
|
||||
</plurals>
|
||||
<string name="screen_room_member_list_pending_status">"En attente"</string>
|
||||
<string name="screen_room_member_list_role_administrator">"Administrateurs"</string>
|
||||
<string name="screen_room_member_list_role_moderator">"Modérateurs"</string>
|
||||
<string name="screen_room_member_list_role_owner">"Propriétaire"</string>
|
||||
|
||||
@@ -1,14 +1,16 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
|
||||
<string name="screen_room_change_permissions_administrators">"Solo amministratori"</string>
|
||||
<string name="screen_room_change_permissions_administrators">"Amministratore"</string>
|
||||
<string name="screen_room_change_permissions_ban_people">"Escludi membri"</string>
|
||||
<string name="screen_room_change_permissions_delete_messages">"Rimuovi messaggi"</string>
|
||||
<string name="screen_room_change_permissions_invite_people">"Invita persone e accetta richieste di partecipazione"</string>
|
||||
<string name="screen_room_change_permissions_everyone">"Membro"</string>
|
||||
<string name="screen_room_change_permissions_invite_people">"Invita persone"</string>
|
||||
<string name="screen_room_change_permissions_member_moderation">"Gestisci membri"</string>
|
||||
<string name="screen_room_change_permissions_messages_and_content">"Messaggi e contenuti"</string>
|
||||
<string name="screen_room_change_permissions_moderators">"Amministratori e moderatori"</string>
|
||||
<string name="screen_room_change_permissions_remove_people">"Rimuovi le persone e rifiuta le richieste di partecipazione"</string>
|
||||
<string name="screen_room_change_permissions_moderators">"Moderatore"</string>
|
||||
<string name="screen_room_change_permissions_remove_people">"Rimuovi membri"</string>
|
||||
<string name="screen_room_change_permissions_room_avatar">"Cambia avatar della stanza"</string>
|
||||
<string name="screen_room_change_permissions_room_details">"Modifica stanza"</string>
|
||||
<string name="screen_room_change_permissions_room_details">"Modifica dettagli"</string>
|
||||
<string name="screen_room_change_permissions_room_name">"Cambia il nome della stanza"</string>
|
||||
<string name="screen_room_change_permissions_room_topic">"Cambiare l\'argomento della stanza"</string>
|
||||
<string name="screen_room_change_permissions_send_messages">"Inviare messaggi"</string>
|
||||
@@ -31,10 +33,16 @@
|
||||
<string name="screen_room_change_role_section_users">"Membri"</string>
|
||||
<string name="screen_room_change_role_unsaved_changes_description">"Hai delle modifiche non salvate."</string>
|
||||
<string name="screen_room_change_role_unsaved_changes_title">"Salvare le modifiche?"</string>
|
||||
<string name="screen_room_member_list_banned_empty">"Non ci sono utenti esclusi in questa stanza."</string>
|
||||
<string name="screen_room_member_list_banned_empty">"Non ci sono utenti bannati."</string>
|
||||
<plurals name="screen_room_member_list_banned_header_title">
|
||||
<item quantity="one">"%1$d Bannato"</item>
|
||||
<item quantity="other">"%1$d Bannati"</item>
|
||||
</plurals>
|
||||
<string name="screen_room_member_list_empty_search_subtitle">"Controlla l\'ortografia o prova una nuova ricerca"</string>
|
||||
<string name="screen_room_member_list_empty_search_title">"Nessun risultato per “%1$s ”"</string>
|
||||
<plurals name="screen_room_member_list_header_title">
|
||||
<item quantity="one">"%1$d persona"</item>
|
||||
<item quantity="other">"%1$d persone"</item>
|
||||
<item quantity="one">"%1$d Persona"</item>
|
||||
<item quantity="other">"%1$d Persone"</item>
|
||||
</plurals>
|
||||
<string name="screen_room_member_list_manage_member_remove_confirmation_ban">"Rimuovi ed escludi"</string>
|
||||
<string name="screen_room_member_list_manage_member_remove_confirmation_kick">"Rimuovi soltanto"</string>
|
||||
@@ -43,8 +51,13 @@
|
||||
<string name="screen_room_member_list_manage_member_unban_title">"Riammetti nella stanza"</string>
|
||||
<string name="screen_room_member_list_mode_banned">"Esclusi"</string>
|
||||
<string name="screen_room_member_list_mode_members">"Membri"</string>
|
||||
<string name="screen_room_member_list_role_administrator">"Solo amministratori"</string>
|
||||
<string name="screen_room_member_list_role_moderator">"Amministratori e moderatori"</string>
|
||||
<plurals name="screen_room_member_list_pending_header_title">
|
||||
<item quantity="one">"%1$d Invitato"</item>
|
||||
<item quantity="other">"%1$d Invitati"</item>
|
||||
</plurals>
|
||||
<string name="screen_room_member_list_pending_status">"In attesa"</string>
|
||||
<string name="screen_room_member_list_role_administrator">"Amministratore"</string>
|
||||
<string name="screen_room_member_list_role_moderator">"Moderatore"</string>
|
||||
<string name="screen_room_member_list_role_owner">"Proprietario"</string>
|
||||
<string name="screen_room_member_list_room_members_header_title">"Membri della stanza"</string>
|
||||
<string name="screen_room_member_list_unbanning_user">"Riammissione di %1$s"</string>
|
||||
@@ -57,10 +70,12 @@
|
||||
<string name="screen_room_roles_and_permissions_messages_and_content">"Messaggi e contenuti"</string>
|
||||
<string name="screen_room_roles_and_permissions_moderators">"Moderatori"</string>
|
||||
<string name="screen_room_roles_and_permissions_owners">"Proprietari"</string>
|
||||
<string name="screen_room_roles_and_permissions_permissions_header">"Autorizzazioni"</string>
|
||||
<string name="screen_room_roles_and_permissions_reset">"Reimpostare le autorizzazioni"</string>
|
||||
<string name="screen_room_roles_and_permissions_reset_confirm_description">"Una volta reimpostate le autorizzazioni, perderai le impostazioni correnti."</string>
|
||||
<string name="screen_room_roles_and_permissions_reset_confirm_title">"Reimpostare autorizzazioni?"</string>
|
||||
<string name="screen_room_roles_and_permissions_roles_header">"Ruoli"</string>
|
||||
<string name="screen_room_roles_and_permissions_room_details">"Dettagli della stanza"</string>
|
||||
<string name="screen_room_roles_and_permissions_space_details">"Dettagli dello spazio"</string>
|
||||
<string name="screen_room_roles_and_permissions_title">"Ruoli e autorizzazioni"</string>
|
||||
</resources>
|
||||
|
||||
@@ -1,14 +1,16 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
|
||||
<string name="screen_room_change_permissions_administrators">"Somente administradores"</string>
|
||||
<string name="screen_room_change_permissions_administrators">"Administradores"</string>
|
||||
<string name="screen_room_change_permissions_ban_people">"Banir pessoas"</string>
|
||||
<string name="screen_room_change_permissions_delete_messages">"Remover mensagens"</string>
|
||||
<string name="screen_room_change_permissions_invite_people">"Convide pessoas e aceite solicitações de entrada"</string>
|
||||
<string name="screen_room_change_permissions_everyone">"Membro"</string>
|
||||
<string name="screen_room_change_permissions_invite_people">"Convidar pessoas"</string>
|
||||
<string name="screen_room_change_permissions_member_moderation">"Gerenciar membros"</string>
|
||||
<string name="screen_room_change_permissions_messages_and_content">"Mensagens e conteúdo"</string>
|
||||
<string name="screen_room_change_permissions_moderators">"Administradores e moderadores"</string>
|
||||
<string name="screen_room_change_permissions_remove_people">"Remover pessoas e recusar solicitações de entrada"</string>
|
||||
<string name="screen_room_change_permissions_moderators">"Moderador"</string>
|
||||
<string name="screen_room_change_permissions_remove_people">"Remover pessoas"</string>
|
||||
<string name="screen_room_change_permissions_room_avatar">"Alterar avatar da sala"</string>
|
||||
<string name="screen_room_change_permissions_room_details">"Editar sala"</string>
|
||||
<string name="screen_room_change_permissions_room_details">"Editar detalhes"</string>
|
||||
<string name="screen_room_change_permissions_room_name">"Alterar nome da sala"</string>
|
||||
<string name="screen_room_change_permissions_room_topic">"Alterar tópico da sala"</string>
|
||||
<string name="screen_room_change_permissions_send_messages">"Enviar mensagens"</string>
|
||||
@@ -31,7 +33,13 @@
|
||||
<string name="screen_room_change_role_section_users">"Membros"</string>
|
||||
<string name="screen_room_change_role_unsaved_changes_description">"Você tem alterações não salvas."</string>
|
||||
<string name="screen_room_change_role_unsaved_changes_title">"Salvar alterações?"</string>
|
||||
<string name="screen_room_member_list_banned_empty">"Não há usuários banidos nesta sala."</string>
|
||||
<string name="screen_room_member_list_banned_empty">"Não há usuários banidos."</string>
|
||||
<plurals name="screen_room_member_list_banned_header_title">
|
||||
<item quantity="one">"%1$d banido"</item>
|
||||
<item quantity="other">"%1$d banidos"</item>
|
||||
</plurals>
|
||||
<string name="screen_room_member_list_empty_search_subtitle">"Confira a ortografia ou tente uma nova busca"</string>
|
||||
<string name="screen_room_member_list_empty_search_title">"Nenhum resultado para “%1$s”"</string>
|
||||
<plurals name="screen_room_member_list_header_title">
|
||||
<item quantity="one">"%1$d pessoa"</item>
|
||||
<item quantity="other">"%1$d pessoas"</item>
|
||||
@@ -43,8 +51,13 @@
|
||||
<string name="screen_room_member_list_manage_member_unban_title">"Desbanir da sala"</string>
|
||||
<string name="screen_room_member_list_mode_banned">"Banidos"</string>
|
||||
<string name="screen_room_member_list_mode_members">"Membros"</string>
|
||||
<string name="screen_room_member_list_role_administrator">"Somente administradores"</string>
|
||||
<string name="screen_room_member_list_role_moderator">"Administradores e moderadores"</string>
|
||||
<plurals name="screen_room_member_list_pending_header_title">
|
||||
<item quantity="one">"%1$d convidado"</item>
|
||||
<item quantity="other">"%1$d convidados"</item>
|
||||
</plurals>
|
||||
<string name="screen_room_member_list_pending_status">"Pendente"</string>
|
||||
<string name="screen_room_member_list_role_administrator">"Administradores"</string>
|
||||
<string name="screen_room_member_list_role_moderator">"Moderador"</string>
|
||||
<string name="screen_room_member_list_role_owner">"Proprietário"</string>
|
||||
<string name="screen_room_member_list_room_members_header_title">"Membros da sala"</string>
|
||||
<string name="screen_room_member_list_unbanning_user">"Desbanindo %1$s"</string>
|
||||
@@ -57,10 +70,12 @@
|
||||
<string name="screen_room_roles_and_permissions_messages_and_content">"Mensagens e conteúdo"</string>
|
||||
<string name="screen_room_roles_and_permissions_moderators">"Moderadores"</string>
|
||||
<string name="screen_room_roles_and_permissions_owners">"Proprietários"</string>
|
||||
<string name="screen_room_roles_and_permissions_permissions_header">"Permissões"</string>
|
||||
<string name="screen_room_roles_and_permissions_reset">"Redefinir permissões"</string>
|
||||
<string name="screen_room_roles_and_permissions_reset_confirm_description">"Depois de redefinir as permissões, você perderá as configurações atuais."</string>
|
||||
<string name="screen_room_roles_and_permissions_reset_confirm_title">"Redefinir permissões?"</string>
|
||||
<string name="screen_room_roles_and_permissions_roles_header">"Cargos"</string>
|
||||
<string name="screen_room_roles_and_permissions_room_details">"Detalhes da sala"</string>
|
||||
<string name="screen_room_roles_and_permissions_space_details">"Detalhes do espaço"</string>
|
||||
<string name="screen_room_roles_and_permissions_title">"Cargos e permissões"</string>
|
||||
</resources>
|
||||
|
||||
@@ -15,13 +15,17 @@
|
||||
<string name="screen_room_change_role_administrators_title">"Administratorlarni tahrirlash"</string>
|
||||
<string name="screen_room_change_role_confirm_add_admin_description">"Bu amalni bekor qila olmaysiz. Siz foydalanuvchini o‘zingiz bilan bir xil quvvat darajasiga ega bo‘lishga undayapsiz."</string>
|
||||
<string name="screen_room_change_role_confirm_add_admin_title">"Admin qo‘shilsinmi?"</string>
|
||||
<string name="screen_room_change_role_confirm_change_owners_description">"Bu amalni bekor qila olmaysiz. Siz egalikni tanlangan foydalanuvchilarga o‘tkazmoqdasiz. Tark etsangiz, bu doimiy bo‘ladi."</string>
|
||||
<string name="screen_room_change_role_confirm_change_owners_title">"Egalik huquqini o‘tkazasizmi?"</string>
|
||||
<string name="screen_room_change_role_confirm_demote_self_action">"Pastga tushirish"</string>
|
||||
<string name="screen_room_change_role_confirm_demote_self_description">"Siz oʻzingizni imtiyozlardan mahrum qilayotganingiz sababli, bu o‘zgarishni bekor qila olmaysiz. Agar xonadagi so‘nggi imtiyozli foydalanuvchi bo‘lsangiz, imtiyozlarni qayta tiklash imkonsiz bo‘ladi."</string>
|
||||
<string name="screen_room_change_role_confirm_demote_self_title">"O‘z darajangizni pasaytirmoqchimisiz?"</string>
|
||||
<string name="screen_room_change_role_invited_member_name">"%1$s (Jarayonda)"</string>
|
||||
<string name="screen_room_change_role_invited_member_name_android">"(Kutilmoqda)"</string>
|
||||
<string name="screen_room_change_role_moderators_admin_section_footer">"Administratorlar avtomatik ravishda moderator imtiyozlariga ega"</string>
|
||||
<string name="screen_room_change_role_moderators_owner_section_footer">"Egalar avtomatik ravishda administrator huquqlariga ega."</string>
|
||||
<string name="screen_room_change_role_moderators_title">"Moderatorlarni tahrirlash"</string>
|
||||
<string name="screen_room_change_role_owners_title">"Egalarni tanlang"</string>
|
||||
<string name="screen_room_change_role_section_administrators">"Adminlar"</string>
|
||||
<string name="screen_room_change_role_section_moderators">"Moderatorlar"</string>
|
||||
<string name="screen_room_change_role_section_users">"Azolar"</string>
|
||||
@@ -36,19 +40,23 @@
|
||||
<string name="screen_room_member_list_manage_member_remove_confirmation_kick">"Faqat aʻzoni olib tashlash"</string>
|
||||
<string name="screen_room_member_list_manage_member_unban_action">"Taqiqni bekor qilish"</string>
|
||||
<string name="screen_room_member_list_manage_member_unban_message">"Agar taklif qilinsa, ular bu xonaga qayta qo‘shilishlari mumkin."</string>
|
||||
<string name="screen_room_member_list_manage_member_unban_title">"Xonadan taqiqni olib tashlash"</string>
|
||||
<string name="screen_room_member_list_mode_banned">"Taqiqlangan"</string>
|
||||
<string name="screen_room_member_list_mode_members">"Azolar"</string>
|
||||
<string name="screen_room_member_list_role_administrator">"Faqat adminlar"</string>
|
||||
<string name="screen_room_member_list_role_moderator">"Adminlar va moderatorlar"</string>
|
||||
<string name="screen_room_member_list_role_owner">"Egasi"</string>
|
||||
<string name="screen_room_member_list_room_members_header_title">"Xona a\'zolari"</string>
|
||||
<string name="screen_room_member_list_unbanning_user">"Taqiqni bekor qilish %1$s"</string>
|
||||
<string name="screen_room_roles_and_permissions_admins">"Adminlar"</string>
|
||||
<string name="screen_room_roles_and_permissions_admins_and_owners">"Adminlar va egalari"</string>
|
||||
<string name="screen_room_roles_and_permissions_change_my_role">"Rolimni o‘zgartirish"</string>
|
||||
<string name="screen_room_roles_and_permissions_change_role_demote_to_member">"Aʼzolikka tushirish"</string>
|
||||
<string name="screen_room_roles_and_permissions_change_role_demote_to_moderator">"Moderatorga pasaytirish"</string>
|
||||
<string name="screen_room_roles_and_permissions_member_moderation">"Aʻzo moderatsiyasi"</string>
|
||||
<string name="screen_room_roles_and_permissions_messages_and_content">"Xabarlar va kontent"</string>
|
||||
<string name="screen_room_roles_and_permissions_moderators">"Moderatorlar"</string>
|
||||
<string name="screen_room_roles_and_permissions_owners">"Egalari"</string>
|
||||
<string name="screen_room_roles_and_permissions_reset">"Ruxsatlarni tiklash"</string>
|
||||
<string name="screen_room_roles_and_permissions_reset_confirm_description">"Ruxsatlarni asliga qaytargach, joriy sozlamalarni yoʻqotasiz."</string>
|
||||
<string name="screen_room_roles_and_permissions_reset_confirm_title">"Ruxsatlar asliga qaytarilsinmi?"</string>
|
||||
|
||||
@@ -31,7 +31,7 @@
|
||||
<string name="screen_room_change_role_section_users">"成员"</string>
|
||||
<string name="screen_room_change_role_unsaved_changes_description">"您有未保存的更改。"</string>
|
||||
<string name="screen_room_change_role_unsaved_changes_title">"保存更改?"</string>
|
||||
<string name="screen_room_member_list_banned_empty">"此聊天室里没有被封禁的用户。"</string>
|
||||
<string name="screen_room_member_list_banned_empty">"没有被封禁的用户。"</string>
|
||||
<plurals name="screen_room_member_list_header_title">
|
||||
<item quantity="other">"%1$d 人"</item>
|
||||
</plurals>
|
||||
@@ -61,5 +61,6 @@
|
||||
<string name="screen_room_roles_and_permissions_reset_confirm_title">"重置权限?"</string>
|
||||
<string name="screen_room_roles_and_permissions_roles_header">"角色"</string>
|
||||
<string name="screen_room_roles_and_permissions_room_details">"聊天室详情"</string>
|
||||
<string name="screen_room_roles_and_permissions_space_details">"空间详情"</string>
|
||||
<string name="screen_room_roles_and_permissions_title">"角色与权限"</string>
|
||||
</resources>
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
|
||||
<string name="screen_join_room_loading_alert_title">"Biz bu xonani oldindan ko‘rishni ko‘rsata olmadik "</string>
|
||||
<string name="screen_room_alias_resolver_resolve_alias_failure">"Xona taxalluslari yechilmadi."</string>
|
||||
</resources>
|
||||
|
||||
@@ -90,8 +90,8 @@
|
||||
<string name="screen_security_and_privacy_room_access_invite_only_option_description">"Хората могат да се присъединят само ако са поканени"</string>
|
||||
<string name="screen_security_and_privacy_room_access_invite_only_option_title">"Само с покана"</string>
|
||||
<string name="screen_security_and_privacy_room_access_section_header">"Достъп до стаята"</string>
|
||||
<string name="screen_security_and_privacy_room_access_space_members_option_description">"Пространствата в момента не се поддържат"</string>
|
||||
<string name="screen_security_and_privacy_room_access_space_members_option_title">"Членове на пространството"</string>
|
||||
<string name="screen_security_and_privacy_room_access_space_members_option_unavailable_description">"Пространствата в момента не се поддържат"</string>
|
||||
<string name="screen_security_and_privacy_room_directory_visibility_toggle_title">"Видима в директорията на обществените стаи"</string>
|
||||
<string name="screen_security_and_privacy_room_history_anyone_option_title">"Всеки"</string>
|
||||
<string name="screen_security_and_privacy_room_history_section_header">"Кой може да чете историята"</string>
|
||||
|
||||
@@ -1,19 +1,21 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
|
||||
<string name="screen_edit_room_address_room_address_section_footer">"Aby byla místnost v adresáři viditelná, je třeba zadat její adresu."</string>
|
||||
<string name="screen_edit_room_address_title">"Adresa místnosti"</string>
|
||||
<string name="screen_edit_room_address_room_address_section_footer">"Budete potřebovat adresu místnosti, aby byla viditelná v adresáři místností."</string>
|
||||
<string name="screen_edit_room_address_title">"Upravit adresu"</string>
|
||||
<string name="screen_notification_settings_edit_failed_updating_default_mode">"Při aktualizaci nastavení oznámení došlo k chybě."</string>
|
||||
<string name="screen_notification_settings_mentions_only_disclaimer">"Váš domovský server tuto možnost v zašifrovaných místnostech nepodporuje, v některých místnostech nemusíte být upozorněni."</string>
|
||||
<string name="screen_polls_history_title">"Hlasování"</string>
|
||||
<string name="screen_room_change_permissions_administrators">"Pouze správci"</string>
|
||||
<string name="screen_room_change_permissions_administrators">"Správce"</string>
|
||||
<string name="screen_room_change_permissions_ban_people">"Vykázat lidi"</string>
|
||||
<string name="screen_room_change_permissions_delete_messages">"Odstranit zprávy"</string>
|
||||
<string name="screen_room_change_permissions_invite_people">"Pozvěte lidi a přijímejte žádosti o připojení"</string>
|
||||
<string name="screen_room_change_permissions_everyone">"Člen"</string>
|
||||
<string name="screen_room_change_permissions_invite_people">"Pozvat přátele"</string>
|
||||
<string name="screen_room_change_permissions_member_moderation">"Spravovat členy"</string>
|
||||
<string name="screen_room_change_permissions_messages_and_content">"Zprávy a obsah"</string>
|
||||
<string name="screen_room_change_permissions_moderators">"Správci a moderátoři"</string>
|
||||
<string name="screen_room_change_permissions_remove_people">"Odeberte lidi a odmítněte žádosti o připojení"</string>
|
||||
<string name="screen_room_change_permissions_moderators">"Moderátor"</string>
|
||||
<string name="screen_room_change_permissions_remove_people">"Odebrat osoby"</string>
|
||||
<string name="screen_room_change_permissions_room_avatar">"Změnit avatar místnosti"</string>
|
||||
<string name="screen_room_change_permissions_room_details">"Upravit místnost"</string>
|
||||
<string name="screen_room_change_permissions_room_details">"Upravit podrobnosti"</string>
|
||||
<string name="screen_room_change_permissions_room_name">"Změnit název místnosti"</string>
|
||||
<string name="screen_room_change_permissions_room_topic">"Změnit téma místnosti"</string>
|
||||
<string name="screen_room_change_permissions_send_messages">"Odeslat zprávy"</string>
|
||||
@@ -40,7 +42,7 @@
|
||||
<string name="screen_room_details_badge_encrypted">"Šifrováno"</string>
|
||||
<string name="screen_room_details_badge_not_encrypted">"Není šifrováno"</string>
|
||||
<string name="screen_room_details_badge_public">"Veřejná místnost"</string>
|
||||
<string name="screen_room_details_edit_room_title">"Upravit místnost"</string>
|
||||
<string name="screen_room_details_edit_room_title">"Upravit podrobnosti"</string>
|
||||
<string name="screen_room_details_edition_error">"Došlo k neznámé chybě a informace nebylo možné změnit."</string>
|
||||
<string name="screen_room_details_edition_error_title">"Nelze aktualizovat místnost"</string>
|
||||
<string name="screen_room_details_encryption_enabled_subtitle">"Zprávy jsou zabezpečeny zámky. Pouze vy a příjemci máte jedinečné klíče k jejich odemčení."</string>
|
||||
@@ -60,7 +62,7 @@
|
||||
<string name="screen_room_details_pinned_events_row_title">"Připnuté zprávy"</string>
|
||||
<string name="screen_room_details_profile_row_title">"Profil"</string>
|
||||
<string name="screen_room_details_requests_to_join_title">"Žádosti o vstup"</string>
|
||||
<string name="screen_room_details_roles_and_permissions">"Role a oprávnění"</string>
|
||||
<string name="screen_room_details_roles_and_permissions">"Role a oprávnění"</string>
|
||||
<string name="screen_room_details_room_name_label">"Název místnosti"</string>
|
||||
<string name="screen_room_details_security_and_privacy_title">"Zabezpečení a soukromí"</string>
|
||||
<string name="screen_room_details_security_title">"Zabezpečení"</string>
|
||||
@@ -69,6 +71,13 @@
|
||||
<string name="screen_room_details_topic_title">"Téma"</string>
|
||||
<string name="screen_room_details_updating_room">"Aktualizace místnosti…"</string>
|
||||
<string name="screen_room_member_list_banned_empty">"V této místnosti nejsou žádní vykázaní uživatelé."</string>
|
||||
<plurals name="screen_room_member_list_banned_header_title">
|
||||
<item quantity="one">"%1$d vykázán(a)"</item>
|
||||
<item quantity="few">"%1$d vykázáni"</item>
|
||||
<item quantity="other">"%1$d vykázáných"</item>
|
||||
</plurals>
|
||||
<string name="screen_room_member_list_empty_search_subtitle">"Zkontrolujte pravopis nebo zkuste nové vyhledávání"</string>
|
||||
<string name="screen_room_member_list_empty_search_title">"Žádné výsledky pro “%1$s”"</string>
|
||||
<plurals name="screen_room_member_list_header_title">
|
||||
<item quantity="one">"%1$d osoba"</item>
|
||||
<item quantity="few">"%1$d osoby"</item>
|
||||
@@ -81,8 +90,14 @@
|
||||
<string name="screen_room_member_list_manage_member_unban_title">"Zrušit vykázání z místnosti"</string>
|
||||
<string name="screen_room_member_list_mode_banned">"Vykázaní"</string>
|
||||
<string name="screen_room_member_list_mode_members">"Členové"</string>
|
||||
<string name="screen_room_member_list_role_administrator">"Pouze správci"</string>
|
||||
<string name="screen_room_member_list_role_moderator">"Správci a moderátoři"</string>
|
||||
<plurals name="screen_room_member_list_pending_header_title">
|
||||
<item quantity="one">"%1$d pozván(a)"</item>
|
||||
<item quantity="few">"%1$d pozváni"</item>
|
||||
<item quantity="other">"%1$d pozvaných"</item>
|
||||
</plurals>
|
||||
<string name="screen_room_member_list_pending_status">"Čekající"</string>
|
||||
<string name="screen_room_member_list_role_administrator">"Správce"</string>
|
||||
<string name="screen_room_member_list_role_moderator">"Moderátor"</string>
|
||||
<string name="screen_room_member_list_role_owner">"Vlastník"</string>
|
||||
<string name="screen_room_member_list_room_members_header_title">"Členové místnosti"</string>
|
||||
<string name="screen_room_member_list_unbanning_user">"Rušení vykázání %1$s"</string>
|
||||
@@ -109,14 +124,15 @@
|
||||
<string name="screen_room_roles_and_permissions_messages_and_content">"Zprávy a obsah"</string>
|
||||
<string name="screen_room_roles_and_permissions_moderators">"Moderátoři"</string>
|
||||
<string name="screen_room_roles_and_permissions_owners">"Vlastníci"</string>
|
||||
<string name="screen_room_roles_and_permissions_permissions_header">"Oprávnění"</string>
|
||||
<string name="screen_room_roles_and_permissions_reset">"Obnovit oprávnění"</string>
|
||||
<string name="screen_room_roles_and_permissions_reset_confirm_description">"Po obnovení oprávnění ztratíte aktuální nastavení."</string>
|
||||
<string name="screen_room_roles_and_permissions_reset_confirm_title">"Obnovit oprávnění?"</string>
|
||||
<string name="screen_room_roles_and_permissions_roles_header">"Role"</string>
|
||||
<string name="screen_room_roles_and_permissions_room_details">"Podrobnosti místnosti"</string>
|
||||
<string name="screen_room_roles_and_permissions_title">"Role a oprávnění"</string>
|
||||
<string name="screen_security_and_privacy_add_room_address_action">"Přidat adresu místnosti"</string>
|
||||
<string name="screen_security_and_privacy_ask_to_join_option_description">"Kdokoli může požádat o vstup do místnosti, ale správce nebo moderátor bude muset žádost přijmout."</string>
|
||||
<string name="screen_room_roles_and_permissions_title">"Role a oprávnění"</string>
|
||||
<string name="screen_security_and_privacy_add_room_address_action">"Přidat adresu"</string>
|
||||
<string name="screen_security_and_privacy_ask_to_join_option_description">"Všichni musí požádat o přístup."</string>
|
||||
<string name="screen_security_and_privacy_ask_to_join_option_title">"Požádat o připojení"</string>
|
||||
<string name="screen_security_and_privacy_enable_encryption_alert_confirm_button_title">"Ano, povolit šifrování"</string>
|
||||
<string name="screen_security_and_privacy_enable_encryption_alert_description">"Po aktivaci nelze šifrování místnosti deaktivovat. Historie zpráv bude viditelná pouze pro členy místnosti od doby, kdy byli pozváni nebo od té doby, co do místnosti vstoupili.
|
||||
@@ -126,17 +142,21 @@ Nedoporučujeme povolovat šifrování pro místnosti, které může kdokoli naj
|
||||
<string name="screen_security_and_privacy_encryption_section_footer">"Jakmile je povoleno, šifrování nelze zakázat."</string>
|
||||
<string name="screen_security_and_privacy_encryption_section_header">"Šifrování"</string>
|
||||
<string name="screen_security_and_privacy_encryption_toggle_title">"Povolit koncové šifrování"</string>
|
||||
<string name="screen_security_and_privacy_room_access_anyone_option_description">"Každý může najít a vstoupit"</string>
|
||||
<string name="screen_security_and_privacy_room_access_anyone_option_description">"Vstoupit může kdokoli."</string>
|
||||
<string name="screen_security_and_privacy_room_access_anyone_option_title">"Kdokoliv"</string>
|
||||
<string name="screen_security_and_privacy_room_access_invite_only_option_description">"Lidé mohou vstoupit, pouze pokud jsou pozváni"</string>
|
||||
<string name="screen_security_and_privacy_room_access_footer">"Vyberte, kteří členové prostorů se k této místnosti mohou připojit bez pozvánky. %1$s"</string>
|
||||
<string name="screen_security_and_privacy_room_access_invite_only_option_description">"Vstoupit mohou pouze pozvaní lidé."</string>
|
||||
<string name="screen_security_and_privacy_room_access_invite_only_option_title">"Pouze pro zvané"</string>
|
||||
<string name="screen_security_and_privacy_room_access_section_header">"Přístup do místnosti"</string>
|
||||
<string name="screen_security_and_privacy_room_access_space_members_option_description">"Prostory nejsou aktuálně podporovány"</string>
|
||||
<string name="screen_security_and_privacy_room_access_section_header">"Přístup"</string>
|
||||
<string name="screen_security_and_privacy_room_access_space_members_option_multiple_parents_description">"Vstoupit může kdokoli z autorizovaných prostorů."</string>
|
||||
<string name="screen_security_and_privacy_room_access_space_members_option_single_parent_description">"Vstoupit může kdokoli v %1$s."</string>
|
||||
<string name="screen_security_and_privacy_room_access_space_members_option_title">"Členové prostoru"</string>
|
||||
<string name="screen_security_and_privacy_room_address_section_footer">"Aby byla místnost v adresáři viditelná, je třeba zadat její adresu."</string>
|
||||
<string name="screen_security_and_privacy_room_address_section_header">"Adresa místnosti"</string>
|
||||
<string name="screen_security_and_privacy_room_access_space_members_option_unavailable_description">"Prostory nejsou aktuálně podporovány"</string>
|
||||
<string name="screen_security_and_privacy_room_address_section_footer">"Budete potřebovat adresu místnosti, aby byla viditelná v adresáři místností."</string>
|
||||
<string name="screen_security_and_privacy_room_address_section_header">"Adresa"</string>
|
||||
<string name="screen_security_and_privacy_room_directory_visibility_section_footer">"Umožněte nalezení této místnosti prohledáním adresáře veřejných místností na %1$s"</string>
|
||||
<string name="screen_security_and_privacy_room_directory_visibility_toggle_title">"Viditelné v adresáři veřejných místností"</string>
|
||||
<string name="screen_security_and_privacy_room_directory_visibility_toggle_description">"Umožnit nalezení vyhledáváním ve veřejném adresáři."</string>
|
||||
<string name="screen_security_and_privacy_room_directory_visibility_toggle_title">"Viditelné ve veřejném adresáři"</string>
|
||||
<string name="screen_security_and_privacy_room_history_anyone_option_title">"Kdokoliv"</string>
|
||||
<string name="screen_security_and_privacy_room_history_section_header">"Kdo může číst historii"</string>
|
||||
<string name="screen_security_and_privacy_room_history_since_invite_option_title">"Pouze členové od té doby, co byli pozváni"</string>
|
||||
@@ -144,6 +164,7 @@ Nedoporučujeme povolovat šifrování pro místnosti, které může kdokoli naj
|
||||
<string name="screen_security_and_privacy_room_publishing_section_footer">"Adresy místností představují způsoby, jak najít místnosti a získat k nim přístup. Díky tomu můžete svoji místnost snadno sdílet s ostatními.
|
||||
Můžete se rozhodnout publikovat svou místnost ve veřejném adresáři místnosti vašeho domovského serveru."</string>
|
||||
<string name="screen_security_and_privacy_room_publishing_section_header">"Publikování místnosti"</string>
|
||||
<string name="screen_security_and_privacy_room_visibility_section_header">"Viditelnost místnosti"</string>
|
||||
<string name="screen_security_and_privacy_room_visibility_section_footer">"Adresy slouží k vyhledávání a přístupu do místností a prostorů. Díky tomu je také můžete snadno sdílet s ostatními."</string>
|
||||
<string name="screen_security_and_privacy_room_visibility_section_header">"Viditelnost"</string>
|
||||
<string name="screen_security_and_privacy_title">"Zabezpečení a soukromí"</string>
|
||||
</resources>
|
||||
|
||||
@@ -136,8 +136,8 @@ Nid ydym yn argymell galluogi amgryptio ar gyfer ystafelloedd y gall unrhyw un d
|
||||
<string name="screen_security_and_privacy_room_access_invite_only_option_description">"Dim ond os cawn nhw wahoddiad gall pobl ymuno"</string>
|
||||
<string name="screen_security_and_privacy_room_access_invite_only_option_title">"Gwahoddiad yn unig"</string>
|
||||
<string name="screen_security_and_privacy_room_access_section_header">"Mynediad ystafell"</string>
|
||||
<string name="screen_security_and_privacy_room_access_space_members_option_description">"Nid yw gofodau\'n cael eu cefnogi ar hyn o bryd"</string>
|
||||
<string name="screen_security_and_privacy_room_access_space_members_option_title">"Aelodau gofod"</string>
|
||||
<string name="screen_security_and_privacy_room_access_space_members_option_unavailable_description">"Nid yw gofodau\'n cael eu cefnogi ar hyn o bryd"</string>
|
||||
<string name="screen_security_and_privacy_room_address_section_footer">"Bydd angen cyfeiriad ystafell arnoch i\'w wneud yn weladwy yn y cyfeiriadur."</string>
|
||||
<string name="screen_security_and_privacy_room_address_section_header">"Cyfeiriad yr ystafell"</string>
|
||||
<string name="screen_security_and_privacy_room_directory_visibility_section_footer">"Caniatáu i\'r ystafell hon gael ei chanfod trwy chwilio cyfeiriadur ystafelloedd cyhoeddus %1$s"</string>
|
||||
|
||||
@@ -130,8 +130,8 @@ Vi anbefaler ikke at aktivere kryptering for rum, som alle kan finde og deltage
|
||||
<string name="screen_security_and_privacy_room_access_invite_only_option_description">"Andre kan kun deltage, hvis de bliver inviteret"</string>
|
||||
<string name="screen_security_and_privacy_room_access_invite_only_option_title">"Kun med invitation"</string>
|
||||
<string name="screen_security_and_privacy_room_access_section_header">"Adgang til rummet"</string>
|
||||
<string name="screen_security_and_privacy_room_access_space_members_option_description">"Grupper understøttes ikke i øjeblikket"</string>
|
||||
<string name="screen_security_and_privacy_room_access_space_members_option_title">"Medlemmer af gruppen"</string>
|
||||
<string name="screen_security_and_privacy_room_access_space_members_option_unavailable_description">"Grupper understøttes ikke i øjeblikket"</string>
|
||||
<string name="screen_security_and_privacy_room_address_section_footer">"Du skal bruge en rum-adresse for at gøre den synlig i kataloget."</string>
|
||||
<string name="screen_security_and_privacy_room_directory_visibility_section_footer">"Tillad, at dette rum kan findes ved at søge i %1$s fortegnelse over offentlige rum"</string>
|
||||
<string name="screen_security_and_privacy_room_directory_visibility_toggle_title">"Synlig i det offentlige register over rum"</string>
|
||||
|
||||
@@ -130,8 +130,8 @@ Wir empfehlen keine Verschlüsselung für Chats zu aktivieren, die jeder finden
|
||||
<string name="screen_security_and_privacy_room_access_invite_only_option_description">"Personen können nur beitreten, wenn sie eingeladen werden."</string>
|
||||
<string name="screen_security_and_privacy_room_access_invite_only_option_title">"Nur auf Einladung"</string>
|
||||
<string name="screen_security_and_privacy_room_access_section_header">"Chat Zugang"</string>
|
||||
<string name="screen_security_and_privacy_room_access_space_members_option_description">"Spaces werden zur Zeit nicht unterstützt."</string>
|
||||
<string name="screen_security_and_privacy_room_access_space_members_option_title">"Spacemitglieder"</string>
|
||||
<string name="screen_security_and_privacy_room_access_space_members_option_unavailable_description">"Spaces werden zur Zeit nicht unterstützt."</string>
|
||||
<string name="screen_security_and_privacy_room_address_section_footer">"Du benötigst eine Chat-Adresse, um den Chat im Verzeichnis sichtbar zu machen."</string>
|
||||
<string name="screen_security_and_privacy_room_address_section_header">"Chatroomadresse"</string>
|
||||
<string name="screen_security_and_privacy_room_directory_visibility_section_footer">"Erlaube das Auffinden dieses Chats durch Suche im öffentlichen Verzeichnis von %1$s"</string>
|
||||
|
||||
@@ -121,8 +121,8 @@
|
||||
<string name="screen_security_and_privacy_room_access_invite_only_option_description">"Τα άτομα μπορούν να συμμετάσχουν μόνο εάν έχουν προσκληθεί"</string>
|
||||
<string name="screen_security_and_privacy_room_access_invite_only_option_title">"Μόνο πρόσκληση"</string>
|
||||
<string name="screen_security_and_privacy_room_access_section_header">"Πρόσβαση στην αίθουσα"</string>
|
||||
<string name="screen_security_and_privacy_room_access_space_members_option_description">"Οι χώροι δεν υποστηρίζονται προς το παρόν"</string>
|
||||
<string name="screen_security_and_privacy_room_access_space_members_option_title">"Μέλη χώρου"</string>
|
||||
<string name="screen_security_and_privacy_room_access_space_members_option_unavailable_description">"Οι χώροι δεν υποστηρίζονται προς το παρόν"</string>
|
||||
<string name="screen_security_and_privacy_room_address_section_footer">"Θα χρειαστείτε μια διεύθυνση αίθουσας για να την κάνετε ορατή στον κατάλογο."</string>
|
||||
<string name="screen_security_and_privacy_room_directory_visibility_section_footer">"Επιστρέψτε την εύρεση αυτής της αίθουσας με αναζήτηση στον κατάλογο %1$s δημοσίων αιθουσών"</string>
|
||||
<string name="screen_security_and_privacy_room_directory_visibility_toggle_title">"Ορατή στον κατάλογο δημόσιων αιθουσών"</string>
|
||||
|
||||
@@ -121,8 +121,8 @@ No recomendamos habilitar el cifrado para las salas que cualquiera pueda encontr
|
||||
<string name="screen_security_and_privacy_room_access_invite_only_option_description">"Las personas solo pueden unirse si están invitadas"</string>
|
||||
<string name="screen_security_and_privacy_room_access_invite_only_option_title">"Solo por invitación"</string>
|
||||
<string name="screen_security_and_privacy_room_access_section_header">"Acceso a la sala"</string>
|
||||
<string name="screen_security_and_privacy_room_access_space_members_option_description">"No se admiten los espacios por el momento."</string>
|
||||
<string name="screen_security_and_privacy_room_access_space_members_option_title">"Miembros del espacio"</string>
|
||||
<string name="screen_security_and_privacy_room_access_space_members_option_unavailable_description">"No se admiten los espacios por el momento."</string>
|
||||
<string name="screen_security_and_privacy_room_address_section_footer">"Necesitarás una dirección de sala para que sea visible en el directorio."</string>
|
||||
<string name="screen_security_and_privacy_room_directory_visibility_section_footer">"Permite encontrar esta sala buscando en el directorio de salas públicas de %1$s"</string>
|
||||
<string name="screen_security_and_privacy_room_directory_visibility_toggle_title">"Visible en el directorio de salas públicas"</string>
|
||||
|
||||
@@ -136,8 +136,8 @@ Me ei soovita krüptimise kasutamist selliste avalike jututubade puhul, millega
|
||||
<string name="screen_security_and_privacy_room_access_invite_only_option_description">"Liituda saab vaid kutse olemasolul"</string>
|
||||
<string name="screen_security_and_privacy_room_access_invite_only_option_title">"Vaid kutsega"</string>
|
||||
<string name="screen_security_and_privacy_room_access_section_header">"Ligipääs"</string>
|
||||
<string name="screen_security_and_privacy_room_access_space_members_option_description">"Kogukondade tugi veel puudub"</string>
|
||||
<string name="screen_security_and_privacy_room_access_space_members_option_title">"Kogukonna liikmed"</string>
|
||||
<string name="screen_security_and_privacy_room_access_space_members_option_unavailable_description">"Kogukondade tugi veel puudub"</string>
|
||||
<string name="screen_security_and_privacy_room_address_section_footer">"Selleks, et jututuba oleks nähtav jututubade avalikus kataloogis, vajab ta aadressi."</string>
|
||||
<string name="screen_security_and_privacy_room_address_section_header">"Aadress"</string>
|
||||
<string name="screen_security_and_privacy_room_directory_visibility_section_footer">"Võimalda leida seda jututuba avalikust kataloogist otsides „%1$s“"</string>
|
||||
|
||||
@@ -108,8 +108,8 @@
|
||||
<string name="screen_security_and_privacy_room_access_invite_only_option_description">"Gonbidatutako pertsonak bakarrik sartu ahal izango dira"</string>
|
||||
<string name="screen_security_and_privacy_room_access_invite_only_option_title">"Gonbidapen bidez"</string>
|
||||
<string name="screen_security_and_privacy_room_access_section_header">"Gelarako sarbidea"</string>
|
||||
<string name="screen_security_and_privacy_room_access_space_members_option_description">"Gaur-gaurkoz ez da guneekin bateragarria"</string>
|
||||
<string name="screen_security_and_privacy_room_access_space_members_option_title">"Guneko kideak"</string>
|
||||
<string name="screen_security_and_privacy_room_access_space_members_option_unavailable_description">"Gaur-gaurkoz ez da guneekin bateragarria"</string>
|
||||
<string name="screen_security_and_privacy_room_address_section_header">"Gelaren helbidea"</string>
|
||||
<string name="screen_security_and_privacy_room_directory_visibility_toggle_title">"Gela publikoen direktorioan ikusgai"</string>
|
||||
<string name="screen_security_and_privacy_room_history_anyone_option_title">"Edonork"</string>
|
||||
|
||||
@@ -69,6 +69,10 @@
|
||||
<string name="screen_room_details_topic_title">"موضوع"</string>
|
||||
<string name="screen_room_details_updating_room">"بهروز کردن اتاق…"</string>
|
||||
<string name="screen_room_member_list_banned_empty">"هیچ کاربر محرومی در این اتاق نیست."</string>
|
||||
<plurals name="screen_room_member_list_header_title">
|
||||
<item quantity="one">"%1$d نفر"</item>
|
||||
<item quantity="other">"%1$d نفر"</item>
|
||||
</plurals>
|
||||
<string name="screen_room_member_list_manage_member_remove_confirmation_ban">"برداشت و تحریم عضو"</string>
|
||||
<string name="screen_room_member_list_manage_member_remove_confirmation_kick">"تنها برداشتن عضو"</string>
|
||||
<string name="screen_room_member_list_manage_member_unban_action">"رفع انسداد"</string>
|
||||
@@ -120,8 +124,8 @@
|
||||
<string name="screen_security_and_privacy_room_access_invite_only_option_description">"افراد فقط در صورت دعوت میتوانند بپیوندند"</string>
|
||||
<string name="screen_security_and_privacy_room_access_invite_only_option_title">"فقط دعوتی"</string>
|
||||
<string name="screen_security_and_privacy_room_access_section_header">"دسترسی اتاق"</string>
|
||||
<string name="screen_security_and_privacy_room_access_space_members_option_description">"در حال حاضر فضاها پشتیبانی نمیشوند"</string>
|
||||
<string name="screen_security_and_privacy_room_access_space_members_option_title">"اعضای فضا"</string>
|
||||
<string name="screen_security_and_privacy_room_access_space_members_option_unavailable_description">"در حال حاضر فضاها پشتیبانی نمیشوند"</string>
|
||||
<string name="screen_security_and_privacy_room_address_section_header">"نشانی اتاق"</string>
|
||||
<string name="screen_security_and_privacy_room_history_anyone_option_title">"هرکسی"</string>
|
||||
<string name="screen_security_and_privacy_room_publishing_section_header">"انتشار اتاق"</string>
|
||||
|
||||
@@ -1,19 +1,21 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
|
||||
<string name="screen_edit_room_address_room_address_section_footer">"Tarvitset huoneen osoitteen, jotta se näkyy hakemistossa."</string>
|
||||
<string name="screen_edit_room_address_title">"Huoneen osoite"</string>
|
||||
<string name="screen_edit_room_address_room_address_section_footer">"Tarvitset osoitteen, jotta se näkyy julkisessa hakemistossa."</string>
|
||||
<string name="screen_edit_room_address_title">"Muokkaa osoitetta"</string>
|
||||
<string name="screen_notification_settings_edit_failed_updating_default_mode">"Ilmoitusasetusten muokkaamisessa tapahtui virhe."</string>
|
||||
<string name="screen_notification_settings_mentions_only_disclaimer">"Kotipalvelimesi ei tue tätä vaihtoehtoa salatuissa huoneissa, joten et ehkä saa ilmoitusta joissakin huoneissa."</string>
|
||||
<string name="screen_polls_history_title">"Kyselyt"</string>
|
||||
<string name="screen_room_change_permissions_administrators">"Vain ylläpitäjät"</string>
|
||||
<string name="screen_room_change_permissions_administrators">"Ylläpitäjä"</string>
|
||||
<string name="screen_room_change_permissions_ban_people">"Porttikieltojen antaminen"</string>
|
||||
<string name="screen_room_change_permissions_delete_messages">"Viestien poistaminen"</string>
|
||||
<string name="screen_room_change_permissions_everyone">"Jäsen"</string>
|
||||
<string name="screen_room_change_permissions_invite_people">"Ihmisten kutsuminen ja liittymispyyntöjen hyväksyminen"</string>
|
||||
<string name="screen_room_change_permissions_member_moderation">"Jäsenien hallinta"</string>
|
||||
<string name="screen_room_change_permissions_messages_and_content">"Viestit ja sisältö"</string>
|
||||
<string name="screen_room_change_permissions_moderators">"Ylläpitäjät ja valvojat"</string>
|
||||
<string name="screen_room_change_permissions_moderators">"Valvoja"</string>
|
||||
<string name="screen_room_change_permissions_remove_people">"Henkilöiden poistaminen ja liittymispyyntöjen hylkääminen"</string>
|
||||
<string name="screen_room_change_permissions_room_avatar">"Huoneen avatarin vaihtaminen"</string>
|
||||
<string name="screen_room_change_permissions_room_details">"Muokkaa huonetta"</string>
|
||||
<string name="screen_room_change_permissions_room_details">"Muokkaa tietoja"</string>
|
||||
<string name="screen_room_change_permissions_room_name">"Huoneen nimen vaihtaminen"</string>
|
||||
<string name="screen_room_change_permissions_room_topic">"Huoneen aiheen vaihtaminen"</string>
|
||||
<string name="screen_room_change_permissions_send_messages">"Viestien lähettäminen"</string>
|
||||
@@ -40,7 +42,7 @@
|
||||
<string name="screen_room_details_badge_encrypted">"Salattu"</string>
|
||||
<string name="screen_room_details_badge_not_encrypted">"Ei salattu"</string>
|
||||
<string name="screen_room_details_badge_public">"Julkinen huone"</string>
|
||||
<string name="screen_room_details_edit_room_title">"Muokkaa huonetta"</string>
|
||||
<string name="screen_room_details_edit_room_title">"Muokkaa tietoja"</string>
|
||||
<string name="screen_room_details_edition_error">"Tuntematon virhe tapahtui, eikä tietoja voitu muuttaa."</string>
|
||||
<string name="screen_room_details_edition_error_title">"Huoneen muokkaaminen ei onnistunut"</string>
|
||||
<string name="screen_room_details_encryption_enabled_subtitle">"Viestisi suojataan lukoilla. Vain sinulla ja viesiten vastaanottajilla on uniikit avaimet niiden avaamiseen."</string>
|
||||
@@ -50,7 +52,7 @@
|
||||
<string name="screen_room_details_error_unmuting">"Tämän huoneen mykistyksen poistaminen epäonnistui, yritä uudelleen."</string>
|
||||
<string name="screen_room_details_invite_people_dont_close">"Älä sulje sovellusta ennen kuin se on valmis."</string>
|
||||
<string name="screen_room_details_invite_people_preparing">"Valmistellaan kutsuja…"</string>
|
||||
<string name="screen_room_details_invite_people_title">"Kutsu ihmisiä"</string>
|
||||
<string name="screen_room_details_invite_people_title">"Kutsu henkilöitä"</string>
|
||||
<string name="screen_room_details_leave_conversation_title">"Poistu keskustelusta"</string>
|
||||
<string name="screen_room_details_leave_room_title">"Poistu huoneesta"</string>
|
||||
<string name="screen_room_details_media_gallery_title">"Media ja tiedostot"</string>
|
||||
@@ -68,7 +70,7 @@
|
||||
<string name="screen_room_details_title">"Huoneen tiedot"</string>
|
||||
<string name="screen_room_details_topic_title">"Aihe"</string>
|
||||
<string name="screen_room_details_updating_room">"Muokataan huonetta…"</string>
|
||||
<string name="screen_room_member_list_banned_empty">"Tässä huoneessa ei ole porttikieltoja"</string>
|
||||
<string name="screen_room_member_list_banned_empty">"Porttikiellettyjä käyttäjiä ei ole."</string>
|
||||
<plurals name="screen_room_member_list_header_title">
|
||||
<item quantity="one">"%1$d henkilö"</item>
|
||||
<item quantity="other">"%1$d henkilöä"</item>
|
||||
@@ -80,8 +82,8 @@
|
||||
<string name="screen_room_member_list_manage_member_unban_title">"Poista porttikielto huoneesta"</string>
|
||||
<string name="screen_room_member_list_mode_banned">"Porttikiellot"</string>
|
||||
<string name="screen_room_member_list_mode_members">"Jäsenet"</string>
|
||||
<string name="screen_room_member_list_role_administrator">"Vain ylläpitäjät"</string>
|
||||
<string name="screen_room_member_list_role_moderator">"Ylläpitäjät ja valvojat"</string>
|
||||
<string name="screen_room_member_list_role_administrator">"Ylläpitäjä"</string>
|
||||
<string name="screen_room_member_list_role_moderator">"Valvoja"</string>
|
||||
<string name="screen_room_member_list_role_owner">"Omistaja"</string>
|
||||
<string name="screen_room_member_list_room_members_header_title">"Huoneen jäsenet"</string>
|
||||
<string name="screen_room_member_list_unbanning_user">"Poistetaan käyttäjän %1$s porttikieltoa"</string>
|
||||
@@ -108,14 +110,15 @@
|
||||
<string name="screen_room_roles_and_permissions_messages_and_content">"Viestit ja sisältö"</string>
|
||||
<string name="screen_room_roles_and_permissions_moderators">"Valvojat"</string>
|
||||
<string name="screen_room_roles_and_permissions_owners">"Omistajat"</string>
|
||||
<string name="screen_room_roles_and_permissions_permissions_header">"Oikeudet"</string>
|
||||
<string name="screen_room_roles_and_permissions_reset">"Nollaa oikeudet"</string>
|
||||
<string name="screen_room_roles_and_permissions_reset_confirm_description">"Kun nollaat käyttöoikeudet, menetät nykyiset asetukset."</string>
|
||||
<string name="screen_room_roles_and_permissions_reset_confirm_title">"Nollataanko oikeudet?"</string>
|
||||
<string name="screen_room_roles_and_permissions_roles_header">"Roolit"</string>
|
||||
<string name="screen_room_roles_and_permissions_room_details">"Huoneen tiedot"</string>
|
||||
<string name="screen_room_roles_and_permissions_title">"Roolit ja oikeudet"</string>
|
||||
<string name="screen_security_and_privacy_add_room_address_action">"Lisää huoneen osoite"</string>
|
||||
<string name="screen_security_and_privacy_ask_to_join_option_description">"Kuka tahansa voi pyytää saada liittyä huoneeseen, mutta ylläpitäjän tai valvojan on hyväksyttävä pyyntö."</string>
|
||||
<string name="screen_security_and_privacy_add_room_address_action">"Lisää osoite"</string>
|
||||
<string name="screen_security_and_privacy_ask_to_join_option_description">"Kaikkien on pyydettävä pääsyä."</string>
|
||||
<string name="screen_security_and_privacy_ask_to_join_option_title">"Pyydä liittymistä"</string>
|
||||
<string name="screen_security_and_privacy_enable_encryption_alert_confirm_button_title">"Kyllä, ota salaus käyttöön"</string>
|
||||
<string name="screen_security_and_privacy_enable_encryption_alert_description">"Kun salaus on kerran otettu käyttöön, sitä ei voi poistaa käytöstä. Viestihistoria näkyy vain huoneen jäsenille kutsusta tai liittymisestä lähtien.
|
||||
@@ -125,17 +128,18 @@ Emme suosittele salauksen ottamista käyttöön huoneissa, jotka kuka tahansa vo
|
||||
<string name="screen_security_and_privacy_encryption_section_footer">"Kun salaus on kerran otettu käyttöön, sitä ei voi poistaa käytöstä."</string>
|
||||
<string name="screen_security_and_privacy_encryption_section_header">"Salaus"</string>
|
||||
<string name="screen_security_and_privacy_encryption_toggle_title">"Ota päästä päähän -salaus käyttöön"</string>
|
||||
<string name="screen_security_and_privacy_room_access_anyone_option_description">"Kuka tahansa voi löytää ja liittyä."</string>
|
||||
<string name="screen_security_and_privacy_room_access_anyone_option_description">"Kuka tahansa voi liittyä."</string>
|
||||
<string name="screen_security_and_privacy_room_access_anyone_option_title">"Kuka tahansa"</string>
|
||||
<string name="screen_security_and_privacy_room_access_invite_only_option_description">"Vain kutsutut henkilöt voivat liittyä"</string>
|
||||
<string name="screen_security_and_privacy_room_access_invite_only_option_description">"Vain kutsutut henkilöt voivat liittyä."</string>
|
||||
<string name="screen_security_and_privacy_room_access_invite_only_option_title">"Vain kutsutut"</string>
|
||||
<string name="screen_security_and_privacy_room_access_section_header">"Huoneeseen pääsy"</string>
|
||||
<string name="screen_security_and_privacy_room_access_space_members_option_description">"Tiloja ei tällä hetkellä tueta"</string>
|
||||
<string name="screen_security_and_privacy_room_access_section_header">"Pääsy"</string>
|
||||
<string name="screen_security_and_privacy_room_access_space_members_option_title">"Tilan jäsenet"</string>
|
||||
<string name="screen_security_and_privacy_room_address_section_footer">"Tarvitset huoneen osoitteen, jotta se näkyy hakemistossa."</string>
|
||||
<string name="screen_security_and_privacy_room_address_section_header">"Huoneen osoite"</string>
|
||||
<string name="screen_security_and_privacy_room_access_space_members_option_unavailable_description">"Tiloja ei tällä hetkellä tueta"</string>
|
||||
<string name="screen_security_and_privacy_room_address_section_footer">"Tarvitset osoitteen, jotta se näkyy julkisessa hakemistossa."</string>
|
||||
<string name="screen_security_and_privacy_room_address_section_header">"Osoite"</string>
|
||||
<string name="screen_security_and_privacy_room_directory_visibility_section_footer">"Salli tämän huoneen löytäminen hakemalla %1$s -palvelimen julkisesta huonehakemistosta."</string>
|
||||
<string name="screen_security_and_privacy_room_directory_visibility_toggle_title">"Näkyy julkisessa huonehakemistossa"</string>
|
||||
<string name="screen_security_and_privacy_room_directory_visibility_toggle_description">"Anna muiden löytää tämä julkisen hakemiston kautta."</string>
|
||||
<string name="screen_security_and_privacy_room_directory_visibility_toggle_title">"Näkyy julkisessa hakemistossa"</string>
|
||||
<string name="screen_security_and_privacy_room_history_anyone_option_title">"Kuka tahansa"</string>
|
||||
<string name="screen_security_and_privacy_room_history_section_header">"Kuka voi lukea viestihistoriaa"</string>
|
||||
<string name="screen_security_and_privacy_room_history_since_invite_option_title">"Jäsenet vasta kutsusta lähtien"</string>
|
||||
@@ -143,6 +147,6 @@ Emme suosittele salauksen ottamista käyttöön huoneissa, jotka kuka tahansa vo
|
||||
<string name="screen_security_and_privacy_room_publishing_section_footer">"Huoneosoitteet ovat tapoja löytää ja käyttää huoneita. Näin voit myös helposti jakaa huoneesi muiden kanssa.
|
||||
Voit halutessasi julkaista huoneesi kotipalvelimesi julkisessa huonehakemistossa."</string>
|
||||
<string name="screen_security_and_privacy_room_publishing_section_header">"Huoneen julkaiseminen"</string>
|
||||
<string name="screen_security_and_privacy_room_visibility_section_header">"Huoneen näkyvyys"</string>
|
||||
<string name="screen_security_and_privacy_room_visibility_section_header">"Näkyvyys"</string>
|
||||
<string name="screen_security_and_privacy_title">"Turvallisuus ja yksityisyys"</string>
|
||||
</resources>
|
||||
|
||||
@@ -71,9 +71,15 @@
|
||||
<string name="screen_room_details_topic_title">"Sujet"</string>
|
||||
<string name="screen_room_details_updating_room">"Mise à jour du salon…"</string>
|
||||
<string name="screen_room_member_list_banned_empty">"Il n’y a pas d’utilisateur banni."</string>
|
||||
<plurals name="screen_room_member_list_banned_header_title">
|
||||
<item quantity="one">"%1$d Banni(e)"</item>
|
||||
<item quantity="other">"%1$d Banni(e)s"</item>
|
||||
</plurals>
|
||||
<string name="screen_room_member_list_empty_search_subtitle">"Vérifiez la saisie ou effectuez une nouvelle recherche"</string>
|
||||
<string name="screen_room_member_list_empty_search_title">"Aucun résultat pour «%1$s»"</string>
|
||||
<plurals name="screen_room_member_list_header_title">
|
||||
<item quantity="one">"%1$d personne"</item>
|
||||
<item quantity="other">"%1$d personnes"</item>
|
||||
<item quantity="one">"%1$d Personne"</item>
|
||||
<item quantity="other">"%1$d Personnes"</item>
|
||||
</plurals>
|
||||
<string name="screen_room_member_list_manage_member_remove_confirmation_ban">"Bannir du salon"</string>
|
||||
<string name="screen_room_member_list_manage_member_remove_confirmation_kick">"Retirer le membre uniquement"</string>
|
||||
@@ -82,6 +88,11 @@
|
||||
<string name="screen_room_member_list_manage_member_unban_title">"Débannir du salon"</string>
|
||||
<string name="screen_room_member_list_mode_banned">"Bannis"</string>
|
||||
<string name="screen_room_member_list_mode_members">"Membres"</string>
|
||||
<plurals name="screen_room_member_list_pending_header_title">
|
||||
<item quantity="one">"%1$d Invité(e)"</item>
|
||||
<item quantity="other">"%1$d Invité(e)s"</item>
|
||||
</plurals>
|
||||
<string name="screen_room_member_list_pending_status">"En attente"</string>
|
||||
<string name="screen_room_member_list_role_administrator">"Administrateurs"</string>
|
||||
<string name="screen_room_member_list_role_moderator">"Modérateurs"</string>
|
||||
<string name="screen_room_member_list_role_owner">"Propriétaire"</string>
|
||||
@@ -133,8 +144,8 @@ Nous ne recommandons pas d’activer le chiffrement pour les salons que tout le
|
||||
<string name="screen_security_and_privacy_room_access_invite_only_option_description">"Seules les personnes invitées peuvent rejoindre."</string>
|
||||
<string name="screen_security_and_privacy_room_access_invite_only_option_title">"Sur invitation uniquement"</string>
|
||||
<string name="screen_security_and_privacy_room_access_section_header">"Accès"</string>
|
||||
<string name="screen_security_and_privacy_room_access_space_members_option_description">"Les Espaces ne sont pas encore supportés"</string>
|
||||
<string name="screen_security_and_privacy_room_access_space_members_option_title">"Membres de l’espace"</string>
|
||||
<string name="screen_security_and_privacy_room_access_space_members_option_unavailable_description">"Les Espaces ne sont pas encore supportés"</string>
|
||||
<string name="screen_security_and_privacy_room_address_section_footer">"Vous aurez besoin d’une adresse pour le rendre visible dans l’annuaire public."</string>
|
||||
<string name="screen_security_and_privacy_room_address_section_header">"Adresse"</string>
|
||||
<string name="screen_security_and_privacy_room_directory_visibility_section_footer">"Autoriser le salon à apparaître dans les résultats de recherche dans le répertoire %1$s des salons publics"</string>
|
||||
@@ -147,6 +158,7 @@ Nous ne recommandons pas d’activer le chiffrement pour les salons que tout le
|
||||
<string name="screen_security_and_privacy_room_publishing_section_footer">"Les adresses de salon sont un moyen de trouver et d’accéder aux salons. Cela vous permet également de partager facilement votre salon avec d’autres personnes.
|
||||
Vous pouvez choisir de publier votre salon dans l’annuaire des salons publics de votre serveur d’accueil."</string>
|
||||
<string name="screen_security_and_privacy_room_publishing_section_header">"Publication du salon"</string>
|
||||
<string name="screen_security_and_privacy_room_visibility_section_footer">"Les adresses permettent de trouver et d’accéder aux salons et aux espaces. Elles facilitent également leur partage avec d’autres personnes."</string>
|
||||
<string name="screen_security_and_privacy_room_visibility_section_header">"Visibilité"</string>
|
||||
<string name="screen_security_and_privacy_title">"Sécurité & confidentialité"</string>
|
||||
</resources>
|
||||
|
||||
@@ -134,8 +134,8 @@ Nem javasoljuk a titkosítás engedélyezését az olyan szobákban, amelyeket b
|
||||
<string name="screen_security_and_privacy_room_access_invite_only_option_description">"Csak a meghívott emberek léphetnek be."</string>
|
||||
<string name="screen_security_and_privacy_room_access_invite_only_option_title">"Csak meghívásos"</string>
|
||||
<string name="screen_security_and_privacy_room_access_section_header">"Hozzáférés"</string>
|
||||
<string name="screen_security_and_privacy_room_access_space_members_option_description">"A terek jelenleg nem támogatottak"</string>
|
||||
<string name="screen_security_and_privacy_room_access_space_members_option_title">"A tér tagjai"</string>
|
||||
<string name="screen_security_and_privacy_room_access_space_members_option_unavailable_description">"A terek jelenleg nem támogatottak"</string>
|
||||
<string name="screen_security_and_privacy_room_address_section_footer">"Szüksége lesz egy szobacímre, hogy láthatóvá tegye a szobakatalógusban."</string>
|
||||
<string name="screen_security_and_privacy_room_address_section_header">"Cím"</string>
|
||||
<string name="screen_security_and_privacy_room_directory_visibility_section_footer">"A szoba megtalálhatóvá tétele a(z) %1$s nyilvános szobakatalógusában való kereséssel."</string>
|
||||
|
||||
@@ -120,8 +120,8 @@ Kami tidak menyarankan untuk mengaktifkan enkripsi untuk ruangan yang dapat dite
|
||||
<string name="screen_security_and_privacy_room_access_invite_only_option_description">"Orang hanya dapat bergabung jika mereka diundang"</string>
|
||||
<string name="screen_security_and_privacy_room_access_invite_only_option_title">"Hanya undangan"</string>
|
||||
<string name="screen_security_and_privacy_room_access_section_header">"Akses ruangan"</string>
|
||||
<string name="screen_security_and_privacy_room_access_space_members_option_description">"Space saat ini tidak didukung"</string>
|
||||
<string name="screen_security_and_privacy_room_access_space_members_option_title">"Anggota space"</string>
|
||||
<string name="screen_security_and_privacy_room_access_space_members_option_unavailable_description">"Space saat ini tidak didukung"</string>
|
||||
<string name="screen_security_and_privacy_room_address_section_footer">"Anda akan memerlukan alamat ruangan untuk membuatnya terlihat dalam direktori."</string>
|
||||
<string name="screen_security_and_privacy_room_directory_visibility_section_footer">"Izinkan ruangan ini ditemukan dengan mencari direktori ruangan %1$s publik"</string>
|
||||
<string name="screen_security_and_privacy_room_directory_visibility_toggle_title">"Terlihat di direktori ruangan publik"</string>
|
||||
|
||||
@@ -1,19 +1,21 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
|
||||
<string name="screen_edit_room_address_room_address_section_footer">"Avrai bisogno di un indirizzo della stanza per renderla visibile nell\'elenco."</string>
|
||||
<string name="screen_edit_room_address_title">"Indirizzo della stanza"</string>
|
||||
<string name="screen_edit_room_address_room_address_section_footer">"Per renderlo visibile nell\'elenco pubblico, avrai bisogno di un indirizzo."</string>
|
||||
<string name="screen_edit_room_address_title">"Modifica indirizzo"</string>
|
||||
<string name="screen_notification_settings_edit_failed_updating_default_mode">"Si è verificato un errore durante l\'aggiornamento delle impostazioni di notifica."</string>
|
||||
<string name="screen_notification_settings_mentions_only_disclaimer">"Il tuo homeserver non supporta questa opzione nelle stanze crifrate, quindi potresti non ricevere notifiche in alcune stanze."</string>
|
||||
<string name="screen_polls_history_title">"Sondaggi"</string>
|
||||
<string name="screen_room_change_permissions_administrators">"Solo amministratori"</string>
|
||||
<string name="screen_room_change_permissions_administrators">"Amministratore"</string>
|
||||
<string name="screen_room_change_permissions_ban_people">"Escludi membri"</string>
|
||||
<string name="screen_room_change_permissions_delete_messages">"Rimuovi messaggi"</string>
|
||||
<string name="screen_room_change_permissions_invite_people">"Invita persone e accetta richieste di partecipazione"</string>
|
||||
<string name="screen_room_change_permissions_everyone">"Membro"</string>
|
||||
<string name="screen_room_change_permissions_invite_people">"Invita persone"</string>
|
||||
<string name="screen_room_change_permissions_member_moderation">"Gestisci membri"</string>
|
||||
<string name="screen_room_change_permissions_messages_and_content">"Messaggi e contenuti"</string>
|
||||
<string name="screen_room_change_permissions_moderators">"Amministratori e moderatori"</string>
|
||||
<string name="screen_room_change_permissions_remove_people">"Rimuovi le persone e rifiuta le richieste di partecipazione"</string>
|
||||
<string name="screen_room_change_permissions_moderators">"Moderatore"</string>
|
||||
<string name="screen_room_change_permissions_remove_people">"Rimuovi membri"</string>
|
||||
<string name="screen_room_change_permissions_room_avatar">"Cambia avatar della stanza"</string>
|
||||
<string name="screen_room_change_permissions_room_details">"Modifica stanza"</string>
|
||||
<string name="screen_room_change_permissions_room_details">"Modifica dettagli"</string>
|
||||
<string name="screen_room_change_permissions_room_name">"Cambia il nome della stanza"</string>
|
||||
<string name="screen_room_change_permissions_room_topic">"Cambiare l\'argomento della stanza"</string>
|
||||
<string name="screen_room_change_permissions_send_messages">"Inviare messaggi"</string>
|
||||
@@ -40,7 +42,7 @@
|
||||
<string name="screen_room_details_badge_encrypted">"Cifrata"</string>
|
||||
<string name="screen_room_details_badge_not_encrypted">"Non cifrata"</string>
|
||||
<string name="screen_room_details_badge_public">"Stanza pubblica"</string>
|
||||
<string name="screen_room_details_edit_room_title">"Modifica stanza"</string>
|
||||
<string name="screen_room_details_edit_room_title">"Modifica dettagli"</string>
|
||||
<string name="screen_room_details_edition_error">"Si è verificato un errore sconosciuto e non è stato possibile modificare le informazioni."</string>
|
||||
<string name="screen_room_details_edition_error_title">"Impossibile aggiornare la stanza"</string>
|
||||
<string name="screen_room_details_encryption_enabled_subtitle">"I messaggi sono protetti da lucchetti. Solo tu e i destinatari avete le chiavi univoche per sbloccarli."</string>
|
||||
@@ -48,6 +50,8 @@
|
||||
<string name="screen_room_details_error_loading_notification_settings">"Si è verificato un errore durante il caricamento delle impostazioni di notifica."</string>
|
||||
<string name="screen_room_details_error_muting">"Impostazione del silenzioso fallita per questa stanza, riprova."</string>
|
||||
<string name="screen_room_details_error_unmuting">"Disattivazione del silenzioso di questa stanza fallita, riprova."</string>
|
||||
<string name="screen_room_details_invite_people_dont_close">"Non chiudere l\'app fino al completamento."</string>
|
||||
<string name="screen_room_details_invite_people_preparing">"Preparazione degli inviti…"</string>
|
||||
<string name="screen_room_details_invite_people_title">"Invita persone"</string>
|
||||
<string name="screen_room_details_leave_conversation_title">"Abbandona la conversazione"</string>
|
||||
<string name="screen_room_details_leave_room_title">"Esci dalla stanza"</string>
|
||||
@@ -66,10 +70,16 @@
|
||||
<string name="screen_room_details_title">"Informazioni sulla stanza"</string>
|
||||
<string name="screen_room_details_topic_title">"Argomento"</string>
|
||||
<string name="screen_room_details_updating_room">"Aggiornamento della stanza…"</string>
|
||||
<string name="screen_room_member_list_banned_empty">"Non ci sono utenti esclusi in questa stanza."</string>
|
||||
<string name="screen_room_member_list_banned_empty">"Non ci sono utenti bannati."</string>
|
||||
<plurals name="screen_room_member_list_banned_header_title">
|
||||
<item quantity="one">"%1$d Bannato"</item>
|
||||
<item quantity="other">"%1$d Bannati"</item>
|
||||
</plurals>
|
||||
<string name="screen_room_member_list_empty_search_subtitle">"Controlla l\'ortografia o prova una nuova ricerca"</string>
|
||||
<string name="screen_room_member_list_empty_search_title">"Nessun risultato per “%1$s ”"</string>
|
||||
<plurals name="screen_room_member_list_header_title">
|
||||
<item quantity="one">"%1$d persona"</item>
|
||||
<item quantity="other">"%1$d persone"</item>
|
||||
<item quantity="one">"%1$d Persona"</item>
|
||||
<item quantity="other">"%1$d Persone"</item>
|
||||
</plurals>
|
||||
<string name="screen_room_member_list_manage_member_remove_confirmation_ban">"Rimuovi ed escludi"</string>
|
||||
<string name="screen_room_member_list_manage_member_remove_confirmation_kick">"Rimuovi soltanto"</string>
|
||||
@@ -78,8 +88,13 @@
|
||||
<string name="screen_room_member_list_manage_member_unban_title">"Riammetti nella stanza"</string>
|
||||
<string name="screen_room_member_list_mode_banned">"Esclusi"</string>
|
||||
<string name="screen_room_member_list_mode_members">"Membri"</string>
|
||||
<string name="screen_room_member_list_role_administrator">"Solo amministratori"</string>
|
||||
<string name="screen_room_member_list_role_moderator">"Amministratori e moderatori"</string>
|
||||
<plurals name="screen_room_member_list_pending_header_title">
|
||||
<item quantity="one">"%1$d Invitato"</item>
|
||||
<item quantity="other">"%1$d Invitati"</item>
|
||||
</plurals>
|
||||
<string name="screen_room_member_list_pending_status">"In attesa"</string>
|
||||
<string name="screen_room_member_list_role_administrator">"Amministratore"</string>
|
||||
<string name="screen_room_member_list_role_moderator">"Moderatore"</string>
|
||||
<string name="screen_room_member_list_role_owner">"Proprietario"</string>
|
||||
<string name="screen_room_member_list_room_members_header_title">"Membri della stanza"</string>
|
||||
<string name="screen_room_member_list_unbanning_user">"Riammissione di %1$s"</string>
|
||||
@@ -106,14 +121,15 @@
|
||||
<string name="screen_room_roles_and_permissions_messages_and_content">"Messaggi e contenuti"</string>
|
||||
<string name="screen_room_roles_and_permissions_moderators">"Moderatori"</string>
|
||||
<string name="screen_room_roles_and_permissions_owners">"Proprietari"</string>
|
||||
<string name="screen_room_roles_and_permissions_permissions_header">"Autorizzazioni"</string>
|
||||
<string name="screen_room_roles_and_permissions_reset">"Reimpostare le autorizzazioni"</string>
|
||||
<string name="screen_room_roles_and_permissions_reset_confirm_description">"Una volta reimpostate le autorizzazioni, perderai le impostazioni correnti."</string>
|
||||
<string name="screen_room_roles_and_permissions_reset_confirm_title">"Reimpostare autorizzazioni?"</string>
|
||||
<string name="screen_room_roles_and_permissions_roles_header">"Ruoli"</string>
|
||||
<string name="screen_room_roles_and_permissions_room_details">"Dettagli della stanza"</string>
|
||||
<string name="screen_room_roles_and_permissions_title">"Ruoli e autorizzazioni"</string>
|
||||
<string name="screen_security_and_privacy_add_room_address_action">"Aggiungi l\'indirizzo della stanza"</string>
|
||||
<string name="screen_security_and_privacy_ask_to_join_option_description">"Chiunque può chiedere di entrare nella stanza, ma un amministratore o un moderatore dovrà accettare la richiesta."</string>
|
||||
<string name="screen_security_and_privacy_add_room_address_action">"Aggiungi indirizzo"</string>
|
||||
<string name="screen_security_and_privacy_ask_to_join_option_description">"Chiunque deve richiedere l\'accesso."</string>
|
||||
<string name="screen_security_and_privacy_ask_to_join_option_title">"Chiedi di entrare"</string>
|
||||
<string name="screen_security_and_privacy_enable_encryption_alert_confirm_button_title">"Sì, attiva la crittografia"</string>
|
||||
<string name="screen_security_and_privacy_enable_encryption_alert_description">"Una volta attivata, la crittografia di una stanza non può essere disattivata, la cronologia dei messaggi sarà visibile solo ai membri della stanza da quando sono stati invitati o da quando sono entrati nella stanza.
|
||||
@@ -123,17 +139,18 @@ Non consigliamo di attivare la crittografia per le stanze che chiunque può trov
|
||||
<string name="screen_security_and_privacy_encryption_section_footer">"Una volta attivata, la crittografia non può essere disattivata."</string>
|
||||
<string name="screen_security_and_privacy_encryption_section_header">"Crittografia"</string>
|
||||
<string name="screen_security_and_privacy_encryption_toggle_title">"Attiva la crittografia end-to-end"</string>
|
||||
<string name="screen_security_and_privacy_room_access_anyone_option_description">"Chiunque può trovare ed entrare"</string>
|
||||
<string name="screen_security_and_privacy_room_access_anyone_option_description">"Chiunque può partecipare."</string>
|
||||
<string name="screen_security_and_privacy_room_access_anyone_option_title">"Chiunque"</string>
|
||||
<string name="screen_security_and_privacy_room_access_invite_only_option_description">"Le persone possono partecipare solo se invitate"</string>
|
||||
<string name="screen_security_and_privacy_room_access_invite_only_option_description">"Solo le persone invitate possono entrare."</string>
|
||||
<string name="screen_security_and_privacy_room_access_invite_only_option_title">"Solo su invito"</string>
|
||||
<string name="screen_security_and_privacy_room_access_section_header">"Accesso alla stanza"</string>
|
||||
<string name="screen_security_and_privacy_room_access_space_members_option_description">"Gli spazi non sono attualmente supportati"</string>
|
||||
<string name="screen_security_and_privacy_room_access_section_header">"Accesso"</string>
|
||||
<string name="screen_security_and_privacy_room_access_space_members_option_title">"Membri dello spazio"</string>
|
||||
<string name="screen_security_and_privacy_room_address_section_footer">"Avrai bisogno di un indirizzo della stanza per renderla visibile nell\'elenco."</string>
|
||||
<string name="screen_security_and_privacy_room_address_section_header">"Indirizzo della stanza"</string>
|
||||
<string name="screen_security_and_privacy_room_access_space_members_option_unavailable_description">"Gli spazi non sono attualmente supportati"</string>
|
||||
<string name="screen_security_and_privacy_room_address_section_footer">"Per renderlo visibile nell\'elenco pubblico, avrai bisogno di un indirizzo."</string>
|
||||
<string name="screen_security_and_privacy_room_address_section_header">"Indirizzo"</string>
|
||||
<string name="screen_security_and_privacy_room_directory_visibility_section_footer">"Consenti la ricerca di questa stanza effettuando una ricerca nell\'elenco delle stanze pubbliche di %1$s"</string>
|
||||
<string name="screen_security_and_privacy_room_directory_visibility_toggle_title">"Visibile nell\'elenco delle stanze pubbliche"</string>
|
||||
<string name="screen_security_and_privacy_room_directory_visibility_toggle_description">"Consenti di essere trovato effettuando una ricerca nell\'elenco pubblico."</string>
|
||||
<string name="screen_security_and_privacy_room_directory_visibility_toggle_title">"Visibile nell\'elenco pubblico"</string>
|
||||
<string name="screen_security_and_privacy_room_history_anyone_option_title">"Chiunque"</string>
|
||||
<string name="screen_security_and_privacy_room_history_section_header">"Chi può leggere la cronologia messaggi"</string>
|
||||
<string name="screen_security_and_privacy_room_history_since_invite_option_title">"Solo membri da quando sono stati invitati"</string>
|
||||
@@ -141,6 +158,7 @@ Non consigliamo di attivare la crittografia per le stanze che chiunque può trov
|
||||
<string name="screen_security_and_privacy_room_publishing_section_footer">"Gli indirizzi delle stanze sono modi per trovare e accedervi. In questo modo puoi anche condividere facilmente la tua stanze con altri.
|
||||
Puoi scegliere di pubblicare la tua stanza nell\'elenco delle stanza pubbliche dell\'homeserver."</string>
|
||||
<string name="screen_security_and_privacy_room_publishing_section_header">"Pubblicazione della stanza"</string>
|
||||
<string name="screen_security_and_privacy_room_visibility_section_header">"Visibilità della stanza"</string>
|
||||
<string name="screen_security_and_privacy_room_visibility_section_footer">"Gli indirizzi sono un modo per trovare e accedere a stanze e spazi. Questo ti consente anche di condividerli facilmente con altri."</string>
|
||||
<string name="screen_security_and_privacy_room_visibility_section_header">"Visibilità"</string>
|
||||
<string name="screen_security_and_privacy_title">"Sicurezza e privacy"</string>
|
||||
</resources>
|
||||
|
||||
@@ -127,8 +127,8 @@
|
||||
<string name="screen_security_and_privacy_room_access_invite_only_option_description">"초대받은 사용자만 가입할 수 있습니다."</string>
|
||||
<string name="screen_security_and_privacy_room_access_invite_only_option_title">"초대 전용"</string>
|
||||
<string name="screen_security_and_privacy_room_access_section_header">"방 액세스"</string>
|
||||
<string name="screen_security_and_privacy_room_access_space_members_option_description">"스페이스는 현재 지원되지 않습니다"</string>
|
||||
<string name="screen_security_and_privacy_room_access_space_members_option_title">"스페이스 멤버들"</string>
|
||||
<string name="screen_security_and_privacy_room_access_space_members_option_unavailable_description">"스페이스는 현재 지원되지 않습니다"</string>
|
||||
<string name="screen_security_and_privacy_room_address_section_footer">"디렉토리에 표시하려면 방 주소가 필요합니다."</string>
|
||||
<string name="screen_security_and_privacy_room_directory_visibility_section_footer">"%1$s 공개 방 디렉토리에서 이 방을 검색할 수 있도록 허용합니다"</string>
|
||||
<string name="screen_security_and_privacy_room_directory_visibility_toggle_title">"공개 룸 디렉토리에 표시됨"</string>
|
||||
|
||||
@@ -130,8 +130,8 @@ Vi anbefaler ikke å aktivere kryptering for rom som hvem som helst kan finne og
|
||||
<string name="screen_security_and_privacy_room_access_invite_only_option_description">"Folk kan bare bli med hvis de er invitert"</string>
|
||||
<string name="screen_security_and_privacy_room_access_invite_only_option_title">"Kun for inviterte"</string>
|
||||
<string name="screen_security_and_privacy_room_access_section_header">"Tilgang til rom"</string>
|
||||
<string name="screen_security_and_privacy_room_access_space_members_option_description">"Områder støttes ikke for øyeblikket"</string>
|
||||
<string name="screen_security_and_privacy_room_access_space_members_option_title">"Medlemmer av område"</string>
|
||||
<string name="screen_security_and_privacy_room_access_space_members_option_unavailable_description">"Områder støttes ikke for øyeblikket"</string>
|
||||
<string name="screen_security_and_privacy_room_address_section_footer">"Du trenger en adresse til rommet for å gjøre det synlig i katalogen."</string>
|
||||
<string name="screen_security_and_privacy_room_directory_visibility_section_footer">"Tillat at dette rommet blir funnet ved å søke %1$s offentlig romkatalog"</string>
|
||||
<string name="screen_security_and_privacy_room_directory_visibility_toggle_title">"Synlig i offentlig romkatalog"</string>
|
||||
|
||||
@@ -131,8 +131,8 @@ Odradzamy włączanie szyfrowania dla pokoi, które każdy może znaleźć i do
|
||||
<string name="screen_security_and_privacy_room_access_invite_only_option_description">"Tylko osoby z zaproszeniem mogą dołączyć"</string>
|
||||
<string name="screen_security_and_privacy_room_access_invite_only_option_title">"Tylko zaproszenie"</string>
|
||||
<string name="screen_security_and_privacy_room_access_section_header">"Dostęp do pokoju"</string>
|
||||
<string name="screen_security_and_privacy_room_access_space_members_option_description">"Przestrzenie nie są obecnie wspierane"</string>
|
||||
<string name="screen_security_and_privacy_room_access_space_members_option_title">"Członkowie przestrzeni"</string>
|
||||
<string name="screen_security_and_privacy_room_access_space_members_option_unavailable_description">"Przestrzenie nie są obecnie wspierane"</string>
|
||||
<string name="screen_security_and_privacy_room_address_section_footer">"Aby pokój był widoczny w katalogu, potrzebny jest adres pokoju."</string>
|
||||
<string name="screen_security_and_privacy_room_address_section_header">"Adres pokoju"</string>
|
||||
<string name="screen_security_and_privacy_room_directory_visibility_section_footer">"Zezwól na znalezienie tego pokoju wyszukując %1$s w katalogu pokoi publicznych"</string>
|
||||
|
||||
@@ -1,19 +1,21 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
|
||||
<string name="screen_edit_room_address_room_address_section_footer">"Você precisará de um endereço de sala para torná-la visível no diretório."</string>
|
||||
<string name="screen_edit_room_address_title">"Endereço da sala"</string>
|
||||
<string name="screen_edit_room_address_room_address_section_footer">"Você precisará de um endereço para torná-la visível no diretório."</string>
|
||||
<string name="screen_edit_room_address_title">"Editar endereço"</string>
|
||||
<string name="screen_notification_settings_edit_failed_updating_default_mode">"Ocorreu um erro ao atualizar a configuração de notificação."</string>
|
||||
<string name="screen_notification_settings_mentions_only_disclaimer">"Seu servidor-casa não suporta esta opção em salas criptografadas. Você pode não ser notificado em algumas salas."</string>
|
||||
<string name="screen_polls_history_title">"Enquetes"</string>
|
||||
<string name="screen_room_change_permissions_administrators">"Somente administradores"</string>
|
||||
<string name="screen_room_change_permissions_administrators">"Administradores"</string>
|
||||
<string name="screen_room_change_permissions_ban_people">"Banir pessoas"</string>
|
||||
<string name="screen_room_change_permissions_delete_messages">"Remover mensagens"</string>
|
||||
<string name="screen_room_change_permissions_invite_people">"Convide pessoas e aceite solicitações de entrada"</string>
|
||||
<string name="screen_room_change_permissions_everyone">"Membro"</string>
|
||||
<string name="screen_room_change_permissions_invite_people">"Convidar pessoas"</string>
|
||||
<string name="screen_room_change_permissions_member_moderation">"Gerenciar membros"</string>
|
||||
<string name="screen_room_change_permissions_messages_and_content">"Mensagens e conteúdo"</string>
|
||||
<string name="screen_room_change_permissions_moderators">"Administradores e moderadores"</string>
|
||||
<string name="screen_room_change_permissions_remove_people">"Remover pessoas e recusar solicitações de entrada"</string>
|
||||
<string name="screen_room_change_permissions_moderators">"Moderador"</string>
|
||||
<string name="screen_room_change_permissions_remove_people">"Remover pessoas"</string>
|
||||
<string name="screen_room_change_permissions_room_avatar">"Alterar avatar da sala"</string>
|
||||
<string name="screen_room_change_permissions_room_details">"Editar sala"</string>
|
||||
<string name="screen_room_change_permissions_room_details">"Editar detalhes"</string>
|
||||
<string name="screen_room_change_permissions_room_name">"Alterar nome da sala"</string>
|
||||
<string name="screen_room_change_permissions_room_topic">"Alterar tópico da sala"</string>
|
||||
<string name="screen_room_change_permissions_send_messages">"Enviar mensagens"</string>
|
||||
@@ -40,7 +42,7 @@
|
||||
<string name="screen_room_details_badge_encrypted">"Criptografado"</string>
|
||||
<string name="screen_room_details_badge_not_encrypted">"Não criptografado"</string>
|
||||
<string name="screen_room_details_badge_public">"Sala pública"</string>
|
||||
<string name="screen_room_details_edit_room_title">"Editar sala"</string>
|
||||
<string name="screen_room_details_edit_room_title">"Editar detalhes"</string>
|
||||
<string name="screen_room_details_edition_error">"Ocorreu um erro desconhecido e as informações não puderam ser alteradas."</string>
|
||||
<string name="screen_room_details_edition_error_title">"Não foi possível atualizar a sala"</string>
|
||||
<string name="screen_room_details_encryption_enabled_subtitle">"As mensagens são protegidas com cadeados. Somente você e os destinatários têm as chaves exclusivas para desbloqueá-los."</string>
|
||||
@@ -48,6 +50,8 @@
|
||||
<string name="screen_room_details_error_loading_notification_settings">"Ocorreu um erro ao carregar as configurações de notificação."</string>
|
||||
<string name="screen_room_details_error_muting">"Falha ao silenciar esta sala, tente novamente."</string>
|
||||
<string name="screen_room_details_error_unmuting">"Falha ao desilenciar esta sala. Tente novamente."</string>
|
||||
<string name="screen_room_details_invite_people_dont_close">"Não feche o aplicativo até terminar."</string>
|
||||
<string name="screen_room_details_invite_people_preparing">"Preparando convites…"</string>
|
||||
<string name="screen_room_details_invite_people_title">"Convidar pessoas"</string>
|
||||
<string name="screen_room_details_leave_conversation_title">"Sair da conversa"</string>
|
||||
<string name="screen_room_details_leave_room_title">"Sair da sala"</string>
|
||||
@@ -66,7 +70,13 @@
|
||||
<string name="screen_room_details_title">"Informação da sala"</string>
|
||||
<string name="screen_room_details_topic_title">"Tópico"</string>
|
||||
<string name="screen_room_details_updating_room">"Atualizando a sala…"</string>
|
||||
<string name="screen_room_member_list_banned_empty">"Não há usuários banidos nesta sala."</string>
|
||||
<string name="screen_room_member_list_banned_empty">"Não há usuários banidos."</string>
|
||||
<plurals name="screen_room_member_list_banned_header_title">
|
||||
<item quantity="one">"%1$d banido"</item>
|
||||
<item quantity="other">"%1$d banidos"</item>
|
||||
</plurals>
|
||||
<string name="screen_room_member_list_empty_search_subtitle">"Confira a ortografia ou tente uma nova busca"</string>
|
||||
<string name="screen_room_member_list_empty_search_title">"Nenhum resultado para “%1$s”"</string>
|
||||
<plurals name="screen_room_member_list_header_title">
|
||||
<item quantity="one">"%1$d pessoa"</item>
|
||||
<item quantity="other">"%1$d pessoas"</item>
|
||||
@@ -78,8 +88,13 @@
|
||||
<string name="screen_room_member_list_manage_member_unban_title">"Desbanir da sala"</string>
|
||||
<string name="screen_room_member_list_mode_banned">"Banidos"</string>
|
||||
<string name="screen_room_member_list_mode_members">"Membros"</string>
|
||||
<string name="screen_room_member_list_role_administrator">"Somente administradores"</string>
|
||||
<string name="screen_room_member_list_role_moderator">"Administradores e moderadores"</string>
|
||||
<plurals name="screen_room_member_list_pending_header_title">
|
||||
<item quantity="one">"%1$d convidado"</item>
|
||||
<item quantity="other">"%1$d convidados"</item>
|
||||
</plurals>
|
||||
<string name="screen_room_member_list_pending_status">"Pendente"</string>
|
||||
<string name="screen_room_member_list_role_administrator">"Administradores"</string>
|
||||
<string name="screen_room_member_list_role_moderator">"Moderador"</string>
|
||||
<string name="screen_room_member_list_role_owner">"Proprietário"</string>
|
||||
<string name="screen_room_member_list_room_members_header_title">"Membros da sala"</string>
|
||||
<string name="screen_room_member_list_unbanning_user">"Desbanindo %1$s"</string>
|
||||
@@ -106,14 +121,15 @@
|
||||
<string name="screen_room_roles_and_permissions_messages_and_content">"Mensagens e conteúdo"</string>
|
||||
<string name="screen_room_roles_and_permissions_moderators">"Moderadores"</string>
|
||||
<string name="screen_room_roles_and_permissions_owners">"Proprietários"</string>
|
||||
<string name="screen_room_roles_and_permissions_permissions_header">"Permissões"</string>
|
||||
<string name="screen_room_roles_and_permissions_reset">"Redefinir permissões"</string>
|
||||
<string name="screen_room_roles_and_permissions_reset_confirm_description">"Depois de redefinir as permissões, você perderá as configurações atuais."</string>
|
||||
<string name="screen_room_roles_and_permissions_reset_confirm_title">"Redefinir permissões?"</string>
|
||||
<string name="screen_room_roles_and_permissions_roles_header">"Cargos"</string>
|
||||
<string name="screen_room_roles_and_permissions_room_details">"Detalhes da sala"</string>
|
||||
<string name="screen_room_roles_and_permissions_title">"Cargos e permissões"</string>
|
||||
<string name="screen_security_and_privacy_add_room_address_action">"Adicionar endereço da sala"</string>
|
||||
<string name="screen_security_and_privacy_ask_to_join_option_description">"Qualquer pessoa pode pedir para entrar na sala, mas um administrador ou moderador terá que aceitar o pedido."</string>
|
||||
<string name="screen_security_and_privacy_add_room_address_action">"Adicionar endereço"</string>
|
||||
<string name="screen_security_and_privacy_ask_to_join_option_description">"Qualquer um pode pedir acesso, mas um administrador terá que aceitar o pedido."</string>
|
||||
<string name="screen_security_and_privacy_ask_to_join_option_title">"Pedir para entrar"</string>
|
||||
<string name="screen_security_and_privacy_enable_encryption_alert_confirm_button_title">"Sim, ativar a criptografia"</string>
|
||||
<string name="screen_security_and_privacy_enable_encryption_alert_description">"Uma vez ativada, a criptografia de uma sala não pode ser desativada. O histórico de mensagens só será visível para os membros da sala desde que foram convidados ou desde que entraram na sala.
|
||||
@@ -123,16 +139,18 @@ Não recomendamos que você ative a criptografia para salas que qualquer pessoa
|
||||
<string name="screen_security_and_privacy_encryption_section_footer">"Uma vez ativada, a criptografia não poderá ser desativada."</string>
|
||||
<string name="screen_security_and_privacy_encryption_section_header">"Criptografia"</string>
|
||||
<string name="screen_security_and_privacy_encryption_toggle_title">"Ativar a criptografia de ponta a ponta"</string>
|
||||
<string name="screen_security_and_privacy_room_access_anyone_option_description">"Qualquer um pode encontrar e entrar"</string>
|
||||
<string name="screen_security_and_privacy_room_access_anyone_option_description">"Qualquer um pode entrar"</string>
|
||||
<string name="screen_security_and_privacy_room_access_anyone_option_title">"Qualquer pessoa"</string>
|
||||
<string name="screen_security_and_privacy_room_access_invite_only_option_description">"As pessoas só podem participar se forem convidadas"</string>
|
||||
<string name="screen_security_and_privacy_room_access_invite_only_option_title">"Somente para convidados"</string>
|
||||
<string name="screen_security_and_privacy_room_access_section_header">"Acesso à sala"</string>
|
||||
<string name="screen_security_and_privacy_room_access_space_members_option_description">"No momento, não há suporte aos espaços"</string>
|
||||
<string name="screen_security_and_privacy_room_access_invite_only_option_description">"Apenas pessoas convidadas podem entrar."</string>
|
||||
<string name="screen_security_and_privacy_room_access_invite_only_option_title">"Privado"</string>
|
||||
<string name="screen_security_and_privacy_room_access_section_header">"Acesso"</string>
|
||||
<string name="screen_security_and_privacy_room_access_space_members_option_title">"Membros do espaço"</string>
|
||||
<string name="screen_security_and_privacy_room_address_section_footer">"Você precisará de um endereço de sala para torná-la visível no diretório."</string>
|
||||
<string name="screen_security_and_privacy_room_access_space_members_option_unavailable_description">"No momento, não há suporte aos espaços"</string>
|
||||
<string name="screen_security_and_privacy_room_address_section_footer">"Você precisará de um endereço para torná-la visível no diretório."</string>
|
||||
<string name="screen_security_and_privacy_room_address_section_header">"Endereço publicado"</string>
|
||||
<string name="screen_security_and_privacy_room_directory_visibility_section_footer">"Permitir que esta sala seja encontrada pesquisando diretório de salas públicas de %1$s"</string>
|
||||
<string name="screen_security_and_privacy_room_directory_visibility_toggle_title">"Visível no diretório de salas públicas"</string>
|
||||
<string name="screen_security_and_privacy_room_directory_visibility_toggle_description">"Permite que seja encontrada ao buscar no diretório público."</string>
|
||||
<string name="screen_security_and_privacy_room_directory_visibility_toggle_title">"Visível no diretório público"</string>
|
||||
<string name="screen_security_and_privacy_room_history_anyone_option_title">"Qualquer pessoa"</string>
|
||||
<string name="screen_security_and_privacy_room_history_section_header">"Quem pode ler o histórico"</string>
|
||||
<string name="screen_security_and_privacy_room_history_since_invite_option_title">"Somente membros, desde que foram convidados"</string>
|
||||
@@ -140,5 +158,7 @@ Não recomendamos que você ative a criptografia para salas que qualquer pessoa
|
||||
<string name="screen_security_and_privacy_room_publishing_section_footer">"Os endereços das salas são formas de encontrar e acessar as salas. Isso também garante que você possa compartilhar facilmente sua sala com outras pessoas.
|
||||
Você pode optar por publicar sua sala no diretório público de salas do seu servidor-casa."</string>
|
||||
<string name="screen_security_and_privacy_room_publishing_section_header">"Publicação da sala"</string>
|
||||
<string name="screen_security_and_privacy_room_visibility_section_footer">"Os endereços das salas são formas de encontrar e acessar as salas. Isso também garante que você possa compartilhá-las facilmente com outras pessoas."</string>
|
||||
<string name="screen_security_and_privacy_room_visibility_section_header">"Visibilidade"</string>
|
||||
<string name="screen_security_and_privacy_title">"Segurança e privacidade"</string>
|
||||
</resources>
|
||||
|
||||
@@ -130,8 +130,8 @@ Não recomendamos ativar a cifragem em salas que qualquer pessoa possa encontrar
|
||||
<string name="screen_security_and_privacy_room_access_invite_only_option_description">"Só é possível entrar tendo um convite"</string>
|
||||
<string name="screen_security_and_privacy_room_access_invite_only_option_title">"Apenas por convite"</string>
|
||||
<string name="screen_security_and_privacy_room_access_section_header">"Acesso à sala"</string>
|
||||
<string name="screen_security_and_privacy_room_access_space_members_option_description">"Os espaços ainda não estão implementados"</string>
|
||||
<string name="screen_security_and_privacy_room_access_space_members_option_title">"Membros do espaço"</string>
|
||||
<string name="screen_security_and_privacy_room_access_space_members_option_unavailable_description">"Os espaços ainda não estão implementados"</string>
|
||||
<string name="screen_security_and_privacy_room_address_section_footer">"É necessário um endereço para tornar a sala visível no diretório."</string>
|
||||
<string name="screen_security_and_privacy_room_address_section_header">"Endereço da sala"</string>
|
||||
<string name="screen_security_and_privacy_room_directory_visibility_section_footer">"Permite que esta sala seja encontrada através do diretório público do %1$s."</string>
|
||||
|
||||
@@ -130,8 +130,8 @@ Nu recomandăm activarea criptării pentru camerele pe care oricine le poate gă
|
||||
<string name="screen_security_and_privacy_room_access_invite_only_option_description">"Persoanele se pot alătura numai dacă invitate"</string>
|
||||
<string name="screen_security_and_privacy_room_access_invite_only_option_title">"Doar pe bază de invitație"</string>
|
||||
<string name="screen_security_and_privacy_room_access_section_header">"Acces la cameră"</string>
|
||||
<string name="screen_security_and_privacy_room_access_space_members_option_description">"Spațiile nu sunt momentan suportate."</string>
|
||||
<string name="screen_security_and_privacy_room_access_space_members_option_title">"Membrii spațiului"</string>
|
||||
<string name="screen_security_and_privacy_room_access_space_members_option_unavailable_description">"Spațiile nu sunt momentan suportate."</string>
|
||||
<string name="screen_security_and_privacy_room_address_section_footer">"Veți avea nevoie de o adresă de cameră pentru a o face vizibilă în director."</string>
|
||||
<string name="screen_security_and_privacy_room_directory_visibility_section_footer">"Permiteți găsirea acestei camere prin căutarea în directorul de camere publice al %1$s"</string>
|
||||
<string name="screen_security_and_privacy_room_directory_visibility_toggle_title">"Vizibilă în directorul de camere publice"</string>
|
||||
|
||||
@@ -137,8 +137,8 @@
|
||||
<string name="screen_security_and_privacy_room_access_invite_only_option_description">"Присоединиться могут только приглашенные люди."</string>
|
||||
<string name="screen_security_and_privacy_room_access_invite_only_option_title">"Только по приглашению"</string>
|
||||
<string name="screen_security_and_privacy_room_access_section_header">"Доступ"</string>
|
||||
<string name="screen_security_and_privacy_room_access_space_members_option_description">"Пространства в настоящее время не поддерживаются."</string>
|
||||
<string name="screen_security_and_privacy_room_access_space_members_option_title">"Участники пространства"</string>
|
||||
<string name="screen_security_and_privacy_room_access_space_members_option_unavailable_description">"Пространства в настоящее время не поддерживаются."</string>
|
||||
<string name="screen_security_and_privacy_room_address_section_footer">"Вам понадобится адрес комнаты, чтобы сделать ее видимой в каталоге."</string>
|
||||
<string name="screen_security_and_privacy_room_address_section_header">"Адрес"</string>
|
||||
<string name="screen_security_and_privacy_room_directory_visibility_section_footer">"Опубликовать %1$s в каталоге публичных комнат"</string>
|
||||
|
||||
@@ -131,8 +131,8 @@ To môže brániť správnemu fungovaniu robotov a premostení. Neodporúčame p
|
||||
<string name="screen_security_and_privacy_room_access_invite_only_option_description">"Ľudia sa môžu pripojiť len vtedy, ak sú pozvaní"</string>
|
||||
<string name="screen_security_and_privacy_room_access_invite_only_option_title">"Iba na pozvánku"</string>
|
||||
<string name="screen_security_and_privacy_room_access_section_header">"Prístup do miestnosti"</string>
|
||||
<string name="screen_security_and_privacy_room_access_space_members_option_description">"Priestory momentálne nie sú podporované"</string>
|
||||
<string name="screen_security_and_privacy_room_access_space_members_option_title">"Členovia priestoru"</string>
|
||||
<string name="screen_security_and_privacy_room_access_space_members_option_unavailable_description">"Priestory momentálne nie sú podporované"</string>
|
||||
<string name="screen_security_and_privacy_room_address_section_footer">"Budete potrebovať adresu miestnosti, aby bola viditeľná v adresári."</string>
|
||||
<string name="screen_security_and_privacy_room_address_section_header">"Adresa miestnosti"</string>
|
||||
<string name="screen_security_and_privacy_room_directory_visibility_section_footer">"Umožniť vyhľadanie tejto miestnosti v adresári verejných miestností %1$s"</string>
|
||||
|
||||
@@ -128,8 +128,8 @@ Vi rekommenderar inte att aktivera kryptering för rum som vem som helst kan hit
|
||||
<string name="screen_security_and_privacy_room_access_invite_only_option_description">"Användare kan bara gå med om de är inbjudna"</string>
|
||||
<string name="screen_security_and_privacy_room_access_invite_only_option_title">"Endast inbjudan"</string>
|
||||
<string name="screen_security_and_privacy_room_access_section_header">"Tillgång till rum"</string>
|
||||
<string name="screen_security_and_privacy_room_access_space_members_option_description">"Utrymmen stöds för närvarande inte"</string>
|
||||
<string name="screen_security_and_privacy_room_access_space_members_option_title">"Utrymmesmedlemmar"</string>
|
||||
<string name="screen_security_and_privacy_room_access_space_members_option_unavailable_description">"Utrymmen stöds för närvarande inte"</string>
|
||||
<string name="screen_security_and_privacy_room_address_section_footer">"Du behöver en rumsadress för att göra den synlig i katalogen."</string>
|
||||
<string name="screen_security_and_privacy_room_directory_visibility_section_footer">"Tillåt att detta rum hittas genom att söka i den offentliga rumskatalogen på %1$s"</string>
|
||||
<string name="screen_security_and_privacy_room_directory_visibility_toggle_title">"Synlig i katalogen för offentliga rum"</string>
|
||||
|
||||
@@ -120,8 +120,8 @@ Herkesin bulabileceği ve katılabileceği odalar için şifrelemenin etkinleşt
|
||||
<string name="screen_security_and_privacy_room_access_invite_only_option_description">"İnsanlar yalnızca davet edildiklerinde katılabilirler"</string>
|
||||
<string name="screen_security_and_privacy_room_access_invite_only_option_title">"Yalnızca davet"</string>
|
||||
<string name="screen_security_and_privacy_room_access_section_header">"Oda Erişimi"</string>
|
||||
<string name="screen_security_and_privacy_room_access_space_members_option_description">"Alanlar şu anda desteklenmiyor"</string>
|
||||
<string name="screen_security_and_privacy_room_access_space_members_option_title">"Alan üyeleri"</string>
|
||||
<string name="screen_security_and_privacy_room_access_space_members_option_unavailable_description">"Alanlar şu anda desteklenmiyor"</string>
|
||||
<string name="screen_security_and_privacy_room_address_section_footer">"Dizinde görünür hale getirmek için bir oda adresine ihtiyacınız olacak."</string>
|
||||
<string name="screen_security_and_privacy_room_address_section_header">"Oda adresi"</string>
|
||||
<string name="screen_security_and_privacy_room_directory_visibility_section_footer">"Bu odanın %1$s genel oda dizininde arama yapılarak bulunmasına izin verin"</string>
|
||||
|
||||
@@ -129,8 +129,8 @@
|
||||
<string name="screen_security_and_privacy_room_access_invite_only_option_description">"Люди можуть приєднатися, лише якщо їх запросили"</string>
|
||||
<string name="screen_security_and_privacy_room_access_invite_only_option_title">"Лише запрошені"</string>
|
||||
<string name="screen_security_and_privacy_room_access_section_header">"Доступ до кімнати"</string>
|
||||
<string name="screen_security_and_privacy_room_access_space_members_option_description">"Простори наразі не підтримуються"</string>
|
||||
<string name="screen_security_and_privacy_room_access_space_members_option_title">"Учасники простору"</string>
|
||||
<string name="screen_security_and_privacy_room_access_space_members_option_unavailable_description">"Простори наразі не підтримуються"</string>
|
||||
<string name="screen_security_and_privacy_room_address_section_footer">"Вам знадобиться адреса кімнати, щоб зробити її видимою в каталозі."</string>
|
||||
<string name="screen_security_and_privacy_room_address_section_header">"Адреса кімнати"</string>
|
||||
<string name="screen_security_and_privacy_room_directory_visibility_section_footer">"Дозвольте, щоб цю кімнату можна було знайти за допомогою пошуку в каталозі загальнодоступних кімнат %1$s "</string>
|
||||
|
||||
@@ -1,5 +1,7 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
|
||||
<string name="screen_edit_room_address_room_address_section_footer">"Katalogda ko‘rinadigan qilish uchun xona manzili kerak bo‘ladi."</string>
|
||||
<string name="screen_edit_room_address_title">"Xona manzili"</string>
|
||||
<string name="screen_notification_settings_edit_failed_updating_default_mode">"Bildirishnoma sozlamalarini yangilashda xatolik yuz berdi."</string>
|
||||
<string name="screen_notification_settings_mentions_only_disclaimer">"Uy serveringiz shifrlangan xonalarda ushbu imkoniyatni qoʻllab-quvvatlamaydi, shuning uchun baʼzi xonalardagi xabarlarni olmasligingiz mumkin."</string>
|
||||
<string name="screen_polls_history_title">"Soʻrovnomalar"</string>
|
||||
@@ -18,13 +20,17 @@
|
||||
<string name="screen_room_change_role_administrators_title">"Administratorlarni tahrirlash"</string>
|
||||
<string name="screen_room_change_role_confirm_add_admin_description">"Bu amalni bekor qila olmaysiz. Siz foydalanuvchini o‘zingiz bilan bir xil quvvat darajasiga ega bo‘lishga undayapsiz."</string>
|
||||
<string name="screen_room_change_role_confirm_add_admin_title">"Admin qo‘shilsinmi?"</string>
|
||||
<string name="screen_room_change_role_confirm_change_owners_description">"Bu amalni bekor qila olmaysiz. Siz egalikni tanlangan foydalanuvchilarga o‘tkazmoqdasiz. Tark etsangiz, bu doimiy bo‘ladi."</string>
|
||||
<string name="screen_room_change_role_confirm_change_owners_title">"Egalik huquqini o‘tkazasizmi?"</string>
|
||||
<string name="screen_room_change_role_confirm_demote_self_action">"Pastga tushirish"</string>
|
||||
<string name="screen_room_change_role_confirm_demote_self_description">"Siz oʻzingizni imtiyozlardan mahrum qilayotganingiz sababli, bu o‘zgarishni bekor qila olmaysiz. Agar xonadagi so‘nggi imtiyozli foydalanuvchi bo‘lsangiz, imtiyozlarni qayta tiklash imkonsiz bo‘ladi."</string>
|
||||
<string name="screen_room_change_role_confirm_demote_self_title">"O‘z darajangizni pasaytirmoqchimisiz?"</string>
|
||||
<string name="screen_room_change_role_invited_member_name">"%1$s (Jarayonda)"</string>
|
||||
<string name="screen_room_change_role_invited_member_name_android">"(Kutilmoqda)"</string>
|
||||
<string name="screen_room_change_role_moderators_admin_section_footer">"Administratorlar avtomatik ravishda moderator imtiyozlariga ega"</string>
|
||||
<string name="screen_room_change_role_moderators_owner_section_footer">"Egalar avtomatik ravishda administrator huquqlariga ega."</string>
|
||||
<string name="screen_room_change_role_moderators_title">"Moderatorlarni tahrirlash"</string>
|
||||
<string name="screen_room_change_role_owners_title">"Egalarni tanlang"</string>
|
||||
<string name="screen_room_change_role_section_administrators">"Adminlar"</string>
|
||||
<string name="screen_room_change_role_section_moderators">"Moderatorlar"</string>
|
||||
<string name="screen_room_change_role_section_users">"Azolar"</string>
|
||||
@@ -45,13 +51,16 @@
|
||||
<string name="screen_room_details_invite_people_title">"Odamlarni taklif qiling"</string>
|
||||
<string name="screen_room_details_leave_conversation_title">"Suhbatni tark etish"</string>
|
||||
<string name="screen_room_details_leave_room_title">"Xonani tark etish"</string>
|
||||
<string name="screen_room_details_media_gallery_title">"Media va fayllar"</string>
|
||||
<string name="screen_room_details_notification_mode_custom">"Maxsus"</string>
|
||||
<string name="screen_room_details_notification_mode_default">"Standart"</string>
|
||||
<string name="screen_room_details_notification_title">"Bildirishnomalar"</string>
|
||||
<string name="screen_room_details_pinned_events_row_title">"Qadalgan xabarlar"</string>
|
||||
<string name="screen_room_details_profile_row_title">"Profil"</string>
|
||||
<string name="screen_room_details_requests_to_join_title">"Qo‘shilish uchun so‘rovlar"</string>
|
||||
<string name="screen_room_details_roles_and_permissions">"Rollar va ruxsatlar"</string>
|
||||
<string name="screen_room_details_room_name_label">"Xona nomi"</string>
|
||||
<string name="screen_room_details_security_and_privacy_title">"Xavfsizlik va maxfiylik"</string>
|
||||
<string name="screen_room_details_security_title">"Xavfsizlik"</string>
|
||||
<string name="screen_room_details_share_room_title">"Xonani baham ko\'ring"</string>
|
||||
<string name="screen_room_details_title">"Xona haqida maʼlumot"</string>
|
||||
@@ -66,10 +75,12 @@
|
||||
<string name="screen_room_member_list_manage_member_remove_confirmation_kick">"Faqat aʻzoni olib tashlash"</string>
|
||||
<string name="screen_room_member_list_manage_member_unban_action">"Taqiqni bekor qilish"</string>
|
||||
<string name="screen_room_member_list_manage_member_unban_message">"Agar taklif qilinsa, ular bu xonaga qayta qo‘shilishlari mumkin."</string>
|
||||
<string name="screen_room_member_list_manage_member_unban_title">"Xonadan taqiqni olib tashlash"</string>
|
||||
<string name="screen_room_member_list_mode_banned">"Taqiqlangan"</string>
|
||||
<string name="screen_room_member_list_mode_members">"Azolar"</string>
|
||||
<string name="screen_room_member_list_role_administrator">"Faqat adminlar"</string>
|
||||
<string name="screen_room_member_list_role_moderator">"Adminlar va moderatorlar"</string>
|
||||
<string name="screen_room_member_list_role_owner">"Egasi"</string>
|
||||
<string name="screen_room_member_list_room_members_header_title">"Xona a\'zolari"</string>
|
||||
<string name="screen_room_member_list_unbanning_user">"Taqiqni bekor qilish %1$s"</string>
|
||||
<string name="screen_room_notification_settings_allow_custom">"Moslashtirilgan sozlamalarga ruxsat bering"</string>
|
||||
@@ -87,20 +98,46 @@
|
||||
<string name="screen_room_notification_settings_mode_mentions_and_keywords">"Faqat eslatmalar va kalit so\'zlar"</string>
|
||||
<string name="screen_room_notification_settings_room_custom_settings_title">"Bu xonada menga xabar bering"</string>
|
||||
<string name="screen_room_roles_and_permissions_admins">"Adminlar"</string>
|
||||
<string name="screen_room_roles_and_permissions_admins_and_owners">"Adminlar va egalari"</string>
|
||||
<string name="screen_room_roles_and_permissions_change_my_role">"Rolimni o‘zgartirish"</string>
|
||||
<string name="screen_room_roles_and_permissions_change_role_demote_to_member">"Aʼzolikka tushirish"</string>
|
||||
<string name="screen_room_roles_and_permissions_change_role_demote_to_moderator">"Moderatorga pasaytirish"</string>
|
||||
<string name="screen_room_roles_and_permissions_member_moderation">"Aʻzo moderatsiyasi"</string>
|
||||
<string name="screen_room_roles_and_permissions_messages_and_content">"Xabarlar va kontent"</string>
|
||||
<string name="screen_room_roles_and_permissions_moderators">"Moderatorlar"</string>
|
||||
<string name="screen_room_roles_and_permissions_owners">"Egalari"</string>
|
||||
<string name="screen_room_roles_and_permissions_reset">"Ruxsatlarni tiklash"</string>
|
||||
<string name="screen_room_roles_and_permissions_reset_confirm_description">"Ruxsatlarni asliga qaytargach, joriy sozlamalarni yoʻqotasiz."</string>
|
||||
<string name="screen_room_roles_and_permissions_reset_confirm_title">"Ruxsatlar asliga qaytarilsinmi?"</string>
|
||||
<string name="screen_room_roles_and_permissions_roles_header">"Rollar"</string>
|
||||
<string name="screen_room_roles_and_permissions_room_details">"Xona tafsilotlari"</string>
|
||||
<string name="screen_room_roles_and_permissions_title">"Rollar va ruxsatlar"</string>
|
||||
<string name="screen_security_and_privacy_add_room_address_action">"Xona manzilini kiritish"</string>
|
||||
<string name="screen_security_and_privacy_ask_to_join_option_description">"Xonaga qo‘shilishni istalgan kishi so‘rashi mumkin, lekin administrator yoki moderator so‘rovni qabul qilishi kerak"</string>
|
||||
<string name="screen_security_and_privacy_ask_to_join_option_title">"Qo‘shilishni so‘rang"</string>
|
||||
<string name="screen_security_and_privacy_enable_encryption_alert_confirm_button_title">"Ha, shifrlashni yoqish"</string>
|
||||
<string name="screen_security_and_privacy_enable_encryption_alert_description">"Yoqilgandan so‘ng, xona uchun shifrlashni o‘chirib bo‘lmaydi. Xabarlar tarixi faqat xona a’zolari taklif qilinganidan yoki xonaga qo‘shilganidan keyingi davrdan boshlab ko‘rinadi. Xona a’zolaridan tashqari hech kim xabarlarni o‘qiy olmaydi. Bu botlar va ko‘priklarning to‘g‘ri ishlashiga to‘sqinlik qilishi mumkin.
|
||||
Shu sababli, har kim topishi va qo‘shilishi mumkin bo‘lgan xonalar uchun shifrlashni yoqishni tavsiya etmaymiz."</string>
|
||||
<string name="screen_security_and_privacy_enable_encryption_alert_title">"Shifrlash yoqilsinmi?"</string>
|
||||
<string name="screen_security_and_privacy_encryption_section_footer">"Yoqilgandan keyin shifrlashni faolsizlantirish imkonsiz."</string>
|
||||
<string name="screen_security_and_privacy_encryption_section_header">"Shifrlash"</string>
|
||||
<string name="screen_security_and_privacy_encryption_toggle_title">"End-to-end shifrlashni yoqish"</string>
|
||||
<string name="screen_security_and_privacy_room_access_anyone_option_description">"Istalgan kishi topishi va qo‘shilishi mumkin"</string>
|
||||
<string name="screen_security_and_privacy_room_access_anyone_option_title">"Har kim"</string>
|
||||
<string name="screen_security_and_privacy_room_access_invite_only_option_description">"Odamlar faqat taklif qilingan taqdirdagina qo‘shilishi mumkin"</string>
|
||||
<string name="screen_security_and_privacy_room_access_invite_only_option_title">"Faqat taklif qilish"</string>
|
||||
<string name="screen_security_and_privacy_room_access_section_header">"Xonaga kirish huquqi"</string>
|
||||
<string name="screen_security_and_privacy_room_access_space_members_option_title">"Maydon a’zolari"</string>
|
||||
<string name="screen_security_and_privacy_room_access_space_members_option_unavailable_description">"Hozirda maydonlar qo‘llab-quvvatlanmaydi"</string>
|
||||
<string name="screen_security_and_privacy_room_address_section_footer">"Katalogda ko‘rinadigan qilish uchun xona manzili kerak bo‘ladi."</string>
|
||||
<string name="screen_security_and_privacy_room_directory_visibility_section_footer">"Bu xonani %1$s umumiy xonalar ro‘yxatidan qidirib topish imkoniyatini berish"</string>
|
||||
<string name="screen_security_and_privacy_room_directory_visibility_toggle_title">"Umumiy xona ro‘yxatida ko‘rinadi"</string>
|
||||
<string name="screen_security_and_privacy_room_history_anyone_option_title">"Har kim"</string>
|
||||
<string name="screen_security_and_privacy_room_history_section_header">"Tarixni kim o‘qiy oladi"</string>
|
||||
<string name="screen_security_and_privacy_room_history_since_invite_option_title">"Taklif qilinganidan buyon faqat a’zolar"</string>
|
||||
<string name="screen_security_and_privacy_room_history_since_selecting_option_title">"A’zolar faqat bu parametr tanlanganidan keyin"</string>
|
||||
<string name="screen_security_and_privacy_room_publishing_section_footer">"Xona manzillari xonalarni topish va ularga kirish usullaridir. Bu shuningdek xonangizni boshqalar bilan oson ulashish imkonini beradi.
|
||||
Xonangizni o‘z homeserveringizning ommaviy xonalar ro‘yxatida e’lon qilishni tanlashingiz mumkin."</string>
|
||||
<string name="screen_security_and_privacy_room_publishing_section_header">"xona nashriyoti"</string>
|
||||
<string name="screen_security_and_privacy_title">"Xavfsizlik va maxfiylik"</string>
|
||||
</resources>
|
||||
|
||||
@@ -135,8 +135,8 @@
|
||||
<string name="screen_security_and_privacy_room_access_invite_only_option_description">"僅受邀者才能加入。"</string>
|
||||
<string name="screen_security_and_privacy_room_access_invite_only_option_title">"僅限邀請"</string>
|
||||
<string name="screen_security_and_privacy_room_access_section_header">"存取權"</string>
|
||||
<string name="screen_security_and_privacy_room_access_space_members_option_description">"目前不支援空間"</string>
|
||||
<string name="screen_security_and_privacy_room_access_space_members_option_title">"空間成員"</string>
|
||||
<string name="screen_security_and_privacy_room_access_space_members_option_unavailable_description">"目前不支援空間"</string>
|
||||
<string name="screen_security_and_privacy_room_address_section_footer">"您需要地址才能在公開目錄中顯示。"</string>
|
||||
<string name="screen_security_and_privacy_room_address_section_header">"地址"</string>
|
||||
<string name="screen_security_and_privacy_room_directory_visibility_section_footer">"允許透過搜尋 %1$s 公開聊天室目錄找到此聊天室"</string>
|
||||
|
||||
@@ -68,7 +68,7 @@
|
||||
<string name="screen_room_details_title">"聊天室信息"</string>
|
||||
<string name="screen_room_details_topic_title">"主题"</string>
|
||||
<string name="screen_room_details_updating_room">"正在更新聊天室……"</string>
|
||||
<string name="screen_room_member_list_banned_empty">"此聊天室里没有被封禁的用户。"</string>
|
||||
<string name="screen_room_member_list_banned_empty">"没有被封禁的用户。"</string>
|
||||
<plurals name="screen_room_member_list_header_title">
|
||||
<item quantity="other">"%1$d 人"</item>
|
||||
</plurals>
|
||||
@@ -129,8 +129,8 @@
|
||||
<string name="screen_security_and_privacy_room_access_invite_only_option_description">"只有受邀者才能加入"</string>
|
||||
<string name="screen_security_and_privacy_room_access_invite_only_option_title">"仅限邀请"</string>
|
||||
<string name="screen_security_and_privacy_room_access_section_header">"房间访问权限"</string>
|
||||
<string name="screen_security_and_privacy_room_access_space_members_option_description">"目前不支持空间"</string>
|
||||
<string name="screen_security_and_privacy_room_access_space_members_option_title">"空间成员"</string>
|
||||
<string name="screen_security_and_privacy_room_access_space_members_option_unavailable_description">"目前不支持空间"</string>
|
||||
<string name="screen_security_and_privacy_room_address_section_footer">"你需要房间地址才能使其在目录中可见。"</string>
|
||||
<string name="screen_security_and_privacy_room_address_section_header">"房间地址"</string>
|
||||
<string name="screen_security_and_privacy_room_directory_visibility_section_footer">"允许通过搜索 %1$s 的公共房间目录来发现此房间"</string>
|
||||
|
||||
@@ -141,11 +141,15 @@ We do not recommend enabling encryption for rooms that anyone can find and join.
|
||||
<string name="screen_security_and_privacy_encryption_toggle_title">"Enable end-to-end encryption"</string>
|
||||
<string name="screen_security_and_privacy_room_access_anyone_option_description">"Anyone can join."</string>
|
||||
<string name="screen_security_and_privacy_room_access_anyone_option_title">"Anyone"</string>
|
||||
<string name="screen_security_and_privacy_room_access_footer">"Choose which spaces’ members can join this room without an invitation. %1$s"</string>
|
||||
<string name="screen_security_and_privacy_room_access_footer_manage_spaces_action">"Manage spaces"</string>
|
||||
<string name="screen_security_and_privacy_room_access_invite_only_option_description">"Only invited people can join."</string>
|
||||
<string name="screen_security_and_privacy_room_access_invite_only_option_title">"Invite only"</string>
|
||||
<string name="screen_security_and_privacy_room_access_section_header">"Access"</string>
|
||||
<string name="screen_security_and_privacy_room_access_space_members_option_description">"Spaces are not currently supported"</string>
|
||||
<string name="screen_security_and_privacy_room_access_space_members_option_multiple_parents_description">"Anyone in authorized spaces can join."</string>
|
||||
<string name="screen_security_and_privacy_room_access_space_members_option_single_parent_description">"Anyone in %1$s can join."</string>
|
||||
<string name="screen_security_and_privacy_room_access_space_members_option_title">"Space members"</string>
|
||||
<string name="screen_security_and_privacy_room_access_space_members_option_unavailable_description">"Spaces are not currently supported"</string>
|
||||
<string name="screen_security_and_privacy_room_address_section_footer">"You’ll need an address in order to make it visible in the public directory."</string>
|
||||
<string name="screen_security_and_privacy_room_address_section_header">"Address"</string>
|
||||
<string name="screen_security_and_privacy_room_directory_visibility_section_footer">"Allow for this room to be found by searching %1$s public room directory"</string>
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user