Merge branch 'develop' into feature/bma/limitComposerHeight
This commit is contained in:
commit
95ccf16d5d
230 changed files with 2910 additions and 1855 deletions
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
|
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 com.bumble.appyx.navmodel.backstack.operation.singleTop
|
||||||
import dev.zacsweers.metro.Assisted
|
import dev.zacsweers.metro.Assisted
|
||||||
import dev.zacsweers.metro.AssistedInject
|
import dev.zacsweers.metro.AssistedInject
|
||||||
import im.vector.app.features.analytics.plan.JoinedRoom
|
|
||||||
import io.element.android.annotations.ContributesNode
|
import io.element.android.annotations.ContributesNode
|
||||||
import io.element.android.appnav.loggedin.LoggedInNode
|
import io.element.android.appnav.loggedin.LoggedInNode
|
||||||
import io.element.android.appnav.loggedin.MediaPreviewConfigMigration
|
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.UserId
|
||||||
import io.element.android.libraries.matrix.api.core.toRoomIdOrAlias
|
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.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.sync.SyncService
|
||||||
import io.element.android.libraries.matrix.api.verification.SessionVerificationServiceListener
|
import io.element.android.libraries.matrix.api.verification.SessionVerificationServiceListener
|
||||||
import io.element.android.libraries.matrix.api.verification.VerificationRequest
|
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.minutes
|
||||||
import kotlin.time.Duration.Companion.seconds
|
import kotlin.time.Duration.Companion.seconds
|
||||||
import kotlin.time.toKotlinDuration
|
import kotlin.time.toKotlinDuration
|
||||||
|
import im.vector.app.features.analytics.plan.JoinedRoom as JoinedRoomAnalyticsEvent
|
||||||
|
|
||||||
@ContributesNode(SessionScope::class)
|
@ContributesNode(SessionScope::class)
|
||||||
@AssistedInject
|
@AssistedInject
|
||||||
|
|
@ -265,7 +266,7 @@ class LoggedInFlowNode(
|
||||||
data class Room(
|
data class Room(
|
||||||
val roomIdOrAlias: RoomIdOrAlias,
|
val roomIdOrAlias: RoomIdOrAlias,
|
||||||
val serverNames: List<String> = emptyList(),
|
val serverNames: List<String> = emptyList(),
|
||||||
val trigger: JoinedRoom.Trigger? = null,
|
val trigger: JoinedRoomAnalyticsEvent.Trigger? = null,
|
||||||
val roomDescription: RoomDescription? = null,
|
val roomDescription: RoomDescription? = null,
|
||||||
val initialElement: RoomNavigationTarget = RoomNavigationTarget.Root(),
|
val initialElement: RoomNavigationTarget = RoomNavigationTarget.Root(),
|
||||||
val targetId: UUID = UUID.randomUUID(),
|
val targetId: UUID = UUID.randomUUID(),
|
||||||
|
|
@ -315,8 +316,13 @@ class LoggedInFlowNode(
|
||||||
}
|
}
|
||||||
NavTarget.Home -> {
|
NavTarget.Home -> {
|
||||||
val callback = object : HomeEntryPoint.Callback {
|
val callback = object : HomeEntryPoint.Callback {
|
||||||
override fun navigateToRoom(roomId: RoomId) {
|
override fun navigateToRoom(roomId: RoomId, joinedRoom: JoinedRoom?) {
|
||||||
backstack.push(NavTarget.Room(roomId.toRoomIdOrAlias()))
|
backstack.push(
|
||||||
|
NavTarget.Room(
|
||||||
|
roomIdOrAlias = roomId.toRoomIdOrAlias(),
|
||||||
|
initialElement = RoomNavigationTarget.Root(joinedRoom = joinedRoom)
|
||||||
|
)
|
||||||
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun navigateToSettings() {
|
override fun navigateToSettings() {
|
||||||
|
|
@ -365,7 +371,7 @@ class LoggedInFlowNode(
|
||||||
val target = NavTarget.Room(
|
val target = NavTarget.Room(
|
||||||
roomIdOrAlias = data.roomIdOrAlias,
|
roomIdOrAlias = data.roomIdOrAlias,
|
||||||
serverNames = data.viaParameters,
|
serverNames = data.viaParameters,
|
||||||
trigger = JoinedRoom.Trigger.Timeline,
|
trigger = JoinedRoomAnalyticsEvent.Trigger.Timeline,
|
||||||
initialElement = RoomNavigationTarget.Root(data.eventId),
|
initialElement = RoomNavigationTarget.Root(data.eventId),
|
||||||
)
|
)
|
||||||
if (pushToBackstack) {
|
if (pushToBackstack) {
|
||||||
|
|
@ -479,7 +485,7 @@ class LoggedInFlowNode(
|
||||||
NavTarget.Room(
|
NavTarget.Room(
|
||||||
roomIdOrAlias = roomDescription.roomId.toRoomIdOrAlias(),
|
roomIdOrAlias = roomDescription.roomId.toRoomIdOrAlias(),
|
||||||
roomDescription = roomDescription,
|
roomDescription = roomDescription,
|
||||||
trigger = JoinedRoom.Trigger.RoomDirectory,
|
trigger = JoinedRoomAnalyticsEvent.Trigger.RoomDirectory,
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
@ -519,7 +525,7 @@ class LoggedInFlowNode(
|
||||||
suspend fun attachRoom(
|
suspend fun attachRoom(
|
||||||
roomIdOrAlias: RoomIdOrAlias,
|
roomIdOrAlias: RoomIdOrAlias,
|
||||||
serverNames: List<String> = emptyList(),
|
serverNames: List<String> = emptyList(),
|
||||||
trigger: JoinedRoom.Trigger? = null,
|
trigger: JoinedRoomAnalyticsEvent.Trigger? = null,
|
||||||
eventId: EventId? = null,
|
eventId: EventId? = null,
|
||||||
clearBackstack: Boolean,
|
clearBackstack: Boolean,
|
||||||
): RoomFlowNode {
|
): 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.Plugin
|
||||||
import com.bumble.appyx.core.plugin.plugins
|
import com.bumble.appyx.core.plugin.plugins
|
||||||
import com.bumble.appyx.navmodel.backstack.BackStack
|
import com.bumble.appyx.navmodel.backstack.BackStack
|
||||||
|
import com.bumble.appyx.navmodel.backstack.active
|
||||||
import com.bumble.appyx.navmodel.backstack.operation.newRoot
|
import com.bumble.appyx.navmodel.backstack.operation.newRoot
|
||||||
import dev.zacsweers.metro.Assisted
|
import dev.zacsweers.metro.Assisted
|
||||||
import dev.zacsweers.metro.AssistedInject
|
import dev.zacsweers.metro.AssistedInject
|
||||||
import im.vector.app.features.analytics.plan.JoinedRoom
|
|
||||||
import io.element.android.annotations.ContributesNode
|
import io.element.android.annotations.ContributesNode
|
||||||
import io.element.android.appnav.room.joined.JoinedRoomFlowNode
|
import io.element.android.appnav.room.joined.JoinedRoomFlowNode
|
||||||
import io.element.android.appnav.room.joined.JoinedRoomLoadedFlowNode
|
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.onEach
|
||||||
import kotlinx.coroutines.flow.shareIn
|
import kotlinx.coroutines.flow.shareIn
|
||||||
import kotlinx.coroutines.launch
|
import kotlinx.coroutines.launch
|
||||||
|
import kotlinx.parcelize.IgnoredOnParcel
|
||||||
import kotlinx.parcelize.Parcelize
|
import kotlinx.parcelize.Parcelize
|
||||||
import timber.log.Timber
|
import timber.log.Timber
|
||||||
import java.util.Optional
|
import java.util.Optional
|
||||||
import kotlin.jvm.optionals.getOrNull
|
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)
|
@ContributesNode(SessionScope::class)
|
||||||
@AssistedInject
|
@AssistedInject
|
||||||
|
|
@ -77,7 +80,14 @@ class RoomFlowNode(
|
||||||
private val analyticsService: AnalyticsService,
|
private val analyticsService: AnalyticsService,
|
||||||
) : BaseFlowNode<RoomFlowNode.NavTarget>(
|
) : BaseFlowNode<RoomFlowNode.NavTarget>(
|
||||||
backstack = BackStack(
|
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,
|
savedStateMap = buildContext.savedStateMap,
|
||||||
),
|
),
|
||||||
buildContext = buildContext,
|
buildContext = buildContext,
|
||||||
|
|
@ -87,7 +97,7 @@ class RoomFlowNode(
|
||||||
val roomIdOrAlias: RoomIdOrAlias,
|
val roomIdOrAlias: RoomIdOrAlias,
|
||||||
val roomDescription: Optional<RoomDescription>,
|
val roomDescription: Optional<RoomDescription>,
|
||||||
val serverNames: List<String>,
|
val serverNames: List<String>,
|
||||||
val trigger: Optional<JoinedRoom.Trigger>,
|
val trigger: Optional<JoinedRoomAnalyticsEvent.Trigger>,
|
||||||
val initialElement: RoomNavigationTarget,
|
val initialElement: RoomNavigationTarget,
|
||||||
) : NodeInputs
|
) : NodeInputs
|
||||||
|
|
||||||
|
|
@ -104,11 +114,16 @@ class RoomFlowNode(
|
||||||
data class JoinRoom(
|
data class JoinRoom(
|
||||||
val roomId: RoomId,
|
val roomId: RoomId,
|
||||||
val serverNames: List<String>,
|
val serverNames: List<String>,
|
||||||
val trigger: im.vector.app.features.analytics.plan.JoinedRoom.Trigger,
|
val trigger: JoinedRoomAnalyticsEvent.Trigger,
|
||||||
) : NavTarget
|
) : NavTarget
|
||||||
|
|
||||||
@Parcelize
|
@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() {
|
override fun onBuilt() {
|
||||||
|
|
@ -133,7 +148,9 @@ class RoomFlowNode(
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun subscribeToRoomInfoFlow(roomId: RoomId, serverNames: List<String>) {
|
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
|
// This observes the local membership changes for the room
|
||||||
val membershipUpdateFlow = membershipObserver.updates
|
val membershipUpdateFlow = membershipObserver.updates
|
||||||
|
|
@ -149,6 +166,11 @@ class RoomFlowNode(
|
||||||
currentMembershipFlow.onEach { (previousMembership, membership) ->
|
currentMembershipFlow.onEach { (previousMembership, membership) ->
|
||||||
Timber.d("Room membership: $membership")
|
Timber.d("Room membership: $membership")
|
||||||
if (membership == CurrentUserMembership.JOINED) {
|
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))
|
backstack.newRoot(NavTarget.JoinedRoom(roomId))
|
||||||
} else {
|
} else {
|
||||||
val leavingFromCurrentDevice =
|
val leavingFromCurrentDevice =
|
||||||
|
|
@ -163,7 +185,7 @@ class RoomFlowNode(
|
||||||
NavTarget.JoinRoom(
|
NavTarget.JoinRoom(
|
||||||
roomId = roomId,
|
roomId = roomId,
|
||||||
serverNames = serverNames,
|
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 roomFlowNodeCallback = plugins<JoinedRoomLoadedFlowNode.Callback>()
|
||||||
val inputs = JoinedRoomFlowNode.Inputs(
|
val inputs = JoinedRoomFlowNode.Inputs(
|
||||||
roomId = navTarget.roomId,
|
roomId = navTarget.roomId,
|
||||||
initialElement = inputs.initialElement
|
initialElement = inputs.initialElement,
|
||||||
|
joinedRoom = navTarget.joinedRoom,
|
||||||
)
|
)
|
||||||
createNode<JoinedRoomFlowNode>(buildContext, plugins = listOf(inputs) + roomFlowNodeCallback)
|
createNode<JoinedRoomFlowNode>(buildContext, plugins = listOf(inputs) + roomFlowNodeCallback)
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -10,12 +10,15 @@ package io.element.android.appnav.room
|
||||||
|
|
||||||
import android.os.Parcelable
|
import android.os.Parcelable
|
||||||
import io.element.android.libraries.matrix.api.core.EventId
|
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
|
import kotlinx.parcelize.Parcelize
|
||||||
|
|
||||||
sealed interface RoomNavigationTarget : Parcelable {
|
sealed interface RoomNavigationTarget : Parcelable {
|
||||||
@Parcelize
|
@Parcelize
|
||||||
data class Root(
|
data class Root(
|
||||||
val eventId: EventId? = null,
|
val eventId: EventId? = null,
|
||||||
|
@IgnoredOnParcel val joinedRoom: JoinedRoom? = null,
|
||||||
) : RoomNavigationTarget
|
) : RoomNavigationTarget
|
||||||
|
|
||||||
@Parcelize
|
@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.EventId
|
||||||
import io.element.android.libraries.matrix.api.core.RoomId
|
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.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.LoadingRoomState
|
||||||
import io.element.android.libraries.matrix.ui.room.LoadingRoomStateFlowFactory
|
import io.element.android.libraries.matrix.ui.room.LoadingRoomStateFlowFactory
|
||||||
import kotlinx.coroutines.flow.distinctUntilChanged
|
import kotlinx.coroutines.flow.distinctUntilChanged
|
||||||
|
|
@ -63,11 +64,12 @@ class JoinedRoomFlowNode(
|
||||||
) {
|
) {
|
||||||
data class Inputs(
|
data class Inputs(
|
||||||
val roomId: RoomId,
|
val roomId: RoomId,
|
||||||
|
val joinedRoom: JoinedRoom?,
|
||||||
val initialElement: RoomNavigationTarget,
|
val initialElement: RoomNavigationTarget,
|
||||||
) : NodeInputs
|
) : NodeInputs
|
||||||
|
|
||||||
private val inputs: Inputs = inputs()
|
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 {
|
sealed interface NavTarget : Parcelable {
|
||||||
@Parcelize
|
@Parcelize
|
||||||
|
|
|
||||||
|
|
@ -23,6 +23,19 @@ import kotlinx.coroutines.test.runTest
|
||||||
import org.junit.Test
|
import org.junit.Test
|
||||||
|
|
||||||
class LoadingBaseRoomStateFlowFactoryTest {
|
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
|
@Test
|
||||||
fun `flow should emit Loading and then Loaded when there is a room in cache`() = runTest {
|
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))
|
val room = FakeJoinedRoom(baseRoom = FakeBaseRoom(sessionId = A_SESSION_ID, roomId = A_ROOM_ID))
|
||||||
|
|
@ -31,7 +44,7 @@ class LoadingBaseRoomStateFlowFactoryTest {
|
||||||
}
|
}
|
||||||
val flowFactory = LoadingRoomStateFlowFactory(matrixClient)
|
val flowFactory = LoadingRoomStateFlowFactory(matrixClient)
|
||||||
flowFactory
|
flowFactory
|
||||||
.create(this, A_ROOM_ID)
|
.create(lifecycleScope = this, roomId = A_ROOM_ID, joinedRoom = null)
|
||||||
.test {
|
.test {
|
||||||
assertThat(awaitItem()).isEqualTo(LoadingRoomState.Loading)
|
assertThat(awaitItem()).isEqualTo(LoadingRoomState.Loading)
|
||||||
assertThat(awaitItem()).isEqualTo(LoadingRoomState.Loaded(room))
|
assertThat(awaitItem()).isEqualTo(LoadingRoomState.Loaded(room))
|
||||||
|
|
@ -45,7 +58,7 @@ class LoadingBaseRoomStateFlowFactoryTest {
|
||||||
val matrixClient = FakeMatrixClient(A_SESSION_ID, roomListService = roomListService)
|
val matrixClient = FakeMatrixClient(A_SESSION_ID, roomListService = roomListService)
|
||||||
val flowFactory = LoadingRoomStateFlowFactory(matrixClient)
|
val flowFactory = LoadingRoomStateFlowFactory(matrixClient)
|
||||||
flowFactory
|
flowFactory
|
||||||
.create(this, A_ROOM_ID)
|
.create(lifecycleScope = this, roomId = A_ROOM_ID, joinedRoom = null)
|
||||||
.test {
|
.test {
|
||||||
assertThat(awaitItem()).isEqualTo(LoadingRoomState.Loading)
|
assertThat(awaitItem()).isEqualTo(LoadingRoomState.Loading)
|
||||||
matrixClient.givenGetRoomResult(A_ROOM_ID, room)
|
matrixClient.givenGetRoomResult(A_ROOM_ID, room)
|
||||||
|
|
@ -60,7 +73,7 @@ class LoadingBaseRoomStateFlowFactoryTest {
|
||||||
val matrixClient = FakeMatrixClient(A_SESSION_ID, roomListService = roomListService)
|
val matrixClient = FakeMatrixClient(A_SESSION_ID, roomListService = roomListService)
|
||||||
val flowFactory = LoadingRoomStateFlowFactory(matrixClient)
|
val flowFactory = LoadingRoomStateFlowFactory(matrixClient)
|
||||||
flowFactory
|
flowFactory
|
||||||
.create(this, A_ROOM_ID)
|
.create(lifecycleScope = this, roomId = A_ROOM_ID, joinedRoom = null)
|
||||||
.test {
|
.test {
|
||||||
assertThat(awaitItem()).isEqualTo(LoadingRoomState.Loading)
|
assertThat(awaitItem()).isEqualTo(LoadingRoomState.Loading)
|
||||||
roomListService.postAllRoomsLoadingState(RoomList.LoadingState.Loaded(1))
|
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">
|
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
|
||||||
<string name="screen_space_announcement_item1">"查看您创建或加入的空间"</string>
|
<string name="screen_space_announcement_item1">"查看您创建或加入的空间"</string>
|
||||||
<string name="screen_space_announcement_item2">"接受或拒绝空间邀请"</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>
|
</resources>
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,7 @@
|
||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
|
<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_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_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_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>
|
<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_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_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_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_name_label">"Nome da sala"</string>
|
||||||
<string name="screen_create_room_room_visibility_section_title">"Visibilidade 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>
|
<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 com.bumble.appyx.core.plugin.Plugin
|
||||||
import io.element.android.libraries.architecture.FeatureEntryPoint
|
import io.element.android.libraries.architecture.FeatureEntryPoint
|
||||||
import io.element.android.libraries.matrix.api.core.RoomId
|
import io.element.android.libraries.matrix.api.core.RoomId
|
||||||
|
import io.element.android.libraries.matrix.api.room.JoinedRoom
|
||||||
|
|
||||||
interface HomeEntryPoint : FeatureEntryPoint {
|
interface HomeEntryPoint : FeatureEntryPoint {
|
||||||
fun createNode(
|
fun createNode(
|
||||||
|
|
@ -22,7 +23,7 @@ interface HomeEntryPoint : FeatureEntryPoint {
|
||||||
): Node
|
): Node
|
||||||
|
|
||||||
interface Callback : Plugin {
|
interface Callback : Plugin {
|
||||||
fun navigateToRoom(roomId: RoomId)
|
fun navigateToRoom(roomId: RoomId, joinedRoom: JoinedRoom?)
|
||||||
fun navigateToCreateRoom()
|
fun navigateToCreateRoom()
|
||||||
fun navigateToSettings()
|
fun navigateToSettings()
|
||||||
fun navigateToSetUpRecovery()
|
fun navigateToSetUpRecovery()
|
||||||
|
|
|
||||||
|
|
@ -14,6 +14,8 @@ import androidx.activity.compose.LocalActivity
|
||||||
import androidx.compose.runtime.Composable
|
import androidx.compose.runtime.Composable
|
||||||
import androidx.compose.runtime.collectAsState
|
import androidx.compose.runtime.collectAsState
|
||||||
import androidx.compose.runtime.getValue
|
import androidx.compose.runtime.getValue
|
||||||
|
import androidx.compose.runtime.mutableStateOf
|
||||||
|
import androidx.compose.runtime.remember
|
||||||
import androidx.compose.ui.Modifier
|
import androidx.compose.ui.Modifier
|
||||||
import androidx.lifecycle.Lifecycle
|
import androidx.lifecycle.Lifecycle
|
||||||
import androidx.lifecycle.coroutineScope
|
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.reportroom.api.ReportRoomEntryPoint
|
||||||
import io.element.android.features.rolesandpermissions.api.ChangeRoomMemberRolesEntryPoint
|
import io.element.android.features.rolesandpermissions.api.ChangeRoomMemberRolesEntryPoint
|
||||||
import io.element.android.features.rolesandpermissions.api.ChangeRoomMemberRolesListType
|
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.BackstackView
|
||||||
import io.element.android.libraries.architecture.BaseFlowNode
|
import io.element.android.libraries.architecture.BaseFlowNode
|
||||||
import io.element.android.libraries.architecture.appyx.launchMolecule
|
import io.element.android.libraries.architecture.appyx.launchMolecule
|
||||||
import io.element.android.libraries.architecture.callback
|
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.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.SessionScope
|
||||||
|
import io.element.android.libraries.di.annotations.SessionCoroutineScope
|
||||||
import io.element.android.libraries.matrix.api.MatrixClient
|
import io.element.android.libraries.matrix.api.MatrixClient
|
||||||
import io.element.android.libraries.matrix.api.core.RoomId
|
import io.element.android.libraries.matrix.api.core.RoomId
|
||||||
import io.element.android.services.analytics.api.AnalyticsService
|
import io.element.android.services.analytics.api.AnalyticsService
|
||||||
|
import kotlinx.coroutines.CoroutineScope
|
||||||
|
import kotlinx.coroutines.Job
|
||||||
import kotlinx.coroutines.NonCancellable
|
import kotlinx.coroutines.NonCancellable
|
||||||
|
import kotlinx.coroutines.delay
|
||||||
|
import kotlinx.coroutines.isActive
|
||||||
|
import kotlinx.coroutines.job
|
||||||
import kotlinx.coroutines.launch
|
import kotlinx.coroutines.launch
|
||||||
import kotlinx.coroutines.runBlocking
|
import kotlinx.coroutines.runBlocking
|
||||||
import kotlinx.coroutines.withContext
|
import kotlinx.coroutines.withContext
|
||||||
import kotlinx.parcelize.Parcelize
|
import kotlinx.parcelize.Parcelize
|
||||||
|
import timber.log.Timber
|
||||||
|
import kotlin.coroutines.cancellation.CancellationException
|
||||||
|
import kotlin.time.Duration.Companion.milliseconds
|
||||||
|
|
||||||
@ContributesNode(SessionScope::class)
|
@ContributesNode(SessionScope::class)
|
||||||
@AssistedInject
|
@AssistedInject
|
||||||
|
|
@ -71,6 +86,7 @@ class HomeFlowNode(
|
||||||
private val declineInviteAndBlockUserEntryPoint: DeclineInviteAndBlockEntryPoint,
|
private val declineInviteAndBlockUserEntryPoint: DeclineInviteAndBlockEntryPoint,
|
||||||
private val changeRoomMemberRolesEntryPoint: ChangeRoomMemberRolesEntryPoint,
|
private val changeRoomMemberRolesEntryPoint: ChangeRoomMemberRolesEntryPoint,
|
||||||
private val leaveRoomRenderer: LeaveRoomRenderer,
|
private val leaveRoomRenderer: LeaveRoomRenderer,
|
||||||
|
@SessionCoroutineScope private val sessionCoroutineScope: CoroutineScope,
|
||||||
) : BaseFlowNode<HomeFlowNode.NavTarget>(
|
) : BaseFlowNode<HomeFlowNode.NavTarget>(
|
||||||
backstack = BackStack(
|
backstack = BackStack(
|
||||||
initialElement = NavTarget.Root,
|
initialElement = NavTarget.Root,
|
||||||
|
|
@ -150,9 +166,58 @@ class HomeFlowNode(
|
||||||
return node(buildContext) { modifier ->
|
return node(buildContext) { modifier ->
|
||||||
val state by stateFlow.collectAsState()
|
val state by stateFlow.collectAsState()
|
||||||
val activity = requireNotNull(LocalActivity.current)
|
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(
|
HomeView(
|
||||||
homeState = state,
|
homeState = state,
|
||||||
onRoomClick = callback::navigateToRoom,
|
onRoomClick = ::navigateToRoom,
|
||||||
onSettingsClick = callback::navigateToSettings,
|
onSettingsClick = callback::navigateToSettings,
|
||||||
onStartChatClick = callback::navigateToCreateRoom,
|
onStartChatClick = callback::navigateToCreateRoom,
|
||||||
onSetUpRecoveryClick = callback::navigateToSetUpRecovery,
|
onSetUpRecoveryClick = callback::navigateToSetUpRecovery,
|
||||||
|
|
@ -165,7 +230,7 @@ class HomeFlowNode(
|
||||||
acceptDeclineInviteView = {
|
acceptDeclineInviteView = {
|
||||||
acceptDeclineInviteView.Render(
|
acceptDeclineInviteView.Render(
|
||||||
state = state.roomListState.acceptDeclineInviteState,
|
state = state.roomListState.acceptDeclineInviteState,
|
||||||
onAcceptInviteSuccess = callback::navigateToRoom,
|
onAcceptInviteSuccess = ::navigateToRoom,
|
||||||
onDeclineInviteSuccess = { },
|
onDeclineInviteSuccess = { },
|
||||||
modifier = Modifier
|
modifier = Modifier
|
||||||
)
|
)
|
||||||
|
|
|
||||||
|
|
@ -40,6 +40,7 @@ import androidx.compose.ui.zIndex
|
||||||
import io.element.android.compound.theme.ElementTheme
|
import io.element.android.compound.theme.ElementTheme
|
||||||
import io.element.android.compound.tokens.generated.CompoundIcons
|
import io.element.android.compound.tokens.generated.CompoundIcons
|
||||||
import io.element.android.features.home.impl.R
|
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.RoomListRoomSummary
|
||||||
import io.element.android.features.home.impl.model.RoomListRoomSummaryProvider
|
import io.element.android.features.home.impl.model.RoomListRoomSummaryProvider
|
||||||
import io.element.android.features.home.impl.model.RoomSummaryDisplayType
|
import io.element.android.features.home.impl.model.RoomSummaryDisplayType
|
||||||
|
|
@ -120,6 +121,7 @@ internal fun RoomSummaryRow(
|
||||||
) {
|
) {
|
||||||
NameAndTimestampRow(
|
NameAndTimestampRow(
|
||||||
name = room.name,
|
name = room.name,
|
||||||
|
latestEvent = room.latestEvent,
|
||||||
timestamp = room.timestamp,
|
timestamp = room.timestamp,
|
||||||
isHighlighted = room.isHighlighted
|
isHighlighted = room.isHighlighted
|
||||||
)
|
)
|
||||||
|
|
@ -136,6 +138,7 @@ internal fun RoomSummaryRow(
|
||||||
) {
|
) {
|
||||||
NameAndTimestampRow(
|
NameAndTimestampRow(
|
||||||
name = room.name,
|
name = room.name,
|
||||||
|
latestEvent = room.latestEvent,
|
||||||
timestamp = null,
|
timestamp = null,
|
||||||
isHighlighted = room.isHighlighted
|
isHighlighted = room.isHighlighted
|
||||||
)
|
)
|
||||||
|
|
@ -211,6 +214,7 @@ private fun RoomSummaryScaffoldRow(
|
||||||
@Composable
|
@Composable
|
||||||
private fun NameAndTimestampRow(
|
private fun NameAndTimestampRow(
|
||||||
name: String?,
|
name: String?,
|
||||||
|
latestEvent: LatestEvent,
|
||||||
timestamp: String?,
|
timestamp: String?,
|
||||||
isHighlighted: Boolean,
|
isHighlighted: Boolean,
|
||||||
modifier: Modifier = Modifier
|
modifier: Modifier = Modifier
|
||||||
|
|
@ -219,16 +223,42 @@ private fun NameAndTimestampRow(
|
||||||
modifier = modifier.fillMaxWidth(),
|
modifier = modifier.fillMaxWidth(),
|
||||||
horizontalArrangement = spacedBy(16.dp)
|
horizontalArrangement = spacedBy(16.dp)
|
||||||
) {
|
) {
|
||||||
// Name
|
Row(
|
||||||
Text(
|
|
||||||
modifier = Modifier.weight(1f),
|
modifier = Modifier.weight(1f),
|
||||||
style = ElementTheme.typography.fontBodyLgMedium,
|
verticalAlignment = Alignment.CenterVertically,
|
||||||
text = name ?: stringResource(id = CommonStrings.common_no_room_name),
|
) {
|
||||||
fontStyle = FontStyle.Italic.takeIf { name == null },
|
// Name
|
||||||
color = ElementTheme.colors.roomListRoomName,
|
Text(
|
||||||
maxLines = 1,
|
style = ElementTheme.typography.fontBodyLgMedium,
|
||||||
overflow = TextOverflow.Ellipsis
|
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
|
// Timestamp
|
||||||
Text(
|
Text(
|
||||||
text = timestamp ?: "",
|
text = timestamp ?: "",
|
||||||
|
|
@ -274,21 +304,41 @@ private fun MessagePreviewAndIndicatorRow(
|
||||||
modifier = modifier.fillMaxWidth(),
|
modifier = modifier.fillMaxWidth(),
|
||||||
horizontalArrangement = spacedBy(28.dp)
|
horizontalArrangement = spacedBy(28.dp)
|
||||||
) {
|
) {
|
||||||
val messagePreview = if (room.isTombstoned) {
|
if (room.isTombstoned) {
|
||||||
stringResource(R.string.screen_roomlist_tombstoned_room_description)
|
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 {
|
} 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
|
// Call and unread
|
||||||
Row(
|
Row(
|
||||||
|
|
|
||||||
|
|
@ -9,6 +9,7 @@
|
||||||
package io.element.android.features.home.impl.datasource
|
package io.element.android.features.home.impl.datasource
|
||||||
|
|
||||||
import dev.zacsweers.metro.Inject
|
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.RoomListRoomSummary
|
||||||
import io.element.android.features.home.impl.model.RoomSummaryDisplayType
|
import io.element.android.features.home.impl.model.RoomSummaryDisplayType
|
||||||
import io.element.android.libraries.core.extensions.orEmpty
|
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.eventformatter.api.RoomLatestEventFormatter
|
||||||
import io.element.android.libraries.matrix.api.room.CurrentUserMembership
|
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.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.api.roomlist.RoomSummary
|
||||||
import io.element.android.libraries.matrix.ui.model.getAvatarData
|
import io.element.android.libraries.matrix.ui.model.getAvatarData
|
||||||
import io.element.android.libraries.matrix.ui.model.toInviteSender
|
import io.element.android.libraries.matrix.ui.model.toInviteSender
|
||||||
|
|
@ -44,7 +46,7 @@ class RoomListRoomSummaryFactory(
|
||||||
mode = DateFormatterMode.TimeOrDate,
|
mode = DateFormatterMode.TimeOrDate,
|
||||||
useRelative = true,
|
useRelative = true,
|
||||||
),
|
),
|
||||||
latestEvent = roomLatestEventFormatter.format(roomSummary.latestEvent, roomInfo.isDm).orEmpty(),
|
latestEvent = computeLatestEvent(roomSummary.latestEvent, roomInfo.isDm),
|
||||||
avatarData = avatarData,
|
avatarData = avatarData,
|
||||||
userDefinedNotificationMode = roomInfo.userDefinedNotificationMode,
|
userDefinedNotificationMode = roomInfo.userDefinedNotificationMode,
|
||||||
hasRoomCall = roomInfo.hasRoomCall,
|
hasRoomCall = roomInfo.hasRoomCall,
|
||||||
|
|
@ -71,4 +73,28 @@ class RoomListRoomSummaryFactory(
|
||||||
isSpace = roomInfo.isSpace,
|
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 numberOfUnreadNotifications: Long,
|
||||||
val isMarkedUnread: Boolean,
|
val isMarkedUnread: Boolean,
|
||||||
val timestamp: String?,
|
val timestamp: String?,
|
||||||
val latestEvent: CharSequence?,
|
val latestEvent: LatestEvent,
|
||||||
val avatarData: AvatarData,
|
val avatarData: AvatarData,
|
||||||
val userDefinedNotificationMode: RoomNotificationMode?,
|
val userDefinedNotificationMode: RoomNotificationMode?,
|
||||||
val hasRoomCall: Boolean,
|
val hasRoomCall: Boolean,
|
||||||
|
|
|
||||||
|
|
@ -25,12 +25,14 @@ open class RoomListRoomSummaryProvider : PreviewParameterProvider<RoomListRoomSu
|
||||||
aRoomListRoomSummary(displayType = RoomSummaryDisplayType.PLACEHOLDER),
|
aRoomListRoomSummary(displayType = RoomSummaryDisplayType.PLACEHOLDER),
|
||||||
aRoomListRoomSummary(),
|
aRoomListRoomSummary(),
|
||||||
aRoomListRoomSummary(name = null),
|
aRoomListRoomSummary(name = null),
|
||||||
aRoomListRoomSummary(lastMessage = null),
|
aRoomListRoomSummary(latestEvent = LatestEvent.None),
|
||||||
aRoomListRoomSummary(
|
aRoomListRoomSummary(
|
||||||
name = "A very long room name that should be truncated",
|
name = "A very long room name that should be truncated",
|
||||||
lastMessage = "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt" +
|
latestEvent = LatestEvent.Synced(
|
||||||
" ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea com" +
|
"Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt" +
|
||||||
"modo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur.",
|
" 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",
|
timestamp = "yesterday",
|
||||||
numberOfUnreadMessages = 1,
|
numberOfUnreadMessages = 1,
|
||||||
),
|
),
|
||||||
|
|
@ -44,7 +46,7 @@ open class RoomListRoomSummaryProvider : PreviewParameterProvider<RoomListRoomSu
|
||||||
listOf(
|
listOf(
|
||||||
aRoomListRoomSummary(
|
aRoomListRoomSummary(
|
||||||
name = roomNotificationMode.name,
|
name = roomNotificationMode.name,
|
||||||
lastMessage = "No activity" + if (hasCall) ", call" else "",
|
latestEvent = LatestEvent.Synced("No activity" + if (hasCall) ", call" else ""),
|
||||||
notificationMode = roomNotificationMode,
|
notificationMode = roomNotificationMode,
|
||||||
numberOfUnreadMessages = 0,
|
numberOfUnreadMessages = 0,
|
||||||
numberOfUnreadMentions = 0,
|
numberOfUnreadMentions = 0,
|
||||||
|
|
@ -52,7 +54,7 @@ open class RoomListRoomSummaryProvider : PreviewParameterProvider<RoomListRoomSu
|
||||||
),
|
),
|
||||||
aRoomListRoomSummary(
|
aRoomListRoomSummary(
|
||||||
name = roomNotificationMode.name,
|
name = roomNotificationMode.name,
|
||||||
lastMessage = "New messages" + if (hasCall) ", call" else "",
|
latestEvent = LatestEvent.Synced("New messages" + if (hasCall) ", call" else ""),
|
||||||
notificationMode = roomNotificationMode,
|
notificationMode = roomNotificationMode,
|
||||||
numberOfUnreadMessages = 1,
|
numberOfUnreadMessages = 1,
|
||||||
numberOfUnreadMentions = 0,
|
numberOfUnreadMentions = 0,
|
||||||
|
|
@ -60,7 +62,7 @@ open class RoomListRoomSummaryProvider : PreviewParameterProvider<RoomListRoomSu
|
||||||
),
|
),
|
||||||
aRoomListRoomSummary(
|
aRoomListRoomSummary(
|
||||||
name = roomNotificationMode.name,
|
name = roomNotificationMode.name,
|
||||||
lastMessage = "New messages, mentions" + if (hasCall) ", call" else "",
|
latestEvent = LatestEvent.Synced("New messages, mentions" + if (hasCall) ", call" else ""),
|
||||||
notificationMode = roomNotificationMode,
|
notificationMode = roomNotificationMode,
|
||||||
numberOfUnreadMessages = 1,
|
numberOfUnreadMessages = 1,
|
||||||
numberOfUnreadMentions = 1,
|
numberOfUnreadMentions = 1,
|
||||||
|
|
@ -68,7 +70,7 @@ open class RoomListRoomSummaryProvider : PreviewParameterProvider<RoomListRoomSu
|
||||||
),
|
),
|
||||||
aRoomListRoomSummary(
|
aRoomListRoomSummary(
|
||||||
name = roomNotificationMode.name,
|
name = roomNotificationMode.name,
|
||||||
lastMessage = "New mentions" + if (hasCall) ", call" else "",
|
latestEvent = LatestEvent.Synced("New mentions" + if (hasCall) ", call" else ""),
|
||||||
notificationMode = roomNotificationMode,
|
notificationMode = roomNotificationMode,
|
||||||
numberOfUnreadMessages = 0,
|
numberOfUnreadMessages = 0,
|
||||||
numberOfUnreadMentions = 1,
|
numberOfUnreadMentions = 1,
|
||||||
|
|
@ -127,6 +129,10 @@ open class RoomListRoomSummaryProvider : PreviewParameterProvider<RoomListRoomSu
|
||||||
isTombstoned = true,
|
isTombstoned = true,
|
||||||
)
|
)
|
||||||
),
|
),
|
||||||
|
listOf(
|
||||||
|
aRoomListRoomSummary(latestEvent = LatestEvent.Sending("A sending message")),
|
||||||
|
aRoomListRoomSummary(latestEvent = LatestEvent.Error),
|
||||||
|
)
|
||||||
).flatten()
|
).flatten()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -148,8 +154,8 @@ internal fun aRoomListRoomSummary(
|
||||||
numberOfUnreadMentions: Long = 0,
|
numberOfUnreadMentions: Long = 0,
|
||||||
numberOfUnreadNotifications: Long = 0,
|
numberOfUnreadNotifications: Long = 0,
|
||||||
isMarkedUnread: Boolean = false,
|
isMarkedUnread: Boolean = false,
|
||||||
lastMessage: String? = "Last message",
|
latestEvent: LatestEvent = LatestEvent.Synced("Last message"),
|
||||||
timestamp: String? = lastMessage?.let { "88:88" },
|
timestamp: String? = latestEvent.takeIf { it !is LatestEvent.None }?.let { "88:88" },
|
||||||
notificationMode: RoomNotificationMode? = null,
|
notificationMode: RoomNotificationMode? = null,
|
||||||
hasRoomCall: Boolean = false,
|
hasRoomCall: Boolean = false,
|
||||||
avatarData: AvatarData = AvatarData(id, name, size = AvatarSize.RoomListItem),
|
avatarData: AvatarData = AvatarData(id, name, size = AvatarSize.RoomListItem),
|
||||||
|
|
@ -171,7 +177,7 @@ internal fun aRoomListRoomSummary(
|
||||||
numberOfUnreadNotifications = numberOfUnreadNotifications,
|
numberOfUnreadNotifications = numberOfUnreadNotifications,
|
||||||
isMarkedUnread = isMarkedUnread,
|
isMarkedUnread = isMarkedUnread,
|
||||||
timestamp = timestamp,
|
timestamp = timestamp,
|
||||||
latestEvent = lastMessage,
|
latestEvent = latestEvent,
|
||||||
avatarData = avatarData,
|
avatarData = avatarData,
|
||||||
userDefinedNotificationMode = notificationMode,
|
userDefinedNotificationMode = notificationMode,
|
||||||
hasRoomCall = hasRoomCall,
|
hasRoomCall = hasRoomCall,
|
||||||
|
|
|
||||||
|
|
@ -11,6 +11,7 @@ package io.element.android.features.home.impl.roomlist
|
||||||
import androidx.compose.ui.tooling.preview.PreviewParameterProvider
|
import androidx.compose.ui.tooling.preview.PreviewParameterProvider
|
||||||
import io.element.android.features.home.impl.filters.RoomListFiltersState
|
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.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.RoomListRoomSummary
|
||||||
import io.element.android.features.home.impl.model.RoomSummaryDisplayType
|
import io.element.android.features.home.impl.model.RoomSummaryDisplayType
|
||||||
import io.element.android.features.home.impl.model.aRoomListRoomSummary
|
import io.element.android.features.home.impl.model.aRoomListRoomSummary
|
||||||
|
|
@ -88,7 +89,7 @@ internal fun aRoomListRoomSummaryList(): ImmutableList<RoomListRoomSummary> {
|
||||||
name = "Room",
|
name = "Room",
|
||||||
numberOfUnreadMessages = 1,
|
numberOfUnreadMessages = 1,
|
||||||
timestamp = "14:18",
|
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),
|
avatarData = AvatarData("!id", "R", size = AvatarSize.RoomListItem),
|
||||||
id = "!roomId:domain",
|
id = "!roomId:domain",
|
||||||
),
|
),
|
||||||
|
|
@ -96,7 +97,7 @@ internal fun aRoomListRoomSummaryList(): ImmutableList<RoomListRoomSummary> {
|
||||||
name = "Room#2",
|
name = "Room#2",
|
||||||
numberOfUnreadMessages = 0,
|
numberOfUnreadMessages = 0,
|
||||||
timestamp = "14:16",
|
timestamp = "14:16",
|
||||||
lastMessage = "A short message",
|
latestEvent = LatestEvent.Synced("A short message"),
|
||||||
avatarData = AvatarData("!id", "Z", size = AvatarSize.RoomListItem),
|
avatarData = AvatarData("!id", "Z", size = AvatarSize.RoomListItem),
|
||||||
id = "!roomId2:domain",
|
id = "!roomId2:domain",
|
||||||
),
|
),
|
||||||
|
|
@ -119,7 +120,7 @@ internal fun generateRoomListRoomSummaryList(
|
||||||
name = "Room#$index",
|
name = "Room#$index",
|
||||||
numberOfUnreadMessages = 0,
|
numberOfUnreadMessages = 0,
|
||||||
timestamp = "14:16",
|
timestamp = "14:16",
|
||||||
lastMessage = "A message",
|
latestEvent = LatestEvent.Synced("A message"),
|
||||||
avatarData = AvatarData("!id$index", "${(65 + index % 26).toChar()}", size = AvatarSize.RoomListItem),
|
avatarData = AvatarData("!id$index", "${(65 + index % 26).toChar()}", size = AvatarSize.RoomListItem),
|
||||||
id = "!roomId$index:domain",
|
id = "!roomId$index:domain",
|
||||||
)
|
)
|
||||||
|
|
|
||||||
|
|
@ -6,6 +6,7 @@
|
||||||
<string name="banner_set_up_recovery_content">"بازگردانی تاریخچهٔ پیامها و هویت رمزنگاشتهتان با کلید بازیابی در صورت از دست دادن همهٔ افزارههای موجودتان."</string>
|
<string name="banner_set_up_recovery_content">"بازگردانی تاریخچهٔ پیامها و هویت رمزنگاشتهتان با کلید بازیابی در صورت از دست دادن همهٔ افزارههای موجودتان."</string>
|
||||||
<string name="banner_set_up_recovery_submit">"برپایی بازیابی"</string>
|
<string name="banner_set_up_recovery_submit">"برپایی بازیابی"</string>
|
||||||
<string name="banner_set_up_recovery_title">"برپایی بازیابی"</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_primary_button_title">"ورود کلید بازیابیتان"</string>
|
||||||
<string name="confirm_recovery_key_banner_title">"ذخیرهساز کلیدتان از همگام بودن در آمده"</string>
|
<string name="confirm_recovery_key_banner_title">"ذخیرهساز کلیدتان از همگام بودن در آمده"</string>
|
||||||
<string name="full_screen_intent_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_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_submit_android">"Disabilita l\'ottimizzazione"</string>
|
||||||
<string name="banner_battery_optimization_title_android">"Le notifiche non arrivano?"</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_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_submit">"Configura il recupero"</string>
|
||||||
<string name="banner_set_up_recovery_title">"Configura il ripristino"</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_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_submit_android">"Desativar otimização"</string>
|
||||||
<string name="banner_battery_optimization_title_android">"As notificações não chegam?"</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_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_submit">"Configurar a recuperação"</string>
|
||||||
<string name="banner_set_up_recovery_title">"Configure a recuperação para proteger sua conta"</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">"Convites"</string>
|
||||||
<string name="screen_roomlist_filter_invites_empty_state_title">"Você não tem nenhum convite pendente."</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">"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_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_mixed_empty_state_title">"Você não tem conversas para esta seleção"</string>
|
||||||
<string name="screen_roomlist_filter_people">"Pessoas"</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_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="full_screen_intent_banner_title">"Qoʻngʻiroq tajribangizni yaxshilang"</string>
|
||||||
<string name="screen_home_tab_chats">"Suhbatlar"</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_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_chat_title">"Taklifni rad etish"</string>
|
||||||
<string name="screen_invites_decline_direct_chat_message">"Haqiqatan ham bu shaxsiy chatni rad qilmoqchimisiz%1$s ?"</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_message">"Bu bir martalik jarayon, kutganingiz uchun rahmat."</string>
|
||||||
<string name="screen_migration_title">"Hisobingiz sozlanmoqda."</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_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_message">"Kimgadir xabar yuborishdan boshlang."</string>
|
||||||
<string name="screen_roomlist_empty_title">"Hozircha chatlar yo‘q."</string>
|
<string name="screen_roomlist_empty_title">"Hozircha chatlar yo‘q."</string>
|
||||||
<string name="screen_roomlist_filter_favourites">"Sevimlilar"</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">"Takliflar"</string>
|
||||||
<string name="screen_roomlist_filter_invites_empty_state_title">"Sizda hech qanday kutilayotgan takliflar yoʻq."</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">"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_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_mixed_empty_state_title">"Sizda bu tanlov uchun chatlar yo‘q"</string>
|
||||||
<string name="screen_roomlist_filter_people">"Odamlar"</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_main_space_title">"Suhbatlar"</string>
|
||||||
<string name="screen_roomlist_mark_as_read">"Oʻqilgan deb belgilash"</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_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_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>
|
<string name="session_verification_banner_title">"Siz ekanligingizni tasdiqlang"</string>
|
||||||
</resources>
|
</resources>
|
||||||
|
|
|
||||||
|
|
@ -3,6 +3,8 @@
|
||||||
<string name="banner_battery_optimization_content_android">"请关闭本应用的电池优化设置,确保不错过任何消息通知。"</string>
|
<string name="banner_battery_optimization_content_android">"请关闭本应用的电池优化设置,确保不错过任何消息通知。"</string>
|
||||||
<string name="banner_battery_optimization_submit_android">"禁用优化"</string>
|
<string name="banner_battery_optimization_submit_android">"禁用优化"</string>
|
||||||
<string name="banner_battery_optimization_title_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_content">"生成新的恢复密钥,该密钥可用于在您无法访问设备时恢复加密的消息历史记录。"</string>
|
||||||
<string name="banner_set_up_recovery_submit">"设置恢复"</string>
|
<string name="banner_set_up_recovery_submit">"设置恢复"</string>
|
||||||
<string name="banner_set_up_recovery_title">"设置恢复"</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 com.google.common.truth.Truth.assertThat
|
||||||
import io.element.android.features.home.api.HomeEntryPoint
|
import io.element.android.features.home.api.HomeEntryPoint
|
||||||
import io.element.android.libraries.matrix.api.core.RoomId
|
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.libraries.matrix.test.FakeMatrixClient
|
||||||
import io.element.android.services.analytics.test.FakeAnalyticsService
|
import io.element.android.services.analytics.test.FakeAnalyticsService
|
||||||
import io.element.android.tests.testutils.lambda.lambdaError
|
import io.element.android.tests.testutils.lambda.lambdaError
|
||||||
import io.element.android.tests.testutils.node.TestParentNode
|
import io.element.android.tests.testutils.node.TestParentNode
|
||||||
|
import kotlinx.coroutines.test.runTest
|
||||||
import org.junit.Test
|
import org.junit.Test
|
||||||
import org.junit.runner.RunWith
|
import org.junit.runner.RunWith
|
||||||
|
|
||||||
@RunWith(AndroidJUnit4::class)
|
@RunWith(AndroidJUnit4::class)
|
||||||
class DefaultHomeEntryPointTest {
|
class DefaultHomeEntryPointTest {
|
||||||
@Test
|
@Test
|
||||||
fun `test node builder`() {
|
fun `test node builder`() = runTest {
|
||||||
val entryPoint = DefaultHomeEntryPoint()
|
val entryPoint = DefaultHomeEntryPoint()
|
||||||
val parentNode = TestParentNode.create { buildContext, plugins ->
|
val parentNode = TestParentNode.create { buildContext, plugins ->
|
||||||
HomeFlowNode(
|
HomeFlowNode(
|
||||||
|
|
@ -39,10 +41,11 @@ class DefaultHomeEntryPointTest {
|
||||||
declineInviteAndBlockUserEntryPoint = { _, _, _ -> lambdaError() },
|
declineInviteAndBlockUserEntryPoint = { _, _, _ -> lambdaError() },
|
||||||
changeRoomMemberRolesEntryPoint = { _, _, _, _ -> lambdaError() },
|
changeRoomMemberRolesEntryPoint = { _, _, _, _ -> lambdaError() },
|
||||||
leaveRoomRenderer = { _, _, _ -> lambdaError() },
|
leaveRoomRenderer = { _, _, _ -> lambdaError() },
|
||||||
|
sessionCoroutineScope = backgroundScope,
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
val callback = object : HomeEntryPoint.Callback {
|
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 navigateToCreateRoom() = lambdaError()
|
||||||
override fun navigateToSettings() = lambdaError()
|
override fun navigateToSettings() = lambdaError()
|
||||||
override fun navigateToSetUpRecovery() = 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.api.DateFormatter
|
||||||
import io.element.android.libraries.dateformatter.test.FakeDateFormatter
|
import io.element.android.libraries.dateformatter.test.FakeDateFormatter
|
||||||
import io.element.android.libraries.eventformatter.api.RoomLatestEventFormatter
|
import io.element.android.libraries.eventformatter.api.RoomLatestEventFormatter
|
||||||
|
import io.element.android.libraries.eventformatter.test.FakeRoomLatestEventFormatter
|
||||||
|
|
||||||
fun aRoomListRoomSummaryFactory(
|
fun aRoomListRoomSummaryFactory(
|
||||||
dateFormatter: DateFormatter = FakeDateFormatter { _, _, _ -> "Today" },
|
dateFormatter: DateFormatter = FakeDateFormatter { _, _, _ -> "Today" },
|
||||||
roomLatestEventFormatter: RoomLatestEventFormatter = RoomLatestEventFormatter { _, _ -> "Hey" }
|
roomLatestEventFormatter: RoomLatestEventFormatter = FakeRoomLatestEventFormatter(),
|
||||||
) = RoomListRoomSummaryFactory(
|
) = RoomListRoomSummaryFactory(
|
||||||
dateFormatter = dateFormatter,
|
dateFormatter = dateFormatter,
|
||||||
roomLatestEventFormatter = roomLatestEventFormatter
|
roomLatestEventFormatter = roomLatestEventFormatter,
|
||||||
)
|
)
|
||||||
|
|
|
||||||
|
|
@ -96,7 +96,7 @@ internal fun createRoomListRoomSummary(
|
||||||
numberOfUnreadNotifications = numberOfUnreadNotifications,
|
numberOfUnreadNotifications = numberOfUnreadNotifications,
|
||||||
isMarkedUnread = isMarkedUnread,
|
isMarkedUnread = isMarkedUnread,
|
||||||
timestamp = timestamp,
|
timestamp = timestamp,
|
||||||
latestEvent = "",
|
latestEvent = LatestEvent.Synced(""),
|
||||||
avatarData = AvatarData(id = A_ROOM_ID.value, name = A_ROOM_NAME, size = AvatarSize.RoomListItem),
|
avatarData = AvatarData(id = A_ROOM_ID.value, name = A_ROOM_NAME, size = AvatarSize.RoomListItem),
|
||||||
displayType = displayType,
|
displayType = displayType,
|
||||||
userDefinedNotificationMode = userDefinedNotificationMode,
|
userDefinedNotificationMode = userDefinedNotificationMode,
|
||||||
|
|
|
||||||
|
|
@ -170,7 +170,7 @@ class RoomListViewTest {
|
||||||
// Remove automatic initial events
|
// Remove automatic initial events
|
||||||
eventsRecorder.clear()
|
eventsRecorder.clear()
|
||||||
|
|
||||||
rule.onNodeWithText(room0.latestEvent!!.toString()).performClick()
|
rule.onNodeWithText(room0.latestEvent.content().toString()).performClick()
|
||||||
}
|
}
|
||||||
|
|
||||||
eventsRecorder.assertEmpty()
|
eventsRecorder.assertEmpty()
|
||||||
|
|
@ -192,7 +192,7 @@ class RoomListViewTest {
|
||||||
)
|
)
|
||||||
// Remove automatic initial events
|
// Remove automatic initial events
|
||||||
eventsRecorder.clear()
|
eventsRecorder.clear()
|
||||||
rule.onNodeWithText(room0.latestEvent!!.toString())
|
rule.onNodeWithText(room0.latestEvent.content().toString())
|
||||||
.performClick()
|
.performClick()
|
||||||
.performClick()
|
.performClick()
|
||||||
}
|
}
|
||||||
|
|
@ -214,7 +214,7 @@ class RoomListViewTest {
|
||||||
// Remove automatic initial events
|
// Remove automatic initial events
|
||||||
eventsRecorder.clear()
|
eventsRecorder.clear()
|
||||||
|
|
||||||
rule.onNodeWithText(room0.latestEvent!!.toString()).performTouchInput { longClick() }
|
rule.onNodeWithText(room0.latestEvent.content().toString()).performTouchInput { longClick() }
|
||||||
eventsRecorder.assertSingle(RoomListEvents.ShowContextMenu(room0))
|
eventsRecorder.assertSingle(RoomListEvents.ShowContextMenu(room0))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,9 @@
|
||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
|
<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_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_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_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_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_decline_direct_chat_title">"Chatni rad etish"</string>
|
||||||
<string name="screen_invites_empty_list">"Takliflar yo\'q"</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_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>
|
<string name="screen_join_room_decline_and_block_button_title">"Rad etish va bloklash"</string>
|
||||||
</resources>
|
</resources>
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,7 @@
|
||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
|
<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_by_message">"Sei stato bannato da %1$s ."</string>
|
||||||
<string name="screen_join_room_ban_message">"Sei stato bandito da questa stanza"</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_ban_reason">"Motivo: %1$s"</string>
|
||||||
<string name="screen_join_room_cancel_knock_action">"Cancella richiesta"</string>
|
<string name="screen_join_room_cancel_knock_action">"Cancella richiesta"</string>
|
||||||
<string name="screen_join_room_cancel_knock_alert_confirmation">"Sì, annulla"</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_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_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_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_message">"Partecipazione non riuscita"</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_fail_reason">"Devi essere invitato per partecipare o potrebbero esserci delle restrizioni di accesso."</string>
|
||||||
<string name="screen_join_room_forget_action">"Dimentica questa stanza"</string>
|
<string name="screen_join_room_forget_action">"Dimentica"</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_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_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_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>
|
<string name="screen_join_room_knock_action">"Bussa per partecipare"</string>
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,7 @@
|
||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
|
<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_by_message">"Você foi banido por %1$s."</string>
|
||||||
<string name="screen_join_room_ban_message">"Você foi banido desta sala"</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_ban_reason">"Motivo: %1$s."</string>
|
||||||
<string name="screen_join_room_cancel_knock_action">"Cancelar pedido"</string>
|
<string name="screen_join_room_cancel_knock_action">"Cancelar pedido"</string>
|
||||||
<string name="screen_join_room_cancel_knock_alert_confirmation">"Sim, cancelar"</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_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_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_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_message">"Falha ao entrar"</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_fail_reason">"Você precisa ser convidado ou pode haver restrições ao acesso."</string>
|
||||||
<string name="screen_join_room_forget_action">"Esquecer esta sala"</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 nesta sala"</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_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_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>
|
<string name="screen_join_room_knock_action">"Enviar solicitação para entrar"</string>
|
||||||
|
|
|
||||||
|
|
@ -1,15 +1,29 @@
|
||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
|
<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_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_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_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_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_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_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_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_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_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_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_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_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>
|
<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"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
|
<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_by_message">"您已被禁止访问%1$s。"</string>
|
||||||
<string name="screen_join_room_ban_message">"你已被此房间封禁"</string>
|
<string name="screen_join_room_ban_message">"你已被禁止访问"</string>
|
||||||
<string name="screen_join_room_ban_reason">"理由:%1$s。"</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_action">"取消请求"</string>
|
||||||
<string name="screen_join_room_cancel_knock_alert_confirmation">"是的,取消"</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_message">"您确定要拒绝加入此房间的邀请吗?这也将阻止%1$s 与您联系或邀请您加入房间。"</string>
|
||||||
<string name="screen_join_room_decline_and_block_alert_title">"拒绝邀请并屏蔽"</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_decline_and_block_button_title">"拒绝并屏蔽"</string>
|
||||||
<string name="screen_join_room_fail_message">"加入房间失败。"</string>
|
<string name="screen_join_room_fail_message">"加入失败"</string>
|
||||||
<string name="screen_join_room_fail_reason">"要么此房间仅限受邀者,要么可能在空间层级有加入限制。"</string>
|
<string name="screen_join_room_fail_reason">"您需要被邀请加入,否则可能会受到访问限制。"</string>
|
||||||
<string name="screen_join_room_forget_action">"忘记这个房间"</string>
|
<string name="screen_join_room_forget_action">"忘记"</string>
|
||||||
<string name="screen_join_room_invite_required_message">"你需要邀请才能加入这个房间"</string>
|
<string name="screen_join_room_invite_required_message">"您需要邀请才能加入"</string>
|
||||||
<string name="screen_join_room_invited_by">"受邀于"</string>
|
<string name="screen_join_room_invited_by">"受邀于"</string>
|
||||||
<string name="screen_join_room_join_action">"加入"</string>
|
<string name="screen_join_room_join_action">"加入"</string>
|
||||||
<string name="screen_join_room_join_restricted_message">"您可能需要受到邀请或成为某个空间的成员才能加入。"</string>
|
<string name="screen_join_room_join_restricted_message">"您可能需要受到邀请或成为某个空间的成员才能加入。"</string>
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,36 @@
|
||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
|
<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_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>
|
<string name="screen_room_single_knock_request_view_button_title">"Ko\'rish"</string>
|
||||||
</resources>
|
</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_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_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_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>
|
<string name="leave_room_alert_subtitle">"Xonani tark etmoqchi ekanligingizga ishonchingiz komilmi?"</string>
|
||||||
</resources>
|
</resources>
|
||||||
|
|
|
||||||
|
|
@ -24,6 +24,14 @@
|
||||||
<string name="screen_app_lock_setup_pin_mismatch_dialog_title">"پینها مطابق نیستند"</string>
|
<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_message">"برای ادامه باید دوباره وارد شده و پینی جدید ایجاد کنید"</string>
|
||||||
<string name="screen_app_lock_signout_alert_title">"دارید خارج میشوید"</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_biometric_android">"استفاده از زیستسنجی"</string>
|
||||||
<string name="screen_app_lock_use_pin_android">"استفاده از پین"</string>
|
<string name="screen_app_lock_use_pin_android">"استفاده از پین"</string>
|
||||||
<string name="screen_signout_in_progress_dialog_content">"خارج شدن…"</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_authentication">"biometrik autentifikatsiya"</string>
|
||||||
<string name="screen_app_lock_biometric_unlock">"biometrik qulf ochish"</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_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_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_change_pin">"PIN kodni o\'zgartirish"</string>
|
||||||
<string name="screen_app_lock_settings_enable_biometric_unlock">"Biometrik qulfni ochishga ruxsat bering"</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_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_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_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_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_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_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_subtitle">"Serveringizning manzili nima?"</string>
|
||||||
<string name="screen_change_server_title">"Serveringizni tanlang"</string>
|
<string name="screen_change_server_title">"Serveringizni tanlang"</string>
|
||||||
<string name="screen_create_account_title">"Hisob yaratish"</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_subtitle">"Matrix xavfsiz, markazlashmagan aloqa uchun ochiq tarmoqdir."</string>
|
||||||
<string name="screen_login_title">"Qaytib kelganingizdan xursandmiz!"</string>
|
<string name="screen_login_title">"Qaytib kelganingizdan xursandmiz!"</string>
|
||||||
<string name="screen_login_title_with_homeserver">"Kirish%1$s"</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_manually">"Qo\'lda tizimga kiring"</string>
|
||||||
<string name="screen_onboarding_sign_in_to">"Kirish%1$s"</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>
|
<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_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_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_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>
|
<string name="screen_server_confirmation_title_register">"Hisob yaratmoqchisiz%1$s"</string>
|
||||||
</resources>
|
</resources>
|
||||||
|
|
|
||||||
|
|
@ -6,6 +6,7 @@
|
||||||
<string name="screen_signout_in_progress_dialog_content">"خارج شدن…"</string>
|
<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_subtitle">"دارید از واپسین نشستتان خارج میشوید. اگر اکنون خارج شوید پیامهای رمزنگاشتهتان را از دست خواهید داد."</string>
|
||||||
<string name="screen_signout_key_backup_disabled_title">"پشتیبان را خاموش کردهاید"</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_offline_title">"کلیدهایتان هنوز در حال پشتیبان گیریند"</string>
|
||||||
<string name="screen_signout_key_backup_ongoing_subtitle">"لطفاً پیش از خروج منتظر پایانش شوید."</string>
|
<string name="screen_signout_key_backup_ongoing_subtitle">"لطفاً پیش از خروج منتظر پایانش شوید."</string>
|
||||||
<string name="screen_signout_key_backup_ongoing_title">"کلیدهایتان هنوز در حال پشتیبان گیریند"</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.VoiceMessagePlayerEvent
|
||||||
import io.element.android.libraries.textcomposer.model.VoiceMessageRecorderEvent
|
import io.element.android.libraries.textcomposer.model.VoiceMessageRecorderEvent
|
||||||
|
|
||||||
sealed interface VoiceMessageComposerEvents {
|
sealed interface VoiceMessageComposerEvent {
|
||||||
data class RecorderEvent(
|
data class RecorderEvent(
|
||||||
val recorderEvent: VoiceMessageRecorderEvent
|
val recorderEvent: VoiceMessageRecorderEvent
|
||||||
) : VoiceMessageComposerEvents
|
) : VoiceMessageComposerEvent
|
||||||
data class PlayerEvent(
|
data class PlayerEvent(
|
||||||
val playerEvent: VoiceMessagePlayerEvent,
|
val playerEvent: VoiceMessagePlayerEvent,
|
||||||
) : VoiceMessageComposerEvents
|
) : VoiceMessageComposerEvent
|
||||||
data object SendVoiceMessage : VoiceMessageComposerEvents
|
data object SendVoiceMessage : VoiceMessageComposerEvent
|
||||||
data object DeleteVoiceMessage : VoiceMessageComposerEvents
|
data object DeleteVoiceMessage : VoiceMessageComposerEvent
|
||||||
data object AcceptPermissionRationale : VoiceMessageComposerEvents
|
data object AcceptPermissionRationale : VoiceMessageComposerEvent
|
||||||
data object DismissPermissionsRationale : VoiceMessageComposerEvents
|
data object DismissPermissionsRationale : VoiceMessageComposerEvent
|
||||||
data class LifecycleEvent(val event: Lifecycle.Event) : VoiceMessageComposerEvents
|
data class LifecycleEvent(val event: Lifecycle.Event) : VoiceMessageComposerEvent
|
||||||
data object DismissSendFailureDialog : VoiceMessageComposerEvents
|
data object DismissSendFailureDialog : VoiceMessageComposerEvent
|
||||||
}
|
}
|
||||||
|
|
@ -17,5 +17,5 @@ data class VoiceMessageComposerState(
|
||||||
val showPermissionRationaleDialog: Boolean,
|
val showPermissionRationaleDialog: Boolean,
|
||||||
val showSendFailureDialog: Boolean,
|
val showSendFailureDialog: Boolean,
|
||||||
val keepScreenOn: 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.tooling.preview.PreviewParameter
|
||||||
import androidx.compose.ui.unit.dp
|
import androidx.compose.ui.unit.dp
|
||||||
import io.element.android.compound.theme.ElementTheme
|
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.ActionListEvents
|
||||||
import io.element.android.features.messages.impl.actionlist.ActionListView
|
import io.element.android.features.messages.impl.actionlist.ActionListView
|
||||||
import io.element.android.features.messages.impl.actionlist.model.TimelineItemAction
|
import io.element.android.features.messages.impl.actionlist.model.TimelineItemAction
|
||||||
|
|
@ -126,7 +126,7 @@ fun MessagesView(
|
||||||
knockRequestsBannerView: @Composable () -> Unit,
|
knockRequestsBannerView: @Composable () -> Unit,
|
||||||
) {
|
) {
|
||||||
OnLifecycleEvent { _, event ->
|
OnLifecycleEvent { _, event ->
|
||||||
state.voiceMessageComposerState.eventSink(VoiceMessageComposerEvents.LifecycleEvent(event))
|
state.voiceMessageComposerState.eventSink(VoiceMessageComposerEvent.LifecycleEvent(event))
|
||||||
}
|
}
|
||||||
|
|
||||||
KeepScreenOn(state.voiceMessageComposerState.keepScreenOn)
|
KeepScreenOn(state.voiceMessageComposerState.keepScreenOn)
|
||||||
|
|
@ -413,17 +413,17 @@ private fun MessagesViewContent(
|
||||||
if (state.voiceMessageComposerState.showPermissionRationaleDialog) {
|
if (state.voiceMessageComposerState.showPermissionRationaleDialog) {
|
||||||
VoiceMessagePermissionRationaleDialog(
|
VoiceMessagePermissionRationaleDialog(
|
||||||
onContinue = {
|
onContinue = {
|
||||||
state.voiceMessageComposerState.eventSink(VoiceMessageComposerEvents.AcceptPermissionRationale)
|
state.voiceMessageComposerState.eventSink(VoiceMessageComposerEvent.AcceptPermissionRationale)
|
||||||
},
|
},
|
||||||
onDismiss = {
|
onDismiss = {
|
||||||
state.voiceMessageComposerState.eventSink(VoiceMessageComposerEvents.DismissPermissionsRationale)
|
state.voiceMessageComposerState.eventSink(VoiceMessageComposerEvent.DismissPermissionsRationale)
|
||||||
},
|
},
|
||||||
appName = state.appName
|
appName = state.appName
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
if (state.voiceMessageComposerState.showSendFailureDialog) {
|
if (state.voiceMessageComposerState.showSendFailureDialog) {
|
||||||
VoiceMessageSendingFailedDialog(
|
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.platform.LocalView
|
||||||
import androidx.compose.ui.tooling.preview.PreviewParameter
|
import androidx.compose.ui.tooling.preview.PreviewParameter
|
||||||
import androidx.compose.ui.unit.dp
|
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.VoiceMessageComposerState
|
||||||
import io.element.android.features.messages.api.timeline.voicemessages.composer.VoiceMessageComposerStateProvider
|
import io.element.android.features.messages.api.timeline.voicemessages.composer.VoiceMessageComposerStateProvider
|
||||||
import io.element.android.features.messages.api.timeline.voicemessages.composer.aVoiceMessageComposerState
|
import io.element.android.features.messages.api.timeline.voicemessages.composer.aVoiceMessageComposerState
|
||||||
|
|
@ -78,19 +78,19 @@ internal fun MessageComposerView(
|
||||||
}
|
}
|
||||||
|
|
||||||
val onVoiceRecorderEvent = { press: VoiceMessageRecorderEvent ->
|
val onVoiceRecorderEvent = { press: VoiceMessageRecorderEvent ->
|
||||||
voiceMessageState.eventSink(VoiceMessageComposerEvents.RecorderEvent(press))
|
voiceMessageState.eventSink(VoiceMessageComposerEvent.RecorderEvent(press))
|
||||||
}
|
}
|
||||||
|
|
||||||
val onSendVoiceMessage = {
|
val onSendVoiceMessage = {
|
||||||
voiceMessageState.eventSink(VoiceMessageComposerEvents.SendVoiceMessage)
|
voiceMessageState.eventSink(VoiceMessageComposerEvent.SendVoiceMessage)
|
||||||
}
|
}
|
||||||
|
|
||||||
val onDeleteVoiceMessage = {
|
val onDeleteVoiceMessage = {
|
||||||
voiceMessageState.eventSink(VoiceMessageComposerEvents.DeleteVoiceMessage)
|
voiceMessageState.eventSink(VoiceMessageComposerEvent.DeleteVoiceMessage)
|
||||||
}
|
}
|
||||||
|
|
||||||
val onVoicePlayerEvent = { event: VoiceMessagePlayerEvent ->
|
val onVoicePlayerEvent = { event: VoiceMessagePlayerEvent ->
|
||||||
voiceMessageState.eventSink(VoiceMessageComposerEvents.PlayerEvent(event))
|
voiceMessageState.eventSink(VoiceMessageComposerEvent.PlayerEvent(event))
|
||||||
}
|
}
|
||||||
|
|
||||||
TextComposer(
|
TextComposer(
|
||||||
|
|
|
||||||
|
|
@ -65,6 +65,7 @@ import kotlinx.collections.immutable.persistentListOf
|
||||||
import kotlinx.coroutines.CoroutineScope
|
import kotlinx.coroutines.CoroutineScope
|
||||||
import kotlinx.coroutines.delay
|
import kotlinx.coroutines.delay
|
||||||
import kotlinx.coroutines.flow.combine
|
import kotlinx.coroutines.flow.combine
|
||||||
|
import kotlinx.coroutines.flow.flowOn
|
||||||
import kotlinx.coroutines.flow.launchIn
|
import kotlinx.coroutines.flow.launchIn
|
||||||
import kotlinx.coroutines.flow.onEach
|
import kotlinx.coroutines.flow.onEach
|
||||||
import kotlinx.coroutines.launch
|
import kotlinx.coroutines.launch
|
||||||
|
|
@ -261,6 +262,7 @@ class TimelinePresenter(
|
||||||
items
|
items
|
||||||
}
|
}
|
||||||
.onEach(redactedVoiceMessageManager::onEachMatrixTimelineItem)
|
.onEach(redactedVoiceMessageManager::onEachMatrixTimelineItem)
|
||||||
|
.flowOn(dispatchers.computation)
|
||||||
.launchIn(this)
|
.launchIn(this)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -26,7 +26,7 @@ import dev.zacsweers.metro.AssistedInject
|
||||||
import dev.zacsweers.metro.ContributesBinding
|
import dev.zacsweers.metro.ContributesBinding
|
||||||
import im.vector.app.features.analytics.plan.Composer
|
import im.vector.app.features.analytics.plan.Composer
|
||||||
import io.element.android.features.messages.api.MessageComposerContext
|
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.VoiceMessageComposerPresenter
|
||||||
import io.element.android.features.messages.api.timeline.voicemessages.composer.VoiceMessageComposerState
|
import io.element.android.features.messages.api.timeline.voicemessages.composer.VoiceMessageComposerState
|
||||||
import io.element.android.libraries.di.RoomScope
|
import io.element.android.libraries.di.RoomScope
|
||||||
|
|
@ -164,25 +164,25 @@ class DefaultVoiceMessageComposerPresenter(
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fun handleEvent(event: VoiceMessageComposerEvents) {
|
fun handleEvent(event: VoiceMessageComposerEvent) {
|
||||||
when (event) {
|
when (event) {
|
||||||
is VoiceMessageComposerEvents.RecorderEvent -> handleVoiceMessageRecorderEvent(event.recorderEvent)
|
is VoiceMessageComposerEvent.RecorderEvent -> handleVoiceMessageRecorderEvent(event.recorderEvent)
|
||||||
is VoiceMessageComposerEvents.PlayerEvent -> handleVoiceMessagePlayerEvent(event.playerEvent)
|
is VoiceMessageComposerEvent.PlayerEvent -> handleVoiceMessagePlayerEvent(event.playerEvent)
|
||||||
is VoiceMessageComposerEvents.SendVoiceMessage -> localCoroutineScope.launch {
|
is VoiceMessageComposerEvent.SendVoiceMessage -> localCoroutineScope.launch {
|
||||||
sendVoiceMessage()
|
sendVoiceMessage()
|
||||||
}
|
}
|
||||||
VoiceMessageComposerEvents.DeleteVoiceMessage -> {
|
VoiceMessageComposerEvent.DeleteVoiceMessage -> {
|
||||||
player.pause()
|
player.pause()
|
||||||
localCoroutineScope.deleteRecording()
|
localCoroutineScope.deleteRecording()
|
||||||
}
|
}
|
||||||
VoiceMessageComposerEvents.DismissPermissionsRationale -> {
|
VoiceMessageComposerEvent.DismissPermissionsRationale -> {
|
||||||
permissionState.eventSink(PermissionsEvents.CloseDialog)
|
permissionState.eventSink(PermissionsEvents.CloseDialog)
|
||||||
}
|
}
|
||||||
VoiceMessageComposerEvents.AcceptPermissionRationale -> {
|
VoiceMessageComposerEvent.AcceptPermissionRationale -> {
|
||||||
permissionState.eventSink(PermissionsEvents.OpenSystemSettingAndCloseDialog)
|
permissionState.eventSink(PermissionsEvents.OpenSystemSettingAndCloseDialog)
|
||||||
}
|
}
|
||||||
is VoiceMessageComposerEvents.LifecycleEvent -> handleLifecycleEvent(event.event)
|
is VoiceMessageComposerEvent.LifecycleEvent -> handleLifecycleEvent(event.event)
|
||||||
VoiceMessageComposerEvents.DismissSendFailureDialog -> {
|
VoiceMessageComposerEvent.DismissSendFailureDialog -> {
|
||||||
showSendFailureDialog = false
|
showSendFailureDialog = false
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -192,7 +192,10 @@ class DefaultVoiceMessageComposerPresenter(
|
||||||
voiceMessageState = when (val state = recorderState) {
|
voiceMessageState = when (val state = recorderState) {
|
||||||
is VoiceRecorderState.Recording -> VoiceMessageState.Recording(
|
is VoiceRecorderState.Recording -> VoiceMessageState.Recording(
|
||||||
duration = state.elapsedTime,
|
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 ->
|
is VoiceRecorderState.Finished ->
|
||||||
previewState(
|
previewState(
|
||||||
|
|
|
||||||
|
|
@ -42,6 +42,10 @@
|
||||||
<string name="screen_room_timeline_reactions_show_more">"نمایش بیشتر"</string>
|
<string name="screen_room_timeline_reactions_show_more">"نمایش بیشتر"</string>
|
||||||
<string name="screen_room_timeline_reactions_show_reactions_summary">"نمایش خلاصهٔ واکنشها"</string>
|
<string name="screen_room_timeline_reactions_show_reactions_summary">"نمایش خلاصهٔ واکنشها"</string>
|
||||||
<string name="screen_room_timeline_read_marker_title">"جدید"</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_action">"پرش به اتاق جدید"</string>
|
||||||
<string name="screen_room_timeline_tombstoned_room_message">"این اتاق جایگزین شده و دیگر فعّال نیست"</string>
|
<string name="screen_room_timeline_tombstoned_room_message">"این اتاق جایگزین شده و دیگر فعّال نیست"</string>
|
||||||
<string name="screen_room_timeline_upgraded_room_action">"دیدن پیامهای قدیمی"</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_objects">"Oggetti"</string>
|
||||||
<string name="emoji_picker_category_people">"Faccine & Persone"</string>
|
<string name="emoji_picker_category_people">"Faccine & Persone"</string>
|
||||||
<string name="emoji_picker_category_places">"Viaggi & Luoghi"</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="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_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>
|
<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_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_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_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_optimize_image_quality_title">"Ottimizza la qualità delle immagini"</string>
|
||||||
<string name="screen_media_upload_preview_processing">"Elaborazione…"</string>
|
<string name="screen_media_upload_preview_processing">"Elaborazione…"</string>
|
||||||
<string name="screen_report_content_block_user">"Blocca utente"</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_objects">"Objetos"</string>
|
||||||
<string name="emoji_picker_category_people">"Sorrisos & Pessoas"</string>
|
<string name="emoji_picker_category_people">"Sorrisos & Pessoas"</string>
|
||||||
<string name="emoji_picker_category_places">"Viagens & Lugares"</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="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_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_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_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_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_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_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">"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_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>
|
<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_people">"Smayllar va odamlar"</string>
|
||||||
<string name="emoji_picker_category_places">"Sayohat va Joylar"</string>
|
<string name="emoji_picker_category_places">"Sayohat va Joylar"</string>
|
||||||
<string name="emoji_picker_category_symbols">"Belgilar"</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_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_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">"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_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>
|
<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_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">"Bu %1$sni boshlanishi"</string>
|
||||||
<string name="screen_room_timeline_beginning_of_room_no_name">"Bu suhbatning 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_less_reactions">"Kamroq ko\'rsatish"</string>
|
||||||
<string name="screen_room_timeline_message_copied">"Xabar nusxalandi"</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>
|
<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_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_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>
|
<string name="screen_room_timeline_read_marker_title">"Yangi"</string>
|
||||||
<plurals name="screen_room_timeline_state_changes">
|
<plurals name="screen_room_timeline_state_changes">
|
||||||
<item quantity="one">"%1$dxonani almashtirish"</item>
|
<item quantity="one">"%1$dxonani almashtirish"</item>
|
||||||
<item quantity="other">"%1$dxona o\'zgarishi"</item>
|
<item quantity="other">"%1$dxona o\'zgarishi"</item>
|
||||||
</plurals>
|
</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">
|
<plurals name="screen_room_typing_many_members">
|
||||||
<item quantity="one">"%1$s, %2$s va %3$d boshqalar"</item>
|
<item quantity="one">"%1$s, %2$s va %3$d boshqalar"</item>
|
||||||
<item quantity="other">"%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 android.Manifest
|
||||||
import androidx.lifecycle.Lifecycle
|
import androidx.lifecycle.Lifecycle
|
||||||
import app.cash.molecule.RecompositionMode
|
|
||||||
import app.cash.molecule.moleculeFlow
|
|
||||||
import app.cash.turbine.TurbineTestContext
|
import app.cash.turbine.TurbineTestContext
|
||||||
import app.cash.turbine.test
|
|
||||||
import com.google.common.truth.Truth.assertThat
|
import com.google.common.truth.Truth.assertThat
|
||||||
import im.vector.app.features.analytics.plan.Composer
|
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.api.timeline.voicemessages.composer.VoiceMessageComposerState
|
||||||
import io.element.android.features.messages.impl.messagecomposer.aReplyMode
|
import io.element.android.features.messages.impl.messagecomposer.aReplyMode
|
||||||
import io.element.android.features.messages.test.FakeMessageComposerContext
|
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.VoiceMessageRecorderEvent
|
||||||
import io.element.android.libraries.textcomposer.model.VoiceMessageState
|
import io.element.android.libraries.textcomposer.model.VoiceMessageState
|
||||||
import io.element.android.libraries.voiceplayer.api.VoiceMessageException
|
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.libraries.voicerecorder.test.FakeVoiceRecorder
|
||||||
import io.element.android.services.analytics.test.FakeAnalyticsService
|
import io.element.android.services.analytics.test.FakeAnalyticsService
|
||||||
import io.element.android.tests.testutils.WarmUpRule
|
import io.element.android.tests.testutils.WarmUpRule
|
||||||
import io.element.android.tests.testutils.lambda.lambdaRecorder
|
import io.element.android.tests.testutils.lambda.lambdaRecorder
|
||||||
|
import io.element.android.tests.testutils.test
|
||||||
import kotlinx.collections.immutable.toImmutableList
|
import kotlinx.collections.immutable.toImmutableList
|
||||||
import kotlinx.coroutines.ExperimentalCoroutinesApi
|
import kotlinx.coroutines.ExperimentalCoroutinesApi
|
||||||
import kotlinx.coroutines.test.TestScope
|
import kotlinx.coroutines.test.TestScope
|
||||||
|
|
@ -57,7 +56,7 @@ import java.io.File
|
||||||
import kotlin.time.Duration
|
import kotlin.time.Duration
|
||||||
import kotlin.time.Duration.Companion.seconds
|
import kotlin.time.Duration.Companion.seconds
|
||||||
|
|
||||||
class VoiceMessageComposerPresenterTest {
|
class DefaultVoiceMessageComposerPresenterTest {
|
||||||
@get:Rule
|
@get:Rule
|
||||||
val warmUpRule = WarmUpRule()
|
val warmUpRule = WarmUpRule()
|
||||||
|
|
||||||
|
|
@ -91,9 +90,7 @@ class VoiceMessageComposerPresenterTest {
|
||||||
@Test
|
@Test
|
||||||
fun `present - initial state`() = runTest {
|
fun `present - initial state`() = runTest {
|
||||||
val presenter = createDefaultVoiceMessageComposerPresenter()
|
val presenter = createDefaultVoiceMessageComposerPresenter()
|
||||||
moleculeFlow(RecompositionMode.Immediate) {
|
presenter.test {
|
||||||
presenter.present()
|
|
||||||
}.test {
|
|
||||||
val initialState = awaitItem()
|
val initialState = awaitItem()
|
||||||
assertThat(initialState.voiceMessageState).isEqualTo(VoiceMessageState.Idle)
|
assertThat(initialState.voiceMessageState).isEqualTo(VoiceMessageState.Idle)
|
||||||
voiceRecorder.assertCalls(started = 0)
|
voiceRecorder.assertCalls(started = 0)
|
||||||
|
|
@ -105,10 +102,8 @@ class VoiceMessageComposerPresenterTest {
|
||||||
@Test
|
@Test
|
||||||
fun `present - recording state`() = runTest {
|
fun `present - recording state`() = runTest {
|
||||||
val presenter = createDefaultVoiceMessageComposerPresenter()
|
val presenter = createDefaultVoiceMessageComposerPresenter()
|
||||||
moleculeFlow(RecompositionMode.Immediate) {
|
presenter.test {
|
||||||
presenter.present()
|
awaitItem().eventSink(VoiceMessageComposerEvent.RecorderEvent(VoiceMessageRecorderEvent.Start))
|
||||||
}.test {
|
|
||||||
awaitItem().eventSink(VoiceMessageComposerEvents.RecorderEvent(VoiceMessageRecorderEvent.Start))
|
|
||||||
|
|
||||||
val finalState = awaitItem()
|
val finalState = awaitItem()
|
||||||
assertThat(finalState.voiceMessageState).isEqualTo(RECORDING_STATE)
|
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
|
@Test
|
||||||
fun `present - recording keeps screen on`() = runTest {
|
fun `present - recording keeps screen on`() = runTest {
|
||||||
val presenter = createDefaultVoiceMessageComposerPresenter()
|
val presenter = createDefaultVoiceMessageComposerPresenter()
|
||||||
moleculeFlow(RecompositionMode.Immediate) {
|
presenter.test {
|
||||||
presenter.present()
|
|
||||||
}.test {
|
|
||||||
awaitItem().apply {
|
awaitItem().apply {
|
||||||
eventSink(VoiceMessageComposerEvents.RecorderEvent(VoiceMessageRecorderEvent.Start))
|
eventSink(VoiceMessageComposerEvent.RecorderEvent(VoiceMessageRecorderEvent.Start))
|
||||||
assertThat(keepScreenOn).isFalse()
|
assertThat(keepScreenOn).isFalse()
|
||||||
}
|
}
|
||||||
|
|
||||||
awaitItem().apply {
|
awaitItem().apply {
|
||||||
assertThat(keepScreenOn).isTrue()
|
assertThat(keepScreenOn).isTrue()
|
||||||
eventSink(VoiceMessageComposerEvents.RecorderEvent(VoiceMessageRecorderEvent.Stop))
|
eventSink(VoiceMessageComposerEvent.RecorderEvent(VoiceMessageRecorderEvent.Stop))
|
||||||
}
|
}
|
||||||
|
|
||||||
val finalState = awaitItem().apply {
|
val finalState = awaitItem().apply {
|
||||||
|
|
@ -145,11 +162,9 @@ class VoiceMessageComposerPresenterTest {
|
||||||
@Test
|
@Test
|
||||||
fun `present - abort recording`() = runTest {
|
fun `present - abort recording`() = runTest {
|
||||||
val presenter = createDefaultVoiceMessageComposerPresenter()
|
val presenter = createDefaultVoiceMessageComposerPresenter()
|
||||||
moleculeFlow(RecompositionMode.Immediate) {
|
presenter.test {
|
||||||
presenter.present()
|
awaitItem().eventSink(VoiceMessageComposerEvent.RecorderEvent(VoiceMessageRecorderEvent.Start))
|
||||||
}.test {
|
awaitItem().eventSink(VoiceMessageComposerEvent.RecorderEvent(VoiceMessageRecorderEvent.Cancel))
|
||||||
awaitItem().eventSink(VoiceMessageComposerEvents.RecorderEvent(VoiceMessageRecorderEvent.Start))
|
|
||||||
awaitItem().eventSink(VoiceMessageComposerEvents.RecorderEvent(VoiceMessageRecorderEvent.Cancel))
|
|
||||||
val finalState = awaitItem()
|
val finalState = awaitItem()
|
||||||
assertThat(finalState.voiceMessageState).isEqualTo(VoiceMessageState.Idle)
|
assertThat(finalState.voiceMessageState).isEqualTo(VoiceMessageState.Idle)
|
||||||
voiceRecorder.assertCalls(started = 1, stopped = 1, deleted = 1)
|
voiceRecorder.assertCalls(started = 1, stopped = 1, deleted = 1)
|
||||||
|
|
@ -160,11 +175,9 @@ class VoiceMessageComposerPresenterTest {
|
||||||
@Test
|
@Test
|
||||||
fun `present - finish recording`() = runTest {
|
fun `present - finish recording`() = runTest {
|
||||||
val presenter = createDefaultVoiceMessageComposerPresenter()
|
val presenter = createDefaultVoiceMessageComposerPresenter()
|
||||||
moleculeFlow(RecompositionMode.Immediate) {
|
presenter.test {
|
||||||
presenter.present()
|
awaitItem().eventSink(VoiceMessageComposerEvent.RecorderEvent(VoiceMessageRecorderEvent.Start))
|
||||||
}.test {
|
awaitItem().eventSink(VoiceMessageComposerEvent.RecorderEvent(VoiceMessageRecorderEvent.Stop))
|
||||||
awaitItem().eventSink(VoiceMessageComposerEvents.RecorderEvent(VoiceMessageRecorderEvent.Start))
|
|
||||||
awaitItem().eventSink(VoiceMessageComposerEvents.RecorderEvent(VoiceMessageRecorderEvent.Stop))
|
|
||||||
|
|
||||||
val finalState = awaitItem()
|
val finalState = awaitItem()
|
||||||
assertThat(finalState.voiceMessageState).isEqualTo(aPreviewState())
|
assertThat(finalState.voiceMessageState).isEqualTo(aPreviewState())
|
||||||
|
|
@ -177,12 +190,10 @@ class VoiceMessageComposerPresenterTest {
|
||||||
@Test
|
@Test
|
||||||
fun `present - play recording before it is ready`() = runTest {
|
fun `present - play recording before it is ready`() = runTest {
|
||||||
val presenter = createDefaultVoiceMessageComposerPresenter()
|
val presenter = createDefaultVoiceMessageComposerPresenter()
|
||||||
moleculeFlow(RecompositionMode.Immediate) {
|
presenter.test {
|
||||||
presenter.present()
|
awaitItem().eventSink(VoiceMessageComposerEvent.RecorderEvent(VoiceMessageRecorderEvent.Start))
|
||||||
}.test {
|
|
||||||
awaitItem().eventSink(VoiceMessageComposerEvents.RecorderEvent(VoiceMessageRecorderEvent.Start))
|
|
||||||
val finalState = awaitItem().apply {
|
val finalState = awaitItem().apply {
|
||||||
this.eventSink(VoiceMessageComposerEvents.PlayerEvent(VoiceMessagePlayerEvent.Play))
|
this.eventSink(VoiceMessageComposerEvent.PlayerEvent(VoiceMessagePlayerEvent.Play))
|
||||||
}
|
}
|
||||||
|
|
||||||
// Nothing should happen
|
// Nothing should happen
|
||||||
|
|
@ -196,12 +207,10 @@ class VoiceMessageComposerPresenterTest {
|
||||||
@Test
|
@Test
|
||||||
fun `present - play recording`() = runTest {
|
fun `present - play recording`() = runTest {
|
||||||
val presenter = createDefaultVoiceMessageComposerPresenter()
|
val presenter = createDefaultVoiceMessageComposerPresenter()
|
||||||
moleculeFlow(RecompositionMode.Immediate) {
|
presenter.test {
|
||||||
presenter.present()
|
awaitItem().eventSink(VoiceMessageComposerEvent.RecorderEvent(VoiceMessageRecorderEvent.Start))
|
||||||
}.test {
|
awaitItem().eventSink(VoiceMessageComposerEvent.RecorderEvent(VoiceMessageRecorderEvent.Stop))
|
||||||
awaitItem().eventSink(VoiceMessageComposerEvents.RecorderEvent(VoiceMessageRecorderEvent.Start))
|
awaitItem().eventSink(VoiceMessageComposerEvent.PlayerEvent(VoiceMessagePlayerEvent.Play))
|
||||||
awaitItem().eventSink(VoiceMessageComposerEvents.RecorderEvent(VoiceMessageRecorderEvent.Stop))
|
|
||||||
awaitItem().eventSink(VoiceMessageComposerEvents.PlayerEvent(VoiceMessagePlayerEvent.Play))
|
|
||||||
val finalState = awaitItem().also {
|
val finalState = awaitItem().also {
|
||||||
assertThat(it.voiceMessageState).isEqualTo(aPlayingState())
|
assertThat(it.voiceMessageState).isEqualTo(aPlayingState())
|
||||||
}
|
}
|
||||||
|
|
@ -214,13 +223,11 @@ class VoiceMessageComposerPresenterTest {
|
||||||
@Test
|
@Test
|
||||||
fun `present - pause recording`() = runTest {
|
fun `present - pause recording`() = runTest {
|
||||||
val presenter = createDefaultVoiceMessageComposerPresenter()
|
val presenter = createDefaultVoiceMessageComposerPresenter()
|
||||||
moleculeFlow(RecompositionMode.Immediate) {
|
presenter.test {
|
||||||
presenter.present()
|
awaitItem().eventSink(VoiceMessageComposerEvent.RecorderEvent(VoiceMessageRecorderEvent.Start))
|
||||||
}.test {
|
awaitItem().eventSink(VoiceMessageComposerEvent.RecorderEvent(VoiceMessageRecorderEvent.Stop))
|
||||||
awaitItem().eventSink(VoiceMessageComposerEvents.RecorderEvent(VoiceMessageRecorderEvent.Start))
|
awaitItem().eventSink(VoiceMessageComposerEvent.PlayerEvent(VoiceMessagePlayerEvent.Play))
|
||||||
awaitItem().eventSink(VoiceMessageComposerEvents.RecorderEvent(VoiceMessageRecorderEvent.Stop))
|
awaitItem().eventSink(VoiceMessageComposerEvent.PlayerEvent(VoiceMessagePlayerEvent.Pause))
|
||||||
awaitItem().eventSink(VoiceMessageComposerEvents.PlayerEvent(VoiceMessagePlayerEvent.Play))
|
|
||||||
awaitItem().eventSink(VoiceMessageComposerEvents.PlayerEvent(VoiceMessagePlayerEvent.Pause))
|
|
||||||
val finalState = awaitItem().also {
|
val finalState = awaitItem().also {
|
||||||
assertThat(it.voiceMessageState).isEqualTo(aPausedState())
|
assertThat(it.voiceMessageState).isEqualTo(aPausedState())
|
||||||
}
|
}
|
||||||
|
|
@ -233,18 +240,16 @@ class VoiceMessageComposerPresenterTest {
|
||||||
@Test
|
@Test
|
||||||
fun `present - seek recording`() = runTest {
|
fun `present - seek recording`() = runTest {
|
||||||
val presenter = createDefaultVoiceMessageComposerPresenter()
|
val presenter = createDefaultVoiceMessageComposerPresenter()
|
||||||
moleculeFlow(RecompositionMode.Immediate) {
|
presenter.test {
|
||||||
presenter.present()
|
awaitItem().eventSink(VoiceMessageComposerEvent.RecorderEvent(VoiceMessageRecorderEvent.Start))
|
||||||
}.test {
|
awaitItem().eventSink(VoiceMessageComposerEvent.RecorderEvent(VoiceMessageRecorderEvent.Stop))
|
||||||
awaitItem().eventSink(VoiceMessageComposerEvents.RecorderEvent(VoiceMessageRecorderEvent.Start))
|
awaitItem().eventSink(VoiceMessageComposerEvent.PlayerEvent(VoiceMessagePlayerEvent.Seek(0.5f)))
|
||||||
awaitItem().eventSink(VoiceMessageComposerEvents.RecorderEvent(VoiceMessageRecorderEvent.Stop))
|
|
||||||
awaitItem().eventSink(VoiceMessageComposerEvents.PlayerEvent(VoiceMessagePlayerEvent.Seek(0.5f)))
|
|
||||||
awaitItem().apply {
|
awaitItem().apply {
|
||||||
assertThat(voiceMessageState).isEqualTo(aPreviewState(playbackProgress = 0.5f, time = 0.seconds, showCursor = true))
|
assertThat(voiceMessageState).isEqualTo(aPreviewState(playbackProgress = 0.5f, time = 0.seconds, showCursor = true))
|
||||||
}
|
}
|
||||||
awaitItem().apply {
|
awaitItem().apply {
|
||||||
assertThat(voiceMessageState).isEqualTo(aPreviewState(playbackProgress = 0.5f, time = 5.seconds, showCursor = true))
|
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 {
|
awaitItem().apply {
|
||||||
assertThat(voiceMessageState).isEqualTo(aPreviewState(playbackProgress = 0.2f, time = 5.seconds, showCursor = true))
|
assertThat(voiceMessageState).isEqualTo(aPreviewState(playbackProgress = 0.2f, time = 5.seconds, showCursor = true))
|
||||||
|
|
@ -260,12 +265,10 @@ class VoiceMessageComposerPresenterTest {
|
||||||
@Test
|
@Test
|
||||||
fun `present - delete recording`() = runTest {
|
fun `present - delete recording`() = runTest {
|
||||||
val presenter = createDefaultVoiceMessageComposerPresenter()
|
val presenter = createDefaultVoiceMessageComposerPresenter()
|
||||||
moleculeFlow(RecompositionMode.Immediate) {
|
presenter.test {
|
||||||
presenter.present()
|
awaitItem().eventSink(VoiceMessageComposerEvent.RecorderEvent(VoiceMessageRecorderEvent.Start))
|
||||||
}.test {
|
awaitItem().eventSink(VoiceMessageComposerEvent.RecorderEvent(VoiceMessageRecorderEvent.Stop))
|
||||||
awaitItem().eventSink(VoiceMessageComposerEvents.RecorderEvent(VoiceMessageRecorderEvent.Start))
|
awaitItem().eventSink(VoiceMessageComposerEvent.DeleteVoiceMessage)
|
||||||
awaitItem().eventSink(VoiceMessageComposerEvents.RecorderEvent(VoiceMessageRecorderEvent.Stop))
|
|
||||||
awaitItem().eventSink(VoiceMessageComposerEvents.DeleteVoiceMessage)
|
|
||||||
|
|
||||||
val finalState = awaitItem()
|
val finalState = awaitItem()
|
||||||
assertThat(finalState.voiceMessageState).isEqualTo(VoiceMessageState.Idle)
|
assertThat(finalState.voiceMessageState).isEqualTo(VoiceMessageState.Idle)
|
||||||
|
|
@ -278,13 +281,11 @@ class VoiceMessageComposerPresenterTest {
|
||||||
@Test
|
@Test
|
||||||
fun `present - delete while playing`() = runTest {
|
fun `present - delete while playing`() = runTest {
|
||||||
val presenter = createDefaultVoiceMessageComposerPresenter()
|
val presenter = createDefaultVoiceMessageComposerPresenter()
|
||||||
moleculeFlow(RecompositionMode.Immediate) {
|
presenter.test {
|
||||||
presenter.present()
|
awaitItem().eventSink(VoiceMessageComposerEvent.RecorderEvent(VoiceMessageRecorderEvent.Start))
|
||||||
}.test {
|
awaitItem().eventSink(VoiceMessageComposerEvent.RecorderEvent(VoiceMessageRecorderEvent.Stop))
|
||||||
awaitItem().eventSink(VoiceMessageComposerEvents.RecorderEvent(VoiceMessageRecorderEvent.Start))
|
awaitItem().eventSink(VoiceMessageComposerEvent.PlayerEvent(VoiceMessagePlayerEvent.Play))
|
||||||
awaitItem().eventSink(VoiceMessageComposerEvents.RecorderEvent(VoiceMessageRecorderEvent.Stop))
|
awaitItem().eventSink(VoiceMessageComposerEvent.DeleteVoiceMessage)
|
||||||
awaitItem().eventSink(VoiceMessageComposerEvents.PlayerEvent(VoiceMessagePlayerEvent.Play))
|
|
||||||
awaitItem().eventSink(VoiceMessageComposerEvents.DeleteVoiceMessage)
|
|
||||||
awaitItem().apply {
|
awaitItem().apply {
|
||||||
assertThat(voiceMessageState).isEqualTo(aPausedState())
|
assertThat(voiceMessageState).isEqualTo(aPausedState())
|
||||||
}
|
}
|
||||||
|
|
@ -300,12 +301,10 @@ class VoiceMessageComposerPresenterTest {
|
||||||
@Test
|
@Test
|
||||||
fun `present - send recording`() = runTest {
|
fun `present - send recording`() = runTest {
|
||||||
val presenter = createDefaultVoiceMessageComposerPresenter()
|
val presenter = createDefaultVoiceMessageComposerPresenter()
|
||||||
moleculeFlow(RecompositionMode.Immediate) {
|
presenter.test {
|
||||||
presenter.present()
|
awaitItem().eventSink(VoiceMessageComposerEvent.RecorderEvent(VoiceMessageRecorderEvent.Start))
|
||||||
}.test {
|
awaitItem().eventSink(VoiceMessageComposerEvent.RecorderEvent(VoiceMessageRecorderEvent.Stop))
|
||||||
awaitItem().eventSink(VoiceMessageComposerEvents.RecorderEvent(VoiceMessageRecorderEvent.Start))
|
awaitItem().eventSink(VoiceMessageComposerEvent.SendVoiceMessage)
|
||||||
awaitItem().eventSink(VoiceMessageComposerEvents.RecorderEvent(VoiceMessageRecorderEvent.Stop))
|
|
||||||
awaitItem().eventSink(VoiceMessageComposerEvents.SendVoiceMessage)
|
|
||||||
assertThat(awaitItem().voiceMessageState).isEqualTo(aPreviewState().toSendingState())
|
assertThat(awaitItem().voiceMessageState).isEqualTo(aPreviewState().toSendingState())
|
||||||
val finalState = awaitItem()
|
val finalState = awaitItem()
|
||||||
assertThat(finalState.voiceMessageState).isEqualTo(VoiceMessageState.Idle)
|
assertThat(finalState.voiceMessageState).isEqualTo(VoiceMessageState.Idle)
|
||||||
|
|
@ -319,21 +318,19 @@ class VoiceMessageComposerPresenterTest {
|
||||||
@Test
|
@Test
|
||||||
fun `present - sending is tracked`() = runTest {
|
fun `present - sending is tracked`() = runTest {
|
||||||
val presenter = createDefaultVoiceMessageComposerPresenter()
|
val presenter = createDefaultVoiceMessageComposerPresenter()
|
||||||
moleculeFlow(RecompositionMode.Immediate) {
|
presenter.test {
|
||||||
presenter.present()
|
|
||||||
}.test {
|
|
||||||
// Send a normal voice message
|
// Send a normal voice message
|
||||||
messageComposerContext.composerMode = MessageComposerMode.Normal
|
messageComposerContext.composerMode = MessageComposerMode.Normal
|
||||||
awaitItem().eventSink(VoiceMessageComposerEvents.RecorderEvent(VoiceMessageRecorderEvent.Start))
|
awaitItem().eventSink(VoiceMessageComposerEvent.RecorderEvent(VoiceMessageRecorderEvent.Start))
|
||||||
awaitItem().eventSink(VoiceMessageComposerEvents.RecorderEvent(VoiceMessageRecorderEvent.Stop))
|
awaitItem().eventSink(VoiceMessageComposerEvent.RecorderEvent(VoiceMessageRecorderEvent.Stop))
|
||||||
awaitItem().eventSink(VoiceMessageComposerEvents.SendVoiceMessage)
|
awaitItem().eventSink(VoiceMessageComposerEvent.SendVoiceMessage)
|
||||||
skipItems(1) // Sending state
|
skipItems(1) // Sending state
|
||||||
advanceUntilIdle()
|
advanceUntilIdle()
|
||||||
// Now reply with a voice message
|
// Now reply with a voice message
|
||||||
messageComposerContext.composerMode = aReplyMode()
|
messageComposerContext.composerMode = aReplyMode()
|
||||||
awaitItem().eventSink(VoiceMessageComposerEvents.RecorderEvent(VoiceMessageRecorderEvent.Start))
|
awaitItem().eventSink(VoiceMessageComposerEvent.RecorderEvent(VoiceMessageRecorderEvent.Start))
|
||||||
awaitItem().eventSink(VoiceMessageComposerEvents.RecorderEvent(VoiceMessageRecorderEvent.Stop))
|
awaitItem().eventSink(VoiceMessageComposerEvent.RecorderEvent(VoiceMessageRecorderEvent.Stop))
|
||||||
awaitItem().eventSink(VoiceMessageComposerEvents.SendVoiceMessage)
|
awaitItem().eventSink(VoiceMessageComposerEvent.SendVoiceMessage)
|
||||||
val finalState = awaitItem() // Sending state
|
val finalState = awaitItem() // Sending state
|
||||||
|
|
||||||
assertThat(analyticsService.capturedEvents).containsExactly(
|
assertThat(analyticsService.capturedEvents).containsExactly(
|
||||||
|
|
@ -348,13 +345,11 @@ class VoiceMessageComposerPresenterTest {
|
||||||
@Test
|
@Test
|
||||||
fun `present - send while playing`() = runTest {
|
fun `present - send while playing`() = runTest {
|
||||||
val presenter = createDefaultVoiceMessageComposerPresenter()
|
val presenter = createDefaultVoiceMessageComposerPresenter()
|
||||||
moleculeFlow(RecompositionMode.Immediate) {
|
presenter.test {
|
||||||
presenter.present()
|
awaitItem().eventSink(VoiceMessageComposerEvent.RecorderEvent(VoiceMessageRecorderEvent.Start))
|
||||||
}.test {
|
awaitItem().eventSink(VoiceMessageComposerEvent.RecorderEvent(VoiceMessageRecorderEvent.Stop))
|
||||||
awaitItem().eventSink(VoiceMessageComposerEvents.RecorderEvent(VoiceMessageRecorderEvent.Start))
|
awaitItem().eventSink(VoiceMessageComposerEvent.PlayerEvent(VoiceMessagePlayerEvent.Play))
|
||||||
awaitItem().eventSink(VoiceMessageComposerEvents.RecorderEvent(VoiceMessageRecorderEvent.Stop))
|
awaitItem().eventSink(VoiceMessageComposerEvent.SendVoiceMessage)
|
||||||
awaitItem().eventSink(VoiceMessageComposerEvents.PlayerEvent(VoiceMessagePlayerEvent.Play))
|
|
||||||
awaitItem().eventSink(VoiceMessageComposerEvents.SendVoiceMessage)
|
|
||||||
assertThat(awaitItem().voiceMessageState).isEqualTo(aPlayingState().toSendingState())
|
assertThat(awaitItem().voiceMessageState).isEqualTo(aPlayingState().toSendingState())
|
||||||
skipItems(1) // Duplicate sending state
|
skipItems(1) // Duplicate sending state
|
||||||
|
|
||||||
|
|
@ -370,14 +365,12 @@ class VoiceMessageComposerPresenterTest {
|
||||||
@Test
|
@Test
|
||||||
fun `present - send recording before previous completed, waits`() = runTest {
|
fun `present - send recording before previous completed, waits`() = runTest {
|
||||||
val presenter = createDefaultVoiceMessageComposerPresenter()
|
val presenter = createDefaultVoiceMessageComposerPresenter()
|
||||||
moleculeFlow(RecompositionMode.Immediate) {
|
presenter.test {
|
||||||
presenter.present()
|
awaitItem().eventSink(VoiceMessageComposerEvent.RecorderEvent(VoiceMessageRecorderEvent.Start))
|
||||||
}.test {
|
awaitItem().eventSink(VoiceMessageComposerEvent.RecorderEvent(VoiceMessageRecorderEvent.Stop))
|
||||||
awaitItem().eventSink(VoiceMessageComposerEvents.RecorderEvent(VoiceMessageRecorderEvent.Start))
|
|
||||||
awaitItem().eventSink(VoiceMessageComposerEvents.RecorderEvent(VoiceMessageRecorderEvent.Stop))
|
|
||||||
awaitItem().run {
|
awaitItem().run {
|
||||||
eventSink(VoiceMessageComposerEvents.SendVoiceMessage)
|
eventSink(VoiceMessageComposerEvent.SendVoiceMessage)
|
||||||
eventSink(VoiceMessageComposerEvents.SendVoiceMessage)
|
eventSink(VoiceMessageComposerEvent.SendVoiceMessage)
|
||||||
}
|
}
|
||||||
assertThat(awaitItem().voiceMessageState).isEqualTo(aPreviewState().toSendingState())
|
assertThat(awaitItem().voiceMessageState).isEqualTo(aPreviewState().toSendingState())
|
||||||
|
|
||||||
|
|
@ -395,14 +388,12 @@ class VoiceMessageComposerPresenterTest {
|
||||||
// Let sending fail due to media preprocessing error
|
// Let sending fail due to media preprocessing error
|
||||||
mediaPreProcessor.givenResult(Result.failure(Exception()))
|
mediaPreProcessor.givenResult(Result.failure(Exception()))
|
||||||
val presenter = createDefaultVoiceMessageComposerPresenter()
|
val presenter = createDefaultVoiceMessageComposerPresenter()
|
||||||
moleculeFlow(RecompositionMode.Immediate) {
|
presenter.test {
|
||||||
presenter.present()
|
awaitItem().eventSink(VoiceMessageComposerEvent.RecorderEvent(VoiceMessageRecorderEvent.Start))
|
||||||
}.test {
|
awaitItem().eventSink(VoiceMessageComposerEvent.RecorderEvent(VoiceMessageRecorderEvent.Stop))
|
||||||
awaitItem().eventSink(VoiceMessageComposerEvents.RecorderEvent(VoiceMessageRecorderEvent.Start))
|
|
||||||
awaitItem().eventSink(VoiceMessageComposerEvents.RecorderEvent(VoiceMessageRecorderEvent.Stop))
|
|
||||||
awaitItem().apply {
|
awaitItem().apply {
|
||||||
assertThat(voiceMessageState).isEqualTo(aPreviewState())
|
assertThat(voiceMessageState).isEqualTo(aPreviewState())
|
||||||
eventSink(VoiceMessageComposerEvents.SendVoiceMessage)
|
eventSink(VoiceMessageComposerEvent.SendVoiceMessage)
|
||||||
}
|
}
|
||||||
|
|
||||||
val finalState = awaitItem()
|
val finalState = awaitItem()
|
||||||
|
|
@ -419,15 +410,13 @@ class VoiceMessageComposerPresenterTest {
|
||||||
fun `present - send failures can be retried`() = runTest {
|
fun `present - send failures can be retried`() = runTest {
|
||||||
// Let sending fail due to media preprocessing error
|
// Let sending fail due to media preprocessing error
|
||||||
val presenter = createDefaultVoiceMessageComposerPresenter()
|
val presenter = createDefaultVoiceMessageComposerPresenter()
|
||||||
moleculeFlow(RecompositionMode.Immediate) {
|
presenter.test {
|
||||||
presenter.present()
|
|
||||||
}.test {
|
|
||||||
mediaPreProcessor.givenResult(Result.failure(Exception()))
|
mediaPreProcessor.givenResult(Result.failure(Exception()))
|
||||||
awaitItem().eventSink(VoiceMessageComposerEvents.RecorderEvent(VoiceMessageRecorderEvent.Start))
|
awaitItem().eventSink(VoiceMessageComposerEvent.RecorderEvent(VoiceMessageRecorderEvent.Start))
|
||||||
awaitItem().eventSink(VoiceMessageComposerEvents.RecorderEvent(VoiceMessageRecorderEvent.Stop))
|
awaitItem().eventSink(VoiceMessageComposerEvent.RecorderEvent(VoiceMessageRecorderEvent.Stop))
|
||||||
val previewState = awaitItem()
|
val previewState = awaitItem()
|
||||||
|
|
||||||
previewState.eventSink(VoiceMessageComposerEvents.SendVoiceMessage)
|
previewState.eventSink(VoiceMessageComposerEvent.SendVoiceMessage)
|
||||||
assertThat(awaitItem().voiceMessageState).isEqualTo(aPreviewState().toSendingState())
|
assertThat(awaitItem().voiceMessageState).isEqualTo(aPreviewState().toSendingState())
|
||||||
|
|
||||||
ensureAllEventsConsumed()
|
ensureAllEventsConsumed()
|
||||||
|
|
@ -435,7 +424,7 @@ class VoiceMessageComposerPresenterTest {
|
||||||
sendVoiceMessageResult.assertions().isNeverCalled()
|
sendVoiceMessageResult.assertions().isNeverCalled()
|
||||||
|
|
||||||
mediaPreProcessor.givenAudioResult()
|
mediaPreProcessor.givenAudioResult()
|
||||||
previewState.eventSink(VoiceMessageComposerEvents.SendVoiceMessage)
|
previewState.eventSink(VoiceMessageComposerEvent.SendVoiceMessage)
|
||||||
val finalState = awaitItem()
|
val finalState = awaitItem()
|
||||||
assertThat(finalState.voiceMessageState).isEqualTo(VoiceMessageState.Idle)
|
assertThat(finalState.voiceMessageState).isEqualTo(VoiceMessageState.Idle)
|
||||||
sendVoiceMessageResult.assertions().isCalledOnce()
|
sendVoiceMessageResult.assertions().isCalledOnce()
|
||||||
|
|
@ -448,14 +437,12 @@ class VoiceMessageComposerPresenterTest {
|
||||||
@Test
|
@Test
|
||||||
fun `present - send failures are displayed as an error dialog`() = runTest {
|
fun `present - send failures are displayed as an error dialog`() = runTest {
|
||||||
val presenter = createDefaultVoiceMessageComposerPresenter()
|
val presenter = createDefaultVoiceMessageComposerPresenter()
|
||||||
moleculeFlow(RecompositionMode.Immediate) {
|
presenter.test {
|
||||||
presenter.present()
|
|
||||||
}.test {
|
|
||||||
// Let sending fail due to media preprocessing error
|
// Let sending fail due to media preprocessing error
|
||||||
mediaPreProcessor.givenResult(Result.failure(Exception()))
|
mediaPreProcessor.givenResult(Result.failure(Exception()))
|
||||||
awaitItem().eventSink(VoiceMessageComposerEvents.RecorderEvent(VoiceMessageRecorderEvent.Start))
|
awaitItem().eventSink(VoiceMessageComposerEvent.RecorderEvent(VoiceMessageRecorderEvent.Start))
|
||||||
awaitItem().eventSink(VoiceMessageComposerEvents.RecorderEvent(VoiceMessageRecorderEvent.Stop))
|
awaitItem().eventSink(VoiceMessageComposerEvent.RecorderEvent(VoiceMessageRecorderEvent.Stop))
|
||||||
awaitItem().eventSink(VoiceMessageComposerEvents.SendVoiceMessage)
|
awaitItem().eventSink(VoiceMessageComposerEvent.SendVoiceMessage)
|
||||||
|
|
||||||
assertThat(awaitItem().voiceMessageState).isEqualTo(aPreviewState().toSendingState())
|
assertThat(awaitItem().voiceMessageState).isEqualTo(aPreviewState().toSendingState())
|
||||||
|
|
||||||
|
|
@ -467,7 +454,7 @@ class VoiceMessageComposerPresenterTest {
|
||||||
awaitItem().apply {
|
awaitItem().apply {
|
||||||
assertThat(voiceMessageState).isEqualTo(aPreviewState())
|
assertThat(voiceMessageState).isEqualTo(aPreviewState())
|
||||||
assertThat(showSendFailureDialog).isTrue()
|
assertThat(showSendFailureDialog).isTrue()
|
||||||
eventSink(VoiceMessageComposerEvents.DismissSendFailureDialog)
|
eventSink(VoiceMessageComposerEvent.DismissSendFailureDialog)
|
||||||
}
|
}
|
||||||
|
|
||||||
val finalState = awaitItem().apply {
|
val finalState = awaitItem().apply {
|
||||||
|
|
@ -483,12 +470,10 @@ class VoiceMessageComposerPresenterTest {
|
||||||
@Test
|
@Test
|
||||||
fun `present - send error - missing recording is tracked`() = runTest {
|
fun `present - send error - missing recording is tracked`() = runTest {
|
||||||
val presenter = createDefaultVoiceMessageComposerPresenter()
|
val presenter = createDefaultVoiceMessageComposerPresenter()
|
||||||
moleculeFlow(RecompositionMode.Immediate) {
|
presenter.test {
|
||||||
presenter.present()
|
|
||||||
}.test {
|
|
||||||
val initialState = awaitItem()
|
val initialState = awaitItem()
|
||||||
// Send the message before recording anything
|
// Send the message before recording anything
|
||||||
initialState.eventSink(VoiceMessageComposerEvents.SendVoiceMessage)
|
initialState.eventSink(VoiceMessageComposerEvent.SendVoiceMessage)
|
||||||
|
|
||||||
assertThat(initialState.voiceMessageState).isEqualTo(VoiceMessageState.Idle)
|
assertThat(initialState.voiceMessageState).isEqualTo(VoiceMessageState.Idle)
|
||||||
sendVoiceMessageResult.assertions().isNeverCalled()
|
sendVoiceMessageResult.assertions().isNeverCalled()
|
||||||
|
|
@ -504,11 +489,9 @@ class VoiceMessageComposerPresenterTest {
|
||||||
val exception = SecurityException("")
|
val exception = SecurityException("")
|
||||||
voiceRecorder.givenThrowsSecurityException(exception)
|
voiceRecorder.givenThrowsSecurityException(exception)
|
||||||
val presenter = createDefaultVoiceMessageComposerPresenter()
|
val presenter = createDefaultVoiceMessageComposerPresenter()
|
||||||
moleculeFlow(RecompositionMode.Immediate) {
|
presenter.test {
|
||||||
presenter.present()
|
|
||||||
}.test {
|
|
||||||
val initialState = awaitItem()
|
val initialState = awaitItem()
|
||||||
initialState.eventSink(VoiceMessageComposerEvents.RecorderEvent(VoiceMessageRecorderEvent.Start))
|
initialState.eventSink(VoiceMessageComposerEvent.RecorderEvent(VoiceMessageRecorderEvent.Start))
|
||||||
|
|
||||||
sendVoiceMessageResult.assertions().isNeverCalled()
|
sendVoiceMessageResult.assertions().isNeverCalled()
|
||||||
assertThat(analyticsService.trackedErrors).containsExactly(
|
assertThat(analyticsService.trackedErrors).containsExactly(
|
||||||
|
|
@ -528,19 +511,17 @@ class VoiceMessageComposerPresenterTest {
|
||||||
val presenter = createDefaultVoiceMessageComposerPresenter(
|
val presenter = createDefaultVoiceMessageComposerPresenter(
|
||||||
permissionsPresenter = permissionsPresenter,
|
permissionsPresenter = permissionsPresenter,
|
||||||
)
|
)
|
||||||
moleculeFlow(RecompositionMode.Immediate) {
|
presenter.test {
|
||||||
presenter.present()
|
|
||||||
}.test {
|
|
||||||
val initialState = awaitItem()
|
val initialState = awaitItem()
|
||||||
initialState.eventSink(VoiceMessageComposerEvents.RecorderEvent(VoiceMessageRecorderEvent.Start))
|
initialState.eventSink(VoiceMessageComposerEvent.RecorderEvent(VoiceMessageRecorderEvent.Start))
|
||||||
assertThat(awaitItem().voiceMessageState).isEqualTo(VoiceMessageState.Idle)
|
assertThat(awaitItem().voiceMessageState).isEqualTo(VoiceMessageState.Idle)
|
||||||
|
|
||||||
initialState.eventSink(VoiceMessageComposerEvents.RecorderEvent(VoiceMessageRecorderEvent.Stop))
|
initialState.eventSink(VoiceMessageComposerEvent.RecorderEvent(VoiceMessageRecorderEvent.Stop))
|
||||||
voiceRecorder.assertCalls(stopped = 1)
|
voiceRecorder.assertCalls(stopped = 1)
|
||||||
|
|
||||||
permissionsPresenter.setPermissionGranted()
|
permissionsPresenter.setPermissionGranted()
|
||||||
|
|
||||||
awaitItem().eventSink(VoiceMessageComposerEvents.RecorderEvent(VoiceMessageRecorderEvent.Start))
|
awaitItem().eventSink(VoiceMessageComposerEvent.RecorderEvent(VoiceMessageRecorderEvent.Start))
|
||||||
val finalState = awaitItem()
|
val finalState = awaitItem()
|
||||||
assertThat(finalState.voiceMessageState).isEqualTo(RECORDING_STATE)
|
assertThat(finalState.voiceMessageState).isEqualTo(RECORDING_STATE)
|
||||||
voiceRecorder.assertCalls(stopped = 1, started = 1)
|
voiceRecorder.assertCalls(stopped = 1, started = 1)
|
||||||
|
|
@ -557,16 +538,14 @@ class VoiceMessageComposerPresenterTest {
|
||||||
val presenter = createDefaultVoiceMessageComposerPresenter(
|
val presenter = createDefaultVoiceMessageComposerPresenter(
|
||||||
permissionsPresenter = permissionsPresenter,
|
permissionsPresenter = permissionsPresenter,
|
||||||
)
|
)
|
||||||
moleculeFlow(RecompositionMode.Immediate) {
|
presenter.test {
|
||||||
presenter.present()
|
awaitItem().eventSink(VoiceMessageComposerEvent.RecorderEvent(VoiceMessageRecorderEvent.Start))
|
||||||
}.test {
|
|
||||||
awaitItem().eventSink(VoiceMessageComposerEvents.RecorderEvent(VoiceMessageRecorderEvent.Start))
|
|
||||||
|
|
||||||
// See the dialog and accept it
|
// See the dialog and accept it
|
||||||
awaitItem().also {
|
awaitItem().also {
|
||||||
assertThat(it.voiceMessageState).isEqualTo(VoiceMessageState.Idle)
|
assertThat(it.voiceMessageState).isEqualTo(VoiceMessageState.Idle)
|
||||||
assertThat(it.showPermissionRationaleDialog).isTrue()
|
assertThat(it.showPermissionRationaleDialog).isTrue()
|
||||||
it.eventSink(VoiceMessageComposerEvents.AcceptPermissionRationale)
|
it.eventSink(VoiceMessageComposerEvent.AcceptPermissionRationale)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Dialog is hidden, user accepts permissions
|
// Dialog is hidden, user accepts permissions
|
||||||
|
|
@ -574,7 +553,7 @@ class VoiceMessageComposerPresenterTest {
|
||||||
|
|
||||||
permissionsPresenter.setPermissionGranted()
|
permissionsPresenter.setPermissionGranted()
|
||||||
|
|
||||||
awaitItem().eventSink(VoiceMessageComposerEvents.RecorderEvent(VoiceMessageRecorderEvent.Start))
|
awaitItem().eventSink(VoiceMessageComposerEvent.RecorderEvent(VoiceMessageRecorderEvent.Start))
|
||||||
val finalState = awaitItem()
|
val finalState = awaitItem()
|
||||||
assertThat(finalState.voiceMessageState).isEqualTo(RECORDING_STATE)
|
assertThat(finalState.voiceMessageState).isEqualTo(RECORDING_STATE)
|
||||||
voiceRecorder.assertCalls(started = 1)
|
voiceRecorder.assertCalls(started = 1)
|
||||||
|
|
@ -591,22 +570,20 @@ class VoiceMessageComposerPresenterTest {
|
||||||
val presenter = createDefaultVoiceMessageComposerPresenter(
|
val presenter = createDefaultVoiceMessageComposerPresenter(
|
||||||
permissionsPresenter = permissionsPresenter,
|
permissionsPresenter = permissionsPresenter,
|
||||||
)
|
)
|
||||||
moleculeFlow(RecompositionMode.Immediate) {
|
presenter.test {
|
||||||
presenter.present()
|
awaitItem().eventSink(VoiceMessageComposerEvent.RecorderEvent(VoiceMessageRecorderEvent.Start))
|
||||||
}.test {
|
|
||||||
awaitItem().eventSink(VoiceMessageComposerEvents.RecorderEvent(VoiceMessageRecorderEvent.Start))
|
|
||||||
|
|
||||||
// See the dialog and accept it
|
// See the dialog and accept it
|
||||||
awaitItem().also {
|
awaitItem().also {
|
||||||
assertThat(it.voiceMessageState).isEqualTo(VoiceMessageState.Idle)
|
assertThat(it.voiceMessageState).isEqualTo(VoiceMessageState.Idle)
|
||||||
assertThat(it.showPermissionRationaleDialog).isTrue()
|
assertThat(it.showPermissionRationaleDialog).isTrue()
|
||||||
it.eventSink(VoiceMessageComposerEvents.DismissPermissionsRationale)
|
it.eventSink(VoiceMessageComposerEvent.DismissPermissionsRationale)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Dialog is hidden, user tries to record again
|
// Dialog is hidden, user tries to record again
|
||||||
awaitItem().also {
|
awaitItem().also {
|
||||||
assertThat(it.showPermissionRationaleDialog).isFalse()
|
assertThat(it.showPermissionRationaleDialog).isFalse()
|
||||||
it.eventSink(VoiceMessageComposerEvents.RecorderEvent(VoiceMessageRecorderEvent.Start))
|
it.eventSink(VoiceMessageComposerEvent.RecorderEvent(VoiceMessageRecorderEvent.Start))
|
||||||
}
|
}
|
||||||
|
|
||||||
// Dialog is shown once again
|
// Dialog is shown once again
|
||||||
|
|
@ -624,7 +601,7 @@ class VoiceMessageComposerPresenterTest {
|
||||||
mostRecentState: VoiceMessageComposerState,
|
mostRecentState: VoiceMessageComposerState,
|
||||||
) {
|
) {
|
||||||
mostRecentState.eventSink(
|
mostRecentState.eventSink(
|
||||||
VoiceMessageComposerEvents.LifecycleEvent(event = Lifecycle.Event.ON_PAUSE)
|
VoiceMessageComposerEvent.LifecycleEvent(event = Lifecycle.Event.ON_PAUSE)
|
||||||
)
|
)
|
||||||
|
|
||||||
val onPauseState = when (val state = mostRecentState.voiceMessageState) {
|
val onPauseState = when (val state = mostRecentState.voiceMessageState) {
|
||||||
|
|
@ -645,7 +622,7 @@ class VoiceMessageComposerPresenterTest {
|
||||||
}
|
}
|
||||||
|
|
||||||
onPauseState.eventSink(
|
onPauseState.eventSink(
|
||||||
VoiceMessageComposerEvents.LifecycleEvent(event = Lifecycle.Event.ON_DESTROY)
|
VoiceMessageComposerEvent.LifecycleEvent(event = Lifecycle.Event.ON_DESTROY)
|
||||||
)
|
)
|
||||||
|
|
||||||
when (val state = onPauseState.voiceMessageState) {
|
when (val state = onPauseState.voiceMessageState) {
|
||||||
|
|
@ -662,6 +639,7 @@ class VoiceMessageComposerPresenterTest {
|
||||||
|
|
||||||
private fun TestScope.createDefaultVoiceMessageComposerPresenter(
|
private fun TestScope.createDefaultVoiceMessageComposerPresenter(
|
||||||
permissionsPresenter: PermissionsPresenter = createFakePermissionsPresenter(),
|
permissionsPresenter: PermissionsPresenter = createFakePermissionsPresenter(),
|
||||||
|
voiceRecorder: VoiceRecorder = this@DefaultVoiceMessageComposerPresenterTest.voiceRecorder,
|
||||||
): DefaultVoiceMessageComposerPresenter {
|
): DefaultVoiceMessageComposerPresenter {
|
||||||
return DefaultVoiceMessageComposerPresenter(
|
return DefaultVoiceMessageComposerPresenter(
|
||||||
sessionCoroutineScope = backgroundScope,
|
sessionCoroutineScope = backgroundScope,
|
||||||
|
|
@ -1,5 +1,9 @@
|
||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
|
<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_will_remove_selection">"Oldingi tanlov olib tashlanadi"</string>
|
||||||
<string name="a11y_polls_winning_answer">"Bu g\'alaba qozongan javob"</string>
|
<string name="a11y_polls_winning_answer">"Bu g\'alaba qozongan javob"</string>
|
||||||
</resources>
|
</resources>
|
||||||
|
|
|
||||||
|
|
@ -5,6 +5,7 @@
|
||||||
<string name="screen_create_poll_anonymous_headline">"Ovozlarni yashirish"</string>
|
<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_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_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_desc">"Savol yoki mavzu"</string>
|
||||||
<string name="screen_create_poll_question_hint">"So\'rovnoma nima haqida?"</string>
|
<string name="screen_create_poll_question_hint">"So\'rovnoma nima haqida?"</string>
|
||||||
<string name="screen_create_poll_title">"So‘rovnoma yaratish"</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_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_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_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_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_media_compression_title">"Ottimizza la qualità dei contenuti multimediali"</string>
|
||||||
<string name="screen_advanced_settings_moderation_and_safety_section_title">"Moderazione e Sicurezza"</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_error_title">"Impossibile aggiornare il profilo"</string>
|
||||||
<string name="screen_edit_profile_title">"Modifica 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_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_additional_settings_section_title">"Impostazioni aggiuntive"</string>
|
||||||
<string name="screen_notification_settings_calls_label">"Chiamate audio e video"</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>
|
<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_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_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_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_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_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_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_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_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>
|
<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_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_title">"Editar perfil"</string>
|
||||||
<string name="screen_edit_profile_updating_details">"Atualizando o 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_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_calls_label">"Chamadas de áudio e vídeo"</string>
|
||||||
<string name="screen_notification_settings_configuration_mismatch">"Não correspondência de configuração"</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">"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_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_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_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_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_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_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">"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_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">"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_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_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_empty">"Sizda bloklangan foydalanuvchi yo‘q"</string>
|
||||||
<string name="screen_blocked_users_unblock_alert_action">"Blokdan chiqarish"</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_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_system_notifications_turned_off">"Tizim bildirishnomalari o\'chirilgan"</string>
|
||||||
<string name="screen_notification_settings_title">"Bildirishnomalar"</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_section">"Muammolarni bartaraf etish"</string>
|
||||||
<string name="troubleshoot_notifications_entry_point_title">"Bildirishnomalar bilan bog‘liq muammolarni bartaraf etish"</string>
|
<string name="troubleshoot_notifications_entry_point_title">"Bildirishnomalar bilan bog‘liq muammolarni bartaraf etish"</string>
|
||||||
</resources>
|
</resources>
|
||||||
|
|
|
||||||
|
|
@ -44,6 +44,10 @@
|
||||||
<string name="screen_edit_profile_error_title">"无法更新个人资料"</string>
|
<string name="screen_edit_profile_error_title">"无法更新个人资料"</string>
|
||||||
<string name="screen_edit_profile_title">"编辑个人资料"</string>
|
<string name="screen_edit_profile_title">"编辑个人资料"</string>
|
||||||
<string name="screen_edit_profile_updating_details">"更新个人资料……"</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_labs_title">"实验室"</string>
|
||||||
<string name="screen_notification_settings_additional_settings_section_title">"更多设置"</string>
|
<string name="screen_notification_settings_additional_settings_section_title">"更多设置"</string>
|
||||||
<string name="screen_notification_settings_calls_label">"音视频通话"</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_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_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_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>
|
<string name="screen_bug_report_view_logs">"Visualizza i log"</string>
|
||||||
</resources>
|
</resources>
|
||||||
|
|
|
||||||
|
|
@ -14,5 +14,7 @@
|
||||||
<string name="screen_bug_report_include_screenshot">"Enviar captura de tela"</string>
|
<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_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_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>
|
<string name="screen_bug_report_view_logs">"Ver registros"</string>
|
||||||
</resources>
|
</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_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_crash_logs">"Buzilish jurnallarini yuboring"</string>
|
||||||
<string name="screen_bug_report_include_logs">"Jurnallarga ruxsat bering"</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_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_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>
|
<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"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
|
<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>
|
<string name="screen_report_room_title">"Xona ustidan shikoyat qilish"</string>
|
||||||
</resources>
|
</resources>
|
||||||
|
|
|
||||||
|
|
@ -1,14 +1,16 @@
|
||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
|
<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_ban_people">"Vykázat lidi"</string>
|
||||||
<string name="screen_room_change_permissions_delete_messages">"Odstranit zprávy"</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_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_moderators">"Moderátor"</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_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_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_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_room_topic">"Změnit téma místnosti"</string>
|
||||||
<string name="screen_room_change_permissions_send_messages">"Odeslat zprávy"</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_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_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>
|
<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">
|
<plurals name="screen_room_member_list_header_title">
|
||||||
<item quantity="one">"%1$d osoba"</item>
|
<item quantity="one">"%1$d osoba"</item>
|
||||||
<item quantity="few">"%1$d osoby"</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_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_banned">"Vykázaní"</string>
|
||||||
<string name="screen_room_member_list_mode_members">"Členové"</string>
|
<string name="screen_room_member_list_mode_members">"Členové"</string>
|
||||||
<string name="screen_room_member_list_role_administrator">"Pouze správci"</string>
|
<plurals name="screen_room_member_list_pending_header_title">
|
||||||
<string name="screen_room_member_list_role_moderator">"Správci a moderátoři"</string>
|
<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_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_room_members_header_title">"Členové místnosti"</string>
|
||||||
<string name="screen_room_member_list_unbanning_user">"Rušení vykázání %1$s"</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_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_moderators">"Moderátoři"</string>
|
||||||
<string name="screen_room_roles_and_permissions_owners">"Vlastníci"</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">"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_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_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_roles_header">"Role"</string>
|
||||||
<string name="screen_room_roles_and_permissions_room_details">"Podrobnosti místnosti"</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>
|
</resources>
|
||||||
|
|
|
||||||
|
|
@ -33,6 +33,10 @@
|
||||||
<string name="screen_room_change_role_unsaved_changes_description">"تغییراتی ذخیره نشده دارید."</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_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="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_ban">"برداشت و تحریم عضو"</string>
|
||||||
<string name="screen_room_member_list_manage_member_remove_confirmation_kick">"تنها برداشتن عضو"</string>
|
<string name="screen_room_member_list_manage_member_remove_confirmation_kick">"تنها برداشتن عضو"</string>
|
||||||
<string name="screen_room_member_list_manage_member_unban_action">"رفع انسداد"</string>
|
<string name="screen_room_member_list_manage_member_unban_action">"رفع انسداد"</string>
|
||||||
|
|
|
||||||
|
|
@ -1,14 +1,16 @@
|
||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
|
<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_ban_people">"Porttikieltojen antaminen"</string>
|
||||||
<string name="screen_room_change_permissions_delete_messages">"Viestien poistaminen"</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_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_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_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_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_name">"Huoneen nimen vaihtaminen"</string>
|
||||||
<string name="screen_room_change_permissions_room_topic">"Huoneen aiheen 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>
|
<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_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_description">"Sinulla on tallentamattomia muutoksia"</string>
|
||||||
<string name="screen_room_change_role_unsaved_changes_title">"Tallennetaanko muutokset?"</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">
|
<plurals name="screen_room_member_list_header_title">
|
||||||
<item quantity="one">"%1$d henkilö"</item>
|
<item quantity="one">"%1$d henkilö"</item>
|
||||||
<item quantity="other">"%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_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_banned">"Porttikiellot"</string>
|
||||||
<string name="screen_room_member_list_mode_members">"Jäsenet"</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_administrator">"Ylläpitäjä"</string>
|
||||||
<string name="screen_room_member_list_role_moderator">"Ylläpitäjät ja valvojat"</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_role_owner">"Omistaja"</string>
|
||||||
<string name="screen_room_member_list_room_members_header_title">"Huoneen jäsenet"</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>
|
<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_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_moderators">"Valvojat"</string>
|
||||||
<string name="screen_room_roles_and_permissions_owners">"Omistajat"</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">"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_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_reset_confirm_title">"Nollataanko oikeudet?"</string>
|
||||||
<string name="screen_room_roles_and_permissions_roles_header">"Roolit"</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_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>
|
<string name="screen_room_roles_and_permissions_title">"Roolit ja oikeudet"</string>
|
||||||
</resources>
|
</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_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_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>
|
<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">
|
<plurals name="screen_room_member_list_header_title">
|
||||||
<item quantity="one">"%1$d personne"</item>
|
<item quantity="one">"%1$d Personne"</item>
|
||||||
<item quantity="other">"%1$d personnes"</item>
|
<item quantity="other">"%1$d Personnes"</item>
|
||||||
</plurals>
|
</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_ban">"Bannir du salon"</string>
|
||||||
<string name="screen_room_member_list_manage_member_remove_confirmation_kick">"Retirer le membre uniquement"</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_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_banned">"Bannis"</string>
|
||||||
<string name="screen_room_member_list_mode_members">"Membres"</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_administrator">"Administrateurs"</string>
|
||||||
<string name="screen_room_member_list_role_moderator">"Modérateurs"</string>
|
<string name="screen_room_member_list_role_moderator">"Modérateurs"</string>
|
||||||
<string name="screen_room_member_list_role_owner">"Propriétaire"</string>
|
<string name="screen_room_member_list_role_owner">"Propriétaire"</string>
|
||||||
|
|
|
||||||
|
|
@ -1,14 +1,16 @@
|
||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
|
<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_ban_people">"Escludi membri"</string>
|
||||||
<string name="screen_room_change_permissions_delete_messages">"Rimuovi messaggi"</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_messages_and_content">"Messaggi e contenuti"</string>
|
||||||
<string name="screen_room_change_permissions_moderators">"Amministratori e moderatori"</string>
|
<string name="screen_room_change_permissions_moderators">"Moderatore"</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_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_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_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_room_topic">"Cambiare l\'argomento della stanza"</string>
|
||||||
<string name="screen_room_change_permissions_send_messages">"Inviare messaggi"</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_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_description">"Hai delle modifiche non salvate."</string>
|
||||||
<string name="screen_room_change_role_unsaved_changes_title">"Salvare le modifiche?"</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">
|
<plurals name="screen_room_member_list_header_title">
|
||||||
<item quantity="one">"%1$d persona"</item>
|
<item quantity="one">"%1$d Persona"</item>
|
||||||
<item quantity="other">"%1$d persone"</item>
|
<item quantity="other">"%1$d Persone"</item>
|
||||||
</plurals>
|
</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_ban">"Rimuovi ed escludi"</string>
|
||||||
<string name="screen_room_member_list_manage_member_remove_confirmation_kick">"Rimuovi soltanto"</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_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_banned">"Esclusi"</string>
|
||||||
<string name="screen_room_member_list_mode_members">"Membri"</string>
|
<string name="screen_room_member_list_mode_members">"Membri"</string>
|
||||||
<string name="screen_room_member_list_role_administrator">"Solo amministratori"</string>
|
<plurals name="screen_room_member_list_pending_header_title">
|
||||||
<string name="screen_room_member_list_role_moderator">"Amministratori e moderatori"</string>
|
<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_role_owner">"Proprietario"</string>
|
||||||
<string name="screen_room_member_list_room_members_header_title">"Membri della stanza"</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>
|
<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_messages_and_content">"Messaggi e contenuti"</string>
|
||||||
<string name="screen_room_roles_and_permissions_moderators">"Moderatori"</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_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">"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_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_reset_confirm_title">"Reimpostare autorizzazioni?"</string>
|
||||||
<string name="screen_room_roles_and_permissions_roles_header">"Ruoli"</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_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>
|
<string name="screen_room_roles_and_permissions_title">"Ruoli e autorizzazioni"</string>
|
||||||
</resources>
|
</resources>
|
||||||
|
|
|
||||||
|
|
@ -1,14 +1,16 @@
|
||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
|
<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_ban_people">"Banir pessoas"</string>
|
||||||
<string name="screen_room_change_permissions_delete_messages">"Remover mensagens"</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_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_moderators">"Moderador"</string>
|
||||||
<string name="screen_room_change_permissions_remove_people">"Remover pessoas e recusar solicitações de entrada"</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_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_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_room_topic">"Alterar tópico da sala"</string>
|
||||||
<string name="screen_room_change_permissions_send_messages">"Enviar mensagens"</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_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_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_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">
|
<plurals name="screen_room_member_list_header_title">
|
||||||
<item quantity="one">"%1$d pessoa"</item>
|
<item quantity="one">"%1$d pessoa"</item>
|
||||||
<item quantity="other">"%1$d pessoas"</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_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_banned">"Banidos"</string>
|
||||||
<string name="screen_room_member_list_mode_members">"Membros"</string>
|
<string name="screen_room_member_list_mode_members">"Membros"</string>
|
||||||
<string name="screen_room_member_list_role_administrator">"Somente administradores"</string>
|
<plurals name="screen_room_member_list_pending_header_title">
|
||||||
<string name="screen_room_member_list_role_moderator">"Administradores e moderadores"</string>
|
<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_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_room_members_header_title">"Membros da sala"</string>
|
||||||
<string name="screen_room_member_list_unbanning_user">"Desbanindo %1$s"</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_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_moderators">"Moderadores"</string>
|
||||||
<string name="screen_room_roles_and_permissions_owners">"Proprietários"</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">"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_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_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_roles_header">"Cargos"</string>
|
||||||
<string name="screen_room_roles_and_permissions_room_details">"Detalhes da sala"</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>
|
<string name="screen_room_roles_and_permissions_title">"Cargos e permissões"</string>
|
||||||
</resources>
|
</resources>
|
||||||
|
|
|
||||||
|
|
@ -15,13 +15,17 @@
|
||||||
<string name="screen_room_change_role_administrators_title">"Administratorlarni tahrirlash"</string>
|
<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_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_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_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_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_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">"%1$s (Jarayonda)"</string>
|
||||||
<string name="screen_room_change_role_invited_member_name_android">"(Kutilmoqda)"</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_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_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_administrators">"Adminlar"</string>
|
||||||
<string name="screen_room_change_role_section_moderators">"Moderatorlar"</string>
|
<string name="screen_room_change_role_section_moderators">"Moderatorlar"</string>
|
||||||
<string name="screen_room_change_role_section_users">"Azolar"</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_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_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_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_banned">"Taqiqlangan"</string>
|
||||||
<string name="screen_room_member_list_mode_members">"Azolar"</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_administrator">"Faqat adminlar"</string>
|
||||||
<string name="screen_room_member_list_role_moderator">"Adminlar va moderatorlar"</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_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_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">"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_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_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_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_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_messages_and_content">"Xabarlar va kontent"</string>
|
||||||
<string name="screen_room_roles_and_permissions_moderators">"Moderatorlar"</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">"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_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_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_section_users">"成员"</string>
|
||||||
<string name="screen_room_change_role_unsaved_changes_description">"您有未保存的更改。"</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_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">
|
<plurals name="screen_room_member_list_header_title">
|
||||||
<item quantity="other">"%1$d 人"</item>
|
<item quantity="other">"%1$d 人"</item>
|
||||||
</plurals>
|
</plurals>
|
||||||
|
|
@ -61,5 +61,6 @@
|
||||||
<string name="screen_room_roles_and_permissions_reset_confirm_title">"重置权限?"</string>
|
<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_roles_header">"角色"</string>
|
||||||
<string name="screen_room_roles_and_permissions_room_details">"聊天室详情"</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>
|
<string name="screen_room_roles_and_permissions_title">"角色与权限"</string>
|
||||||
</resources>
|
</resources>
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,5 @@
|
||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
|
<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>
|
<string name="screen_room_alias_resolver_resolve_alias_failure">"Xona taxalluslari yechilmadi."</string>
|
||||||
</resources>
|
</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_description">"Хората могат да се присъединят само ако са поканени"</string>
|
||||||
<string name="screen_security_and_privacy_room_access_invite_only_option_title">"Само с покана"</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_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_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_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_anyone_option_title">"Всеки"</string>
|
||||||
<string name="screen_security_and_privacy_room_history_section_header">"Кой може да чете историята"</string>
|
<string name="screen_security_and_privacy_room_history_section_header">"Кой може да чете историята"</string>
|
||||||
|
|
|
||||||
|
|
@ -1,19 +1,21 @@
|
||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
|
<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_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">"Adresa místnosti"</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_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_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_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_ban_people">"Vykázat lidi"</string>
|
||||||
<string name="screen_room_change_permissions_delete_messages">"Odstranit zprávy"</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_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_moderators">"Moderátor"</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_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_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_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_room_topic">"Změnit téma místnosti"</string>
|
||||||
<string name="screen_room_change_permissions_send_messages">"Odeslat zprávy"</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_encrypted">"Šifrováno"</string>
|
||||||
<string name="screen_room_details_badge_not_encrypted">"Není š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_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">"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_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>
|
<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_pinned_events_row_title">"Připnuté zprávy"</string>
|
||||||
<string name="screen_room_details_profile_row_title">"Profil"</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_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_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_and_privacy_title">"Zabezpečení a soukromí"</string>
|
||||||
<string name="screen_room_details_security_title">"Zabezpečení"</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_topic_title">"Téma"</string>
|
||||||
<string name="screen_room_details_updating_room">"Aktualizace místnosti…"</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>
|
<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">
|
<plurals name="screen_room_member_list_header_title">
|
||||||
<item quantity="one">"%1$d osoba"</item>
|
<item quantity="one">"%1$d osoba"</item>
|
||||||
<item quantity="few">"%1$d osoby"</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_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_banned">"Vykázaní"</string>
|
||||||
<string name="screen_room_member_list_mode_members">"Členové"</string>
|
<string name="screen_room_member_list_mode_members">"Členové"</string>
|
||||||
<string name="screen_room_member_list_role_administrator">"Pouze správci"</string>
|
<plurals name="screen_room_member_list_pending_header_title">
|
||||||
<string name="screen_room_member_list_role_moderator">"Správci a moderátoři"</string>
|
<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_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_room_members_header_title">"Členové místnosti"</string>
|
||||||
<string name="screen_room_member_list_unbanning_user">"Rušení vykázání %1$s"</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_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_moderators">"Moderátoři"</string>
|
||||||
<string name="screen_room_roles_and_permissions_owners">"Vlastníci"</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">"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_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_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_roles_header">"Role"</string>
|
||||||
<string name="screen_room_roles_and_permissions_room_details">"Podrobnosti místnosti"</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_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_add_room_address_action">"Přidat adresu"</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_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_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_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.
|
<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_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_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_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_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_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_section_header">"Přístup"</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_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_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_access_space_members_option_unavailable_description">"Prostory nejsou aktuálně podporovány"</string>
|
||||||
<string name="screen_security_and_privacy_room_address_section_header">"Adresa místnosti"</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_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_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_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>
|
<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.
|
<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>
|
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_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>
|
<string name="screen_security_and_privacy_title">"Zabezpečení a soukromí"</string>
|
||||||
</resources>
|
</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_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_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_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_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_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_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>
|
<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_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_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_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_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_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_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>
|
<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_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_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_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_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_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_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>
|
<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_description">"Τα άτομα μπορούν να συμμετάσχουν μόνο εάν έχουν προσκληθεί"</string>
|
||||||
<string name="screen_security_and_privacy_room_access_invite_only_option_title">"Μόνο πρόσκληση"</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_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_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_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_section_footer">"Επιστρέψτε την εύρεση αυτής της αίθουσας με αναζήτηση στον κατάλογο %1$s δημοσίων αιθουσών"</string>
|
||||||
<string name="screen_security_and_privacy_room_directory_visibility_toggle_title">"Ορατή στον κατάλογο δημόσιων αιθουσών"</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_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_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_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_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_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_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>
|
<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_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_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_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_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_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_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>
|
<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_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_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_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_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_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_directory_visibility_toggle_title">"Gela publikoen direktorioan ikusgai"</string>
|
||||||
<string name="screen_security_and_privacy_room_history_anyone_option_title">"Edonork"</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_topic_title">"موضوع"</string>
|
||||||
<string name="screen_room_details_updating_room">"بهروز کردن اتاق…"</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="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_ban">"برداشت و تحریم عضو"</string>
|
||||||
<string name="screen_room_member_list_manage_member_remove_confirmation_kick">"تنها برداشتن عضو"</string>
|
<string name="screen_room_member_list_manage_member_remove_confirmation_kick">"تنها برداشتن عضو"</string>
|
||||||
<string name="screen_room_member_list_manage_member_unban_action">"رفع انسداد"</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_description">"افراد فقط در صورت دعوت میتوانند بپیوندند"</string>
|
||||||
<string name="screen_security_and_privacy_room_access_invite_only_option_title">"فقط دعوتی"</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_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_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_address_section_header">"نشانی اتاق"</string>
|
||||||
<string name="screen_security_and_privacy_room_history_anyone_option_title">"هرکسی"</string>
|
<string name="screen_security_and_privacy_room_history_anyone_option_title">"هرکسی"</string>
|
||||||
<string name="screen_security_and_privacy_room_publishing_section_header">"انتشار اتاق"</string>
|
<string name="screen_security_and_privacy_room_publishing_section_header">"انتشار اتاق"</string>
|
||||||
|
|
|
||||||
|
|
@ -1,19 +1,21 @@
|
||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
|
<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_room_address_section_footer">"Tarvitset osoitteen, jotta se näkyy julkisessa hakemistossa."</string>
|
||||||
<string name="screen_edit_room_address_title">"Huoneen osoite"</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_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_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_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_ban_people">"Porttikieltojen antaminen"</string>
|
||||||
<string name="screen_room_change_permissions_delete_messages">"Viestien poistaminen"</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_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_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_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_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_name">"Huoneen nimen vaihtaminen"</string>
|
||||||
<string name="screen_room_change_permissions_room_topic">"Huoneen aiheen 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>
|
<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_encrypted">"Salattu"</string>
|
||||||
<string name="screen_room_details_badge_not_encrypted">"Ei 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_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">"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_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>
|
<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_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_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_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_conversation_title">"Poistu keskustelusta"</string>
|
||||||
<string name="screen_room_details_leave_room_title">"Poistu huoneesta"</string>
|
<string name="screen_room_details_leave_room_title">"Poistu huoneesta"</string>
|
||||||
<string name="screen_room_details_media_gallery_title">"Media ja tiedostot"</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_title">"Huoneen tiedot"</string>
|
||||||
<string name="screen_room_details_topic_title">"Aihe"</string>
|
<string name="screen_room_details_topic_title">"Aihe"</string>
|
||||||
<string name="screen_room_details_updating_room">"Muokataan huonetta…"</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">
|
<plurals name="screen_room_member_list_header_title">
|
||||||
<item quantity="one">"%1$d henkilö"</item>
|
<item quantity="one">"%1$d henkilö"</item>
|
||||||
<item quantity="other">"%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_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_banned">"Porttikiellot"</string>
|
||||||
<string name="screen_room_member_list_mode_members">"Jäsenet"</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_administrator">"Ylläpitäjä"</string>
|
||||||
<string name="screen_room_member_list_role_moderator">"Ylläpitäjät ja valvojat"</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_role_owner">"Omistaja"</string>
|
||||||
<string name="screen_room_member_list_room_members_header_title">"Huoneen jäsenet"</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>
|
<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_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_moderators">"Valvojat"</string>
|
||||||
<string name="screen_room_roles_and_permissions_owners">"Omistajat"</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">"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_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_reset_confirm_title">"Nollataanko oikeudet?"</string>
|
||||||
<string name="screen_room_roles_and_permissions_roles_header">"Roolit"</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_room_details">"Huoneen tiedot"</string>
|
||||||
<string name="screen_room_roles_and_permissions_title">"Roolit ja oikeudet"</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_add_room_address_action">"Lisää 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_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_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_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.
|
<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_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_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_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_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_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_section_header">"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_space_members_option_title">"Tilan jäsenet"</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_access_space_members_option_unavailable_description">"Tiloja ei tällä hetkellä tueta"</string>
|
||||||
<string name="screen_security_and_privacy_room_address_section_header">"Huoneen osoite"</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_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_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_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>
|
<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.
|
<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>
|
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_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>
|
<string name="screen_security_and_privacy_title">"Turvallisuus ja yksityisyys"</string>
|
||||||
</resources>
|
</resources>
|
||||||
|
|
|
||||||
|
|
@ -71,9 +71,15 @@
|
||||||
<string name="screen_room_details_topic_title">"Sujet"</string>
|
<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_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>
|
<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">
|
<plurals name="screen_room_member_list_header_title">
|
||||||
<item quantity="one">"%1$d personne"</item>
|
<item quantity="one">"%1$d Personne"</item>
|
||||||
<item quantity="other">"%1$d personnes"</item>
|
<item quantity="other">"%1$d Personnes"</item>
|
||||||
</plurals>
|
</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_ban">"Bannir du salon"</string>
|
||||||
<string name="screen_room_member_list_manage_member_remove_confirmation_kick">"Retirer le membre uniquement"</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_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_banned">"Bannis"</string>
|
||||||
<string name="screen_room_member_list_mode_members">"Membres"</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_administrator">"Administrateurs"</string>
|
||||||
<string name="screen_room_member_list_role_moderator">"Modérateurs"</string>
|
<string name="screen_room_member_list_role_moderator">"Modérateurs"</string>
|
||||||
<string name="screen_room_member_list_role_owner">"Propriétaire"</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_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_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_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_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_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_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>
|
<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.
|
<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>
|
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_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_room_visibility_section_header">"Visibilité"</string>
|
||||||
<string name="screen_security_and_privacy_title">"Sécurité & confidentialité"</string>
|
<string name="screen_security_and_privacy_title">"Sécurité & confidentialité"</string>
|
||||||
</resources>
|
</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_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_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_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_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_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_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>
|
<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_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_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_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_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_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_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>
|
<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"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
|
<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_room_address_section_footer">"Per renderlo visibile nell\'elenco pubblico, avrai bisogno di un indirizzo."</string>
|
||||||
<string name="screen_edit_room_address_title">"Indirizzo della stanza"</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_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_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_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_ban_people">"Escludi membri"</string>
|
||||||
<string name="screen_room_change_permissions_delete_messages">"Rimuovi messaggi"</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_messages_and_content">"Messaggi e contenuti"</string>
|
||||||
<string name="screen_room_change_permissions_moderators">"Amministratori e moderatori"</string>
|
<string name="screen_room_change_permissions_moderators">"Moderatore"</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_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_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_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_room_topic">"Cambiare l\'argomento della stanza"</string>
|
||||||
<string name="screen_room_change_permissions_send_messages">"Inviare messaggi"</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_encrypted">"Cifrata"</string>
|
||||||
<string name="screen_room_details_badge_not_encrypted">"Non 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_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">"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_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>
|
<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_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_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_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_invite_people_title">"Invita persone"</string>
|
||||||
<string name="screen_room_details_leave_conversation_title">"Abbandona la conversazione"</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>
|
<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_title">"Informazioni sulla stanza"</string>
|
||||||
<string name="screen_room_details_topic_title">"Argomento"</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_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">
|
<plurals name="screen_room_member_list_header_title">
|
||||||
<item quantity="one">"%1$d persona"</item>
|
<item quantity="one">"%1$d Persona"</item>
|
||||||
<item quantity="other">"%1$d persone"</item>
|
<item quantity="other">"%1$d Persone"</item>
|
||||||
</plurals>
|
</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_ban">"Rimuovi ed escludi"</string>
|
||||||
<string name="screen_room_member_list_manage_member_remove_confirmation_kick">"Rimuovi soltanto"</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_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_banned">"Esclusi"</string>
|
||||||
<string name="screen_room_member_list_mode_members">"Membri"</string>
|
<string name="screen_room_member_list_mode_members">"Membri"</string>
|
||||||
<string name="screen_room_member_list_role_administrator">"Solo amministratori"</string>
|
<plurals name="screen_room_member_list_pending_header_title">
|
||||||
<string name="screen_room_member_list_role_moderator">"Amministratori e moderatori"</string>
|
<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_role_owner">"Proprietario"</string>
|
||||||
<string name="screen_room_member_list_room_members_header_title">"Membri della stanza"</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>
|
<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_messages_and_content">"Messaggi e contenuti"</string>
|
||||||
<string name="screen_room_roles_and_permissions_moderators">"Moderatori"</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_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">"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_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_reset_confirm_title">"Reimpostare autorizzazioni?"</string>
|
||||||
<string name="screen_room_roles_and_permissions_roles_header">"Ruoli"</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_room_details">"Dettagli della stanza"</string>
|
||||||
<string name="screen_room_roles_and_permissions_title">"Ruoli e autorizzazioni"</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_add_room_address_action">"Aggiungi indirizzo"</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_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_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_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.
|
<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_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_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_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_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_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_section_header">"Accesso"</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_space_members_option_title">"Membri dello spazio"</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_access_space_members_option_unavailable_description">"Gli spazi non sono attualmente supportati"</string>
|
||||||
<string name="screen_security_and_privacy_room_address_section_header">"Indirizzo della stanza"</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_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_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_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>
|
<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.
|
<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>
|
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_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>
|
<string name="screen_security_and_privacy_title">"Sicurezza e privacy"</string>
|
||||||
</resources>
|
</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_description">"초대받은 사용자만 가입할 수 있습니다."</string>
|
||||||
<string name="screen_security_and_privacy_room_access_invite_only_option_title">"초대 전용"</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_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_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_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_section_footer">"%1$s 공개 방 디렉토리에서 이 방을 검색할 수 있도록 허용합니다"</string>
|
||||||
<string name="screen_security_and_privacy_room_directory_visibility_toggle_title">"공개 룸 디렉토리에 표시됨"</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_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_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_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_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_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_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>
|
<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_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_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_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_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_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_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>
|
<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"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
|
<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_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">"Endereço da sala"</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_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_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_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_ban_people">"Banir pessoas"</string>
|
||||||
<string name="screen_room_change_permissions_delete_messages">"Remover mensagens"</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_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_moderators">"Moderador"</string>
|
||||||
<string name="screen_room_change_permissions_remove_people">"Remover pessoas e recusar solicitações de entrada"</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_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_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_room_topic">"Alterar tópico da sala"</string>
|
||||||
<string name="screen_room_change_permissions_send_messages">"Enviar mensagens"</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_encrypted">"Criptografado"</string>
|
||||||
<string name="screen_room_details_badge_not_encrypted">"Não 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_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">"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_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>
|
<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_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_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_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_invite_people_title">"Convidar pessoas"</string>
|
||||||
<string name="screen_room_details_leave_conversation_title">"Sair da conversa"</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>
|
<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_title">"Informação da sala"</string>
|
||||||
<string name="screen_room_details_topic_title">"Tópico"</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_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">
|
<plurals name="screen_room_member_list_header_title">
|
||||||
<item quantity="one">"%1$d pessoa"</item>
|
<item quantity="one">"%1$d pessoa"</item>
|
||||||
<item quantity="other">"%1$d pessoas"</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_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_banned">"Banidos"</string>
|
||||||
<string name="screen_room_member_list_mode_members">"Membros"</string>
|
<string name="screen_room_member_list_mode_members">"Membros"</string>
|
||||||
<string name="screen_room_member_list_role_administrator">"Somente administradores"</string>
|
<plurals name="screen_room_member_list_pending_header_title">
|
||||||
<string name="screen_room_member_list_role_moderator">"Administradores e moderadores"</string>
|
<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_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_room_members_header_title">"Membros da sala"</string>
|
||||||
<string name="screen_room_member_list_unbanning_user">"Desbanindo %1$s"</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_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_moderators">"Moderadores"</string>
|
||||||
<string name="screen_room_roles_and_permissions_owners">"Proprietários"</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">"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_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_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_roles_header">"Cargos"</string>
|
||||||
<string name="screen_room_roles_and_permissions_room_details">"Detalhes da sala"</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_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_add_room_address_action">"Adicionar endereço"</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_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_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_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.
|
<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_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_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_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_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_description">"Apenas pessoas convidadas podem entrar."</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_invite_only_option_title">"Privado"</string>
|
||||||
<string name="screen_security_and_privacy_room_access_section_header">"Acesso à sala"</string>
|
<string name="screen_security_and_privacy_room_access_section_header">"Acesso"</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_space_members_option_title">"Membros do espaço"</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_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_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_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>
|
<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.
|
<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>
|
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_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>
|
<string name="screen_security_and_privacy_title">"Segurança e privacidade"</string>
|
||||||
</resources>
|
</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_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_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_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_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_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_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>
|
<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_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_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_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_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_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_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>
|
<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_description">"Присоединиться могут только приглашенные люди."</string>
|
||||||
<string name="screen_security_and_privacy_room_access_invite_only_option_title">"Только по приглашению"</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_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_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_footer">"Вам понадобится адрес комнаты, чтобы сделать ее видимой в каталоге."</string>
|
||||||
<string name="screen_security_and_privacy_room_address_section_header">"Адрес"</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>
|
<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_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_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_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_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_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_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>
|
<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_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_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_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_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_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_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>
|
<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_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_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_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_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_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_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>
|
<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_description">"Люди можуть приєднатися, лише якщо їх запросили"</string>
|
||||||
<string name="screen_security_and_privacy_room_access_invite_only_option_title">"Лише запрошені"</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_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_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_footer">"Вам знадобиться адреса кімнати, щоб зробити її видимою в каталозі."</string>
|
||||||
<string name="screen_security_and_privacy_room_address_section_header">"Адреса кімнати"</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>
|
<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"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
|
<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_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_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>
|
<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_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_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_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_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_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_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">"%1$s (Jarayonda)"</string>
|
||||||
<string name="screen_room_change_role_invited_member_name_android">"(Kutilmoqda)"</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_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_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_administrators">"Adminlar"</string>
|
||||||
<string name="screen_room_change_role_section_moderators">"Moderatorlar"</string>
|
<string name="screen_room_change_role_section_moderators">"Moderatorlar"</string>
|
||||||
<string name="screen_room_change_role_section_users">"Azolar"</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_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_conversation_title">"Suhbatni tark etish"</string>
|
||||||
<string name="screen_room_details_leave_room_title">"Xonani 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_custom">"Maxsus"</string>
|
||||||
<string name="screen_room_details_notification_mode_default">"Standart"</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_notification_title">"Bildirishnomalar"</string>
|
||||||
<string name="screen_room_details_pinned_events_row_title">"Qadalgan xabarlar"</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_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_roles_and_permissions">"Rollar va ruxsatlar"</string>
|
||||||
<string name="screen_room_details_room_name_label">"Xona nomi"</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_security_title">"Xavfsizlik"</string>
|
||||||
<string name="screen_room_details_share_room_title">"Xonani baham ko\'ring"</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>
|
<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_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_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_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_banned">"Taqiqlangan"</string>
|
||||||
<string name="screen_room_member_list_mode_members">"Azolar"</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_administrator">"Faqat adminlar"</string>
|
||||||
<string name="screen_room_member_list_role_moderator">"Adminlar va moderatorlar"</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_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_member_list_unbanning_user">"Taqiqni bekor qilish %1$s"</string>
|
||||||
<string name="screen_room_notification_settings_allow_custom">"Moslashtirilgan sozlamalarga ruxsat bering"</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_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_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">"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_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_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_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_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_messages_and_content">"Xabarlar va kontent"</string>
|
||||||
<string name="screen_room_roles_and_permissions_moderators">"Moderatorlar"</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">"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_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_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_roles_header">"Rollar"</string>
|
||||||
<string name="screen_room_roles_and_permissions_room_details">"Xona tafsilotlari"</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_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_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_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_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_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>
|
</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_description">"僅受邀者才能加入。"</string>
|
||||||
<string name="screen_security_and_privacy_room_access_invite_only_option_title">"僅限邀請"</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_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_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_footer">"您需要地址才能在公開目錄中顯示。"</string>
|
||||||
<string name="screen_security_and_privacy_room_address_section_header">"地址"</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>
|
<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_title">"聊天室信息"</string>
|
||||||
<string name="screen_room_details_topic_title">"主题"</string>
|
<string name="screen_room_details_topic_title">"主题"</string>
|
||||||
<string name="screen_room_details_updating_room">"正在更新聊天室……"</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">
|
<plurals name="screen_room_member_list_header_title">
|
||||||
<item quantity="other">"%1$d 人"</item>
|
<item quantity="other">"%1$d 人"</item>
|
||||||
</plurals>
|
</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_description">"只有受邀者才能加入"</string>
|
||||||
<string name="screen_security_and_privacy_room_access_invite_only_option_title">"仅限邀请"</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_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_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_footer">"你需要房间地址才能使其在目录中可见。"</string>
|
||||||
<string name="screen_security_and_privacy_room_address_section_header">"房间地址"</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>
|
<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_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_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_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_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_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_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_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_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_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>
|
<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
Loading…
Add table
Add a link
Reference in a new issue