change (member moderation) : extract in a separate module

This commit is contained in:
ganfra
2025-05-06 22:39:18 +02:00
parent 7ba0d75b5c
commit 5272587897
80 changed files with 1062 additions and 633 deletions

View File

@@ -54,6 +54,7 @@ dependencies {
implementation(projects.features.knockrequests.api)
implementation(projects.features.verifysession.api)
implementation(projects.features.reportroom.api)
implementation(projects.features.roommembermoderation.api)
testImplementation(libs.test.junit)
testImplementation(libs.coroutines.test)

View File

@@ -1,23 +0,0 @@
/*
* Copyright 2024 New Vector 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.roomdetails.impl.di
import com.squareup.anvil.annotations.ContributesTo
import dagger.Binds
import dagger.Module
import io.element.android.features.roomdetails.impl.members.moderation.RoomMembersModerationPresenter
import io.element.android.features.roomdetails.impl.members.moderation.RoomMembersModerationState
import io.element.android.libraries.architecture.Presenter
import io.element.android.libraries.di.RoomScope
@Module
@ContributesTo(RoomScope::class)
interface RoomDetailsModule {
@Binds
fun bindRoomMembersModerationPresenter(presenter: RoomMembersModerationPresenter): Presenter<RoomMembersModerationState>
}

View File

@@ -18,6 +18,9 @@ import dagger.assisted.Assisted
import dagger.assisted.AssistedInject
import im.vector.app.features.analytics.plan.MobileScreen
import io.element.android.anvilannotations.ContributesNode
import io.element.android.features.roommembermoderation.api.ModerationAction
import io.element.android.features.roommembermoderation.api.RoomMemberModerationEvents
import io.element.android.features.roommembermoderation.api.RoomMemberModerationRenderer
import io.element.android.libraries.di.RoomScope
import io.element.android.libraries.matrix.api.core.UserId
import io.element.android.services.analytics.api.AnalyticsService
@@ -28,6 +31,7 @@ class RoomMemberListNode @AssistedInject constructor(
@Assisted plugins: List<Plugin>,
presenterFactory: RoomMemberListPresenter.Factory,
private val analyticsService: AnalyticsService,
private val roomMemberModerationRenderer: RoomMemberModerationRenderer,
) : Node(buildContext, plugins = plugins), RoomMemberListNavigator {
interface Callback : Plugin {
fun openRoomMemberDetails(roomMemberId: UserId)
@@ -69,6 +73,16 @@ class RoomMemberListNode @AssistedInject constructor(
modifier = modifier,
navigator = this,
)
roomMemberModerationRenderer.Render(
state = state.moderationState,
onSelectAction = { action ->
when (action) {
is ModerationAction.DisplayProfile -> openRoomMemberDetails(action.member.userId)
else -> state.moderationState.eventSink(RoomMemberModerationEvents.ProcessAction(action))
}
},
modifier = Modifier,
)
}
}

View File

@@ -19,8 +19,9 @@ import androidx.compose.runtime.setValue
import dagger.assisted.Assisted
import dagger.assisted.AssistedFactory
import dagger.assisted.AssistedInject
import io.element.android.features.roomdetails.impl.members.moderation.RoomMembersModerationEvents
import io.element.android.features.roomdetails.impl.members.moderation.RoomMembersModerationState
import io.element.android.features.roommembermoderation.api.ModerationAction
import io.element.android.features.roommembermoderation.api.RoomMemberModerationEvents
import io.element.android.features.roommembermoderation.api.RoomMemberModerationState
import io.element.android.libraries.architecture.AsyncData
import io.element.android.libraries.architecture.Presenter
import io.element.android.libraries.core.coroutine.CoroutineDispatchers
@@ -34,6 +35,7 @@ import io.element.android.libraries.matrix.api.room.RoomMembersState
import io.element.android.libraries.matrix.api.room.RoomMembershipState
import io.element.android.libraries.matrix.api.room.roomMembers
import io.element.android.libraries.matrix.ui.room.canInviteAsState
import io.element.android.libraries.matrix.ui.room.isDmAsState
import io.element.android.libraries.matrix.ui.room.roomMemberIdentityStateChange
import kotlinx.collections.immutable.ImmutableMap
import kotlinx.collections.immutable.persistentMapOf
@@ -48,7 +50,7 @@ class RoomMemberListPresenter @AssistedInject constructor(
private val room: JoinedRoom,
private val roomMemberListDataSource: RoomMemberListDataSource,
private val coroutineDispatchers: CoroutineDispatchers,
private val roomMembersModerationPresenter: Presenter<RoomMembersModerationState>,
private val roomMembersModerationPresenter: Presenter<RoomMemberModerationState>,
private val encryptionService: EncryptionService,
@Assisted private val navigator: RoomMemberListNavigator,
) : Presenter<RoomMemberListState> {
@@ -69,7 +71,7 @@ class RoomMemberListPresenter @AssistedInject constructor(
val membersState by room.membersStateFlow.collectAsState()
val syncUpdateFlow = room.syncUpdateFlow.collectAsState()
val canInvite by room.canInviteAsState(syncUpdateFlow.value)
val isDm = room.isDmAsState()
val roomModerationState = roomMembersModerationPresenter.present()
val roomMemberIdentityStates by produceState(persistentMapOf<UserId, IdentityState>()) {
@@ -163,8 +165,10 @@ class RoomMemberListPresenter @AssistedInject constructor(
is RoomMemberListEvents.OnSearchActiveChanged -> isSearchActive = event.active
is RoomMemberListEvents.UpdateSearchQuery -> searchQuery = event.query
is RoomMemberListEvents.RoomMemberSelected ->
if (roomModerationState.canDisplayModerationActions) {
roomModerationState.eventSink(RoomMembersModerationEvents.SelectRoomMember(event.roomMember))
if (event.roomMember.membership == RoomMembershipState.BAN) {
roomModerationState.eventSink(RoomMemberModerationEvents.ProcessAction(ModerationAction.UnbanUser(event.roomMember)))
} else if (!isDm.value && (roomModerationState.canBan || roomModerationState.canKick)) {
roomModerationState.eventSink(RoomMemberModerationEvents.RenderActions(event.roomMember))
} else {
navigator.openRoomMemberDetails(event.roomMember.userId)
}

View File

@@ -7,7 +7,7 @@
package io.element.android.features.roomdetails.impl.members
import io.element.android.features.roomdetails.impl.members.moderation.RoomMembersModerationState
import io.element.android.features.roommembermoderation.api.RoomMemberModerationState
import io.element.android.libraries.architecture.AsyncData
import io.element.android.libraries.designsystem.theme.components.SearchBarResultState
import io.element.android.libraries.matrix.api.encryption.identity.IdentityState
@@ -20,7 +20,7 @@ data class RoomMemberListState(
val searchResults: SearchBarResultState<AsyncData<RoomMembers>>,
val isSearchActive: Boolean,
val canInvite: Boolean,
val moderationState: RoomMembersModerationState,
val moderationState: RoomMemberModerationState,
val eventSink: (RoomMemberListEvents) -> Unit,
)

View File

@@ -8,8 +8,8 @@
package io.element.android.features.roomdetails.impl.members
import androidx.compose.ui.tooling.preview.PreviewParameterProvider
import io.element.android.features.roomdetails.impl.members.moderation.RoomMembersModerationState
import io.element.android.features.roomdetails.impl.members.moderation.aRoomMembersModerationState
import io.element.android.features.roommembermoderation.api.RoomMemberModerationEvents
import io.element.android.features.roommembermoderation.api.RoomMemberModerationState
import io.element.android.libraries.architecture.AsyncData
import io.element.android.libraries.designsystem.theme.components.SearchBarResultState
import io.element.android.libraries.matrix.api.core.UserId
@@ -87,7 +87,7 @@ internal class RoomMemberListStateBannedProvider : PreviewParameterProvider<Room
),
)
),
moderationState = aRoomMembersModerationState(canDisplayBannedUsers = true),
moderationState = aRoomMemberModerationState(),
),
aRoomMemberListState(
roomMembers = AsyncData.Loading(
@@ -101,7 +101,7 @@ internal class RoomMemberListStateBannedProvider : PreviewParameterProvider<Room
),
)
),
moderationState = aRoomMembersModerationState(canDisplayBannedUsers = true),
moderationState = aRoomMemberModerationState(),
),
aRoomMemberListState(
roomMembers = AsyncData.Success(
@@ -111,7 +111,7 @@ internal class RoomMemberListStateBannedProvider : PreviewParameterProvider<Room
banned = persistentListOf(),
)
),
moderationState = aRoomMembersModerationState(canDisplayBannedUsers = true),
moderationState = aRoomMemberModerationState(),
)
)
}
@@ -119,7 +119,7 @@ internal class RoomMemberListStateBannedProvider : PreviewParameterProvider<Room
internal fun aRoomMemberListState(
roomMembers: AsyncData<RoomMembers> = AsyncData.Loading(),
searchResults: SearchBarResultState<AsyncData<RoomMembers>> = SearchBarResultState.Initial(),
moderationState: RoomMembersModerationState = aRoomMembersModerationState(),
moderationState: RoomMemberModerationState = aRoomMemberModerationState(),
) = RoomMemberListState(
roomMembers = roomMembers,
searchQuery = "",
@@ -130,6 +130,17 @@ internal fun aRoomMemberListState(
eventSink = {}
)
fun aRoomMemberModerationState(
canBan: Boolean = false,
canKick: Boolean = false,
): RoomMemberModerationState {
return object : RoomMemberModerationState {
override val canKick: Boolean = canKick
override val canBan: Boolean = canBan
override val eventSink: (RoomMemberModerationEvents) -> Unit = {}
}
}
fun aRoomMember(
userId: UserId = UserId("@alice:server.org"),
displayName: String? = null,

View File

@@ -45,7 +45,7 @@ import androidx.compose.ui.unit.dp
import io.element.android.compound.theme.ElementTheme
import io.element.android.compound.tokens.generated.CompoundIcons
import io.element.android.features.roomdetails.impl.R
import io.element.android.features.roomdetails.impl.members.moderation.RoomMembersModerationView
import io.element.android.features.roommembermoderation.api.RoomMemberModerationState
import io.element.android.libraries.architecture.AsyncData
import io.element.android.libraries.designsystem.components.avatar.AvatarSize
import io.element.android.libraries.designsystem.components.button.BackButton
@@ -99,7 +99,7 @@ fun RoomMemberListView(
}
) { padding ->
var selectedSection by remember { mutableStateOf(SelectedSection.entries[initialSelectedSectionIndex]) }
if (!state.moderationState.canDisplayBannedUsers && selectedSection == SelectedSection.BANNED) {
if (!state.moderationState.canBan && selectedSection == SelectedSection.BANNED) {
SideEffect {
selectedSection = SelectedSection.MEMBERS
}
@@ -127,7 +127,7 @@ fun RoomMemberListView(
RoomMemberList(
roomMembers = state.roomMembers,
showMembersCount = true,
canDisplayBannedUsersControls = state.moderationState.canDisplayBannedUsers,
canDisplayBannedUsersControls = state.moderationState.canBan,
selectedSection = selectedSection,
onSelectedSectionChange = { selectedSection = it },
onSelectUser = ::onSelectUser,
@@ -135,11 +135,6 @@ fun RoomMemberListView(
}
}
}
RoomMembersModerationView(
state = state.moderationState,
onDisplayMemberProfile = navigator::openRoomMemberDetails
)
}
@OptIn(ExperimentalMaterial3Api::class, ExperimentalFoundationApi::class)

View File

@@ -1,15 +0,0 @@
/*
* Copyright 2024 New Vector 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.roomdetails.impl.members.moderation
import io.element.android.libraries.architecture.AsyncAction
import io.element.android.libraries.matrix.api.room.RoomMember
data class ConfirmingRoomMemberAction(
val roomMember: RoomMember,
) : AsyncAction.Confirming

View File

@@ -1,21 +0,0 @@
/*
* Copyright 2024 New Vector 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.roomdetails.impl.members.moderation
import io.element.android.libraries.matrix.api.core.UserId
import io.element.android.libraries.matrix.api.room.RoomMember
sealed interface RoomMembersModerationEvents {
data class SelectRoomMember(val roomMember: RoomMember) : RoomMembersModerationEvents
data object KickUser : RoomMembersModerationEvents
data class DoKickUser(val reason: String) : RoomMembersModerationEvents
data object BanUser : RoomMembersModerationEvents
data class DoBanUser(val reason: String) : RoomMembersModerationEvents
data class UnbanUser(val userId: UserId) : RoomMembersModerationEvents
data object Reset : RoomMembersModerationEvents
}

View File

@@ -1,30 +0,0 @@
/*
* Copyright 2024 New Vector 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.roomdetails.impl.members.moderation
import io.element.android.libraries.architecture.AsyncAction
import io.element.android.libraries.matrix.api.core.UserId
import io.element.android.libraries.matrix.api.room.RoomMember
import kotlinx.collections.immutable.ImmutableList
data class RoomMembersModerationState(
val canDisplayModerationActions: Boolean,
val selectedRoomMember: RoomMember?,
val actions: ImmutableList<ModerationAction>,
val kickUserAsyncAction: AsyncAction<Unit>,
val banUserAsyncAction: AsyncAction<Unit>,
val unbanUserAsyncAction: AsyncAction<Unit>,
val canDisplayBannedUsers: Boolean,
val eventSink: (RoomMembersModerationEvents) -> Unit,
)
sealed interface ModerationAction {
data class DisplayProfile(val userId: UserId) : ModerationAction
data class KickUser(val userId: UserId) : ModerationAction
data class BanUser(val userId: UserId) : ModerationAction
}

View File

@@ -1,95 +0,0 @@
/*
* Copyright 2024 New Vector 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.roomdetails.impl.members.moderation
import androidx.compose.ui.tooling.preview.PreviewParameterProvider
import io.element.android.features.roomdetails.impl.members.anAlice
import io.element.android.libraries.architecture.AsyncAction
import io.element.android.libraries.matrix.api.room.RoomMember
import kotlinx.collections.immutable.toPersistentList
class RoomMembersModerationStateProvider : PreviewParameterProvider<RoomMembersModerationState> {
override val values: Sequence<RoomMembersModerationState>
get() = sequenceOf(
aRoomMembersModerationState(
selectedRoomMember = anAlice(),
actions = listOf(
ModerationAction.DisplayProfile(anAlice().userId),
),
),
aRoomMembersModerationState(
selectedRoomMember = anAlice(),
actions = listOf(
ModerationAction.DisplayProfile(anAlice().userId),
ModerationAction.KickUser(userId = anAlice().userId),
),
),
aRoomMembersModerationState(
selectedRoomMember = anAlice(),
actions = listOf(
ModerationAction.DisplayProfile(anAlice().userId),
ModerationAction.KickUser(userId = anAlice().userId),
ModerationAction.BanUser(userId = anAlice().userId),
),
),
aRoomMembersModerationState(
selectedRoomMember = anAlice(),
kickUserAsyncAction = AsyncAction.ConfirmingNoParams,
),
aRoomMembersModerationState(
selectedRoomMember = anAlice(),
kickUserAsyncAction = AsyncAction.Loading,
),
aRoomMembersModerationState(
selectedRoomMember = anAlice(),
banUserAsyncAction = AsyncAction.ConfirmingNoParams,
),
aRoomMembersModerationState(
selectedRoomMember = anAlice(),
banUserAsyncAction = AsyncAction.Loading,
),
aRoomMembersModerationState(
selectedRoomMember = anAlice(),
unbanUserAsyncAction = AsyncAction.Loading,
),
aRoomMembersModerationState(
kickUserAsyncAction = AsyncAction.Failure(Exception("Failed to kick user")),
banUserAsyncAction = AsyncAction.Failure(Exception("Failed to ban user")),
unbanUserAsyncAction = AsyncAction.Failure(Exception("Failed to unban user")),
),
aRoomMembersModerationState(
selectedRoomMember = anAlice(),
unbanUserAsyncAction = ConfirmingRoomMemberAction(anAlice()),
),
aRoomMembersModerationState(
kickUserAsyncAction = AsyncAction.Success(Unit),
banUserAsyncAction = AsyncAction.Success(Unit),
unbanUserAsyncAction = AsyncAction.Success(Unit),
),
)
}
fun aRoomMembersModerationState(
canDisplayModerationActions: Boolean = false,
selectedRoomMember: RoomMember? = null,
actions: List<ModerationAction> = emptyList(),
kickUserAsyncAction: AsyncAction<Unit> = AsyncAction.Uninitialized,
banUserAsyncAction: AsyncAction<Unit> = AsyncAction.Uninitialized,
unbanUserAsyncAction: AsyncAction<Unit> = AsyncAction.Uninitialized,
canDisplayBannedUsers: Boolean = false,
eventSink: (RoomMembersModerationEvents) -> Unit = {},
) = RoomMembersModerationState(
canDisplayModerationActions = canDisplayModerationActions,
selectedRoomMember = selectedRoomMember,
actions = actions.toPersistentList(),
kickUserAsyncAction = kickUserAsyncAction,
banUserAsyncAction = banUserAsyncAction,
unbanUserAsyncAction = unbanUserAsyncAction,
canDisplayBannedUsers = canDisplayBannedUsers,
eventSink = eventSink,
)

View File

@@ -0,0 +1,21 @@
/*
* Copyright 2025 New Vector Ltd.
*
* SPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-Element-Commercial
* Please see LICENSE files in the repository root for full details.
*/
plugins {
id("io.element.android-compose-library")
}
android {
namespace = "io.element.android.features.roommembermoderation.api"
}
dependencies {
implementation(projects.libraries.architecture)
implementation(projects.libraries.designsystem)
implementation(projects.libraries.uiStrings)
implementation(projects.libraries.matrix.api)
}

View File

@@ -0,0 +1,15 @@
/*
* Copyright 2024 New Vector 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.roommembermoderation.api
import io.element.android.libraries.matrix.api.room.RoomMember
interface RoomMemberModerationEvents {
data class RenderActions(val roomMember: RoomMember) : RoomMemberModerationEvents
data class ProcessAction(val action: ModerationAction): RoomMemberModerationEvents
}

View File

@@ -0,0 +1,20 @@
/*
* Copyright 2025 New Vector 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.roommembermoderation.api
import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier
interface RoomMemberModerationRenderer {
@Composable
fun Render(
state: RoomMemberModerationState,
onSelectAction: (ModerationAction) -> Unit,
modifier: Modifier,
)
}

View File

@@ -0,0 +1,23 @@
/*
* Copyright 2024 New Vector 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.roommembermoderation.api
import io.element.android.libraries.matrix.api.room.RoomMember
interface RoomMemberModerationState {
val canKick: Boolean
val canBan: Boolean
val eventSink: (RoomMemberModerationEvents) -> Unit
}
sealed interface ModerationAction {
data class DisplayProfile(val member: RoomMember) : ModerationAction
data class KickUser(val member: RoomMember) : ModerationAction
data class BanUser(val member: RoomMember) : ModerationAction
data class UnbanUser(val member: RoomMember) : ModerationAction
}

View File

@@ -0,0 +1,39 @@
import extension.setupAnvil
/*
* Copyright 2025 New Vector Ltd.
*
* SPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-Element-Commercial
* Please see LICENSE files in the repository root for full details.
*/
plugins {
id("io.element.android-compose-library")
}
android {
namespace = "io.element.android.features.roommembermoderation.impl"
}
setupAnvil()
dependencies {
implementation(projects.libraries.core)
implementation(projects.libraries.architecture)
implementation(projects.libraries.matrix.api)
implementation(projects.libraries.matrixui)
api(projects.features.roommembermoderation.api)
implementation(projects.libraries.designsystem)
implementation(projects.libraries.uiStrings)
implementation(projects.services.analytics.compose)
testImplementation(libs.test.junit)
testImplementation(libs.coroutines.test)
testImplementation(libs.coroutines.core)
testImplementation(libs.molecule.runtime)
testImplementation(libs.test.truth)
testImplementation(libs.test.turbine)
testImplementation(projects.libraries.matrix.test)
testImplementation(projects.tests.testutils)
testImplementation(projects.services.analytics.test)
}

View File

@@ -0,0 +1,37 @@
/*
* Copyright 2025 New Vector 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.roommembermoderation.impl
import androidx.compose.runtime.Composable
import androidx.compose.runtime.SideEffect
import androidx.compose.ui.Modifier
import com.squareup.anvil.annotations.ContributesBinding
import io.element.android.features.roommembermoderation.api.ModerationAction
import io.element.android.features.roommembermoderation.api.RoomMemberModerationRenderer
import io.element.android.features.roommembermoderation.api.RoomMemberModerationState
import io.element.android.libraries.di.RoomScope
import timber.log.Timber
import javax.inject.Inject
@ContributesBinding(RoomScope::class)
class DefaultRoomMemberModerationRenderer @Inject constructor() : RoomMemberModerationRenderer {
@Composable
override fun Render(
state: RoomMemberModerationState,
onSelectAction: (ModerationAction) -> Unit,
modifier: Modifier
) {
if (state is InternalRoomMemberModerationState) {
RoomMemberModerationView(state, onSelectAction, modifier)
} else {
SideEffect {
Timber.d("RoomMemberModerationRenderer: Render called with unsupported state: $state")
}
}
}
}

View File

@@ -0,0 +1,17 @@
/*
* Copyright 2024 New Vector 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.roommembermoderation.impl
import io.element.android.features.roommembermoderation.api.RoomMemberModerationEvents
sealed interface InternalRoomMemberModerationEvents: RoomMemberModerationEvents {
data class DoKickUser(val reason: String) : InternalRoomMemberModerationEvents
data class DoBanUser(val reason: String) : InternalRoomMemberModerationEvents
data object DoUnbanUser : InternalRoomMemberModerationEvents
data object Reset : InternalRoomMemberModerationEvents
}

View File

@@ -0,0 +1,32 @@
/*
* Copyright 2024 New Vector 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.roommembermoderation.impl
import io.element.android.features.roommembermoderation.api.ModerationAction
import io.element.android.features.roommembermoderation.api.RoomMemberModerationEvents
import io.element.android.features.roommembermoderation.api.RoomMemberModerationState
import io.element.android.libraries.architecture.AsyncAction
import io.element.android.libraries.architecture.AsyncData
import io.element.android.libraries.matrix.api.room.RoomMember
import kotlinx.collections.immutable.ImmutableList
data class InternalRoomMemberModerationState(
override val canKick: Boolean,
override val canBan: Boolean,
val selectedRoomMember: AsyncData<RoomMember>,
val actions: ImmutableList<ModerationAction>,
val kickUserAsyncAction: AsyncAction<Unit>,
val banUserAsyncAction: AsyncAction<Unit>,
val unbanUserAsyncAction: AsyncAction<Unit>,
override val eventSink: (RoomMemberModerationEvents) -> Unit,
) : RoomMemberModerationState {
val canOnlyDisplayProfile = actions.size == 1 && actions.first() is ModerationAction.DisplayProfile
val canDisplayActions = actions.isNotEmpty() && !canOnlyDisplayProfile
}

View File

@@ -5,31 +5,34 @@
* Please see LICENSE files in the repository root for full details.
*/
package io.element.android.features.roomdetails.impl.members.moderation
package io.element.android.features.roommembermoderation.impl
import androidx.compose.runtime.Composable
import androidx.compose.runtime.MutableState
import androidx.compose.runtime.collectAsState
import androidx.compose.runtime.derivedStateOf
import androidx.compose.runtime.getValue
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.remember
import androidx.compose.runtime.rememberCoroutineScope
import androidx.compose.runtime.setValue
import im.vector.app.features.analytics.plan.RoomModeration
import io.element.android.features.roommembermoderation.api.ModerationAction
import io.element.android.features.roommembermoderation.api.RoomMemberModerationEvents
import io.element.android.features.roommembermoderation.api.RoomMemberModerationState
import io.element.android.libraries.architecture.AsyncAction
import io.element.android.libraries.architecture.AsyncData
import io.element.android.libraries.architecture.Presenter
import io.element.android.libraries.architecture.runUpdatingState
import io.element.android.libraries.core.coroutine.CoroutineDispatchers
import io.element.android.libraries.matrix.api.core.UserId
import io.element.android.libraries.matrix.api.room.JoinedRoom
import io.element.android.libraries.matrix.api.room.RoomMember
import io.element.android.libraries.matrix.api.room.RoomMembershipState
import io.element.android.libraries.matrix.ui.room.canBanAsState
import io.element.android.libraries.matrix.ui.room.canKickAsState
import io.element.android.libraries.matrix.ui.room.isDmAsState
import io.element.android.libraries.matrix.ui.room.userPowerLevelAsState
import io.element.android.services.analytics.api.AnalyticsService
import kotlinx.collections.immutable.PersistentList
import kotlinx.collections.immutable.persistentListOf
import kotlinx.collections.immutable.toPersistentList
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.flow.drop
@@ -37,45 +40,20 @@ import kotlinx.coroutines.flow.take
import kotlinx.coroutines.launch
import javax.inject.Inject
class RoomMembersModerationPresenter @Inject constructor(
class RoomMemberModerationPresenter @Inject constructor(
private val room: JoinedRoom,
private val dispatchers: CoroutineDispatchers,
private val analyticsService: AnalyticsService,
) : Presenter<RoomMembersModerationState> {
private var selectedMember by mutableStateOf<RoomMember?>(null)
) : Presenter<RoomMemberModerationState> {
private var selectedMember by mutableStateOf<AsyncData<RoomMember>>(AsyncData.Uninitialized)
@Composable
override fun present(): RoomMembersModerationState {
override fun present(): RoomMemberModerationState {
val coroutineScope = rememberCoroutineScope()
val syncUpdateFlow = room.syncUpdateFlow.collectAsState()
val canBan by room.canBanAsState(syncUpdateFlow.value)
val canKick by room.canKickAsState(syncUpdateFlow.value)
val isDm by room.isDmAsState()
val currentUserMemberPowerLevel by room.userPowerLevelAsState(syncUpdateFlow.value)
val canDisplayModerationActions by remember {
derivedStateOf { !isDm && (canBan || canKick) }
}
val canDisplayBannedUsers by remember {
derivedStateOf { !isDm && canBan }
}
val moderationActions by remember {
derivedStateOf {
buildList {
selectedMember?.let { roomMember ->
add(ModerationAction.DisplayProfile(roomMember.userId))
if (currentUserMemberPowerLevel > roomMember.powerLevel) {
if (canKick) {
add(ModerationAction.KickUser(roomMember.userId))
}
if (canBan) {
add(ModerationAction.BanUser(roomMember.userId))
}
}
}
}.toPersistentList()
}
}
val canBan = room.canBanAsState(syncUpdateFlow.value)
val canKick = room.canKickAsState(syncUpdateFlow.value)
val currentUserMemberPowerLevel = room.userPowerLevelAsState(syncUpdateFlow.value)
val kickUserAsyncAction =
remember { mutableStateOf(AsyncAction.Uninitialized as AsyncAction<Unit>) }
@@ -84,60 +62,92 @@ class RoomMembersModerationPresenter @Inject constructor(
val unbanUserAsyncAction =
remember { mutableStateOf(AsyncAction.Uninitialized as AsyncAction<Unit>) }
fun handleEvent(event: RoomMembersModerationEvents) {
val moderationActions = remember { mutableStateOf(persistentListOf<ModerationAction>()) }
fun handleEvent(event: RoomMemberModerationEvents) {
when (event) {
is RoomMembersModerationEvents.SelectRoomMember -> {
if (event.roomMember.membership == RoomMembershipState.BAN && canBan) {
// In this case the view will render a dialog to confirm the unbanning of the user
unbanUserAsyncAction.value = ConfirmingRoomMemberAction(event.roomMember)
} else {
// In this case the view will render a bottom sheet.
selectedMember = event.roomMember
is RoomMemberModerationEvents.RenderActions -> {
selectedMember = AsyncData.Success(event.roomMember)
moderationActions.value = computeModerationActions(
member = event.roomMember,
canKick = canKick.value,
canBan = canBan.value,
currentUserMemberPowerLevel = currentUserMemberPowerLevel.value,
)
}
is RoomMemberModerationEvents.ProcessAction -> {
when(val action = event.action) {
is ModerationAction.DisplayProfile -> Unit
is ModerationAction.KickUser -> {
selectedMember = AsyncData.Success(action.member)
kickUserAsyncAction.value = AsyncAction.ConfirmingNoParams
}
is ModerationAction.BanUser -> {
selectedMember = AsyncData.Success(action.member)
banUserAsyncAction.value = AsyncAction.ConfirmingNoParams
}
is ModerationAction.UnbanUser -> {
selectedMember = AsyncData.Success(action.member)
unbanUserAsyncAction.value = AsyncAction.ConfirmingNoParams
}
}
}
is RoomMembersModerationEvents.KickUser -> {
kickUserAsyncAction.value = AsyncAction.ConfirmingNoParams
}
is RoomMembersModerationEvents.DoKickUser -> {
selectedMember?.let {
is InternalRoomMemberModerationEvents.DoKickUser -> {
selectedMember.dataOrNull()?.let {
coroutineScope.kickUser(it.userId, event.reason, kickUserAsyncAction)
}
selectedMember = null
selectedMember = AsyncData.Uninitialized
}
is RoomMembersModerationEvents.BanUser -> {
banUserAsyncAction.value = AsyncAction.ConfirmingNoParams
}
is RoomMembersModerationEvents.DoBanUser -> {
selectedMember?.let {
is InternalRoomMemberModerationEvents.DoBanUser -> {
selectedMember.dataOrNull()?.let {
coroutineScope.banUser(it.userId, event.reason, banUserAsyncAction)
}
selectedMember = null
selectedMember = AsyncData.Uninitialized
}
is RoomMembersModerationEvents.UnbanUser -> {
// We are already confirming when we are reaching this point
coroutineScope.unbanUser(event.userId, unbanUserAsyncAction)
}
is RoomMembersModerationEvents.Reset -> {
selectedMember = null
is InternalRoomMemberModerationEvents.Reset -> {
selectedMember = AsyncData.Uninitialized
kickUserAsyncAction.value = AsyncAction.Uninitialized
banUserAsyncAction.value = AsyncAction.Uninitialized
unbanUserAsyncAction.value = AsyncAction.Uninitialized
}
is InternalRoomMemberModerationEvents.DoUnbanUser -> {
selectedMember.dataOrNull()?.let {
coroutineScope.unbanUser(it.userId, unbanUserAsyncAction)
}
selectedMember = AsyncData.Uninitialized
}
}
}
return RoomMembersModerationState(
canDisplayModerationActions = canDisplayModerationActions,
return InternalRoomMemberModerationState(
canKick = canKick.value,
canBan = canBan.value,
selectedRoomMember = selectedMember,
actions = moderationActions,
actions = moderationActions.value,
kickUserAsyncAction = kickUserAsyncAction.value,
banUserAsyncAction = banUserAsyncAction.value,
unbanUserAsyncAction = unbanUserAsyncAction.value,
canDisplayBannedUsers = canDisplayBannedUsers,
eventSink = { handleEvent(it) },
)
}
private fun computeModerationActions(
member: RoomMember,
canKick: Boolean,
canBan: Boolean,
currentUserMemberPowerLevel: Long,
): PersistentList<ModerationAction> {
return buildList {
add(ModerationAction.DisplayProfile(member))
if (canKick && member.powerLevel < currentUserMemberPowerLevel) {
add(ModerationAction.KickUser(member))
}
if (canBan && member.powerLevel < currentUserMemberPowerLevel) {
add(ModerationAction.BanUser(member))
}
}.toPersistentList()
}
private fun CoroutineScope.kickUser(
userId: UserId,
reason: String,
@@ -167,7 +177,7 @@ class RoomMembersModerationPresenter @Inject constructor(
unbanUserAction: MutableState<AsyncAction<Unit>>,
) = runActionAndWaitForMembershipChange(unbanUserAction) {
analyticsService.capture(RoomModeration(RoomModeration.Action.UnbanMember))
room.unbanUser(userId)
room.unbanUser(userId = userId)
}
private fun <T> CoroutineScope.runActionAndWaitForMembershipChange(

View File

@@ -0,0 +1,94 @@
/*
* Copyright 2024 New Vector 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.roommembermoderation.impl
import androidx.compose.ui.tooling.preview.PreviewParameterProvider
import io.element.android.features.roommembermoderation.api.ModerationAction
import io.element.android.features.roommembermoderation.api.RoomMemberModerationEvents
import io.element.android.libraries.architecture.AsyncAction
import io.element.android.libraries.architecture.AsyncData
import io.element.android.libraries.matrix.api.core.UserId
import io.element.android.libraries.matrix.api.room.RoomMember
import io.element.android.libraries.matrix.api.room.RoomMembershipState
import kotlinx.collections.immutable.toPersistentList
class RoomMemberModerationStateProvider : PreviewParameterProvider<InternalRoomMemberModerationState> {
override val values: Sequence<InternalRoomMemberModerationState>
get() = sequenceOf(
aRoomMembersModerationState(
selectedRoomMember = AsyncData.Success(anAlice()),
actions = listOf(
ModerationAction.DisplayProfile(anAlice()),
),
),
aRoomMembersModerationState(
selectedRoomMember = AsyncData.Success(anAlice()),
actions = listOf(
ModerationAction.DisplayProfile(anAlice()),
ModerationAction.KickUser(anAlice()),
),
),
aRoomMembersModerationState(
selectedRoomMember = AsyncData.Success(anAlice()),
actions = listOf(
ModerationAction.DisplayProfile(anAlice()),
ModerationAction.KickUser(anAlice()),
ModerationAction.BanUser(anAlice()),
),
),
aRoomMembersModerationState(
selectedRoomMember = AsyncData.Success(anAlice()),
kickUserAsyncAction = AsyncAction.ConfirmingNoParams,
),
aRoomMembersModerationState(
selectedRoomMember = AsyncData.Success(anAlice()),
kickUserAsyncAction = AsyncAction.Loading,
),
aRoomMembersModerationState(
selectedRoomMember = AsyncData.Success(anAlice()),
banUserAsyncAction = AsyncAction.ConfirmingNoParams,
),
aRoomMembersModerationState(
selectedRoomMember = AsyncData.Success(anAlice()),
banUserAsyncAction = AsyncAction.Loading,
),
)
}
fun anAlice() = RoomMember(
UserId(value = "@alice:server.org"),
displayName = "Alice",
avatarUrl = null,
role = RoomMember.Role.forPowerLevel(100L),
membership = RoomMembershipState.JOIN,
isNameAmbiguous = false,
powerLevel = 100L,
normalizedPowerLevel = 100L,
isIgnored = false,
membershipChangeReason = null,
)
fun aRoomMembersModerationState(
canKick: Boolean = false,
canBan: Boolean = false,
selectedRoomMember: AsyncData<RoomMember> = AsyncData.Uninitialized,
actions: List<ModerationAction> = emptyList(),
kickUserAsyncAction: AsyncAction<Unit> = AsyncAction.Uninitialized,
banUserAsyncAction: AsyncAction<Unit> = AsyncAction.Uninitialized,
unbanUserAsyncAction: AsyncAction<Unit> = AsyncAction.Uninitialized,
eventSink: (RoomMemberModerationEvents) -> Unit = {},
) = InternalRoomMemberModerationState(
canKick = canKick,
canBan = canBan,
selectedRoomMember = selectedRoomMember,
actions = actions.toPersistentList(),
kickUserAsyncAction = kickUserAsyncAction,
banUserAsyncAction = banUserAsyncAction,
unbanUserAsyncAction = unbanUserAsyncAction,
eventSink = eventSink,
)

View File

@@ -5,7 +5,7 @@
* Please see LICENSE files in the repository root for full details.
*/
package io.element.android.features.roomdetails.impl.members.moderation
package io.element.android.features.roommembermoderation.impl
import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.Column
@@ -20,7 +20,9 @@ import androidx.compose.material3.ExperimentalMaterial3Api
import androidx.compose.material3.rememberModalBottomSheetState
import androidx.compose.runtime.Composable
import androidx.compose.runtime.LaunchedEffect
import androidx.compose.runtime.getValue
import androidx.compose.runtime.rememberCoroutineScope
import androidx.compose.runtime.rememberUpdatedState
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.res.stringResource
@@ -30,7 +32,7 @@ import androidx.compose.ui.tooling.preview.PreviewParameter
import androidx.compose.ui.unit.dp
import io.element.android.compound.theme.ElementTheme
import io.element.android.compound.tokens.generated.CompoundIcons
import io.element.android.features.roomdetails.impl.R
import io.element.android.features.roommembermoderation.api.ModerationAction
import io.element.android.libraries.architecture.AsyncAction
import io.element.android.libraries.designsystem.components.async.AsyncIndicator
import io.element.android.libraries.designsystem.components.async.AsyncIndicatorHost
@@ -47,7 +49,6 @@ import io.element.android.libraries.designsystem.theme.components.ListItem
import io.element.android.libraries.designsystem.theme.components.ListItemStyle
import io.element.android.libraries.designsystem.theme.components.ModalBottomSheet
import io.element.android.libraries.designsystem.theme.components.Text
import io.element.android.libraries.matrix.api.core.UserId
import io.element.android.libraries.matrix.api.room.RoomMember
import io.element.android.libraries.matrix.api.room.getBestName
import io.element.android.libraries.matrix.ui.model.getAvatarData
@@ -57,32 +58,27 @@ import kotlinx.coroutines.launch
import timber.log.Timber
@Composable
fun RoomMembersModerationView(
state: RoomMembersModerationState,
onDisplayMemberProfile: (UserId) -> Unit,
fun RoomMemberModerationView(
state: InternalRoomMemberModerationState,
onSelectAction: (ModerationAction) -> Unit,
modifier: Modifier = Modifier,
) {
val selectedRoomMember = state.selectedRoomMember.dataOrNull()
Box(modifier = modifier) {
if (state.selectedRoomMember != null && state.actions.isNotEmpty()) {
if (selectedRoomMember != null && state.canDisplayActions) {
RoomMemberActionsBottomSheet(
roomMember = state.selectedRoomMember,
roomMember = selectedRoomMember,
actions = state.actions,
onSelectAction = { action ->
when (action) {
is ModerationAction.DisplayProfile -> {
onDisplayMemberProfile(action.userId)
}
is ModerationAction.KickUser -> {
state.eventSink(RoomMembersModerationEvents.KickUser)
}
is ModerationAction.BanUser -> {
state.eventSink(RoomMembersModerationEvents.BanUser)
}
}
},
onDismiss = { state.eventSink(RoomMembersModerationEvents.Reset) },
onSelectAction = onSelectAction,
onDismiss = { state.eventSink(InternalRoomMemberModerationEvents.Reset) },
)
}
val onSelectAction by rememberUpdatedState(onSelectAction)
LaunchedEffect(state.canOnlyDisplayProfile) {
if (state.canOnlyDisplayProfile) {
onSelectAction(state.actions.first())
}
}
val asyncIndicatorState = rememberAsyncIndicatorState()
AsyncIndicatorHost(modifier = Modifier.statusBarsPadding(), state = asyncIndicatorState)
@@ -90,23 +86,23 @@ fun RoomMembersModerationView(
when (val action = state.kickUserAsyncAction) {
is AsyncAction.Confirming -> {
TextFieldDialog(
title = stringResource(CommonStrings.screen_bottom_sheet_manage_room_member_kick_member_confirmation_title),
submitText = stringResource(CommonStrings.screen_bottom_sheet_manage_room_member_kick_member_confirmation_action),
title = stringResource(R.string.screen_bottom_sheet_manage_room_member_kick_member_confirmation_title),
submitText = stringResource(R.string.screen_bottom_sheet_manage_room_member_kick_member_confirmation_action),
onSubmit = { reason ->
state.eventSink(RoomMembersModerationEvents.DoKickUser(reason = reason))
state.eventSink(InternalRoomMemberModerationEvents.DoKickUser(reason = reason))
},
onDismissRequest = { state.eventSink(RoomMembersModerationEvents.Reset) },
onDismissRequest = { state.eventSink(InternalRoomMemberModerationEvents.Reset) },
placeholder = stringResource(id = CommonStrings.common_reason),
label = stringResource(id = CommonStrings.common_reason),
content = stringResource(CommonStrings.screen_bottom_sheet_manage_room_member_kick_member_confirmation_description),
content = stringResource(R.string.screen_bottom_sheet_manage_room_member_kick_member_confirmation_description),
value = "",
)
}
is AsyncAction.Loading -> {
LaunchedEffect(action) {
val userDisplayName = state.selectedRoomMember?.getBestName().orEmpty()
val userDisplayName = selectedRoomMember?.getBestName().orEmpty()
asyncIndicatorState.enqueue {
AsyncIndicator.Loading(text = stringResource(CommonStrings.screen_bottom_sheet_manage_room_member_removing_user, userDisplayName))
AsyncIndicator.Loading(text = stringResource(R.string.screen_bottom_sheet_manage_room_member_removing_user, userDisplayName))
}
}
}
@@ -129,23 +125,23 @@ fun RoomMembersModerationView(
when (val action = state.banUserAsyncAction) {
is AsyncAction.Confirming -> {
TextFieldDialog(
title = stringResource(CommonStrings.screen_bottom_sheet_manage_room_member_ban_member_confirmation_title),
submitText = stringResource(CommonStrings.screen_bottom_sheet_manage_room_member_ban_member_confirmation_action),
title = stringResource(R.string.screen_bottom_sheet_manage_room_member_ban_member_confirmation_title),
submitText = stringResource(R.string.screen_bottom_sheet_manage_room_member_ban_member_confirmation_action),
onSubmit = { reason ->
state.eventSink(RoomMembersModerationEvents.DoBanUser(reason = reason))
state.eventSink(InternalRoomMemberModerationEvents.DoBanUser(reason = reason))
},
onDismissRequest = { state.eventSink(RoomMembersModerationEvents.Reset) },
onDismissRequest = { state.eventSink(InternalRoomMemberModerationEvents.Reset) },
placeholder = stringResource(id = CommonStrings.common_reason),
label = stringResource(id = CommonStrings.common_reason),
content = stringResource(CommonStrings.screen_bottom_sheet_manage_room_member_ban_member_confirmation_description),
content = stringResource(R.string.screen_bottom_sheet_manage_room_member_ban_member_confirmation_description),
value = "",
)
}
is AsyncAction.Loading -> {
LaunchedEffect(action) {
val userDisplayName = state.selectedRoomMember?.getBestName().orEmpty()
val userDisplayName = selectedRoomMember?.getBestName().orEmpty()
asyncIndicatorState.enqueue {
AsyncIndicator.Loading(text = stringResource(CommonStrings.screen_bottom_sheet_manage_room_member_banning_user, userDisplayName))
AsyncIndicator.Loading(text = stringResource(R.string.screen_bottom_sheet_manage_room_member_banning_user, userDisplayName))
}
}
}
@@ -164,24 +160,21 @@ fun RoomMembersModerationView(
}
else -> Unit
}
when (val action = state.unbanUserAsyncAction) {
is AsyncAction.Confirming -> {
if (action is ConfirmingRoomMemberAction) {
ConfirmationDialog(
title = stringResource(R.string.screen_room_member_list_manage_member_unban_title),
content = stringResource(R.string.screen_room_member_list_manage_member_unban_message),
submitText = stringResource(R.string.screen_room_member_list_manage_member_unban_action),
onSubmitClick = {
val userDisplayName = action.roomMember.getBestName()
asyncIndicatorState.enqueue {
AsyncIndicator.Loading(text = stringResource(R.string.screen_room_member_list_unbanning_user, userDisplayName))
}
state.eventSink(RoomMembersModerationEvents.UnbanUser(action.roomMember.userId))
},
onDismiss = { state.eventSink(RoomMembersModerationEvents.Reset) },
)
}
ConfirmationDialog(
title = stringResource(R.string.screen_room_member_list_manage_member_unban_title),
content = stringResource(R.string.screen_room_member_list_manage_member_unban_message),
submitText = stringResource(R.string.screen_room_member_list_manage_member_unban_action),
onSubmitClick = {
val userDisplayName = selectedRoomMember?.getBestName().orEmpty()
asyncIndicatorState.enqueue {
AsyncIndicator.Loading(text = stringResource(R.string.screen_room_member_list_unbanning_user, userDisplayName))
}
state.eventSink(InternalRoomMemberModerationEvents.DoUnbanUser)
},
onDismiss = { state.eventSink(InternalRoomMemberModerationEvents.Reset) },
)
}
is AsyncAction.Failure -> {
Timber.e(action.error, "Failed to unban user.")
@@ -260,7 +253,7 @@ private fun RoomMemberActionsBottomSheet(
when (action) {
is ModerationAction.DisplayProfile -> {
ListItem(
headlineContent = { Text(stringResource(CommonStrings.screen_bottom_sheet_manage_room_member_member_user_info)) },
headlineContent = { Text(stringResource(R.string.screen_bottom_sheet_manage_room_member_member_user_info)) },
leadingContent = ListItemContent.Icon(IconSource.Vector(CompoundIcons.Info())),
onClick = {
coroutineScope.launch {
@@ -272,7 +265,7 @@ private fun RoomMemberActionsBottomSheet(
}
is ModerationAction.KickUser -> {
ListItem(
headlineContent = { Text(stringResource(CommonStrings.screen_bottom_sheet_manage_room_member_remove)) },
headlineContent = { Text(stringResource(R.string.screen_bottom_sheet_manage_room_member_remove)) },
leadingContent = ListItemContent.Icon(IconSource.Vector(CompoundIcons.Block())),
onClick = {
coroutineScope.launch {
@@ -284,7 +277,7 @@ private fun RoomMemberActionsBottomSheet(
}
is ModerationAction.BanUser -> {
ListItem(
headlineContent = { Text(stringResource(R.string.screen_room_member_list_manage_member_remove_confirmation_ban)) },
headlineContent = { Text(stringResource(R.string.screen_bottom_sheet_manage_room_member_ban)) },
leadingContent = ListItemContent.Icon(IconSource.Vector(CompoundIcons.Block())),
style = ListItemStyle.Destructive,
onClick = {
@@ -295,6 +288,7 @@ private fun RoomMemberActionsBottomSheet(
}
)
}
is ModerationAction.UnbanUser -> Unit
}
}
}
@@ -303,16 +297,16 @@ private fun RoomMemberActionsBottomSheet(
@PreviewsDayNight
@Composable
internal fun RoomMembersModerationViewPreview(@PreviewParameter(RoomMembersModerationStateProvider::class) state: RoomMembersModerationState) {
internal fun RoomMembersModerationViewPreview(@PreviewParameter(RoomMemberModerationStateProvider::class) state: InternalRoomMemberModerationState) {
ElementPreview {
Box(
modifier = Modifier
.fillMaxWidth()
.heightIn(min = 64.dp)
) {
RoomMembersModerationView(
RoomMemberModerationView(
state = state,
onDisplayMemberProfile = {},
onSelectAction = {},
)
}
}

View File

@@ -0,0 +1,24 @@
/*
* Copyright 2025 New Vector 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.roommembermoderation.impl.di
import com.squareup.anvil.annotations.ContributesTo
import dagger.Binds
import dagger.Module
import io.element.android.features.roommembermoderation.api.RoomMemberModerationState
import io.element.android.features.roommembermoderation.impl.RoomMemberModerationPresenter
import io.element.android.libraries.architecture.Presenter
import io.element.android.libraries.di.RoomScope
import io.element.android.libraries.di.SessionScope
@ContributesTo(RoomScope::class)
@Module
interface RoomMemberModerationModule {
@Binds
fun bindRoomMemberModerationPresenter(presenter: RoomMemberModerationPresenter): Presenter<RoomMemberModerationState>
}

View File

@@ -0,0 +1,18 @@
<?xml version="1.0" encoding="utf-8"?>
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="screen_bottom_sheet_manage_room_member_ban">"Выдаліць і заблакіраваць удзельніка"</string>
<string name="screen_bottom_sheet_manage_room_member_ban_member_confirmation_action">"Заблакіраваць"</string>
<string name="screen_bottom_sheet_manage_room_member_ban_member_confirmation_description">"Яны не змогуць зноў далучыцца да гэтага пакоя, калі іх запросяць."</string>
<string name="screen_bottom_sheet_manage_room_member_ban_member_confirmation_title">"Вы ўпэўнены, што хочаце заблакіраваць гэтага карыстальніка?"</string>
<string name="screen_bottom_sheet_manage_room_member_banning_user">"Блакіроўка %1$s"</string>
<string name="screen_bottom_sheet_manage_room_member_member_user_info">"Прагляд профілю"</string>
<string name="screen_bottom_sheet_manage_room_member_remove">"Выдаліць удзельніка з пакоя"</string>
<string name="screen_bottom_sheet_manage_room_member_remove_confirmation_title">"Выдаліць удзельніка і забараніць далучацца ў будучыні?"</string>
<string name="screen_bottom_sheet_manage_room_member_removing_user">"Выдаленне %1$s…"</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_unban_action">"Разблакіраваць"</string>
<string name="screen_room_member_list_manage_member_unban_message">"Яны змогуць зноў далучыцца да гэтага пакоя, калі іх запросяць."</string>
<string name="screen_room_member_list_manage_member_unban_title">"Разблакіраваць удзельніка"</string>
<string name="screen_room_member_list_unbanning_user">"Разблакіроўка %1$s"</string>
</resources>

View File

@@ -0,0 +1,21 @@
<?xml version="1.0" encoding="utf-8"?>
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="screen_bottom_sheet_manage_room_member_ban">"Odebrat a vykázat člena"</string>
<string name="screen_bottom_sheet_manage_room_member_ban_member_confirmation_action">"Vykázat"</string>
<string name="screen_bottom_sheet_manage_room_member_ban_member_confirmation_description">"Nebudou se moci znovu připojit k této místnosti, pokud budou pozváni."</string>
<string name="screen_bottom_sheet_manage_room_member_ban_member_confirmation_title">"Jste si jisti, že chcete vykázat tohoto člena?"</string>
<string name="screen_bottom_sheet_manage_room_member_banning_user">"Vykazování %1$s"</string>
<string name="screen_bottom_sheet_manage_room_member_kick_member_confirmation_action">"Odebrat"</string>
<string name="screen_bottom_sheet_manage_room_member_kick_member_confirmation_description">"Budou moci znovu vstoupit do této místnosti, pokud budou pozváni."</string>
<string name="screen_bottom_sheet_manage_room_member_kick_member_confirmation_title">"Opravdu chcete tohoto člena odebrat?"</string>
<string name="screen_bottom_sheet_manage_room_member_member_user_info">"Zobrazit profil"</string>
<string name="screen_bottom_sheet_manage_room_member_remove">"Odebrat z místnosti"</string>
<string name="screen_bottom_sheet_manage_room_member_remove_confirmation_title">"Odebrat člena a zakázat mu připojení v budoucnu?"</string>
<string name="screen_bottom_sheet_manage_room_member_removing_user">"Odstraňování %1$s…"</string>
<string name="screen_room_member_list_manage_member_remove_confirmation_ban">"Odebrat a vykázat člena"</string>
<string name="screen_room_member_list_manage_member_remove_confirmation_kick">"Pouze odebrat člena"</string>
<string name="screen_room_member_list_manage_member_unban_action">"Zrušit vykázání"</string>
<string name="screen_room_member_list_manage_member_unban_message">"Pokud budou pozváni, budou se moci do této místnosti znovu připojit."</string>
<string name="screen_room_member_list_manage_member_unban_title">"Zrušit vykázání uživatele"</string>
<string name="screen_room_member_list_unbanning_user">"Rušení vykázání %1$s"</string>
</resources>

View File

@@ -0,0 +1,21 @@
<?xml version="1.0" encoding="utf-8"?>
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="screen_bottom_sheet_manage_room_member_ban">"Gwahardd o ystafell"</string>
<string name="screen_bottom_sheet_manage_room_member_ban_member_confirmation_action">"Atal"</string>
<string name="screen_bottom_sheet_manage_room_member_ban_member_confirmation_description">"Fyddan nhw ddim yn gallu ymuno â\'r ystafell hon eto os cân nhw wahoddiad."</string>
<string name="screen_bottom_sheet_manage_room_member_ban_member_confirmation_title">"Ydych chi\'n siŵr eich bod am wahardd yr aelod hwn?"</string>
<string name="screen_bottom_sheet_manage_room_member_banning_user">"Yn gwahardd %1$s"</string>
<string name="screen_bottom_sheet_manage_room_member_kick_member_confirmation_action">"Tynnu"</string>
<string name="screen_bottom_sheet_manage_room_member_kick_member_confirmation_description">"Fyddan nhw yn gallu ymuno â\'r ystafell hon eto os cân nhw wahoddiad."</string>
<string name="screen_bottom_sheet_manage_room_member_kick_member_confirmation_title">"Ydych chi\'n siŵr eich bod am ddileu\'r aelod hwn?"</string>
<string name="screen_bottom_sheet_manage_room_member_member_user_info">"Gweld proffil"</string>
<string name="screen_bottom_sheet_manage_room_member_remove">"Tynnu o\'r ystafell"</string>
<string name="screen_bottom_sheet_manage_room_member_remove_confirmation_title">"Dileu aelod a\'u gwahardd rhag ymuno yn y dyfodol?"</string>
<string name="screen_bottom_sheet_manage_room_member_removing_user">"Wrthi\'n dileu %1$s…"</string>
<string name="screen_room_member_list_manage_member_remove_confirmation_ban">"Gwahardd o ystafell"</string>
<string name="screen_room_member_list_manage_member_remove_confirmation_kick">"Dileu aelod yn unig"</string>
<string name="screen_room_member_list_manage_member_unban_action">"Adfer"</string>
<string name="screen_room_member_list_manage_member_unban_message">"Fyddan nhw yn gallu ymuno â\'r ystafell hon eto os cân nhw wahoddiad."</string>
<string name="screen_room_member_list_manage_member_unban_title">"Gwahardd defnyddiwr"</string>
<string name="screen_room_member_list_unbanning_user">"Dad-wahardd %1$s"</string>
</resources>

View File

@@ -0,0 +1,21 @@
<?xml version="1.0" encoding="utf-8"?>
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="screen_bottom_sheet_manage_room_member_ban">"Mitglied entfernen und sperren"</string>
<string name="screen_bottom_sheet_manage_room_member_ban_member_confirmation_action">"Sperren"</string>
<string name="screen_bottom_sheet_manage_room_member_ban_member_confirmation_description">"Sie können dem Raum nicht mehr beitreten, selbst wenn sie eingeladen werden."</string>
<string name="screen_bottom_sheet_manage_room_member_ban_member_confirmation_title">"Bist du sicher, dass du dieses Mitglied sperren möchtest?"</string>
<string name="screen_bottom_sheet_manage_room_member_banning_user">"%1$s wird gesperrt."</string>
<string name="screen_bottom_sheet_manage_room_member_kick_member_confirmation_action">"Entfernen"</string>
<string name="screen_bottom_sheet_manage_room_member_kick_member_confirmation_description">"Sie können diesen Raum wieder betreten, wenn sie eingeladen werden."</string>
<string name="screen_bottom_sheet_manage_room_member_kick_member_confirmation_title">"Möchten Sie dieses Mitglied wirklich entfernen?"</string>
<string name="screen_bottom_sheet_manage_room_member_member_user_info">"Benutzerinformationen anzeigen"</string>
<string name="screen_bottom_sheet_manage_room_member_remove">"Mitglied entfernen"</string>
<string name="screen_bottom_sheet_manage_room_member_remove_confirmation_title">"Mitglied entfernen und den erneuten Beitritt sperren?"</string>
<string name="screen_bottom_sheet_manage_room_member_removing_user">"%1$s wird entfernt."</string>
<string name="screen_room_member_list_manage_member_remove_confirmation_ban">"Mitglied entfernen und sperren"</string>
<string name="screen_room_member_list_manage_member_remove_confirmation_kick">"Mitglied nur entfernen"</string>
<string name="screen_room_member_list_manage_member_unban_action">"Sperre aufheben"</string>
<string name="screen_room_member_list_manage_member_unban_message">"Die Nutzer können den Raum wieder beitreten, wenn sie dazu eingeladen werden."</string>
<string name="screen_room_member_list_manage_member_unban_title">"Benutzer entsperren"</string>
<string name="screen_room_member_list_unbanning_user">"%1$s wird entsperrt."</string>
</resources>

View File

@@ -0,0 +1,21 @@
<?xml version="1.0" encoding="utf-8"?>
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="screen_bottom_sheet_manage_room_member_ban">"Αφαίρεση και αποκλεισμός μέλους"</string>
<string name="screen_bottom_sheet_manage_room_member_ban_member_confirmation_action">"Αποκλεισμός"</string>
<string name="screen_bottom_sheet_manage_room_member_ban_member_confirmation_description">"Δεν θα μπορεί να συμμετέχει ξανά σε αυτό το δωμάτιο εάν προσκληθεί."</string>
<string name="screen_bottom_sheet_manage_room_member_ban_member_confirmation_title">"Θες σίγουρα να αποκλείσεις αυτό το μέλος;"</string>
<string name="screen_bottom_sheet_manage_room_member_banning_user">"Αποκλεισμός %1$s"</string>
<string name="screen_bottom_sheet_manage_room_member_kick_member_confirmation_action">"Αφαίρεση"</string>
<string name="screen_bottom_sheet_manage_room_member_kick_member_confirmation_description">"Θα μπορούν να συμμετάσχουν ξανά σε αυτό το δωμάτιο εάν προσκληθούν."</string>
<string name="screen_bottom_sheet_manage_room_member_kick_member_confirmation_title">"Είστε βέβαιοι ότι θέλετε να αφαιρέσετε αυτό το μέλος;"</string>
<string name="screen_bottom_sheet_manage_room_member_member_user_info">"Προβολή προφίλ"</string>
<string name="screen_bottom_sheet_manage_room_member_remove">"Αφαίρεση από το δωμάτιο"</string>
<string name="screen_bottom_sheet_manage_room_member_remove_confirmation_title">"Αφαίρεση μέλους και απαγόρευση συμμετοχής στο μέλλον;"</string>
<string name="screen_bottom_sheet_manage_room_member_removing_user">"Αφαίρεση %1$s…"</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_unban_action">"Αναίρεση αποκλεισμού"</string>
<string name="screen_room_member_list_manage_member_unban_message">"Θα μπορεί να συμμετάσχει ξανά στο δωμάτιο εάν προσκληθεί."</string>
<string name="screen_room_member_list_manage_member_unban_title">"Άρση αποκλεισμού χρήστη"</string>
<string name="screen_room_member_list_unbanning_user">"Άρση αποκλεισμού %1$s"</string>
</resources>

View File

@@ -0,0 +1,18 @@
<?xml version="1.0" encoding="utf-8"?>
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="screen_bottom_sheet_manage_room_member_ban">"Sacar y vetar a un miembro"</string>
<string name="screen_bottom_sheet_manage_room_member_ban_member_confirmation_action">"Vetar"</string>
<string name="screen_bottom_sheet_manage_room_member_ban_member_confirmation_description">"No podrán volver a unirse a esta sala si son invitados."</string>
<string name="screen_bottom_sheet_manage_room_member_ban_member_confirmation_title">"¿Estás seguro de que quieres vetar a este miembro?"</string>
<string name="screen_bottom_sheet_manage_room_member_banning_user">"Vetando a %1$s"</string>
<string name="screen_bottom_sheet_manage_room_member_member_user_info">"Ver perfil"</string>
<string name="screen_bottom_sheet_manage_room_member_remove">"Sacar de la sala"</string>
<string name="screen_bottom_sheet_manage_room_member_remove_confirmation_title">"¿Sacar al miembro y prohibirle unirse en el futuro?"</string>
<string name="screen_bottom_sheet_manage_room_member_removing_user">"Eliminando %1$s…"</string>
<string name="screen_room_member_list_manage_member_remove_confirmation_ban">"Sacar y vetar a un miembro"</string>
<string name="screen_room_member_list_manage_member_remove_confirmation_kick">"Solo eliminar miembro"</string>
<string name="screen_room_member_list_manage_member_unban_action">"Quitar veto"</string>
<string name="screen_room_member_list_manage_member_unban_message">"Podrán volver a unirse a esta sala si son invitados de nuevo."</string>
<string name="screen_room_member_list_manage_member_unban_title">"Quitar veto al usuario"</string>
<string name="screen_room_member_list_unbanning_user">"Levantando veto a %1$s"</string>
</resources>

View File

@@ -0,0 +1,21 @@
<?xml version="1.0" encoding="utf-8"?>
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="screen_bottom_sheet_manage_room_member_ban">"Eemalda ja sea suhtluskeeld"</string>
<string name="screen_bottom_sheet_manage_room_member_ban_member_confirmation_action">"Sea suhtluskeeld"</string>
<string name="screen_bottom_sheet_manage_room_member_ban_member_confirmation_description">"Ta ei saa selle jututoaga liituda isegi kutse olemasolul."</string>
<string name="screen_bottom_sheet_manage_room_member_ban_member_confirmation_title">"Kas sa oled kindel, et soovid sellele kasutajale seada suhtluskeelu?"</string>
<string name="screen_bottom_sheet_manage_room_member_banning_user">"Seame kasutajale %1$s suhtluskeelu"</string>
<string name="screen_bottom_sheet_manage_room_member_kick_member_confirmation_action">"Eemalda"</string>
<string name="screen_bottom_sheet_manage_room_member_kick_member_confirmation_description">"Uue kutse saamisel on tal võimalik selle jututoaga uuesti liituda."</string>
<string name="screen_bottom_sheet_manage_room_member_kick_member_confirmation_title">"Kas sa oled kindel, et soovid selle osaleja eemaldada?"</string>
<string name="screen_bottom_sheet_manage_room_member_member_user_info">"Vaata profiili"</string>
<string name="screen_bottom_sheet_manage_room_member_remove">"Eemalda kasutaja jututoast"</string>
<string name="screen_bottom_sheet_manage_room_member_remove_confirmation_title">"Kas eemaldama kasutaja ja seame talle tulevikuks suhtluskeelu?"</string>
<string name="screen_bottom_sheet_manage_room_member_removing_user">"Eemaldame kasutajat %1$s…"</string>
<string name="screen_room_member_list_manage_member_remove_confirmation_ban">"Eemalda ja sea suhtluskeeld"</string>
<string name="screen_room_member_list_manage_member_remove_confirmation_kick">"Ainult eemalda kasutaja"</string>
<string name="screen_room_member_list_manage_member_unban_action">"Eemalda suhtluskeeld"</string>
<string name="screen_room_member_list_manage_member_unban_message">"Kutse olemasolul saab ta nüüd jututoaga uuesti liituda"</string>
<string name="screen_room_member_list_manage_member_unban_title">"Eemalda kasutaja suhtluskeeld"</string>
<string name="screen_room_member_list_unbanning_user">"Eemaldame suhtluskeelu kasutajalt %1$s"</string>
</resources>

View File

@@ -0,0 +1,16 @@
<?xml version="1.0" encoding="utf-8"?>
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="screen_bottom_sheet_manage_room_member_ban">"Kendu kidea eta ezarri debekua"</string>
<string name="screen_bottom_sheet_manage_room_member_ban_member_confirmation_action">"Ezarri debekua"</string>
<string name="screen_bottom_sheet_manage_room_member_ban_member_confirmation_title">"Ziur kide honi debekua ezarri nahi diozula?"</string>
<string name="screen_bottom_sheet_manage_room_member_banning_user">"%1$s(r)i debekua ezartzen"</string>
<string name="screen_bottom_sheet_manage_room_member_member_user_info">"Ikusi profila"</string>
<string name="screen_bottom_sheet_manage_room_member_remove">"Kendu gelatik"</string>
<string name="screen_bottom_sheet_manage_room_member_remove_confirmation_title">"Kidea kendu eta etorkizunean sartzea debekatu?"</string>
<string name="screen_bottom_sheet_manage_room_member_removing_user">"%1$s kentzen…"</string>
<string name="screen_room_member_list_manage_member_remove_confirmation_ban">"Kendu kidea eta ezarri debekua"</string>
<string name="screen_room_member_list_manage_member_remove_confirmation_kick">"Kendu kidea soilik"</string>
<string name="screen_room_member_list_manage_member_unban_action">"Kendu debekua"</string>
<string name="screen_room_member_list_manage_member_unban_title">"Kendu debekua erabiltzaileari"</string>
<string name="screen_room_member_list_unbanning_user">"%1$s(r)i debekua kentzen"</string>
</resources>

View File

@@ -0,0 +1,21 @@
<?xml version="1.0" encoding="utf-8"?>
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="screen_bottom_sheet_manage_room_member_ban">"برداشت و تحریم عضو"</string>
<string name="screen_bottom_sheet_manage_room_member_ban_member_confirmation_action">"تحریم"</string>
<string name="screen_bottom_sheet_manage_room_member_ban_member_confirmation_description">"در صورت دعوت نمی‌تواند دوباره به اتاق بپیوندد."</string>
<string name="screen_bottom_sheet_manage_room_member_ban_member_confirmation_title">"مطمئنید می‌خواهید این عضو را تحریم کنید؟"</string>
<string name="screen_bottom_sheet_manage_room_member_banning_user">"تحریم کردن %1$s"</string>
<string name="screen_bottom_sheet_manage_room_member_kick_member_confirmation_action">"برداشتن"</string>
<string name="screen_bottom_sheet_manage_room_member_kick_member_confirmation_description">"در صورت دعوت می‌تواند دوباره به اتاق بپیوندد."</string>
<string name="screen_bottom_sheet_manage_room_member_kick_member_confirmation_title">"مطمئنید می‌خواهید این عضو را بردارید؟"</string>
<string name="screen_bottom_sheet_manage_room_member_member_user_info">"دیدن نمایه"</string>
<string name="screen_bottom_sheet_manage_room_member_remove">"برداشتن از اتاق"</string>
<string name="screen_bottom_sheet_manage_room_member_remove_confirmation_title">"برداشتن عضو و تحریم پیوستن در آینده؟"</string>
<string name="screen_bottom_sheet_manage_room_member_removing_user">"برداشتن %1$s…"</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_unban_action">"رفع انسداد"</string>
<string name="screen_room_member_list_manage_member_unban_message">"در صورت دعوت می‌تواند دوباره به اتاق بپیوندد."</string>
<string name="screen_room_member_list_manage_member_unban_title">"تحریم نکردن کاربر"</string>
<string name="screen_room_member_list_unbanning_user">"رفع تحریم %1$s"</string>
</resources>

View File

@@ -0,0 +1,21 @@
<?xml version="1.0" encoding="utf-8"?>
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="screen_bottom_sheet_manage_room_member_ban">"Poista jäsen huoneesta ja anna porttikielto"</string>
<string name="screen_bottom_sheet_manage_room_member_ban_member_confirmation_action">"Anna porttikielto"</string>
<string name="screen_bottom_sheet_manage_room_member_ban_member_confirmation_description">"He eivät voi enää liittyä tähän huoneeseen, jos heidät kutsutaan."</string>
<string name="screen_bottom_sheet_manage_room_member_ban_member_confirmation_title">"Haluatko varmasti antaa tälle jäsenelle porttikiellon?"</string>
<string name="screen_bottom_sheet_manage_room_member_banning_user">"Annetaan porttikieltoa käyttäjälle %1$s"</string>
<string name="screen_bottom_sheet_manage_room_member_kick_member_confirmation_action">"Poista"</string>
<string name="screen_bottom_sheet_manage_room_member_kick_member_confirmation_description">"He voivat liittyä tähän huoneeseen uudelleen, jos heidät kutsutaan."</string>
<string name="screen_bottom_sheet_manage_room_member_kick_member_confirmation_title">"Haluatko varmasti poistaa tämän jäsenen?"</string>
<string name="screen_bottom_sheet_manage_room_member_member_user_info">"Näytä profiili"</string>
<string name="screen_bottom_sheet_manage_room_member_remove">"Poista huoneesta"</string>
<string name="screen_bottom_sheet_manage_room_member_remove_confirmation_title">"Poistetaanko jäsen huoneesta ja kielletäänkö heitä liittymästä tulevaisuudessa?"</string>
<string name="screen_bottom_sheet_manage_room_member_removing_user">"Poistetaan käyttäjää %1$s huoneesta…"</string>
<string name="screen_room_member_list_manage_member_remove_confirmation_ban">"Poista jäsen huoneesta ja anna porttikielto"</string>
<string name="screen_room_member_list_manage_member_remove_confirmation_kick">"Poista vain jäsen huoneesta"</string>
<string name="screen_room_member_list_manage_member_unban_action">"Poista porttikielto"</string>
<string name="screen_room_member_list_manage_member_unban_message">"He voivat liittyä tähän huoneeseen uudelleen, jos heidät kutsutaan."</string>
<string name="screen_room_member_list_manage_member_unban_title">"Poista käyttäjän porttikielto"</string>
<string name="screen_room_member_list_unbanning_user">"Poistetaan käyttäjän %1$s porttikieltoa"</string>
</resources>

View File

@@ -0,0 +1,21 @@
<?xml version="1.0" encoding="utf-8"?>
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="screen_bottom_sheet_manage_room_member_ban">"Retirer et bannir ce membre"</string>
<string name="screen_bottom_sheet_manage_room_member_ban_member_confirmation_action">"Bannir"</string>
<string name="screen_bottom_sheet_manage_room_member_ban_member_confirmation_description">"Il ne pourra pas rejoindre le salon à nouveau, même si il est invité."</string>
<string name="screen_bottom_sheet_manage_room_member_ban_member_confirmation_title">"Êtes-vous certain de vouloir bannir ce membre ?"</string>
<string name="screen_bottom_sheet_manage_room_member_banning_user">"Bannissement de %1$s"</string>
<string name="screen_bottom_sheet_manage_room_member_kick_member_confirmation_action">"Retirer"</string>
<string name="screen_bottom_sheet_manage_room_member_kick_member_confirmation_description">"Cet utilisateur pourra rejoindre le salon à nouveau si il est invité."</string>
<string name="screen_bottom_sheet_manage_room_member_kick_member_confirmation_title">"Voulez-vous vraiment supprimer ce membre ?"</string>
<string name="screen_bottom_sheet_manage_room_member_member_user_info">"Voir le profil"</string>
<string name="screen_bottom_sheet_manage_room_member_remove">"Retirer le membre du salon"</string>
<string name="screen_bottom_sheet_manage_room_member_remove_confirmation_title">"Retirer le membre et interdire ladhésion à lavenir ?"</string>
<string name="screen_bottom_sheet_manage_room_member_removing_user">"Enlever %1$s…"</string>
<string name="screen_room_member_list_manage_member_remove_confirmation_ban">"Retirer et bannir ce membre"</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_unban_action">"Débannir"</string>
<string name="screen_room_member_list_manage_member_unban_message">"Il pourra rejoindre le salon à nouveau si il est invité."</string>
<string name="screen_room_member_list_manage_member_unban_title">"Débannir lutilisateur"</string>
<string name="screen_room_member_list_unbanning_user">"Débannissement de %1$s"</string>
</resources>

View File

@@ -0,0 +1,21 @@
<?xml version="1.0" encoding="utf-8"?>
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="screen_bottom_sheet_manage_room_member_ban">"Eltávolítás és a tag kitiltása"</string>
<string name="screen_bottom_sheet_manage_room_member_ban_member_confirmation_action">"Kitiltás"</string>
<string name="screen_bottom_sheet_manage_room_member_ban_member_confirmation_description">"Többé nem csatlakozhat ehhez a szobához, akkor sem, ha meghívják."</string>
<string name="screen_bottom_sheet_manage_room_member_ban_member_confirmation_title">"Biztos, hogy kitiltja ezt a tagot?"</string>
<string name="screen_bottom_sheet_manage_room_member_banning_user">"%1$s kitiltása"</string>
<string name="screen_bottom_sheet_manage_room_member_kick_member_confirmation_action">"Eltávolítás"</string>
<string name="screen_bottom_sheet_manage_room_member_kick_member_confirmation_description">"Ehhez a szobához is csatlakozhat, ha meghívják."</string>
<string name="screen_bottom_sheet_manage_room_member_kick_member_confirmation_title">"Biztos, hogy eltávolítja ezt a tagot?"</string>
<string name="screen_bottom_sheet_manage_room_member_member_user_info">"Profil megtekintése"</string>
<string name="screen_bottom_sheet_manage_room_member_remove">"Eltávolítás a szobából"</string>
<string name="screen_bottom_sheet_manage_room_member_remove_confirmation_title">"Eltávolítja a tagot, és megtiltja a jövőbeni csatlakozást?"</string>
<string name="screen_bottom_sheet_manage_room_member_removing_user">"%1$s eltávolítása…"</string>
<string name="screen_room_member_list_manage_member_remove_confirmation_ban">"Eltávolítás és a tag kitiltása"</string>
<string name="screen_room_member_list_manage_member_remove_confirmation_kick">"Csak a tag eltávolítása"</string>
<string name="screen_room_member_list_manage_member_unban_action">"Tiltás feloldása"</string>
<string name="screen_room_member_list_manage_member_unban_message">"Ehhez a szobához is csatlakozhat, ha meghívják."</string>
<string name="screen_room_member_list_manage_member_unban_title">"Felhasználó tiltásának feloldása"</string>
<string name="screen_room_member_list_unbanning_user">"%1$s tiltásának feloldása"</string>
</resources>

View File

@@ -0,0 +1,18 @@
<?xml version="1.0" encoding="utf-8"?>
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="screen_bottom_sheet_manage_room_member_ban">"Rimuovi ed escludi"</string>
<string name="screen_bottom_sheet_manage_room_member_ban_member_confirmation_action">"Escludi"</string>
<string name="screen_bottom_sheet_manage_room_member_ban_member_confirmation_description">"Non potrà entrare nuovamente in questa stanza se invitato."</string>
<string name="screen_bottom_sheet_manage_room_member_ban_member_confirmation_title">"Vuoi davvero escludere questo membro?"</string>
<string name="screen_bottom_sheet_manage_room_member_banning_user">"Esclusione di %1$s"</string>
<string name="screen_bottom_sheet_manage_room_member_member_user_info">"Visualizza profilo"</string>
<string name="screen_bottom_sheet_manage_room_member_remove">"Rimuovi dalla stanza"</string>
<string name="screen_bottom_sheet_manage_room_member_remove_confirmation_title">"Rimuovere e vietare l\'accesso in futuro?"</string>
<string name="screen_bottom_sheet_manage_room_member_removing_user">"Rimozione di %1$s…"</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_unban_action">"Riammetti"</string>
<string name="screen_room_member_list_manage_member_unban_message">"Potrà entrare nuovamente in questa stanza se invitato."</string>
<string name="screen_room_member_list_manage_member_unban_title">"Riammetti utente"</string>
<string name="screen_room_member_list_unbanning_user">"Riammissione di %1$s"</string>
</resources>

View File

@@ -0,0 +1,18 @@
<?xml version="1.0" encoding="utf-8"?>
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="screen_bottom_sheet_manage_room_member_ban">"წევრის წაშლა და დაბლოკვა"</string>
<string name="screen_bottom_sheet_manage_room_member_ban_member_confirmation_action">"დაბლოკვა"</string>
<string name="screen_bottom_sheet_manage_room_member_ban_member_confirmation_description">"მოწვევის შემთხვევაში ამ ოთახში კვლავ გაწევრიანებას ვერ შეძლებენ."</string>
<string name="screen_bottom_sheet_manage_room_member_ban_member_confirmation_title">"დარწმუნებული ხართ, რომ ამ წევრის დაბლოკვა გსურთ?"</string>
<string name="screen_bottom_sheet_manage_room_member_banning_user">"%1$s-ს დაბლოკვა"</string>
<string name="screen_bottom_sheet_manage_room_member_member_user_info">"პროფილის ნახვა"</string>
<string name="screen_bottom_sheet_manage_room_member_remove">"ოთახიდან გაგდება"</string>
<string name="screen_bottom_sheet_manage_room_member_remove_confirmation_title">"გსურთ წევრის გაგდება და მომავალში გაწევრიანების აკრძალვა?"</string>
<string name="screen_bottom_sheet_manage_room_member_removing_user">"%1$s-ს გაგდება…"</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_unban_action">"განბლოკვა"</string>
<string name="screen_room_member_list_manage_member_unban_message">"მოწვევის შემთხვევაში განბლოკილი მომხმარებელი ისევ შეძლებს ოთახს შეუერთდეს."</string>
<string name="screen_room_member_list_manage_member_unban_title">"მომხმარებლის განბლოკვა"</string>
<string name="screen_room_member_list_unbanning_user">"%1$s-ს განბლოკვა"</string>
</resources>

View File

@@ -0,0 +1,21 @@
<?xml version="1.0" encoding="utf-8"?>
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="screen_bottom_sheet_manage_room_member_ban">"Fjern og utesteng medlem"</string>
<string name="screen_bottom_sheet_manage_room_member_ban_member_confirmation_action">"Utesteng"</string>
<string name="screen_bottom_sheet_manage_room_member_ban_member_confirmation_description">"De vil ikke kunne bli med i dette rommet igjen hvis de blir invitert."</string>
<string name="screen_bottom_sheet_manage_room_member_ban_member_confirmation_title">"Er du sikker på at du vil utestenge dette medlemmet?"</string>
<string name="screen_bottom_sheet_manage_room_member_banning_user">"Utestenger %1$s"</string>
<string name="screen_bottom_sheet_manage_room_member_kick_member_confirmation_action">"Fjern"</string>
<string name="screen_bottom_sheet_manage_room_member_kick_member_confirmation_description">"De vil kunne bli med i dette rommet igjen hvis de blir invitert."</string>
<string name="screen_bottom_sheet_manage_room_member_kick_member_confirmation_title">"Er du sikker på at du vil fjerne dette medlemmet?"</string>
<string name="screen_bottom_sheet_manage_room_member_member_user_info">"Vis profil"</string>
<string name="screen_bottom_sheet_manage_room_member_remove">"Fjern fra rommet"</string>
<string name="screen_bottom_sheet_manage_room_member_remove_confirmation_title">"Fjerne medlem og utestenge fra å bli med i fremtiden?"</string>
<string name="screen_bottom_sheet_manage_room_member_removing_user">"Fjerner %1$s…"</string>
<string name="screen_room_member_list_manage_member_remove_confirmation_ban">"Fjern og utesteng medlem"</string>
<string name="screen_room_member_list_manage_member_remove_confirmation_kick">"Bare fjern medlem"</string>
<string name="screen_room_member_list_manage_member_unban_action">"Opphev utestengelse"</string>
<string name="screen_room_member_list_manage_member_unban_message">"De vil kunne bli med i dette rommet igjen hvis de blir invitert."</string>
<string name="screen_room_member_list_manage_member_unban_title">"Opphev utestengelse av bruker"</string>
<string name="screen_room_member_list_unbanning_user">"Oppheve utestengelsen av %1$s"</string>
</resources>

View File

@@ -0,0 +1,18 @@
<?xml version="1.0" encoding="utf-8"?>
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="screen_bottom_sheet_manage_room_member_ban">"Lid verwijderen en verbannen"</string>
<string name="screen_bottom_sheet_manage_room_member_ban_member_confirmation_action">"Verbannen"</string>
<string name="screen_bottom_sheet_manage_room_member_ban_member_confirmation_description">"Ze kunnen niet meer toetreden tot deze kamer als ze worden uitgenodigd."</string>
<string name="screen_bottom_sheet_manage_room_member_ban_member_confirmation_title">"Weet je zeker dat je dit lid wilt verbannen?"</string>
<string name="screen_bottom_sheet_manage_room_member_banning_user">"%1$s verbannen"</string>
<string name="screen_bottom_sheet_manage_room_member_member_user_info">"Profiel bekijken"</string>
<string name="screen_bottom_sheet_manage_room_member_remove">"Verwijderen uit kamer"</string>
<string name="screen_bottom_sheet_manage_room_member_remove_confirmation_title">"Lid verwijderen en toekomstige deelname verbieden?"</string>
<string name="screen_bottom_sheet_manage_room_member_removing_user">"%1$s wordt verwijderd…"</string>
<string name="screen_room_member_list_manage_member_remove_confirmation_ban">"Lid verwijderen en verbannen"</string>
<string name="screen_room_member_list_manage_member_remove_confirmation_kick">"Alleen lid verwijderen"</string>
<string name="screen_room_member_list_manage_member_unban_action">"Ontbannen"</string>
<string name="screen_room_member_list_manage_member_unban_message">"Ze kunnen opnieuw tot de kamer toetreden als ze worden uitgenodigd."</string>
<string name="screen_room_member_list_manage_member_unban_title">"Ontban gebruiker"</string>
<string name="screen_room_member_list_unbanning_user">"%1$s ontbannen"</string>
</resources>

View File

@@ -0,0 +1,21 @@
<?xml version="1.0" encoding="utf-8"?>
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="screen_bottom_sheet_manage_room_member_ban">"Usuń i zbanuj członka"</string>
<string name="screen_bottom_sheet_manage_room_member_ban_member_confirmation_action">"Zbanuj"</string>
<string name="screen_bottom_sheet_manage_room_member_ban_member_confirmation_description">"Nie będą mogli ponownie dołączyć do tego pokoju, jeśli zostaną zaproszeni."</string>
<string name="screen_bottom_sheet_manage_room_member_ban_member_confirmation_title">"Czy na pewno chcesz zbanować tego członka?"</string>
<string name="screen_bottom_sheet_manage_room_member_banning_user">"Banowanie %1$s"</string>
<string name="screen_bottom_sheet_manage_room_member_kick_member_confirmation_action">"Usuń"</string>
<string name="screen_bottom_sheet_manage_room_member_kick_member_confirmation_description">"Będą mogli ponownie dołączyć do pokoju, jeśli zostaną zaproszeni."</string>
<string name="screen_bottom_sheet_manage_room_member_kick_member_confirmation_title">"Czy na pewno chcesz usunąć tego członka?"</string>
<string name="screen_bottom_sheet_manage_room_member_member_user_info">"Wyświetl profil"</string>
<string name="screen_bottom_sheet_manage_room_member_remove">"Usuń z pokoju"</string>
<string name="screen_bottom_sheet_manage_room_member_remove_confirmation_title">"Usunąć członka i zablokować możliwość dołączenia w przyszłości?"</string>
<string name="screen_bottom_sheet_manage_room_member_removing_user">"Usuwanie %1$s…"</string>
<string name="screen_room_member_list_manage_member_remove_confirmation_ban">"Usuń i zbanuj członka"</string>
<string name="screen_room_member_list_manage_member_remove_confirmation_kick">"Tylko usuń członka"</string>
<string name="screen_room_member_list_manage_member_unban_action">"Odbanuj"</string>
<string name="screen_room_member_list_manage_member_unban_message">"Będą mogli ponownie dołączyć do tego pokoju, jeśli zostaną zaproszeni."</string>
<string name="screen_room_member_list_manage_member_unban_title">"Odbanuj użytkownika"</string>
<string name="screen_room_member_list_unbanning_user">"Odbanowanie %1$s"</string>
</resources>

View File

@@ -0,0 +1,18 @@
<?xml version="1.0" encoding="utf-8"?>
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="screen_bottom_sheet_manage_room_member_ban">"Remover e banir membro"</string>
<string name="screen_bottom_sheet_manage_room_member_ban_member_confirmation_action">"Banir"</string>
<string name="screen_bottom_sheet_manage_room_member_ban_member_confirmation_description">"Eles não poderão entrar nesta sala novamente se forem convidados."</string>
<string name="screen_bottom_sheet_manage_room_member_ban_member_confirmation_title">"Tem certeza de que quer banir este membro?"</string>
<string name="screen_bottom_sheet_manage_room_member_banning_user">"Banindo %1$s"</string>
<string name="screen_bottom_sheet_manage_room_member_member_user_info">"Ver perfil"</string>
<string name="screen_bottom_sheet_manage_room_member_remove">"Remover da sala"</string>
<string name="screen_bottom_sheet_manage_room_member_remove_confirmation_title">"Remover membro e banir de entrar novamente no futuro?"</string>
<string name="screen_bottom_sheet_manage_room_member_removing_user">"Removendo %1$s…"</string>
<string name="screen_room_member_list_manage_member_remove_confirmation_ban">"Remover e banir membro"</string>
<string name="screen_room_member_list_manage_member_remove_confirmation_kick">"Somente remover membro"</string>
<string name="screen_room_member_list_manage_member_unban_action">"Desbanir"</string>
<string name="screen_room_member_list_manage_member_unban_message">"Eles poderão entrar nesta sala novamente se forem convidados."</string>
<string name="screen_room_member_list_manage_member_unban_title">"Desbanir usuário"</string>
<string name="screen_room_member_list_unbanning_user">"Desbanindo %1$s"</string>
</resources>

View File

@@ -0,0 +1,19 @@
<?xml version="1.0" encoding="utf-8"?>
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="screen_bottom_sheet_manage_room_member_ban">"Remover e banir participante"</string>
<string name="screen_bottom_sheet_manage_room_member_ban_member_confirmation_action">"Banir"</string>
<string name="screen_bottom_sheet_manage_room_member_ban_member_confirmation_description">"Não poderão voltar a entrar nesta sala, mesmo se forem convidados."</string>
<string name="screen_bottom_sheet_manage_room_member_ban_member_confirmation_title">"Tens a certeza que queres banir este participante?"</string>
<string name="screen_bottom_sheet_manage_room_member_banning_user">"A banir %1$s"</string>
<string name="screen_bottom_sheet_manage_room_member_kick_member_confirmation_description">"Poderão entrar na sala novamente se convidados."</string>
<string name="screen_bottom_sheet_manage_room_member_member_user_info">"Ver perfil"</string>
<string name="screen_bottom_sheet_manage_room_member_remove">"Remover da sala"</string>
<string name="screen_bottom_sheet_manage_room_member_remove_confirmation_title">"Remover participante e proibir que entre no futuro?"</string>
<string name="screen_bottom_sheet_manage_room_member_removing_user">"A remover %1$s…"</string>
<string name="screen_room_member_list_manage_member_remove_confirmation_ban">"Remover e banir participante"</string>
<string name="screen_room_member_list_manage_member_remove_confirmation_kick">"Remover apenas"</string>
<string name="screen_room_member_list_manage_member_unban_action">"Anular banimento"</string>
<string name="screen_room_member_list_manage_member_unban_message">"Poderão juntar-se novamente a esta sala se forem convidados."</string>
<string name="screen_room_member_list_manage_member_unban_title">"Anular banimento do utilizador"</string>
<string name="screen_room_member_list_unbanning_user">"A anular banimento de %1$s"</string>
</resources>

View File

@@ -0,0 +1,18 @@
<?xml version="1.0" encoding="utf-8"?>
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="screen_bottom_sheet_manage_room_member_ban">"Eliminați și interziceți membrul"</string>
<string name="screen_bottom_sheet_manage_room_member_ban_member_confirmation_action">"Interzicere"</string>
<string name="screen_bottom_sheet_manage_room_member_ban_member_confirmation_description">"Nu se vor putea alătura din nou acestei camere dacă sunt invitați."</string>
<string name="screen_bottom_sheet_manage_room_member_ban_member_confirmation_title">"Sunteți sigur că doriți să interziceți acest membru?"</string>
<string name="screen_bottom_sheet_manage_room_member_banning_user">"Se interzice %1$s"</string>
<string name="screen_bottom_sheet_manage_room_member_member_user_info">"Vizualizare profil"</string>
<string name="screen_bottom_sheet_manage_room_member_remove">"Înlăturați membrul"</string>
<string name="screen_bottom_sheet_manage_room_member_remove_confirmation_title">"Înlăturați membrul și interziceți-i să se alăture în viitor?"</string>
<string name="screen_bottom_sheet_manage_room_member_removing_user">"Se elimină %1$s"</string>
<string name="screen_room_member_list_manage_member_remove_confirmation_ban">"Eliminați și interziceți membrul"</string>
<string name="screen_room_member_list_manage_member_remove_confirmation_kick">"Doar înlăturare"</string>
<string name="screen_room_member_list_manage_member_unban_action">"Anulare excludere"</string>
<string name="screen_room_member_list_manage_member_unban_message">"Se vor putea alătura din nou acestei săli dacă sunt invitați."</string>
<string name="screen_room_member_list_manage_member_unban_title">"Anulați interzicerea utilizatorului"</string>
<string name="screen_room_member_list_unbanning_user">"Se anulează interzicerea lui %1$s"</string>
</resources>

View File

@@ -0,0 +1,20 @@
<?xml version="1.0" encoding="utf-8"?>
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="screen_bottom_sheet_manage_room_member_ban">"Удалить и заблокировать участника"</string>
<string name="screen_bottom_sheet_manage_room_member_ban_member_confirmation_action">"Заблокировать"</string>
<string name="screen_bottom_sheet_manage_room_member_ban_member_confirmation_description">"Они не смогут снова присоединиться к этой комнате, если их пригласят."</string>
<string name="screen_bottom_sheet_manage_room_member_ban_member_confirmation_title">"Вы уверены, что хотите заблокировать этого участника?"</string>
<string name="screen_bottom_sheet_manage_room_member_banning_user">"Блокировка %1$s"</string>
<string name="screen_bottom_sheet_manage_room_member_kick_member_confirmation_action">"Удалить"</string>
<string name="screen_bottom_sheet_manage_room_member_kick_member_confirmation_title">"Вы действительно хотите удалить этого участника?"</string>
<string name="screen_bottom_sheet_manage_room_member_member_user_info">"Посмотреть профиль"</string>
<string name="screen_bottom_sheet_manage_room_member_remove">"Удалить участника из комнаты"</string>
<string name="screen_bottom_sheet_manage_room_member_remove_confirmation_title">"Удалить участника и запретить присоединяться в будущем?"</string>
<string name="screen_bottom_sheet_manage_room_member_removing_user">"Удаление %1$s…"</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_unban_action">"Разблокировать"</string>
<string name="screen_room_member_list_manage_member_unban_message">"Они снова смогут присоединиться в эту комнату если их пригласят."</string>
<string name="screen_room_member_list_manage_member_unban_title">"Разбанить пользователя?"</string>
<string name="screen_room_member_list_unbanning_user">"Разблокировка %1$s"</string>
</resources>

View File

@@ -0,0 +1,21 @@
<?xml version="1.0" encoding="utf-8"?>
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="screen_bottom_sheet_manage_room_member_ban">"Odstrániť a zakázať člena"</string>
<string name="screen_bottom_sheet_manage_room_member_ban_member_confirmation_action">"Zakázať"</string>
<string name="screen_bottom_sheet_manage_room_member_ban_member_confirmation_description">"Nebudú sa môcť pripojiť k tejto miestnosti znova ani ak budú pozvaní."</string>
<string name="screen_bottom_sheet_manage_room_member_ban_member_confirmation_title">"Ste si istý, že chcete zakázať tohto člena?"</string>
<string name="screen_bottom_sheet_manage_room_member_banning_user">"Zakazuje sa %1$s"</string>
<string name="screen_bottom_sheet_manage_room_member_kick_member_confirmation_action">"Odstrániť"</string>
<string name="screen_bottom_sheet_manage_room_member_kick_member_confirmation_description">"V prípade pozvania sa budú môcť znova pripojiť k tejto miestnosti."</string>
<string name="screen_bottom_sheet_manage_room_member_kick_member_confirmation_title">"Ste si istý, že chcete odstrániť tohto člena?"</string>
<string name="screen_bottom_sheet_manage_room_member_member_user_info">"Zobraziť profil"</string>
<string name="screen_bottom_sheet_manage_room_member_remove">"Odstrániť z miestnosti"</string>
<string name="screen_bottom_sheet_manage_room_member_remove_confirmation_title">"Odstrániť člena a zakázať vstup v budúcnosti?"</string>
<string name="screen_bottom_sheet_manage_room_member_removing_user">"Odstraňuje sa %1$s…"</string>
<string name="screen_room_member_list_manage_member_remove_confirmation_ban">"Odstrániť a zakázať člena"</string>
<string name="screen_room_member_list_manage_member_remove_confirmation_kick">"Iba odstrániť člena"</string>
<string name="screen_room_member_list_manage_member_unban_action">"Zrušiť zákaz"</string>
<string name="screen_room_member_list_manage_member_unban_message">"V prípade pozvania sa budú môcť znova pripojiť k tejto miestnosti."</string>
<string name="screen_room_member_list_manage_member_unban_title">"Zrušiť zákaz používateľa"</string>
<string name="screen_room_member_list_unbanning_user">"Zrušenie zákazu %1$s"</string>
</resources>

View File

@@ -0,0 +1,21 @@
<?xml version="1.0" encoding="utf-8"?>
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="screen_bottom_sheet_manage_room_member_ban">"Ta bort och banna medlem"</string>
<string name="screen_bottom_sheet_manage_room_member_ban_member_confirmation_action">"Banna"</string>
<string name="screen_bottom_sheet_manage_room_member_ban_member_confirmation_description">"Denne kommer inte att kunna gå med i det här rummet igen om denne bjuds in."</string>
<string name="screen_bottom_sheet_manage_room_member_ban_member_confirmation_title">"Är du säker på att du vill banna den här medlemmen?"</string>
<string name="screen_bottom_sheet_manage_room_member_banning_user">"Bannar %1$s"</string>
<string name="screen_bottom_sheet_manage_room_member_kick_member_confirmation_action">"Ta bort"</string>
<string name="screen_bottom_sheet_manage_room_member_kick_member_confirmation_description">"Denne kommer kunna gå med i rummet igen om denne bjuds in"</string>
<string name="screen_bottom_sheet_manage_room_member_kick_member_confirmation_title">"Är du säker på att du vill ta bort den här medlemmen?"</string>
<string name="screen_bottom_sheet_manage_room_member_member_user_info">"Visa profil"</string>
<string name="screen_bottom_sheet_manage_room_member_remove">"Ta bort från rummet"</string>
<string name="screen_bottom_sheet_manage_room_member_remove_confirmation_title">"Ta bort medlem och banna från att gå med i framtiden?"</string>
<string name="screen_bottom_sheet_manage_room_member_removing_user">"Tar bort %1$s …"</string>
<string name="screen_room_member_list_manage_member_remove_confirmation_ban">"Ta bort och banna medlem"</string>
<string name="screen_room_member_list_manage_member_remove_confirmation_kick">"Ta bara bort medlem"</string>
<string name="screen_room_member_list_manage_member_unban_action">"Avbanna"</string>
<string name="screen_room_member_list_manage_member_unban_message">"Denne kommer kunna gå med i rummet igen om denne bjuds in"</string>
<string name="screen_room_member_list_manage_member_unban_title">"Avbanna användare"</string>
<string name="screen_room_member_list_unbanning_user">"Avbannar %1$s"</string>
</resources>

View File

@@ -0,0 +1,18 @@
<?xml version="1.0" encoding="utf-8"?>
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="screen_bottom_sheet_manage_room_member_ban">"Üyeyi çıkar ve yasakla"</string>
<string name="screen_bottom_sheet_manage_room_member_ban_member_confirmation_action">"Yasakla"</string>
<string name="screen_bottom_sheet_manage_room_member_ban_member_confirmation_description">"Davet edilseler bile bu odaya tekrar katılamazlar."</string>
<string name="screen_bottom_sheet_manage_room_member_ban_member_confirmation_title">"Bu üyeyi yasaklamak istediğinize emin misiniz?"</string>
<string name="screen_bottom_sheet_manage_room_member_banning_user">"Yasaklanıyor %1$s"</string>
<string name="screen_bottom_sheet_manage_room_member_member_user_info">"Profili görüntüle"</string>
<string name="screen_bottom_sheet_manage_room_member_remove">"Odadan çıkar"</string>
<string name="screen_bottom_sheet_manage_room_member_remove_confirmation_title">"Üyeyi çıkarın ve gelecekte katılmasını yasaklayın?"</string>
<string name="screen_bottom_sheet_manage_room_member_removing_user">"Kaldırılıyor %1$s…"</string>
<string name="screen_room_member_list_manage_member_remove_confirmation_ban">"Üyeyi çıkar ve yasakla"</string>
<string name="screen_room_member_list_manage_member_remove_confirmation_kick">"Yalnızca üyeyi kaldır"</string>
<string name="screen_room_member_list_manage_member_unban_action">"Yasağı Kaldır"</string>
<string name="screen_room_member_list_manage_member_unban_message">"Davet edildikleri takdirde bu odaya tekrar katılabileceklerdir."</string>
<string name="screen_room_member_list_manage_member_unban_title">"Kullanıcının yasağını kaldır"</string>
<string name="screen_room_member_list_unbanning_user">"Yasak kaldırılıyor %1$s"</string>
</resources>

View File

@@ -0,0 +1,21 @@
<?xml version="1.0" encoding="utf-8"?>
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="screen_bottom_sheet_manage_room_member_ban">"Вилучити й заблокувати учасника"</string>
<string name="screen_bottom_sheet_manage_room_member_ban_member_confirmation_action">"Заблокувати"</string>
<string name="screen_bottom_sheet_manage_room_member_ban_member_confirmation_description">"Він не зможе приєднатися до цієї кімнати знову, якщо його запросять."</string>
<string name="screen_bottom_sheet_manage_room_member_ban_member_confirmation_title">"Ви точно хочете заблокувати цього користувача?"</string>
<string name="screen_bottom_sheet_manage_room_member_banning_user">"Блокування %1$s"</string>
<string name="screen_bottom_sheet_manage_room_member_kick_member_confirmation_action">"Вилучити"</string>
<string name="screen_bottom_sheet_manage_room_member_kick_member_confirmation_description">"Вони зможуть знову приєднатися до цієї кімнати, якщо їх запросять."</string>
<string name="screen_bottom_sheet_manage_room_member_kick_member_confirmation_title">"Ви дійсно хочете вилучити цього учасника?"</string>
<string name="screen_bottom_sheet_manage_room_member_member_user_info">"Переглянути профіль"</string>
<string name="screen_bottom_sheet_manage_room_member_remove">"Вилучити з кімнати"</string>
<string name="screen_bottom_sheet_manage_room_member_remove_confirmation_title">"Вилучити учасника та заборонити приєднання в майбутньому?"</string>
<string name="screen_bottom_sheet_manage_room_member_removing_user">"Вилучення %1$s…"</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_unban_action">"Розблокувати"</string>
<string name="screen_room_member_list_manage_member_unban_message">"Вони зможуть знову приєднатися до цієї кімнати, якщо їх запросять."</string>
<string name="screen_room_member_list_manage_member_unban_title">"Розблокувати користувача"</string>
<string name="screen_room_member_list_unbanning_user">"Розблокування %1$s"</string>
</resources>

View File

@@ -0,0 +1,21 @@
<?xml version="1.0" encoding="utf-8"?>
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="screen_bottom_sheet_manage_room_member_ban">"踢出並加入黑名單"</string>
<string name="screen_bottom_sheet_manage_room_member_ban_member_confirmation_action">"加入黑名單"</string>
<string name="screen_bottom_sheet_manage_room_member_ban_member_confirmation_description">"即使收到邀請,他們仍然無法加入聊天室。"</string>
<string name="screen_bottom_sheet_manage_room_member_ban_member_confirmation_title">"您確定要將此成員加入黑名單?"</string>
<string name="screen_bottom_sheet_manage_room_member_banning_user">"正在將 %1$s 加入黑名單"</string>
<string name="screen_bottom_sheet_manage_room_member_kick_member_confirmation_action">"移除"</string>
<string name="screen_bottom_sheet_manage_room_member_kick_member_confirmation_description">"若收到邀請,他們可以再次加入此聊天室。"</string>
<string name="screen_bottom_sheet_manage_room_member_kick_member_confirmation_title">"您真的想要移除此成員嗎?"</string>
<string name="screen_bottom_sheet_manage_room_member_member_user_info">"查看個人檔案"</string>
<string name="screen_bottom_sheet_manage_room_member_remove">"踢出聊天室"</string>
<string name="screen_bottom_sheet_manage_room_member_remove_confirmation_title">"移除成員並禁止未來再度加入?"</string>
<string name="screen_bottom_sheet_manage_room_member_removing_user">"正在踢出 %1$s…"</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_unban_action">"解除黑名單"</string>
<string name="screen_room_member_list_manage_member_unban_message">"如果收到邀請,他們能再次加入聊天室。"</string>
<string name="screen_room_member_list_manage_member_unban_title">"解除黑名單"</string>
<string name="screen_room_member_list_unbanning_user">"正在解除黑名單 %1$s"</string>
</resources>

View File

@@ -0,0 +1,21 @@
<?xml version="1.0" encoding="utf-8"?>
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="screen_bottom_sheet_manage_room_member_ban">"移除并封禁成员"</string>
<string name="screen_bottom_sheet_manage_room_member_ban_member_confirmation_action">"封禁"</string>
<string name="screen_bottom_sheet_manage_room_member_ban_member_confirmation_description">"即使受到邀请,他们也无法再次加入聊天室。"</string>
<string name="screen_bottom_sheet_manage_room_member_ban_member_confirmation_title">"您确定要封禁该成员吗?"</string>
<string name="screen_bottom_sheet_manage_room_member_banning_user">"封禁 %1$s"</string>
<string name="screen_bottom_sheet_manage_room_member_kick_member_confirmation_action">"移除"</string>
<string name="screen_bottom_sheet_manage_room_member_kick_member_confirmation_description">"如果受到邀请,他们可以重新加入聊天室。"</string>
<string name="screen_bottom_sheet_manage_room_member_kick_member_confirmation_title">"您确定要移除此成员吗?"</string>
<string name="screen_bottom_sheet_manage_room_member_member_user_info">"查看个人资料"</string>
<string name="screen_bottom_sheet_manage_room_member_remove">"从聊天室移除"</string>
<string name="screen_bottom_sheet_manage_room_member_remove_confirmation_title">"删除成员并禁止重新加入?"</string>
<string name="screen_bottom_sheet_manage_room_member_removing_user">"正在移除 %1$s……"</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_unban_action">"取消封禁"</string>
<string name="screen_room_member_list_manage_member_unban_message">"如果受到邀请,他们可以重新加入聊天室。"</string>
<string name="screen_room_member_list_manage_member_unban_title">"解封用户"</string>
<string name="screen_room_member_list_unbanning_user">"解除封禁 %1$s"</string>
</resources>

View File

@@ -0,0 +1,21 @@
<?xml version="1.0" encoding="utf-8"?>
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="screen_bottom_sheet_manage_room_member_ban">"Ban from room"</string>
<string name="screen_bottom_sheet_manage_room_member_ban_member_confirmation_action">"Ban"</string>
<string name="screen_bottom_sheet_manage_room_member_ban_member_confirmation_description">"They wont be able to join this room again if invited."</string>
<string name="screen_bottom_sheet_manage_room_member_ban_member_confirmation_title">"Are you sure you want to ban this member?"</string>
<string name="screen_bottom_sheet_manage_room_member_banning_user">"Banning %1$s"</string>
<string name="screen_bottom_sheet_manage_room_member_kick_member_confirmation_action">"Remove"</string>
<string name="screen_bottom_sheet_manage_room_member_kick_member_confirmation_description">"They will be able to join this room again if invited."</string>
<string name="screen_bottom_sheet_manage_room_member_kick_member_confirmation_title">"Are you sure you want to remove this member?"</string>
<string name="screen_bottom_sheet_manage_room_member_member_user_info">"View profile"</string>
<string name="screen_bottom_sheet_manage_room_member_remove">"Remove from room"</string>
<string name="screen_bottom_sheet_manage_room_member_remove_confirmation_title">"Remove member and ban from joining in the future?"</string>
<string name="screen_bottom_sheet_manage_room_member_removing_user">"Removing %1$s…"</string>
<string name="screen_room_member_list_manage_member_remove_confirmation_ban">"Ban from room"</string>
<string name="screen_room_member_list_manage_member_remove_confirmation_kick">"Only remove member"</string>
<string name="screen_room_member_list_manage_member_unban_action">"Unban"</string>
<string name="screen_room_member_list_manage_member_unban_message">"They will be able to join this room again if invited."</string>
<string name="screen_room_member_list_manage_member_unban_title">"Unban user"</string>
<string name="screen_room_member_list_unbanning_user">"Unbanning %1$s"</string>
</resources>

View File

@@ -289,15 +289,6 @@
<string name="invite_friends_text">"Гэй, пагавары са мной у %1$s: %2$s"</string>
<string name="login_initial_device_name_android">"%1$s Android"</string>
<string name="preference_rageshake">"Паведаміць аб памылцы з дапамогай Rageshake"</string>
<string name="screen_bottom_sheet_manage_room_member_ban">"Выдаліць і заблакіраваць удзельніка"</string>
<string name="screen_bottom_sheet_manage_room_member_ban_member_confirmation_action">"Заблакіраваць"</string>
<string name="screen_bottom_sheet_manage_room_member_ban_member_confirmation_description">"Яны не змогуць зноў далучыцца да гэтага пакоя, калі іх запросяць."</string>
<string name="screen_bottom_sheet_manage_room_member_ban_member_confirmation_title">"Вы ўпэўнены, што хочаце заблакіраваць гэтага карыстальніка?"</string>
<string name="screen_bottom_sheet_manage_room_member_banning_user">"Блакіроўка %1$s"</string>
<string name="screen_bottom_sheet_manage_room_member_member_user_info">"Прагляд профілю"</string>
<string name="screen_bottom_sheet_manage_room_member_remove">"Выдаліць удзельніка з пакоя"</string>
<string name="screen_bottom_sheet_manage_room_member_remove_confirmation_title">"Выдаліць удзельніка і забараніць далучацца ў будучыні?"</string>
<string name="screen_bottom_sheet_manage_room_member_removing_user">"Выдаленне %1$s…"</string>
<string name="screen_media_picker_error_failed_selection">"Не ўдалося выбраць носьбіт, паўтарыце спробу."</string>
<string name="screen_media_upload_preview_error_failed_processing">"Не атрымалася апрацаваць медыяфайл для загрузкі, паспрабуйце яшчэ раз."</string>
<string name="screen_media_upload_preview_error_failed_sending">"Не атрымалася загрузіць медыяфайлы, паспрабуйце яшчэ раз."</string>

View File

@@ -343,18 +343,6 @@ Opravdu chcete pokračovat?"</string>
<string name="invite_friends_text">"Ahoj, ozvi se mi na %1$s: %2$s"</string>
<string name="login_initial_device_name_android">"%1$s Android"</string>
<string name="preference_rageshake">"Zatřeste zařízením pro nahlášení chyby"</string>
<string name="screen_bottom_sheet_manage_room_member_ban">"Odebrat a vykázat člena"</string>
<string name="screen_bottom_sheet_manage_room_member_ban_member_confirmation_action">"Vykázat"</string>
<string name="screen_bottom_sheet_manage_room_member_ban_member_confirmation_description">"Nebudou se moci znovu připojit k této místnosti, pokud budou pozváni."</string>
<string name="screen_bottom_sheet_manage_room_member_ban_member_confirmation_title">"Jste si jisti, že chcete vykázat tohoto člena?"</string>
<string name="screen_bottom_sheet_manage_room_member_banning_user">"Vykazování %1$s"</string>
<string name="screen_bottom_sheet_manage_room_member_kick_member_confirmation_action">"Odebrat"</string>
<string name="screen_bottom_sheet_manage_room_member_kick_member_confirmation_description">"Budou moci znovu vstoupit do této místnosti, pokud budou pozváni."</string>
<string name="screen_bottom_sheet_manage_room_member_kick_member_confirmation_title">"Opravdu chcete tohoto člena odebrat?"</string>
<string name="screen_bottom_sheet_manage_room_member_member_user_info">"Zobrazit profil"</string>
<string name="screen_bottom_sheet_manage_room_member_remove">"Odebrat z místnosti"</string>
<string name="screen_bottom_sheet_manage_room_member_remove_confirmation_title">"Odebrat člena a zakázat mu připojení v budoucnu?"</string>
<string name="screen_bottom_sheet_manage_room_member_removing_user">"Odstraňování %1$s…"</string>
<string name="screen_media_picker_error_failed_selection">"Výběr média se nezdařil, zkuste to prosím znovu."</string>
<string name="screen_media_upload_preview_caption_warning">"Titulky nemusí být viditelné pro lidi, kteří používají starší aplikace."</string>
<string name="screen_media_upload_preview_error_failed_processing">"Nahrání média se nezdařilo, zkuste to prosím znovu."</string>

View File

@@ -355,18 +355,6 @@ Ydych chi\'n siŵr eich bod am barhau?"</string>
<string name="invite_friends_text">"Hei, siaradwch â mi ar %1$s: %2$s"</string>
<string name="login_initial_device_name_android">"Android %1$s"</string>
<string name="preference_rageshake">"Rageshake i adrodd gwall"</string>
<string name="screen_bottom_sheet_manage_room_member_ban">"Gwahardd o ystafell"</string>
<string name="screen_bottom_sheet_manage_room_member_ban_member_confirmation_action">"Atal"</string>
<string name="screen_bottom_sheet_manage_room_member_ban_member_confirmation_description">"Fyddan nhw ddim yn gallu ymuno â\'r ystafell hon eto os cân nhw wahoddiad."</string>
<string name="screen_bottom_sheet_manage_room_member_ban_member_confirmation_title">"Ydych chi\'n siŵr eich bod am wahardd yr aelod hwn?"</string>
<string name="screen_bottom_sheet_manage_room_member_banning_user">"Yn gwahardd %1$s"</string>
<string name="screen_bottom_sheet_manage_room_member_kick_member_confirmation_action">"Tynnu"</string>
<string name="screen_bottom_sheet_manage_room_member_kick_member_confirmation_description">"Fyddan nhw yn gallu ymuno â\'r ystafell hon eto os cân nhw wahoddiad."</string>
<string name="screen_bottom_sheet_manage_room_member_kick_member_confirmation_title">"Ydych chi\'n siŵr eich bod am ddileu\'r aelod hwn?"</string>
<string name="screen_bottom_sheet_manage_room_member_member_user_info">"Gweld proffil"</string>
<string name="screen_bottom_sheet_manage_room_member_remove">"Tynnu o\'r ystafell"</string>
<string name="screen_bottom_sheet_manage_room_member_remove_confirmation_title">"Dileu aelod a\'u gwahardd rhag ymuno yn y dyfodol?"</string>
<string name="screen_bottom_sheet_manage_room_member_removing_user">"Wrthi\'n dileu %1$s…"</string>
<string name="screen_media_picker_error_failed_selection">"Wedi methu dewis cyfrwng, ceisiwch eto."</string>
<string name="screen_media_upload_preview_caption_warning">"Efallai na fydd capsiynau yn weladwy i bobl sy\'n defnyddio apiau hŷn."</string>
<string name="screen_media_upload_preview_error_failed_processing">"Wedi methu â phrosesu cyfryngau i\'w llwytho, ceisiwch eto."</string>

View File

@@ -339,18 +339,6 @@ Möchten Sie wirklich fortfahren?"</string>
<string name="invite_friends_text">"Hey, sprich mit mir auf %1$s: %2$s"</string>
<string name="login_initial_device_name_android">"%1$s Android"</string>
<string name="preference_rageshake">"Schüttel heftig zum Melden von Fehlern"</string>
<string name="screen_bottom_sheet_manage_room_member_ban">"Mitglied entfernen und sperren"</string>
<string name="screen_bottom_sheet_manage_room_member_ban_member_confirmation_action">"Sperren"</string>
<string name="screen_bottom_sheet_manage_room_member_ban_member_confirmation_description">"Sie können dem Raum nicht mehr beitreten, selbst wenn sie eingeladen werden."</string>
<string name="screen_bottom_sheet_manage_room_member_ban_member_confirmation_title">"Bist du sicher, dass du dieses Mitglied sperren möchtest?"</string>
<string name="screen_bottom_sheet_manage_room_member_banning_user">"%1$s wird gesperrt."</string>
<string name="screen_bottom_sheet_manage_room_member_kick_member_confirmation_action">"Entfernen"</string>
<string name="screen_bottom_sheet_manage_room_member_kick_member_confirmation_description">"Sie können diesen Raum wieder betreten, wenn sie eingeladen werden."</string>
<string name="screen_bottom_sheet_manage_room_member_kick_member_confirmation_title">"Möchten Sie dieses Mitglied wirklich entfernen?"</string>
<string name="screen_bottom_sheet_manage_room_member_member_user_info">"Benutzerinformationen anzeigen"</string>
<string name="screen_bottom_sheet_manage_room_member_remove">"Mitglied entfernen"</string>
<string name="screen_bottom_sheet_manage_room_member_remove_confirmation_title">"Mitglied entfernen und den erneuten Beitritt sperren?"</string>
<string name="screen_bottom_sheet_manage_room_member_removing_user">"%1$s wird entfernt."</string>
<string name="screen_media_picker_error_failed_selection">"Medienauswahl fehlgeschlagen, bitte versuche es erneut."</string>
<string name="screen_media_upload_preview_caption_warning">"Bildunterschriften sind für Nutzer älterer Apps möglicherweise nicht sichtbar."</string>
<string name="screen_media_upload_preview_error_failed_processing">"Fehler beim Verarbeiten des hochgeladenen Mediums. Bitte versuche es erneut."</string>

View File

@@ -339,18 +339,6 @@
<string name="invite_friends_text">"Γεια, μίλα μου στην εφαρμογή %1$s :%2$s"</string>
<string name="login_initial_device_name_android">"%1$s Android"</string>
<string name="preference_rageshake">"Κούνησε δυνατά τη συσκευή σου για να αναφέρεις κάποιο σφάλμα"</string>
<string name="screen_bottom_sheet_manage_room_member_ban">"Αφαίρεση και αποκλεισμός μέλους"</string>
<string name="screen_bottom_sheet_manage_room_member_ban_member_confirmation_action">"Αποκλεισμός"</string>
<string name="screen_bottom_sheet_manage_room_member_ban_member_confirmation_description">"Δεν θα μπορεί να συμμετέχει ξανά σε αυτό το δωμάτιο εάν προσκληθεί."</string>
<string name="screen_bottom_sheet_manage_room_member_ban_member_confirmation_title">"Θες σίγουρα να αποκλείσεις αυτό το μέλος;"</string>
<string name="screen_bottom_sheet_manage_room_member_banning_user">"Αποκλεισμός %1$s"</string>
<string name="screen_bottom_sheet_manage_room_member_kick_member_confirmation_action">"Αφαίρεση"</string>
<string name="screen_bottom_sheet_manage_room_member_kick_member_confirmation_description">"Θα μπορούν να συμμετάσχουν ξανά σε αυτό το δωμάτιο εάν προσκληθούν."</string>
<string name="screen_bottom_sheet_manage_room_member_kick_member_confirmation_title">"Είστε βέβαιοι ότι θέλετε να αφαιρέσετε αυτό το μέλος;"</string>
<string name="screen_bottom_sheet_manage_room_member_member_user_info">"Προβολή προφίλ"</string>
<string name="screen_bottom_sheet_manage_room_member_remove">"Αφαίρεση από το δωμάτιο"</string>
<string name="screen_bottom_sheet_manage_room_member_remove_confirmation_title">"Αφαίρεση μέλους και απαγόρευση συμμετοχής στο μέλλον;"</string>
<string name="screen_bottom_sheet_manage_room_member_removing_user">"Αφαίρεση %1$s…"</string>
<string name="screen_media_picker_error_failed_selection">"Αποτυχία επιλογής πολυμέσου, δοκίμασε ξανά."</string>
<string name="screen_media_upload_preview_caption_warning">"Οι λεζάντες ενδέχεται να μην είναι ορατές σε άτομα που χρησιμοποιούν παλαιότερες εφαρμογές."</string>
<string name="screen_media_upload_preview_error_failed_processing">"Αποτυχία μεταφόρτωσης μέσου, δοκίμασε ξανά."</string>

View File

@@ -316,15 +316,6 @@ Motivo: %1$s."</string>
<string name="invite_friends_text">"Hola, puedes hablar conmigo en %1$s: %2$s"</string>
<string name="login_initial_device_name_android">"%1$s Android"</string>
<string name="preference_rageshake">"Agitar con fuerza para informar de un error"</string>
<string name="screen_bottom_sheet_manage_room_member_ban">"Sacar y vetar a un miembro"</string>
<string name="screen_bottom_sheet_manage_room_member_ban_member_confirmation_action">"Vetar"</string>
<string name="screen_bottom_sheet_manage_room_member_ban_member_confirmation_description">"No podrán volver a unirse a esta sala si son invitados."</string>
<string name="screen_bottom_sheet_manage_room_member_ban_member_confirmation_title">"¿Estás seguro de que quieres vetar a este miembro?"</string>
<string name="screen_bottom_sheet_manage_room_member_banning_user">"Vetando a %1$s"</string>
<string name="screen_bottom_sheet_manage_room_member_member_user_info">"Ver perfil"</string>
<string name="screen_bottom_sheet_manage_room_member_remove">"Sacar de la sala"</string>
<string name="screen_bottom_sheet_manage_room_member_remove_confirmation_title">"¿Sacar al miembro y prohibirle unirse en el futuro?"</string>
<string name="screen_bottom_sheet_manage_room_member_removing_user">"Eliminando %1$s…"</string>
<string name="screen_media_picker_error_failed_selection">"Error al seleccionar archivos multimedia, por favor inténtalo de nuevo."</string>
<string name="screen_media_upload_preview_caption_warning">"Es posible que las leyendas no sean visibles para las personas que usan aplicaciones más antiguas."</string>
<string name="screen_media_upload_preview_error_failed_processing">"Error al procesar el contenido multimedia, por favor inténtalo de nuevo."</string>

View File

@@ -339,18 +339,6 @@ Kas sa oled kindel, et soovid jätkata?"</string>
<string name="invite_friends_text">"Hei, suhtle minuga %1$s võrgus: %2$s"</string>
<string name="login_initial_device_name_android">"%1$s Android"</string>
<string name="preference_rageshake">"Veast teatamiseks raputa nutiseadet ägedalt"</string>
<string name="screen_bottom_sheet_manage_room_member_ban">"Eemalda ja sea suhtluskeeld"</string>
<string name="screen_bottom_sheet_manage_room_member_ban_member_confirmation_action">"Sea suhtluskeeld"</string>
<string name="screen_bottom_sheet_manage_room_member_ban_member_confirmation_description">"Ta ei saa selle jututoaga liituda isegi kutse olemasolul."</string>
<string name="screen_bottom_sheet_manage_room_member_ban_member_confirmation_title">"Kas sa oled kindel, et soovid sellele kasutajale seada suhtluskeelu?"</string>
<string name="screen_bottom_sheet_manage_room_member_banning_user">"Seame kasutajale %1$s suhtluskeelu"</string>
<string name="screen_bottom_sheet_manage_room_member_kick_member_confirmation_action">"Eemalda"</string>
<string name="screen_bottom_sheet_manage_room_member_kick_member_confirmation_description">"Uue kutse saamisel on tal võimalik selle jututoaga uuesti liituda."</string>
<string name="screen_bottom_sheet_manage_room_member_kick_member_confirmation_title">"Kas sa oled kindel, et soovid selle osaleja eemaldada?"</string>
<string name="screen_bottom_sheet_manage_room_member_member_user_info">"Vaata profiili"</string>
<string name="screen_bottom_sheet_manage_room_member_remove">"Eemalda kasutaja jututoast"</string>
<string name="screen_bottom_sheet_manage_room_member_remove_confirmation_title">"Kas eemaldama kasutaja ja seame talle tulevikuks suhtluskeelu?"</string>
<string name="screen_bottom_sheet_manage_room_member_removing_user">"Eemaldame kasutajat %1$s…"</string>
<string name="screen_media_picker_error_failed_selection">"Meediafaili valimine ei õnnestunud. Palun proovi uuesti."</string>
<string name="screen_media_upload_preview_caption_warning">"Selgitused ja alapealkirjad ei pruugi olla nähtavad vanemate rakenduste kasutajatele."</string>
<string name="screen_media_upload_preview_error_failed_processing">"Meediafaili töötlemine enne üleslaadimist ei õnnestunud. Palun proovi uuesti."</string>

View File

@@ -312,14 +312,6 @@ Arrazoia: %1$s."</string>
<string name="invite_friends_rich_title">"🔐️ Zatoz nirekin %1$s(e)ra"</string>
<string name="login_initial_device_name_android">"%1$s Android"</string>
<string name="preference_rageshake">"Astindu erroreen berri emateko"</string>
<string name="screen_bottom_sheet_manage_room_member_ban">"Kendu kidea eta ezarri debekua"</string>
<string name="screen_bottom_sheet_manage_room_member_ban_member_confirmation_action">"Ezarri debekua"</string>
<string name="screen_bottom_sheet_manage_room_member_ban_member_confirmation_title">"Ziur kide honi debekua ezarri nahi diozula?"</string>
<string name="screen_bottom_sheet_manage_room_member_banning_user">"%1$s(r)i debekua ezartzen"</string>
<string name="screen_bottom_sheet_manage_room_member_member_user_info">"Ikusi profila"</string>
<string name="screen_bottom_sheet_manage_room_member_remove">"Kendu gelatik"</string>
<string name="screen_bottom_sheet_manage_room_member_remove_confirmation_title">"Kidea kendu eta etorkizunean sartzea debekatu?"</string>
<string name="screen_bottom_sheet_manage_room_member_removing_user">"%1$s kentzen…"</string>
<string name="screen_media_picker_error_failed_selection">"Huts egin du multimedia aukeratzeak, saiatu berriro."</string>
<string name="screen_media_upload_preview_error_failed_sending">"Huts egin du multimedia igotzeak, saiatu berriro."</string>
<string name="screen_pinned_timeline_screen_title_empty">"Finkatutako mezuak"</string>

View File

@@ -310,18 +310,6 @@
<string name="invite_friends_rich_title">"🔐️ پییوستن به من روی %1$s"</string>
<string name="invite_friends_text">"درود. با من روی %1$s صحبت کن: %2$s"</string>
<string name="login_initial_device_name_android">"%1$s اندروید"</string>
<string name="screen_bottom_sheet_manage_room_member_ban">"برداشت و تحریم عضو"</string>
<string name="screen_bottom_sheet_manage_room_member_ban_member_confirmation_action">"تحریم"</string>
<string name="screen_bottom_sheet_manage_room_member_ban_member_confirmation_description">"در صورت دعوت نمی‌تواند دوباره به اتاق بپیوندد."</string>
<string name="screen_bottom_sheet_manage_room_member_ban_member_confirmation_title">"مطمئنید می‌خواهید این عضو را تحریم کنید؟"</string>
<string name="screen_bottom_sheet_manage_room_member_banning_user">"تحریم کردن %1$s"</string>
<string name="screen_bottom_sheet_manage_room_member_kick_member_confirmation_action">"برداشتن"</string>
<string name="screen_bottom_sheet_manage_room_member_kick_member_confirmation_description">"در صورت دعوت می‌تواند دوباره به اتاق بپیوندد."</string>
<string name="screen_bottom_sheet_manage_room_member_kick_member_confirmation_title">"مطمئنید می‌خواهید این عضو را بردارید؟"</string>
<string name="screen_bottom_sheet_manage_room_member_member_user_info">"دیدن نمایه"</string>
<string name="screen_bottom_sheet_manage_room_member_remove">"برداشتن از اتاق"</string>
<string name="screen_bottom_sheet_manage_room_member_remove_confirmation_title">"برداشتن عضو و تحریم پیوستن در آینده؟"</string>
<string name="screen_bottom_sheet_manage_room_member_removing_user">"برداشتن %1$s…"</string>
<string name="screen_media_picker_error_failed_selection">"گزینش رسانه شکست خورد. لطفاً دوباره تلاش کنید."</string>
<string name="screen_media_upload_preview_error_failed_processing">"پردازش رسانه برای بارگذاری شکست خورد. لطفاً دوباره تلاش کنید."</string>
<string name="screen_media_upload_preview_error_failed_sending">"بارگذاری رسانه شکست خورد. لطفاً دوباره تلاش کنید."</string>

View File

@@ -339,18 +339,6 @@ Haluatko varmasti jatkaa?"</string>
<string name="invite_friends_text">"Hei, keskustele kanssani %1$s -sovelluksessa: %2$s"</string>
<string name="login_initial_device_name_android">"%1$s Android"</string>
<string name="preference_rageshake">"Raivostunut ravistaminen ilmoittaa virheestä"</string>
<string name="screen_bottom_sheet_manage_room_member_ban">"Poista jäsen huoneesta ja anna porttikielto"</string>
<string name="screen_bottom_sheet_manage_room_member_ban_member_confirmation_action">"Anna porttikielto"</string>
<string name="screen_bottom_sheet_manage_room_member_ban_member_confirmation_description">"He eivät voi enää liittyä tähän huoneeseen, jos heidät kutsutaan."</string>
<string name="screen_bottom_sheet_manage_room_member_ban_member_confirmation_title">"Haluatko varmasti antaa tälle jäsenelle porttikiellon?"</string>
<string name="screen_bottom_sheet_manage_room_member_banning_user">"Annetaan porttikieltoa käyttäjälle %1$s"</string>
<string name="screen_bottom_sheet_manage_room_member_kick_member_confirmation_action">"Poista"</string>
<string name="screen_bottom_sheet_manage_room_member_kick_member_confirmation_description">"He voivat liittyä tähän huoneeseen uudelleen, jos heidät kutsutaan."</string>
<string name="screen_bottom_sheet_manage_room_member_kick_member_confirmation_title">"Haluatko varmasti poistaa tämän jäsenen?"</string>
<string name="screen_bottom_sheet_manage_room_member_member_user_info">"Näytä profiili"</string>
<string name="screen_bottom_sheet_manage_room_member_remove">"Poista huoneesta"</string>
<string name="screen_bottom_sheet_manage_room_member_remove_confirmation_title">"Poistetaanko jäsen huoneesta ja kielletäänkö heitä liittymästä tulevaisuudessa?"</string>
<string name="screen_bottom_sheet_manage_room_member_removing_user">"Poistetaan käyttäjää %1$s huoneesta…"</string>
<string name="screen_media_picker_error_failed_selection">"Median valinta epäonnistui, yritä uudelleen."</string>
<string name="screen_media_upload_preview_caption_warning">"Kuvatekstit eivät välttämättä näy ihmisille, jotka käyttävät vanhempia sovelluksia."</string>
<string name="screen_media_upload_preview_error_failed_processing">"Median käsittely epäonnistui, yritä uudelleen."</string>

View File

@@ -339,18 +339,6 @@ Raison : %1$s."</string>
<string name="invite_friends_text">"Salut, parle-moi sur %1$s : %2$s"</string>
<string name="login_initial_device_name_android">"%1$s Android"</string>
<string name="preference_rageshake">"Rageshake pour signaler un problème"</string>
<string name="screen_bottom_sheet_manage_room_member_ban">"Retirer et bannir ce membre"</string>
<string name="screen_bottom_sheet_manage_room_member_ban_member_confirmation_action">"Bannir"</string>
<string name="screen_bottom_sheet_manage_room_member_ban_member_confirmation_description">"Il ne pourra pas rejoindre le salon à nouveau, même si il est invité."</string>
<string name="screen_bottom_sheet_manage_room_member_ban_member_confirmation_title">"Êtes-vous certain de vouloir bannir ce membre ?"</string>
<string name="screen_bottom_sheet_manage_room_member_banning_user">"Bannissement de %1$s"</string>
<string name="screen_bottom_sheet_manage_room_member_kick_member_confirmation_action">"Retirer"</string>
<string name="screen_bottom_sheet_manage_room_member_kick_member_confirmation_description">"Cet utilisateur pourra rejoindre le salon à nouveau si il est invité."</string>
<string name="screen_bottom_sheet_manage_room_member_kick_member_confirmation_title">"Voulez-vous vraiment supprimer ce membre ?"</string>
<string name="screen_bottom_sheet_manage_room_member_member_user_info">"Voir le profil"</string>
<string name="screen_bottom_sheet_manage_room_member_remove">"Retirer le membre du salon"</string>
<string name="screen_bottom_sheet_manage_room_member_remove_confirmation_title">"Retirer le membre et interdire ladhésion à lavenir ?"</string>
<string name="screen_bottom_sheet_manage_room_member_removing_user">"Enlever %1$s…"</string>
<string name="screen_media_picker_error_failed_selection">"Échec de la sélection du média, veuillez réessayer."</string>
<string name="screen_media_upload_preview_caption_warning">"Les légendes peuvent ne pas être visibles pour les utilisateurs danciennes applications."</string>
<string name="screen_media_upload_preview_error_failed_processing">"Échec du traitement des médias à télécharger, veuillez réessayer."</string>

View File

@@ -339,18 +339,6 @@ Biztos, hogy folytatja?"</string>
<string name="invite_friends_text">"Beszélgessünk itt: %1$s, %2$s"</string>
<string name="login_initial_device_name_android">"%1$s Android"</string>
<string name="preference_rageshake">"Az eszköz rázása a hibajelentéshez"</string>
<string name="screen_bottom_sheet_manage_room_member_ban">"Eltávolítás és a tag kitiltása"</string>
<string name="screen_bottom_sheet_manage_room_member_ban_member_confirmation_action">"Kitiltás"</string>
<string name="screen_bottom_sheet_manage_room_member_ban_member_confirmation_description">"Többé nem csatlakozhat ehhez a szobához, akkor sem, ha meghívják."</string>
<string name="screen_bottom_sheet_manage_room_member_ban_member_confirmation_title">"Biztos, hogy kitiltja ezt a tagot?"</string>
<string name="screen_bottom_sheet_manage_room_member_banning_user">"%1$s kitiltása"</string>
<string name="screen_bottom_sheet_manage_room_member_kick_member_confirmation_action">"Eltávolítás"</string>
<string name="screen_bottom_sheet_manage_room_member_kick_member_confirmation_description">"Ehhez a szobához is csatlakozhat, ha meghívják."</string>
<string name="screen_bottom_sheet_manage_room_member_kick_member_confirmation_title">"Biztos, hogy eltávolítja ezt a tagot?"</string>
<string name="screen_bottom_sheet_manage_room_member_member_user_info">"Profil megtekintése"</string>
<string name="screen_bottom_sheet_manage_room_member_remove">"Eltávolítás a szobából"</string>
<string name="screen_bottom_sheet_manage_room_member_remove_confirmation_title">"Eltávolítja a tagot, és megtiltja a jövőbeni csatlakozást?"</string>
<string name="screen_bottom_sheet_manage_room_member_removing_user">"%1$s eltávolítása…"</string>
<string name="screen_media_picker_error_failed_selection">"Nem sikerült kiválasztani a médiát, próbálja újra."</string>
<string name="screen_media_upload_preview_caption_warning">"Előfordulhat, hogy a feliratok nem láthatók a régebbi alkalmazásokat használók számára."</string>
<string name="screen_media_upload_preview_error_failed_processing">"Nem sikerült feldolgozni a feltöltendő médiát, próbálja újra."</string>

View File

@@ -304,15 +304,6 @@ Alasan: %1$s."</string>
<string name="invite_friends_text">"Hai, bicaralah dengan saya di %1$s: %2$s"</string>
<string name="login_initial_device_name_android">"%1$s Android"</string>
<string name="preference_rageshake">"Rageshake untuk melaporkan kutu"</string>
<string name="screen_bottom_sheet_manage_room_member_ban">"Keluarkan dan cekal anggota"</string>
<string name="screen_bottom_sheet_manage_room_member_ban_member_confirmation_action">"Cekal"</string>
<string name="screen_bottom_sheet_manage_room_member_ban_member_confirmation_description">"Mereka tidak akan dapat bergabung ke ruangan ini lagi jika diundang."</string>
<string name="screen_bottom_sheet_manage_room_member_ban_member_confirmation_title">"Apakah Anda yakin ingin mencekal anggota ini?"</string>
<string name="screen_bottom_sheet_manage_room_member_banning_user">"Mencekal %1$s"</string>
<string name="screen_bottom_sheet_manage_room_member_member_user_info">"Tampilkan profil"</string>
<string name="screen_bottom_sheet_manage_room_member_remove">"Keluarkan dari ruangan"</string>
<string name="screen_bottom_sheet_manage_room_member_remove_confirmation_title">"Keluarkan pengguna dan cekal pengguna bergabung lagi di masa mendatang?"</string>
<string name="screen_bottom_sheet_manage_room_member_removing_user">"Mengeluarkan %1$s…"</string>
<string name="screen_media_picker_error_failed_selection">"Gagal memilih media, silakan coba lagi."</string>
<string name="screen_media_upload_preview_caption_warning">"Keterangan mungkin tidak terlihat oleh orang yang menggunakan aplikasi lama."</string>
<string name="screen_media_upload_preview_error_failed_processing">"Gagal memproses media untuk diunggah, silakan coba lagi."</string>

View File

@@ -326,15 +326,6 @@ Sei sicuro di voler continuare?"</string>
<string name="invite_friends_text">"Ehi, parliamo su %1$s: %2$s"</string>
<string name="login_initial_device_name_android">"%1$s Android"</string>
<string name="preference_rageshake">"Scuoti per segnalare un problema"</string>
<string name="screen_bottom_sheet_manage_room_member_ban">"Rimuovi ed escludi"</string>
<string name="screen_bottom_sheet_manage_room_member_ban_member_confirmation_action">"Escludi"</string>
<string name="screen_bottom_sheet_manage_room_member_ban_member_confirmation_description">"Non potrà entrare nuovamente in questa stanza se invitato."</string>
<string name="screen_bottom_sheet_manage_room_member_ban_member_confirmation_title">"Vuoi davvero escludere questo membro?"</string>
<string name="screen_bottom_sheet_manage_room_member_banning_user">"Esclusione di %1$s"</string>
<string name="screen_bottom_sheet_manage_room_member_member_user_info">"Visualizza profilo"</string>
<string name="screen_bottom_sheet_manage_room_member_remove">"Rimuovi dalla stanza"</string>
<string name="screen_bottom_sheet_manage_room_member_remove_confirmation_title">"Rimuovere e vietare l\'accesso in futuro?"</string>
<string name="screen_bottom_sheet_manage_room_member_removing_user">"Rimozione di %1$s…"</string>
<string name="screen_media_picker_error_failed_selection">"Selezione del file multimediale fallita, riprova."</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_error_failed_processing">"Elaborazione del file multimediale da caricare fallita, riprova."</string>

View File

@@ -247,15 +247,6 @@
<string name="invite_friends_text">"გაგიმარჯოს! მესაუბრე %1$s-ზე: %2$s"</string>
<string name="login_initial_device_name_android">"%1$s Android"</string>
<string name="preference_rageshake">"შეცდომის შესატყობინებლად ტელეფონის შენჯღრევა"</string>
<string name="screen_bottom_sheet_manage_room_member_ban">"წევრის წაშლა და დაბლოკვა"</string>
<string name="screen_bottom_sheet_manage_room_member_ban_member_confirmation_action">"დაბლოკვა"</string>
<string name="screen_bottom_sheet_manage_room_member_ban_member_confirmation_description">"მოწვევის შემთხვევაში ამ ოთახში კვლავ გაწევრიანებას ვერ შეძლებენ."</string>
<string name="screen_bottom_sheet_manage_room_member_ban_member_confirmation_title">"დარწმუნებული ხართ, რომ ამ წევრის დაბლოკვა გსურთ?"</string>
<string name="screen_bottom_sheet_manage_room_member_banning_user">"%1$s-ს დაბლოკვა"</string>
<string name="screen_bottom_sheet_manage_room_member_member_user_info">"პროფილის ნახვა"</string>
<string name="screen_bottom_sheet_manage_room_member_remove">"ოთახიდან გაგდება"</string>
<string name="screen_bottom_sheet_manage_room_member_remove_confirmation_title">"გსურთ წევრის გაგდება და მომავალში გაწევრიანების აკრძალვა?"</string>
<string name="screen_bottom_sheet_manage_room_member_removing_user">"%1$s-ს გაგდება…"</string>
<string name="screen_media_picker_error_failed_selection">"მედიის შერჩევა ვერ მოხერხდა, გთხოვთ, სცადოთ ხელახლა."</string>
<string name="screen_media_upload_preview_error_failed_processing">"მედიის ატვირთვა ვერ მოხერხდა. გთხოვთ, სცადოთ ხელახლა."</string>
<string name="screen_media_upload_preview_error_failed_sending">"მედიის ატვირთვა ვერ მოხერხდა, გთხოვთ, სცადოთ ხელახლა."</string>

View File

@@ -339,18 +339,6 @@ Er du sikker på at du vil fortsette?"</string>
<string name="invite_friends_text">"Hei, snakk med meg på %1$s: %2$s"</string>
<string name="login_initial_device_name_android">"%1$s Android"</string>
<string name="preference_rageshake">"Rageshake for å rapportere feil"</string>
<string name="screen_bottom_sheet_manage_room_member_ban">"Fjern og utesteng medlem"</string>
<string name="screen_bottom_sheet_manage_room_member_ban_member_confirmation_action">"Utesteng"</string>
<string name="screen_bottom_sheet_manage_room_member_ban_member_confirmation_description">"De vil ikke kunne bli med i dette rommet igjen hvis de blir invitert."</string>
<string name="screen_bottom_sheet_manage_room_member_ban_member_confirmation_title">"Er du sikker på at du vil utestenge dette medlemmet?"</string>
<string name="screen_bottom_sheet_manage_room_member_banning_user">"Utestenger %1$s"</string>
<string name="screen_bottom_sheet_manage_room_member_kick_member_confirmation_action">"Fjern"</string>
<string name="screen_bottom_sheet_manage_room_member_kick_member_confirmation_description">"De vil kunne bli med i dette rommet igjen hvis de blir invitert."</string>
<string name="screen_bottom_sheet_manage_room_member_kick_member_confirmation_title">"Er du sikker på at du vil fjerne dette medlemmet?"</string>
<string name="screen_bottom_sheet_manage_room_member_member_user_info">"Vis profil"</string>
<string name="screen_bottom_sheet_manage_room_member_remove">"Fjern fra rommet"</string>
<string name="screen_bottom_sheet_manage_room_member_remove_confirmation_title">"Fjerne medlem og utestenge fra å bli med i fremtiden?"</string>
<string name="screen_bottom_sheet_manage_room_member_removing_user">"Fjerner %1$s…"</string>
<string name="screen_media_picker_error_failed_selection">"Kunne ikke velge medium, prøv igjen."</string>
<string name="screen_media_upload_preview_caption_warning">"Teksting er kanskje ikke synlig for personer som bruker eldre apper."</string>
<string name="screen_media_upload_preview_error_failed_processing">"Kunne ikke behandle medier for opplasting, vennligst prøv igjen."</string>

View File

@@ -292,15 +292,6 @@ Reden: %1$s."</string>
<string name="invite_friends_text">"Hé, praat met me op %1$s: %2$s"</string>
<string name="login_initial_device_name_android">"%1$s Android"</string>
<string name="preference_rageshake">"Schudden om een bug te melden"</string>
<string name="screen_bottom_sheet_manage_room_member_ban">"Lid verwijderen en verbannen"</string>
<string name="screen_bottom_sheet_manage_room_member_ban_member_confirmation_action">"Verbannen"</string>
<string name="screen_bottom_sheet_manage_room_member_ban_member_confirmation_description">"Ze kunnen niet meer toetreden tot deze kamer als ze worden uitgenodigd."</string>
<string name="screen_bottom_sheet_manage_room_member_ban_member_confirmation_title">"Weet je zeker dat je dit lid wilt verbannen?"</string>
<string name="screen_bottom_sheet_manage_room_member_banning_user">"%1$s verbannen"</string>
<string name="screen_bottom_sheet_manage_room_member_member_user_info">"Profiel bekijken"</string>
<string name="screen_bottom_sheet_manage_room_member_remove">"Verwijderen uit kamer"</string>
<string name="screen_bottom_sheet_manage_room_member_remove_confirmation_title">"Lid verwijderen en toekomstige deelname verbieden?"</string>
<string name="screen_bottom_sheet_manage_room_member_removing_user">"%1$s wordt verwijderd…"</string>
<string name="screen_media_picker_error_failed_selection">"Het selecteren van media is mislukt. Probeer het opnieuw."</string>
<string name="screen_media_upload_preview_error_failed_processing">"Het verwerken van media voor uploaden is mislukt. Probeer het opnieuw."</string>
<string name="screen_media_upload_preview_error_failed_sending">"Het uploaden van media is mislukt. Probeer het opnieuw."</string>

View File

@@ -343,18 +343,6 @@ Czy na pewno chcesz kontynuować?"</string>
<string name="invite_friends_text">"Hej, porozmawiajmy na %1$s: %2$s"</string>
<string name="login_initial_device_name_android">"%1$s Android"</string>
<string name="preference_rageshake">"Wstrząśnij gniewnie, aby zgłosić błąd"</string>
<string name="screen_bottom_sheet_manage_room_member_ban">"Usuń i zbanuj członka"</string>
<string name="screen_bottom_sheet_manage_room_member_ban_member_confirmation_action">"Zbanuj"</string>
<string name="screen_bottom_sheet_manage_room_member_ban_member_confirmation_description">"Nie będą mogli ponownie dołączyć do tego pokoju, jeśli zostaną zaproszeni."</string>
<string name="screen_bottom_sheet_manage_room_member_ban_member_confirmation_title">"Czy na pewno chcesz zbanować tego członka?"</string>
<string name="screen_bottom_sheet_manage_room_member_banning_user">"Banowanie %1$s"</string>
<string name="screen_bottom_sheet_manage_room_member_kick_member_confirmation_action">"Usuń"</string>
<string name="screen_bottom_sheet_manage_room_member_kick_member_confirmation_description">"Będą mogli ponownie dołączyć do pokoju, jeśli zostaną zaproszeni."</string>
<string name="screen_bottom_sheet_manage_room_member_kick_member_confirmation_title">"Czy na pewno chcesz usunąć tego członka?"</string>
<string name="screen_bottom_sheet_manage_room_member_member_user_info">"Wyświetl profil"</string>
<string name="screen_bottom_sheet_manage_room_member_remove">"Usuń z pokoju"</string>
<string name="screen_bottom_sheet_manage_room_member_remove_confirmation_title">"Usunąć członka i zablokować możliwość dołączenia w przyszłości?"</string>
<string name="screen_bottom_sheet_manage_room_member_removing_user">"Usuwanie %1$s…"</string>
<string name="screen_media_picker_error_failed_selection">"Nie udało się wybrać multimediów. Spróbuj ponownie."</string>
<string name="screen_media_upload_preview_caption_warning">"Opis może być niedostępny dla osób korzystających ze starszej wersji aplikacji."</string>
<string name="screen_media_upload_preview_error_failed_processing">"Przetwarzanie multimediów do przesłania nie powiodło się, spróbuj ponownie."</string>

View File

@@ -287,15 +287,6 @@
<string name="invite_friends_text">"Ei, fale comigo em %1$s: %2$s"</string>
<string name="login_initial_device_name_android">"%1$s Android"</string>
<string name="preference_rageshake">"Rageshake para relatar um bug"</string>
<string name="screen_bottom_sheet_manage_room_member_ban">"Remover e banir membro"</string>
<string name="screen_bottom_sheet_manage_room_member_ban_member_confirmation_action">"Banir"</string>
<string name="screen_bottom_sheet_manage_room_member_ban_member_confirmation_description">"Eles não poderão entrar nesta sala novamente se forem convidados."</string>
<string name="screen_bottom_sheet_manage_room_member_ban_member_confirmation_title">"Tem certeza de que quer banir este membro?"</string>
<string name="screen_bottom_sheet_manage_room_member_banning_user">"Banindo %1$s"</string>
<string name="screen_bottom_sheet_manage_room_member_member_user_info">"Ver perfil"</string>
<string name="screen_bottom_sheet_manage_room_member_remove">"Remover da sala"</string>
<string name="screen_bottom_sheet_manage_room_member_remove_confirmation_title">"Remover membro e banir de entrar novamente no futuro?"</string>
<string name="screen_bottom_sheet_manage_room_member_removing_user">"Removendo %1$s…"</string>
<string name="screen_media_picker_error_failed_selection">"Falha ao selecionar a mídia, tente novamente."</string>
<string name="screen_media_upload_preview_error_failed_processing">"Falha ao processar mídia para upload. Tente novamente."</string>
<string name="screen_media_upload_preview_error_failed_sending">"Falha ao enviar mídia. Tente novamente."</string>

View File

@@ -324,16 +324,6 @@ Tens a certeza de que queres continuar?"</string>
<string name="invite_friends_text">"Alô! Fala comigo na %1$s: %2$s"</string>
<string name="login_initial_device_name_android">"%1$s Android"</string>
<string name="preference_rageshake">"Agita o dispositivo em fúria para comunicar um problema"</string>
<string name="screen_bottom_sheet_manage_room_member_ban">"Remover e banir participante"</string>
<string name="screen_bottom_sheet_manage_room_member_ban_member_confirmation_action">"Banir"</string>
<string name="screen_bottom_sheet_manage_room_member_ban_member_confirmation_description">"Não poderão voltar a entrar nesta sala, mesmo se forem convidados."</string>
<string name="screen_bottom_sheet_manage_room_member_ban_member_confirmation_title">"Tens a certeza que queres banir este participante?"</string>
<string name="screen_bottom_sheet_manage_room_member_banning_user">"A banir %1$s"</string>
<string name="screen_bottom_sheet_manage_room_member_kick_member_confirmation_description">"Poderão entrar na sala novamente se convidados."</string>
<string name="screen_bottom_sheet_manage_room_member_member_user_info">"Ver perfil"</string>
<string name="screen_bottom_sheet_manage_room_member_remove">"Remover da sala"</string>
<string name="screen_bottom_sheet_manage_room_member_remove_confirmation_title">"Remover participante e proibir que entre no futuro?"</string>
<string name="screen_bottom_sheet_manage_room_member_removing_user">"A remover %1$s…"</string>
<string name="screen_media_picker_error_failed_selection">"Falha ao selecionar multimédia, por favor tente novamente."</string>
<string name="screen_media_upload_preview_caption_warning">"As legendas poderão não ser visíveis em versões mais antigas da aplicação."</string>
<string name="screen_media_upload_preview_error_failed_processing">"Falha ao processar multimédia para carregamento, por favor tente novamente."</string>

View File

@@ -294,15 +294,6 @@ Motiv:%1$s."</string>
<string name="invite_friends_text">"Hei, vorbește cu mine pe %1$s: %2$s"</string>
<string name="login_initial_device_name_android">"%1$s Android"</string>
<string name="preference_rageshake">"Rageshake pentru a raporta erori"</string>
<string name="screen_bottom_sheet_manage_room_member_ban">"Eliminați și interziceți membrul"</string>
<string name="screen_bottom_sheet_manage_room_member_ban_member_confirmation_action">"Interzicere"</string>
<string name="screen_bottom_sheet_manage_room_member_ban_member_confirmation_description">"Nu se vor putea alătura din nou acestei camere dacă sunt invitați."</string>
<string name="screen_bottom_sheet_manage_room_member_ban_member_confirmation_title">"Sunteți sigur că doriți să interziceți acest membru?"</string>
<string name="screen_bottom_sheet_manage_room_member_banning_user">"Se interzice %1$s"</string>
<string name="screen_bottom_sheet_manage_room_member_member_user_info">"Vizualizare profil"</string>
<string name="screen_bottom_sheet_manage_room_member_remove">"Înlăturați membrul"</string>
<string name="screen_bottom_sheet_manage_room_member_remove_confirmation_title">"Înlăturați membrul și interziceți-i să se alăture în viitor?"</string>
<string name="screen_bottom_sheet_manage_room_member_removing_user">"Se elimină %1$s"</string>
<string name="screen_media_picker_error_failed_selection">"Selectarea fișierelor media a eșuat, încercați din nou."</string>
<string name="screen_media_upload_preview_error_failed_processing">"Procesarea datelor media a eșuat, vă rugăm să încercați din nou."</string>
<string name="screen_media_upload_preview_error_failed_sending">"Încărcarea fișierelor media a eșuat, încercați din nou."</string>

View File

@@ -343,17 +343,6 @@
<string name="invite_friends_text">"Привет, поговори со мной по %1$s: %2$s"</string>
<string name="login_initial_device_name_android">"%1$s Android"</string>
<string name="preference_rageshake">"Встряхните устройство, чтобы сообщить об ошибке"</string>
<string name="screen_bottom_sheet_manage_room_member_ban">"Удалить и заблокировать участника"</string>
<string name="screen_bottom_sheet_manage_room_member_ban_member_confirmation_action">"Заблокировать"</string>
<string name="screen_bottom_sheet_manage_room_member_ban_member_confirmation_description">"Они не смогут снова присоединиться к этой комнате, если их пригласят."</string>
<string name="screen_bottom_sheet_manage_room_member_ban_member_confirmation_title">"Вы уверены, что хотите заблокировать этого участника?"</string>
<string name="screen_bottom_sheet_manage_room_member_banning_user">"Блокировка %1$s"</string>
<string name="screen_bottom_sheet_manage_room_member_kick_member_confirmation_action">"Удалить"</string>
<string name="screen_bottom_sheet_manage_room_member_kick_member_confirmation_title">"Вы действительно хотите удалить этого участника?"</string>
<string name="screen_bottom_sheet_manage_room_member_member_user_info">"Посмотреть профиль"</string>
<string name="screen_bottom_sheet_manage_room_member_remove">"Удалить участника из комнаты"</string>
<string name="screen_bottom_sheet_manage_room_member_remove_confirmation_title">"Удалить участника и запретить присоединяться в будущем?"</string>
<string name="screen_bottom_sheet_manage_room_member_removing_user">"Удаление %1$s…"</string>
<string name="screen_media_picker_error_failed_selection">"Не удалось выбрать носитель, попробуйте еще раз."</string>
<string name="screen_media_upload_preview_caption_warning">"Подпись может быть не видна пользователям старых приложений."</string>
<string name="screen_media_upload_preview_error_failed_processing">"Не удалось обработать медиафайл для загрузки, попробуйте еще раз."</string>

View File

@@ -343,18 +343,6 @@ Naozaj chcete pokračovať?"</string>
<string name="invite_friends_text">"Ahoj, porozprávajte sa so mnou na %1$s: %2$s"</string>
<string name="login_initial_device_name_android">"%1$s Android"</string>
<string name="preference_rageshake">"Zúrivo potriasť pre nahlásenie chyby"</string>
<string name="screen_bottom_sheet_manage_room_member_ban">"Odstrániť a zakázať člena"</string>
<string name="screen_bottom_sheet_manage_room_member_ban_member_confirmation_action">"Zakázať"</string>
<string name="screen_bottom_sheet_manage_room_member_ban_member_confirmation_description">"Nebudú sa môcť pripojiť k tejto miestnosti znova ani ak budú pozvaní."</string>
<string name="screen_bottom_sheet_manage_room_member_ban_member_confirmation_title">"Ste si istý, že chcete zakázať tohto člena?"</string>
<string name="screen_bottom_sheet_manage_room_member_banning_user">"Zakazuje sa %1$s"</string>
<string name="screen_bottom_sheet_manage_room_member_kick_member_confirmation_action">"Odstrániť"</string>
<string name="screen_bottom_sheet_manage_room_member_kick_member_confirmation_description">"V prípade pozvania sa budú môcť znova pripojiť k tejto miestnosti."</string>
<string name="screen_bottom_sheet_manage_room_member_kick_member_confirmation_title">"Ste si istý, že chcete odstrániť tohto člena?"</string>
<string name="screen_bottom_sheet_manage_room_member_member_user_info">"Zobraziť profil"</string>
<string name="screen_bottom_sheet_manage_room_member_remove">"Odstrániť z miestnosti"</string>
<string name="screen_bottom_sheet_manage_room_member_remove_confirmation_title">"Odstrániť člena a zakázať vstup v budúcnosti?"</string>
<string name="screen_bottom_sheet_manage_room_member_removing_user">"Odstraňuje sa %1$s…"</string>
<string name="screen_media_picker_error_failed_selection">"Nepodarilo sa vybrať médium, skúste to prosím znova."</string>
<string name="screen_media_upload_preview_caption_warning">"Titulky nemusia byť viditeľné pre ľudí používajúcich staršie aplikácie."</string>
<string name="screen_media_upload_preview_error_failed_processing">"Nepodarilo sa spracovať médiá na odoslanie, skúste to prosím znova."</string>

View File

@@ -339,18 +339,6 @@ Anledning:%1$s."</string>
<string name="invite_friends_text">"Hallå, prata med mig på %1$s: %2$s"</string>
<string name="login_initial_device_name_android">"%1$s Android"</string>
<string name="preference_rageshake">"Raseriskaka för att rapportera bugg"</string>
<string name="screen_bottom_sheet_manage_room_member_ban">"Ta bort och banna medlem"</string>
<string name="screen_bottom_sheet_manage_room_member_ban_member_confirmation_action">"Banna"</string>
<string name="screen_bottom_sheet_manage_room_member_ban_member_confirmation_description">"Denne kommer inte att kunna gå med i det här rummet igen om denne bjuds in."</string>
<string name="screen_bottom_sheet_manage_room_member_ban_member_confirmation_title">"Är du säker på att du vill banna den här medlemmen?"</string>
<string name="screen_bottom_sheet_manage_room_member_banning_user">"Bannar %1$s"</string>
<string name="screen_bottom_sheet_manage_room_member_kick_member_confirmation_action">"Ta bort"</string>
<string name="screen_bottom_sheet_manage_room_member_kick_member_confirmation_description">"Denne kommer kunna gå med i rummet igen om denne bjuds in"</string>
<string name="screen_bottom_sheet_manage_room_member_kick_member_confirmation_title">"Är du säker på att du vill ta bort den här medlemmen?"</string>
<string name="screen_bottom_sheet_manage_room_member_member_user_info">"Visa profil"</string>
<string name="screen_bottom_sheet_manage_room_member_remove">"Ta bort från rummet"</string>
<string name="screen_bottom_sheet_manage_room_member_remove_confirmation_title">"Ta bort medlem och banna från att gå med i framtiden?"</string>
<string name="screen_bottom_sheet_manage_room_member_removing_user">"Tar bort %1$s …"</string>
<string name="screen_media_picker_error_failed_selection">"Misslyckades att välja media, vänligen pröva igen."</string>
<string name="screen_media_upload_preview_caption_warning">"Bildtexter kanske inte är synliga för personer som använder äldre appar."</string>
<string name="screen_media_upload_preview_error_failed_processing">"Misslyckades att bearbeta media för uppladdning, vänligen pröva igen."</string>

View File

@@ -316,15 +316,6 @@ Neden: %1$s."</string>
<string name="invite_friends_text">"Hey, benimle konuş %1$s: %2$s"</string>
<string name="login_initial_device_name_android">"%1$s Android"</string>
<string name="preference_rageshake">"Hata bildirmek için Rageshake"</string>
<string name="screen_bottom_sheet_manage_room_member_ban">"Üyeyi çıkar ve yasakla"</string>
<string name="screen_bottom_sheet_manage_room_member_ban_member_confirmation_action">"Yasakla"</string>
<string name="screen_bottom_sheet_manage_room_member_ban_member_confirmation_description">"Davet edilseler bile bu odaya tekrar katılamazlar."</string>
<string name="screen_bottom_sheet_manage_room_member_ban_member_confirmation_title">"Bu üyeyi yasaklamak istediğinize emin misiniz?"</string>
<string name="screen_bottom_sheet_manage_room_member_banning_user">"Yasaklanıyor %1$s"</string>
<string name="screen_bottom_sheet_manage_room_member_member_user_info">"Profili görüntüle"</string>
<string name="screen_bottom_sheet_manage_room_member_remove">"Odadan çıkar"</string>
<string name="screen_bottom_sheet_manage_room_member_remove_confirmation_title">"Üyeyi çıkarın ve gelecekte katılmasını yasaklayın?"</string>
<string name="screen_bottom_sheet_manage_room_member_removing_user">"Kaldırılıyor %1$s…"</string>
<string name="screen_media_picker_error_failed_selection">"Medya seçilemedi, lütfen tekrar deneyin."</string>
<string name="screen_media_upload_preview_caption_warning">"Açıklamalar, eski uygulamaları kullanan kişiler tarafından görülemeyebilir."</string>
<string name="screen_media_upload_preview_error_failed_processing">"Medya yüklenemedi, lütfen tekrar deneyin."</string>

View File

@@ -343,18 +343,6 @@
<string name="invite_friends_text">"Вітаю, поспілкуйтеся зі мною в %1$s: %2$s"</string>
<string name="login_initial_device_name_android">"%1$s Android"</string>
<string name="preference_rageshake">"Повідомити про ваду за допомогою Rageshake"</string>
<string name="screen_bottom_sheet_manage_room_member_ban">"Вилучити й заблокувати учасника"</string>
<string name="screen_bottom_sheet_manage_room_member_ban_member_confirmation_action">"Заблокувати"</string>
<string name="screen_bottom_sheet_manage_room_member_ban_member_confirmation_description">"Він не зможе приєднатися до цієї кімнати знову, якщо його запросять."</string>
<string name="screen_bottom_sheet_manage_room_member_ban_member_confirmation_title">"Ви точно хочете заблокувати цього користувача?"</string>
<string name="screen_bottom_sheet_manage_room_member_banning_user">"Блокування %1$s"</string>
<string name="screen_bottom_sheet_manage_room_member_kick_member_confirmation_action">"Вилучити"</string>
<string name="screen_bottom_sheet_manage_room_member_kick_member_confirmation_description">"Вони зможуть знову приєднатися до цієї кімнати, якщо їх запросять."</string>
<string name="screen_bottom_sheet_manage_room_member_kick_member_confirmation_title">"Ви дійсно хочете вилучити цього учасника?"</string>
<string name="screen_bottom_sheet_manage_room_member_member_user_info">"Переглянути профіль"</string>
<string name="screen_bottom_sheet_manage_room_member_remove">"Вилучити з кімнати"</string>
<string name="screen_bottom_sheet_manage_room_member_remove_confirmation_title">"Вилучити учасника та заборонити приєднання в майбутньому?"</string>
<string name="screen_bottom_sheet_manage_room_member_removing_user">"Вилучення %1$s…"</string>
<string name="screen_media_picker_error_failed_selection">"Не вдалося вибрати медіафайл, спробуйте ще раз."</string>
<string name="screen_media_upload_preview_caption_warning">"Користувачі старих застосунків можуть не бачити підписи."</string>
<string name="screen_media_upload_preview_error_failed_processing">"Не вдалося обробити медіафайл для завантаження, спробуйте ще раз."</string>

View File

@@ -333,18 +333,6 @@
<string name="invite_friends_text">"嘿,來 %1$s 和我聊天:%2$s"</string>
<string name="login_initial_device_name_android">"%1$s Android"</string>
<string name="preference_rageshake">"憤怒搖晃以回報臭蟲"</string>
<string name="screen_bottom_sheet_manage_room_member_ban">"踢出並加入黑名單"</string>
<string name="screen_bottom_sheet_manage_room_member_ban_member_confirmation_action">"加入黑名單"</string>
<string name="screen_bottom_sheet_manage_room_member_ban_member_confirmation_description">"即使收到邀請,他們仍然無法加入聊天室。"</string>
<string name="screen_bottom_sheet_manage_room_member_ban_member_confirmation_title">"您確定要將此成員加入黑名單?"</string>
<string name="screen_bottom_sheet_manage_room_member_banning_user">"正在將 %1$s 加入黑名單"</string>
<string name="screen_bottom_sheet_manage_room_member_kick_member_confirmation_action">"移除"</string>
<string name="screen_bottom_sheet_manage_room_member_kick_member_confirmation_description">"若收到邀請,他們可以再次加入此聊天室。"</string>
<string name="screen_bottom_sheet_manage_room_member_kick_member_confirmation_title">"您真的想要移除此成員嗎?"</string>
<string name="screen_bottom_sheet_manage_room_member_member_user_info">"查看個人檔案"</string>
<string name="screen_bottom_sheet_manage_room_member_remove">"踢出聊天室"</string>
<string name="screen_bottom_sheet_manage_room_member_remove_confirmation_title">"移除成員並禁止未來再度加入?"</string>
<string name="screen_bottom_sheet_manage_room_member_removing_user">"正在踢出 %1$s…"</string>
<string name="screen_media_picker_error_failed_selection">"選取媒體失敗,請再試一次。"</string>
<string name="screen_media_upload_preview_caption_warning">"使用舊應用程式的使用者可能看不到標題。"</string>
<string name="screen_media_upload_preview_error_failed_processing">"無法處理要上傳的媒體,請再試一次。"</string>

View File

@@ -327,18 +327,6 @@
<string name="invite_friends_text">"嗨!请通过 %1$s 与我联系:%2$s"</string>
<string name="login_initial_device_name_android">"%1$s Android"</string>
<string name="preference_rageshake">"摇一摇以报错"</string>
<string name="screen_bottom_sheet_manage_room_member_ban">"移除并封禁成员"</string>
<string name="screen_bottom_sheet_manage_room_member_ban_member_confirmation_action">"封禁"</string>
<string name="screen_bottom_sheet_manage_room_member_ban_member_confirmation_description">"即使受到邀请,他们也无法再次加入聊天室。"</string>
<string name="screen_bottom_sheet_manage_room_member_ban_member_confirmation_title">"您确定要封禁该成员吗?"</string>
<string name="screen_bottom_sheet_manage_room_member_banning_user">"封禁 %1$s"</string>
<string name="screen_bottom_sheet_manage_room_member_kick_member_confirmation_action">"移除"</string>
<string name="screen_bottom_sheet_manage_room_member_kick_member_confirmation_description">"如果受到邀请,他们可以重新加入聊天室。"</string>
<string name="screen_bottom_sheet_manage_room_member_kick_member_confirmation_title">"您确定要移除此成员吗?"</string>
<string name="screen_bottom_sheet_manage_room_member_member_user_info">"查看个人资料"</string>
<string name="screen_bottom_sheet_manage_room_member_remove">"从聊天室移除"</string>
<string name="screen_bottom_sheet_manage_room_member_remove_confirmation_title">"删除成员并禁止重新加入?"</string>
<string name="screen_bottom_sheet_manage_room_member_removing_user">"正在移除 %1$s……"</string>
<string name="screen_media_picker_error_failed_selection">"选择媒体失败,请重试。"</string>
<string name="screen_media_upload_preview_caption_warning">"使用旧版应用程序的用户可能无法看到字幕。"</string>
<string name="screen_media_upload_preview_error_failed_processing">"处理要上传的媒体失败,请重试。"</string>

View File

@@ -325,6 +325,14 @@
"includeRegex" : [
"screen\\.report_room\\..*"
]
},
{
"name" : ":features:roommembermoderation:impl",
"includeRegex" : [
"screen\\.bottom_sheet\\.manage_room_member\\..*",
"screen_room_member_list_manage_member.*",
"screen_room_member_list_unbanning_user"
]
}
]
}