forked from dsutanto/bChot-android
First Commit
This commit is contained in:
@@ -0,0 +1,19 @@
|
||||
/*
|
||||
* Copyright (c) 2025 Element Creations Ltd.
|
||||
* Copyright 2022-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-library")
|
||||
}
|
||||
|
||||
android {
|
||||
namespace = "io.element.android.libraries.eventformatter.api"
|
||||
}
|
||||
|
||||
dependencies {
|
||||
implementation(projects.libraries.matrix.api)
|
||||
}
|
||||
+15
@@ -0,0 +1,15 @@
|
||||
/*
|
||||
* Copyright (c) 2025 Element Creations Ltd.
|
||||
* Copyright 2024, 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.libraries.eventformatter.api
|
||||
|
||||
import io.element.android.libraries.matrix.api.timeline.item.event.EventTimelineItem
|
||||
|
||||
interface PinnedMessagesBannerFormatter {
|
||||
fun format(event: EventTimelineItem): CharSequence
|
||||
}
|
||||
+16
@@ -0,0 +1,16 @@
|
||||
/*
|
||||
* Copyright (c) 2025 Element Creations Ltd.
|
||||
* Copyright 2023-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.libraries.eventformatter.api
|
||||
|
||||
import io.element.android.libraries.matrix.api.roomlist.LatestEventValue
|
||||
|
||||
interface RoomLatestEventFormatter {
|
||||
fun format(latestEvent: LatestEventValue.Local, isDmRoom: Boolean): CharSequence?
|
||||
fun format(latestEvent: LatestEventValue.Remote, isDmRoom: Boolean): CharSequence?
|
||||
}
|
||||
+26
@@ -0,0 +1,26 @@
|
||||
/*
|
||||
* Copyright (c) 2025 Element Creations Ltd.
|
||||
* Copyright 2023-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.libraries.eventformatter.api
|
||||
|
||||
import io.element.android.libraries.matrix.api.core.UserId
|
||||
import io.element.android.libraries.matrix.api.timeline.item.event.EventContent
|
||||
import io.element.android.libraries.matrix.api.timeline.item.event.EventTimelineItem
|
||||
import io.element.android.libraries.matrix.api.timeline.item.event.getDisambiguatedDisplayName
|
||||
|
||||
interface TimelineEventFormatter {
|
||||
fun format(event: EventTimelineItem): CharSequence? {
|
||||
return format(
|
||||
content = event.content,
|
||||
isOutgoing = event.isOwn,
|
||||
sender = event.sender,
|
||||
senderDisambiguatedDisplayName = event.senderProfile.getDisambiguatedDisplayName(event.sender),
|
||||
)
|
||||
}
|
||||
fun format(content: EventContent, isOutgoing: Boolean, sender: UserId, senderDisambiguatedDisplayName: String): CharSequence?
|
||||
}
|
||||
@@ -0,0 +1,40 @@
|
||||
import extension.setupDependencyInjection
|
||||
import extension.testCommonDependencies
|
||||
|
||||
/*
|
||||
* Copyright (c) 2025 Element Creations Ltd.
|
||||
* Copyright 2023, 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.
|
||||
*/
|
||||
|
||||
plugins {
|
||||
id("io.element.android-compose-library")
|
||||
}
|
||||
|
||||
android {
|
||||
namespace = "io.element.android.libraries.eventformatter.impl"
|
||||
|
||||
testOptions {
|
||||
unitTests {
|
||||
isIncludeAndroidResources = true
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
setupDependencyInjection()
|
||||
|
||||
dependencies {
|
||||
implementation(projects.libraries.core)
|
||||
implementation(projects.libraries.architecture)
|
||||
implementation(projects.libraries.matrix.api)
|
||||
implementation(projects.libraries.matrixui)
|
||||
implementation(projects.libraries.uiStrings)
|
||||
implementation(projects.services.toolbox.api)
|
||||
api(projects.libraries.eventformatter.api)
|
||||
|
||||
testCommonDependencies(libs)
|
||||
testImplementation(projects.services.toolbox.impl)
|
||||
testImplementation(projects.libraries.matrix.test)
|
||||
}
|
||||
+115
@@ -0,0 +1,115 @@
|
||||
/*
|
||||
* Copyright (c) 2025 Element Creations Ltd.
|
||||
* Copyright 2024, 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.libraries.eventformatter.impl
|
||||
|
||||
import androidx.annotation.StringRes
|
||||
import androidx.compose.ui.text.AnnotatedString
|
||||
import dev.zacsweers.metro.ContributesBinding
|
||||
import io.element.android.libraries.di.SessionScope
|
||||
import io.element.android.libraries.eventformatter.api.PinnedMessagesBannerFormatter
|
||||
import io.element.android.libraries.matrix.api.permalink.PermalinkParser
|
||||
import io.element.android.libraries.matrix.api.timeline.item.event.AudioMessageType
|
||||
import io.element.android.libraries.matrix.api.timeline.item.event.EmoteMessageType
|
||||
import io.element.android.libraries.matrix.api.timeline.item.event.EventTimelineItem
|
||||
import io.element.android.libraries.matrix.api.timeline.item.event.FileMessageType
|
||||
import io.element.android.libraries.matrix.api.timeline.item.event.ImageMessageType
|
||||
import io.element.android.libraries.matrix.api.timeline.item.event.LocationMessageType
|
||||
import io.element.android.libraries.matrix.api.timeline.item.event.MessageContent
|
||||
import io.element.android.libraries.matrix.api.timeline.item.event.MessageType
|
||||
import io.element.android.libraries.matrix.api.timeline.item.event.NoticeMessageType
|
||||
import io.element.android.libraries.matrix.api.timeline.item.event.OtherMessageType
|
||||
import io.element.android.libraries.matrix.api.timeline.item.event.PollContent
|
||||
import io.element.android.libraries.matrix.api.timeline.item.event.RedactedContent
|
||||
import io.element.android.libraries.matrix.api.timeline.item.event.StickerContent
|
||||
import io.element.android.libraries.matrix.api.timeline.item.event.StickerMessageType
|
||||
import io.element.android.libraries.matrix.api.timeline.item.event.TextMessageType
|
||||
import io.element.android.libraries.matrix.api.timeline.item.event.UnableToDecryptContent
|
||||
import io.element.android.libraries.matrix.api.timeline.item.event.VideoMessageType
|
||||
import io.element.android.libraries.matrix.api.timeline.item.event.VoiceMessageType
|
||||
import io.element.android.libraries.matrix.api.timeline.item.event.getDisambiguatedDisplayName
|
||||
import io.element.android.libraries.matrix.ui.messages.toPlainText
|
||||
import io.element.android.libraries.ui.strings.CommonStrings
|
||||
import io.element.android.services.toolbox.api.strings.StringProvider
|
||||
|
||||
@ContributesBinding(SessionScope::class)
|
||||
class DefaultPinnedMessagesBannerFormatter(
|
||||
private val sp: StringProvider,
|
||||
private val permalinkParser: PermalinkParser,
|
||||
) : PinnedMessagesBannerFormatter {
|
||||
override fun format(event: EventTimelineItem): CharSequence {
|
||||
return when (val content = event.content) {
|
||||
is MessageContent -> processMessageContents(event, content)
|
||||
is StickerContent -> {
|
||||
val text = content.body ?: content.filename
|
||||
text.prefixWith(CommonStrings.common_sticker)
|
||||
}
|
||||
is UnableToDecryptContent -> {
|
||||
sp.getString(CommonStrings.common_waiting_for_decryption_key)
|
||||
}
|
||||
is PollContent -> {
|
||||
content.question.prefixWith(CommonStrings.a11y_poll)
|
||||
}
|
||||
RedactedContent -> {
|
||||
sp.getString(CommonStrings.common_message_removed)
|
||||
}
|
||||
else -> {
|
||||
sp.getString(CommonStrings.common_unsupported_event)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private fun processMessageContents(
|
||||
event: EventTimelineItem,
|
||||
messageContent: MessageContent,
|
||||
): CharSequence {
|
||||
return when (val messageType: MessageType = messageContent.type) {
|
||||
is EmoteMessageType -> {
|
||||
val senderDisambiguatedDisplayName = event.senderProfile.getDisambiguatedDisplayName(event.sender)
|
||||
"* $senderDisambiguatedDisplayName ${messageType.body}"
|
||||
}
|
||||
is TextMessageType -> {
|
||||
messageType.toPlainText(permalinkParser)
|
||||
}
|
||||
is VideoMessageType -> {
|
||||
messageType.bestDescription.prefixWith(CommonStrings.common_video)
|
||||
}
|
||||
is ImageMessageType -> {
|
||||
messageType.bestDescription.prefixWith(CommonStrings.common_image)
|
||||
}
|
||||
is StickerMessageType -> {
|
||||
messageType.bestDescription.prefixWith(CommonStrings.common_sticker)
|
||||
}
|
||||
is LocationMessageType -> {
|
||||
messageType.body.prefixWith(CommonStrings.common_shared_location)
|
||||
}
|
||||
is FileMessageType -> {
|
||||
messageType.bestDescription.prefixWith(CommonStrings.common_file)
|
||||
}
|
||||
is AudioMessageType -> {
|
||||
messageType.bestDescription.prefixWith(CommonStrings.common_audio)
|
||||
}
|
||||
is VoiceMessageType -> {
|
||||
// In this case, do not use bestDescription, because the filename is useless, only use the caption if available.
|
||||
messageType.caption?.prefixWith(sp.getString(CommonStrings.common_voice_message))
|
||||
?: sp.getString(CommonStrings.common_voice_message)
|
||||
}
|
||||
is OtherMessageType -> {
|
||||
messageType.body
|
||||
}
|
||||
is NoticeMessageType -> {
|
||||
messageType.body
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private fun CharSequence.prefixWith(@StringRes res: Int): AnnotatedString {
|
||||
val prefix = sp.getString(res)
|
||||
return prefixWith(prefix)
|
||||
}
|
||||
}
|
||||
+188
@@ -0,0 +1,188 @@
|
||||
/*
|
||||
* Copyright (c) 2025 Element Creations Ltd.
|
||||
* Copyright 2023-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.libraries.eventformatter.impl
|
||||
|
||||
import dev.zacsweers.metro.ContributesBinding
|
||||
import io.element.android.libraries.di.SessionScope
|
||||
import io.element.android.libraries.eventformatter.api.RoomLatestEventFormatter
|
||||
import io.element.android.libraries.eventformatter.impl.mode.RenderingMode
|
||||
import io.element.android.libraries.matrix.api.core.UserId
|
||||
import io.element.android.libraries.matrix.api.permalink.PermalinkParser
|
||||
import io.element.android.libraries.matrix.api.roomlist.LatestEventValue
|
||||
import io.element.android.libraries.matrix.api.timeline.item.event.AudioMessageType
|
||||
import io.element.android.libraries.matrix.api.timeline.item.event.CallNotifyContent
|
||||
import io.element.android.libraries.matrix.api.timeline.item.event.EmoteMessageType
|
||||
import io.element.android.libraries.matrix.api.timeline.item.event.EventContent
|
||||
import io.element.android.libraries.matrix.api.timeline.item.event.FailedToParseMessageLikeContent
|
||||
import io.element.android.libraries.matrix.api.timeline.item.event.FailedToParseStateContent
|
||||
import io.element.android.libraries.matrix.api.timeline.item.event.FileMessageType
|
||||
import io.element.android.libraries.matrix.api.timeline.item.event.ImageMessageType
|
||||
import io.element.android.libraries.matrix.api.timeline.item.event.LegacyCallInviteContent
|
||||
import io.element.android.libraries.matrix.api.timeline.item.event.LocationMessageType
|
||||
import io.element.android.libraries.matrix.api.timeline.item.event.MessageContent
|
||||
import io.element.android.libraries.matrix.api.timeline.item.event.MessageType
|
||||
import io.element.android.libraries.matrix.api.timeline.item.event.NoticeMessageType
|
||||
import io.element.android.libraries.matrix.api.timeline.item.event.OtherMessageType
|
||||
import io.element.android.libraries.matrix.api.timeline.item.event.PollContent
|
||||
import io.element.android.libraries.matrix.api.timeline.item.event.ProfileChangeContent
|
||||
import io.element.android.libraries.matrix.api.timeline.item.event.RedactedContent
|
||||
import io.element.android.libraries.matrix.api.timeline.item.event.RoomMembershipContent
|
||||
import io.element.android.libraries.matrix.api.timeline.item.event.StateContent
|
||||
import io.element.android.libraries.matrix.api.timeline.item.event.StickerContent
|
||||
import io.element.android.libraries.matrix.api.timeline.item.event.StickerMessageType
|
||||
import io.element.android.libraries.matrix.api.timeline.item.event.TextMessageType
|
||||
import io.element.android.libraries.matrix.api.timeline.item.event.UnableToDecryptContent
|
||||
import io.element.android.libraries.matrix.api.timeline.item.event.UnknownContent
|
||||
import io.element.android.libraries.matrix.api.timeline.item.event.VideoMessageType
|
||||
import io.element.android.libraries.matrix.api.timeline.item.event.VoiceMessageType
|
||||
import io.element.android.libraries.matrix.api.timeline.item.event.getDisambiguatedDisplayName
|
||||
import io.element.android.libraries.matrix.ui.messages.toPlainText
|
||||
import io.element.android.libraries.ui.strings.CommonStrings
|
||||
import io.element.android.services.toolbox.api.strings.StringProvider
|
||||
|
||||
@ContributesBinding(SessionScope::class)
|
||||
class DefaultRoomLatestEventFormatter(
|
||||
private val sp: StringProvider,
|
||||
private val roomMembershipContentFormatter: RoomMembershipContentFormatter,
|
||||
private val profileChangeContentFormatter: ProfileChangeContentFormatter,
|
||||
private val stateContentFormatter: StateContentFormatter,
|
||||
private val permalinkParser: PermalinkParser,
|
||||
) : RoomLatestEventFormatter {
|
||||
companion object {
|
||||
// Max characters to display in the last message. This works around https://github.com/element-hq/element-x-android/issues/2105
|
||||
private const val MAX_SAFE_LENGTH = 500
|
||||
}
|
||||
|
||||
override fun format(
|
||||
latestEvent: LatestEventValue.Local,
|
||||
isDmRoom: Boolean,
|
||||
): CharSequence? = formatContent(
|
||||
content = latestEvent.content,
|
||||
isDmRoom = isDmRoom,
|
||||
isOutgoing = true,
|
||||
senderId = latestEvent.senderId,
|
||||
senderDisambiguatedDisplayName = latestEvent.senderProfile.getDisambiguatedDisplayName(latestEvent.senderId)
|
||||
)
|
||||
|
||||
override fun format(
|
||||
latestEvent: LatestEventValue.Remote,
|
||||
isDmRoom: Boolean,
|
||||
): CharSequence? = formatContent(
|
||||
content = latestEvent.content,
|
||||
isDmRoom = isDmRoom,
|
||||
isOutgoing = latestEvent.isOwn,
|
||||
senderId = latestEvent.senderId,
|
||||
senderDisambiguatedDisplayName = latestEvent.senderProfile.getDisambiguatedDisplayName(latestEvent.senderId)
|
||||
)
|
||||
|
||||
private fun formatContent(
|
||||
content: EventContent,
|
||||
isDmRoom: Boolean,
|
||||
isOutgoing: Boolean,
|
||||
senderId: UserId,
|
||||
senderDisambiguatedDisplayName: String
|
||||
): CharSequence? {
|
||||
return when (content) {
|
||||
is MessageContent -> content.process(senderDisambiguatedDisplayName, isDmRoom, isOutgoing)
|
||||
RedactedContent -> {
|
||||
val message = sp.getString(CommonStrings.common_message_removed)
|
||||
message.prefixIfNeeded(senderDisambiguatedDisplayName, isDmRoom, isOutgoing)
|
||||
}
|
||||
is StickerContent -> {
|
||||
val message = sp.getString(CommonStrings.common_sticker) + " (" + content.bestDescription + ")"
|
||||
message.prefixIfNeeded(senderDisambiguatedDisplayName, isDmRoom, isOutgoing)
|
||||
}
|
||||
is UnableToDecryptContent -> {
|
||||
val message = sp.getString(CommonStrings.common_waiting_for_decryption_key)
|
||||
message.prefixIfNeeded(senderDisambiguatedDisplayName, isDmRoom, isOutgoing)
|
||||
}
|
||||
is RoomMembershipContent -> {
|
||||
roomMembershipContentFormatter.format(content, senderDisambiguatedDisplayName, isOutgoing)
|
||||
}
|
||||
is ProfileChangeContent -> {
|
||||
profileChangeContentFormatter.format(content, senderId, senderDisambiguatedDisplayName, isOutgoing)
|
||||
}
|
||||
is StateContent -> {
|
||||
stateContentFormatter.format(content, senderDisambiguatedDisplayName, isOutgoing, RenderingMode.RoomList)
|
||||
}
|
||||
is PollContent -> {
|
||||
val message = sp.getString(CommonStrings.common_poll_summary, content.question)
|
||||
message.prefixIfNeeded(senderDisambiguatedDisplayName, isDmRoom, isOutgoing)
|
||||
}
|
||||
is FailedToParseMessageLikeContent, is FailedToParseStateContent, is UnknownContent -> {
|
||||
val message = sp.getString(CommonStrings.common_unsupported_event)
|
||||
message.prefixIfNeeded(senderDisambiguatedDisplayName, isDmRoom, isOutgoing)
|
||||
}
|
||||
is LegacyCallInviteContent -> sp.getString(CommonStrings.common_unsupported_call)
|
||||
is CallNotifyContent -> sp.getString(CommonStrings.common_call_started)
|
||||
}?.take(MAX_SAFE_LENGTH)
|
||||
}
|
||||
|
||||
private fun MessageContent.process(
|
||||
senderDisambiguatedDisplayName: String,
|
||||
isDmRoom: Boolean,
|
||||
isOutgoing: Boolean
|
||||
): CharSequence {
|
||||
val message = when (val messageType: MessageType = type) {
|
||||
// Doesn't need a prefix
|
||||
is EmoteMessageType -> {
|
||||
return "* $senderDisambiguatedDisplayName ${messageType.body}"
|
||||
}
|
||||
is TextMessageType -> {
|
||||
messageType.toPlainText(permalinkParser)
|
||||
}
|
||||
is VideoMessageType -> {
|
||||
messageType.bestDescription.prefixWith(sp.getString(CommonStrings.common_video))
|
||||
}
|
||||
is ImageMessageType -> {
|
||||
messageType.bestDescription.prefixWith(sp.getString(CommonStrings.common_image))
|
||||
}
|
||||
is StickerMessageType -> {
|
||||
messageType.bestDescription.prefixWith(sp.getString(CommonStrings.common_sticker))
|
||||
}
|
||||
is LocationMessageType -> {
|
||||
sp.getString(CommonStrings.common_shared_location)
|
||||
}
|
||||
is FileMessageType -> {
|
||||
messageType.bestDescription.prefixWith(sp.getString(CommonStrings.common_file))
|
||||
}
|
||||
is AudioMessageType -> {
|
||||
messageType.bestDescription.prefixWith(sp.getString(CommonStrings.common_audio))
|
||||
}
|
||||
is VoiceMessageType -> {
|
||||
// In this case, do not use bestDescription, because the filename is useless, only use the caption if available.
|
||||
messageType.caption?.prefixWith(sp.getString(CommonStrings.common_voice_message))
|
||||
?: sp.getString(CommonStrings.common_voice_message)
|
||||
}
|
||||
is OtherMessageType -> {
|
||||
messageType.body
|
||||
}
|
||||
is NoticeMessageType -> {
|
||||
messageType.body
|
||||
}
|
||||
}
|
||||
return message.prefixIfNeeded(senderDisambiguatedDisplayName, isDmRoom, isOutgoing)
|
||||
}
|
||||
|
||||
private fun CharSequence.prefixIfNeeded(
|
||||
senderDisambiguatedDisplayName: String,
|
||||
isDmRoom: Boolean,
|
||||
isOutgoing: Boolean,
|
||||
): CharSequence = if (isDmRoom) {
|
||||
this
|
||||
} else {
|
||||
prefixWith(
|
||||
if (isOutgoing) {
|
||||
sp.getString(CommonStrings.common_you)
|
||||
} else {
|
||||
senderDisambiguatedDisplayName
|
||||
}
|
||||
)
|
||||
}
|
||||
}
|
||||
+80
@@ -0,0 +1,80 @@
|
||||
/*
|
||||
* Copyright (c) 2025 Element Creations Ltd.
|
||||
* Copyright 2023-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.libraries.eventformatter.impl
|
||||
|
||||
import dev.zacsweers.metro.ContributesBinding
|
||||
import io.element.android.libraries.core.meta.BuildMeta
|
||||
import io.element.android.libraries.di.SessionScope
|
||||
import io.element.android.libraries.eventformatter.api.TimelineEventFormatter
|
||||
import io.element.android.libraries.eventformatter.impl.mode.RenderingMode
|
||||
import io.element.android.libraries.matrix.api.core.UserId
|
||||
import io.element.android.libraries.matrix.api.timeline.item.event.CallNotifyContent
|
||||
import io.element.android.libraries.matrix.api.timeline.item.event.EventContent
|
||||
import io.element.android.libraries.matrix.api.timeline.item.event.EventTimelineItem
|
||||
import io.element.android.libraries.matrix.api.timeline.item.event.FailedToParseMessageLikeContent
|
||||
import io.element.android.libraries.matrix.api.timeline.item.event.FailedToParseStateContent
|
||||
import io.element.android.libraries.matrix.api.timeline.item.event.LegacyCallInviteContent
|
||||
import io.element.android.libraries.matrix.api.timeline.item.event.MessageContent
|
||||
import io.element.android.libraries.matrix.api.timeline.item.event.PollContent
|
||||
import io.element.android.libraries.matrix.api.timeline.item.event.ProfileChangeContent
|
||||
import io.element.android.libraries.matrix.api.timeline.item.event.RedactedContent
|
||||
import io.element.android.libraries.matrix.api.timeline.item.event.RoomMembershipContent
|
||||
import io.element.android.libraries.matrix.api.timeline.item.event.StateContent
|
||||
import io.element.android.libraries.matrix.api.timeline.item.event.StickerContent
|
||||
import io.element.android.libraries.matrix.api.timeline.item.event.UnableToDecryptContent
|
||||
import io.element.android.libraries.matrix.api.timeline.item.event.UnknownContent
|
||||
import io.element.android.libraries.matrix.api.timeline.item.event.getDisambiguatedDisplayName
|
||||
import io.element.android.libraries.ui.strings.CommonStrings
|
||||
import io.element.android.services.toolbox.api.strings.StringProvider
|
||||
|
||||
@ContributesBinding(SessionScope::class)
|
||||
class DefaultTimelineEventFormatter(
|
||||
private val sp: StringProvider,
|
||||
private val buildMeta: BuildMeta,
|
||||
private val roomMembershipContentFormatter: RoomMembershipContentFormatter,
|
||||
private val profileChangeContentFormatter: ProfileChangeContentFormatter,
|
||||
private val stateContentFormatter: StateContentFormatter,
|
||||
) : TimelineEventFormatter {
|
||||
override fun format(event: EventTimelineItem): CharSequence? {
|
||||
val isOutgoing = event.isOwn
|
||||
val senderDisambiguatedDisplayName = event.senderProfile.getDisambiguatedDisplayName(event.sender)
|
||||
return format(event.content, isOutgoing, event.sender, senderDisambiguatedDisplayName)
|
||||
}
|
||||
|
||||
override fun format(content: EventContent, isOutgoing: Boolean, sender: UserId, senderDisambiguatedDisplayName: String): CharSequence? {
|
||||
return when (content) {
|
||||
is RoomMembershipContent -> {
|
||||
roomMembershipContentFormatter.format(content, senderDisambiguatedDisplayName, isOutgoing)
|
||||
}
|
||||
is ProfileChangeContent -> {
|
||||
profileChangeContentFormatter.format(content, sender, senderDisambiguatedDisplayName, isOutgoing)
|
||||
}
|
||||
is StateContent -> {
|
||||
stateContentFormatter.format(content, senderDisambiguatedDisplayName, isOutgoing, RenderingMode.Timeline)
|
||||
}
|
||||
is CallNotifyContent -> {
|
||||
sp.getString(CommonStrings.common_call_started)
|
||||
}
|
||||
RedactedContent,
|
||||
is LegacyCallInviteContent,
|
||||
is StickerContent,
|
||||
is PollContent,
|
||||
is UnableToDecryptContent,
|
||||
is MessageContent,
|
||||
is FailedToParseMessageLikeContent,
|
||||
is FailedToParseStateContent,
|
||||
is UnknownContent -> {
|
||||
if (buildMeta.isDebuggable) {
|
||||
error("You should not use this formatter for this event content: $content")
|
||||
}
|
||||
sp.getString(CommonStrings.common_unsupported_event)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
+25
@@ -0,0 +1,25 @@
|
||||
/*
|
||||
* Copyright (c) 2025 Element Creations Ltd.
|
||||
* Copyright 2024, 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.libraries.eventformatter.impl
|
||||
|
||||
import androidx.compose.ui.text.AnnotatedString
|
||||
import androidx.compose.ui.text.SpanStyle
|
||||
import androidx.compose.ui.text.buildAnnotatedString
|
||||
import androidx.compose.ui.text.font.FontWeight
|
||||
import androidx.compose.ui.text.withStyle
|
||||
|
||||
internal fun CharSequence.prefixWith(prefix: String): AnnotatedString {
|
||||
return buildAnnotatedString {
|
||||
withStyle(SpanStyle(fontWeight = FontWeight.Bold)) {
|
||||
append(prefix)
|
||||
}
|
||||
append(": ")
|
||||
append(this@prefixWith)
|
||||
}
|
||||
}
|
||||
+70
@@ -0,0 +1,70 @@
|
||||
/*
|
||||
* Copyright (c) 2025 Element Creations Ltd.
|
||||
* Copyright 2023-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.libraries.eventformatter.impl
|
||||
|
||||
import dev.zacsweers.metro.Inject
|
||||
import io.element.android.libraries.matrix.api.core.UserId
|
||||
import io.element.android.libraries.matrix.api.timeline.item.event.ProfileChangeContent
|
||||
import io.element.android.services.toolbox.api.strings.StringProvider
|
||||
|
||||
@Inject
|
||||
class ProfileChangeContentFormatter(
|
||||
private val sp: StringProvider,
|
||||
) {
|
||||
fun format(
|
||||
profileChangeContent: ProfileChangeContent,
|
||||
senderId: UserId,
|
||||
senderDisambiguatedDisplayName: String,
|
||||
senderIsYou: Boolean,
|
||||
): String? = profileChangeContent.run {
|
||||
val displayNameChanged = displayName != prevDisplayName
|
||||
val avatarChanged = avatarUrl != prevAvatarUrl
|
||||
return when {
|
||||
avatarChanged && displayNameChanged -> {
|
||||
val message = format(
|
||||
profileChangeContent = profileChangeContent.copy(avatarUrl = null, prevAvatarUrl = null),
|
||||
senderId = senderId,
|
||||
senderDisambiguatedDisplayName = senderDisambiguatedDisplayName,
|
||||
senderIsYou = senderIsYou,
|
||||
)
|
||||
val avatarChangedToo = sp.getString(R.string.state_event_avatar_changed_too)
|
||||
"$message\n$avatarChangedToo"
|
||||
}
|
||||
displayNameChanged -> {
|
||||
if (displayName != null && prevDisplayName != null) {
|
||||
if (senderIsYou) {
|
||||
sp.getString(R.string.state_event_display_name_changed_from_by_you, prevDisplayName, displayName)
|
||||
} else {
|
||||
sp.getString(R.string.state_event_display_name_changed_from, senderId.value, prevDisplayName, displayName)
|
||||
}
|
||||
} else if (displayName != null) {
|
||||
if (senderIsYou) {
|
||||
sp.getString(R.string.state_event_display_name_set_by_you, displayName)
|
||||
} else {
|
||||
sp.getString(R.string.state_event_display_name_set, senderId.value, displayName)
|
||||
}
|
||||
} else {
|
||||
if (senderIsYou) {
|
||||
sp.getString(R.string.state_event_display_name_removed_by_you, prevDisplayName)
|
||||
} else {
|
||||
sp.getString(R.string.state_event_display_name_removed, senderId.value, prevDisplayName)
|
||||
}
|
||||
}
|
||||
}
|
||||
avatarChanged -> {
|
||||
if (senderIsYou) {
|
||||
sp.getString(R.string.state_event_avatar_url_changed_by_you)
|
||||
} else {
|
||||
sp.getString(R.string.state_event_avatar_url_changed, senderDisambiguatedDisplayName)
|
||||
}
|
||||
}
|
||||
else -> null
|
||||
}
|
||||
}
|
||||
}
|
||||
+137
@@ -0,0 +1,137 @@
|
||||
/*
|
||||
* Copyright (c) 2025 Element Creations Ltd.
|
||||
* Copyright 2023-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.libraries.eventformatter.impl
|
||||
|
||||
import dev.zacsweers.metro.Inject
|
||||
import io.element.android.libraries.matrix.api.MatrixClient
|
||||
import io.element.android.libraries.matrix.api.timeline.item.event.MembershipChange
|
||||
import io.element.android.libraries.matrix.api.timeline.item.event.RoomMembershipContent
|
||||
import io.element.android.services.toolbox.api.strings.StringProvider
|
||||
import timber.log.Timber
|
||||
|
||||
@Inject
|
||||
class RoomMembershipContentFormatter(
|
||||
private val matrixClient: MatrixClient,
|
||||
private val sp: StringProvider,
|
||||
) {
|
||||
fun format(
|
||||
membershipContent: RoomMembershipContent,
|
||||
senderDisambiguatedDisplayName: String,
|
||||
senderIsYou: Boolean,
|
||||
): CharSequence? {
|
||||
val userId = membershipContent.userId
|
||||
val memberIsYou = matrixClient.isMe(userId)
|
||||
val userDisplayNameOrId = membershipContent.userDisplayName ?: userId.value
|
||||
val reason = membershipContent.reason?.takeIf { it.isNotBlank() }
|
||||
return when (membershipContent.change) {
|
||||
MembershipChange.JOINED -> if (memberIsYou) {
|
||||
sp.getString(R.string.state_event_room_join_by_you)
|
||||
} else {
|
||||
sp.getString(R.string.state_event_room_join, senderDisambiguatedDisplayName)
|
||||
}
|
||||
MembershipChange.LEFT -> if (memberIsYou) {
|
||||
sp.getString(R.string.state_event_room_leave_by_you)
|
||||
} else {
|
||||
sp.getString(R.string.state_event_room_leave, senderDisambiguatedDisplayName)
|
||||
}
|
||||
MembershipChange.BANNED, MembershipChange.KICKED_AND_BANNED -> if (senderIsYou) {
|
||||
if (reason != null) {
|
||||
sp.getString(R.string.state_event_room_ban_by_you_with_reason, userDisplayNameOrId, reason)
|
||||
} else {
|
||||
sp.getString(R.string.state_event_room_ban_by_you, userDisplayNameOrId)
|
||||
}
|
||||
} else {
|
||||
if (reason != null) {
|
||||
sp.getString(R.string.state_event_room_ban_with_reason, senderDisambiguatedDisplayName, userDisplayNameOrId, reason)
|
||||
} else {
|
||||
sp.getString(R.string.state_event_room_ban, senderDisambiguatedDisplayName, userDisplayNameOrId)
|
||||
}
|
||||
}
|
||||
MembershipChange.UNBANNED -> if (senderIsYou) {
|
||||
sp.getString(R.string.state_event_room_unban_by_you, userDisplayNameOrId)
|
||||
} else {
|
||||
sp.getString(R.string.state_event_room_unban, senderDisambiguatedDisplayName, userDisplayNameOrId)
|
||||
}
|
||||
MembershipChange.KICKED -> if (senderIsYou) {
|
||||
if (reason != null) {
|
||||
sp.getString(R.string.state_event_room_remove_by_you_with_reason, userDisplayNameOrId, reason)
|
||||
} else {
|
||||
sp.getString(R.string.state_event_room_remove_by_you, userDisplayNameOrId)
|
||||
}
|
||||
} else {
|
||||
if (reason != null) {
|
||||
sp.getString(R.string.state_event_room_remove_with_reason, senderDisambiguatedDisplayName, userDisplayNameOrId, reason)
|
||||
} else {
|
||||
sp.getString(R.string.state_event_room_remove, senderDisambiguatedDisplayName, userDisplayNameOrId)
|
||||
}
|
||||
}
|
||||
MembershipChange.INVITED -> if (senderIsYou) {
|
||||
sp.getString(R.string.state_event_room_invite_by_you, userDisplayNameOrId)
|
||||
} else if (memberIsYou) {
|
||||
sp.getString(R.string.state_event_room_invite_you, senderDisambiguatedDisplayName)
|
||||
} else {
|
||||
sp.getString(R.string.state_event_room_invite, senderDisambiguatedDisplayName, userDisplayNameOrId)
|
||||
}
|
||||
MembershipChange.INVITATION_ACCEPTED -> if (memberIsYou) {
|
||||
sp.getString(R.string.state_event_room_invite_accepted_by_you)
|
||||
} else {
|
||||
sp.getString(R.string.state_event_room_invite_accepted, userDisplayNameOrId)
|
||||
}
|
||||
MembershipChange.INVITATION_REJECTED -> if (memberIsYou) {
|
||||
sp.getString(R.string.state_event_room_reject_by_you)
|
||||
} else {
|
||||
sp.getString(R.string.state_event_room_reject, userDisplayNameOrId)
|
||||
}
|
||||
MembershipChange.INVITATION_REVOKED -> if (senderIsYou) {
|
||||
sp.getString(R.string.state_event_room_third_party_revoked_invite_by_you, userDisplayNameOrId)
|
||||
} else {
|
||||
sp.getString(R.string.state_event_room_third_party_revoked_invite, senderDisambiguatedDisplayName, userDisplayNameOrId)
|
||||
}
|
||||
MembershipChange.KNOCKED -> if (memberIsYou) {
|
||||
sp.getString(R.string.state_event_room_knock_by_you)
|
||||
} else {
|
||||
sp.getString(R.string.state_event_room_knock, senderDisambiguatedDisplayName)
|
||||
}
|
||||
MembershipChange.KNOCK_ACCEPTED -> if (senderIsYou) {
|
||||
sp.getString(R.string.state_event_room_knock_accepted_by_you, userDisplayNameOrId)
|
||||
} else {
|
||||
sp.getString(R.string.state_event_room_knock_accepted, senderDisambiguatedDisplayName, userDisplayNameOrId)
|
||||
}
|
||||
MembershipChange.KNOCK_RETRACTED -> if (memberIsYou) {
|
||||
sp.getString(R.string.state_event_room_knock_retracted_by_you)
|
||||
} else {
|
||||
sp.getString(R.string.state_event_room_knock_retracted, senderDisambiguatedDisplayName)
|
||||
}
|
||||
MembershipChange.KNOCK_DENIED -> if (senderIsYou) {
|
||||
sp.getString(R.string.state_event_room_knock_denied_by_you, userDisplayNameOrId)
|
||||
} else if (memberIsYou) {
|
||||
sp.getString(R.string.state_event_room_knock_denied_you, senderDisambiguatedDisplayName)
|
||||
} else {
|
||||
sp.getString(R.string.state_event_room_knock_denied, senderDisambiguatedDisplayName, userDisplayNameOrId)
|
||||
}
|
||||
MembershipChange.NONE -> if (senderIsYou) {
|
||||
sp.getString(R.string.state_event_room_none_by_you)
|
||||
} else {
|
||||
sp.getString(R.string.state_event_room_none, senderDisambiguatedDisplayName)
|
||||
}
|
||||
MembershipChange.ERROR -> {
|
||||
Timber.v("Filtering timeline item for room membership: $membershipContent")
|
||||
null
|
||||
}
|
||||
MembershipChange.NOT_IMPLEMENTED -> {
|
||||
Timber.v("Filtering timeline item for room membership: $membershipContent")
|
||||
null
|
||||
}
|
||||
null -> {
|
||||
Timber.v("Filtering timeline item for room membership: $membershipContent")
|
||||
null
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
+232
@@ -0,0 +1,232 @@
|
||||
/*
|
||||
* Copyright (c) 2025 Element Creations Ltd.
|
||||
* Copyright 2023-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.libraries.eventformatter.impl
|
||||
|
||||
import dev.zacsweers.metro.Inject
|
||||
import io.element.android.libraries.eventformatter.impl.mode.RenderingMode
|
||||
import io.element.android.libraries.matrix.api.timeline.item.event.OtherState
|
||||
import io.element.android.libraries.matrix.api.timeline.item.event.StateContent
|
||||
import io.element.android.libraries.ui.strings.CommonStrings
|
||||
import io.element.android.services.toolbox.api.strings.StringProvider
|
||||
import timber.log.Timber
|
||||
|
||||
@Inject
|
||||
class StateContentFormatter(
|
||||
private val sp: StringProvider,
|
||||
) {
|
||||
fun format(
|
||||
stateContent: StateContent,
|
||||
senderDisambiguatedDisplayName: String,
|
||||
senderIsYou: Boolean,
|
||||
renderingMode: RenderingMode,
|
||||
): CharSequence? {
|
||||
return when (val content = stateContent.content) {
|
||||
is OtherState.RoomAvatar -> {
|
||||
val hasAvatarUrl = content.url != null
|
||||
when {
|
||||
senderIsYou && hasAvatarUrl -> sp.getString(R.string.state_event_room_avatar_changed_by_you)
|
||||
senderIsYou && !hasAvatarUrl -> sp.getString(R.string.state_event_room_avatar_removed_by_you)
|
||||
!senderIsYou && hasAvatarUrl -> sp.getString(R.string.state_event_room_avatar_changed, senderDisambiguatedDisplayName)
|
||||
else -> sp.getString(R.string.state_event_room_avatar_removed, senderDisambiguatedDisplayName)
|
||||
}
|
||||
}
|
||||
is OtherState.RoomCreate -> {
|
||||
if (senderIsYou) {
|
||||
sp.getString(R.string.state_event_room_created_by_you)
|
||||
} else {
|
||||
sp.getString(R.string.state_event_room_created, senderDisambiguatedDisplayName)
|
||||
}
|
||||
}
|
||||
is OtherState.RoomEncryption -> sp.getString(CommonStrings.common_encryption_enabled)
|
||||
is OtherState.RoomName -> {
|
||||
val hasRoomName = content.name != null
|
||||
when {
|
||||
senderIsYou && hasRoomName -> sp.getString(R.string.state_event_room_name_changed_by_you, content.name)
|
||||
senderIsYou && !hasRoomName -> sp.getString(R.string.state_event_room_name_removed_by_you)
|
||||
!senderIsYou && hasRoomName -> sp.getString(R.string.state_event_room_name_changed, senderDisambiguatedDisplayName, content.name)
|
||||
else -> sp.getString(R.string.state_event_room_name_removed, senderDisambiguatedDisplayName)
|
||||
}
|
||||
}
|
||||
is OtherState.RoomThirdPartyInvite -> {
|
||||
if (content.displayName == null) {
|
||||
Timber.e("RoomThirdPartyInvite undisplayable due to missing name")
|
||||
return null
|
||||
}
|
||||
if (senderIsYou) {
|
||||
sp.getString(R.string.state_event_room_third_party_invite_by_you, content.displayName)
|
||||
} else {
|
||||
sp.getString(R.string.state_event_room_third_party_invite, senderDisambiguatedDisplayName, content.displayName)
|
||||
}
|
||||
}
|
||||
is OtherState.RoomTopic -> {
|
||||
val hasRoomTopic = content.topic?.isNotBlank() == true
|
||||
when {
|
||||
senderIsYou && hasRoomTopic -> sp.getString(R.string.state_event_room_topic_changed_by_you, content.topic)
|
||||
senderIsYou && !hasRoomTopic -> sp.getString(R.string.state_event_room_topic_removed_by_you)
|
||||
!senderIsYou && hasRoomTopic -> sp.getString(R.string.state_event_room_topic_changed, senderDisambiguatedDisplayName, content.topic)
|
||||
else -> sp.getString(R.string.state_event_room_topic_removed, senderDisambiguatedDisplayName)
|
||||
}
|
||||
}
|
||||
is OtherState.RoomPinnedEvents -> when (renderingMode) {
|
||||
RenderingMode.RoomList -> {
|
||||
Timber.v("Filtering timeline item for room state change: $content")
|
||||
null
|
||||
}
|
||||
RenderingMode.Timeline -> {
|
||||
formatRoomPinnedEvents(content, senderIsYou, senderDisambiguatedDisplayName)
|
||||
}
|
||||
}
|
||||
is OtherState.Custom -> when (renderingMode) {
|
||||
RenderingMode.RoomList -> {
|
||||
Timber.v("Filtering timeline item for room state change: $content")
|
||||
null
|
||||
}
|
||||
RenderingMode.Timeline -> {
|
||||
"Custom event ${content.eventType}"
|
||||
}
|
||||
}
|
||||
OtherState.PolicyRuleRoom -> when (renderingMode) {
|
||||
RenderingMode.RoomList -> {
|
||||
Timber.v("Filtering timeline item for room state change: $content")
|
||||
null
|
||||
}
|
||||
RenderingMode.Timeline -> {
|
||||
"PolicyRuleRoom"
|
||||
}
|
||||
}
|
||||
OtherState.PolicyRuleServer -> when (renderingMode) {
|
||||
RenderingMode.RoomList -> {
|
||||
Timber.v("Filtering timeline item for room state change: $content")
|
||||
null
|
||||
}
|
||||
RenderingMode.Timeline -> {
|
||||
"PolicyRuleServer"
|
||||
}
|
||||
}
|
||||
OtherState.PolicyRuleUser -> when (renderingMode) {
|
||||
RenderingMode.RoomList -> {
|
||||
Timber.v("Filtering timeline item for room state change: $content")
|
||||
null
|
||||
}
|
||||
RenderingMode.Timeline -> {
|
||||
"PolicyRuleUser"
|
||||
}
|
||||
}
|
||||
OtherState.RoomAliases -> when (renderingMode) {
|
||||
RenderingMode.RoomList -> {
|
||||
Timber.v("Filtering timeline item for room state change: $content")
|
||||
null
|
||||
}
|
||||
RenderingMode.Timeline -> {
|
||||
"RoomAliases"
|
||||
}
|
||||
}
|
||||
OtherState.RoomCanonicalAlias -> when (renderingMode) {
|
||||
RenderingMode.RoomList -> {
|
||||
Timber.v("Filtering timeline item for room state change: $content")
|
||||
null
|
||||
}
|
||||
RenderingMode.Timeline -> {
|
||||
"RoomCanonicalAlias"
|
||||
}
|
||||
}
|
||||
OtherState.RoomGuestAccess -> when (renderingMode) {
|
||||
RenderingMode.RoomList -> {
|
||||
Timber.v("Filtering timeline item for room state change: $content")
|
||||
null
|
||||
}
|
||||
RenderingMode.Timeline -> {
|
||||
"RoomGuestAccess"
|
||||
}
|
||||
}
|
||||
OtherState.RoomHistoryVisibility -> when (renderingMode) {
|
||||
RenderingMode.RoomList -> {
|
||||
Timber.v("Filtering timeline item for room state change: $content")
|
||||
null
|
||||
}
|
||||
RenderingMode.Timeline -> {
|
||||
"RoomHistoryVisibility"
|
||||
}
|
||||
}
|
||||
is OtherState.RoomJoinRules -> when (renderingMode) {
|
||||
RenderingMode.RoomList -> {
|
||||
Timber.v("Filtering timeline item for room state change: $content")
|
||||
null
|
||||
}
|
||||
RenderingMode.Timeline -> {
|
||||
"RoomJoinRules"
|
||||
}
|
||||
}
|
||||
is OtherState.RoomUserPowerLevels -> when (renderingMode) {
|
||||
RenderingMode.RoomList -> {
|
||||
Timber.v("Filtering timeline item for room state change: $content")
|
||||
null
|
||||
}
|
||||
RenderingMode.Timeline -> {
|
||||
"RoomPowerLevels"
|
||||
}
|
||||
}
|
||||
OtherState.RoomServerAcl -> when (renderingMode) {
|
||||
RenderingMode.RoomList -> {
|
||||
Timber.v("Filtering timeline item for room state change: $content")
|
||||
null
|
||||
}
|
||||
RenderingMode.Timeline -> {
|
||||
"RoomServerAcl"
|
||||
}
|
||||
}
|
||||
OtherState.RoomTombstone -> when (renderingMode) {
|
||||
RenderingMode.RoomList -> {
|
||||
Timber.v("Filtering timeline item for room state change: $content")
|
||||
null
|
||||
}
|
||||
RenderingMode.Timeline -> {
|
||||
"RoomTombstone"
|
||||
}
|
||||
}
|
||||
OtherState.SpaceChild -> when (renderingMode) {
|
||||
RenderingMode.RoomList -> {
|
||||
Timber.v("Filtering timeline item for room state change: $content")
|
||||
null
|
||||
}
|
||||
RenderingMode.Timeline -> {
|
||||
"SpaceChild"
|
||||
}
|
||||
}
|
||||
OtherState.SpaceParent -> when (renderingMode) {
|
||||
RenderingMode.RoomList -> {
|
||||
Timber.v("Filtering timeline item for room state change: $content")
|
||||
null
|
||||
}
|
||||
RenderingMode.Timeline -> {
|
||||
"SpaceParent"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private fun formatRoomPinnedEvents(
|
||||
content: OtherState.RoomPinnedEvents,
|
||||
senderIsYou: Boolean,
|
||||
senderDisambiguatedDisplayName: String
|
||||
) = when (content.change) {
|
||||
OtherState.RoomPinnedEvents.Change.ADDED -> when {
|
||||
senderIsYou -> sp.getString(R.string.state_event_room_pinned_events_pinned_by_you)
|
||||
else -> sp.getString(R.string.state_event_room_pinned_events_pinned, senderDisambiguatedDisplayName)
|
||||
}
|
||||
OtherState.RoomPinnedEvents.Change.REMOVED -> when {
|
||||
senderIsYou -> sp.getString(R.string.state_event_room_pinned_events_unpinned_by_you)
|
||||
else -> sp.getString(R.string.state_event_room_pinned_events_unpinned, senderDisambiguatedDisplayName)
|
||||
}
|
||||
OtherState.RoomPinnedEvents.Change.CHANGED -> when {
|
||||
senderIsYou -> sp.getString(R.string.state_event_room_pinned_events_changed_by_you)
|
||||
else -> sp.getString(R.string.state_event_room_pinned_events_changed, senderDisambiguatedDisplayName)
|
||||
}
|
||||
}
|
||||
}
|
||||
+14
@@ -0,0 +1,14 @@
|
||||
/*
|
||||
* Copyright (c) 2025 Element Creations Ltd.
|
||||
* Copyright 2023-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.libraries.eventformatter.impl.mode
|
||||
|
||||
enum class RenderingMode {
|
||||
RoomList,
|
||||
Timeline,
|
||||
}
|
||||
@@ -0,0 +1,69 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
|
||||
<string name="state_event_avatar_changed_too">"(аватар таксама быў зменены)"</string>
|
||||
<string name="state_event_avatar_url_changed">"%1$s змяніў(-ла) аватар"</string>
|
||||
<string name="state_event_avatar_url_changed_by_you">"Вы змянілі свой аватар"</string>
|
||||
<string name="state_event_demoted_to_member">"%1$s быў паніжаны(-на) да ўдзельніка"</string>
|
||||
<string name="state_event_demoted_to_moderator">"%1$s быў паніжаны(-на) да мадэратара"</string>
|
||||
<string name="state_event_display_name_changed_from">"%1$s змяніў(-ла) сваё бачнае імя з %2$s на %3$s"</string>
|
||||
<string name="state_event_display_name_changed_from_by_you">"Вы змянілі сваё бачнае імя з %1$s на %2$s"</string>
|
||||
<string name="state_event_display_name_removed">"%1$s выдаліў(-ла) сваё бачнае імя (яно было %2$s)"</string>
|
||||
<string name="state_event_display_name_removed_by_you">"Вы выдалілі сваё бачнае імя (яно было %1$s)"</string>
|
||||
<string name="state_event_display_name_set">"%1$s усталявалі сваё бачнае імя на %2$s"</string>
|
||||
<string name="state_event_display_name_set_by_you">"Вы ўстанавілі бачнае імя на %1$s"</string>
|
||||
<string name="state_event_promoted_to_administrator">"%1$s быў(-ла) павышаны(-на) да адміністратара"</string>
|
||||
<string name="state_event_promoted_to_moderator">"%1$s быў(-ла) павышаны(-на) да мадэратара"</string>
|
||||
<string name="state_event_room_avatar_changed">"%1$s змяніў(-ла) аватар пакоя"</string>
|
||||
<string name="state_event_room_avatar_changed_by_you">"Вы змянілі аватар пакоя"</string>
|
||||
<string name="state_event_room_avatar_removed">"%1$s выдаліў(-ла) аватар пакоя"</string>
|
||||
<string name="state_event_room_avatar_removed_by_you">"Вы выдалілі аватар пакоя"</string>
|
||||
<string name="state_event_room_ban">"%1$s заблакіраваў(-ла) %2$s"</string>
|
||||
<string name="state_event_room_ban_by_you">"Вы заблакіравалі %1$s"</string>
|
||||
<string name="state_event_room_created">"%1$s стварыў(-ла) пакой"</string>
|
||||
<string name="state_event_room_created_by_you">"Вы стварылі пакой"</string>
|
||||
<string name="state_event_room_invite">"%1$s запрасіў(-ла) %2$s"</string>
|
||||
<string name="state_event_room_invite_accepted">"%1$s прыняў(-ла) запрашэнне"</string>
|
||||
<string name="state_event_room_invite_accepted_by_you">"Вы прынялі запрашэнне"</string>
|
||||
<string name="state_event_room_invite_by_you">"Вы запрасілі %1$s"</string>
|
||||
<string name="state_event_room_invite_you">"%1$s запрасіў(-ла) вас"</string>
|
||||
<string name="state_event_room_join">"%1$s далучыўся(-лась) да пакоя"</string>
|
||||
<string name="state_event_room_join_by_you">"Вы далучыліся да пакоя"</string>
|
||||
<string name="state_event_room_knock">"%1$sпросіць далучыцца"</string>
|
||||
<string name="state_event_room_knock_accepted">"%1$s дазволіў(-ла) %2$s далучыцца"</string>
|
||||
<string name="state_event_room_knock_accepted_by_you">"Вы дазволілі %1$s далучыцца"</string>
|
||||
<string name="state_event_room_knock_by_you">"Вы прасілі далучыцца"</string>
|
||||
<string name="state_event_room_knock_denied">"%1$s адхіліў(-ла) %2$s запыт на далучэнне"</string>
|
||||
<string name="state_event_room_knock_denied_by_you">"Вы адхілілі %1$s запыт на далучэнне"</string>
|
||||
<string name="state_event_room_knock_denied_you">"%1$s адхіліў(-ла) ваш запыт на далучэнне"</string>
|
||||
<string name="state_event_room_knock_retracted">"%1$s больш не зацікаўлены(-на) у далучэнні"</string>
|
||||
<string name="state_event_room_knock_retracted_by_you">"Вы адмянілі запыт на далучэнне"</string>
|
||||
<string name="state_event_room_leave">"%1$s выйшаў(-ла) з пакоя"</string>
|
||||
<string name="state_event_room_leave_by_you">"Вы выйшлі з пакоя"</string>
|
||||
<string name="state_event_room_name_changed">"%1$s змяніў(-ла) назву пакоя на: %2$s"</string>
|
||||
<string name="state_event_room_name_changed_by_you">"Вы змянілі назву пакоя на: %1$s"</string>
|
||||
<string name="state_event_room_name_removed">"%1$s выдаліў(-ла) назву пакоя"</string>
|
||||
<string name="state_event_room_name_removed_by_you">"Вы выдалілі назву пакоя"</string>
|
||||
<string name="state_event_room_none">"%1$s не зрабіў(-ла) ніякіх змен"</string>
|
||||
<string name="state_event_room_none_by_you">"Вы не зрабілі ніякіх змен"</string>
|
||||
<string name="state_event_room_pinned_events_changed">"%1$s змяніў(-ла) замацаваныя паведамленні"</string>
|
||||
<string name="state_event_room_pinned_events_changed_by_you">"Вы змянілі замацаваныя паведамленні"</string>
|
||||
<string name="state_event_room_pinned_events_pinned">"%1$s замацаваў(-ла) паведамленне"</string>
|
||||
<string name="state_event_room_pinned_events_pinned_by_you">"Вы замацавалі паведамленне"</string>
|
||||
<string name="state_event_room_pinned_events_unpinned">"%1$s адмацаваў(-ла) паведамленне"</string>
|
||||
<string name="state_event_room_pinned_events_unpinned_by_you">"Вы адмацавалі паведамленне"</string>
|
||||
<string name="state_event_room_reject">"%1$s адхіліў(-ла) запрашэнне"</string>
|
||||
<string name="state_event_room_reject_by_you">"Вы адхілілі запрашэнне"</string>
|
||||
<string name="state_event_room_remove">"%1$s выдаліў(-ла) %2$s"</string>
|
||||
<string name="state_event_room_remove_by_you">"Вы выдалілі %1$s"</string>
|
||||
<string name="state_event_room_third_party_invite">"%1$s адправіў(-ла) запрашэнне %2$s далучыцца да пакоя"</string>
|
||||
<string name="state_event_room_third_party_invite_by_you">"Вы адправілі запрашэнне %1$s далучыцца да пакоя"</string>
|
||||
<string name="state_event_room_third_party_revoked_invite">"%1$s адклікаў(-ла) запрашэнне для %2$s далучыцца да пакоя"</string>
|
||||
<string name="state_event_room_third_party_revoked_invite_by_you">"Вы адклікалі запрашэнне для %1$s далучыцца да пакоя"</string>
|
||||
<string name="state_event_room_topic_changed">"%1$s змяніў тэму на: %2$s"</string>
|
||||
<string name="state_event_room_topic_changed_by_you">"Вы змянілі тэму на: %1$s"</string>
|
||||
<string name="state_event_room_topic_removed">"%1$s выдаліў(-ла) тэму пакоя"</string>
|
||||
<string name="state_event_room_topic_removed_by_you">"Вы выдалілі тэму пакоя"</string>
|
||||
<string name="state_event_room_unban">"%1$s разблакіраваў(-ла) %2$s"</string>
|
||||
<string name="state_event_room_unban_by_you">"Вы разблакіравалі %1$s"</string>
|
||||
<string name="state_event_room_unknown_membership_change">"%1$s унеслі невядомую змену ў сяброўства"</string>
|
||||
</resources>
|
||||
@@ -0,0 +1,61 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
|
||||
<string name="state_event_avatar_changed_too">"(профилната снимка също е променена)"</string>
|
||||
<string name="state_event_avatar_url_changed">"%1$s промени своята профилна снимка"</string>
|
||||
<string name="state_event_avatar_url_changed_by_you">"Вие променихте своята профилна снимка"</string>
|
||||
<string name="state_event_display_name_changed_from">"%1$s промени своето име от %2$s на %3$s"</string>
|
||||
<string name="state_event_display_name_changed_from_by_you">"Вие променихте своето име от %1$s на %2$s"</string>
|
||||
<string name="state_event_display_name_removed">"%1$s премахна своето име (то беше %2$s)"</string>
|
||||
<string name="state_event_display_name_removed_by_you">"Вие премахнахте своето име (it was %1$s)"</string>
|
||||
<string name="state_event_display_name_set">"%1$s си зададе името %2$s"</string>
|
||||
<string name="state_event_display_name_set_by_you">"Вие си зададохте името %1$s"</string>
|
||||
<string name="state_event_room_avatar_changed">"%1$s промени снимката на стаята"</string>
|
||||
<string name="state_event_room_avatar_changed_by_you">"Вие променихте снимката на стаята"</string>
|
||||
<string name="state_event_room_avatar_removed">"%1$s премахна снимката на стаята"</string>
|
||||
<string name="state_event_room_avatar_removed_by_you">"Вие премахнахте снимката на стаята"</string>
|
||||
<string name="state_event_room_created">"%1$s създаде стаята"</string>
|
||||
<string name="state_event_room_created_by_you">"Вие създадохте стаята"</string>
|
||||
<string name="state_event_room_invite">"%1$s покани %2$s"</string>
|
||||
<string name="state_event_room_invite_accepted">"%1$s прие поканата"</string>
|
||||
<string name="state_event_room_invite_accepted_by_you">"Вие приехте поканата"</string>
|
||||
<string name="state_event_room_invite_by_you">"Вие поканихте %1$s"</string>
|
||||
<string name="state_event_room_invite_you">"%1$s ви покани"</string>
|
||||
<string name="state_event_room_join">"%1$s се присъедини към стаята"</string>
|
||||
<string name="state_event_room_join_by_you">"Вие се присъединихте към стаята"</string>
|
||||
<string name="state_event_room_knock">"%1$s иска да се присъедини"</string>
|
||||
<string name="state_event_room_knock_accepted">"%1$s получи достъп до %2$s"</string>
|
||||
<string name="state_event_room_knock_accepted_by_you">"Вие позволихте на %1$s да се присъедини"</string>
|
||||
<string name="state_event_room_knock_by_you">"Вие поискахте да се присъедините"</string>
|
||||
<string name="state_event_room_knock_denied">"%1$s отхвърли заявката на %2$s за присъединяване"</string>
|
||||
<string name="state_event_room_knock_denied_by_you">"Вие отхвърлихте заявката на %1$s за присъединяване"</string>
|
||||
<string name="state_event_room_knock_denied_you">"%1$s отхвърли вашата заявка за присъединяване"</string>
|
||||
<string name="state_event_room_knock_retracted">"%1$s вече не се интересува от присъединяване"</string>
|
||||
<string name="state_event_room_knock_retracted_by_you">"Вие отменихте заявката си за присъединяване"</string>
|
||||
<string name="state_event_room_leave">"%1$s напусна стаята"</string>
|
||||
<string name="state_event_room_leave_by_you">"Вие напуснахте стаята"</string>
|
||||
<string name="state_event_room_name_changed">"%1$s промени името на стаята на: %2$s"</string>
|
||||
<string name="state_event_room_name_changed_by_you">"Вие променихте името на стаята на: %1$s"</string>
|
||||
<string name="state_event_room_name_removed">"%1$s премахна името на стаята"</string>
|
||||
<string name="state_event_room_name_removed_by_you">"Вие премахнахте името на стаята"</string>
|
||||
<string name="state_event_room_none">"%1$s не направи промени"</string>
|
||||
<string name="state_event_room_none_by_you">"Не направихте промени"</string>
|
||||
<string name="state_event_room_pinned_events_changed">"%1$s промени закачените съобщения"</string>
|
||||
<string name="state_event_room_pinned_events_changed_by_you">"Вие променихте закачените съобщения"</string>
|
||||
<string name="state_event_room_pinned_events_pinned">"%1$s закачи съобщение"</string>
|
||||
<string name="state_event_room_pinned_events_pinned_by_you">"Вие закачихте съобщение"</string>
|
||||
<string name="state_event_room_pinned_events_unpinned">"%1$s откачи съобщение"</string>
|
||||
<string name="state_event_room_pinned_events_unpinned_by_you">"Вие откачихте съобщение"</string>
|
||||
<string name="state_event_room_reject">"%1$s отхвърли поканата"</string>
|
||||
<string name="state_event_room_reject_by_you">"Вие отхвърлихте поканата"</string>
|
||||
<string name="state_event_room_remove">"%1$s премахна %2$s"</string>
|
||||
<string name="state_event_room_remove_by_you">"Вие премахнахте %1$s"</string>
|
||||
<string name="state_event_room_third_party_invite">"%1$s изпрати покана на %2$s за присъединяване към стаята"</string>
|
||||
<string name="state_event_room_third_party_invite_by_you">"Вие изпратихте покана на %1$s за присъединяване към стаята"</string>
|
||||
<string name="state_event_room_third_party_revoked_invite">"%1$s отмени поканата на %2$s за присъединяване към стаята"</string>
|
||||
<string name="state_event_room_third_party_revoked_invite_by_you">"Вие отменихте поканата на %1$s за присъединяване към стаята"</string>
|
||||
<string name="state_event_room_topic_changed">"%1$s промени темата на: %2$s"</string>
|
||||
<string name="state_event_room_topic_changed_by_you">"Вие променихте темата на: %1$s"</string>
|
||||
<string name="state_event_room_topic_removed">"%1$s премахна темата на стаята"</string>
|
||||
<string name="state_event_room_topic_removed_by_you">"Вие премахнахте темата на стаята"</string>
|
||||
<string name="state_event_room_unknown_membership_change">"%1$s направи неизвестна промяна в членството си"</string>
|
||||
</resources>
|
||||
@@ -0,0 +1,73 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
|
||||
<string name="state_event_avatar_changed_too">"(avatar byl také změněn)"</string>
|
||||
<string name="state_event_avatar_url_changed">"%1$s změnil(a) svůj profilový obrázek"</string>
|
||||
<string name="state_event_avatar_url_changed_by_you">"Změnili jste svůj profilový obrázek"</string>
|
||||
<string name="state_event_demoted_to_member">"%1$s byl(a) degradován(a) na člena"</string>
|
||||
<string name="state_event_demoted_to_moderator">"%1$s byl(a) degradován(a) na moderátora"</string>
|
||||
<string name="state_event_display_name_changed_from">"%1$s změnil(a) své zobrazované jméno z %2$s na %3$s"</string>
|
||||
<string name="state_event_display_name_changed_from_by_you">"Změnili jste své zobrazované jméno z %1$s na %2$s"</string>
|
||||
<string name="state_event_display_name_removed">"%1$s odstranil(a) své zobrazované jméno (%2$s)"</string>
|
||||
<string name="state_event_display_name_removed_by_you">"Odstranili jste své zobrazované jméno (%1$s)"</string>
|
||||
<string name="state_event_display_name_set">"%1$s nastavil(a) své zobrazované jméno na %2$s"</string>
|
||||
<string name="state_event_display_name_set_by_you">"Změnili jste své zobrazované jméno na %1$s"</string>
|
||||
<string name="state_event_promoted_to_administrator">"%1$s byl(a) povýšen(a) na administrátora"</string>
|
||||
<string name="state_event_promoted_to_moderator">"%1$s byl(a) povýšen(a) na moderátora"</string>
|
||||
<string name="state_event_room_avatar_changed">"%1$s změnil(a) obrázek místnosti"</string>
|
||||
<string name="state_event_room_avatar_changed_by_you">"Změnili jste obrázek místnosti"</string>
|
||||
<string name="state_event_room_avatar_removed">"%1$s odstranili obrázek místnosti"</string>
|
||||
<string name="state_event_room_avatar_removed_by_you">"Odstranili jste obrázek místnosti"</string>
|
||||
<string name="state_event_room_ban">"%1$s vykázal(a) %2$s"</string>
|
||||
<string name="state_event_room_ban_by_you">"Vykázali jste %1$s"</string>
|
||||
<string name="state_event_room_ban_by_you_with_reason">"Vykázali jste %1$s: %2$s"</string>
|
||||
<string name="state_event_room_ban_with_reason">"%1$s vykázal(a) %2$s: %3$s"</string>
|
||||
<string name="state_event_room_created">"%1$s založil(a) místnost"</string>
|
||||
<string name="state_event_room_created_by_you">"Založili jste místnost"</string>
|
||||
<string name="state_event_room_invite">"%1$s pozval(a) %2$s"</string>
|
||||
<string name="state_event_room_invite_accepted">"%1$s přijal(a) pozvání"</string>
|
||||
<string name="state_event_room_invite_accepted_by_you">"Přijali jste pozvání"</string>
|
||||
<string name="state_event_room_invite_by_you">"Pozvali jste %1$s"</string>
|
||||
<string name="state_event_room_invite_you">"Pozvali jste %1$s"</string>
|
||||
<string name="state_event_room_join">"%1$s vstoupil(a) do místnosti"</string>
|
||||
<string name="state_event_room_join_by_you">"Vstoupili jste do místnosti"</string>
|
||||
<string name="state_event_room_knock">"%1$s žádá o vstup"</string>
|
||||
<string name="state_event_room_knock_accepted">"%1$s povolil(a) vstoupit %2$s"</string>
|
||||
<string name="state_event_room_knock_accepted_by_you">"Povolili jste %1$s vstoupit"</string>
|
||||
<string name="state_event_room_knock_by_you">"Požádali jste o vstup"</string>
|
||||
<string name="state_event_room_knock_denied">"%1$s zamítl(a) žádost %2$s o vstup"</string>
|
||||
<string name="state_event_room_knock_denied_by_you">"Zamítli jste žádost %1$s o vstup"</string>
|
||||
<string name="state_event_room_knock_denied_you">"%1$s zamítl(a) vaši žádost o vstup"</string>
|
||||
<string name="state_event_room_knock_retracted">"%1$s již nemá zájem vstoupit"</string>
|
||||
<string name="state_event_room_knock_retracted_by_you">"Zrušili jste svou žádost vstoupit"</string>
|
||||
<string name="state_event_room_leave">"%1$s opustil(a) místnost"</string>
|
||||
<string name="state_event_room_leave_by_you">"Opustili jste místnost"</string>
|
||||
<string name="state_event_room_name_changed">"%1$s změnil(a) název místnosti na: %2$s"</string>
|
||||
<string name="state_event_room_name_changed_by_you">"Změnili jste název místnosti na: %1$s"</string>
|
||||
<string name="state_event_room_name_removed">"%1$s odstranil(a) název místnosti"</string>
|
||||
<string name="state_event_room_name_removed_by_you">"Odstranili jste název místnosti"</string>
|
||||
<string name="state_event_room_none">"%1$s neprovedl(a) žádné změny"</string>
|
||||
<string name="state_event_room_none_by_you">"Neprovedli jste žádné změny"</string>
|
||||
<string name="state_event_room_pinned_events_changed">"%1$s změnil(a) připnuté zprávy"</string>
|
||||
<string name="state_event_room_pinned_events_changed_by_you">"Změnili jste připnuté zprávy"</string>
|
||||
<string name="state_event_room_pinned_events_pinned">"%1$s připnul(a) zprávu"</string>
|
||||
<string name="state_event_room_pinned_events_pinned_by_you">"Připnuli jste zprávu"</string>
|
||||
<string name="state_event_room_pinned_events_unpinned">"%1$s odepnul(a) zprávu"</string>
|
||||
<string name="state_event_room_pinned_events_unpinned_by_you">"Odepnuli jste zprávu"</string>
|
||||
<string name="state_event_room_reject">"%1$s pozvánku odmítl(a)"</string>
|
||||
<string name="state_event_room_reject_by_you">"Odmítli jste pozvání"</string>
|
||||
<string name="state_event_room_remove">"%1$s odebral(a) %2$s"</string>
|
||||
<string name="state_event_room_remove_by_you">"Odebrali jste %1$s"</string>
|
||||
<string name="state_event_room_remove_by_you_with_reason">"Odstranili jste %1$s: %2$s"</string>
|
||||
<string name="state_event_room_remove_with_reason">"%1$s odstranil(a) %2$s: %3$s"</string>
|
||||
<string name="state_event_room_third_party_invite">"%1$s do této místnosti pozval(a) %2$s"</string>
|
||||
<string name="state_event_room_third_party_invite_by_you">"Poslali jste %1$s pozvání do místnosti"</string>
|
||||
<string name="state_event_room_third_party_revoked_invite">"%1$s zrušil(a) pozvánku do místnosti pro %2$s"</string>
|
||||
<string name="state_event_room_third_party_revoked_invite_by_you">"Zrušili jste pozvánku do místnosti pro %1$s"</string>
|
||||
<string name="state_event_room_topic_changed">"%1$s změnil(a) téma na: %2$s"</string>
|
||||
<string name="state_event_room_topic_changed_by_you">"Změnili jste téma na: %1$s"</string>
|
||||
<string name="state_event_room_topic_removed">"%1$s odstranil(a) téma místnosti"</string>
|
||||
<string name="state_event_room_topic_removed_by_you">"Odstranili jste téma místnosti"</string>
|
||||
<string name="state_event_room_unban">"%1$s zrušil(a) vykázání %2$s"</string>
|
||||
<string name="state_event_room_unban_by_you">"Zrušili jste vykázání pro %1$s"</string>
|
||||
<string name="state_event_room_unknown_membership_change">"%1$s provedl(a) neznámou změnu svého členství"</string>
|
||||
</resources>
|
||||
@@ -0,0 +1,73 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
|
||||
<string name="state_event_avatar_changed_too">"(newidiwyd yr afatar hefyd)"</string>
|
||||
<string name="state_event_avatar_url_changed">"Mae %1$s wedi newid eu afatar"</string>
|
||||
<string name="state_event_avatar_url_changed_by_you">"Rydych chi wedi newid eich afatar"</string>
|
||||
<string name="state_event_demoted_to_member">"Cafodd %1$s ei israddio i aelod"</string>
|
||||
<string name="state_event_demoted_to_moderator">"Cafodd %1$s ei israddio i gymedrolwr"</string>
|
||||
<string name="state_event_display_name_changed_from">"Newidiodd %1$s ei enw dangos o %2$s i %3$s"</string>
|
||||
<string name="state_event_display_name_changed_from_by_you">"Rydych chi wedi newid eich enw dangos o %1$s i %2$s"</string>
|
||||
<string name="state_event_display_name_removed">"Mae %1$s wedi tynnu ei enw dangos (%2$s ydoedd)"</string>
|
||||
<string name="state_event_display_name_removed_by_you">"Rydych wedi dileu eich enw dangos (%1$s ydoedd)"</string>
|
||||
<string name="state_event_display_name_set">"Mae %1$s wedi gosod ei enw dangos i %2$s"</string>
|
||||
<string name="state_event_display_name_set_by_you">"Rydych chi wedi gosod eich enw dangos i %1$s"</string>
|
||||
<string name="state_event_promoted_to_administrator">"Cafodd %1$s ei godi i fod yn weinyddol"</string>
|
||||
<string name="state_event_promoted_to_moderator">"Cafodd %1$s ei godi i fod yn gymedrolwr"</string>
|
||||
<string name="state_event_room_avatar_changed">"Mae %1$s wedi newid afatar yr ystafell"</string>
|
||||
<string name="state_event_room_avatar_changed_by_you">"Rydych chi wedi newid afatar yr ystafell"</string>
|
||||
<string name="state_event_room_avatar_removed">"Mae %1$s wedi tynnu afatar yr ystafell"</string>
|
||||
<string name="state_event_room_avatar_removed_by_you">"Rydych chi wedi tynnu afatar yr ystafell"</string>
|
||||
<string name="state_event_room_ban">"Mae %1$s wedi gwahardd %2$s"</string>
|
||||
<string name="state_event_room_ban_by_you">"Rydych wedi gwahardd %1$s"</string>
|
||||
<string name="state_event_room_ban_by_you_with_reason">"Rydych wedi gwahardd %1$s: %2$s"</string>
|
||||
<string name="state_event_room_ban_with_reason">"Mae %1$s wedi gwahardd %2$s: %3$s"</string>
|
||||
<string name="state_event_room_created">"%1$s greodd yr ystafell"</string>
|
||||
<string name="state_event_room_created_by_you">"Chi greodd yr ystafell"</string>
|
||||
<string name="state_event_room_invite">"Mae %1$s wedi gwahodd %2$s"</string>
|
||||
<string name="state_event_room_invite_accepted">"Derbyniodd %1$s y gwahoddiad"</string>
|
||||
<string name="state_event_room_invite_accepted_by_you">"Rydych chi wedi derbyn y gwahoddiad"</string>
|
||||
<string name="state_event_room_invite_by_you">"Rydych wedi gwahodd %1$s"</string>
|
||||
<string name="state_event_room_invite_you">"Mae %1$s wedi eich gwahodd"</string>
|
||||
<string name="state_event_room_join">"Ymunodd %1$s â\'r ystafell"</string>
|
||||
<string name="state_event_room_join_by_you">"Rydych chi wedi ymuno â\'r ystafell"</string>
|
||||
<string name="state_event_room_knock">"Mae %1$s yn gofyn i gael ymuno"</string>
|
||||
<string name="state_event_room_knock_accepted">"Mae %1$s wedi rhoi mynediad i %2$s"</string>
|
||||
<string name="state_event_room_knock_accepted_by_you">"Rydych chi wedi caniatáu i %1$s ymuno"</string>
|
||||
<string name="state_event_room_knock_by_you">"Rydych chi wedi gwneud cais i ymuno"</string>
|
||||
<string name="state_event_room_knock_denied">"Mae %1$s wedi gwrthod cais %2$s i ymuno"</string>
|
||||
<string name="state_event_room_knock_denied_by_you">"Rydych wedi gwrthod cais %1$s i ymuno"</string>
|
||||
<string name="state_event_room_knock_denied_you">"Mae %1$s wedi gwrthod eich cais i ymuno"</string>
|
||||
<string name="state_event_room_knock_retracted">"Does gan %1$s ddim diddordeb mewn ymuno bellach"</string>
|
||||
<string name="state_event_room_knock_retracted_by_you">"Rydych wedi diddymu\'ch cais i ymuno"</string>
|
||||
<string name="state_event_room_leave">"Mae %1$s wedi gadael yr ystafell"</string>
|
||||
<string name="state_event_room_leave_by_you">"Rydych wedi gadael yr ystafell"</string>
|
||||
<string name="state_event_room_name_changed">"Mae %1$s wedi newid enw\'r ystafell i: %2$s"</string>
|
||||
<string name="state_event_room_name_changed_by_you">"Rydych chi wedi newid enw\'r ystafell i: %1$s"</string>
|
||||
<string name="state_event_room_name_removed">"Mae %1$s wedi tynnu enw\'r ystafell"</string>
|
||||
<string name="state_event_room_name_removed_by_you">"Rydych wedi dileu enw\'r ystafell"</string>
|
||||
<string name="state_event_room_none">"Gwnaeth %1$s dim newidiadau"</string>
|
||||
<string name="state_event_room_none_by_you">"Rydych heb wneud unrhyw newidiadau"</string>
|
||||
<string name="state_event_room_pinned_events_changed">"Mae %1$s wedi newid y negeseuon sydd wedi\'u pinio"</string>
|
||||
<string name="state_event_room_pinned_events_changed_by_you">"Rydych wedi newid y negeseuon sydd wedi\'u pinio"</string>
|
||||
<string name="state_event_room_pinned_events_pinned">"Mae %1$s wedi pinio neges"</string>
|
||||
<string name="state_event_room_pinned_events_pinned_by_you">"Rydych chi wedi pinio neges"</string>
|
||||
<string name="state_event_room_pinned_events_unpinned">"Mae %1$s wedi\'i dad-binio neges"</string>
|
||||
<string name="state_event_room_pinned_events_unpinned_by_you">"Rydych chi wedi dad-binio neges"</string>
|
||||
<string name="state_event_room_reject">"Mae %1$s wedi gwrthod y gwahoddiad"</string>
|
||||
<string name="state_event_room_reject_by_you">"Rydych chi wedi gwrthod y gwahoddiad"</string>
|
||||
<string name="state_event_room_remove">"Mae %1$s wedi tynnu %2$s"</string>
|
||||
<string name="state_event_room_remove_by_you">"Rydych wedi dileu %1$s"</string>
|
||||
<string name="state_event_room_remove_by_you_with_reason">"Rydych wedi dileu %1$s: %2$s"</string>
|
||||
<string name="state_event_room_remove_with_reason">"Mae %1$s wedi tynnu %2$s: %3$s"</string>
|
||||
<string name="state_event_room_third_party_invite">"Anfonodd %1$s wahoddiad at %2$s i ymuno â\'r ystafell"</string>
|
||||
<string name="state_event_room_third_party_invite_by_you">"Rydych wedi anfon gwahoddiad i %1$s i ymuno â\'r ystafell"</string>
|
||||
<string name="state_event_room_third_party_revoked_invite">"Dirymodd %1$s y gwahoddiad i %2$s ymuno â\'r ystafell"</string>
|
||||
<string name="state_event_room_third_party_revoked_invite_by_you">"Rydych wedi dirymu\'r gwahoddiad i %1$s ymuno â\'r ystafell"</string>
|
||||
<string name="state_event_room_topic_changed">"Newidiodd %1$s y pwnc i: %2$s"</string>
|
||||
<string name="state_event_room_topic_changed_by_you">"Rydych wedi newid y pwnc i: %1$s"</string>
|
||||
<string name="state_event_room_topic_removed">"Mae %1$s wedi dileu pwnc yr ystafell"</string>
|
||||
<string name="state_event_room_topic_removed_by_you">"Rydych wedi dileu pwnc yr ystafell"</string>
|
||||
<string name="state_event_room_unban">"Mae %1$s wedi dad-wahardd %2$s"</string>
|
||||
<string name="state_event_room_unban_by_you">"Rydych wedi dad-wahardd %1$s"</string>
|
||||
<string name="state_event_room_unknown_membership_change">"Mae %1$s wedi gwneud newid anhysbys i\'w aelodaeth"</string>
|
||||
</resources>
|
||||
@@ -0,0 +1,73 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
|
||||
<string name="state_event_avatar_changed_too">"(avataren blev også ændret)"</string>
|
||||
<string name="state_event_avatar_url_changed">"%1$s ændrede sin avatar"</string>
|
||||
<string name="state_event_avatar_url_changed_by_you">"Du har ændret din avatar"</string>
|
||||
<string name="state_event_demoted_to_member">"%1$s blev nedgraderet til medlem"</string>
|
||||
<string name="state_event_demoted_to_moderator">"%1$s blev nedgraderet til moderator"</string>
|
||||
<string name="state_event_display_name_changed_from">"%1$s ændrede sit viste navn fra %2$s til %3$s"</string>
|
||||
<string name="state_event_display_name_changed_from_by_you">"Du har ændret dit viste navn fra %1$s til %2$s"</string>
|
||||
<string name="state_event_display_name_removed">"%1$s fjernede sit viste navn (det var %2$s )"</string>
|
||||
<string name="state_event_display_name_removed_by_you">"Du fjernede dit viste navn (det var%1$s)"</string>
|
||||
<string name="state_event_display_name_set">"%1$s har sat deres visningsnavn til %2$s"</string>
|
||||
<string name="state_event_display_name_set_by_you">"Du har indstillet dit viste navn til %1$s"</string>
|
||||
<string name="state_event_promoted_to_administrator">"%1$s blev forfremmet til admin"</string>
|
||||
<string name="state_event_promoted_to_moderator">"%1$s blev forfremmet til moderator"</string>
|
||||
<string name="state_event_room_avatar_changed">"%1$s ændrede rummets avatar"</string>
|
||||
<string name="state_event_room_avatar_changed_by_you">"Du ændrede rummets avatar"</string>
|
||||
<string name="state_event_room_avatar_removed">"%1$s fjernede rummets avatar"</string>
|
||||
<string name="state_event_room_avatar_removed_by_you">"Du fjernede rummets avatar"</string>
|
||||
<string name="state_event_room_ban">"%1$s bortviste %2$s"</string>
|
||||
<string name="state_event_room_ban_by_you">"Du bortviste %1$s"</string>
|
||||
<string name="state_event_room_ban_by_you_with_reason">"Du spærrede %1$s: %2$s"</string>
|
||||
<string name="state_event_room_ban_with_reason">"%1$s spærrede %2$s: %3$s"</string>
|
||||
<string name="state_event_room_created">"%1$s skabte rummet"</string>
|
||||
<string name="state_event_room_created_by_you">"Du skabte rummet"</string>
|
||||
<string name="state_event_room_invite">"%1$sinviterede %2$s"</string>
|
||||
<string name="state_event_room_invite_accepted">"%1$s accepterede invitationen"</string>
|
||||
<string name="state_event_room_invite_accepted_by_you">"Du har accepteret invitationen"</string>
|
||||
<string name="state_event_room_invite_by_you">"Du inviterede %1$s"</string>
|
||||
<string name="state_event_room_invite_you">"%1$s inviterede dig"</string>
|
||||
<string name="state_event_room_join">"%1$s sluttede sig til rummet"</string>
|
||||
<string name="state_event_room_join_by_you">"Du sluttede dig til rummet"</string>
|
||||
<string name="state_event_room_knock">"%1$s anmoder om at deltage"</string>
|
||||
<string name="state_event_room_knock_accepted">"%1$s har givet adgang til %2$s"</string>
|
||||
<string name="state_event_room_knock_accepted_by_you">"Du tillod %1$s at være med"</string>
|
||||
<string name="state_event_room_knock_by_you">"Du har anmodet om at deltage"</string>
|
||||
<string name="state_event_room_knock_denied">"%1$s har afvist %2$ss anmodning om at deltage"</string>
|
||||
<string name="state_event_room_knock_denied_by_you">"Du har afvist %1$ss anmodning om at deltage"</string>
|
||||
<string name="state_event_room_knock_denied_you">"%1$s afviste din anmodning om at deltage"</string>
|
||||
<string name="state_event_room_knock_retracted">"%1$s er ikke længere interesseret i at deltage"</string>
|
||||
<string name="state_event_room_knock_retracted_by_you">"Du har annulleret din anmodning om at deltage"</string>
|
||||
<string name="state_event_room_leave">"%1$s forlod rummet"</string>
|
||||
<string name="state_event_room_leave_by_you">"Du forlod rummet"</string>
|
||||
<string name="state_event_room_name_changed">"%1$s ændrede rummets navn til: %2$s"</string>
|
||||
<string name="state_event_room_name_changed_by_you">"Du ændrede rummets navn til: %1$s"</string>
|
||||
<string name="state_event_room_name_removed">"%1$s fjernede rummets navn"</string>
|
||||
<string name="state_event_room_name_removed_by_you">"Du fjernede rummets navn"</string>
|
||||
<string name="state_event_room_none">"%1$s foretog ingen ændringer"</string>
|
||||
<string name="state_event_room_none_by_you">"Du har ikke foretaget nogen ændringer"</string>
|
||||
<string name="state_event_room_pinned_events_changed">"%1$s ændrede de fastgjorte beskeder"</string>
|
||||
<string name="state_event_room_pinned_events_changed_by_you">"Du har ændret de fastgjorte beskeder"</string>
|
||||
<string name="state_event_room_pinned_events_pinned">"%1$s fastgjorde en besked"</string>
|
||||
<string name="state_event_room_pinned_events_pinned_by_you">"Du har fastgjort en besked"</string>
|
||||
<string name="state_event_room_pinned_events_unpinned">"%1$s frigjorde en besked"</string>
|
||||
<string name="state_event_room_pinned_events_unpinned_by_you">"Du frigjorde en besked"</string>
|
||||
<string name="state_event_room_reject">"%1$s afviste invitationen"</string>
|
||||
<string name="state_event_room_reject_by_you">"Du afviste invitationen"</string>
|
||||
<string name="state_event_room_remove">"%1$s fjernede %2$s"</string>
|
||||
<string name="state_event_room_remove_by_you">"Du fjernede %1$s"</string>
|
||||
<string name="state_event_room_remove_by_you_with_reason">"Du fjernede %1$s :%2$s"</string>
|
||||
<string name="state_event_room_remove_with_reason">"%1$s fjernede %2$s: %3$s"</string>
|
||||
<string name="state_event_room_third_party_invite">"%1$s har sendt en invitation til %2$s om at deltage i rummet"</string>
|
||||
<string name="state_event_room_third_party_invite_by_you">"Du har sendt en invitation til %1$s om at deltage i rummet"</string>
|
||||
<string name="state_event_room_third_party_revoked_invite">"%1$s tilbagekaldte invitationen til %2$s om at være med i rummet"</string>
|
||||
<string name="state_event_room_third_party_revoked_invite_by_you">"Du tilbagekaldte invitationen til %1$s om at være med i rummet"</string>
|
||||
<string name="state_event_room_topic_changed">"%1$s ændrede emnet til: %2$s"</string>
|
||||
<string name="state_event_room_topic_changed_by_you">"Du har ændret emnet til: %1$s"</string>
|
||||
<string name="state_event_room_topic_removed">"%1$s fjernede rummets emne"</string>
|
||||
<string name="state_event_room_topic_removed_by_you">"Du har fjernet rummets emne"</string>
|
||||
<string name="state_event_room_unban">"%1$s ophævede bortvisningen af %2$s"</string>
|
||||
<string name="state_event_room_unban_by_you">"Du har fjernet bortvisningen af %1$s"</string>
|
||||
<string name="state_event_room_unknown_membership_change">"%1$s har foretaget en ukendt ændring af deres medlemskab"</string>
|
||||
</resources>
|
||||
@@ -0,0 +1,73 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
|
||||
<string name="state_event_avatar_changed_too">"(Avatar wurde auch geändert)"</string>
|
||||
<string name="state_event_avatar_url_changed">"%1$s hat den Avatar geändert"</string>
|
||||
<string name="state_event_avatar_url_changed_by_you">"Du hast deinen Avatar geändert"</string>
|
||||
<string name="state_event_demoted_to_member">"%1$s wurde zum Mitglied herabgestuft"</string>
|
||||
<string name="state_event_demoted_to_moderator">"%1$s wurde zum Moderator herabgestuft"</string>
|
||||
<string name="state_event_display_name_changed_from">"%1$s hat den Anzeigenamen von %2$s auf %3$s geändert"</string>
|
||||
<string name="state_event_display_name_changed_from_by_you">"Du hast deinen Anzeigenamen von %1$s auf %2$s geändert"</string>
|
||||
<string name="state_event_display_name_removed">"%1$s hat den Anzeigenamen entfernt (war %2$s)"</string>
|
||||
<string name="state_event_display_name_removed_by_you">"Du hast deinen Anzeigenamen entfernt (war %1$s)"</string>
|
||||
<string name="state_event_display_name_set">"%1$s hat den Anzeigenamen auf %2$s geändert"</string>
|
||||
<string name="state_event_display_name_set_by_you">"Du hast deinen Anzeigenamen zu %1$s geändert"</string>
|
||||
<string name="state_event_promoted_to_administrator">"%1$s ist jetzt Admin"</string>
|
||||
<string name="state_event_promoted_to_moderator">"%1$s ist jetzt Moderator*in"</string>
|
||||
<string name="state_event_room_avatar_changed">"%1$s hat den Chat -Avatar geändert"</string>
|
||||
<string name="state_event_room_avatar_changed_by_you">"Du hast den Chat-Avatar geändert"</string>
|
||||
<string name="state_event_room_avatar_removed">"%1$s hat den Chat-Avatar entfernt"</string>
|
||||
<string name="state_event_room_avatar_removed_by_you">"Du hast den Chat-Avatar entfernt"</string>
|
||||
<string name="state_event_room_ban">"%1$s hat %2$s gesperrt"</string>
|
||||
<string name="state_event_room_ban_by_you">"Du hast %1$s gesperrt"</string>
|
||||
<string name="state_event_room_ban_by_you_with_reason">"Du hast %1$s gesperrt: %2$s"</string>
|
||||
<string name="state_event_room_ban_with_reason">"%1$s sperrte %2$s: %3$s"</string>
|
||||
<string name="state_event_room_created">"%1$s hat den Chat erstellt"</string>
|
||||
<string name="state_event_room_created_by_you">"Du hast den Chat erstellt"</string>
|
||||
<string name="state_event_room_invite">"%1$s hat %2$s eingeladen"</string>
|
||||
<string name="state_event_room_invite_accepted">"%1$s hat die Einladung angenommen"</string>
|
||||
<string name="state_event_room_invite_accepted_by_you">"Du hast die Einladung angenommen"</string>
|
||||
<string name="state_event_room_invite_by_you">"Du hast %1$s eingeladen"</string>
|
||||
<string name="state_event_room_invite_you">"%1$s hat dich eingeladen"</string>
|
||||
<string name="state_event_room_join">"%1$s ist dem Chat beigetreten"</string>
|
||||
<string name="state_event_room_join_by_you">"Du bist dem Chat beigetreten"</string>
|
||||
<string name="state_event_room_knock">"%1$s fragt den Beitritt an"</string>
|
||||
<string name="state_event_room_knock_accepted">"%1$s hat %2$s den Beitritt erlaubt"</string>
|
||||
<string name="state_event_room_knock_accepted_by_you">"Du hast %1$s den Beitritt erlaubt"</string>
|
||||
<string name="state_event_room_knock_by_you">"Du hast angefragt beizutreten"</string>
|
||||
<string name="state_event_room_knock_denied">"%1$s hat die Beitrittsanfrage von %2$s abgelehnt"</string>
|
||||
<string name="state_event_room_knock_denied_by_you">"Du hast die Beitrittsanfrage von %1$s abgelehnt"</string>
|
||||
<string name="state_event_room_knock_denied_you">"%1$s hat deine Beitrittsanfrage abgelehnt"</string>
|
||||
<string name="state_event_room_knock_retracted">"%1$s ist nicht mehr an einem Beitritt interessiert"</string>
|
||||
<string name="state_event_room_knock_retracted_by_you">"Du hast deine Beitrittsanfrage abgebrochen"</string>
|
||||
<string name="state_event_room_leave">"%1$s hat den Chat verlassen"</string>
|
||||
<string name="state_event_room_leave_by_you">"Du hast den Chat verlassen"</string>
|
||||
<string name="state_event_room_name_changed">"%1$s hat den Chat-Namen geändert in: %2$s"</string>
|
||||
<string name="state_event_room_name_changed_by_you">"Du hast den Chat-Namen geändert in: %1$s"</string>
|
||||
<string name="state_event_room_name_removed">"%1$s hat den Chat-Namen entfernt"</string>
|
||||
<string name="state_event_room_name_removed_by_you">"Du hast den Chat-Namen entfernt"</string>
|
||||
<string name="state_event_room_none">"%1$s hat keine Änderungen vorgenommen"</string>
|
||||
<string name="state_event_room_none_by_you">"Du hast keine Änderungen vorgenommen"</string>
|
||||
<string name="state_event_room_pinned_events_changed">"%1$s hat die fixierten Nachrichten geändert"</string>
|
||||
<string name="state_event_room_pinned_events_changed_by_you">"Du hast die fixierten Nachrichten geändert"</string>
|
||||
<string name="state_event_room_pinned_events_pinned">"%1$s fixierte eine Nachricht"</string>
|
||||
<string name="state_event_room_pinned_events_pinned_by_you">"Du hast eine Nachricht fixiert"</string>
|
||||
<string name="state_event_room_pinned_events_unpinned">"%1$s löste eine Nachricht"</string>
|
||||
<string name="state_event_room_pinned_events_unpinned_by_you">"Du hast eine Nachricht gelöst"</string>
|
||||
<string name="state_event_room_reject">"%1$s lehnte die Einladung ab"</string>
|
||||
<string name="state_event_room_reject_by_you">"Du hast die Einladung abgelehnt"</string>
|
||||
<string name="state_event_room_remove">"%1$s hat %2$s entfernt"</string>
|
||||
<string name="state_event_room_remove_by_you">"Du hast %1$s entfernt"</string>
|
||||
<string name="state_event_room_remove_by_you_with_reason">"Du hast %1$s entfernt: %2$s"</string>
|
||||
<string name="state_event_room_remove_with_reason">"%1$s entfernt %2$s: %3$s"</string>
|
||||
<string name="state_event_room_third_party_invite">"%1$s hat %2$s eingeladen, den Chat zu beizutreten"</string>
|
||||
<string name="state_event_room_third_party_invite_by_you">"Du hast eine Einladung an %1$s gesendet, dem Chat beizutreten"</string>
|
||||
<string name="state_event_room_third_party_revoked_invite">"%1$s hat die Einladung an %2$s zum Beitritt des Chat zurückgezogen"</string>
|
||||
<string name="state_event_room_third_party_revoked_invite_by_you">"Du hast die Einladung an %1$s zum Beitritt des Chat zurückgezogen"</string>
|
||||
<string name="state_event_room_topic_changed">"%1$s hat das Thema geändert in: %2$s"</string>
|
||||
<string name="state_event_room_topic_changed_by_you">"Du hast das Thema geändert in: %1$s"</string>
|
||||
<string name="state_event_room_topic_removed">"%1$s hat das Chat-Thema entfernt"</string>
|
||||
<string name="state_event_room_topic_removed_by_you">"Du hast das Chat-Thema entfernt"</string>
|
||||
<string name="state_event_room_unban">"%1$s hat die Sperre für %2$s aufgehoben"</string>
|
||||
<string name="state_event_room_unban_by_you">"Du hast die Sperre für %1$s aufgehoben"</string>
|
||||
<string name="state_event_room_unknown_membership_change">"%1$s hat eine unbekannte Änderung vorgenommen"</string>
|
||||
</resources>
|
||||
@@ -0,0 +1,73 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
|
||||
<string name="state_event_avatar_changed_too">"(άλλαξε και το άβαταρ)"</string>
|
||||
<string name="state_event_avatar_url_changed">"Ο χρήστης %1$s άλλαξε το άβατάρ του"</string>
|
||||
<string name="state_event_avatar_url_changed_by_you">"Άλλαξες το άβατάρ σου"</string>
|
||||
<string name="state_event_demoted_to_member">"Ο χρήστης %1$s υποβιβάστηκε σε μέλος"</string>
|
||||
<string name="state_event_demoted_to_moderator">"Ο χρήστης %1$s υποβιβάστηκε σε συντονιστής"</string>
|
||||
<string name="state_event_display_name_changed_from">"Ο χρήστης %1$s άλλαξε το εμφανιζόμενο όνομά του από %2$s σε %3$s"</string>
|
||||
<string name="state_event_display_name_changed_from_by_you">"Άλλαξες το εμφανιζόμενο όνομα σου από %1$s σε %2$s"</string>
|
||||
<string name="state_event_display_name_removed">"Ο χρήστης %1$s αφαίρεσε το εμφανιζόμενο όνομά του (ήταν %2$s)"</string>
|
||||
<string name="state_event_display_name_removed_by_you">"Αφαίρεσες το εμφανιζόμενο όνομά σου (ήταν %1$s)"</string>
|
||||
<string name="state_event_display_name_set">"Ο χρήστης %1$s όρισε το εμφανιζόμενο όνομά του σε %2$s"</string>
|
||||
<string name="state_event_display_name_set_by_you">"Όρισες το εμφανιζόμενο όνομά σου σε %1$s"</string>
|
||||
<string name="state_event_promoted_to_administrator">"Ο χρήστης %1$s προήχθη σε διαχειριστής"</string>
|
||||
<string name="state_event_promoted_to_moderator">"Ο χρήστης %1$s προήχθη σε συντονιστής"</string>
|
||||
<string name="state_event_room_avatar_changed">"%1$s άλλαξε την εικόνα προφίλ της αίθουσας"</string>
|
||||
<string name="state_event_room_avatar_changed_by_you">"Αλλάξατε την εικόνα προφίλ της αίθουσας"</string>
|
||||
<string name="state_event_room_avatar_removed">"%1$s αφαίρεσε την εικόνα προφίλ της αίθουσας"</string>
|
||||
<string name="state_event_room_avatar_removed_by_you">"Αφαιρέσατε την εικόνα προφίλ της αίθουσας"</string>
|
||||
<string name="state_event_room_ban">"Ο χρήστης %1$s απέκλεισε τον χρήστη %2$s"</string>
|
||||
<string name="state_event_room_ban_by_you">"Απέκλεισες τον χρήστη %1$s"</string>
|
||||
<string name="state_event_room_ban_by_you_with_reason">"Απέκλεισες %1$s: %2$s"</string>
|
||||
<string name="state_event_room_ban_with_reason">"%1$s απέκλεισε %2$s: %3$s"</string>
|
||||
<string name="state_event_room_created">"%1$s δημιούργησε την αίθουσα"</string>
|
||||
<string name="state_event_room_created_by_you">"Δημιουργήσατε την αίθουσα"</string>
|
||||
<string name="state_event_room_invite">"Ο χρήστης %1$s προσκάλεσε τον χρήστη %2$s"</string>
|
||||
<string name="state_event_room_invite_accepted">"Ο χρήστης %1$s αποδέχτηκε την πρόσκληση"</string>
|
||||
<string name="state_event_room_invite_accepted_by_you">"Αποδέχτηκες την πρόσκληση"</string>
|
||||
<string name="state_event_room_invite_by_you">"Προσκάλεσες τον χρήστη %1$s"</string>
|
||||
<string name="state_event_room_invite_you">"Ο χρήστης %1$s σέ προσκάλεσε"</string>
|
||||
<string name="state_event_room_join">"%1$s εντάχθηκε στην αίθουσα"</string>
|
||||
<string name="state_event_room_join_by_you">"Ενταχθήκατε στην αίθουσα"</string>
|
||||
<string name="state_event_room_knock">"Ο χρήστης %1$s ζητάει να συμμετάσχει"</string>
|
||||
<string name="state_event_room_knock_accepted">"Ο χρήστης %1$s επέτρεψε τον χρήστη %2$s"</string>
|
||||
<string name="state_event_room_knock_accepted_by_you">"Επέστρεψες στον χρήστη%1$s να συμμετάσχει"</string>
|
||||
<string name="state_event_room_knock_by_you">"Ζήτησες να συμμετάσχεις"</string>
|
||||
<string name="state_event_room_knock_denied">"Ο χρήστης %1$s απέρριψε το αίτημα του χρήστη %2$s να συμμετάσχει"</string>
|
||||
<string name="state_event_room_knock_denied_by_you">"Απορρίψατε το αίτημα συμμετοχής του χρήστη %1$s"</string>
|
||||
<string name="state_event_room_knock_denied_you">"Ο χρήστης %1$s απέρριψε το αίτημά σου για συμμετοχή"</string>
|
||||
<string name="state_event_room_knock_retracted">"Ο χρήστης %1$s δεν ενδιαφέρεται πλέον να συμμετάσχει"</string>
|
||||
<string name="state_event_room_knock_retracted_by_you">"Ακύρωσες το αίτημά σου για συμμετοχή"</string>
|
||||
<string name="state_event_room_leave">"%1$s αποχώρησε από την αίθουσα"</string>
|
||||
<string name="state_event_room_leave_by_you">"Αποχωρήσατε από την αίθουσα"</string>
|
||||
<string name="state_event_room_name_changed">"%1$s άλλαξε το όνομα της αίθουσας σε: %2$s"</string>
|
||||
<string name="state_event_room_name_changed_by_you">"Αλλάξατε το όνομα της αίθουσας σε: %1$s"</string>
|
||||
<string name="state_event_room_name_removed">"%1$s αφαίρεσε το όνομα της αίθουσας"</string>
|
||||
<string name="state_event_room_name_removed_by_you">"Αφαιρέσατε το όνομα της αίθουσας"</string>
|
||||
<string name="state_event_room_none">"Ο χρήστης %1$s δεν έκανε καμία αλλαγή"</string>
|
||||
<string name="state_event_room_none_by_you">"Δεν έκανες καμία αλλαγή"</string>
|
||||
<string name="state_event_room_pinned_events_changed">"Ο χρήστης %1$s άλλαξε τα καρφιτσωμένα μηνύματα"</string>
|
||||
<string name="state_event_room_pinned_events_changed_by_you">"Άλλαξες τα καρφιτσωμένα μηνύματα"</string>
|
||||
<string name="state_event_room_pinned_events_pinned">"Ο χρήστης %1$s καρφίτσωσε ένα μήνυμα"</string>
|
||||
<string name="state_event_room_pinned_events_pinned_by_you">"Καρφίτσωσες ένα μήνυμα"</string>
|
||||
<string name="state_event_room_pinned_events_unpinned">"Ο χρήστης %1$s ξεκαρφίτσωσε ένα μήνυμα"</string>
|
||||
<string name="state_event_room_pinned_events_unpinned_by_you">"Ξεκαρφίτσωσες ένα μήνυμα"</string>
|
||||
<string name="state_event_room_reject">"Ο χρήστης %1$s απέρριψε την πρόσκληση"</string>
|
||||
<string name="state_event_room_reject_by_you">"Απέρριψες την πρόσκληση"</string>
|
||||
<string name="state_event_room_remove">"Ο χρήστης %1$s αφαίρεσε τον χρήστη %2$s"</string>
|
||||
<string name="state_event_room_remove_by_you">"Αφαίρεσες τον χρήστη %1$s"</string>
|
||||
<string name="state_event_room_remove_by_you_with_reason">"Αφαίρεσες %1$s: %2$s"</string>
|
||||
<string name="state_event_room_remove_with_reason">"%1$s αφαιρέθηκε %2$s: %3$s"</string>
|
||||
<string name="state_event_room_third_party_invite">"%1$s έστειλε πρόσκληση στον χρήστη %2$s για ένταξη στην αίθουσα"</string>
|
||||
<string name="state_event_room_third_party_invite_by_you">"Στείλατε πρόσκληση στον χρήστη %1$s για να ενταχθεί στην αίθουσα"</string>
|
||||
<string name="state_event_room_third_party_revoked_invite">"%1$s ανακάλεσε την πρόσκληση στον χρήστη %2$s για να ενταχθεί στην αίθουσα"</string>
|
||||
<string name="state_event_room_third_party_revoked_invite_by_you">"Ανακαλέσατε την πρόσκληση για ένταξη του χρήστη %1$s στην αίθουσα"</string>
|
||||
<string name="state_event_room_topic_changed">"Ο χρήστης %1$s άλλαξε το θέμα σε: %2$s"</string>
|
||||
<string name="state_event_room_topic_changed_by_you">"Άλλαξες το θέμα σε: %1$s"</string>
|
||||
<string name="state_event_room_topic_removed">"%1$s αφαίρεσε το θέμα της αίθουσας"</string>
|
||||
<string name="state_event_room_topic_removed_by_you">"Αφαιρέσατε το θέμα της αίθουσας"</string>
|
||||
<string name="state_event_room_unban">"Ο χρήστης %1$s έκανε άρση αποκλεισμού στον χρήστη %2$s"</string>
|
||||
<string name="state_event_room_unban_by_you">"Έκανες άρση αποκλεισμού στον χρήστη %1$s"</string>
|
||||
<string name="state_event_room_unknown_membership_change">"Ο χρήστης %1$s έκανε μια άγνωστη αλλαγή στην ιδιότητα μέλους του."</string>
|
||||
</resources>
|
||||
@@ -0,0 +1,73 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
|
||||
<string name="state_event_avatar_changed_too">"(el avatar también cambió)"</string>
|
||||
<string name="state_event_avatar_url_changed">"%1$s cambió su avatar"</string>
|
||||
<string name="state_event_avatar_url_changed_by_you">"Cambiaste tu avatar"</string>
|
||||
<string name="state_event_demoted_to_member">"%1$s fue degradado a miembro"</string>
|
||||
<string name="state_event_demoted_to_moderator">"%1$s fue degradado a moderador"</string>
|
||||
<string name="state_event_display_name_changed_from">"%1$s cambió su nombre de %2$s a %3$s"</string>
|
||||
<string name="state_event_display_name_changed_from_by_you">"Cambiaste tu nombre de %1$s a %2$s"</string>
|
||||
<string name="state_event_display_name_removed">"%1$s eliminó su nombre (era %2$s)"</string>
|
||||
<string name="state_event_display_name_removed_by_you">"Eliminaste tu nombre (era %1$s)"</string>
|
||||
<string name="state_event_display_name_set">"%1$s cambió su nombre a %2$s"</string>
|
||||
<string name="state_event_display_name_set_by_you">"Cambiaste tu nombre a %1$s"</string>
|
||||
<string name="state_event_promoted_to_administrator">"%1$s fue ascendido a administrador"</string>
|
||||
<string name="state_event_promoted_to_moderator">"%1$s fue ascendido a moderador"</string>
|
||||
<string name="state_event_room_avatar_changed">"%1$s cambió el avatar de la sala"</string>
|
||||
<string name="state_event_room_avatar_changed_by_you">"Cambiaste el avatar de la sala"</string>
|
||||
<string name="state_event_room_avatar_removed">"%1$s eliminó el avatar de la sala"</string>
|
||||
<string name="state_event_room_avatar_removed_by_you">"Eliminaste el avatar de la sala"</string>
|
||||
<string name="state_event_room_ban">"%1$s expulsó permanentemente a %2$s"</string>
|
||||
<string name="state_event_room_ban_by_you">"Expulsaste permanentemente a %1$s"</string>
|
||||
<string name="state_event_room_ban_by_you_with_reason">"Vetaste a %1$s: %2$s"</string>
|
||||
<string name="state_event_room_ban_with_reason">"%1$s vetó a %2$s: %3$s"</string>
|
||||
<string name="state_event_room_created">"%1$s creó la sala"</string>
|
||||
<string name="state_event_room_created_by_you">"Tú creaste la sala"</string>
|
||||
<string name="state_event_room_invite">"%1$s invitó a %2$s"</string>
|
||||
<string name="state_event_room_invite_accepted">"%1$s aceptó la invitación"</string>
|
||||
<string name="state_event_room_invite_accepted_by_you">"Aceptaste la invitación"</string>
|
||||
<string name="state_event_room_invite_by_you">"Invitaste a %1$s"</string>
|
||||
<string name="state_event_room_invite_you">"%1$s te invitó."</string>
|
||||
<string name="state_event_room_join">"%1$s se unió a la sala"</string>
|
||||
<string name="state_event_room_join_by_you">"Te uniste a la sala"</string>
|
||||
<string name="state_event_room_knock">"%1$s solicitó unirse"</string>
|
||||
<string name="state_event_room_knock_accepted">"%1$s permitió que %2$s se uniera"</string>
|
||||
<string name="state_event_room_knock_accepted_by_you">"Permitiste que %1$s se uniera"</string>
|
||||
<string name="state_event_room_knock_by_you">"Solicitaste unirte"</string>
|
||||
<string name="state_event_room_knock_denied">"%1$s rechazó la solicitud de %2$s para unirse"</string>
|
||||
<string name="state_event_room_knock_denied_by_you">"Rechazaste la solicitud de %1$s para unirte"</string>
|
||||
<string name="state_event_room_knock_denied_you">"%1$s rechazó su solicitud para unirte"</string>
|
||||
<string name="state_event_room_knock_retracted">"%1$s ya no está interesado en unirse"</string>
|
||||
<string name="state_event_room_knock_retracted_by_you">"Cancelaste tu solicitud de unirte"</string>
|
||||
<string name="state_event_room_leave">"%1$s salió de la sala"</string>
|
||||
<string name="state_event_room_leave_by_you">"Saliste de la sala"</string>
|
||||
<string name="state_event_room_name_changed">"%1$s cambió el nombre de la sala a: %2$s"</string>
|
||||
<string name="state_event_room_name_changed_by_you">"Cambiaste el nombre de la sala a: %1$s"</string>
|
||||
<string name="state_event_room_name_removed">"%1$s eliminó el nombre de la sala"</string>
|
||||
<string name="state_event_room_name_removed_by_you">"Eliminaste el nombre de la sala"</string>
|
||||
<string name="state_event_room_none">"%1$s no hizo cambios"</string>
|
||||
<string name="state_event_room_none_by_you">"No has hecho ningún cambio"</string>
|
||||
<string name="state_event_room_pinned_events_changed">"%1$s cambió los mensajes fijados"</string>
|
||||
<string name="state_event_room_pinned_events_changed_by_you">"Has cambiado los mensajes fijados"</string>
|
||||
<string name="state_event_room_pinned_events_pinned">"%1$s fijó un mensaje"</string>
|
||||
<string name="state_event_room_pinned_events_pinned_by_you">"Has fijado un mensaje"</string>
|
||||
<string name="state_event_room_pinned_events_unpinned">"%1$s desprendió un mensaje"</string>
|
||||
<string name="state_event_room_pinned_events_unpinned_by_you">"Desprendiste un mensaje"</string>
|
||||
<string name="state_event_room_reject">"%1$s rechazó la invitación"</string>
|
||||
<string name="state_event_room_reject_by_you">"Rechazaste la invitación"</string>
|
||||
<string name="state_event_room_remove">"%1$s echó a %2$s"</string>
|
||||
<string name="state_event_room_remove_by_you">"Echaste a %1$s"</string>
|
||||
<string name="state_event_room_remove_by_you_with_reason">"Echaste a %1$s: %2$s"</string>
|
||||
<string name="state_event_room_remove_with_reason">"%1$s echó a %2$s: %3$s"</string>
|
||||
<string name="state_event_room_third_party_invite">"%1$s envió una invitación a %2$s para unirse a la sala"</string>
|
||||
<string name="state_event_room_third_party_invite_by_you">"Enviaste una invitación a %1$s para unirse a la sala"</string>
|
||||
<string name="state_event_room_third_party_revoked_invite">"%1$s revocó la invitación a %2$s para unirse a la sala"</string>
|
||||
<string name="state_event_room_third_party_revoked_invite_by_you">"Revocaste la invitación de %1$s para unirse a la sala"</string>
|
||||
<string name="state_event_room_topic_changed">"%1$s cambió el tema a: %2$s"</string>
|
||||
<string name="state_event_room_topic_changed_by_you">"Cambiaste el tema a: %1$s"</string>
|
||||
<string name="state_event_room_topic_removed">"%1$s eliminó el tema de la sala"</string>
|
||||
<string name="state_event_room_topic_removed_by_you">"Eliminaste el tema de la sala"</string>
|
||||
<string name="state_event_room_unban">"%1$s readmitió a %2$s"</string>
|
||||
<string name="state_event_room_unban_by_you">"Readmitiste a %1$s"</string>
|
||||
<string name="state_event_room_unknown_membership_change">"%1$s realizó un cambio desconocido en su membresía"</string>
|
||||
</resources>
|
||||
@@ -0,0 +1,73 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
|
||||
<string name="state_event_avatar_changed_too">"(tunnuspilt muutus ka)"</string>
|
||||
<string name="state_event_avatar_url_changed">"%1$s muutis oma tunnuspilti"</string>
|
||||
<string name="state_event_avatar_url_changed_by_you">"Sina muutsid oma tunnuspilti"</string>
|
||||
<string name="state_event_demoted_to_member">"%1$s on nüüd tavakasutaja rollis"</string>
|
||||
<string name="state_event_demoted_to_moderator">"%1$s on nüüd moderaatori rollis"</string>
|
||||
<string name="state_event_display_name_changed_from">"%1$s muutis senise kuvatava nime „%2$s“ asemele uueks nimeks „%3$s“"</string>
|
||||
<string name="state_event_display_name_changed_from_by_you">"Sina muutsid senise kuvatava nime „%1$s“ asemel uueks nimeks „%2$s“"</string>
|
||||
<string name="state_event_display_name_removed">"%1$s eemaldas oma kuvatava nime (mis oli „%2$s“)"</string>
|
||||
<string name="state_event_display_name_removed_by_you">"Sina eemaldasid oma kuvatava nime (mis oli „%1$s“)"</string>
|
||||
<string name="state_event_display_name_set">"%1$s määras oma kuvatavaks nimeks „%2$s“"</string>
|
||||
<string name="state_event_display_name_set_by_you">"Sina määrasid oma kuvatavaks nimeks „%1$s“"</string>
|
||||
<string name="state_event_promoted_to_administrator">"%1$s on nüüd peakasutaja rollis"</string>
|
||||
<string name="state_event_promoted_to_moderator">"%1$s on nüüd moderaatori rollis"</string>
|
||||
<string name="state_event_room_avatar_changed">"%1$s muutis jututoa tunnuspilti"</string>
|
||||
<string name="state_event_room_avatar_changed_by_you">"Sina muutsid jututoa tunnuspilti"</string>
|
||||
<string name="state_event_room_avatar_removed">"%1$s eemaldas jututoa tunnuspildi"</string>
|
||||
<string name="state_event_room_avatar_removed_by_you">"Sina eemaldasid jututoa tunnuspildi"</string>
|
||||
<string name="state_event_room_ban">"%1$s keelas %2$s ligipääsu"</string>
|
||||
<string name="state_event_room_ban_by_you">"Sina keelasid %1$s ligipääsu"</string>
|
||||
<string name="state_event_room_ban_by_you_with_reason">"Sina seadsid ligipääsukeelu kasutajale %1$s: %2$s"</string>
|
||||
<string name="state_event_room_ban_with_reason">"%1$s seadis ligipääsukeelu kasutajale %2$s: %3$s"</string>
|
||||
<string name="state_event_room_created">"%1$s lõi jututoa"</string>
|
||||
<string name="state_event_room_created_by_you">"Sina lõid jututoa"</string>
|
||||
<string name="state_event_room_invite">"%1$s saatis kutse kasutajale %2$s"</string>
|
||||
<string name="state_event_room_invite_accepted">"%1$s võttis kutse vastu"</string>
|
||||
<string name="state_event_room_invite_accepted_by_you">"Sina võtsid kutse vastu"</string>
|
||||
<string name="state_event_room_invite_by_you">"Sina saatsid kutse kasutajale %1$s"</string>
|
||||
<string name="state_event_room_invite_you">"%1$s saatis sulle kutse"</string>
|
||||
<string name="state_event_room_join">"%1$s liitus jututoaga"</string>
|
||||
<string name="state_event_room_join_by_you">"Sina liitusid jututoaga"</string>
|
||||
<string name="state_event_room_knock">"%1$s palus võimalust liituda"</string>
|
||||
<string name="state_event_room_knock_accepted">"%1$s lubas kasutajal %2$s liituda"</string>
|
||||
<string name="state_event_room_knock_accepted_by_you">"Sina lubasid kasutajal %1$s liituda!"</string>
|
||||
<string name="state_event_room_knock_by_you">"Sina palusid liitumist"</string>
|
||||
<string name="state_event_room_knock_denied">"%1$s lükkas tagasi kasutaja %2$s liitumispalve"</string>
|
||||
<string name="state_event_room_knock_denied_by_you">"Sina lükkasid tagasi kasutaja %1$s liitumispalve"</string>
|
||||
<string name="state_event_room_knock_denied_you">"%1$s lükkas tagasi sinu liitumispalve"</string>
|
||||
<string name="state_event_room_knock_retracted">"%1$s pole enam liitumisest huvitatud"</string>
|
||||
<string name="state_event_room_knock_retracted_by_you">"Sina tühitasid oma liitumissoovi"</string>
|
||||
<string name="state_event_room_leave">"%1$s lahkus jututoast"</string>
|
||||
<string name="state_event_room_leave_by_you">"Sina lahkusid jututoast"</string>
|
||||
<string name="state_event_room_name_changed">"%1$s muutis jututoa uueks nimeks „%2$s“"</string>
|
||||
<string name="state_event_room_name_changed_by_you">"Sina muutsid jututoa uueks nimeks „%1$s“"</string>
|
||||
<string name="state_event_room_name_removed">"%1$s eemaldas jututoa nime"</string>
|
||||
<string name="state_event_room_name_removed_by_you">"Sina eemaldasid jututoa nime"</string>
|
||||
<string name="state_event_room_none">"%1$s ei teinud ühtegi muudatust"</string>
|
||||
<string name="state_event_room_none_by_you">"Sina ei teinud ühtegi muudatust"</string>
|
||||
<string name="state_event_room_pinned_events_changed">"%1$s muutis esiletõstetud sõnumeid"</string>
|
||||
<string name="state_event_room_pinned_events_changed_by_you">"Sina muutsid esiletõstetud sõnumeid"</string>
|
||||
<string name="state_event_room_pinned_events_pinned">"%1$s tõstis sõnumi esile"</string>
|
||||
<string name="state_event_room_pinned_events_pinned_by_you">"Sina tõstsid sõnumi esile"</string>
|
||||
<string name="state_event_room_pinned_events_unpinned">"%1$s eemaldas esiletõstetud sõnumi"</string>
|
||||
<string name="state_event_room_pinned_events_unpinned_by_you">"Sina eemaldasid esiletõstetud sõnumi"</string>
|
||||
<string name="state_event_room_reject">"%1$s lükkas kutse tagasi"</string>
|
||||
<string name="state_event_room_reject_by_you">"Sina lükkasid kutse tagasi"</string>
|
||||
<string name="state_event_room_remove">"%1$s eemaldas jututoast kasutaja %2$s"</string>
|
||||
<string name="state_event_room_remove_by_you">"Sina eemaldasid jututoast kasutaja %1$s"</string>
|
||||
<string name="state_event_room_remove_by_you_with_reason">"Sina eemaldasid kasutaja %1$s: %2$s"</string>
|
||||
<string name="state_event_room_remove_with_reason">"%1$s eemaldas kasutaja %2$s: %3$s"</string>
|
||||
<string name="state_event_room_third_party_invite">"%1$s saatis jututoaga liitumiseks kutse kasutajale %2$s"</string>
|
||||
<string name="state_event_room_third_party_invite_by_you">"Sina saatsid kasutajale %1$s kutse jututoaga liitumiseks"</string>
|
||||
<string name="state_event_room_third_party_revoked_invite">"%1$s võttis tagasi jututoaga liitumise kutse kasutajalt %2$s"</string>
|
||||
<string name="state_event_room_third_party_revoked_invite_by_you">"Sina võtsid tagasi jututoaga liitumise kutse kasutajalt %1$s"</string>
|
||||
<string name="state_event_room_topic_changed">"%1$s muutis uueks teemaks %2$s"</string>
|
||||
<string name="state_event_room_topic_changed_by_you">"Sina muutsid uueks teemaks %1$s"</string>
|
||||
<string name="state_event_room_topic_removed">"%1$s eemaldas jututoa teema"</string>
|
||||
<string name="state_event_room_topic_removed_by_you">"Sina eemaldasid jututoa teema"</string>
|
||||
<string name="state_event_room_unban">"%1$s taastas %2$s ligipääsu"</string>
|
||||
<string name="state_event_room_unban_by_you">"Sina taastasid %1$s ligipääsu"</string>
|
||||
<string name="state_event_room_unknown_membership_change">"%1$s tegi oma liikmelisuses teadmata muutatuse"</string>
|
||||
</resources>
|
||||
@@ -0,0 +1,67 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
|
||||
<string name="state_event_avatar_changed_too">"(abatarra ere aldatu da)"</string>
|
||||
<string name="state_event_avatar_url_changed">"%1$s(e)k abatarra aldatu du"</string>
|
||||
<string name="state_event_avatar_url_changed_by_you">"Abatarra aldatu duzu"</string>
|
||||
<string name="state_event_demoted_to_member">"%1$s kide mailara jaitsi da"</string>
|
||||
<string name="state_event_demoted_to_moderator">"%1$s moderatzaile mailara jaitsi da"</string>
|
||||
<string name="state_event_display_name_changed_from">"%1$s(e)k pantaila-izena %2$s(e)tik %3$s(e)ra aldatu du"</string>
|
||||
<string name="state_event_display_name_changed_from_by_you">"Pantaila-izena %1$s(e)tik %2$s(e)ra aldatu duzu"</string>
|
||||
<string name="state_event_display_name_removed">"%1$s(e)k pantaila-izena kendu du (%2$s zen)"</string>
|
||||
<string name="state_event_display_name_removed_by_you">"Pantaila-izena kendu duzu (%1$s zen)"</string>
|
||||
<string name="state_event_display_name_set">"%1$s(e)k pantaila-izena %2$s(r)a aldatu du"</string>
|
||||
<string name="state_event_display_name_set_by_you">"Pantaila-izena %1$s(e)ra aldatu duzu"</string>
|
||||
<string name="state_event_promoted_to_administrator">"%1$s administratzaile mailara igo da"</string>
|
||||
<string name="state_event_promoted_to_moderator">"%1$s moderatzaile mailara igo da"</string>
|
||||
<string name="state_event_room_avatar_changed">"%1$s(e)k gelako abatarra aldatu du"</string>
|
||||
<string name="state_event_room_avatar_changed_by_you">"Gelako abatarra aldatu duzu"</string>
|
||||
<string name="state_event_room_avatar_removed">"%1$s(e)k gelaren abatarra kendu du"</string>
|
||||
<string name="state_event_room_avatar_removed_by_you">"Gelaren abatarra kendu duzu"</string>
|
||||
<string name="state_event_room_ban">"%1$s(e)k %2$s(r) debekua ezarri dio"</string>
|
||||
<string name="state_event_room_ban_by_you">"%1$s(r) debekua ezarri diozu"</string>
|
||||
<string name="state_event_room_created">"%1$s(e)k gela sortu du"</string>
|
||||
<string name="state_event_room_created_by_you">"Gela sortu duzu"</string>
|
||||
<string name="state_event_room_invite">"%1$s(e)k %2$s gonbidatu du"</string>
|
||||
<string name="state_event_room_invite_accepted">"%1$s(e)k gonbidapena onartu du"</string>
|
||||
<string name="state_event_room_invite_accepted_by_you">"Gonbidapena onartu duzu"</string>
|
||||
<string name="state_event_room_invite_by_you">"%1$s gonbidatu duzu"</string>
|
||||
<string name="state_event_room_invite_you">"%1$s(e)k gonbidatu zaitu"</string>
|
||||
<string name="state_event_room_join">"%1$s gelara batu da"</string>
|
||||
<string name="state_event_room_join_by_you">"Gelara batu zara"</string>
|
||||
<string name="state_event_room_knock">"%1$s(e)k batzeko eskaera egin du"</string>
|
||||
<string name="state_event_room_knock_accepted">"%1$s(e)k batzeko baimena eman dio %2$s(r)i"</string>
|
||||
<string name="state_event_room_knock_accepted_by_you">"Batzeko baimena eman diozu %1$s(r)i"</string>
|
||||
<string name="state_event_room_knock_by_you">"Batzeko eskaera egin duzu"</string>
|
||||
<string name="state_event_room_knock_denied">"%1$s(e)k %2$s(r)en bat egiteko eskaera baztertu du"</string>
|
||||
<string name="state_event_room_knock_denied_by_you">"%1$s(r)en bat egiteko eskaera baztertu duzu"</string>
|
||||
<string name="state_event_room_knock_denied_you">"%1$s(e)k bat egiteko eskaera baztertu dizu"</string>
|
||||
<string name="state_event_room_knock_retracted">"%1$s(e)k dagoeneko ez du bat egiteko interesik"</string>
|
||||
<string name="state_event_room_knock_retracted_by_you">"Bat egiteko eskaera bertan behera utzi duzu"</string>
|
||||
<string name="state_event_room_leave">"%1$s gelatik atera da"</string>
|
||||
<string name="state_event_room_leave_by_you">"Gelatik atera zara"</string>
|
||||
<string name="state_event_room_name_changed">"%1$s(e)k gelaren izena honakora aldatu du: %2$s"</string>
|
||||
<string name="state_event_room_name_changed_by_you">"Gelaren izena honakora aldatu duzu: %1$s"</string>
|
||||
<string name="state_event_room_name_removed">"%1$s(e)k gelaren izena kendu du"</string>
|
||||
<string name="state_event_room_name_removed_by_you">"Gelaren izena kendu duzu"</string>
|
||||
<string name="state_event_room_none">"%1$s(e)k ez du aldaketarik egin"</string>
|
||||
<string name="state_event_room_none_by_you">"Ez duzu aldaketarik egin"</string>
|
||||
<string name="state_event_room_pinned_events_changed">"%1$s(e)k finkatutako mezuak aldatu ditu"</string>
|
||||
<string name="state_event_room_pinned_events_changed_by_you">"Finkatutako mezuak aldatu dituzu"</string>
|
||||
<string name="state_event_room_pinned_events_pinned">"%1$s(e)k mezu bat finkatu du"</string>
|
||||
<string name="state_event_room_pinned_events_pinned_by_you">"Mezu bat finkatu duzu"</string>
|
||||
<string name="state_event_room_pinned_events_unpinned">"%1$s(e)k mezu bat finkatzeari utzi dio"</string>
|
||||
<string name="state_event_room_pinned_events_unpinned_by_you">"Mezu bat finkatzeari utzi diozu"</string>
|
||||
<string name="state_event_room_reject">"%1$s(e)k gonbidapena baztertu du"</string>
|
||||
<string name="state_event_room_reject_by_you">"Gonbidapena baztertu duzu"</string>
|
||||
<string name="state_event_room_remove">"%1$s(e)k %2$s kendu du"</string>
|
||||
<string name="state_event_room_remove_by_you">"%1$s kendu duzu"</string>
|
||||
<string name="state_event_room_third_party_invite">"%1$s(e)k %2$s(r)i gonbidapena bidali dio gelara batu dadin"</string>
|
||||
<string name="state_event_room_third_party_invite_by_you">"Gonbidapena bidali diozu %1$s(r)i gelara batu dadin"</string>
|
||||
<string name="state_event_room_topic_changed">"%1$s(e)k gaia honakora aldatu du: %2$s"</string>
|
||||
<string name="state_event_room_topic_changed_by_you">"Gaia honakora aldatu duzu: %1$s"</string>
|
||||
<string name="state_event_room_topic_removed">"%1$s(e)k gelaren gaia aldatu du"</string>
|
||||
<string name="state_event_room_topic_removed_by_you">"Gelaren gaia aldatu duzu"</string>
|
||||
<string name="state_event_room_unban">"%1$s(e)k %2$s(r)en debekua bertan behera utzi du"</string>
|
||||
<string name="state_event_room_unban_by_you">"%1$s(r)en debekua bertan behera utzi duzu"</string>
|
||||
<string name="state_event_room_unknown_membership_change">"%1$s(e)k kidetzan aldaketa ezezagun bat egin du"</string>
|
||||
</resources>
|
||||
@@ -0,0 +1,69 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
|
||||
<string name="state_event_avatar_changed_too">"(چهرک نیز تغییر کرد)"</string>
|
||||
<string name="state_event_avatar_url_changed">"%1$s چهرکش را تغییر داد"</string>
|
||||
<string name="state_event_avatar_url_changed_by_you">"چهرکتان را تغییر دادید"</string>
|
||||
<string name="state_event_demoted_to_member">"%1$s به عضو تنزّل یافت"</string>
|
||||
<string name="state_event_demoted_to_moderator">"%1$s به ناظم تنزّل یافت"</string>
|
||||
<string name="state_event_display_name_changed_from">"%1$s نام نمایشیش را از %2$s به%3$s تغییر داد"</string>
|
||||
<string name="state_event_display_name_changed_from_by_you">"نام نمایشیتان را از %1$s به %2$s تغییر دادید"</string>
|
||||
<string name="state_event_display_name_removed">"%1$s نام نمایشیش را برداشت (%2$s بود)"</string>
|
||||
<string name="state_event_display_name_removed_by_you">"نام نمایشیتان را برداشتید (%1$s بود)"</string>
|
||||
<string name="state_event_display_name_set">"%1$s نام نمایشیش را به %2$s تغییر داد"</string>
|
||||
<string name="state_event_display_name_set_by_you">"نام نمایشیتان را به %1$s تغییر دادید"</string>
|
||||
<string name="state_event_promoted_to_administrator">"%1$s به مدیر ارتقا یافت"</string>
|
||||
<string name="state_event_promoted_to_moderator">"%1$s به ناظم ارتقا یافت"</string>
|
||||
<string name="state_event_room_avatar_changed">"%1$s چهرک اتاق را تغییر داد"</string>
|
||||
<string name="state_event_room_avatar_changed_by_you">"چهرک اتاق را تغییر دادید"</string>
|
||||
<string name="state_event_room_avatar_removed">"%1$s چهرک اتاق را برداشت"</string>
|
||||
<string name="state_event_room_avatar_removed_by_you">"چهرک اتاق را برداشتید"</string>
|
||||
<string name="state_event_room_ban">"%2$s به دست %1$s مسدود کرد"</string>
|
||||
<string name="state_event_room_ban_by_you">"%1$s را مسدود کردید"</string>
|
||||
<string name="state_event_room_created">"%1$s اتاق را ایجاد کرد"</string>
|
||||
<string name="state_event_room_created_by_you">"اتاق را ساختید"</string>
|
||||
<string name="state_event_room_invite">"%1$s از %2$s دعوت کرد"</string>
|
||||
<string name="state_event_room_invite_accepted">"%1$s دعوت را پذیرفت"</string>
|
||||
<string name="state_event_room_invite_accepted_by_you">"دعوت را پذیرفتید"</string>
|
||||
<string name="state_event_room_invite_by_you">"از %1$s دعوت کردید"</string>
|
||||
<string name="state_event_room_invite_you">"%1$s دعوتتان کرد"</string>
|
||||
<string name="state_event_room_join">"%1$s به اتاق پیوست"</string>
|
||||
<string name="state_event_room_join_by_you">"به اتاق پیوستید"</string>
|
||||
<string name="state_event_room_knock">"%1$s درخواست پیوستن دارد"</string>
|
||||
<string name="state_event_room_knock_accepted">"%1$s به %2$s دسترسی داد"</string>
|
||||
<string name="state_event_room_knock_accepted_by_you">"گذاشتید %1$s بپیوندد"</string>
|
||||
<string name="state_event_room_knock_by_you">"درخواست پیوستن کردید"</string>
|
||||
<string name="state_event_room_knock_denied">"درخواست پیوستن %2$s به دست %1$s لغو شد"</string>
|
||||
<string name="state_event_room_knock_denied_by_you">"درخوسات پیوستن %1$s را رد کردید"</string>
|
||||
<string name="state_event_room_knock_denied_you">"درخواست پیوستنتان به دست %1$s رد شد"</string>
|
||||
<string name="state_event_room_knock_retracted">"%1$s دیگر علاقهای به پیوستن ندارد"</string>
|
||||
<string name="state_event_room_knock_retracted_by_you">"درخواست پیوستنتان را لغو کردید"</string>
|
||||
<string name="state_event_room_leave">"%1$s اتاق را ترک کرد"</string>
|
||||
<string name="state_event_room_leave_by_you">"اتاق را ترک کردید"</string>
|
||||
<string name="state_event_room_name_changed">"%1$s نام اتاق را تغییر داد: %2$s"</string>
|
||||
<string name="state_event_room_name_changed_by_you">"نام اتاق را تغییر دادید: %1$s"</string>
|
||||
<string name="state_event_room_name_removed">"%1$sنام اتاق را برداشت"</string>
|
||||
<string name="state_event_room_name_removed_by_you">"نام اتاق را برداشتید"</string>
|
||||
<string name="state_event_room_none">"%1$s تغییری ایجاد نکرد"</string>
|
||||
<string name="state_event_room_none_by_you">"تغییری ایجاد نکردید"</string>
|
||||
<string name="state_event_room_pinned_events_changed">"%1$s پیامهای سنجاق شده را تغییر داد"</string>
|
||||
<string name="state_event_room_pinned_events_changed_by_you">"پیامهای سنجاق شده را تغییر دادید"</string>
|
||||
<string name="state_event_room_pinned_events_pinned">"%1$s پیامی را سنجاق کرد"</string>
|
||||
<string name="state_event_room_pinned_events_pinned_by_you">"پیامی را سنجاق کردید"</string>
|
||||
<string name="state_event_room_pinned_events_unpinned">"%1$s سنجاق پیامی را برداشت"</string>
|
||||
<string name="state_event_room_pinned_events_unpinned_by_you">"سنجاق پیامی را برداشتید"</string>
|
||||
<string name="state_event_room_reject">"%1$s دعوت را رد کرد"</string>
|
||||
<string name="state_event_room_reject_by_you">"دعوت را رد کردید"</string>
|
||||
<string name="state_event_room_remove">"%2$s به دست %1$s برداشته شد"</string>
|
||||
<string name="state_event_room_remove_by_you">"%1$s را برداشتید"</string>
|
||||
<string name="state_event_room_third_party_invite">"%1$s دعوتی برای پیوستن %2$s به اتاق فرستاد"</string>
|
||||
<string name="state_event_room_third_party_invite_by_you">"برای %1$s دعوت پیوستن به اتاق فرستادید"</string>
|
||||
<string name="state_event_room_third_party_revoked_invite">"%1$s دعوت پیوستن به اتاق %2$s را باطل کرد"</string>
|
||||
<string name="state_event_room_third_party_revoked_invite_by_you">"دعوت پیوستن %1$s به اتاق را پس گرفتید"</string>
|
||||
<string name="state_event_room_topic_changed">"%1$s موضوع را تغییر داد: %2$s"</string>
|
||||
<string name="state_event_room_topic_changed_by_you">"موضوع را تغییر دادید: %1$s"</string>
|
||||
<string name="state_event_room_topic_removed">"%1$sموضوع اتاق را برداشت"</string>
|
||||
<string name="state_event_room_topic_removed_by_you">"موضوع اتاق را برداشتید"</string>
|
||||
<string name="state_event_room_unban">"%1$s انسداد %2$s را لغو کرد"</string>
|
||||
<string name="state_event_room_unban_by_you">"انسداد%1$s را لغو کردید"</string>
|
||||
<string name="state_event_room_unknown_membership_change">"%1$s تغییری نامعلوم در عضویتش داد"</string>
|
||||
</resources>
|
||||
@@ -0,0 +1,73 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
|
||||
<string name="state_event_avatar_changed_too">"(myös avatar vaihdettiin)"</string>
|
||||
<string name="state_event_avatar_url_changed">"%1$s vaihtoi avatarinsa"</string>
|
||||
<string name="state_event_avatar_url_changed_by_you">"Vaihdoit avatarisi"</string>
|
||||
<string name="state_event_demoted_to_member">"%1$s alennettiin jäseneksi"</string>
|
||||
<string name="state_event_demoted_to_moderator">"%1$s alennettiin valvojaksi"</string>
|
||||
<string name="state_event_display_name_changed_from">"%1$s vaihtoi näyttönimekseen %3$s (se oli %2$s)"</string>
|
||||
<string name="state_event_display_name_changed_from_by_you">"Vaihdoit näyttönimeksesi %2$s (se oli %1$s)"</string>
|
||||
<string name="state_event_display_name_removed">"%1$s poisti näyttönimensä (se oli %2$s)"</string>
|
||||
<string name="state_event_display_name_removed_by_you">"Poistit näyttönimesi (se oli %1$s)"</string>
|
||||
<string name="state_event_display_name_set">"%1$s asetti näyttönimekseen %2$s"</string>
|
||||
<string name="state_event_display_name_set_by_you">"Asetit näyttönimeksesi %1$s"</string>
|
||||
<string name="state_event_promoted_to_administrator">"%1$s ylennettiin ylläpitäjäksi"</string>
|
||||
<string name="state_event_promoted_to_moderator">"%1$s ylennettiin valvojaksi"</string>
|
||||
<string name="state_event_room_avatar_changed">"%1$s vaihtoi huoneen avatarin"</string>
|
||||
<string name="state_event_room_avatar_changed_by_you">"Vaihdoit huoneen avatarin"</string>
|
||||
<string name="state_event_room_avatar_removed">"%1$s poisti huoneen avatarin"</string>
|
||||
<string name="state_event_room_avatar_removed_by_you">"Poistit huoneen avatarin"</string>
|
||||
<string name="state_event_room_ban">"%1$s antoi porttikiellon käyttäjälle %2$s"</string>
|
||||
<string name="state_event_room_ban_by_you">"Annoit porttikiellon käyttäjälle %1$s"</string>
|
||||
<string name="state_event_room_ban_by_you_with_reason">"Annoit porttikiellon käyttäjälle %1$s: %2$s"</string>
|
||||
<string name="state_event_room_ban_with_reason">"%1$s antoi porttikiellon käyttäjälle %2$s: %3$s"</string>
|
||||
<string name="state_event_room_created">"%1$s loi huoneen"</string>
|
||||
<string name="state_event_room_created_by_you">"Loit huoneen"</string>
|
||||
<string name="state_event_room_invite">"%1$s kutsui käyttäjän %2$s"</string>
|
||||
<string name="state_event_room_invite_accepted">"%1$s hyväksyi kutsun"</string>
|
||||
<string name="state_event_room_invite_accepted_by_you">"Hyväksyit kutsun"</string>
|
||||
<string name="state_event_room_invite_by_you">"Kutsuit käyttäjän %1$s"</string>
|
||||
<string name="state_event_room_invite_you">"%1$s kutsui sinut"</string>
|
||||
<string name="state_event_room_join">"%1$s liittyi huoneeseen"</string>
|
||||
<string name="state_event_room_join_by_you">"Liityit huoneeseen"</string>
|
||||
<string name="state_event_room_knock">"%1$s pyytää liittymistä"</string>
|
||||
<string name="state_event_room_knock_accepted">"%1$s myönsi pääsyn käyttäjälle %2$s"</string>
|
||||
<string name="state_event_room_knock_accepted_by_you">"Sallit käyttäjän %1$s liittyä"</string>
|
||||
<string name="state_event_room_knock_by_you">"Pyysit liittymistä"</string>
|
||||
<string name="state_event_room_knock_denied">"%1$s hylkäsi käyttäjän %2$s liittymispyynnön"</string>
|
||||
<string name="state_event_room_knock_denied_by_you">"Hylkäsit käyttäjän %1$s liittymispyynnön"</string>
|
||||
<string name="state_event_room_knock_denied_you">"%1$s hylkäsi liittymispyyntösi"</string>
|
||||
<string name="state_event_room_knock_retracted">"%1$s ei halua enää liittyä"</string>
|
||||
<string name="state_event_room_knock_retracted_by_you">"Peruutit liittymispyyntösi"</string>
|
||||
<string name="state_event_room_leave">"%1$s poistui huoneesta"</string>
|
||||
<string name="state_event_room_leave_by_you">"Poistuit huoneesta"</string>
|
||||
<string name="state_event_room_name_changed">"%1$s vaihtoi huoneen nimeksi: %2$s"</string>
|
||||
<string name="state_event_room_name_changed_by_you">"Vaihdoit huoneen nimeksi: %1$s"</string>
|
||||
<string name="state_event_room_name_removed">"%1$s poisti huoneen nimen"</string>
|
||||
<string name="state_event_room_name_removed_by_you">"Poistit huoneen nimen"</string>
|
||||
<string name="state_event_room_none">"%1$s ei tehnyt muutoksia"</string>
|
||||
<string name="state_event_room_none_by_you">"Et tehnyt muutoksia"</string>
|
||||
<string name="state_event_room_pinned_events_changed">"%1$s muutti kiinnitettyjä viestejä"</string>
|
||||
<string name="state_event_room_pinned_events_changed_by_you">"Muutit kiinnitettyjä viestejä"</string>
|
||||
<string name="state_event_room_pinned_events_pinned">"%1$s kiinnitti viestin"</string>
|
||||
<string name="state_event_room_pinned_events_pinned_by_you">"Kiinnitit viestin"</string>
|
||||
<string name="state_event_room_pinned_events_unpinned">"%1$s poisti viestin kiinnityksen"</string>
|
||||
<string name="state_event_room_pinned_events_unpinned_by_you">"Poistit viestin kiinnityksen"</string>
|
||||
<string name="state_event_room_reject">"%1$s hylkäsi kutsun"</string>
|
||||
<string name="state_event_room_reject_by_you">"Hylkäsit kutsun"</string>
|
||||
<string name="state_event_room_remove">"%1$s poisti käyttäjän %2$s"</string>
|
||||
<string name="state_event_room_remove_by_you">"Poistit käyttäjän %1$s"</string>
|
||||
<string name="state_event_room_remove_by_you_with_reason">"Poistit käyttäjän %1$s: %2$s"</string>
|
||||
<string name="state_event_room_remove_with_reason">"%1$s poisti käyttäjän %2$s: %3$s"</string>
|
||||
<string name="state_event_room_third_party_invite">"%1$s kutsui käyttäjän %2$s huoneeseen"</string>
|
||||
<string name="state_event_room_third_party_invite_by_you">"Kutsuit käyttäjän %1$s huoneeseen"</string>
|
||||
<string name="state_event_room_third_party_revoked_invite">"%1$s peruutti käyttäjän %2$s kutsun huoneeseen"</string>
|
||||
<string name="state_event_room_third_party_revoked_invite_by_you">"Peruutit käyttäjän %1$s kutsun huoneeseen"</string>
|
||||
<string name="state_event_room_topic_changed">"%1$s vaihtoi aiheeksi: %2$s"</string>
|
||||
<string name="state_event_room_topic_changed_by_you">"Vaihdoit aiheeksi: %1$s"</string>
|
||||
<string name="state_event_room_topic_removed">"%1$s poisti huoneen aiheen"</string>
|
||||
<string name="state_event_room_topic_removed_by_you">"Poistit huoneen aiheen"</string>
|
||||
<string name="state_event_room_unban">"%1$s poisti käyttäjän %2$s porttikiellon"</string>
|
||||
<string name="state_event_room_unban_by_you">"Poistit käyttäjän %1$s porttikiellon"</string>
|
||||
<string name="state_event_room_unknown_membership_change">"%1$s teki tuntemattoman muutoksen jäsenyyteensä"</string>
|
||||
</resources>
|
||||
@@ -0,0 +1,73 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
|
||||
<string name="state_event_avatar_changed_too">"(l’avatar a aussi été modifié)"</string>
|
||||
<string name="state_event_avatar_url_changed">"%1$s a changé son avatar"</string>
|
||||
<string name="state_event_avatar_url_changed_by_you">"Vous avez changé d’avatar"</string>
|
||||
<string name="state_event_demoted_to_member">"%1$s a été rétrogradé vers simple utilisateur"</string>
|
||||
<string name="state_event_demoted_to_moderator">"%1$s a été rétrogradé vers modérateur"</string>
|
||||
<string name="state_event_display_name_changed_from">"%1$s a changé son pseudonyme de %2$s à %3$s"</string>
|
||||
<string name="state_event_display_name_changed_from_by_you">"Vous avez changé votre pseudonyme de %1$s à %2$s"</string>
|
||||
<string name="state_event_display_name_removed">"%1$s a supprimé son pseudonyme (c’était %2$s)"</string>
|
||||
<string name="state_event_display_name_removed_by_you">"Vous avez supprimé votre pseudonyme (c’était %1$s)"</string>
|
||||
<string name="state_event_display_name_set">"%1$s a défini son pseudonyme en tant que %2$s"</string>
|
||||
<string name="state_event_display_name_set_by_you">"Vous avez défini votre pseudonyme comme %1$s"</string>
|
||||
<string name="state_event_promoted_to_administrator">"%1$s a été promu administrateur"</string>
|
||||
<string name="state_event_promoted_to_moderator">"%1$s a été promu modérateur"</string>
|
||||
<string name="state_event_room_avatar_changed">"%1$s a changé l’avatar du salon"</string>
|
||||
<string name="state_event_room_avatar_changed_by_you">"Vous avez changé l’avatar du salon"</string>
|
||||
<string name="state_event_room_avatar_removed">"%1$s a supprimé l’avatar du salon"</string>
|
||||
<string name="state_event_room_avatar_removed_by_you">"Vous avez supprimé l’avatar du salon"</string>
|
||||
<string name="state_event_room_ban">"%1$s a banni %2$s"</string>
|
||||
<string name="state_event_room_ban_by_you">"Vous avez banni %1$s"</string>
|
||||
<string name="state_event_room_ban_by_you_with_reason">"Vous avez banni %1$s: %2$s"</string>
|
||||
<string name="state_event_room_ban_with_reason">"%1$s a banni %2$s: %3$s"</string>
|
||||
<string name="state_event_room_created">"%1$s a créé le salon"</string>
|
||||
<string name="state_event_room_created_by_you">"Vous avez créé le salon"</string>
|
||||
<string name="state_event_room_invite">"%1$s a invité %2$s"</string>
|
||||
<string name="state_event_room_invite_accepted">"%1$s a accepté l’invitation"</string>
|
||||
<string name="state_event_room_invite_accepted_by_you">"Vous avez accepté l’invitation"</string>
|
||||
<string name="state_event_room_invite_by_you">"Vous avez invité %1$s"</string>
|
||||
<string name="state_event_room_invite_you">"%1$s vous a invité(e)"</string>
|
||||
<string name="state_event_room_join">"%1$s a rejoint le salon"</string>
|
||||
<string name="state_event_room_join_by_you">"Vous avez rejoint le salon"</string>
|
||||
<string name="state_event_room_knock">"%1$s demande à rejoindre le salon"</string>
|
||||
<string name="state_event_room_knock_accepted">"%1$s a autorisé %2$s à rejoindre"</string>
|
||||
<string name="state_event_room_knock_accepted_by_you">"Vous avez autorisé %1$s à joindre le salon"</string>
|
||||
<string name="state_event_room_knock_by_you">"Vous avez demandé à rejoindre"</string>
|
||||
<string name="state_event_room_knock_denied">"%1$s a rejeté la demande de %2$s pour rejoindre"</string>
|
||||
<string name="state_event_room_knock_denied_by_you">"Vous avez rejeté la demande de %1$s pour rejoindre"</string>
|
||||
<string name="state_event_room_knock_denied_you">"%1$s a rejeté votre demande pour rejoindre"</string>
|
||||
<string name="state_event_room_knock_retracted">"%1$s n’est plus intéressé à rejoindre"</string>
|
||||
<string name="state_event_room_knock_retracted_by_you">"Vous avez annulé votre demande d’adhésion"</string>
|
||||
<string name="state_event_room_leave">"%1$s a quitté le salon"</string>
|
||||
<string name="state_event_room_leave_by_you">"Vous avez quitté le salon"</string>
|
||||
<string name="state_event_room_name_changed">"%1$s a changé le nom du salon en : %2$s"</string>
|
||||
<string name="state_event_room_name_changed_by_you">"Vous avez changé le nom du salon en : %1$s"</string>
|
||||
<string name="state_event_room_name_removed">"%1$s a supprimé le nom du salon"</string>
|
||||
<string name="state_event_room_name_removed_by_you">"Vous avez supprimé le nom du salon"</string>
|
||||
<string name="state_event_room_none">"%1$s n‘a fait aucun changement visible"</string>
|
||||
<string name="state_event_room_none_by_you">"Vous n‘avez fait aucun changement visible"</string>
|
||||
<string name="state_event_room_pinned_events_changed">"%1$s a modifié les messages épinglés"</string>
|
||||
<string name="state_event_room_pinned_events_changed_by_you">"Vous avez modifié les messages épinglés"</string>
|
||||
<string name="state_event_room_pinned_events_pinned">"%1$s a épinglé un message"</string>
|
||||
<string name="state_event_room_pinned_events_pinned_by_you">"Vous avez épinglé un message"</string>
|
||||
<string name="state_event_room_pinned_events_unpinned">"%1$s a désépinglé un message"</string>
|
||||
<string name="state_event_room_pinned_events_unpinned_by_you">"Vous avez désépinglé un message"</string>
|
||||
<string name="state_event_room_reject">"%1$s a rejeté l’invitation"</string>
|
||||
<string name="state_event_room_reject_by_you">"Vous avez refusé l’invitation"</string>
|
||||
<string name="state_event_room_remove">"%1$s a supprimé %2$s"</string>
|
||||
<string name="state_event_room_remove_by_you">"Vous avez supprimé %1$s"</string>
|
||||
<string name="state_event_room_remove_by_you_with_reason">"Vous avez supprimé %1$s: %2$s"</string>
|
||||
<string name="state_event_room_remove_with_reason">"%1$s a supprimé %2$s: %3$s"</string>
|
||||
<string name="state_event_room_third_party_invite">"%1$s a envoyé une invitation à %2$s à rejoindre le salon"</string>
|
||||
<string name="state_event_room_third_party_invite_by_you">"Vous avez envoyé une invitation à %1$s pour rejoindre le salon"</string>
|
||||
<string name="state_event_room_third_party_revoked_invite">"%1$s a révoqué l’invitation de %2$s à rejoindre le salon"</string>
|
||||
<string name="state_event_room_third_party_revoked_invite_by_you">"Vous avez révoqué l’invitation de %1$s à rejoindre le salon"</string>
|
||||
<string name="state_event_room_topic_changed">"%1$s a changé le sujet pour : %2$s"</string>
|
||||
<string name="state_event_room_topic_changed_by_you">"Vous avez changé le sujet pour : %1$s"</string>
|
||||
<string name="state_event_room_topic_removed">"%1$s a supprimé le sujet du salon"</string>
|
||||
<string name="state_event_room_topic_removed_by_you">"Vous avez supprimé le sujet du salon"</string>
|
||||
<string name="state_event_room_unban">"%1$s a débanni %2$s"</string>
|
||||
<string name="state_event_room_unban_by_you">"Vous avez débanni %1$s"</string>
|
||||
<string name="state_event_room_unknown_membership_change">"%1$s a effectué un changement inconnu à son adhésion"</string>
|
||||
</resources>
|
||||
@@ -0,0 +1,73 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
|
||||
<string name="state_event_avatar_changed_too">"(a profilkép is megváltozott)"</string>
|
||||
<string name="state_event_avatar_url_changed">"%1$s megváltoztatta a profilképét"</string>
|
||||
<string name="state_event_avatar_url_changed_by_you">"Megváltoztatta a profilképét"</string>
|
||||
<string name="state_event_demoted_to_member">"%1$s le lett fokozva taggá"</string>
|
||||
<string name="state_event_demoted_to_moderator">"%1$s le lett fokozva moderátorrá"</string>
|
||||
<string name="state_event_display_name_changed_from">"%1$s megváltoztatta a megjelenítendő nevét: %2$s → %3$s"</string>
|
||||
<string name="state_event_display_name_changed_from_by_you">"Megváltoztatta a megjelenítendő nevét: %1$s → %2$s"</string>
|
||||
<string name="state_event_display_name_removed">"%1$s eltávolította a megjelenítendő nevét (ez volt: %2$s)"</string>
|
||||
<string name="state_event_display_name_removed_by_you">"Eltávolította a megjelenítendő nevét (ez volt: %1$s)"</string>
|
||||
<string name="state_event_display_name_set">"%1$s beállította a megjelenítendő nevét: %2$s"</string>
|
||||
<string name="state_event_display_name_set_by_you">"Beállította a megjelenítendő nevét: %1$s"</string>
|
||||
<string name="state_event_promoted_to_administrator">"%1$s elő lett léptetve adminisztrátorrá"</string>
|
||||
<string name="state_event_promoted_to_moderator">"%1$s elő lett léptetve moderátorrá"</string>
|
||||
<string name="state_event_room_avatar_changed">"%1$s megváltoztatta a szoba profilképét"</string>
|
||||
<string name="state_event_room_avatar_changed_by_you">"Megváltoztatta a szoba profilképét"</string>
|
||||
<string name="state_event_room_avatar_removed">"%1$s eltávolította a szoba profilképét"</string>
|
||||
<string name="state_event_room_avatar_removed_by_you">"Eltávolította a szoba profilképét"</string>
|
||||
<string name="state_event_room_ban">"%1$s kitiltotta: %2$s"</string>
|
||||
<string name="state_event_room_ban_by_you">"Kitiltotta: %1$s"</string>
|
||||
<string name="state_event_room_ban_by_you_with_reason">"Kitiltotta %1$s felhasználót: %2$s"</string>
|
||||
<string name="state_event_room_ban_with_reason">"%1$s kitiltotta %2$s felhasználót: %3$s"</string>
|
||||
<string name="state_event_room_created">"%1$s létrehozta a szobát"</string>
|
||||
<string name="state_event_room_created_by_you">"Létrehozta a szobát"</string>
|
||||
<string name="state_event_room_invite">"%1$s meghívta: %2$s"</string>
|
||||
<string name="state_event_room_invite_accepted">"%1$s elfogadta a meghívást"</string>
|
||||
<string name="state_event_room_invite_accepted_by_you">"Elfogadta a meghívást"</string>
|
||||
<string name="state_event_room_invite_by_you">"Meghívta: %1$s"</string>
|
||||
<string name="state_event_room_invite_you">"%1$s meghívta"</string>
|
||||
<string name="state_event_room_join">"%1$s csatlakozott a szobához"</string>
|
||||
<string name="state_event_room_join_by_you">"Csatlakozott a szobához"</string>
|
||||
<string name="state_event_room_knock">"%1$s kéri, hogy csatlakozhasson"</string>
|
||||
<string name="state_event_room_knock_accepted">"%1$s hozzáférést kapott a következőhöz: %2$s"</string>
|
||||
<string name="state_event_room_knock_accepted_by_you">"Engedélyezte, hogy %1$s csatlakozhasson"</string>
|
||||
<string name="state_event_room_knock_by_you">"Kérte, hogy csatlakozhasson"</string>
|
||||
<string name="state_event_room_knock_denied">"%1$s elutasította %2$s kérését, hogy csatlakozhasson"</string>
|
||||
<string name="state_event_room_knock_denied_by_you">"Elutasította %1$s kérését, hogy csatlakozhasson"</string>
|
||||
<string name="state_event_room_knock_denied_you">"%1$s elutasította a kérését, hogy csatlakozhasson"</string>
|
||||
<string name="state_event_room_knock_retracted">"%1$s már nem akar csatlakozni"</string>
|
||||
<string name="state_event_room_knock_retracted_by_you">"Lemondta a csatlakozási kérését"</string>
|
||||
<string name="state_event_room_leave">"%1$s elhagyta a szobát"</string>
|
||||
<string name="state_event_room_leave_by_you">"Elhagyta a szobát"</string>
|
||||
<string name="state_event_room_name_changed">"%1$s megváltoztatta a szoba nevét: %2$s"</string>
|
||||
<string name="state_event_room_name_changed_by_you">"Megváltoztatta a szoba nevét: %1$s"</string>
|
||||
<string name="state_event_room_name_removed">"%1$s eltávolította a szoba nevét"</string>
|
||||
<string name="state_event_room_name_removed_by_you">"Eltávolította a szoba nevét"</string>
|
||||
<string name="state_event_room_none">"%1$s nem változtatott semmin"</string>
|
||||
<string name="state_event_room_none_by_you">"Nem változtatott semmin"</string>
|
||||
<string name="state_event_room_pinned_events_changed">"%1$s megváltoztatta a kitűzött üzeneteket"</string>
|
||||
<string name="state_event_room_pinned_events_changed_by_you">"Megváltoztatta a kitűzött üzeneteket"</string>
|
||||
<string name="state_event_room_pinned_events_pinned">"%1$s kitűzött egy üzenetet"</string>
|
||||
<string name="state_event_room_pinned_events_pinned_by_you">"Kitűzött egy üzenetet"</string>
|
||||
<string name="state_event_room_pinned_events_unpinned">"%1$s feloldotta egy üzenet kitűzését"</string>
|
||||
<string name="state_event_room_pinned_events_unpinned_by_you">"Feloldotta egy üzenet kitűzését"</string>
|
||||
<string name="state_event_room_reject">"%1$s elutasította a meghívást"</string>
|
||||
<string name="state_event_room_reject_by_you">"Elutasította a meghívást"</string>
|
||||
<string name="state_event_room_remove">"%1$s eltávolította: %2$s"</string>
|
||||
<string name="state_event_room_remove_by_you">"Eltávolította: %1$s"</string>
|
||||
<string name="state_event_room_remove_by_you_with_reason">"Eltávolította %1$s felhasználót: %2$s"</string>
|
||||
<string name="state_event_room_remove_with_reason">"%1$s eltávolította %2$s felhasználót: %3$s"</string>
|
||||
<string name="state_event_room_third_party_invite">"%1$s meghívót küldött %2$s számára, hogy csatlakozzon a szobához"</string>
|
||||
<string name="state_event_room_third_party_invite_by_you">"Meghívót küldött %1$s számára, hogy csatlakozzon a szobához"</string>
|
||||
<string name="state_event_room_third_party_revoked_invite">"%1$s visszavonta %2$s meghívását, hogy csatlakozzon a szobához"</string>
|
||||
<string name="state_event_room_third_party_revoked_invite_by_you">"Visszavonta %1$s meghívását, hogy csatlakozzon a szobához"</string>
|
||||
<string name="state_event_room_topic_changed">"%1$s megváltoztatta a témát: %2$s"</string>
|
||||
<string name="state_event_room_topic_changed_by_you">"Megváltoztatta a témát: %1$s"</string>
|
||||
<string name="state_event_room_topic_removed">"%1$s eltávolította a szoba témáját"</string>
|
||||
<string name="state_event_room_topic_removed_by_you">"Eltávolította a szoba témáját"</string>
|
||||
<string name="state_event_room_unban">"%1$s visszavonta %2$s kitiltását"</string>
|
||||
<string name="state_event_room_unban_by_you">"Visszavonta %1$s kitiltását"</string>
|
||||
<string name="state_event_room_unknown_membership_change">"%1$s ismeretlen változást hajtott végre a tagságában"</string>
|
||||
</resources>
|
||||
@@ -0,0 +1,73 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
|
||||
<string name="state_event_avatar_changed_too">"(avatar juga diubah)"</string>
|
||||
<string name="state_event_avatar_url_changed">"%1$s mengubah avatarnya"</string>
|
||||
<string name="state_event_avatar_url_changed_by_you">"Anda mengubah avatar sendiri"</string>
|
||||
<string name="state_event_demoted_to_member">"%1$s telah diturunkan menjadi anggota"</string>
|
||||
<string name="state_event_demoted_to_moderator">"%1$s telah diturunkan menjadi moderator"</string>
|
||||
<string name="state_event_display_name_changed_from">"%1$s mengubah nama tampilannya dari %2$s menjadi %3$s"</string>
|
||||
<string name="state_event_display_name_changed_from_by_you">"Anda mengubah nama tampilan sendiri dari %1$s menjadi %2$s"</string>
|
||||
<string name="state_event_display_name_removed">"%1$s menghapus nama tampilannya (sebelumnya %2$s)"</string>
|
||||
<string name="state_event_display_name_removed_by_you">"Anda menghapus nama tampilan sendiri (sebelumnya %1$s)"</string>
|
||||
<string name="state_event_display_name_set">"%1$s menetapkan nama tampilannya menjadi %2$s"</string>
|
||||
<string name="state_event_display_name_set_by_you">"Anda menetapkan nama tampilan sendiri menjadi %1$s"</string>
|
||||
<string name="state_event_promoted_to_administrator">"%1$s telah dipromosikan menjadi admin"</string>
|
||||
<string name="state_event_promoted_to_moderator">"%1$s telah dipromosikan menjadi moderator"</string>
|
||||
<string name="state_event_room_avatar_changed">"%1$s mengubah avatar ruangan"</string>
|
||||
<string name="state_event_room_avatar_changed_by_you">"Anda mengubah avatar ruangan"</string>
|
||||
<string name="state_event_room_avatar_removed">"%1$s menghapus avatar ruangan"</string>
|
||||
<string name="state_event_room_avatar_removed_by_you">"Anda menghapus avatar ruangan"</string>
|
||||
<string name="state_event_room_ban">"%1$s memblokir %2$s"</string>
|
||||
<string name="state_event_room_ban_by_you">"Anda memblokir %1$s"</string>
|
||||
<string name="state_event_room_ban_by_you_with_reason">"Anda mencekal %1$s: %2$s"</string>
|
||||
<string name="state_event_room_ban_with_reason">"%1$s mencekal %2$s: %3$s"</string>
|
||||
<string name="state_event_room_created">"%1$s membuat ruangan"</string>
|
||||
<string name="state_event_room_created_by_you">"Anda membuat ruangan"</string>
|
||||
<string name="state_event_room_invite">"%1$s mengundang %2$s"</string>
|
||||
<string name="state_event_room_invite_accepted">"%1$s menerima undangan"</string>
|
||||
<string name="state_event_room_invite_accepted_by_you">"Anda menerima undangan"</string>
|
||||
<string name="state_event_room_invite_by_you">"Anda mengundang %1$s"</string>
|
||||
<string name="state_event_room_invite_you">"%1$s mengundang Anda"</string>
|
||||
<string name="state_event_room_join">"%1$s bergabung ke ruangan"</string>
|
||||
<string name="state_event_room_join_by_you">"Anda bergabung ke ruangan"</string>
|
||||
<string name="state_event_room_knock">"%1$s meminta untuk bergabung"</string>
|
||||
<string name="state_event_room_knock_accepted">"%1$s memberikan akses kepada %2$s"</string>
|
||||
<string name="state_event_room_knock_accepted_by_you">"Anda memperbolehkan %1$s untuk bergabung"</string>
|
||||
<string name="state_event_room_knock_by_you">"Anda meminta untuk bergabung"</string>
|
||||
<string name="state_event_room_knock_denied">"%1$s menolak permintaan %2$s untuk bergabung"</string>
|
||||
<string name="state_event_room_knock_denied_by_you">"Anda menolak permintaan %1$s untuk bergabung"</string>
|
||||
<string name="state_event_room_knock_denied_you">"%1$s menolak permintaan Anda untuk bergabung"</string>
|
||||
<string name="state_event_room_knock_retracted">"%1$s tidak lagi tertarik untuk bergabung"</string>
|
||||
<string name="state_event_room_knock_retracted_by_you">"Anda membatalkan permintaan sendiri untuk bergabung"</string>
|
||||
<string name="state_event_room_leave">"%1$s meninggalkan ruangan"</string>
|
||||
<string name="state_event_room_leave_by_you">"Anda keluar dari ruangan"</string>
|
||||
<string name="state_event_room_name_changed">"%1$s mengubah nama ruangan menjadi: %2$s"</string>
|
||||
<string name="state_event_room_name_changed_by_you">"Anda mengubah nama ruangan menjadi: %1$s"</string>
|
||||
<string name="state_event_room_name_removed">"%1$s menghapus nama ruangan"</string>
|
||||
<string name="state_event_room_name_removed_by_you">"Anda menghapus nama ruangan"</string>
|
||||
<string name="state_event_room_none">"%1$s tidak membuat perubahan"</string>
|
||||
<string name="state_event_room_none_by_you">"Anda tidak membuat perubahan"</string>
|
||||
<string name="state_event_room_pinned_events_changed">"%1$s mengubah pesan yang disematkan"</string>
|
||||
<string name="state_event_room_pinned_events_changed_by_you">"Anda mengubah pesan yang disematkan"</string>
|
||||
<string name="state_event_room_pinned_events_pinned">"%1$s menyematkan pesan"</string>
|
||||
<string name="state_event_room_pinned_events_pinned_by_you">"Anda menyematkan pesan"</string>
|
||||
<string name="state_event_room_pinned_events_unpinned">"%1$s melepas sematan pesan"</string>
|
||||
<string name="state_event_room_pinned_events_unpinned_by_you">"Anda melepas sematan pesan"</string>
|
||||
<string name="state_event_room_reject">"%1$s menolak undangan"</string>
|
||||
<string name="state_event_room_reject_by_you">"Anda menolak undangan"</string>
|
||||
<string name="state_event_room_remove">"%1$s mengeluarkan %2$s"</string>
|
||||
<string name="state_event_room_remove_by_you">"Anda mengeluarkan %1$s"</string>
|
||||
<string name="state_event_room_remove_by_you_with_reason">"Anda menghapus %1$s: %2$s"</string>
|
||||
<string name="state_event_room_remove_with_reason">"%1$s menghapus %2$s: %3$s"</string>
|
||||
<string name="state_event_room_third_party_invite">"%1$s mengirimkan undangan kepada %2$s untuk bergabung ke ruangan"</string>
|
||||
<string name="state_event_room_third_party_invite_by_you">"Anda mengirimkan undangan kepada %1$s untuk bergabung ke ruangan"</string>
|
||||
<string name="state_event_room_third_party_revoked_invite">"%1$s menghapus undangan kepada %2$s untuk bergabung ke ruangan"</string>
|
||||
<string name="state_event_room_third_party_revoked_invite_by_you">"Anda menghapus undangan kepada %1$s untuk bergabung ke ruangan"</string>
|
||||
<string name="state_event_room_topic_changed">"%1$s mengubah topik menjadi: %2$s"</string>
|
||||
<string name="state_event_room_topic_changed_by_you">"Anda mengubah topik menjadi: %1$s"</string>
|
||||
<string name="state_event_room_topic_removed">"%1$s menghapus topik ruangan"</string>
|
||||
<string name="state_event_room_topic_removed_by_you">"Anda menghapus topik ruangan"</string>
|
||||
<string name="state_event_room_unban">"%1$s membatalkan pemblokiran %2$s"</string>
|
||||
<string name="state_event_room_unban_by_you">"Anda membatalkan pemblokiran %1$s"</string>
|
||||
<string name="state_event_room_unknown_membership_change">"%1$s membuat perubahan keanggotaan yang tidak diketahui"</string>
|
||||
</resources>
|
||||
@@ -0,0 +1,73 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
|
||||
<string name="state_event_avatar_changed_too">"(anche l\'avatar è stato cambiato)"</string>
|
||||
<string name="state_event_avatar_url_changed">"%1$s ha cambiato il proprio avatar"</string>
|
||||
<string name="state_event_avatar_url_changed_by_you">"Hai cambiato il tuo avatar"</string>
|
||||
<string name="state_event_demoted_to_member">"%1$s è stato declassato a membro"</string>
|
||||
<string name="state_event_demoted_to_moderator">"%1$s è stato declassato a moderatore"</string>
|
||||
<string name="state_event_display_name_changed_from">"%1$s ha cambiato il proprio nome visualizzato da %2$s a %3$s"</string>
|
||||
<string name="state_event_display_name_changed_from_by_you">"Hai cambiato il tuo nome visualizzato da %1$s a %2$s"</string>
|
||||
<string name="state_event_display_name_removed">"%1$s ha rimosso il proprio nome visualizzato (era %2$s)"</string>
|
||||
<string name="state_event_display_name_removed_by_you">"Hai rimosso il tuo nome visualizzato (era %1$s)"</string>
|
||||
<string name="state_event_display_name_set">"%1$s ha impostato il proprio nome visualizzato su %2$s"</string>
|
||||
<string name="state_event_display_name_set_by_you">"Hai impostato il tuo nome visualizzato su %1$s"</string>
|
||||
<string name="state_event_promoted_to_administrator">"%1$s è stato promosso amministratore"</string>
|
||||
<string name="state_event_promoted_to_moderator">"%1$s è stato promosso a moderatore"</string>
|
||||
<string name="state_event_room_avatar_changed">"%1$s ha cambiato l\'avatar della stanza"</string>
|
||||
<string name="state_event_room_avatar_changed_by_you">"Hai cambiato l\'avatar della stanza"</string>
|
||||
<string name="state_event_room_avatar_removed">"%1$s ha rimosso l\'avatar della stanza"</string>
|
||||
<string name="state_event_room_avatar_removed_by_you">"Hai rimosso l\'avatar della stanza"</string>
|
||||
<string name="state_event_room_ban">"%1$s ha escluso %2$s"</string>
|
||||
<string name="state_event_room_ban_by_you">"Hai escluso %1$s"</string>
|
||||
<string name="state_event_room_ban_by_you_with_reason">"Hai bannato %1$s: %2$s"</string>
|
||||
<string name="state_event_room_ban_with_reason">"%1$s ha bannato %2$s: %3$s"</string>
|
||||
<string name="state_event_room_created">"%1$s ha creato la stanza"</string>
|
||||
<string name="state_event_room_created_by_you">"Hai creato la stanza"</string>
|
||||
<string name="state_event_room_invite">"%1$s ha invitato %2$s"</string>
|
||||
<string name="state_event_room_invite_accepted">"%1$s ha accettato l\'invito"</string>
|
||||
<string name="state_event_room_invite_accepted_by_you">"Hai accettato l\'invito"</string>
|
||||
<string name="state_event_room_invite_by_you">"Hai invitato %1$s"</string>
|
||||
<string name="state_event_room_invite_you">"%1$s ti ha invitato"</string>
|
||||
<string name="state_event_room_join">"%1$s si è unito alla stanza"</string>
|
||||
<string name="state_event_room_join_by_you">"Ti sei unito alla stanza"</string>
|
||||
<string name="state_event_room_knock">"%1$s ha richiesto di entrare"</string>
|
||||
<string name="state_event_room_knock_accepted">"%1$s ha permesso a %2$s di entrare"</string>
|
||||
<string name="state_event_room_knock_accepted_by_you">"Hai permesso a %1$s di partecipare"</string>
|
||||
<string name="state_event_room_knock_by_you">"Hai richiesto di unirti"</string>
|
||||
<string name="state_event_room_knock_denied">"%1$s ha rifiutato la richiesta di unirsi di %2$s"</string>
|
||||
<string name="state_event_room_knock_denied_by_you">"Hai rifiutato la richiesta di unirsi di %1$s"</string>
|
||||
<string name="state_event_room_knock_denied_you">"%1$s ha rifiutato la tua richiesta di unirti"</string>
|
||||
<string name="state_event_room_knock_retracted">"%1$s non è più interessato a partecipare"</string>
|
||||
<string name="state_event_room_knock_retracted_by_you">"Hai annullato la tua richiesta di unirti"</string>
|
||||
<string name="state_event_room_leave">"%1$s ha lasciato la stanza"</string>
|
||||
<string name="state_event_room_leave_by_you">"Hai lasciato la stanza"</string>
|
||||
<string name="state_event_room_name_changed">"%1$s ha cambiato il nome della stanza in: %2$s"</string>
|
||||
<string name="state_event_room_name_changed_by_you">"Hai cambiato il nome della stanza in: %1$s"</string>
|
||||
<string name="state_event_room_name_removed">"%1$s ha rimosso il nome della stanza"</string>
|
||||
<string name="state_event_room_name_removed_by_you">"Hai rimosso il nome della stanza"</string>
|
||||
<string name="state_event_room_none">"%1$s non ha apportato modifiche"</string>
|
||||
<string name="state_event_room_none_by_you">"Non hai apportato modifiche"</string>
|
||||
<string name="state_event_room_pinned_events_changed">"%1$s ha modificato i messaggi fissati"</string>
|
||||
<string name="state_event_room_pinned_events_changed_by_you">"Hai modificato i messaggi fissati"</string>
|
||||
<string name="state_event_room_pinned_events_pinned">"%1$s ha fissato un messaggio"</string>
|
||||
<string name="state_event_room_pinned_events_pinned_by_you">"Hai fissato un messaggio"</string>
|
||||
<string name="state_event_room_pinned_events_unpinned">"%1$s ha rimosso un messaggio dai fissati"</string>
|
||||
<string name="state_event_room_pinned_events_unpinned_by_you">"Hai rimosso un messaggio dai fissati"</string>
|
||||
<string name="state_event_room_reject">"%1$s ha rifiutato l\'invito"</string>
|
||||
<string name="state_event_room_reject_by_you">"Hai rifiutato l\'invito"</string>
|
||||
<string name="state_event_room_remove">"%1$s ha rimosso %2$s"</string>
|
||||
<string name="state_event_room_remove_by_you">"Hai rimosso %1$s"</string>
|
||||
<string name="state_event_room_remove_by_you_with_reason">"Hai rimosso%1$s: %2$s"</string>
|
||||
<string name="state_event_room_remove_with_reason">"%1$s ha rimosso %2$s: %3$s"</string>
|
||||
<string name="state_event_room_third_party_invite">"%1$s ha inviato un invito a %2$s per unirsi alla stanza"</string>
|
||||
<string name="state_event_room_third_party_invite_by_you">"Hai inviato un invito a %1$s per unirsi alla stanza"</string>
|
||||
<string name="state_event_room_third_party_revoked_invite">"%1$s ha revocato l\'invito di %2$s ad unirsi alla stanza."</string>
|
||||
<string name="state_event_room_third_party_revoked_invite_by_you">"Hai revocato l\'invito a %1$s a unirsi alla stanza"</string>
|
||||
<string name="state_event_room_topic_changed">"%1$s ha cambiato l\'argomento in: %2$s"</string>
|
||||
<string name="state_event_room_topic_changed_by_you">"Hai cambiato l\'argomento in: %1$s"</string>
|
||||
<string name="state_event_room_topic_removed">"%1$s ha rimosso l\'oggetto della stanza"</string>
|
||||
<string name="state_event_room_topic_removed_by_you">"Hai rimosso l\'argomento della stanza"</string>
|
||||
<string name="state_event_room_unban">"%1$s ha sbloccato %2$s"</string>
|
||||
<string name="state_event_room_unban_by_you">"Hai sbloccato %1$s"</string>
|
||||
<string name="state_event_room_unknown_membership_change">"%1$s ha apportato una modifica sconosciuta alla propria presenza nella stanza"</string>
|
||||
</resources>
|
||||
@@ -0,0 +1,63 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
|
||||
<string name="state_event_avatar_changed_too">"(ფოტოც შეიცვალა)"</string>
|
||||
<string name="state_event_avatar_url_changed">"%1$s პროფილის ფოტო შეცვალა"</string>
|
||||
<string name="state_event_avatar_url_changed_by_you">"თქვენ შეცვალეთ პროფილის ფოტო"</string>
|
||||
<string name="state_event_demoted_to_member">"%1$s დაქვეითდა წევრამდე"</string>
|
||||
<string name="state_event_demoted_to_moderator">"%1$s დაქვეითდა მოდერატორამდე"</string>
|
||||
<string name="state_event_display_name_changed_from">"%1$s თავისი ნაჩვენები სახელი შეცვალა %2$s დან %3$s ზე"</string>
|
||||
<string name="state_event_display_name_changed_from_by_you">"თქვენ შეცვალეთ თქვენი ნაჩვენები სახელი %1$s -დან %2$s -ზე"</string>
|
||||
<string name="state_event_display_name_removed">"%1$s წაშალა თავისი ნაჩვენები სახელი (იყო %2$s)"</string>
|
||||
<string name="state_event_display_name_removed_by_you">"თქვენ წაშალეთ ნაჩვენები სახელი (იყო %1$s)"</string>
|
||||
<string name="state_event_display_name_set">"%1$s თავისი ნაჩვენები სახელი შეცვალა %2$s"</string>
|
||||
<string name="state_event_display_name_set_by_you">"თქვენი ახალი ნაჩვენები სახელი - %1$s"</string>
|
||||
<string name="state_event_promoted_to_administrator">"%1$s დაწინაურდა ადმინისტრატორამდე"</string>
|
||||
<string name="state_event_promoted_to_moderator">"%1$s დაწინაურდა მოდერატორამდე"</string>
|
||||
<string name="state_event_room_avatar_changed">"%1$s ოთახის ფოტო შეცვალა"</string>
|
||||
<string name="state_event_room_avatar_changed_by_you">"თქვენ შეცვალეთ ოთახის ფოტო"</string>
|
||||
<string name="state_event_room_avatar_removed">"%1$s წაშალა ოთახის ფოტო"</string>
|
||||
<string name="state_event_room_avatar_removed_by_you">"თქვენ წაშალეთ ოთახის ფოტო"</string>
|
||||
<string name="state_event_room_ban">"%1$s დაბლოკა %2$s"</string>
|
||||
<string name="state_event_room_ban_by_you">"თქვენ დაბლოკეთ %1$s"</string>
|
||||
<string name="state_event_room_created">"%1$s შექმნა ოთახი"</string>
|
||||
<string name="state_event_room_created_by_you">"თქვენ შექმენით ოთახი"</string>
|
||||
<string name="state_event_room_invite">"%1$s მოიწვია %2$s"</string>
|
||||
<string name="state_event_room_invite_accepted">"%1$s მიიღო მოწვევა"</string>
|
||||
<string name="state_event_room_invite_accepted_by_you">"თქვენ მიიღეთ მოწვევა"</string>
|
||||
<string name="state_event_room_invite_by_you">"თქვენ მოიწვიეთ %1$s"</string>
|
||||
<string name="state_event_room_invite_you">"%1$s მოგიწვიათ"</string>
|
||||
<string name="state_event_room_join">"%1$s გაწევრიანდა ოთახში"</string>
|
||||
<string name="state_event_room_join_by_you">"თქვენ გაწევრიანდით ოთახში"</string>
|
||||
<string name="state_event_room_knock">"%1$s გაწევრიანება მოითხოვა"</string>
|
||||
<string name="state_event_room_knock_accepted">"%1$s გაწევრიანების უფლება მისცა %2$s"</string>
|
||||
<string name="state_event_room_knock_accepted_by_you">"თქვენ %1$s გაწევრიანების უფლება მიეცით"</string>
|
||||
<string name="state_event_room_knock_by_you">"თქვენ მოითხოვეთ გაწევრიანება"</string>
|
||||
<string name="state_event_room_knock_denied">"%1$s უარი თქვა %2$s-ს გაწევრიანების მოთხოვნაზე"</string>
|
||||
<string name="state_event_room_knock_denied_by_you">"თქვენ უარი თქვით %1$s გაწევრიანების თხოვნაზე"</string>
|
||||
<string name="state_event_room_knock_denied_you">"%1$s უარი თქვა თქვენს მოთხოვნაზე გაწევრიანების შესახებ"</string>
|
||||
<string name="state_event_room_knock_retracted">"%1$s აღარ არის დაინტერესებული გაწევრიანებით"</string>
|
||||
<string name="state_event_room_knock_retracted_by_you">"თქვენ გააუქმეთ გაწევრიანების მოთხოვნა"</string>
|
||||
<string name="state_event_room_leave">"%1$s დატოვა ოთახი"</string>
|
||||
<string name="state_event_room_leave_by_you">"თქვენ დატოვეთ ოთახი"</string>
|
||||
<string name="state_event_room_name_changed">"%1$s შეცვალა ოთახის სახელი: %2$s"</string>
|
||||
<string name="state_event_room_name_changed_by_you">"თქვენ შეცვალეთ ოთახის სახელი: %1$s"</string>
|
||||
<string name="state_event_room_name_removed">"%1$s წაშალა ოთახის სახელი"</string>
|
||||
<string name="state_event_room_name_removed_by_you">"თქვენ წაშალეთ ოთახის სახელი"</string>
|
||||
<string name="state_event_room_none">"%1$s ცვლილებები არ შეიტანა"</string>
|
||||
<string name="state_event_room_none_by_you">"თქვენ არაფერი არ შეგიცვლიათ"</string>
|
||||
<string name="state_event_room_reject">"%1$s მოწვევაზე უარი თქვა"</string>
|
||||
<string name="state_event_room_reject_by_you">"თქვენ უარი თქვით მოწვევაზე"</string>
|
||||
<string name="state_event_room_remove">"%1$s გააგდო %2$s"</string>
|
||||
<string name="state_event_room_remove_by_you">"თქვენ გააგდეთ %1$s"</string>
|
||||
<string name="state_event_room_third_party_invite">"%1$s მოიწვია %2$s ოთახში"</string>
|
||||
<string name="state_event_room_third_party_invite_by_you">"თქვენ მოიწვიეთ %1$s ოთახში"</string>
|
||||
<string name="state_event_room_third_party_revoked_invite">"%1$s გააუქმო %2$s-ს ოთახში მოწვევა"</string>
|
||||
<string name="state_event_room_third_party_revoked_invite_by_you">"თქვენ %1$s-ს ოთახში მოწვევა გააუქმეთ"</string>
|
||||
<string name="state_event_room_topic_changed">"%1$s შეცვალა თემა: %2$s"</string>
|
||||
<string name="state_event_room_topic_changed_by_you">"თქვენ შეცვალეთ თემა: %1$s"</string>
|
||||
<string name="state_event_room_topic_removed">"%1$s წაშალა ოთახის თემა"</string>
|
||||
<string name="state_event_room_topic_removed_by_you">"თქვენ წაშალეთ ოთახის თემა"</string>
|
||||
<string name="state_event_room_unban">"%1$s განბლოკა %2$s"</string>
|
||||
<string name="state_event_room_unban_by_you">"თქვენ განბლოკეთ %1$s"</string>
|
||||
<string name="state_event_room_unknown_membership_change">"%1$s უცნობი ცვლილება შეიტანა თავის წევრობაში"</string>
|
||||
</resources>
|
||||
@@ -0,0 +1,73 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
|
||||
<string name="state_event_avatar_changed_too">"(프로필 사진도 변경됨)"</string>
|
||||
<string name="state_event_avatar_url_changed">"%1$s님이 프로필 사진을 변경함"</string>
|
||||
<string name="state_event_avatar_url_changed_by_you">"프로필 사진을 변경함"</string>
|
||||
<string name="state_event_demoted_to_member">"%1$s 회원으로 강등되었습니다"</string>
|
||||
<string name="state_event_demoted_to_moderator">"%1$s 중재자로 강등되었습니다"</string>
|
||||
<string name="state_event_display_name_changed_from">"%1$s님이 표시 이름을 %2$s에서 %3$s(으)로 변경했습니다."</string>
|
||||
<string name="state_event_display_name_changed_from_by_you">"표시 이름을 %1$s에서 %2$s(으)로 변경했습니다"</string>
|
||||
<string name="state_event_display_name_removed">"%1$s님이 표시 이름을 제거했습니다 (이전 이름 %2$s)"</string>
|
||||
<string name="state_event_display_name_removed_by_you">"표시 이름을 제거했습니다 (이전 이름 %1$s)"</string>
|
||||
<string name="state_event_display_name_set">"%1$s님이 표시되는 이름을 %2$s(으)로 변경함"</string>
|
||||
<string name="state_event_display_name_set_by_you">"%1$s(으)로 표시되는 이름을 변경함"</string>
|
||||
<string name="state_event_promoted_to_administrator">"%1$s 는 관리자로 승진되었습니다"</string>
|
||||
<string name="state_event_promoted_to_moderator">"%1$s 는 중재자로 승진되었습니다"</string>
|
||||
<string name="state_event_room_avatar_changed">"%1$s님이 방 아바타를 변경함"</string>
|
||||
<string name="state_event_room_avatar_changed_by_you">"방 아바타를 변경함"</string>
|
||||
<string name="state_event_room_avatar_removed">"%1$s님이 방 아바타를 삭제함"</string>
|
||||
<string name="state_event_room_avatar_removed_by_you">"방 아바타를 삭제함"</string>
|
||||
<string name="state_event_room_ban">"%1$s님이 %2$s님을 차단함"</string>
|
||||
<string name="state_event_room_ban_by_you">"%1$s님을 차단함"</string>
|
||||
<string name="state_event_room_ban_by_you_with_reason">"당신은 차단했습니다 %1$s: %2$s"</string>
|
||||
<string name="state_event_room_ban_with_reason">"%1$s 차단됨 %2$s: %3$s"</string>
|
||||
<string name="state_event_room_created">"%1$s님이 방을 생성함"</string>
|
||||
<string name="state_event_room_created_by_you">"방을 생성함"</string>
|
||||
<string name="state_event_room_invite">"%1$s님이 %2$s님을 초대함"</string>
|
||||
<string name="state_event_room_invite_accepted">"%1$s님이 초대를 수락함"</string>
|
||||
<string name="state_event_room_invite_accepted_by_you">"초대를 수락함"</string>
|
||||
<string name="state_event_room_invite_by_you">"%1$s님을 초대함"</string>
|
||||
<string name="state_event_room_invite_you">"%1$s님으로부터 초대받음"</string>
|
||||
<string name="state_event_room_join">"%1$s님이 방에 참석함"</string>
|
||||
<string name="state_event_room_join_by_you">"방에 참석함"</string>
|
||||
<string name="state_event_room_knock">"%1$s님이 참가를 요청함"</string>
|
||||
<string name="state_event_room_knock_accepted">"%1$s님이 %2$s님의 참가를 승인함"</string>
|
||||
<string name="state_event_room_knock_accepted_by_you">"%1$s님이 참가를 승인함"</string>
|
||||
<string name="state_event_room_knock_by_you">"참가를 요청함"</string>
|
||||
<string name="state_event_room_knock_denied">"%1$s이 %2$s의 참가 요청을 거절함"</string>
|
||||
<string name="state_event_room_knock_denied_by_you">"%1$s님의 가입 요청을 거부했습니다."</string>
|
||||
<string name="state_event_room_knock_denied_you">"%1$s님의 가입 요청을 거부했습니다"</string>
|
||||
<string name="state_event_room_knock_retracted">"%1$s이 참가 요청에 관심이 없음"</string>
|
||||
<string name="state_event_room_knock_retracted_by_you">"참가 요청을 거부함"</string>
|
||||
<string name="state_event_room_leave">"%1$s님이 방을 떠남"</string>
|
||||
<string name="state_event_room_leave_by_you">"방을 떠남"</string>
|
||||
<string name="state_event_room_name_changed">"%1$s님이 방 이름을 변경함: %2$s"</string>
|
||||
<string name="state_event_room_name_changed_by_you">"방 이름을 변경함: %1$s"</string>
|
||||
<string name="state_event_room_name_removed">"%1$s님이 방 이름을 삭제함"</string>
|
||||
<string name="state_event_room_name_removed_by_you">"방 이름을 삭제함"</string>
|
||||
<string name="state_event_room_none">"%1$s 변경 사항 없음"</string>
|
||||
<string name="state_event_room_none_by_you">"변경 사항이 없습니다."</string>
|
||||
<string name="state_event_room_pinned_events_changed">"%1$s 고정된 메시지가 변경되었습니다."</string>
|
||||
<string name="state_event_room_pinned_events_changed_by_you">"고정된 메시지가 변경되었습니다"</string>
|
||||
<string name="state_event_room_pinned_events_pinned">"%1$s 메시지 고정"</string>
|
||||
<string name="state_event_room_pinned_events_pinned_by_you">"당신은 메시지를 고정했습니다."</string>
|
||||
<string name="state_event_room_pinned_events_unpinned">"%1$s 메시지 고정 해제"</string>
|
||||
<string name="state_event_room_pinned_events_unpinned_by_you">"당신은 메시지 고정 해제"</string>
|
||||
<string name="state_event_room_reject">"%1$s님이 초대를 거부함"</string>
|
||||
<string name="state_event_room_reject_by_you">"초대를 거부함"</string>
|
||||
<string name="state_event_room_remove">"%1$s님이 %2$s님을 제거함"</string>
|
||||
<string name="state_event_room_remove_by_you">"%1$s님을 제거함"</string>
|
||||
<string name="state_event_room_remove_by_you_with_reason">"제거했습니다 %1$s :%2$s"</string>
|
||||
<string name="state_event_room_remove_with_reason">"%1$s 제거됨 %2$s : %3$s"</string>
|
||||
<string name="state_event_room_third_party_invite">"%1$s님이 %2$s에게 초대를 보냄"</string>
|
||||
<string name="state_event_room_third_party_invite_by_you">"%1$s님에게 초대를 보냄"</string>
|
||||
<string name="state_event_room_third_party_revoked_invite">"%1$s님이 %2$s의 초대를 회수함"</string>
|
||||
<string name="state_event_room_third_party_revoked_invite_by_you">"%1$s의 초대를 회수함"</string>
|
||||
<string name="state_event_room_topic_changed">"%1$s님이 주제를 %2$s으로 변경했습니다."</string>
|
||||
<string name="state_event_room_topic_changed_by_you">"주제 변경함: %1$s"</string>
|
||||
<string name="state_event_room_topic_removed">"%1$s님이 방 주제를 삭제함"</string>
|
||||
<string name="state_event_room_topic_removed_by_you">"방 주제를 삭제함"</string>
|
||||
<string name="state_event_room_unban">"%1$s님이 %2$s님의 차단을 해제함"</string>
|
||||
<string name="state_event_room_unban_by_you">"%1$s님의 차단을 해제함"</string>
|
||||
<string name="state_event_room_unknown_membership_change">"%1$s님이 멤버십에 알려지지 않은 변경 사항을 만들었습니다."</string>
|
||||
</resources>
|
||||
@@ -0,0 +1,57 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
|
||||
<string name="state_event_avatar_changed_too">"(taip pat buvo pakeistas ir avataras)"</string>
|
||||
<string name="state_event_avatar_url_changed">"%1$s pakeitė savo avatarą"</string>
|
||||
<string name="state_event_avatar_url_changed_by_you">"Jūs pakeitėte savo avatarą"</string>
|
||||
<string name="state_event_display_name_changed_from">"%1$s pakeitė savo slapyvardį iš %2$s į %3$s"</string>
|
||||
<string name="state_event_display_name_changed_from_by_you">"Jūs pakeitėte savo slapyvardį iš %1$s į %2$s"</string>
|
||||
<string name="state_event_display_name_removed">"%1$s pašalino savo slapyvardį (jis buvo %2$s)"</string>
|
||||
<string name="state_event_display_name_removed_by_you">"Jūs pašalinote savo slapyvardį (jis buvo %1$s)"</string>
|
||||
<string name="state_event_display_name_set">"%1$s pakeitė savo slapyvardį į %2$s"</string>
|
||||
<string name="state_event_display_name_set_by_you">"Jūs nustatėte savo slapyvardį į %1$s"</string>
|
||||
<string name="state_event_room_avatar_changed">"%1$s pakeitė kambario avatarą"</string>
|
||||
<string name="state_event_room_avatar_changed_by_you">"Jūs pakeitėte kambario avatarą"</string>
|
||||
<string name="state_event_room_avatar_removed">"%1$s pašalino kambario avatarą"</string>
|
||||
<string name="state_event_room_avatar_removed_by_you">"Jūs pašalinote kambario avatarą"</string>
|
||||
<string name="state_event_room_ban">"%1$s uždraudė %2$s"</string>
|
||||
<string name="state_event_room_ban_by_you">"Jūs uždraudėte %1$s"</string>
|
||||
<string name="state_event_room_created">"%1$s sukūrė kambarį"</string>
|
||||
<string name="state_event_room_created_by_you">"Jūs sukūrėte kambarį"</string>
|
||||
<string name="state_event_room_invite">"%1$s pakvietė %2$s"</string>
|
||||
<string name="state_event_room_invite_accepted">"%1$s priėmė kvietimą"</string>
|
||||
<string name="state_event_room_invite_accepted_by_you">"Priėmėte kvietimą"</string>
|
||||
<string name="state_event_room_invite_by_you">"Jūs pakvietėte %1$s"</string>
|
||||
<string name="state_event_room_invite_you">"%1$s pakvietė Jus"</string>
|
||||
<string name="state_event_room_join">"%1$s prisijungė prie kambario"</string>
|
||||
<string name="state_event_room_join_by_you">"Jūs prisijungėte prie kambario"</string>
|
||||
<string name="state_event_room_knock">"%1$s prašo prisijungti"</string>
|
||||
<string name="state_event_room_knock_accepted">"%1$s suteikė prieigą %2$s"</string>
|
||||
<string name="state_event_room_knock_accepted_by_you">"Jūs leidote %1$s prisijungti"</string>
|
||||
<string name="state_event_room_knock_by_you">"Jūs paprašėte prisijungti"</string>
|
||||
<string name="state_event_room_knock_denied">"%1$s atmetė %2$s prisijungimo prašymą"</string>
|
||||
<string name="state_event_room_knock_denied_by_you">"Jūs atmetėte %1$s prisijungimo prašymą"</string>
|
||||
<string name="state_event_room_knock_denied_you">"%1$s atmetė Jūsų prisijungimo prašymą"</string>
|
||||
<string name="state_event_room_knock_retracted">"%1$s nebenori prisijungti"</string>
|
||||
<string name="state_event_room_knock_retracted_by_you">"Jūs atšaukėte savo prisijungimo prašymą"</string>
|
||||
<string name="state_event_room_leave">"%1$s išėjo iš kambario"</string>
|
||||
<string name="state_event_room_leave_by_you">"Jūs išėjote iš kambario"</string>
|
||||
<string name="state_event_room_name_changed">"%1$s pakeitė kambario pavadinimą į: %2$s"</string>
|
||||
<string name="state_event_room_name_changed_by_you">"Pakeitėte kambario pavadinimą į: %1$s"</string>
|
||||
<string name="state_event_room_name_removed">"%1$s pašalino kambario pavadinimą"</string>
|
||||
<string name="state_event_room_name_removed_by_you">"Jūs pašalinote kambario pavadinimą"</string>
|
||||
<string name="state_event_room_reject">"%1$s atmetė kvietimą"</string>
|
||||
<string name="state_event_room_reject_by_you">"Jūs atmetėte kvietimą"</string>
|
||||
<string name="state_event_room_remove">"%1$s pašalino %2$s"</string>
|
||||
<string name="state_event_room_remove_by_you">"Jūs pašalinote %1$s"</string>
|
||||
<string name="state_event_room_third_party_invite">"%1$s išsiuntė kvietimą %2$s prisijungti prie kambario"</string>
|
||||
<string name="state_event_room_third_party_invite_by_you">"Išsiuntėte kvietimą %1$s prisijungti prie kambario"</string>
|
||||
<string name="state_event_room_third_party_revoked_invite">"%1$s atšaukė kvietimą %2$s prisijungti prie kambario"</string>
|
||||
<string name="state_event_room_third_party_revoked_invite_by_you">"Jūs atšaukėte kvietimą %1$s prisijungti prie kambario"</string>
|
||||
<string name="state_event_room_topic_changed">"%1$s pakeitė temą į: %2$s"</string>
|
||||
<string name="state_event_room_topic_changed_by_you">"Pakeitėte temą į: %1$s"</string>
|
||||
<string name="state_event_room_topic_removed">"%1$s pašalino kambario temą"</string>
|
||||
<string name="state_event_room_topic_removed_by_you">"Jūs pašalinote kambario temą"</string>
|
||||
<string name="state_event_room_unban">"%1$s panaikino uždraudimą %2$s"</string>
|
||||
<string name="state_event_room_unban_by_you">"Jūs panaikinote uždraudimą %1$s"</string>
|
||||
<string name="state_event_room_unknown_membership_change">"%1$s padarė nežinomą savo narystės pakeitimą"</string>
|
||||
</resources>
|
||||
@@ -0,0 +1,73 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
|
||||
<string name="state_event_avatar_changed_too">"(avataren ble også endret)"</string>
|
||||
<string name="state_event_avatar_url_changed">"%1$s endret avatarene sine"</string>
|
||||
<string name="state_event_avatar_url_changed_by_you">"Du endret avataren din"</string>
|
||||
<string name="state_event_demoted_to_member">"%1$s ble degradert til medlem"</string>
|
||||
<string name="state_event_demoted_to_moderator">"%1$s ble degradert til moderator"</string>
|
||||
<string name="state_event_display_name_changed_from">"%1$s endret visningsnavnet fra %2$s til %3$s"</string>
|
||||
<string name="state_event_display_name_changed_from_by_you">"Du endret visningsnavnet ditt fra %1$s til %2$s"</string>
|
||||
<string name="state_event_display_name_removed">"%1$s fjernet visningsnavnet sitt (det var %2$s)"</string>
|
||||
<string name="state_event_display_name_removed_by_you">"Du har fjernet visningsnavnet ditt (det var %1$s)"</string>
|
||||
<string name="state_event_display_name_set">"%1$s satte deres visningsnavn til %2$s"</string>
|
||||
<string name="state_event_display_name_set_by_you">"Du satt visningsnavnet ditt til %1$s"</string>
|
||||
<string name="state_event_promoted_to_administrator">"%1$s ble forfremmet til administrator"</string>
|
||||
<string name="state_event_promoted_to_moderator">"%1$s ble forfremmet til moderator"</string>
|
||||
<string name="state_event_room_avatar_changed">"%1$s endret romavataren"</string>
|
||||
<string name="state_event_room_avatar_changed_by_you">"Du endret rommets avatar"</string>
|
||||
<string name="state_event_room_avatar_removed">"%1$s fjernet romavataren"</string>
|
||||
<string name="state_event_room_avatar_removed_by_you">"Du fjernet romavataren"</string>
|
||||
<string name="state_event_room_ban">"%1$s utestengte %2$s"</string>
|
||||
<string name="state_event_room_ban_by_you">"Du utestengte %1$s"</string>
|
||||
<string name="state_event_room_ban_by_you_with_reason">"Du utestengte %1$s: %2$s"</string>
|
||||
<string name="state_event_room_ban_with_reason">"%1$s utestengte %2$s: %3$s"</string>
|
||||
<string name="state_event_room_created">"%1$s opprettet rommet"</string>
|
||||
<string name="state_event_room_created_by_you">"Du opprettet rommet"</string>
|
||||
<string name="state_event_room_invite">"%1$s inviterte %2$s"</string>
|
||||
<string name="state_event_room_invite_accepted">"%1$s takket ja til invitasjonen"</string>
|
||||
<string name="state_event_room_invite_accepted_by_you">"Du takket ja til invitasjonen"</string>
|
||||
<string name="state_event_room_invite_by_you">"Du inviterte %1$s"</string>
|
||||
<string name="state_event_room_invite_you">"%1$s inviterte deg"</string>
|
||||
<string name="state_event_room_join">"%1$s ble med i rommet"</string>
|
||||
<string name="state_event_room_join_by_you">"Du ble med i rommet"</string>
|
||||
<string name="state_event_room_knock">"%1$s ber om å få bli med"</string>
|
||||
<string name="state_event_room_knock_accepted">"%1$s ga tilgang til %2$s"</string>
|
||||
<string name="state_event_room_knock_accepted_by_you">"Du tillot %1$s å bli med"</string>
|
||||
<string name="state_event_room_knock_by_you">"Du har bedt om å bli med"</string>
|
||||
<string name="state_event_room_knock_denied">"%1$s avslo %2$s\'s forespørsel om å bli med"</string>
|
||||
<string name="state_event_room_knock_denied_by_you">"Du avviste%1$s sin forespørsel om å bli med"</string>
|
||||
<string name="state_event_room_knock_denied_you">"%1$s avviste forespørselen din om å bli med"</string>
|
||||
<string name="state_event_room_knock_retracted">"%1$s er ikke lenger interessert i å bli med"</string>
|
||||
<string name="state_event_room_knock_retracted_by_you">"Du kansellerte forespørselen din om å bli med"</string>
|
||||
<string name="state_event_room_leave">"%1$s forlot rommet"</string>
|
||||
<string name="state_event_room_leave_by_you">"Du forlot rommet"</string>
|
||||
<string name="state_event_room_name_changed">"%1$s endret romnavnet til: %2$s"</string>
|
||||
<string name="state_event_room_name_changed_by_you">"Du endret romnavnet til: %1$s"</string>
|
||||
<string name="state_event_room_name_removed">"%1$s fjernet romnavnet"</string>
|
||||
<string name="state_event_room_name_removed_by_you">"Du fjernet romnavnet"</string>
|
||||
<string name="state_event_room_none">"%1$s gjorde ingen endringer"</string>
|
||||
<string name="state_event_room_none_by_you">"Du har ikke gjort noen endringer"</string>
|
||||
<string name="state_event_room_pinned_events_changed">"%1$s endret de festede meldingene"</string>
|
||||
<string name="state_event_room_pinned_events_changed_by_you">"Du endret de festede meldingene"</string>
|
||||
<string name="state_event_room_pinned_events_pinned">"%1$s festet en melding"</string>
|
||||
<string name="state_event_room_pinned_events_pinned_by_you">"Du festet en melding"</string>
|
||||
<string name="state_event_room_pinned_events_unpinned">"%1$s løsnet en melding"</string>
|
||||
<string name="state_event_room_pinned_events_unpinned_by_you">"Du løsnet en melding"</string>
|
||||
<string name="state_event_room_reject">"%1$s avviste invitasjonen"</string>
|
||||
<string name="state_event_room_reject_by_you">"Du avviste invitasjonen"</string>
|
||||
<string name="state_event_room_remove">"%1$s fjernet %2$s"</string>
|
||||
<string name="state_event_room_remove_by_you">"Du fjernet %1$s"</string>
|
||||
<string name="state_event_room_remove_by_you_with_reason">"Du fjernet %1$s: %2$s"</string>
|
||||
<string name="state_event_room_remove_with_reason">"%1$s fjernet %2$s: %3$s"</string>
|
||||
<string name="state_event_room_third_party_invite">"%1$s sendte en invitasjon til %2$s om å bli med i rommet"</string>
|
||||
<string name="state_event_room_third_party_invite_by_you">"Du sendte en invitasjon til %1$s om å bli med i rommet"</string>
|
||||
<string name="state_event_room_third_party_revoked_invite">"%1$s trakk tilbake invitasjonen til %2$s om å delta i rommet"</string>
|
||||
<string name="state_event_room_third_party_revoked_invite_by_you">"Du trakk tilbake invitasjonen til %1$s til å bli med i rommet"</string>
|
||||
<string name="state_event_room_topic_changed">"%1$s endret emnet til: %2$s"</string>
|
||||
<string name="state_event_room_topic_changed_by_you">"Du endret emnet til: %1$s"</string>
|
||||
<string name="state_event_room_topic_removed">"%1$s fjernet rommets emne"</string>
|
||||
<string name="state_event_room_topic_removed_by_you">"Du fjernet rommets emne"</string>
|
||||
<string name="state_event_room_unban">"%1$s opphevet utestengelse av %2$s"</string>
|
||||
<string name="state_event_room_unban_by_you">"Du opphevet utestengelsen av %1$s"</string>
|
||||
<string name="state_event_room_unknown_membership_change">"%1$s gjort en ukjent endring i medlemskapet"</string>
|
||||
</resources>
|
||||
@@ -0,0 +1,69 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
|
||||
<string name="state_event_avatar_changed_too">"(afbeelding is ook gewijzigd)"</string>
|
||||
<string name="state_event_avatar_url_changed">"%1$s wijzigde van afbeelding"</string>
|
||||
<string name="state_event_avatar_url_changed_by_you">"Je hebt je afbeelding gewijzigd"</string>
|
||||
<string name="state_event_demoted_to_member">"%1$s werd gedegradeerd tot lid"</string>
|
||||
<string name="state_event_demoted_to_moderator">"%1$s werd gedegradeerd tot moderator"</string>
|
||||
<string name="state_event_display_name_changed_from">"%1$s heeft de weergavenaam aangepast van %2$s naar %3$s"</string>
|
||||
<string name="state_event_display_name_changed_from_by_you">"Je hebt je weergavenaam aangepast van %1$s naar %2$s"</string>
|
||||
<string name="state_event_display_name_removed">"%1$s heeft de weergavenaam verwijderd (dit was %2$s)"</string>
|
||||
<string name="state_event_display_name_removed_by_you">"Je hebt je weergavenaam verwijderd (dit was %1$s)"</string>
|
||||
<string name="state_event_display_name_set">"%1$s heeft de weergavenaam %2$s aangenomen"</string>
|
||||
<string name="state_event_display_name_set_by_you">"Je hebt de weergavenaam %1$s aangenomen"</string>
|
||||
<string name="state_event_promoted_to_administrator">"%1$s werd bevorderd tot beheerder"</string>
|
||||
<string name="state_event_promoted_to_moderator">"%1$s werd bevorderd tot moderator"</string>
|
||||
<string name="state_event_room_avatar_changed">"%1$s heeft de kamerafbeelding gewijzigd"</string>
|
||||
<string name="state_event_room_avatar_changed_by_you">"Je hebt de kamerafbeelding gewijzigd"</string>
|
||||
<string name="state_event_room_avatar_removed">"%1$s heeft de kamerafbeelding verwijderd"</string>
|
||||
<string name="state_event_room_avatar_removed_by_you">"Je hebt de kamerafbeelding verwijderd"</string>
|
||||
<string name="state_event_room_ban">"%1$s heeft %2$s verbannen"</string>
|
||||
<string name="state_event_room_ban_by_you">"Je hebt %1$s verbannen"</string>
|
||||
<string name="state_event_room_created">"%1$s heeft de kamer gemaakt"</string>
|
||||
<string name="state_event_room_created_by_you">"Je hebt de kamer gemaakt"</string>
|
||||
<string name="state_event_room_invite">"%1$s heeft %2$s uitgenodigd"</string>
|
||||
<string name="state_event_room_invite_accepted">"%1$s heeft de uitnodiging geaccepteerd"</string>
|
||||
<string name="state_event_room_invite_accepted_by_you">"Je hebt de uitnodiging geaccepteerd"</string>
|
||||
<string name="state_event_room_invite_by_you">"Jij hebt %1$s uitgenodigd"</string>
|
||||
<string name="state_event_room_invite_you">"%1$s heeft je uitgenodigd"</string>
|
||||
<string name="state_event_room_join">"%1$s is tot de kamer toegetreden"</string>
|
||||
<string name="state_event_room_join_by_you">"Je bent toegetreden tot de kamer"</string>
|
||||
<string name="state_event_room_knock">"%1$s vraagt om toe te treden"</string>
|
||||
<string name="state_event_room_knock_accepted">"%1$s heeft %2$s toegang verleend"</string>
|
||||
<string name="state_event_room_knock_accepted_by_you">"Je hebt %1$s toegestaan toe te treden"</string>
|
||||
<string name="state_event_room_knock_by_you">"Je hebt gevraagd om toe te treden"</string>
|
||||
<string name="state_event_room_knock_denied">"%1$s heeft %2$s\'s verzoek om toe te treden afgewezen"</string>
|
||||
<string name="state_event_room_knock_denied_by_you">"Je hebt %1$s\'s verzoek om toe te treden afgewezen"</string>
|
||||
<string name="state_event_room_knock_denied_you">"%1$s heeft je verzoek om toe te treden afgewezen"</string>
|
||||
<string name="state_event_room_knock_retracted">"%1$s wil niet meer toetreden"</string>
|
||||
<string name="state_event_room_knock_retracted_by_you">"Je hebt je verzoek om toe te treden geannuleerd"</string>
|
||||
<string name="state_event_room_leave">"%1$s verliet de kamer"</string>
|
||||
<string name="state_event_room_leave_by_you">"Je hebt de kamer verlaten"</string>
|
||||
<string name="state_event_room_name_changed">"%1$s heeft de kamernaam gewijzigd naar: %2$s"</string>
|
||||
<string name="state_event_room_name_changed_by_you">"Je hebt de kamernaam gewijzigd naar: %1$s"</string>
|
||||
<string name="state_event_room_name_removed">"%1$s heeft de kamernaam verwijderd"</string>
|
||||
<string name="state_event_room_name_removed_by_you">"Je hebt de kamernaam verwijderd"</string>
|
||||
<string name="state_event_room_none">"%1$s heeft geen wijzigingen aangebracht"</string>
|
||||
<string name="state_event_room_none_by_you">"Je hebt geen wijzigingen aangebracht"</string>
|
||||
<string name="state_event_room_pinned_events_changed">"%1$s heeft de vastgezette berichten gewijzigd"</string>
|
||||
<string name="state_event_room_pinned_events_changed_by_you">"Je hebt de vastgezette berichten gewijzigd"</string>
|
||||
<string name="state_event_room_pinned_events_pinned">"%1$s heeft een bericht vastgezet"</string>
|
||||
<string name="state_event_room_pinned_events_pinned_by_you">"Je hebt een bericht vastgezet"</string>
|
||||
<string name="state_event_room_pinned_events_unpinned">"%1$s heeft een bericht losgemaakt"</string>
|
||||
<string name="state_event_room_pinned_events_unpinned_by_you">"Je hebt een bericht losgemaakt"</string>
|
||||
<string name="state_event_room_reject">"%1$s heeft de uitnodiging afgewezen"</string>
|
||||
<string name="state_event_room_reject_by_you">"Je hebt de uitnodiging afgewezen"</string>
|
||||
<string name="state_event_room_remove">"%1$s heeft %2$s verwijderd"</string>
|
||||
<string name="state_event_room_remove_by_you">"Je hebt %1$s verwijderd"</string>
|
||||
<string name="state_event_room_third_party_invite">"%1$s heeft %2$s in deze kamer uitgenodigd"</string>
|
||||
<string name="state_event_room_third_party_invite_by_you">"Je hebt %1$s in deze kamer uitgenodigd"</string>
|
||||
<string name="state_event_room_third_party_revoked_invite">"%1$s heeft de uitnodiging aan %2$s om toe te treden tot de kamer ingetrokken"</string>
|
||||
<string name="state_event_room_third_party_revoked_invite_by_you">"Je hebt de uitnodiging aan %1$s om toe te treden tot de kamer ingetrokken"</string>
|
||||
<string name="state_event_room_topic_changed">"%1$s heeft het onderwerp gewijzigd naar: %2$s"</string>
|
||||
<string name="state_event_room_topic_changed_by_you">"Je hebt het onderwerp gewijzigd naar: %1$s"</string>
|
||||
<string name="state_event_room_topic_removed">"%1$s heeft het kameronderwerp verwijderd"</string>
|
||||
<string name="state_event_room_topic_removed_by_you">"Je hebt het kamerondewerp verwijderd"</string>
|
||||
<string name="state_event_room_unban">"%1$s heeft %2$s ontbannen"</string>
|
||||
<string name="state_event_room_unban_by_you">"Jij hebt %1$s ontbannen"</string>
|
||||
<string name="state_event_room_unknown_membership_change">"%1$s heeft een onbekende lidmaatschapswijziging"</string>
|
||||
</resources>
|
||||
@@ -0,0 +1,73 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
|
||||
<string name="state_event_avatar_changed_too">"(zdjęcie profilowe też zostało zmienione)"</string>
|
||||
<string name="state_event_avatar_url_changed">"%1$s zmienił swoje zdjęcie profilowe"</string>
|
||||
<string name="state_event_avatar_url_changed_by_you">"Zmieniłeś swoje zdjęcie profilowe"</string>
|
||||
<string name="state_event_demoted_to_member">"%1$s został zdegradowany do członka"</string>
|
||||
<string name="state_event_demoted_to_moderator">"%1$s został zdegradowany do moderatora"</string>
|
||||
<string name="state_event_display_name_changed_from">"%1$s zmienił swoją wyświetlaną nazwę z %2$s na %3$s"</string>
|
||||
<string name="state_event_display_name_changed_from_by_you">"Zmieniłeś swoją wyświetlaną nazwę z %1$s na %2$s"</string>
|
||||
<string name="state_event_display_name_removed">"%1$s usunął swoją wyświetlaną nazwę (byo to %2$s)"</string>
|
||||
<string name="state_event_display_name_removed_by_you">"Usunąłeś swoją wyświetlaną nazwę (było to %1$s)"</string>
|
||||
<string name="state_event_display_name_set">"%1$s ustawił swoją wyświetlaną nazwę na %2$s"</string>
|
||||
<string name="state_event_display_name_set_by_you">"Ustawiłeś swoją wyświetlaną nazwę na %1$s"</string>
|
||||
<string name="state_event_promoted_to_administrator">"%1$s został awansowany na administratora"</string>
|
||||
<string name="state_event_promoted_to_moderator">"%1$s został awansowany na moderatora"</string>
|
||||
<string name="state_event_room_avatar_changed">"%1$s zmienił zdjęcie profilowe pokoju"</string>
|
||||
<string name="state_event_room_avatar_changed_by_you">"Zmieniłeś zdjęcie profilowe pokoju"</string>
|
||||
<string name="state_event_room_avatar_removed">"%1$s usunął zdjęcie profilowe pokoju"</string>
|
||||
<string name="state_event_room_avatar_removed_by_you">"Usunąłeś zdjęcie profilowe pokoju"</string>
|
||||
<string name="state_event_room_ban">"%1$s zbanował %2$s"</string>
|
||||
<string name="state_event_room_ban_by_you">"Zbanowałeś %1$s"</string>
|
||||
<string name="state_event_room_ban_by_you_with_reason">"Zbanowałeś %1$s: %2$s"</string>
|
||||
<string name="state_event_room_ban_with_reason">"%1$s zbanował %2$s: %3$s"</string>
|
||||
<string name="state_event_room_created">"%1$s stworzył pokój"</string>
|
||||
<string name="state_event_room_created_by_you">"Stworzyłeś pokój"</string>
|
||||
<string name="state_event_room_invite">"%1$s zaprosił %2$s"</string>
|
||||
<string name="state_event_room_invite_accepted">"%1$s zaakceptował zaproszenie"</string>
|
||||
<string name="state_event_room_invite_accepted_by_you">"Zaakceptowałeś zaproszenie"</string>
|
||||
<string name="state_event_room_invite_by_you">"Zaprosiłeś %1$s"</string>
|
||||
<string name="state_event_room_invite_you">"%1$s zaprosił Cię"</string>
|
||||
<string name="state_event_room_join">"%1$s dołączył do pokoju"</string>
|
||||
<string name="state_event_room_join_by_you">"Dołączyłeś(aś) do pokoju"</string>
|
||||
<string name="state_event_room_knock">"%1$s prosi o możliwość dołączenia"</string>
|
||||
<string name="state_event_room_knock_accepted">"%1$s zezwolił %2$s na dołączenie"</string>
|
||||
<string name="state_event_room_knock_accepted_by_you">"Zezwoliłeś %1$s na dołączenie"</string>
|
||||
<string name="state_event_room_knock_by_you">"Poprosiłeś o możliwość dołączenia"</string>
|
||||
<string name="state_event_room_knock_denied">"%1$s odrzucił prośbę %2$s o dołączenie"</string>
|
||||
<string name="state_event_room_knock_denied_by_you">"Odrzuciłeś prośbę %1$s o dołączenie"</string>
|
||||
<string name="state_event_room_knock_denied_you">"%1$s odrzucił Twoją prośbę o dołączenie"</string>
|
||||
<string name="state_event_room_knock_retracted">"%1$s nie jest już zainteresowany dołączeniem"</string>
|
||||
<string name="state_event_room_knock_retracted_by_you">"Anulowałeś prośbę o dołączenie"</string>
|
||||
<string name="state_event_room_leave">"%1$s opuścił pokój"</string>
|
||||
<string name="state_event_room_leave_by_you">"Opuściłeś pokój"</string>
|
||||
<string name="state_event_room_name_changed">"%1$s zmienił nazwę pokoju na: %2$s"</string>
|
||||
<string name="state_event_room_name_changed_by_you">"Zmieniłeś nazwę pokoju na: %1$s"</string>
|
||||
<string name="state_event_room_name_removed">"%1$s usunął nazwę pokoju"</string>
|
||||
<string name="state_event_room_name_removed_by_you">"Usunąłeś nazwę pokoju"</string>
|
||||
<string name="state_event_room_none">"%1$s nie wprowadził żadnych zmian"</string>
|
||||
<string name="state_event_room_none_by_you">"Nie wprowadzono żadnych zmian"</string>
|
||||
<string name="state_event_room_pinned_events_changed">"%1$s zmienił przypięte wiadomości"</string>
|
||||
<string name="state_event_room_pinned_events_changed_by_you">"Zmieniłeś przypięte wiadomości"</string>
|
||||
<string name="state_event_room_pinned_events_pinned">"%1$s przypiął wiadomość"</string>
|
||||
<string name="state_event_room_pinned_events_pinned_by_you">"Przypiąłeś wiadomość"</string>
|
||||
<string name="state_event_room_pinned_events_unpinned">"%1$s odpiął wiadomość"</string>
|
||||
<string name="state_event_room_pinned_events_unpinned_by_you">"Odpiąłeś wiadomość"</string>
|
||||
<string name="state_event_room_reject">"%1$s odrzucił zaproszenie"</string>
|
||||
<string name="state_event_room_reject_by_you">"Odrzuciłeś zaproszenie"</string>
|
||||
<string name="state_event_room_remove">"%1$s usunął %2$s"</string>
|
||||
<string name="state_event_room_remove_by_you">"Usunąłeś %1$s"</string>
|
||||
<string name="state_event_room_remove_by_you_with_reason">"Usunąłeś %1$s: %2$s"</string>
|
||||
<string name="state_event_room_remove_with_reason">"%1$s usunął %2$s: %3$s"</string>
|
||||
<string name="state_event_room_third_party_invite">"%1$s wysłał zaproszenie do %2$s, aby dołączył do pokoju"</string>
|
||||
<string name="state_event_room_third_party_invite_by_you">"Wysłano zaproszenie do %1$s, aby dołączył do pokoju"</string>
|
||||
<string name="state_event_room_third_party_revoked_invite">"%1$s cofnął zaproszenie dla %2$s do tego pokoju"</string>
|
||||
<string name="state_event_room_third_party_revoked_invite_by_you">"Odwołano zaproszenie %1$s, aby dołączył do pokoju"</string>
|
||||
<string name="state_event_room_topic_changed">"%1$s zmienił temat na: %2$s"</string>
|
||||
<string name="state_event_room_topic_changed_by_you">"Zmieniłeś temat na: %1$s"</string>
|
||||
<string name="state_event_room_topic_removed">"%1$s usunął temat pokoju"</string>
|
||||
<string name="state_event_room_topic_removed_by_you">"Usunąłeś temat pokoju"</string>
|
||||
<string name="state_event_room_unban">"%1$s odbanował %2$s"</string>
|
||||
<string name="state_event_room_unban_by_you">"Odbanowałeś %1$s"</string>
|
||||
<string name="state_event_room_unknown_membership_change">"%1$s dokonał nieznanej zmiany w swoim członkostwie"</string>
|
||||
</resources>
|
||||
@@ -0,0 +1,73 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
|
||||
<string name="state_event_avatar_changed_too">"(o avatar também foi alterado)"</string>
|
||||
<string name="state_event_avatar_url_changed">"%1$s mudou seu avatar"</string>
|
||||
<string name="state_event_avatar_url_changed_by_you">"Você mudou seu avatar"</string>
|
||||
<string name="state_event_demoted_to_member">"%1$s foi rebaixado a membro"</string>
|
||||
<string name="state_event_demoted_to_moderator">"%1$s foi rebaixado a moderador"</string>
|
||||
<string name="state_event_display_name_changed_from">"%1$s mudou seu nome de exibição de %2$s para %3$s"</string>
|
||||
<string name="state_event_display_name_changed_from_by_you">"Você alterou seu nome de exibição de %1$s para %2$s"</string>
|
||||
<string name="state_event_display_name_removed">"%1$s removeu seu nome de exibição (era %2$s)"</string>
|
||||
<string name="state_event_display_name_removed_by_you">"Você removeu seu nome de exibição (era %1$s)"</string>
|
||||
<string name="state_event_display_name_set">"%1$s definiu seu nome de exibição como %2$s"</string>
|
||||
<string name="state_event_display_name_set_by_you">"Você definiu seu nome de exibição como %1$s"</string>
|
||||
<string name="state_event_promoted_to_administrator">"%1$s foi promovido a administrador"</string>
|
||||
<string name="state_event_promoted_to_moderator">"%1$s foi promovido a moderador"</string>
|
||||
<string name="state_event_room_avatar_changed">"%1$s mudou o avatar da sala"</string>
|
||||
<string name="state_event_room_avatar_changed_by_you">"Você mudou o avatar da sala"</string>
|
||||
<string name="state_event_room_avatar_removed">"%1$s removeu o avatar da sala"</string>
|
||||
<string name="state_event_room_avatar_removed_by_you">"Você removeu o avatar da sala"</string>
|
||||
<string name="state_event_room_ban">"%1$s baniu %2$s"</string>
|
||||
<string name="state_event_room_ban_by_you">"Você baniu %1$s"</string>
|
||||
<string name="state_event_room_ban_by_you_with_reason">"Você baniu %1$s: %2$s"</string>
|
||||
<string name="state_event_room_ban_with_reason">"%1$s baniu %2$s: %3$s"</string>
|
||||
<string name="state_event_room_created">"%1$s criou a sala"</string>
|
||||
<string name="state_event_room_created_by_you">"Você criou a sala"</string>
|
||||
<string name="state_event_room_invite">"%1$s convidou %2$s"</string>
|
||||
<string name="state_event_room_invite_accepted">"%1$s aceitou o convite"</string>
|
||||
<string name="state_event_room_invite_accepted_by_you">"Você aceitou o convite"</string>
|
||||
<string name="state_event_room_invite_by_you">"Você convidou %1$s"</string>
|
||||
<string name="state_event_room_invite_you">"%1$s convidou você"</string>
|
||||
<string name="state_event_room_join">"%1$s entrou na sala"</string>
|
||||
<string name="state_event_room_join_by_you">"Você entrou na sala"</string>
|
||||
<string name="state_event_room_knock">"%1$s solicitou entrada"</string>
|
||||
<string name="state_event_room_knock_accepted">"%1$s concedeu o acesso a %2$s"</string>
|
||||
<string name="state_event_room_knock_accepted_by_you">"Você permitiu que o %1$s entrasse"</string>
|
||||
<string name="state_event_room_knock_by_you">"Você pediu para entrar"</string>
|
||||
<string name="state_event_room_knock_denied">"%1$s rejeitou a solicitação de %2$s para entrar"</string>
|
||||
<string name="state_event_room_knock_denied_by_you">"Você rejeitou a solicitação de %1$s para entrar"</string>
|
||||
<string name="state_event_room_knock_denied_you">"%1$s rejeitou seu pedido para entrar"</string>
|
||||
<string name="state_event_room_knock_retracted">"%1$s não está mais interessado em entrar"</string>
|
||||
<string name="state_event_room_knock_retracted_by_you">"Você cancelou seu pedido para entrar"</string>
|
||||
<string name="state_event_room_leave">"%1$s saiu da sala"</string>
|
||||
<string name="state_event_room_leave_by_you">"Você saiu da sala"</string>
|
||||
<string name="state_event_room_name_changed">"%1$s mudou o nome da sala para: %2$s"</string>
|
||||
<string name="state_event_room_name_changed_by_you">"Você mudou o nome da sala para: %1$s"</string>
|
||||
<string name="state_event_room_name_removed">"%1$s removeu o nome da sala"</string>
|
||||
<string name="state_event_room_name_removed_by_you">"Você removeu o nome da sala"</string>
|
||||
<string name="state_event_room_none">"%1$s não fez alterações"</string>
|
||||
<string name="state_event_room_none_by_you">"Você não fez nenhuma alteração"</string>
|
||||
<string name="state_event_room_pinned_events_changed">"%1$s alterou as mensagens fixadas"</string>
|
||||
<string name="state_event_room_pinned_events_changed_by_you">"Você alterou as mensagens fixadas"</string>
|
||||
<string name="state_event_room_pinned_events_pinned">"%1$s fixou uma mensagem"</string>
|
||||
<string name="state_event_room_pinned_events_pinned_by_you">"Você fixou uma mensagem"</string>
|
||||
<string name="state_event_room_pinned_events_unpinned">"%1$s desafixou uma mensagem"</string>
|
||||
<string name="state_event_room_pinned_events_unpinned_by_you">"Você desafixou uma mensagem"</string>
|
||||
<string name="state_event_room_reject">"%1$s rejeitou o convite"</string>
|
||||
<string name="state_event_room_reject_by_you">"Você rejeitou o convite"</string>
|
||||
<string name="state_event_room_remove">"%1$s removido %2$s"</string>
|
||||
<string name="state_event_room_remove_by_you">"Você removeu %1$s"</string>
|
||||
<string name="state_event_room_remove_by_you_with_reason">"Você removeu %1$s: %2$s"</string>
|
||||
<string name="state_event_room_remove_with_reason">"%1$s removeu %2$s: %3$s"</string>
|
||||
<string name="state_event_room_third_party_invite">"%1$s enviou um convite para %2$s para entrar na sala"</string>
|
||||
<string name="state_event_room_third_party_invite_by_you">"Você enviou um convite para %1$s para entrar na sala"</string>
|
||||
<string name="state_event_room_third_party_revoked_invite">"%1$s revogou o convite para %2$s para entrar na sala"</string>
|
||||
<string name="state_event_room_third_party_revoked_invite_by_you">"Você revogou o convite para %1$s para entrar na sala"</string>
|
||||
<string name="state_event_room_topic_changed">"%1$s mudou o tópico para: %2$s"</string>
|
||||
<string name="state_event_room_topic_changed_by_you">"Você mudou o tópico para: %1$s"</string>
|
||||
<string name="state_event_room_topic_removed">"%1$s removeu o tópico da sala"</string>
|
||||
<string name="state_event_room_topic_removed_by_you">"Você removeu o tópico da sala"</string>
|
||||
<string name="state_event_room_unban">"%1$s desbaniu %2$s"</string>
|
||||
<string name="state_event_room_unban_by_you">"Você desbaniu %1$s"</string>
|
||||
<string name="state_event_room_unknown_membership_change">"%1$s fez uma alteração desconhecida em sua associação"</string>
|
||||
</resources>
|
||||
@@ -0,0 +1,73 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
|
||||
<string name="state_event_avatar_changed_too">"(avatar alterado também)"</string>
|
||||
<string name="state_event_avatar_url_changed">"%1$s alterou o seu avatar"</string>
|
||||
<string name="state_event_avatar_url_changed_by_you">"Alteraste o teu avatar"</string>
|
||||
<string name="state_event_demoted_to_member">"%1$s foi despromovido a participante"</string>
|
||||
<string name="state_event_demoted_to_moderator">"%1$s foi despromovido a moderador"</string>
|
||||
<string name="state_event_display_name_changed_from">"%1$s alterou o seu pseudónimo de %2$s para %3$s"</string>
|
||||
<string name="state_event_display_name_changed_from_by_you">"Alteraste o teu pseudónimo de %1$s para %2$s"</string>
|
||||
<string name="state_event_display_name_removed">"%1$s removeu o seu pseudónimo (era %2$s)"</string>
|
||||
<string name="state_event_display_name_removed_by_you">"Removeste o teu pseudónimo (era %1$s)"</string>
|
||||
<string name="state_event_display_name_set">"%1$s definiu o seu pseudónimo como %2$s"</string>
|
||||
<string name="state_event_display_name_set_by_you">"Definiste o teu pseudónimo como %1$s"</string>
|
||||
<string name="state_event_promoted_to_administrator">"%1$s foi promovido a administrador"</string>
|
||||
<string name="state_event_promoted_to_moderator">"%1$s foi promovido a moderador"</string>
|
||||
<string name="state_event_room_avatar_changed">"%1$s alterou o ícone da sala"</string>
|
||||
<string name="state_event_room_avatar_changed_by_you">"Alteraste o ícone da sala"</string>
|
||||
<string name="state_event_room_avatar_removed">"%1$s removeu o ícone da sala"</string>
|
||||
<string name="state_event_room_avatar_removed_by_you">"Removeste o ícone da sala"</string>
|
||||
<string name="state_event_room_ban">"%1$s baniu %2$s"</string>
|
||||
<string name="state_event_room_ban_by_you">"Baniste %1$s"</string>
|
||||
<string name="state_event_room_ban_by_you_with_reason">"Baniste %1$s: %2$s"</string>
|
||||
<string name="state_event_room_ban_with_reason">"%1$s baniu %2$s: %3$s"</string>
|
||||
<string name="state_event_room_created">"%1$s criou a sala"</string>
|
||||
<string name="state_event_room_created_by_you">"Criaste a sala"</string>
|
||||
<string name="state_event_room_invite">"%1$s convidou %2$s"</string>
|
||||
<string name="state_event_room_invite_accepted">"%1$s aceitou o convite"</string>
|
||||
<string name="state_event_room_invite_accepted_by_you">"Aceitaste o convite"</string>
|
||||
<string name="state_event_room_invite_by_you">"Convidaste %1$s"</string>
|
||||
<string name="state_event_room_invite_you">"%1$s convidou-te"</string>
|
||||
<string name="state_event_room_join">"%1$s entrou na sala"</string>
|
||||
<string name="state_event_room_join_by_you">"Entraste na sala"</string>
|
||||
<string name="state_event_room_knock">"%1$s está a pedir para entrar"</string>
|
||||
<string name="state_event_room_knock_accepted">"%1$s permitiu %2$s entrar"</string>
|
||||
<string name="state_event_room_knock_accepted_by_you">"Permitiste a entrada de %1$s"</string>
|
||||
<string name="state_event_room_knock_by_you">"Pediste para entrar"</string>
|
||||
<string name="state_event_room_knock_denied">"%1$s rejeitou o pedido de entrada de %2$s"</string>
|
||||
<string name="state_event_room_knock_denied_by_you">"Rejeitaste o pedido de entrada e %1$s"</string>
|
||||
<string name="state_event_room_knock_denied_you">"%1$s rejeitou o teu pedido de entrada"</string>
|
||||
<string name="state_event_room_knock_retracted">"%1$s deixou de querer entrar"</string>
|
||||
<string name="state_event_room_knock_retracted_by_you">"Cancelaste o teu pedido de entrada"</string>
|
||||
<string name="state_event_room_leave">"%1$s saiu da sala"</string>
|
||||
<string name="state_event_room_leave_by_you">"Saíste da sala"</string>
|
||||
<string name="state_event_room_name_changed">"%1$s alterou o nome da sala para: %2$s"</string>
|
||||
<string name="state_event_room_name_changed_by_you">"Alteraste o nome da sala para:%1$s"</string>
|
||||
<string name="state_event_room_name_removed">"%1$s removeu o nome da sala"</string>
|
||||
<string name="state_event_room_name_removed_by_you">"Removeste o nome da sala"</string>
|
||||
<string name="state_event_room_none">"%1$s não fiz nenhuma alteração"</string>
|
||||
<string name="state_event_room_none_by_you">"Não fizeste nenhuma alteração"</string>
|
||||
<string name="state_event_room_pinned_events_changed">"%1$s alterou as mensagens afixadas"</string>
|
||||
<string name="state_event_room_pinned_events_changed_by_you">"Alteraste as mensagens afixadas"</string>
|
||||
<string name="state_event_room_pinned_events_pinned">"%1$s afixou uma mensagem"</string>
|
||||
<string name="state_event_room_pinned_events_pinned_by_you">"Afixaste uma mensagem"</string>
|
||||
<string name="state_event_room_pinned_events_unpinned">"%1$s desafixou uma mensagem"</string>
|
||||
<string name="state_event_room_pinned_events_unpinned_by_you">"Desafixaste uma mensagem"</string>
|
||||
<string name="state_event_room_reject">"%1$s rejeitou o convite"</string>
|
||||
<string name="state_event_room_reject_by_you">"Rejeitaste o convite"</string>
|
||||
<string name="state_event_room_remove">"%1$s removeu %2$s"</string>
|
||||
<string name="state_event_room_remove_by_you">"Removeste %1$s"</string>
|
||||
<string name="state_event_room_remove_by_you_with_reason">"Removeste %1$s: %2$s"</string>
|
||||
<string name="state_event_room_remove_with_reason">"%1$s removeu %2$s: %3$s"</string>
|
||||
<string name="state_event_room_third_party_invite">"%1$s enviou um convite a %2$s"</string>
|
||||
<string name="state_event_room_third_party_invite_by_you">"Enviaste um convite a %1$s"</string>
|
||||
<string name="state_event_room_third_party_revoked_invite">"%1$s revogou o convite de %2$s"</string>
|
||||
<string name="state_event_room_third_party_revoked_invite_by_you">"Revogaste o convite de %1$s"</string>
|
||||
<string name="state_event_room_topic_changed">"%1$s alterou a descrição para: %2$s"</string>
|
||||
<string name="state_event_room_topic_changed_by_you">"Alteraste a descrição para: %1$s"</string>
|
||||
<string name="state_event_room_topic_removed">"%1$s removeu a descrição da sala"</string>
|
||||
<string name="state_event_room_topic_removed_by_you">"Removeste a descrição da sala"</string>
|
||||
<string name="state_event_room_unban">"%1$s desbaniu %2$s"</string>
|
||||
<string name="state_event_room_unban_by_you">"Anulaste o banimento de %1$s"</string>
|
||||
<string name="state_event_room_unknown_membership_change">"%1$s efetuou uma alteração desconhecida à sua participação na sala"</string>
|
||||
</resources>
|
||||
@@ -0,0 +1,73 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
|
||||
<string name="state_event_avatar_changed_too">"(s-a schimbat si avatarul)"</string>
|
||||
<string name="state_event_avatar_url_changed">"%1$s și-a schimbat avatarul"</string>
|
||||
<string name="state_event_avatar_url_changed_by_you">"V-ați schimbat avatarul"</string>
|
||||
<string name="state_event_demoted_to_member">"%1$s a fost retrogradat la funcția de membru"</string>
|
||||
<string name="state_event_demoted_to_moderator">"%1$s a fost retrogradat la funcția de moderator"</string>
|
||||
<string name="state_event_display_name_changed_from">"%1$s și-a schimbat numele din %2$s în %3$s"</string>
|
||||
<string name="state_event_display_name_changed_from_by_you">"V-ați schimbat numele din %1$s în %2$s"</string>
|
||||
<string name="state_event_display_name_removed">"%1$s și-a șters numele (era %2$s)"</string>
|
||||
<string name="state_event_display_name_removed_by_you">"V-ați șters numele (era %1$s)"</string>
|
||||
<string name="state_event_display_name_set">"%1$s și-a schimbat numele %2$s"</string>
|
||||
<string name="state_event_display_name_set_by_you">"V-ați schimbat numele în %1$s"</string>
|
||||
<string name="state_event_promoted_to_administrator">"%1$s a fost promovat în funcția de administrator"</string>
|
||||
<string name="state_event_promoted_to_moderator">"%1$s a fost promovat la funcția de moderator"</string>
|
||||
<string name="state_event_room_avatar_changed">"%1$s a schimbat avatarul camerei"</string>
|
||||
<string name="state_event_room_avatar_changed_by_you">"Ați schimbat avatarul camerei"</string>
|
||||
<string name="state_event_room_avatar_removed">"%1$s a șters avatarul camerei"</string>
|
||||
<string name="state_event_room_avatar_removed_by_you">"Ați șters avatarul camerei"</string>
|
||||
<string name="state_event_room_ban">"%1$s a adăugat o interdicție pentru %2$s"</string>
|
||||
<string name="state_event_room_ban_by_you">"Ați adăugat o interdicție pentru %1$s"</string>
|
||||
<string name="state_event_room_ban_by_you_with_reason">"L-ați interzis pe %1$s: %2$s"</string>
|
||||
<string name="state_event_room_ban_with_reason">"%1$s a interzis pe %2$s: %3$s"</string>
|
||||
<string name="state_event_room_created">"%1$s a creat camera"</string>
|
||||
<string name="state_event_room_created_by_you">"Ați creat camera"</string>
|
||||
<string name="state_event_room_invite">"%1$s l-a invitat pe %2$s"</string>
|
||||
<string name="state_event_room_invite_accepted">"%1$s a acceptat invitația"</string>
|
||||
<string name="state_event_room_invite_accepted_by_you">"Ați acceptat invitația"</string>
|
||||
<string name="state_event_room_invite_by_you">"L-ați invitat pe %1$s"</string>
|
||||
<string name="state_event_room_invite_you">"%1$s v-a invitat"</string>
|
||||
<string name="state_event_room_join">"%1$s a intrat în cameră"</string>
|
||||
<string name="state_event_room_join_by_you">"Ați intrat în cameră"</string>
|
||||
<string name="state_event_room_knock">"%1$s a cerut să se alăture camerei"</string>
|
||||
<string name="state_event_room_knock_accepted">"%1$s i-a permis accesul lui %2$s"</string>
|
||||
<string name="state_event_room_knock_accepted_by_you">"I-ați permis lui %1$s să se alăture"</string>
|
||||
<string name="state_event_room_knock_by_you">"Ați cerut să vă alăturați camerei"</string>
|
||||
<string name="state_event_room_knock_denied">"%1$s a respins cererea de alăturare a lui %2$s"</string>
|
||||
<string name="state_event_room_knock_denied_by_you">"Ați respins cererea de alăturare a lui %1$s"</string>
|
||||
<string name="state_event_room_knock_denied_you">"%1$s a respins cererea dumneavoastră de alăturare"</string>
|
||||
<string name="state_event_room_knock_retracted">"%1$s nu mai este interesat să se alăture camerei"</string>
|
||||
<string name="state_event_room_knock_retracted_by_you">"Ați anulat cererea de alăturare"</string>
|
||||
<string name="state_event_room_leave">"%1$s a părăsit camera"</string>
|
||||
<string name="state_event_room_leave_by_you">"Ați părăsit camera"</string>
|
||||
<string name="state_event_room_name_changed">"%1$s a schimbat numele camerei în: %2$s"</string>
|
||||
<string name="state_event_room_name_changed_by_you">"Ați schimbat numele camerei în: %1$s"</string>
|
||||
<string name="state_event_room_name_removed">"%1$s a șters numele camerei"</string>
|
||||
<string name="state_event_room_name_removed_by_you">"Ați șters numele camerei"</string>
|
||||
<string name="state_event_room_none">"%1$s nu a făcut nicio modificare"</string>
|
||||
<string name="state_event_room_none_by_you">"Nu ați făcut nicio modificare"</string>
|
||||
<string name="state_event_room_pinned_events_changed">"%1$s a schimbat mesajele fixate"</string>
|
||||
<string name="state_event_room_pinned_events_changed_by_you">"Ați schimbat mesajele fixate"</string>
|
||||
<string name="state_event_room_pinned_events_pinned">"%1$s a fixat un mesaj"</string>
|
||||
<string name="state_event_room_pinned_events_pinned_by_you">"Ați fixat un mesaj"</string>
|
||||
<string name="state_event_room_pinned_events_unpinned">"%1$s a defixat un mesaj"</string>
|
||||
<string name="state_event_room_pinned_events_unpinned_by_you">"Ați defixat un mesaj"</string>
|
||||
<string name="state_event_room_reject">"%1$s a respins invitația"</string>
|
||||
<string name="state_event_room_reject_by_you">"Ați respins invitația"</string>
|
||||
<string name="state_event_room_remove">"%1$s l-a îndepărtat pe %2$s"</string>
|
||||
<string name="state_event_room_remove_by_you">"L-ați îndepărtat pe %1$s"</string>
|
||||
<string name="state_event_room_remove_by_you_with_reason">"L-ați îndepărtat pe %1$s: %2$s"</string>
|
||||
<string name="state_event_room_remove_with_reason">"%1$s l-a îndepărtat pe %2$s: %3$s"</string>
|
||||
<string name="state_event_room_third_party_invite">"%1$s a trimis o invitație către %2$s pentru a se alătura camerei"</string>
|
||||
<string name="state_event_room_third_party_invite_by_you">"Ați trimis o invitație către %1$s pentru a se alătura camerei"</string>
|
||||
<string name="state_event_room_third_party_revoked_invite">"%1$s a revocat invitația pentru %2$s de a se alătura camerei"</string>
|
||||
<string name="state_event_room_third_party_revoked_invite_by_you">"Ați revocat invitația pentru %1$s de a se alătura camerei"</string>
|
||||
<string name="state_event_room_topic_changed">"%1$s a schimbat subiectul în: %2$s"</string>
|
||||
<string name="state_event_room_topic_changed_by_you">"Ați schimbat subiectul în: %1$s"</string>
|
||||
<string name="state_event_room_topic_removed">"%1$s a șters subiectul camerei"</string>
|
||||
<string name="state_event_room_topic_removed_by_you">"Ați șters subiectul camerei"</string>
|
||||
<string name="state_event_room_unban">"%1$s a anulat interdicția pentru %2$s"</string>
|
||||
<string name="state_event_room_unban_by_you">"Ați anulat interdicția pentru %1$s"</string>
|
||||
<string name="state_event_room_unknown_membership_change">"%1$s a făcut o modificare necunoscută asupra calității sale de membru"</string>
|
||||
</resources>
|
||||
@@ -0,0 +1,73 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
|
||||
<string name="state_event_avatar_changed_too">"(изображение тоже было изменено)"</string>
|
||||
<string name="state_event_avatar_url_changed">"%1$s сменил своё изображение"</string>
|
||||
<string name="state_event_avatar_url_changed_by_you">"Вы сменили изображение профиля"</string>
|
||||
<string name="state_event_demoted_to_member">"%1$s был понижен до участника"</string>
|
||||
<string name="state_event_demoted_to_moderator">"%1$s был понижен до модератора"</string>
|
||||
<string name="state_event_display_name_changed_from">"%1$s изменил свое отображаемое имя с %2$s на %3$s"</string>
|
||||
<string name="state_event_display_name_changed_from_by_you">"Вы изменили свое отображаемое имя с %1$s на %2$s"</string>
|
||||
<string name="state_event_display_name_removed">"%1$s удалил свое отображаемое имя (оно было %2$s)"</string>
|
||||
<string name="state_event_display_name_removed_by_you">"Вы удалили свое отображаемое имя (оно было %1$s)"</string>
|
||||
<string name="state_event_display_name_set">"%1$s установили свое отображаемое имя на %2$s"</string>
|
||||
<string name="state_event_display_name_set_by_you">"Вы установили отображаемое имя на %1$s"</string>
|
||||
<string name="state_event_promoted_to_administrator">"%1$s был повышен до уровня администратора"</string>
|
||||
<string name="state_event_promoted_to_moderator">"%1$s был повышен до модератора"</string>
|
||||
<string name="state_event_room_avatar_changed">"%1$s изменил изображение комнаты"</string>
|
||||
<string name="state_event_room_avatar_changed_by_you">"Вы изменили изображение комнаты"</string>
|
||||
<string name="state_event_room_avatar_removed">"%1$s удалил изображение комнаты"</string>
|
||||
<string name="state_event_room_avatar_removed_by_you">"Вы удалили изображение комнаты"</string>
|
||||
<string name="state_event_room_ban">"%1$s заблокировал %2$s"</string>
|
||||
<string name="state_event_room_ban_by_you">"Вы заблокировали %1$s"</string>
|
||||
<string name="state_event_room_ban_by_you_with_reason">"Вы заблокировали %1$s: %2$s"</string>
|
||||
<string name="state_event_room_ban_with_reason">"%1$s заблокирован %2$s: %3$s"</string>
|
||||
<string name="state_event_room_created">"%1$s создал комнату"</string>
|
||||
<string name="state_event_room_created_by_you">"Вы создали комнату"</string>
|
||||
<string name="state_event_room_invite">"%1$s пригласил %2$s"</string>
|
||||
<string name="state_event_room_invite_accepted">"%1$s принял приглашение"</string>
|
||||
<string name="state_event_room_invite_accepted_by_you">"Вы приняли приглашение"</string>
|
||||
<string name="state_event_room_invite_by_you">"Вы пригласили %1$s"</string>
|
||||
<string name="state_event_room_invite_you">"Пользователь %1$s пригласил вас"</string>
|
||||
<string name="state_event_room_join">"%1$s присоединился к комнате"</string>
|
||||
<string name="state_event_room_join_by_you">"Вы присоединились к комнате"</string>
|
||||
<string name="state_event_room_knock">"%1$s хочет присоединиться"</string>
|
||||
<string name="state_event_room_knock_accepted">"%1$s разрешил %2$s присоединиться"</string>
|
||||
<string name="state_event_room_knock_accepted_by_you">"Вы разрешили %1$s присоединиться"</string>
|
||||
<string name="state_event_room_knock_by_you">"Вы запросили присоединение"</string>
|
||||
<string name="state_event_room_knock_denied">"%1$s отклонил запрос %2$s на присоединение"</string>
|
||||
<string name="state_event_room_knock_denied_by_you">"Вы отклонили запрос %1$s на присоединение"</string>
|
||||
<string name="state_event_room_knock_denied_you">"%1$s отклонил ваш запрос на присоединение"</string>
|
||||
<string name="state_event_room_knock_retracted">"%1$s больше не заинтересован в присоединении"</string>
|
||||
<string name="state_event_room_knock_retracted_by_you">"Вы отменили запрос на присоединение"</string>
|
||||
<string name="state_event_room_leave">"%1$s покинул комнату"</string>
|
||||
<string name="state_event_room_leave_by_you">"Вы покинули комнату"</string>
|
||||
<string name="state_event_room_name_changed">"%1$s изменил название комнаты на: %2$s"</string>
|
||||
<string name="state_event_room_name_changed_by_you">"Вы изменили название комнаты на: %1$s"</string>
|
||||
<string name="state_event_room_name_removed">"%1$s удалил название комнаты"</string>
|
||||
<string name="state_event_room_name_removed_by_you">"Вы удалили название комнаты"</string>
|
||||
<string name="state_event_room_none">"%1$s ничего не изменил"</string>
|
||||
<string name="state_event_room_none_by_you">"Вы не внесли никаких изменений"</string>
|
||||
<string name="state_event_room_pinned_events_changed">"%1$s изменил закрепленные сообщения"</string>
|
||||
<string name="state_event_room_pinned_events_changed_by_you">"Вы изменили закрепленные сообщения"</string>
|
||||
<string name="state_event_room_pinned_events_pinned">"%1$s закрепил сообщение"</string>
|
||||
<string name="state_event_room_pinned_events_pinned_by_you">"Вы закрепили сообщение"</string>
|
||||
<string name="state_event_room_pinned_events_unpinned">"%1$s открепил сообщение"</string>
|
||||
<string name="state_event_room_pinned_events_unpinned_by_you">"Вы открепили сообщение"</string>
|
||||
<string name="state_event_room_reject">"%1$s отклонил приглашение"</string>
|
||||
<string name="state_event_room_reject_by_you">"Вы отклонили приглашение"</string>
|
||||
<string name="state_event_room_remove">"%1$s удалил %2$s"</string>
|
||||
<string name="state_event_room_remove_by_you">"Вы удалили %1$s"</string>
|
||||
<string name="state_event_room_remove_by_you_with_reason">"Вы удалили %1$s: %2$s"</string>
|
||||
<string name="state_event_room_remove_with_reason">"%1$s удален %2$s: %3$s"</string>
|
||||
<string name="state_event_room_third_party_invite">"%1$s отправила приглашение %2$s присоединиться к комнате"</string>
|
||||
<string name="state_event_room_third_party_invite_by_you">"Вы отправили приглашение присоединиться к комнате %1$s"</string>
|
||||
<string name="state_event_room_third_party_revoked_invite">"%1$s отозвал приглашение %2$s присоединиться к комнате"</string>
|
||||
<string name="state_event_room_third_party_revoked_invite_by_you">"Вы отозвали приглашение %1$s присоединиться к комнате"</string>
|
||||
<string name="state_event_room_topic_changed">"%1$s изменил тему на: %2$s"</string>
|
||||
<string name="state_event_room_topic_changed_by_you">"Вы изменили тему на: %1$s"</string>
|
||||
<string name="state_event_room_topic_removed">"%1$s удалил тему комнаты"</string>
|
||||
<string name="state_event_room_topic_removed_by_you">"Вы удалили тему комнаты"</string>
|
||||
<string name="state_event_room_unban">"%1$s разблокировал %2$s"</string>
|
||||
<string name="state_event_room_unban_by_you">"Вы разблокировали %1$s"</string>
|
||||
<string name="state_event_room_unknown_membership_change">"%1$s внес неизвестное изменение для своих участников"</string>
|
||||
</resources>
|
||||
@@ -0,0 +1,73 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
|
||||
<string name="state_event_avatar_changed_too">"(obrázok bol tiež zmenený)"</string>
|
||||
<string name="state_event_avatar_url_changed">"%1$s zmenili svoj obrázok"</string>
|
||||
<string name="state_event_avatar_url_changed_by_you">"Zmenili ste svoj obrázok"</string>
|
||||
<string name="state_event_demoted_to_member">"Používateľovi %1$s bola znížená úroveň na člena"</string>
|
||||
<string name="state_event_demoted_to_moderator">"Používateľovi %1$s bola znížená úroveň na moderátora"</string>
|
||||
<string name="state_event_display_name_changed_from">"%1$s zmenili svoje zobrazované meno z %2$s na %3$s"</string>
|
||||
<string name="state_event_display_name_changed_from_by_you">"Zmenili ste si zobrazované meno z %1$s na %2$s"</string>
|
||||
<string name="state_event_display_name_removed">"%1$s odstránili svoje zobrazované meno (predtým bolo %2$s)"</string>
|
||||
<string name="state_event_display_name_removed_by_you">"Odstránili ste svoje zobrazované meno (predtým bolo %1$s)"</string>
|
||||
<string name="state_event_display_name_set">"%1$s nastavili svoje zobrazované meno na %2$s"</string>
|
||||
<string name="state_event_display_name_set_by_you">"Svoje zobrazované meno ste nastavili na %1$s"</string>
|
||||
<string name="state_event_promoted_to_administrator">"%1$s bol/a povýšený/á na správcu"</string>
|
||||
<string name="state_event_promoted_to_moderator">"%1$s bol/a povýšený/á na moderátora"</string>
|
||||
<string name="state_event_room_avatar_changed">"%1$s zmenil/a obrázok miestnosti"</string>
|
||||
<string name="state_event_room_avatar_changed_by_you">"Zmenili ste obrázok miestnosti"</string>
|
||||
<string name="state_event_room_avatar_removed">"%1$s odstránil/a obrázok miestnosti"</string>
|
||||
<string name="state_event_room_avatar_removed_by_you">"Odstránili ste obrázok miestnosti"</string>
|
||||
<string name="state_event_room_ban">"%1$s zakázal/a používateľa %2$s"</string>
|
||||
<string name="state_event_room_ban_by_you">"Zakázali ste používateľa %1$s"</string>
|
||||
<string name="state_event_room_ban_by_you_with_reason">"Zakázali ste %1$s: %2$s"</string>
|
||||
<string name="state_event_room_ban_with_reason">"%1$s zakázal/a %2$s: %3$s"</string>
|
||||
<string name="state_event_room_created">"%1$s vytvoril/a miestnosť"</string>
|
||||
<string name="state_event_room_created_by_you">"Vytvorili ste miestnosť"</string>
|
||||
<string name="state_event_room_invite">"%1$s pozval/a používateľa %2$s"</string>
|
||||
<string name="state_event_room_invite_accepted">"%1$s prijal/a pozvanie"</string>
|
||||
<string name="state_event_room_invite_accepted_by_you">"Prijali ste pozvánku"</string>
|
||||
<string name="state_event_room_invite_by_you">"Pozvali ste používateľa %1$s"</string>
|
||||
<string name="state_event_room_invite_you">"%1$s vás pozval/a"</string>
|
||||
<string name="state_event_room_join">"%1$s sa pripojil/a do miestnosti"</string>
|
||||
<string name="state_event_room_join_by_you">"Vstúpili ste do miestnosti"</string>
|
||||
<string name="state_event_room_knock">"%1$s žiada o vstup"</string>
|
||||
<string name="state_event_room_knock_accepted">"%1$s umožnil/a vstup používateľovi %2$s"</string>
|
||||
<string name="state_event_room_knock_accepted_by_you">"Povolili ste používateľovi %1$s, aby sa pripojil"</string>
|
||||
<string name="state_event_room_knock_by_you">"Požiadali ste o pripojenie"</string>
|
||||
<string name="state_event_room_knock_denied">"%1$s odmietol/a žiadosť používateľa %2$s o vstup"</string>
|
||||
<string name="state_event_room_knock_denied_by_you">"Odmietli ste žiadosť používateľa %1$s o pripojenie"</string>
|
||||
<string name="state_event_room_knock_denied_you">"%1$s zamietol vašu žiadosť o pripojenie"</string>
|
||||
<string name="state_event_room_knock_retracted">"%1$s už nemá záujem o vstup"</string>
|
||||
<string name="state_event_room_knock_retracted_by_you">"Zrušili ste svoju žiadosť o pripojenie"</string>
|
||||
<string name="state_event_room_leave">"%1$s opustil/a miestnosť"</string>
|
||||
<string name="state_event_room_leave_by_you">"Opustili ste miestnosť"</string>
|
||||
<string name="state_event_room_name_changed">"%1$s zmenil/a názov miestnosti na: %2$s"</string>
|
||||
<string name="state_event_room_name_changed_by_you">"Zmenili ste názov miestnosti na: %1$s"</string>
|
||||
<string name="state_event_room_name_removed">"%1$s odstránil/a názov miestnosti"</string>
|
||||
<string name="state_event_room_name_removed_by_you">"Odstránili ste názov miestnosti"</string>
|
||||
<string name="state_event_room_none">"%1$s nevykonal/a žiadne zmeny"</string>
|
||||
<string name="state_event_room_none_by_you">"Nevykonali ste žiadne zmeny"</string>
|
||||
<string name="state_event_room_pinned_events_changed">"%1$s zmenil/a pripnuté správy"</string>
|
||||
<string name="state_event_room_pinned_events_changed_by_you">"Zmenili ste pripnuté správy"</string>
|
||||
<string name="state_event_room_pinned_events_pinned">"%1$s pripol/la správu"</string>
|
||||
<string name="state_event_room_pinned_events_pinned_by_you">"Pripli ste správu"</string>
|
||||
<string name="state_event_room_pinned_events_unpinned">"%1$s zrušil/a pripnutie správy"</string>
|
||||
<string name="state_event_room_pinned_events_unpinned_by_you">"Zrušili ste pripnutie správy"</string>
|
||||
<string name="state_event_room_reject">"%1$s odmietol/a pozvánku"</string>
|
||||
<string name="state_event_room_reject_by_you">"Odmietli ste pozvánku"</string>
|
||||
<string name="state_event_room_remove">"%1$s odstránil/a %2$s"</string>
|
||||
<string name="state_event_room_remove_by_you">"Odstránili ste %1$s"</string>
|
||||
<string name="state_event_room_remove_by_you_with_reason">"Odstránili ste %1$s: %2$s"</string>
|
||||
<string name="state_event_room_remove_with_reason">"%1$s odstránil/a %2$s: %3$s"</string>
|
||||
<string name="state_event_room_third_party_invite">"%1$s poslal/a pozvánku používateľovi %2$s, aby sa pripojil k miestnosti"</string>
|
||||
<string name="state_event_room_third_party_invite_by_you">"Poslali ste pozvánku používateľovi %1$s, aby sa pripojil do miestnosti"</string>
|
||||
<string name="state_event_room_third_party_revoked_invite">"%1$s zrušil/a pozvánku pre používateľa %2$s na vstup do miestnosti"</string>
|
||||
<string name="state_event_room_third_party_revoked_invite_by_you">"Zrušili ste pozvánku pre používateľa %1$s na vstup do miestnosti"</string>
|
||||
<string name="state_event_room_topic_changed">"%1$s zmenil/a tému na: %2$s"</string>
|
||||
<string name="state_event_room_topic_changed_by_you">"Zmenili ste tému na: %1$s"</string>
|
||||
<string name="state_event_room_topic_removed">"%1$s odstránil/a tému miestnosti"</string>
|
||||
<string name="state_event_room_topic_removed_by_you">"Odstránili ste tému miestnosti"</string>
|
||||
<string name="state_event_room_unban">"%1$s zrušil/a zákaz pre %2$s"</string>
|
||||
<string name="state_event_room_unban_by_you">"Zrušili ste zákaz pre %1$s"</string>
|
||||
<string name="state_event_room_unknown_membership_change">"%1$s urobil/a neznámu zmenu svojho členstva"</string>
|
||||
</resources>
|
||||
@@ -0,0 +1,73 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
|
||||
<string name="state_event_avatar_changed_too">"(avatar ändrades också)"</string>
|
||||
<string name="state_event_avatar_url_changed">"%1$s bytte sin avatar"</string>
|
||||
<string name="state_event_avatar_url_changed_by_you">"Du bytte din avatar"</string>
|
||||
<string name="state_event_demoted_to_member">"%1$s degraderades till medlem"</string>
|
||||
<string name="state_event_demoted_to_moderator">"%1$s degraderades till moderator"</string>
|
||||
<string name="state_event_display_name_changed_from">"%1$s bytte sitt visningsnamn från %2$s till %3$s"</string>
|
||||
<string name="state_event_display_name_changed_from_by_you">"Du bytte ditt visningsnamn från %1$s till %2$s"</string>
|
||||
<string name="state_event_display_name_removed">"%1$s tog bort sitt visningsnamn (det var %2$s)"</string>
|
||||
<string name="state_event_display_name_removed_by_you">"Du tog bort ditt visningsnamn (det var %1$s)"</string>
|
||||
<string name="state_event_display_name_set">"%1$s satte sitt visningsnamn till %2$s"</string>
|
||||
<string name="state_event_display_name_set_by_you">"Du satte ditt visningsnamn till %1$s"</string>
|
||||
<string name="state_event_promoted_to_administrator">"%1$s befordrades till admin"</string>
|
||||
<string name="state_event_promoted_to_moderator">"%1$s befordrades till moderator"</string>
|
||||
<string name="state_event_room_avatar_changed">"%1$s bytte rummets avatar"</string>
|
||||
<string name="state_event_room_avatar_changed_by_you">"Du bytte rummets avatar"</string>
|
||||
<string name="state_event_room_avatar_removed">"%1$s tog bort rummets avatar"</string>
|
||||
<string name="state_event_room_avatar_removed_by_you">"Du tog bort rummets avatar"</string>
|
||||
<string name="state_event_room_ban">"%1$s bannade %2$s"</string>
|
||||
<string name="state_event_room_ban_by_you">"Du bannade %1$s"</string>
|
||||
<string name="state_event_room_ban_by_you_with_reason">"Du bannade %1$s: %2$s"</string>
|
||||
<string name="state_event_room_ban_with_reason">"%1$s bannade %2$s: %3$s"</string>
|
||||
<string name="state_event_room_created">"%1$s skapade rummet"</string>
|
||||
<string name="state_event_room_created_by_you">"Du skapade rummet"</string>
|
||||
<string name="state_event_room_invite">"%1$s bjöd in %2$s"</string>
|
||||
<string name="state_event_room_invite_accepted">"%1$s accepterade inbjudan"</string>
|
||||
<string name="state_event_room_invite_accepted_by_you">"Du accepterade inbjudan"</string>
|
||||
<string name="state_event_room_invite_by_you">"Du bjöd in %1$s"</string>
|
||||
<string name="state_event_room_invite_you">"%1$s bjöd in dig"</string>
|
||||
<string name="state_event_room_join">"%1$s gick med i rummet"</string>
|
||||
<string name="state_event_room_join_by_you">"Du gick med i rummet"</string>
|
||||
<string name="state_event_room_knock">"%1$s begär att gå med"</string>
|
||||
<string name="state_event_room_knock_accepted">"%1$s tillät %2$s att gå med"</string>
|
||||
<string name="state_event_room_knock_accepted_by_you">"Du lät %1$s att gå med"</string>
|
||||
<string name="state_event_room_knock_by_you">"Du begärde att gå med"</string>
|
||||
<string name="state_event_room_knock_denied">"%1$s avvisade begäran från %2$s om att gå med"</string>
|
||||
<string name="state_event_room_knock_denied_by_you">"Du avvisade begäran från %1$s om att gå med"</string>
|
||||
<string name="state_event_room_knock_denied_you">"%1$s avvisade din begäran om att gå med"</string>
|
||||
<string name="state_event_room_knock_retracted">"%1$s är inte längre intresserad av att gå med"</string>
|
||||
<string name="state_event_room_knock_retracted_by_you">"Du avbröt din begäran om att gå med"</string>
|
||||
<string name="state_event_room_leave">"%1$s lämnade rummet"</string>
|
||||
<string name="state_event_room_leave_by_you">"Du lämnade rummet"</string>
|
||||
<string name="state_event_room_name_changed">"%1$s bytte rummets namn till: %2$s"</string>
|
||||
<string name="state_event_room_name_changed_by_you">"Du bytte rummets namn till: %1$s"</string>
|
||||
<string name="state_event_room_name_removed">"%1$s tog bort rummets namn"</string>
|
||||
<string name="state_event_room_name_removed_by_you">"Du tog bort rummets namn"</string>
|
||||
<string name="state_event_room_none">"%1$s gjorde inga ändringar"</string>
|
||||
<string name="state_event_room_none_by_you">"Du gjorde inga ändringar"</string>
|
||||
<string name="state_event_room_pinned_events_changed">"%1$s ändrade de fästa meddelandena"</string>
|
||||
<string name="state_event_room_pinned_events_changed_by_you">"Du ändrade de fästa meddelandena"</string>
|
||||
<string name="state_event_room_pinned_events_pinned">"%1$s fäste ett meddelande"</string>
|
||||
<string name="state_event_room_pinned_events_pinned_by_you">"Du har fäste ett meddelande"</string>
|
||||
<string name="state_event_room_pinned_events_unpinned">"%1$s lossade ett meddelande"</string>
|
||||
<string name="state_event_room_pinned_events_unpinned_by_you">"Du har lossade ett meddelande"</string>
|
||||
<string name="state_event_room_reject">"%1$s avvisade inbjudan"</string>
|
||||
<string name="state_event_room_reject_by_you">"Du avvisade inbjudan"</string>
|
||||
<string name="state_event_room_remove">"%1$s tog bort %2$s"</string>
|
||||
<string name="state_event_room_remove_by_you">"Du tog bort %1$s"</string>
|
||||
<string name="state_event_room_remove_by_you_with_reason">"Du tog bort %1$s: %2$s"</string>
|
||||
<string name="state_event_room_remove_with_reason">"%1$s tog bort %2$s: %3$s"</string>
|
||||
<string name="state_event_room_third_party_invite">"%1$s skickade en inbjudan till %2$s att gå med i rummet"</string>
|
||||
<string name="state_event_room_third_party_invite_by_you">"Du skickade en inbjudan till %1$s att gå med i rummet"</string>
|
||||
<string name="state_event_room_third_party_revoked_invite">"%1$s återkallade inbjudan för %2$s att gå med i rummet"</string>
|
||||
<string name="state_event_room_third_party_revoked_invite_by_you">"Du återkallade inbjudan för %1$s att gå med i rummet"</string>
|
||||
<string name="state_event_room_topic_changed">"%1$s bytte ämnet till: %2$s"</string>
|
||||
<string name="state_event_room_topic_changed_by_you">"Du bytte ämnet till: %1$s"</string>
|
||||
<string name="state_event_room_topic_removed">"%1$s tog bort rummets ämne"</string>
|
||||
<string name="state_event_room_topic_removed_by_you">"Du tog bort rummets ämne"</string>
|
||||
<string name="state_event_room_unban">"%1$s avbannade %2$s"</string>
|
||||
<string name="state_event_room_unban_by_you">"Du avbannade %1$s"</string>
|
||||
<string name="state_event_room_unknown_membership_change">"%1$s gjorde en okänd ändring till deras medlemsskap."</string>
|
||||
</resources>
|
||||
@@ -0,0 +1,69 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
|
||||
<string name="state_event_avatar_changed_too">"(Profil fotoğrafı değiştirildi)"</string>
|
||||
<string name="state_event_avatar_url_changed">"%1$s profil fotoğrafını değiştirdi"</string>
|
||||
<string name="state_event_avatar_url_changed_by_you">"Profil fotoğrafını değiştirdin"</string>
|
||||
<string name="state_event_demoted_to_member">"%1$s üyeliğe düşürüldü"</string>
|
||||
<string name="state_event_demoted_to_moderator">"%1$s moderatörlüğe düşürüldü"</string>
|
||||
<string name="state_event_display_name_changed_from">"%1$s görünen adını bundan %2$s şuna %3$s değiştirdi"</string>
|
||||
<string name="state_event_display_name_changed_from_by_you">"Görünen adınızı bundan %1$s şuna %2$s değiştirdiniz"</string>
|
||||
<string name="state_event_display_name_removed">"%1$s görünen adını kaldırdı (önceden %2$s)"</string>
|
||||
<string name="state_event_display_name_removed_by_you">"Görünen adınızı kaldırdınız (önceden %1$s)"</string>
|
||||
<string name="state_event_display_name_set">"%1$s görünen adlarını şuna ayarla %2$s"</string>
|
||||
<string name="state_event_display_name_set_by_you">"Görünen adınız %1$s"</string>
|
||||
<string name="state_event_promoted_to_administrator">"%1$s yöneticiliğe terfi etti"</string>
|
||||
<string name="state_event_promoted_to_moderator">"%1$s moderatörlüğe terfi etti"</string>
|
||||
<string name="state_event_room_avatar_changed">"%1$s odanın fotoğrafını değiştirdi"</string>
|
||||
<string name="state_event_room_avatar_changed_by_you">"Odanın fotoğrafını değiştirdiniz"</string>
|
||||
<string name="state_event_room_avatar_removed">"%1$s oda fotoğrafını kaldırdı"</string>
|
||||
<string name="state_event_room_avatar_removed_by_you">"Oda fotoğrafını kaldırdınız"</string>
|
||||
<string name="state_event_room_ban">"%1$syasaklandı%2$s"</string>
|
||||
<string name="state_event_room_ban_by_you">"%1$s yasakladınız"</string>
|
||||
<string name="state_event_room_created">"%1$sodayı yarattı"</string>
|
||||
<string name="state_event_room_created_by_you">"Odayı sen yarattın"</string>
|
||||
<string name="state_event_room_invite">"%1$s davet edildi %2$s"</string>
|
||||
<string name="state_event_room_invite_accepted">"%1$s daveti kabul etti"</string>
|
||||
<string name="state_event_room_invite_accepted_by_you">"Daveti kabul ettiniz"</string>
|
||||
<string name="state_event_room_invite_by_you">"%1$s davet ettiniz"</string>
|
||||
<string name="state_event_room_invite_you">"%1$s sizi davet etti"</string>
|
||||
<string name="state_event_room_join">"%1$sodaya katıldı"</string>
|
||||
<string name="state_event_room_join_by_you">"Odaya katıldınız"</string>
|
||||
<string name="state_event_room_knock">"%1$s katılmak istiyor"</string>
|
||||
<string name="state_event_room_knock_accepted">"%1$s, %2$s\'e erişim izni verdi"</string>
|
||||
<string name="state_event_room_knock_accepted_by_you">"%1$s \'ın katılmasına izin verdiniz"</string>
|
||||
<string name="state_event_room_knock_by_you">"Katılmayı talep ettiniz"</string>
|
||||
<string name="state_event_room_knock_denied">"%1$s, %2$s\'ın katılma isteğini reddetti"</string>
|
||||
<string name="state_event_room_knock_denied_by_you">"%1$s kullanıcısının katılma isteğini reddettiniz"</string>
|
||||
<string name="state_event_room_knock_denied_you">"%1$s katılma isteğinizi reddetti"</string>
|
||||
<string name="state_event_room_knock_retracted">"%1$s artık katılmakla ilgilenmiyor"</string>
|
||||
<string name="state_event_room_knock_retracted_by_you">"Katılma talebinizi iptal ettiniz"</string>
|
||||
<string name="state_event_room_leave">"%1$sodadan ayrıldı"</string>
|
||||
<string name="state_event_room_leave_by_you">"Odadan ayrıldın."</string>
|
||||
<string name="state_event_room_name_changed">"%1$s Oda adını değiştirdi: %2$s"</string>
|
||||
<string name="state_event_room_name_changed_by_you">"Odanın adını değiştridiniz: %1$s"</string>
|
||||
<string name="state_event_room_name_removed">"%1$s Oda adını kaldırdı"</string>
|
||||
<string name="state_event_room_name_removed_by_you">"Oda adını kaldırdınız"</string>
|
||||
<string name="state_event_room_none">"%1$s hiçbir değişiklik yapmadı"</string>
|
||||
<string name="state_event_room_none_by_you">"Hiçbir değişiklik yapmadınız"</string>
|
||||
<string name="state_event_room_pinned_events_changed">"%1$s sabitlenmiş iletileri değiştirdi"</string>
|
||||
<string name="state_event_room_pinned_events_changed_by_you">"Sabitlenmiş mesajları değiştirdiniz"</string>
|
||||
<string name="state_event_room_pinned_events_pinned">"%1$s bir mesaj sabitledi"</string>
|
||||
<string name="state_event_room_pinned_events_pinned_by_you">"Bir mesaj sabitlediniz"</string>
|
||||
<string name="state_event_room_pinned_events_unpinned">"%1$s bir mesajın sabitlemesini kaldırdı"</string>
|
||||
<string name="state_event_room_pinned_events_unpinned_by_you">"Bir mesajın sabitlemesini kaldırdınız"</string>
|
||||
<string name="state_event_room_reject">"%1$sdaveti reddetti"</string>
|
||||
<string name="state_event_room_reject_by_you">"Daveti reddettiniz"</string>
|
||||
<string name="state_event_room_remove">"%1$skaldırıldı%2$s"</string>
|
||||
<string name="state_event_room_remove_by_you">"%1$s kaldırdınız"</string>
|
||||
<string name="state_event_room_third_party_invite">"%1$s odaya katılması için %2$s\'a davet gönderdi"</string>
|
||||
<string name="state_event_room_third_party_invite_by_you">"Odaya katılması için %1$s\'a davet gönderdin"</string>
|
||||
<string name="state_event_room_third_party_revoked_invite">"%1$s, %2$s\'nin odaya katılma davetini iptal etti"</string>
|
||||
<string name="state_event_room_third_party_revoked_invite_by_you">"%1$s\'ın odaya katılma davetini iptal ettiniz"</string>
|
||||
<string name="state_event_room_topic_changed">"%1$s konuyu değiştirdi: %2$s"</string>
|
||||
<string name="state_event_room_topic_changed_by_you">"Konuyu değiştirdiniz: %1$s"</string>
|
||||
<string name="state_event_room_topic_removed">"%1$s oda konusunu kaldırdı"</string>
|
||||
<string name="state_event_room_topic_removed_by_you">"Oda konusunu kaldırdınız"</string>
|
||||
<string name="state_event_room_unban">"%1$syasaklanmamış%2$s"</string>
|
||||
<string name="state_event_room_unban_by_you">"%1$s yasağını kaldırdınız"</string>
|
||||
<string name="state_event_room_unknown_membership_change">"%1$s üyeliğinde bilinmeyen bir değişiklik yaptı"</string>
|
||||
</resources>
|
||||
@@ -0,0 +1,73 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
|
||||
<string name="state_event_avatar_changed_too">"(аватар теж було змінено)"</string>
|
||||
<string name="state_event_avatar_url_changed">"%1$s змінює свій аватар"</string>
|
||||
<string name="state_event_avatar_url_changed_by_you">"Ви змінили свій аватар"</string>
|
||||
<string name="state_event_demoted_to_member">"%1$s понижено до учасника"</string>
|
||||
<string name="state_event_demoted_to_moderator">"%1$s понижено до модератора"</string>
|
||||
<string name="state_event_display_name_changed_from">"%1$s змінює своє імʼя з %2$s на %3$s"</string>
|
||||
<string name="state_event_display_name_changed_from_by_you">"Ви змінили своє ім\'я з %1$s на %2$s"</string>
|
||||
<string name="state_event_display_name_removed">"%1$s вилучає своє ім\'я (було %2$s)"</string>
|
||||
<string name="state_event_display_name_removed_by_you">"Ви видалили своє ім\'я (було%1$s)"</string>
|
||||
<string name="state_event_display_name_set">"%1$s змінює своє ім\'я на %2$s"</string>
|
||||
<string name="state_event_display_name_set_by_you">"Ви змінили своє імʼя на %1$s"</string>
|
||||
<string name="state_event_promoted_to_administrator">"%1$s підвищено до адміністратора"</string>
|
||||
<string name="state_event_promoted_to_moderator">"%1$s підвищено до модератора"</string>
|
||||
<string name="state_event_room_avatar_changed">"%1$s змінює аватар кімнати"</string>
|
||||
<string name="state_event_room_avatar_changed_by_you">"Ви змінили аватар кімнати"</string>
|
||||
<string name="state_event_room_avatar_removed">"%1$s видаляє аватар кімнати"</string>
|
||||
<string name="state_event_room_avatar_removed_by_you">"Ви видалили аватар кімнати"</string>
|
||||
<string name="state_event_room_ban">"%1$s блокує %2$s"</string>
|
||||
<string name="state_event_room_ban_by_you">"Ви заблокували %1$s"</string>
|
||||
<string name="state_event_room_ban_by_you_with_reason">"Ви заблокували %1$s: %2$s"</string>
|
||||
<string name="state_event_room_ban_with_reason">"%1$s блокує %2$s: %3$s"</string>
|
||||
<string name="state_event_room_created">"%1$s створює кімнату"</string>
|
||||
<string name="state_event_room_created_by_you">"Ви створили кімнату"</string>
|
||||
<string name="state_event_room_invite">"%1$s запрошує %2$s"</string>
|
||||
<string name="state_event_room_invite_accepted">"%1$s приймає запрошення"</string>
|
||||
<string name="state_event_room_invite_accepted_by_you">"Ви прийняли запрошення"</string>
|
||||
<string name="state_event_room_invite_by_you">"Ви запросили %1$s"</string>
|
||||
<string name="state_event_room_invite_you">"Вас запрошує %1$s"</string>
|
||||
<string name="state_event_room_join">"%1$s приєднується до кімнати"</string>
|
||||
<string name="state_event_room_join_by_you">"Ви приєдналися до кімнати"</string>
|
||||
<string name="state_event_room_knock">"%1$s подав (-ла) запит на приєднання"</string>
|
||||
<string name="state_event_room_knock_accepted">"%1$s дозволив (-ла) %2$s приєднатися"</string>
|
||||
<string name="state_event_room_knock_accepted_by_you">"Ви дозволили %1$s приєднатися"</string>
|
||||
<string name="state_event_room_knock_by_you">"Ви подали запит на приєднання"</string>
|
||||
<string name="state_event_room_knock_denied">"%1$s відхиляє запит %2$s на приєднання"</string>
|
||||
<string name="state_event_room_knock_denied_by_you">"Ви відхилили запит на приєднання від %1$s"</string>
|
||||
<string name="state_event_room_knock_denied_you">"%1$s відхиляє ваш запит на приєднання"</string>
|
||||
<string name="state_event_room_knock_retracted">"%1$s більше не хоче приєднуватися"</string>
|
||||
<string name="state_event_room_knock_retracted_by_you">"Ви відкликали свій запит на приєднання"</string>
|
||||
<string name="state_event_room_leave">"%1$s виходить з кімнати"</string>
|
||||
<string name="state_event_room_leave_by_you">"Ви вийшли з кімнати"</string>
|
||||
<string name="state_event_room_name_changed">"%1$s змінює назву кімнати на: %2$s"</string>
|
||||
<string name="state_event_room_name_changed_by_you">"Ви змінили назву кімнати на: %1$s"</string>
|
||||
<string name="state_event_room_name_removed">"%1$s вилучає назву кімнати"</string>
|
||||
<string name="state_event_room_name_removed_by_you">"Ви видалили назву кімнати"</string>
|
||||
<string name="state_event_room_none">"%1$s нічого не змінює"</string>
|
||||
<string name="state_event_room_none_by_you">"Ви не внесли жодних змін"</string>
|
||||
<string name="state_event_room_pinned_events_changed">"%1$s змінює закріплені повідомлення"</string>
|
||||
<string name="state_event_room_pinned_events_changed_by_you">"Ви змінили закріплені повідомлення"</string>
|
||||
<string name="state_event_room_pinned_events_pinned">"%1$s закріплює повідомлення"</string>
|
||||
<string name="state_event_room_pinned_events_pinned_by_you">"Ви закріпили повідомлення"</string>
|
||||
<string name="state_event_room_pinned_events_unpinned">"%1$s відкріплює повідомлення"</string>
|
||||
<string name="state_event_room_pinned_events_unpinned_by_you">"Ви відкріпили повідомлення"</string>
|
||||
<string name="state_event_room_reject">"%1$s відхиляє запрошення"</string>
|
||||
<string name="state_event_room_reject_by_you">"Ви відхилили запрошення"</string>
|
||||
<string name="state_event_room_remove">"%1$s вилучає %2$s"</string>
|
||||
<string name="state_event_room_remove_by_you">"Ви видалили %1$s"</string>
|
||||
<string name="state_event_room_remove_by_you_with_reason">"Ви вилучили %1$s: %2$s"</string>
|
||||
<string name="state_event_room_remove_with_reason">"%1$s вилучає %2$s: %3$s"</string>
|
||||
<string name="state_event_room_third_party_invite">"%1$s запрошує %2$s приєднатися до кімнати"</string>
|
||||
<string name="state_event_room_third_party_invite_by_you">"Ви запросили %1$s приєднатися до кімнати"</string>
|
||||
<string name="state_event_room_third_party_revoked_invite">"%1$s відкликає запрошення приєднатися до кімнати для %2$s"</string>
|
||||
<string name="state_event_room_third_party_revoked_invite_by_you">"Ви відкликали запрошення приєднатися до кімнати для %1$s"</string>
|
||||
<string name="state_event_room_topic_changed">"%1$s змінює тему на: %2$s"</string>
|
||||
<string name="state_event_room_topic_changed_by_you">"Ви змінили тему на: %1$s"</string>
|
||||
<string name="state_event_room_topic_removed">"%1$s вилучає тему кімнати"</string>
|
||||
<string name="state_event_room_topic_removed_by_you">"Ви вилучили тему кімнати"</string>
|
||||
<string name="state_event_room_unban">"%1$s розблоковує %2$s"</string>
|
||||
<string name="state_event_room_unban_by_you">"Ви розблокували %1$s"</string>
|
||||
<string name="state_event_room_unknown_membership_change">"%1$s вносить невідомі зміни щодо свого членства"</string>
|
||||
</resources>
|
||||
@@ -0,0 +1,69 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
|
||||
<string name="state_event_avatar_changed_too">"(اوتار بھی تبدیل ہوا)"</string>
|
||||
<string name="state_event_avatar_url_changed">"%1$s نے اپنا اوتار بدل دیا"</string>
|
||||
<string name="state_event_avatar_url_changed_by_you">"آپنے اپنا اوتار بدل دیا"</string>
|
||||
<string name="state_event_demoted_to_member">"%1$s کو تا رکن تنزل کیا گیا"</string>
|
||||
<string name="state_event_demoted_to_moderator">"%1$s کو تا ناظم تنزل کیا گیا"</string>
|
||||
<string name="state_event_display_name_changed_from">"%1$s نے اپنا نمائشی نام %2$s سے %3$s پر بدل دیا"</string>
|
||||
<string name="state_event_display_name_changed_from_by_you">"آپنے اپنا نمائشی نام %1$s سے %2$s پر بدل دیا"</string>
|
||||
<string name="state_event_display_name_removed">"%1$s نے اپنا نمائشی نام ہٹادیا (%2$s تھا)"</string>
|
||||
<string name="state_event_display_name_removed_by_you">"آپنے اپنا نمائشی نام ہٹادیا (%1$s تھا)"</string>
|
||||
<string name="state_event_display_name_set">"%1$s نے اپنا نمائشی نام %2$s پر متعین کردیا"</string>
|
||||
<string name="state_event_display_name_set_by_you">"آپنے اپنا نمائشی نام %1$s پر متعین کردیا"</string>
|
||||
<string name="state_event_promoted_to_administrator">"%1$s کو تا منتظم فروغ دیا گیا"</string>
|
||||
<string name="state_event_promoted_to_moderator">"%1$s کو تا ناظم فروغ دیا گیا"</string>
|
||||
<string name="state_event_room_avatar_changed">"%1$s نے کمرے کا اوتار بدل دیا"</string>
|
||||
<string name="state_event_room_avatar_changed_by_you">"آپنے کمرے کا اوتار بدل دیا"</string>
|
||||
<string name="state_event_room_avatar_removed">"%1$s نے کمرے کا اوتار ہٹادیا"</string>
|
||||
<string name="state_event_room_avatar_removed_by_you">"آپنے کمرے کا اوتار ہٹادیا"</string>
|
||||
<string name="state_event_room_ban">"%1$s نے %2$s پر پابندی لگادی"</string>
|
||||
<string name="state_event_room_ban_by_you">"آپنے %1$s پر پابندی لگادی"</string>
|
||||
<string name="state_event_room_created">"%1$s نے کمرہ تخلیق کیا"</string>
|
||||
<string name="state_event_room_created_by_you">"آپ نے کمرہ تخلیق کیا"</string>
|
||||
<string name="state_event_room_invite">"%1$s نے %2$s کو مدعو کیا"</string>
|
||||
<string name="state_event_room_invite_accepted">"%1$s نے دعوت قبول کرلی"</string>
|
||||
<string name="state_event_room_invite_accepted_by_you">"آپنے دعوت قبول کرلی"</string>
|
||||
<string name="state_event_room_invite_by_you">"آپنے %1$s مدعو کیا"</string>
|
||||
<string name="state_event_room_invite_you">"%1$s نے آپکو مدعو کیا"</string>
|
||||
<string name="state_event_room_join">"%1$s کمرے میں شامل ہوگیا"</string>
|
||||
<string name="state_event_room_join_by_you">"آپ کمرے میں شامل ہو گئے"</string>
|
||||
<string name="state_event_room_knock">"%1$s شامل ہونے کی درخواست کر رہا ہے"</string>
|
||||
<string name="state_event_room_knock_accepted">"%1$s نے %2$s کو اجازت فراہم کی"</string>
|
||||
<string name="state_event_room_knock_accepted_by_you">"آپنے %1$s کو شامل ہونے کی اجازت دی"</string>
|
||||
<string name="state_event_room_knock_by_you">"آپنے شامل ہونے کی دعوت کی"</string>
|
||||
<string name="state_event_room_knock_denied">"%1$s نے %2$s کی شامل ہونے کی درخواست مسترد کردی"</string>
|
||||
<string name="state_event_room_knock_denied_by_you">"آپنے %1$s کی شامل ہونے کی درخواست مسترد کردی"</string>
|
||||
<string name="state_event_room_knock_denied_you">"%1$s نے آپکی شامل ہونے کی درخواست مسترد کردی"</string>
|
||||
<string name="state_event_room_knock_retracted">"%1$s کی شامل ہونے میں دلچسپی نہیں"</string>
|
||||
<string name="state_event_room_knock_retracted_by_you">"آپنے اپنی شامل ہونے کی درخواست منسوخ کردی"</string>
|
||||
<string name="state_event_room_leave">"%1$s کمرے سے رخصت ہوگیا"</string>
|
||||
<string name="state_event_room_leave_by_you">"آپ کمرے سے رخصت ہوگئے"</string>
|
||||
<string name="state_event_room_name_changed">"%1$s نے کمرے کا نام بدل دیا تا: %2$s"</string>
|
||||
<string name="state_event_room_name_changed_by_you">"آپنے کمرے کا نام بدل دیا تا: %1$s"</string>
|
||||
<string name="state_event_room_name_removed">"%1$s نے کمرے کا نام ہٹادیا"</string>
|
||||
<string name="state_event_room_name_removed_by_you">"آپنے کمرے کا نام ہٹادیا"</string>
|
||||
<string name="state_event_room_none">"%1$s نے کوئی تبدیلیاں نہیں کیں"</string>
|
||||
<string name="state_event_room_none_by_you">"آپ نے کوئی تبدیلیاں نہیں کیں"</string>
|
||||
<string name="state_event_room_pinned_events_changed">"%1$s نے مثبوتہ پیغامات بدل دیے"</string>
|
||||
<string name="state_event_room_pinned_events_changed_by_you">"آپنے مثبوتہ پیغامات بدل دیے"</string>
|
||||
<string name="state_event_room_pinned_events_pinned">"%1$s نے پیغام تثبیت کردیا"</string>
|
||||
<string name="state_event_room_pinned_events_pinned_by_you">"آپنے پیغام تثبیت کردیا"</string>
|
||||
<string name="state_event_room_pinned_events_unpinned">"%1$s نے پیغام غیر مثبوت کردیا"</string>
|
||||
<string name="state_event_room_pinned_events_unpinned_by_you">"آپنے پیغام غیر مثبوت کردیا"</string>
|
||||
<string name="state_event_room_reject">"%1$s نے دعوت مسترد کر دی"</string>
|
||||
<string name="state_event_room_reject_by_you">"آپنے دعوت مسترد کر دی"</string>
|
||||
<string name="state_event_room_remove">"%1$s نے %2$s کو ہٹادیا"</string>
|
||||
<string name="state_event_room_remove_by_you">"آپنے %1$s کو ہٹادیا"</string>
|
||||
<string name="state_event_room_third_party_invite">"%1$s نے %2$s کو کمرے میں شامل ہونی کی دعوت بھیج دی"</string>
|
||||
<string name="state_event_room_third_party_invite_by_you">"آپنے %1$s کو کمرے میں شامل ہونے کی دعوت بھیج دی"</string>
|
||||
<string name="state_event_room_third_party_revoked_invite">"%1$s نے %2$s کی کمرے میں شامل ہونے کی دعوت منسوخ کردی"</string>
|
||||
<string name="state_event_room_third_party_revoked_invite_by_you">"آپنے %1$s کے کمرے میں شامل ہونے کی دعوت منسوخ کردی"</string>
|
||||
<string name="state_event_room_topic_changed">"%1$s نے موضوع کو بدلا تا: %2$s"</string>
|
||||
<string name="state_event_room_topic_changed_by_you">"آپنے موضوع کو بدلا تا: %1$s"</string>
|
||||
<string name="state_event_room_topic_removed">"%1$s نے کمرے کا موضوع ہٹادیا"</string>
|
||||
<string name="state_event_room_topic_removed_by_you">"آپنے کمرے کا موضوع ہٹادیا"</string>
|
||||
<string name="state_event_room_unban">"%1$s کے %2$s کو غیر پابندی یافتہ کردیا"</string>
|
||||
<string name="state_event_room_unban_by_you">"آپنے %1$s کو غیر پابندی یافتہ کردیا"</string>
|
||||
<string name="state_event_room_unknown_membership_change">"%1$s نے اپنی رکنیت میں ایک نامعلوم تبدیلی کی"</string>
|
||||
</resources>
|
||||
@@ -0,0 +1,73 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
|
||||
<string name="state_event_avatar_changed_too">"(avatar ham o\'zgartirildi)"</string>
|
||||
<string name="state_event_avatar_url_changed">"%1$s avatarini o\'zgartirdi"</string>
|
||||
<string name="state_event_avatar_url_changed_by_you">"Siz avataringizni o\'zgartirdingiz"</string>
|
||||
<string name="state_event_demoted_to_member">"%1$s oddiy a’zo lavozimiga tushirildi"</string>
|
||||
<string name="state_event_demoted_to_moderator">"%1$s moderator lavozimiga tushirildi"</string>
|
||||
<string name="state_event_display_name_changed_from">"%1$s ko\'rsatiladigan nomini %2$sdan %3$sga o\'zgartirdi"</string>
|
||||
<string name="state_event_display_name_changed_from_by_you">"Siz ko\'rsatiladigan nomingizni %1$s dan %2$s ga o\'zgartirdingiz"</string>
|
||||
<string name="state_event_display_name_removed">"%1$s ko\'rinadigan nomini o\'chirib tashladi (avval %2$s bo\'lgan edi)"</string>
|
||||
<string name="state_event_display_name_removed_by_you">"Siz ko\'rinadigan nomingizni o\'chirib tashladingiz (avval %1$s bo\'lgan edi)"</string>
|
||||
<string name="state_event_display_name_set">"%1$s ularning ko\'rsatiladigan nomini o\'rnating %2$s"</string>
|
||||
<string name="state_event_display_name_set_by_you">"Siz ko\'rsatiladigan nomingizni o\'rnating %1$s"</string>
|
||||
<string name="state_event_promoted_to_administrator">"%1$s admin lavozimiga koʻtarildi"</string>
|
||||
<string name="state_event_promoted_to_moderator">"%1$s moderatorlikka ko‘tarildi"</string>
|
||||
<string name="state_event_room_avatar_changed">"%1$s xonani avatarini o\'zgartirdi"</string>
|
||||
<string name="state_event_room_avatar_changed_by_you">"Siz xonani avatarini o\'zgartirdingiz"</string>
|
||||
<string name="state_event_room_avatar_removed">"%1$s xonani avatarini o\'chirib tashladi"</string>
|
||||
<string name="state_event_room_avatar_removed_by_you">"Siz xonani avatarini o\'chirib tashladingiz"</string>
|
||||
<string name="state_event_room_ban">"%1$staqiqlangan%2$s"</string>
|
||||
<string name="state_event_room_ban_by_you">"Siz taqiqlangansiz%1$s"</string>
|
||||
<string name="state_event_room_ban_by_you_with_reason">"Siz %1$s: %2$sni blokladingiz"</string>
|
||||
<string name="state_event_room_ban_with_reason">"%1$s %2$s:%3$sni blokladi"</string>
|
||||
<string name="state_event_room_created">"%1$sxonani yaratdi"</string>
|
||||
<string name="state_event_room_created_by_you">"Siz xonani yaratdingiz"</string>
|
||||
<string name="state_event_room_invite">"%1$staklif qilingan%2$s"</string>
|
||||
<string name="state_event_room_invite_accepted">"%1$staklifni qabul qildi"</string>
|
||||
<string name="state_event_room_invite_accepted_by_you">"Siz taklifni qabul qildingiz"</string>
|
||||
<string name="state_event_room_invite_by_you">"Siz taklif qildingiz%1$s"</string>
|
||||
<string name="state_event_room_invite_you">"%1$ssizni taklif qildi"</string>
|
||||
<string name="state_event_room_join">"%1$sxonaga qo\'shildi"</string>
|
||||
<string name="state_event_room_join_by_you">"Siz xonaga qo\'shildingiz"</string>
|
||||
<string name="state_event_room_knock">"%1$s qoʻshilishni soʻradi"</string>
|
||||
<string name="state_event_room_knock_accepted">"%1$s %2$sga qo\'shilishga ruxsat berdi"</string>
|
||||
<string name="state_event_room_knock_accepted_by_you">"Siz %1$sga qo\'shilishaga ruxsat berdingiz"</string>
|
||||
<string name="state_event_room_knock_by_you">"Siz qoʻshilishni soʻragansiz"</string>
|
||||
<string name="state_event_room_knock_denied">"%1$s %2$sning qo\'shilish haqidagi iltimosini rad etdi"</string>
|
||||
<string name="state_event_room_knock_denied_by_you">"Siz %1$sning qo\'shiliz iltimosini rad etdingiz"</string>
|
||||
<string name="state_event_room_knock_denied_you">"%1$s sizni qo\'shilish iltimosingizni rad etdi"</string>
|
||||
<string name="state_event_room_knock_retracted">"%1$s endi qo\'shilishdan manfaatdor emas"</string>
|
||||
<string name="state_event_room_knock_retracted_by_you">"Siz qoʻshilish soʻrovingizni bekor qildingiz"</string>
|
||||
<string name="state_event_room_leave">"%1$sxonani tark etdi"</string>
|
||||
<string name="state_event_room_leave_by_you">"Siz xonani tark etdingiz"</string>
|
||||
<string name="state_event_room_name_changed">"%1$s xonani nomini %2$s o\'zgartirdi"</string>
|
||||
<string name="state_event_room_name_changed_by_you">"Siz xonani nomini %1$s ga o\'zgartirdingiz"</string>
|
||||
<string name="state_event_room_name_removed">"%1$s xonani nomini o\'chirib tashladi"</string>
|
||||
<string name="state_event_room_name_removed_by_you">"Siz xonani nomini o\'chirib tashladingiz"</string>
|
||||
<string name="state_event_room_none">"%1$shech qanday o'zgarishlar qilmadi"</string>
|
||||
<string name="state_event_room_none_by_you">"Hech qanday o‘zgartirish kiritilmadi"</string>
|
||||
<string name="state_event_room_pinned_events_changed">"%1$s qadalgan xabarlarni tahrirladi"</string>
|
||||
<string name="state_event_room_pinned_events_changed_by_you">"Qadalgan xabarlarni o‘zgartirdingiz"</string>
|
||||
<string name="state_event_room_pinned_events_pinned">"%1$s xabarni qadadi"</string>
|
||||
<string name="state_event_room_pinned_events_pinned_by_you">"Siz xabarni qadadingiz"</string>
|
||||
<string name="state_event_room_pinned_events_unpinned">"%1$s xabarni uzdi"</string>
|
||||
<string name="state_event_room_pinned_events_unpinned_by_you">"Siz xabarni uzdingiz"</string>
|
||||
<string name="state_event_room_reject">"%1$staklifni rad etdi"</string>
|
||||
<string name="state_event_room_reject_by_you">"Siz taklifni rad etdingiz"</string>
|
||||
<string name="state_event_room_remove">"%1$s o\'chirildi %2$s"</string>
|
||||
<string name="state_event_room_remove_by_you">"Siz o\'chirildingiz %1$s"</string>
|
||||
<string name="state_event_room_remove_by_you_with_reason">"Siz olib tashladingiz %1$s :%2$s"</string>
|
||||
<string name="state_event_room_remove_with_reason">"%1$s %2$s:%3$sni olib tashladi"</string>
|
||||
<string name="state_event_room_third_party_invite">"%1$s taklifnoma yubordi %2$sga xonaga qo\'shilish uchun"</string>
|
||||
<string name="state_event_room_third_party_invite_by_you">"Siz taklifnoma yubordingiz %1$s ga xonaga qo\'shilishi uchun"</string>
|
||||
<string name="state_event_room_third_party_revoked_invite">"%1$s taklifni %2$s ga xonaga qo\'shilish uchun bekor qildi"</string>
|
||||
<string name="state_event_room_third_party_revoked_invite_by_you">"Siz xonaga qo\'shilish taklifini %1$s ga bekor qildingiz"</string>
|
||||
<string name="state_event_room_topic_changed">"%1$s mavzuni %2$s o\'zgartirdi"</string>
|
||||
<string name="state_event_room_topic_changed_by_you">"Siz mavzuni %1$s ga o\'zgartirdingiz"</string>
|
||||
<string name="state_event_room_topic_removed">"%1$s xonani mavzusini o\'chirib tashladi"</string>
|
||||
<string name="state_event_room_topic_removed_by_you">"Siz xonani mavzusini o\'chirib tashladingiz"</string>
|
||||
<string name="state_event_room_unban">"%1$staqiqlanmagan%2$s"</string>
|
||||
<string name="state_event_room_unban_by_you">"Siz %1$s taqiqini bekor qildingiz"</string>
|
||||
<string name="state_event_room_unknown_membership_change">"%1$s aʼzoligiga nomaʼlum oʻzgarishlar kiritdi"</string>
|
||||
</resources>
|
||||
@@ -0,0 +1,73 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
|
||||
<string name="state_event_avatar_changed_too">"(大頭照也變更了)"</string>
|
||||
<string name="state_event_avatar_url_changed">"%1$s 變更了他的大頭貼"</string>
|
||||
<string name="state_event_avatar_url_changed_by_you">"您變更了自己的大頭貼"</string>
|
||||
<string name="state_event_demoted_to_member">"%1$s 已降級為成員"</string>
|
||||
<string name="state_event_demoted_to_moderator">"%1$s 已降級為版主"</string>
|
||||
<string name="state_event_display_name_changed_from">"%1$s 將他的顯示名稱從 %2$s 變更為 %3$s"</string>
|
||||
<string name="state_event_display_name_changed_from_by_you">"您將您的顯示名稱從 %1$s1 變更為 %2$s"</string>
|
||||
<string name="state_event_display_name_removed">"%1$s 的顯示名稱已被本人移除(原為 %2$s)"</string>
|
||||
<string name="state_event_display_name_removed_by_you">"您的顯示名稱已被您移除(原為 %1$s)"</string>
|
||||
<string name="state_event_display_name_set">"%1$s 將他的顯示名稱設為 %2$s"</string>
|
||||
<string name="state_event_display_name_set_by_you">"您將您的顯示名稱設為 %1$s"</string>
|
||||
<string name="state_event_promoted_to_administrator">"%1$s 已升級為管理員"</string>
|
||||
<string name="state_event_promoted_to_moderator">"%1$s 已升級為版主"</string>
|
||||
<string name="state_event_room_avatar_changed">"%1$s 變更了聊天室大頭照"</string>
|
||||
<string name="state_event_room_avatar_changed_by_you">"您變更了聊天室大頭照"</string>
|
||||
<string name="state_event_room_avatar_removed">"%1$s 移除了聊天室大頭照"</string>
|
||||
<string name="state_event_room_avatar_removed_by_you">"您移除了聊天室大頭照"</string>
|
||||
<string name="state_event_room_ban">"%1$s 將 %2$s 加入黑名單"</string>
|
||||
<string name="state_event_room_ban_by_you">"您將 %1$s 加入黑名單"</string>
|
||||
<string name="state_event_room_ban_by_you_with_reason">"您封鎖了 %1$s:%2$s"</string>
|
||||
<string name="state_event_room_ban_with_reason">"%1$s 封鎖了 %2$s:%3$s"</string>
|
||||
<string name="state_event_room_created">"%1$s 建立此聊天室"</string>
|
||||
<string name="state_event_room_created_by_you">"您建立此聊天室"</string>
|
||||
<string name="state_event_room_invite">"%1$s 已邀請 %2$s"</string>
|
||||
<string name="state_event_room_invite_accepted">"%1$s 接受了邀請"</string>
|
||||
<string name="state_event_room_invite_accepted_by_you">"您接受了邀請"</string>
|
||||
<string name="state_event_room_invite_by_you">"您已邀請 %1$s"</string>
|
||||
<string name="state_event_room_invite_you">"%1$s 已邀請您"</string>
|
||||
<string name="state_event_room_join">"%1$s 加入聊天室"</string>
|
||||
<string name="state_event_room_join_by_you">"您加入聊天室"</string>
|
||||
<string name="state_event_room_knock">"%1$s 請求加入"</string>
|
||||
<string name="state_event_room_knock_accepted">"%1$s 授予 %2$s 存取權"</string>
|
||||
<string name="state_event_room_knock_accepted_by_you">"您允許 %1$s 加入"</string>
|
||||
<string name="state_event_room_knock_by_you">"您請求加入"</string>
|
||||
<string name="state_event_room_knock_denied">"%1$s 拒絕了 %2$s 的加入請求"</string>
|
||||
<string name="state_event_room_knock_denied_by_you">"您拒絕了 %1$s 的加入請求"</string>
|
||||
<string name="state_event_room_knock_denied_you">"%1$s 拒絕了您的加入請求"</string>
|
||||
<string name="state_event_room_knock_retracted">"%1$s 不再有興趣加入"</string>
|
||||
<string name="state_event_room_knock_retracted_by_you">"您取消了您的加入請求"</string>
|
||||
<string name="state_event_room_leave">"%1$s 離開聊天室"</string>
|
||||
<string name="state_event_room_leave_by_you">"您離開聊天室"</string>
|
||||
<string name="state_event_room_name_changed">"%1$s 將聊天室名稱變更為 %2$s"</string>
|
||||
<string name="state_event_room_name_changed_by_you">"您將聊天室名稱變更為 %1$s"</string>
|
||||
<string name="state_event_room_name_removed">"聊天室名稱已被 %1$s 移除"</string>
|
||||
<string name="state_event_room_name_removed_by_you">"聊天室名稱已被您移除"</string>
|
||||
<string name="state_event_room_none">"%1$s 並未做出任何變更"</string>
|
||||
<string name="state_event_room_none_by_you">"您並未做出任何變更"</string>
|
||||
<string name="state_event_room_pinned_events_changed">"%1$s 變更了釘選訊息"</string>
|
||||
<string name="state_event_room_pinned_events_changed_by_you">"您變更了釘選訊息"</string>
|
||||
<string name="state_event_room_pinned_events_pinned">"%1$s 釘選了訊息"</string>
|
||||
<string name="state_event_room_pinned_events_pinned_by_you">"您釘選了訊息"</string>
|
||||
<string name="state_event_room_pinned_events_unpinned">"%1$s 取消釘選了訊息"</string>
|
||||
<string name="state_event_room_pinned_events_unpinned_by_you">"您取消釘選了訊息"</string>
|
||||
<string name="state_event_room_reject">"%1$s 拒絕了邀請"</string>
|
||||
<string name="state_event_room_reject_by_you">"您拒絕了邀請"</string>
|
||||
<string name="state_event_room_remove">"%2$s 已被 %1$s 移除"</string>
|
||||
<string name="state_event_room_remove_by_you">"%1$s 已被您移除"</string>
|
||||
<string name="state_event_room_remove_by_you_with_reason">"您移除了 %1$s:%2$s"</string>
|
||||
<string name="state_event_room_remove_with_reason">"%1$s 移除了 %2$s:%3$s"</string>
|
||||
<string name="state_event_room_third_party_invite">"%1$s 已邀請 %2$s 加入聊天室"</string>
|
||||
<string name="state_event_room_third_party_invite_by_you">"您已邀請 %1$s 加入聊天室"</string>
|
||||
<string name="state_event_room_third_party_revoked_invite">"%1$s 撤銷了對 %2$s 的聊天室邀請"</string>
|
||||
<string name="state_event_room_third_party_revoked_invite_by_you">"您撤銷了對 %1$s 的聊天室邀請"</string>
|
||||
<string name="state_event_room_topic_changed">"%1$s 將主題變更為 %2$s"</string>
|
||||
<string name="state_event_room_topic_changed_by_you">"您將主題變更為 %1$s"</string>
|
||||
<string name="state_event_room_topic_removed">"聊天室主題已被 %1$s 移除"</string>
|
||||
<string name="state_event_room_topic_removed_by_you">"聊天室主題已被您移除"</string>
|
||||
<string name="state_event_room_unban">"%1$s 將 %2$s 從黑名單中移除"</string>
|
||||
<string name="state_event_room_unban_by_you">"您將 %1$s 從黑名單中移除"</string>
|
||||
<string name="state_event_room_unknown_membership_change">"%1$s 對其會員資格做出了未知的變更"</string>
|
||||
</resources>
|
||||
@@ -0,0 +1,73 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
|
||||
<string name="state_event_avatar_changed_too">"(头像也更改了)"</string>
|
||||
<string name="state_event_avatar_url_changed">"%1$s 更换了头像"</string>
|
||||
<string name="state_event_avatar_url_changed_by_you">"你更换了头像"</string>
|
||||
<string name="state_event_demoted_to_member">"%1$s 降级为成员"</string>
|
||||
<string name="state_event_demoted_to_moderator">"%1$s 降级为协管员"</string>
|
||||
<string name="state_event_display_name_changed_from">"%1$s 把显示名称从 %2$s 更改为 %3$s"</string>
|
||||
<string name="state_event_display_name_changed_from_by_you">"你将显示名称从 %1$s 更改为 %2$s"</string>
|
||||
<string name="state_event_display_name_removed">"%1$s 移除了其显示名称(原为 %2$s)"</string>
|
||||
<string name="state_event_display_name_removed_by_you">"你移除了自己的显示名称(原为 %1$s)"</string>
|
||||
<string name="state_event_display_name_set">"%1$s 将其显示名称设置为 %2$s"</string>
|
||||
<string name="state_event_display_name_set_by_you">"你将显示名称设置为 %1$s"</string>
|
||||
<string name="state_event_promoted_to_administrator">"%1$s 晋升为管理员"</string>
|
||||
<string name="state_event_promoted_to_moderator">"%1$s 晋升为协管员"</string>
|
||||
<string name="state_event_room_avatar_changed">"%1$s 更换了聊天室头像"</string>
|
||||
<string name="state_event_room_avatar_changed_by_you">"你更换了聊天室头像"</string>
|
||||
<string name="state_event_room_avatar_removed">"%1$s 移除了聊天室头像"</string>
|
||||
<string name="state_event_room_avatar_removed_by_you">"你移除了聊天室头像"</string>
|
||||
<string name="state_event_room_ban">"%1$s 封禁了 %2$s"</string>
|
||||
<string name="state_event_room_ban_by_you">"你封禁了 %1$s"</string>
|
||||
<string name="state_event_room_ban_by_you_with_reason">"你封禁了%1$s:%2$s"</string>
|
||||
<string name="state_event_room_ban_with_reason">"%1$s封禁了%2$s:%3$s"</string>
|
||||
<string name="state_event_room_created">"%1$s 创建了聊天室"</string>
|
||||
<string name="state_event_room_created_by_you">"你创建了聊天室"</string>
|
||||
<string name="state_event_room_invite">"%1$s 邀请了 %2$s"</string>
|
||||
<string name="state_event_room_invite_accepted">"%1$s 接受了邀请"</string>
|
||||
<string name="state_event_room_invite_accepted_by_you">"你接受了邀请"</string>
|
||||
<string name="state_event_room_invite_by_you">"你邀请了 %1$s"</string>
|
||||
<string name="state_event_room_invite_you">"%1$s 邀请了你"</string>
|
||||
<string name="state_event_room_join">"%1$s 加入了聊天室"</string>
|
||||
<string name="state_event_room_join_by_you">"你加入了聊天室"</string>
|
||||
<string name="state_event_room_knock">"%1$s 请求加入"</string>
|
||||
<string name="state_event_room_knock_accepted">"%1$s 允许 %2$s 加入"</string>
|
||||
<string name="state_event_room_knock_accepted_by_you">"您已允许 %1$s 加入"</string>
|
||||
<string name="state_event_room_knock_by_you">"你已请求加入"</string>
|
||||
<string name="state_event_room_knock_denied">"%1$s 拒绝了 %2$s 的加入请求"</string>
|
||||
<string name="state_event_room_knock_denied_by_you">"你拒绝了 %1$s 的加入请求"</string>
|
||||
<string name="state_event_room_knock_denied_you">"%1$s 拒绝了你的加入请求"</string>
|
||||
<string name="state_event_room_knock_retracted">"%1$s 已不再想加入"</string>
|
||||
<string name="state_event_room_knock_retracted_by_you">"你取消了加入申请"</string>
|
||||
<string name="state_event_room_leave">"%1$s 离开了聊天室"</string>
|
||||
<string name="state_event_room_leave_by_you">"你离开了聊天室"</string>
|
||||
<string name="state_event_room_name_changed">"%1$s 将聊天室名称改为 %2$s"</string>
|
||||
<string name="state_event_room_name_changed_by_you">"你把聊天室名称改为 %1$s"</string>
|
||||
<string name="state_event_room_name_removed">"%1$s 移除了聊天室名称"</string>
|
||||
<string name="state_event_room_name_removed_by_you">"你移除了聊天室名称"</string>
|
||||
<string name="state_event_room_none">"%1$s 没有任何更改"</string>
|
||||
<string name="state_event_room_none_by_you">"您未进行任何更改"</string>
|
||||
<string name="state_event_room_pinned_events_changed">"%1$s 更改了置顶消息"</string>
|
||||
<string name="state_event_room_pinned_events_changed_by_you">"您更改了置顶消息"</string>
|
||||
<string name="state_event_room_pinned_events_pinned">"%1$s 置顶了一条消息"</string>
|
||||
<string name="state_event_room_pinned_events_pinned_by_you">"您置顶了一条消息"</string>
|
||||
<string name="state_event_room_pinned_events_unpinned">"%1$s 取消置顶了一条消息"</string>
|
||||
<string name="state_event_room_pinned_events_unpinned_by_you">"您取消置顶了一条消息"</string>
|
||||
<string name="state_event_room_reject">"%1$s 拒绝了邀请"</string>
|
||||
<string name="state_event_room_reject_by_you">"你拒绝了邀请"</string>
|
||||
<string name="state_event_room_remove">"%1$s 移除了 %2$s"</string>
|
||||
<string name="state_event_room_remove_by_you">"你移除了 %1$s"</string>
|
||||
<string name="state_event_room_remove_by_you_with_reason">"您已删除%1$s :%2$s"</string>
|
||||
<string name="state_event_room_remove_with_reason">"%1$s已移除%2$s:%3$s"</string>
|
||||
<string name="state_event_room_third_party_invite">"%1$s 向 %2$s 发送了加入聊天室的邀请"</string>
|
||||
<string name="state_event_room_third_party_invite_by_you">"你邀请 %1$s 加入聊天室"</string>
|
||||
<string name="state_event_room_third_party_revoked_invite">"%1$s 撤销了 %2$s 加入聊天室的邀请"</string>
|
||||
<string name="state_event_room_third_party_revoked_invite_by_you">"你撤销了 %1$s 加入聊天室的邀请"</string>
|
||||
<string name="state_event_room_topic_changed">"%1$s 将主题改为:%2$s"</string>
|
||||
<string name="state_event_room_topic_changed_by_you">"你将主题改为:%1$s"</string>
|
||||
<string name="state_event_room_topic_removed">"%1$s 移除了聊天室主题"</string>
|
||||
<string name="state_event_room_topic_removed_by_you">"你移除了聊天室主题"</string>
|
||||
<string name="state_event_room_unban">"%1$s 解禁了 %2$s"</string>
|
||||
<string name="state_event_room_unban_by_you">"你解禁了 %1$s"</string>
|
||||
<string name="state_event_room_unknown_membership_change">"%1$s 对其成员资格进行了未知更改"</string>
|
||||
</resources>
|
||||
@@ -0,0 +1,73 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
|
||||
<string name="state_event_avatar_changed_too">"(avatar was changed too)"</string>
|
||||
<string name="state_event_avatar_url_changed">"%1$s changed their avatar"</string>
|
||||
<string name="state_event_avatar_url_changed_by_you">"You changed your avatar"</string>
|
||||
<string name="state_event_demoted_to_member">"%1$s was demoted to member"</string>
|
||||
<string name="state_event_demoted_to_moderator">"%1$s was demoted to moderator"</string>
|
||||
<string name="state_event_display_name_changed_from">"%1$s changed their display name from %2$s to %3$s"</string>
|
||||
<string name="state_event_display_name_changed_from_by_you">"You changed your display name from %1$s to %2$s"</string>
|
||||
<string name="state_event_display_name_removed">"%1$s removed their display name (it was %2$s)"</string>
|
||||
<string name="state_event_display_name_removed_by_you">"You removed your display name (it was %1$s)"</string>
|
||||
<string name="state_event_display_name_set">"%1$s set their display name to %2$s"</string>
|
||||
<string name="state_event_display_name_set_by_you">"You set your display name to %1$s"</string>
|
||||
<string name="state_event_promoted_to_administrator">"%1$s was promoted to admin"</string>
|
||||
<string name="state_event_promoted_to_moderator">"%1$s was promoted to moderator"</string>
|
||||
<string name="state_event_room_avatar_changed">"%1$s changed the room avatar"</string>
|
||||
<string name="state_event_room_avatar_changed_by_you">"You changed the room avatar"</string>
|
||||
<string name="state_event_room_avatar_removed">"%1$s removed the room avatar"</string>
|
||||
<string name="state_event_room_avatar_removed_by_you">"You removed the room avatar"</string>
|
||||
<string name="state_event_room_ban">"%1$s banned %2$s"</string>
|
||||
<string name="state_event_room_ban_by_you">"You banned %1$s"</string>
|
||||
<string name="state_event_room_ban_by_you_with_reason">"You banned %1$s: %2$s"</string>
|
||||
<string name="state_event_room_ban_with_reason">"%1$s banned %2$s: %3$s"</string>
|
||||
<string name="state_event_room_created">"%1$s created the room"</string>
|
||||
<string name="state_event_room_created_by_you">"You created the room"</string>
|
||||
<string name="state_event_room_invite">"%1$s invited %2$s"</string>
|
||||
<string name="state_event_room_invite_accepted">"%1$s accepted the invite"</string>
|
||||
<string name="state_event_room_invite_accepted_by_you">"You accepted the invite"</string>
|
||||
<string name="state_event_room_invite_by_you">"You invited %1$s"</string>
|
||||
<string name="state_event_room_invite_you">"%1$s invited you"</string>
|
||||
<string name="state_event_room_join">"%1$s joined the room"</string>
|
||||
<string name="state_event_room_join_by_you">"You joined the room"</string>
|
||||
<string name="state_event_room_knock">"%1$s is requesting to join"</string>
|
||||
<string name="state_event_room_knock_accepted">"%1$s granted access to %2$s"</string>
|
||||
<string name="state_event_room_knock_accepted_by_you">"You allowed %1$s to join"</string>
|
||||
<string name="state_event_room_knock_by_you">"You requested to join"</string>
|
||||
<string name="state_event_room_knock_denied">"%1$s rejected %2$s\'s request to join"</string>
|
||||
<string name="state_event_room_knock_denied_by_you">"You rejected %1$s\'s request to join"</string>
|
||||
<string name="state_event_room_knock_denied_you">"%1$s rejected your request to join"</string>
|
||||
<string name="state_event_room_knock_retracted">"%1$s is no longer interested in joining"</string>
|
||||
<string name="state_event_room_knock_retracted_by_you">"You cancelled your request to join"</string>
|
||||
<string name="state_event_room_leave">"%1$s left the room"</string>
|
||||
<string name="state_event_room_leave_by_you">"You left the room"</string>
|
||||
<string name="state_event_room_name_changed">"%1$s changed the room name to: %2$s"</string>
|
||||
<string name="state_event_room_name_changed_by_you">"You changed the room name to: %1$s"</string>
|
||||
<string name="state_event_room_name_removed">"%1$s removed the room name"</string>
|
||||
<string name="state_event_room_name_removed_by_you">"You removed the room name"</string>
|
||||
<string name="state_event_room_none">"%1$s made no changes"</string>
|
||||
<string name="state_event_room_none_by_you">"You made no changes"</string>
|
||||
<string name="state_event_room_pinned_events_changed">"%1$s changed the pinned messages"</string>
|
||||
<string name="state_event_room_pinned_events_changed_by_you">"You changed the pinned messages"</string>
|
||||
<string name="state_event_room_pinned_events_pinned">"%1$s pinned a message"</string>
|
||||
<string name="state_event_room_pinned_events_pinned_by_you">"You pinned a message"</string>
|
||||
<string name="state_event_room_pinned_events_unpinned">"%1$s unpinned a message"</string>
|
||||
<string name="state_event_room_pinned_events_unpinned_by_you">"You unpinned a message"</string>
|
||||
<string name="state_event_room_reject">"%1$s rejected the invitation"</string>
|
||||
<string name="state_event_room_reject_by_you">"You rejected the invitation"</string>
|
||||
<string name="state_event_room_remove">"%1$s removed %2$s"</string>
|
||||
<string name="state_event_room_remove_by_you">"You removed %1$s"</string>
|
||||
<string name="state_event_room_remove_by_you_with_reason">"You removed %1$s: %2$s"</string>
|
||||
<string name="state_event_room_remove_with_reason">"%1$s removed %2$s: %3$s"</string>
|
||||
<string name="state_event_room_third_party_invite">"%1$s sent an invitation to %2$s to join the room"</string>
|
||||
<string name="state_event_room_third_party_invite_by_you">"You sent an invitation to %1$s to join the room"</string>
|
||||
<string name="state_event_room_third_party_revoked_invite">"%1$s revoked the invitation for %2$s to join the room"</string>
|
||||
<string name="state_event_room_third_party_revoked_invite_by_you">"You revoked the invitation for %1$s to join the room"</string>
|
||||
<string name="state_event_room_topic_changed">"%1$s changed the topic to: %2$s"</string>
|
||||
<string name="state_event_room_topic_changed_by_you">"You changed the topic to: %1$s"</string>
|
||||
<string name="state_event_room_topic_removed">"%1$s removed the room topic"</string>
|
||||
<string name="state_event_room_topic_removed_by_you">"You removed the room topic"</string>
|
||||
<string name="state_event_room_unban">"%1$s unbanned %2$s"</string>
|
||||
<string name="state_event_room_unban_by_you">"You unbanned %1$s"</string>
|
||||
<string name="state_event_room_unknown_membership_change">"%1$s made an unknown change to their membership"</string>
|
||||
</resources>
|
||||
+791
@@ -0,0 +1,791 @@
|
||||
/*
|
||||
* Copyright (c) 2025 Element Creations Ltd.
|
||||
* Copyright 2024, 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.libraries.eventformatter.impl
|
||||
|
||||
import android.content.Context
|
||||
import androidx.compose.ui.text.AnnotatedString
|
||||
import com.google.common.truth.Truth.assertThat
|
||||
import com.google.common.truth.Truth.assertWithMessage
|
||||
import io.element.android.libraries.matrix.api.core.UserId
|
||||
import io.element.android.libraries.matrix.api.media.ImageInfo
|
||||
import io.element.android.libraries.matrix.api.media.MediaSource
|
||||
import io.element.android.libraries.matrix.api.timeline.item.event.AudioMessageType
|
||||
import io.element.android.libraries.matrix.api.timeline.item.event.EmoteMessageType
|
||||
import io.element.android.libraries.matrix.api.timeline.item.event.EventContent
|
||||
import io.element.android.libraries.matrix.api.timeline.item.event.EventTimelineItem
|
||||
import io.element.android.libraries.matrix.api.timeline.item.event.FailedToParseMessageLikeContent
|
||||
import io.element.android.libraries.matrix.api.timeline.item.event.FailedToParseStateContent
|
||||
import io.element.android.libraries.matrix.api.timeline.item.event.FileMessageType
|
||||
import io.element.android.libraries.matrix.api.timeline.item.event.ImageMessageType
|
||||
import io.element.android.libraries.matrix.api.timeline.item.event.LocationMessageType
|
||||
import io.element.android.libraries.matrix.api.timeline.item.event.MembershipChange
|
||||
import io.element.android.libraries.matrix.api.timeline.item.event.MessageContent
|
||||
import io.element.android.libraries.matrix.api.timeline.item.event.MessageType
|
||||
import io.element.android.libraries.matrix.api.timeline.item.event.NoticeMessageType
|
||||
import io.element.android.libraries.matrix.api.timeline.item.event.OtherMessageType
|
||||
import io.element.android.libraries.matrix.api.timeline.item.event.OtherState
|
||||
import io.element.android.libraries.matrix.api.timeline.item.event.RedactedContent
|
||||
import io.element.android.libraries.matrix.api.timeline.item.event.StateContent
|
||||
import io.element.android.libraries.matrix.api.timeline.item.event.StickerMessageType
|
||||
import io.element.android.libraries.matrix.api.timeline.item.event.TextMessageType
|
||||
import io.element.android.libraries.matrix.api.timeline.item.event.UnableToDecryptContent
|
||||
import io.element.android.libraries.matrix.api.timeline.item.event.UnknownContent
|
||||
import io.element.android.libraries.matrix.api.timeline.item.event.VideoMessageType
|
||||
import io.element.android.libraries.matrix.api.timeline.item.event.VoiceMessageType
|
||||
import io.element.android.libraries.matrix.test.A_USER_ID
|
||||
import io.element.android.libraries.matrix.test.FakeMatrixClient
|
||||
import io.element.android.libraries.matrix.test.media.aMediaSource
|
||||
import io.element.android.libraries.matrix.test.permalink.FakePermalinkParser
|
||||
import io.element.android.libraries.matrix.test.timeline.aPollContent
|
||||
import io.element.android.libraries.matrix.test.timeline.aProfileChangeMessageContent
|
||||
import io.element.android.libraries.matrix.test.timeline.aProfileDetails
|
||||
import io.element.android.libraries.matrix.test.timeline.aStickerContent
|
||||
import io.element.android.libraries.matrix.test.timeline.anEventTimelineItem
|
||||
import io.element.android.libraries.matrix.test.timeline.item.event.aRoomMembershipContent
|
||||
import io.element.android.libraries.ui.strings.CommonStrings
|
||||
import io.element.android.services.toolbox.impl.strings.AndroidStringProvider
|
||||
import org.junit.Before
|
||||
import org.junit.Test
|
||||
import org.junit.runner.RunWith
|
||||
import org.robolectric.RobolectricTestRunner
|
||||
import org.robolectric.RuntimeEnvironment
|
||||
import org.robolectric.annotation.Config
|
||||
|
||||
@Suppress("LargeClass")
|
||||
@RunWith(RobolectricTestRunner::class)
|
||||
class DefaultPinnedMessagesBannerFormatterTest {
|
||||
private lateinit var context: Context
|
||||
private lateinit var fakeMatrixClient: FakeMatrixClient
|
||||
private lateinit var formatter: DefaultPinnedMessagesBannerFormatter
|
||||
private lateinit var unsupportedEvent: String
|
||||
|
||||
@Before
|
||||
fun setup() {
|
||||
context = RuntimeEnvironment.getApplication() as Context
|
||||
fakeMatrixClient = FakeMatrixClient()
|
||||
val stringProvider = AndroidStringProvider(context.resources)
|
||||
formatter = DefaultPinnedMessagesBannerFormatter(
|
||||
sp = stringProvider,
|
||||
permalinkParser = FakePermalinkParser(),
|
||||
)
|
||||
unsupportedEvent = stringProvider.getString(CommonStrings.common_unsupported_event)
|
||||
}
|
||||
|
||||
@Test
|
||||
@Config(qualifiers = "en")
|
||||
fun `Redacted content`() {
|
||||
val expected = "Message removed"
|
||||
val senderName = "Someone"
|
||||
val message = createRoomEvent(false, senderName, RedactedContent)
|
||||
val result = formatter.format(message)
|
||||
assertThat(result).isEqualTo(expected)
|
||||
}
|
||||
|
||||
@Test
|
||||
@Config(qualifiers = "en")
|
||||
fun `Sticker content`() {
|
||||
val body = "a sticker body"
|
||||
val info = ImageInfo(null, null, null, null, null, null, null)
|
||||
val message = createRoomEvent(false, null, aStickerContent(body, info, aMediaSource(url = "url")))
|
||||
val result = formatter.format(message)
|
||||
val expectedBody = "Sticker: a sticker body"
|
||||
assertThat(result.toString()).isEqualTo(expectedBody)
|
||||
}
|
||||
|
||||
@Test
|
||||
@Config(qualifiers = "en")
|
||||
fun `Unable to decrypt content`() {
|
||||
val expected = "Waiting for this message"
|
||||
val senderName = "Someone"
|
||||
val message = createRoomEvent(false, senderName, UnableToDecryptContent(UnableToDecryptContent.Data.Unknown))
|
||||
val result = formatter.format(message)
|
||||
assertThat(result).isEqualTo(expected)
|
||||
}
|
||||
|
||||
@Test
|
||||
@Config(qualifiers = "en")
|
||||
fun `FailedToParseMessageLike, FailedToParseState & Unknown content`() {
|
||||
val senderName = "Someone"
|
||||
sequenceOf(
|
||||
FailedToParseMessageLikeContent("", ""),
|
||||
FailedToParseStateContent("", "", ""),
|
||||
UnknownContent,
|
||||
).forEach { type ->
|
||||
val message = createRoomEvent(false, senderName, type)
|
||||
val result = formatter.format(message)
|
||||
assertWithMessage("$type was not properly handled").that(result).isEqualTo(unsupportedEvent)
|
||||
}
|
||||
}
|
||||
|
||||
// region Message contents
|
||||
|
||||
@Test
|
||||
@Config(qualifiers = "en")
|
||||
fun `Message contents`() {
|
||||
val body = "Shared body"
|
||||
fun createMessageContent(type: MessageType): MessageContent {
|
||||
return MessageContent(body, null, false, null, type)
|
||||
}
|
||||
|
||||
val sharedContentMessagesTypes = arrayOf(
|
||||
TextMessageType(body, null),
|
||||
VideoMessageType(body, null, null, MediaSource("url"), null),
|
||||
AudioMessageType(body, null, null, MediaSource("url"), null),
|
||||
VoiceMessageType(body, null, null, MediaSource("url"), null, null),
|
||||
ImageMessageType(body, null, null, MediaSource("url"), null),
|
||||
StickerMessageType(body, null, null, MediaSource("url"), null),
|
||||
FileMessageType(body, null, null, MediaSource("url"), null),
|
||||
LocationMessageType(body, "geo:1,2", null),
|
||||
NoticeMessageType(body, null),
|
||||
EmoteMessageType(body, null),
|
||||
OtherMessageType(msgType = "a_type", body = body),
|
||||
)
|
||||
val results = mutableListOf<Pair<MessageType, CharSequence?>>()
|
||||
|
||||
sharedContentMessagesTypes.forEach { type ->
|
||||
val content = createMessageContent(type)
|
||||
val message = createRoomEvent(sentByYou = false, senderDisplayName = "Someone", content = content)
|
||||
val result = formatter.format(message)
|
||||
results.add(type to result)
|
||||
}
|
||||
|
||||
// Verify results type
|
||||
for ((type, result) in results) {
|
||||
val expectedResult = when (type) {
|
||||
is VideoMessageType,
|
||||
is AudioMessageType,
|
||||
is ImageMessageType,
|
||||
is StickerMessageType,
|
||||
is FileMessageType,
|
||||
is LocationMessageType -> AnnotatedString::class.java
|
||||
is VoiceMessageType,
|
||||
is EmoteMessageType,
|
||||
is TextMessageType,
|
||||
is NoticeMessageType,
|
||||
is OtherMessageType -> String::class.java
|
||||
}
|
||||
assertThat(result).isInstanceOf(expectedResult)
|
||||
}
|
||||
// Verify results content
|
||||
for ((type, result) in results) {
|
||||
val expectedResult = when (type) {
|
||||
is VideoMessageType -> "Video: Shared body"
|
||||
is AudioMessageType -> "Audio: Shared body"
|
||||
is VoiceMessageType -> "Voice message"
|
||||
is ImageMessageType -> "Image: Shared body"
|
||||
is StickerMessageType -> "Sticker: Shared body"
|
||||
is FileMessageType -> "File: Shared body"
|
||||
is LocationMessageType -> "Shared location: Shared body"
|
||||
is EmoteMessageType -> "* Someone ${type.body}"
|
||||
is TextMessageType,
|
||||
is NoticeMessageType,
|
||||
is OtherMessageType -> body
|
||||
}
|
||||
assertWithMessage("$type was not properly handled").that(result.toString()).isEqualTo(expectedResult)
|
||||
}
|
||||
}
|
||||
|
||||
// endregion
|
||||
|
||||
// region Membership change
|
||||
|
||||
@Test
|
||||
@Config(qualifiers = "en")
|
||||
fun `Membership change - joined`() {
|
||||
val otherName = "Other"
|
||||
val youContent = aRoomMembershipContent(A_USER_ID, null, MembershipChange.JOINED)
|
||||
val someoneContent = aRoomMembershipContent(UserId("@someone_else:domain"), otherName, MembershipChange.JOINED)
|
||||
|
||||
val youJoinedRoomEvent = createRoomEvent(sentByYou = true, senderDisplayName = null, content = youContent)
|
||||
val youJoinedRoom = formatter.format(youJoinedRoomEvent)
|
||||
assertThat(youJoinedRoom).isEqualTo(unsupportedEvent)
|
||||
|
||||
val someoneJoinedRoomEvent = createRoomEvent(sentByYou = false, senderDisplayName = otherName, content = someoneContent)
|
||||
val someoneJoinedRoom = formatter.format(someoneJoinedRoomEvent)
|
||||
assertThat(someoneJoinedRoom).isEqualTo(unsupportedEvent)
|
||||
}
|
||||
|
||||
@Test
|
||||
@Config(qualifiers = "en")
|
||||
fun `Membership change - left`() {
|
||||
val otherName = "Other"
|
||||
val youContent = aRoomMembershipContent(A_USER_ID, null, MembershipChange.LEFT)
|
||||
val someoneContent = aRoomMembershipContent(UserId("@someone_else:domain"), otherName, MembershipChange.LEFT)
|
||||
|
||||
val youLeftRoomEvent = createRoomEvent(sentByYou = true, senderDisplayName = null, content = youContent)
|
||||
val youLeftRoom = formatter.format(youLeftRoomEvent)
|
||||
assertThat(youLeftRoom).isEqualTo(unsupportedEvent)
|
||||
|
||||
val someoneLeftRoomEvent = createRoomEvent(sentByYou = false, senderDisplayName = otherName, content = someoneContent)
|
||||
val someoneLeftRoom = formatter.format(someoneLeftRoomEvent)
|
||||
assertThat(someoneLeftRoom).isEqualTo(unsupportedEvent)
|
||||
}
|
||||
|
||||
@Test
|
||||
@Config(qualifiers = "en")
|
||||
fun `Membership change - banned`() {
|
||||
val otherName = "Other"
|
||||
val third = "Someone"
|
||||
val youContent = aRoomMembershipContent(UserId("@someone_else:domain"), third, MembershipChange.BANNED)
|
||||
val youKickedContent = aRoomMembershipContent(UserId("@someone_else:domain"), third, MembershipChange.KICKED_AND_BANNED)
|
||||
val someoneContent = aRoomMembershipContent(UserId("@someone_else:domain"), third, MembershipChange.BANNED)
|
||||
val someoneKickedContent = aRoomMembershipContent(UserId("@someone_else:domain"), third, MembershipChange.KICKED_AND_BANNED)
|
||||
|
||||
val youBannedEvent = createRoomEvent(sentByYou = true, senderDisplayName = null, content = youContent)
|
||||
val youBanned = formatter.format(youBannedEvent)
|
||||
assertThat(youBanned).isEqualTo(unsupportedEvent)
|
||||
|
||||
val youKickBannedEvent = createRoomEvent(sentByYou = true, senderDisplayName = null, content = youKickedContent)
|
||||
val youKickedBanned = formatter.format(youKickBannedEvent)
|
||||
assertThat(youKickedBanned).isEqualTo(unsupportedEvent)
|
||||
|
||||
val someoneBannedEvent = createRoomEvent(sentByYou = false, senderDisplayName = otherName, content = someoneContent)
|
||||
val someoneBanned = formatter.format(someoneBannedEvent)
|
||||
assertThat(someoneBanned).isEqualTo(unsupportedEvent)
|
||||
|
||||
val someoneKickBannedEvent = createRoomEvent(sentByYou = false, senderDisplayName = otherName, content = someoneKickedContent)
|
||||
val someoneKickBanned = formatter.format(someoneKickBannedEvent)
|
||||
assertThat(someoneKickBanned).isEqualTo(unsupportedEvent)
|
||||
}
|
||||
|
||||
@Test
|
||||
@Config(qualifiers = "en")
|
||||
fun `Membership change - unban`() {
|
||||
val otherName = "Other"
|
||||
val third = "Someone"
|
||||
val youContent = aRoomMembershipContent(UserId("@someone_else:domain"), third, MembershipChange.UNBANNED)
|
||||
val someoneContent = aRoomMembershipContent(UserId("@someone_else:domain"), third, MembershipChange.UNBANNED)
|
||||
|
||||
val youUnbannedEvent = createRoomEvent(sentByYou = true, senderDisplayName = null, content = youContent)
|
||||
val youUnbanned = formatter.format(youUnbannedEvent)
|
||||
assertThat(youUnbanned).isEqualTo(unsupportedEvent)
|
||||
|
||||
val someoneUnbannedEvent = createRoomEvent(sentByYou = false, senderDisplayName = otherName, content = someoneContent)
|
||||
val someoneUnbanned = formatter.format(someoneUnbannedEvent)
|
||||
assertThat(someoneUnbanned).isEqualTo(unsupportedEvent)
|
||||
}
|
||||
|
||||
@Test
|
||||
@Config(qualifiers = "en")
|
||||
fun `Membership change - kicked`() {
|
||||
val otherName = "Other"
|
||||
val third = "Someone"
|
||||
val youContent = aRoomMembershipContent(UserId("@someone_else:domain"), third, MembershipChange.KICKED)
|
||||
val someoneContent = aRoomMembershipContent(UserId("@someone_else:domain"), third, MembershipChange.KICKED)
|
||||
|
||||
val youKickedEvent = createRoomEvent(sentByYou = true, senderDisplayName = null, content = youContent)
|
||||
val youKicked = formatter.format(youKickedEvent)
|
||||
assertThat(youKicked).isEqualTo(unsupportedEvent)
|
||||
|
||||
val someoneKickedEvent = createRoomEvent(sentByYou = false, senderDisplayName = otherName, content = someoneContent)
|
||||
val someoneKicked = formatter.format(someoneKickedEvent)
|
||||
assertThat(someoneKicked).isEqualTo(unsupportedEvent)
|
||||
}
|
||||
|
||||
@Test
|
||||
@Config(qualifiers = "en")
|
||||
fun `Membership change - invited`() {
|
||||
val otherName = "Other"
|
||||
val third = "Someone"
|
||||
val youContent = aRoomMembershipContent(A_USER_ID, null, MembershipChange.INVITED)
|
||||
val someoneContent = aRoomMembershipContent(UserId("@someone_else:domain"), third, MembershipChange.INVITED)
|
||||
|
||||
val youWereInvitedEvent = createRoomEvent(sentByYou = false, senderDisplayName = otherName, content = youContent)
|
||||
val youWereInvited = formatter.format(youWereInvitedEvent)
|
||||
assertThat(youWereInvited).isEqualTo(unsupportedEvent)
|
||||
|
||||
val youInvitedEvent = createRoomEvent(sentByYou = true, senderDisplayName = null, content = someoneContent)
|
||||
val youInvited = formatter.format(youInvitedEvent)
|
||||
assertThat(youInvited).isEqualTo(unsupportedEvent)
|
||||
|
||||
val someoneInvitedEvent = createRoomEvent(sentByYou = false, senderDisplayName = otherName, content = someoneContent)
|
||||
val someoneInvited = formatter.format(someoneInvitedEvent)
|
||||
assertThat(someoneInvited).isEqualTo(unsupportedEvent)
|
||||
}
|
||||
|
||||
@Test
|
||||
@Config(qualifiers = "en")
|
||||
fun `Membership change - invitation accepted`() {
|
||||
val otherName = "Other"
|
||||
val youContent = aRoomMembershipContent(A_USER_ID, null, MembershipChange.INVITATION_ACCEPTED)
|
||||
val someoneContent = aRoomMembershipContent(UserId("@someone_else:domain"), otherName, MembershipChange.INVITATION_ACCEPTED)
|
||||
|
||||
val youAcceptedInviteEvent = createRoomEvent(sentByYou = true, senderDisplayName = null, content = youContent)
|
||||
val youAcceptedInvite = formatter.format(youAcceptedInviteEvent)
|
||||
assertThat(youAcceptedInvite).isEqualTo(unsupportedEvent)
|
||||
|
||||
val someoneAcceptedInviteEvent = createRoomEvent(sentByYou = false, senderDisplayName = otherName, content = someoneContent)
|
||||
val someoneAcceptedInvite = formatter.format(someoneAcceptedInviteEvent)
|
||||
assertThat(someoneAcceptedInvite).isEqualTo(unsupportedEvent)
|
||||
}
|
||||
|
||||
@Test
|
||||
@Config(qualifiers = "en")
|
||||
fun `Membership change - invitation rejected`() {
|
||||
val otherName = "Other"
|
||||
val youContent = aRoomMembershipContent(A_USER_ID, null, MembershipChange.INVITATION_REJECTED)
|
||||
val someoneContent = aRoomMembershipContent(UserId("@someone_else:domain"), otherName, MembershipChange.INVITATION_REJECTED)
|
||||
|
||||
val youRejectedInviteEvent = createRoomEvent(sentByYou = true, senderDisplayName = null, content = youContent)
|
||||
val youRejectedInvite = formatter.format(youRejectedInviteEvent)
|
||||
assertThat(youRejectedInvite).isEqualTo(unsupportedEvent)
|
||||
|
||||
val someoneRejectedInviteEvent = createRoomEvent(sentByYou = false, senderDisplayName = otherName, content = someoneContent)
|
||||
val someoneRejectedInvite = formatter.format(someoneRejectedInviteEvent)
|
||||
assertThat(someoneRejectedInvite).isEqualTo(unsupportedEvent)
|
||||
}
|
||||
|
||||
@Test
|
||||
@Config(qualifiers = "en")
|
||||
fun `Membership change - invitation revoked`() {
|
||||
val otherName = "Other"
|
||||
val third = "Someone"
|
||||
val someoneContent = aRoomMembershipContent(UserId("@someone_else:domain"), third, MembershipChange.INVITATION_REVOKED)
|
||||
|
||||
val youRevokedInviteEvent = createRoomEvent(sentByYou = true, senderDisplayName = null, content = someoneContent)
|
||||
val youRevokedInvite = formatter.format(youRevokedInviteEvent)
|
||||
assertThat(youRevokedInvite).isEqualTo(unsupportedEvent)
|
||||
|
||||
val someoneRevokedInviteEvent = createRoomEvent(sentByYou = false, senderDisplayName = otherName, content = someoneContent)
|
||||
val someoneRevokedInvite = formatter.format(someoneRevokedInviteEvent)
|
||||
assertThat(someoneRevokedInvite).isEqualTo(unsupportedEvent)
|
||||
}
|
||||
|
||||
@Test
|
||||
@Config(qualifiers = "en")
|
||||
fun `Membership change - knocked`() {
|
||||
val otherName = "Other"
|
||||
val youContent = aRoomMembershipContent(A_USER_ID, null, MembershipChange.KNOCKED)
|
||||
val someoneContent = aRoomMembershipContent(UserId("@someone_else:domain"), otherName, MembershipChange.KNOCKED)
|
||||
|
||||
val youKnockedEvent = createRoomEvent(sentByYou = true, senderDisplayName = null, content = youContent)
|
||||
val youKnocked = formatter.format(youKnockedEvent)
|
||||
assertThat(youKnocked).isEqualTo(unsupportedEvent)
|
||||
|
||||
val someoneKnockedEvent = createRoomEvent(sentByYou = false, senderDisplayName = otherName, content = someoneContent)
|
||||
val someoneKnocked = formatter.format(someoneKnockedEvent)
|
||||
assertThat(someoneKnocked).isEqualTo(unsupportedEvent)
|
||||
}
|
||||
|
||||
@Test
|
||||
@Config(qualifiers = "en")
|
||||
fun `Membership change - knock accepted`() {
|
||||
val otherName = "Other"
|
||||
val third = "Someone"
|
||||
val someoneContent = aRoomMembershipContent(UserId("@someone_else:domain"), third, MembershipChange.KNOCK_ACCEPTED)
|
||||
|
||||
val youAcceptedKnockEvent = createRoomEvent(sentByYou = true, senderDisplayName = null, content = someoneContent)
|
||||
val youAcceptedKnock = formatter.format(youAcceptedKnockEvent)
|
||||
assertThat(youAcceptedKnock).isEqualTo(unsupportedEvent)
|
||||
|
||||
val someoneAcceptedKnockEvent = createRoomEvent(sentByYou = false, senderDisplayName = otherName, content = someoneContent)
|
||||
val someoneAcceptedKnock = formatter.format(someoneAcceptedKnockEvent)
|
||||
assertThat(someoneAcceptedKnock).isEqualTo(unsupportedEvent)
|
||||
}
|
||||
|
||||
@Test
|
||||
@Config(qualifiers = "en")
|
||||
fun `Membership change - knock retracted`() {
|
||||
val otherName = "Other"
|
||||
val youContent = aRoomMembershipContent(A_USER_ID, null, MembershipChange.KNOCK_RETRACTED)
|
||||
val someoneContent = aRoomMembershipContent(UserId("@someone_else:domain"), null, MembershipChange.KNOCK_RETRACTED)
|
||||
|
||||
val youRetractedKnockEvent = createRoomEvent(sentByYou = true, senderDisplayName = null, content = youContent)
|
||||
val youRetractedKnock = formatter.format(youRetractedKnockEvent)
|
||||
assertThat(youRetractedKnock).isEqualTo(unsupportedEvent)
|
||||
|
||||
val someoneRetractedKnockEvent = createRoomEvent(sentByYou = false, senderDisplayName = otherName, content = someoneContent)
|
||||
val someoneRetractedKnock = formatter.format(someoneRetractedKnockEvent)
|
||||
assertThat(someoneRetractedKnock).isEqualTo(unsupportedEvent)
|
||||
}
|
||||
|
||||
@Test
|
||||
@Config(qualifiers = "en")
|
||||
fun `Membership change - knock denied`() {
|
||||
val otherName = "Other"
|
||||
val third = "Someone"
|
||||
val youContent = aRoomMembershipContent(A_USER_ID, third, MembershipChange.KNOCK_DENIED)
|
||||
val someoneContent = aRoomMembershipContent(UserId("@someone_else:domain"), third, MembershipChange.KNOCK_DENIED)
|
||||
|
||||
val youDeniedKnockEvent = createRoomEvent(sentByYou = true, senderDisplayName = null, content = someoneContent)
|
||||
val youDeniedKnock = formatter.format(youDeniedKnockEvent)
|
||||
assertThat(youDeniedKnock).isEqualTo(unsupportedEvent)
|
||||
|
||||
val someoneDeniedKnockEvent = createRoomEvent(sentByYou = false, senderDisplayName = otherName, content = someoneContent)
|
||||
val someoneDeniedKnock = formatter.format(someoneDeniedKnockEvent)
|
||||
assertThat(someoneDeniedKnock).isEqualTo(unsupportedEvent)
|
||||
|
||||
val someoneDeniedYourKnockEvent = createRoomEvent(sentByYou = false, senderDisplayName = otherName, content = youContent)
|
||||
val someoneDeniedYourKnock = formatter.format(someoneDeniedYourKnockEvent)
|
||||
assertThat(someoneDeniedYourKnock).isEqualTo(unsupportedEvent)
|
||||
}
|
||||
|
||||
@Test
|
||||
@Config(qualifiers = "en")
|
||||
fun `Membership change - None`() {
|
||||
val otherName = "Other"
|
||||
val youContent = aRoomMembershipContent(A_USER_ID, null, MembershipChange.NONE)
|
||||
val someoneContent = aRoomMembershipContent(UserId("@someone_else:domain"), otherName, MembershipChange.NONE)
|
||||
|
||||
val youNoneRoomEvent = createRoomEvent(sentByYou = true, senderDisplayName = null, content = youContent)
|
||||
val youNoneRoom = formatter.format(youNoneRoomEvent)
|
||||
assertThat(youNoneRoom).isEqualTo(unsupportedEvent)
|
||||
|
||||
val someoneNoneRoomEvent = createRoomEvent(sentByYou = false, senderDisplayName = otherName, content = someoneContent)
|
||||
val someoneNoneRoom = formatter.format(someoneNoneRoomEvent)
|
||||
assertThat(someoneNoneRoom).isEqualTo(unsupportedEvent)
|
||||
}
|
||||
|
||||
@Test
|
||||
@Config(qualifiers = "en")
|
||||
fun `Membership change - others`() {
|
||||
val otherChanges = arrayOf(MembershipChange.ERROR, MembershipChange.NOT_IMPLEMENTED, null)
|
||||
|
||||
val results = otherChanges.map { change ->
|
||||
val content = aRoomMembershipContent(A_USER_ID, null, change)
|
||||
val event = createRoomEvent(sentByYou = false, senderDisplayName = "Someone", content = content)
|
||||
val result = formatter.format(event)
|
||||
change to result
|
||||
}
|
||||
val expected = otherChanges.map { it to unsupportedEvent }
|
||||
assertThat(results).isEqualTo(expected)
|
||||
}
|
||||
|
||||
// endregion
|
||||
|
||||
// region Room State
|
||||
|
||||
@Test
|
||||
@Config(qualifiers = "en")
|
||||
fun `Room state change - avatar`() {
|
||||
val otherName = "Other"
|
||||
val changedContent = StateContent("", OtherState.RoomAvatar("new_avatar"))
|
||||
val removedContent = StateContent("", OtherState.RoomAvatar(null))
|
||||
|
||||
val youChangedRoomAvatarEvent = createRoomEvent(sentByYou = true, senderDisplayName = null, content = changedContent)
|
||||
val youChangedRoomAvatar = formatter.format(youChangedRoomAvatarEvent)
|
||||
assertThat(youChangedRoomAvatar).isEqualTo(unsupportedEvent)
|
||||
|
||||
val someoneChangedRoomAvatarEvent = createRoomEvent(sentByYou = false, senderDisplayName = otherName, content = changedContent)
|
||||
val someoneChangedRoomAvatar = formatter.format(someoneChangedRoomAvatarEvent)
|
||||
assertThat(someoneChangedRoomAvatar).isEqualTo(unsupportedEvent)
|
||||
|
||||
val youRemovedRoomAvatarEvent = createRoomEvent(sentByYou = true, senderDisplayName = null, content = removedContent)
|
||||
val youRemovedRoomAvatar = formatter.format(youRemovedRoomAvatarEvent)
|
||||
assertThat(youRemovedRoomAvatar).isEqualTo(unsupportedEvent)
|
||||
|
||||
val someoneRemovedRoomAvatarEvent = createRoomEvent(sentByYou = false, senderDisplayName = otherName, content = removedContent)
|
||||
val someoneRemovedRoomAvatar = formatter.format(someoneRemovedRoomAvatarEvent)
|
||||
assertThat(someoneRemovedRoomAvatar).isEqualTo(unsupportedEvent)
|
||||
}
|
||||
|
||||
@Test
|
||||
@Config(qualifiers = "en")
|
||||
fun `Room state change - create`() {
|
||||
val otherName = "Other"
|
||||
val content = StateContent("", OtherState.RoomCreate)
|
||||
|
||||
val youCreatedRoomMessage = createRoomEvent(sentByYou = true, senderDisplayName = null, content = content)
|
||||
val youCreatedRoom = formatter.format(youCreatedRoomMessage)
|
||||
assertThat(youCreatedRoom).isEqualTo(unsupportedEvent)
|
||||
|
||||
val someoneCreatedRoomEvent = createRoomEvent(sentByYou = false, senderDisplayName = otherName, content = content)
|
||||
val someoneCreatedRoom = formatter.format(someoneCreatedRoomEvent)
|
||||
assertThat(someoneCreatedRoom).isEqualTo(unsupportedEvent)
|
||||
}
|
||||
|
||||
@Test
|
||||
@Config(qualifiers = "en")
|
||||
fun `Room state change - encryption`() {
|
||||
val otherName = "Other"
|
||||
val content = StateContent("", OtherState.RoomEncryption)
|
||||
|
||||
val youCreatedRoomMessage = createRoomEvent(sentByYou = true, senderDisplayName = null, content = content)
|
||||
val youCreatedRoom = formatter.format(youCreatedRoomMessage)
|
||||
assertThat(youCreatedRoom).isEqualTo(unsupportedEvent)
|
||||
|
||||
val someoneCreatedRoomEvent = createRoomEvent(sentByYou = false, senderDisplayName = otherName, content = content)
|
||||
val someoneCreatedRoom = formatter.format(someoneCreatedRoomEvent)
|
||||
assertThat(someoneCreatedRoom).isEqualTo(unsupportedEvent)
|
||||
}
|
||||
|
||||
@Test
|
||||
@Config(qualifiers = "en")
|
||||
fun `Room state change - room name`() {
|
||||
val otherName = "Other"
|
||||
val newName = "New name"
|
||||
val changedContent = StateContent("", OtherState.RoomName(newName))
|
||||
val removedContent = StateContent("", OtherState.RoomName(null))
|
||||
|
||||
val youChangedRoomNameEvent = createRoomEvent(sentByYou = true, senderDisplayName = null, content = changedContent)
|
||||
val youChangedRoomName = formatter.format(youChangedRoomNameEvent)
|
||||
assertThat(youChangedRoomName).isEqualTo(unsupportedEvent)
|
||||
|
||||
val someoneChangedRoomNameEvent = createRoomEvent(sentByYou = false, senderDisplayName = otherName, content = changedContent)
|
||||
val someoneChangedRoomName = formatter.format(someoneChangedRoomNameEvent)
|
||||
assertThat(someoneChangedRoomName).isEqualTo(unsupportedEvent)
|
||||
|
||||
val youRemovedRoomNameEvent = createRoomEvent(sentByYou = true, senderDisplayName = null, content = removedContent)
|
||||
val youRemovedRoomName = formatter.format(youRemovedRoomNameEvent)
|
||||
assertThat(youRemovedRoomName).isEqualTo(unsupportedEvent)
|
||||
|
||||
val someoneRemovedRoomNameEvent = createRoomEvent(sentByYou = false, senderDisplayName = otherName, content = removedContent)
|
||||
val someoneRemovedRoomName = formatter.format(someoneRemovedRoomNameEvent)
|
||||
assertThat(someoneRemovedRoomName).isEqualTo(unsupportedEvent)
|
||||
}
|
||||
|
||||
@Test
|
||||
@Config(qualifiers = "en")
|
||||
fun `Room state change - third party invite`() {
|
||||
val otherName = "Other"
|
||||
val inviteeName = "Alice"
|
||||
val changedContent = StateContent("", OtherState.RoomThirdPartyInvite(inviteeName))
|
||||
val removedContent = StateContent("", OtherState.RoomThirdPartyInvite(null))
|
||||
|
||||
val youInvitedSomeoneEvent = createRoomEvent(sentByYou = true, senderDisplayName = null, content = changedContent)
|
||||
val youInvitedSomeone = formatter.format(youInvitedSomeoneEvent)
|
||||
assertThat(youInvitedSomeone).isEqualTo(unsupportedEvent)
|
||||
|
||||
val someoneInvitedSomeoneEvent = createRoomEvent(sentByYou = false, senderDisplayName = otherName, content = changedContent)
|
||||
val someoneInvitedSomeone = formatter.format(someoneInvitedSomeoneEvent)
|
||||
assertThat(someoneInvitedSomeone).isEqualTo(unsupportedEvent)
|
||||
|
||||
val youInvitedNoOneEvent = createRoomEvent(sentByYou = true, senderDisplayName = null, content = removedContent)
|
||||
val youInvitedNoOne = formatter.format(youInvitedNoOneEvent)
|
||||
assertThat(youInvitedNoOne).isEqualTo(unsupportedEvent)
|
||||
|
||||
val someoneInvitedNoOneEvent = createRoomEvent(sentByYou = false, senderDisplayName = otherName, content = removedContent)
|
||||
val someoneInvitedNoOne = formatter.format(someoneInvitedNoOneEvent)
|
||||
assertThat(someoneInvitedNoOne).isEqualTo(unsupportedEvent)
|
||||
}
|
||||
|
||||
@Test
|
||||
@Config(qualifiers = "en")
|
||||
fun `Room state change - room topic`() {
|
||||
val otherName = "Other"
|
||||
val roomTopic = "New topic"
|
||||
val changedContent = StateContent("", OtherState.RoomTopic(roomTopic))
|
||||
val removedContent = StateContent("", OtherState.RoomTopic(null))
|
||||
|
||||
val youChangedRoomTopicEvent = createRoomEvent(sentByYou = true, senderDisplayName = null, content = changedContent)
|
||||
val youChangedRoomTopic = formatter.format(youChangedRoomTopicEvent)
|
||||
assertThat(youChangedRoomTopic).isEqualTo(unsupportedEvent)
|
||||
|
||||
val someoneChangedRoomTopicEvent = createRoomEvent(sentByYou = false, senderDisplayName = otherName, content = changedContent)
|
||||
val someoneChangedRoomTopic = formatter.format(someoneChangedRoomTopicEvent)
|
||||
assertThat(someoneChangedRoomTopic).isEqualTo(unsupportedEvent)
|
||||
|
||||
val youRemovedRoomTopicEvent = createRoomEvent(sentByYou = true, senderDisplayName = null, content = removedContent)
|
||||
val youRemovedRoomTopic = formatter.format(youRemovedRoomTopicEvent)
|
||||
assertThat(youRemovedRoomTopic).isEqualTo(unsupportedEvent)
|
||||
|
||||
val someoneRemovedRoomTopicEvent = createRoomEvent(sentByYou = false, senderDisplayName = otherName, content = removedContent)
|
||||
val someoneRemovedRoomTopic = formatter.format(someoneRemovedRoomTopicEvent)
|
||||
assertThat(someoneRemovedRoomTopic).isEqualTo(unsupportedEvent)
|
||||
}
|
||||
|
||||
@Test
|
||||
@Config(qualifiers = "en")
|
||||
fun `Room state change - others must return null`() {
|
||||
val otherStates = arrayOf(
|
||||
OtherState.PolicyRuleRoom,
|
||||
OtherState.PolicyRuleServer,
|
||||
OtherState.PolicyRuleUser,
|
||||
OtherState.RoomAliases,
|
||||
OtherState.RoomCanonicalAlias,
|
||||
OtherState.RoomGuestAccess,
|
||||
OtherState.RoomHistoryVisibility,
|
||||
OtherState.RoomJoinRules(null),
|
||||
OtherState.RoomPinnedEvents(OtherState.RoomPinnedEvents.Change.CHANGED),
|
||||
OtherState.RoomUserPowerLevels(emptyMap()),
|
||||
OtherState.RoomServerAcl,
|
||||
OtherState.RoomTombstone,
|
||||
OtherState.SpaceChild,
|
||||
OtherState.SpaceParent,
|
||||
OtherState.Custom("custom_event_type")
|
||||
)
|
||||
|
||||
val results = otherStates.map { state ->
|
||||
val content = StateContent("", state)
|
||||
val event = createRoomEvent(sentByYou = false, senderDisplayName = "Someone", content = content)
|
||||
val result = formatter.format(event)
|
||||
state to result
|
||||
}
|
||||
val expected = otherStates.map { it to unsupportedEvent }
|
||||
assertThat(results).isEqualTo(expected)
|
||||
}
|
||||
|
||||
// endregion
|
||||
|
||||
// region Profile change
|
||||
|
||||
@Test
|
||||
@Config(qualifiers = "en")
|
||||
fun `Profile change - avatar`() {
|
||||
val otherName = "Other"
|
||||
val changedContent = aProfileChangeMessageContent(avatarUrl = "new_avatar_url", prevAvatarUrl = "old_avatar_url")
|
||||
val setContent = aProfileChangeMessageContent(avatarUrl = "new_avatar_url", prevAvatarUrl = null)
|
||||
val removedContent = aProfileChangeMessageContent(avatarUrl = null, prevAvatarUrl = "old_avatar_url")
|
||||
val invalidContent = aProfileChangeMessageContent(avatarUrl = null, prevAvatarUrl = null)
|
||||
val sameContent = aProfileChangeMessageContent(avatarUrl = "same_avatar_url", prevAvatarUrl = "same_avatar_url")
|
||||
|
||||
val youChangedAvatarEvent = createRoomEvent(sentByYou = true, senderDisplayName = null, content = changedContent)
|
||||
val youChangedAvatar = formatter.format(youChangedAvatarEvent)
|
||||
assertThat(youChangedAvatar).isEqualTo(unsupportedEvent)
|
||||
|
||||
val someoneChangeAvatarEvent = createRoomEvent(sentByYou = false, senderDisplayName = otherName, content = changedContent)
|
||||
val someoneChangeAvatar = formatter.format(someoneChangeAvatarEvent)
|
||||
assertThat(someoneChangeAvatar).isEqualTo(unsupportedEvent)
|
||||
|
||||
val youSetAvatarEvent = createRoomEvent(sentByYou = true, senderDisplayName = null, content = setContent)
|
||||
val youSetAvatar = formatter.format(youSetAvatarEvent)
|
||||
assertThat(youSetAvatar).isEqualTo(unsupportedEvent)
|
||||
|
||||
val someoneSetAvatarEvent = createRoomEvent(sentByYou = false, senderDisplayName = otherName, content = setContent)
|
||||
val someoneSetAvatar = formatter.format(someoneSetAvatarEvent)
|
||||
assertThat(someoneSetAvatar).isEqualTo(unsupportedEvent)
|
||||
|
||||
val youRemovedAvatarEvent = createRoomEvent(sentByYou = true, senderDisplayName = null, content = removedContent)
|
||||
val youRemovedAvatar = formatter.format(youRemovedAvatarEvent)
|
||||
assertThat(youRemovedAvatar).isEqualTo(unsupportedEvent)
|
||||
|
||||
val someoneRemovedAvatarEvent = createRoomEvent(sentByYou = false, senderDisplayName = otherName, content = removedContent)
|
||||
val someoneRemovedAvatar = formatter.format(someoneRemovedAvatarEvent)
|
||||
assertThat(someoneRemovedAvatar).isEqualTo(unsupportedEvent)
|
||||
|
||||
val unchangedEvent = createRoomEvent(sentByYou = true, senderDisplayName = otherName, content = sameContent)
|
||||
val unchangedResult = formatter.format(unchangedEvent)
|
||||
assertThat(unchangedResult).isEqualTo(unsupportedEvent)
|
||||
|
||||
val invalidEvent = createRoomEvent(sentByYou = true, senderDisplayName = otherName, content = invalidContent)
|
||||
val invalidResult = formatter.format(invalidEvent)
|
||||
assertThat(invalidResult).isEqualTo(unsupportedEvent)
|
||||
}
|
||||
|
||||
@Test
|
||||
@Config(qualifiers = "en")
|
||||
fun `Profile change - display name`() {
|
||||
val newDisplayName = "New"
|
||||
val oldDisplayName = "Old"
|
||||
val otherName = "Other"
|
||||
val changedContent = aProfileChangeMessageContent(displayName = newDisplayName, prevDisplayName = oldDisplayName)
|
||||
val setContent = aProfileChangeMessageContent(displayName = newDisplayName, prevDisplayName = null)
|
||||
val removedContent = aProfileChangeMessageContent(displayName = null, prevDisplayName = oldDisplayName)
|
||||
val sameContent = aProfileChangeMessageContent(displayName = newDisplayName, prevDisplayName = newDisplayName)
|
||||
val invalidContent = aProfileChangeMessageContent(displayName = null, prevDisplayName = null)
|
||||
|
||||
val youChangedDisplayNameEvent = createRoomEvent(sentByYou = true, senderDisplayName = null, content = changedContent)
|
||||
val youChangedDisplayName = formatter.format(youChangedDisplayNameEvent)
|
||||
assertThat(youChangedDisplayName).isEqualTo(unsupportedEvent)
|
||||
|
||||
val someoneChangedDisplayNameEvent = createRoomEvent(sentByYou = false, senderDisplayName = otherName, content = changedContent)
|
||||
val someoneChangedDisplayName = formatter.format(someoneChangedDisplayNameEvent)
|
||||
assertThat(someoneChangedDisplayName).isEqualTo(unsupportedEvent)
|
||||
|
||||
val youSetDisplayNameEvent = createRoomEvent(sentByYou = true, senderDisplayName = null, content = setContent)
|
||||
val youSetDisplayName = formatter.format(youSetDisplayNameEvent)
|
||||
assertThat(youSetDisplayName).isEqualTo(unsupportedEvent)
|
||||
|
||||
val someoneSetDisplayNameEvent = createRoomEvent(sentByYou = false, senderDisplayName = otherName, content = setContent)
|
||||
val someoneSetDisplayName = formatter.format(someoneSetDisplayNameEvent)
|
||||
assertThat(someoneSetDisplayName).isEqualTo(unsupportedEvent)
|
||||
|
||||
val youRemovedDisplayNameEvent = createRoomEvent(sentByYou = true, senderDisplayName = null, content = removedContent)
|
||||
val youRemovedDisplayName = formatter.format(youRemovedDisplayNameEvent)
|
||||
assertThat(youRemovedDisplayName).isEqualTo(unsupportedEvent)
|
||||
|
||||
val someoneRemovedDisplayNameEvent = createRoomEvent(sentByYou = false, senderDisplayName = otherName, content = removedContent)
|
||||
val someoneRemovedDisplayName = formatter.format(someoneRemovedDisplayNameEvent)
|
||||
assertThat(someoneRemovedDisplayName).isEqualTo(unsupportedEvent)
|
||||
|
||||
val unchangedEvent = createRoomEvent(sentByYou = true, senderDisplayName = otherName, content = sameContent)
|
||||
val unchangedResult = formatter.format(unchangedEvent)
|
||||
assertThat(unchangedResult).isEqualTo(unsupportedEvent)
|
||||
|
||||
val invalidEvent = createRoomEvent(sentByYou = true, senderDisplayName = otherName, content = invalidContent)
|
||||
val invalidResult = formatter.format(invalidEvent)
|
||||
assertThat(invalidResult).isEqualTo(unsupportedEvent)
|
||||
}
|
||||
|
||||
@Test
|
||||
@Config(qualifiers = "en")
|
||||
fun `Profile change - display name & avatar`() {
|
||||
val newDisplayName = "New"
|
||||
val oldDisplayName = "Old"
|
||||
val changedContent = aProfileChangeMessageContent(
|
||||
displayName = newDisplayName,
|
||||
prevDisplayName = oldDisplayName,
|
||||
avatarUrl = "new_avatar_url",
|
||||
prevAvatarUrl = "old_avatar_url",
|
||||
)
|
||||
val invalidContent = aProfileChangeMessageContent(
|
||||
displayName = null,
|
||||
prevDisplayName = null,
|
||||
avatarUrl = null,
|
||||
prevAvatarUrl = null,
|
||||
)
|
||||
val sameContent = aProfileChangeMessageContent(
|
||||
displayName = newDisplayName,
|
||||
prevDisplayName = newDisplayName,
|
||||
avatarUrl = "same_avatar_url",
|
||||
prevAvatarUrl = "same_avatar_url",
|
||||
)
|
||||
|
||||
val youChangedBothEvent = createRoomEvent(sentByYou = true, senderDisplayName = null, content = changedContent)
|
||||
val youChangedBoth = formatter.format(youChangedBothEvent)
|
||||
assertThat(youChangedBoth).isEqualTo(unsupportedEvent)
|
||||
|
||||
val invalidContentEvent = createRoomEvent(sentByYou = true, senderDisplayName = null, content = invalidContent)
|
||||
val invalidMessage = formatter.format(invalidContentEvent)
|
||||
assertThat(invalidMessage).isEqualTo(unsupportedEvent)
|
||||
|
||||
val sameContentEvent = createRoomEvent(sentByYou = true, senderDisplayName = null, content = sameContent)
|
||||
val sameMessage = formatter.format(sameContentEvent)
|
||||
assertThat(sameMessage).isEqualTo(unsupportedEvent)
|
||||
}
|
||||
|
||||
// endregion
|
||||
|
||||
// region Polls
|
||||
|
||||
@Test
|
||||
@Config(qualifiers = "en")
|
||||
fun `Computes last message for poll`() {
|
||||
val pollContent = aPollContent()
|
||||
|
||||
val mineContentEvent = createRoomEvent(sentByYou = true, senderDisplayName = "Alice", content = pollContent)
|
||||
val result = formatter.format(mineContentEvent)
|
||||
assertThat(result).isInstanceOf(AnnotatedString::class.java)
|
||||
assertThat(result.toString()).isEqualTo("Poll: Do you like polls?")
|
||||
|
||||
val contentEvent = createRoomEvent(sentByYou = false, senderDisplayName = "Bob", content = pollContent)
|
||||
val result2 = formatter.format(contentEvent)
|
||||
assertThat(result2).isInstanceOf(AnnotatedString::class.java)
|
||||
assertThat(result2.toString()).isEqualTo("Poll: Do you like polls?")
|
||||
}
|
||||
|
||||
// endregion
|
||||
|
||||
private fun createRoomEvent(
|
||||
sentByYou: Boolean,
|
||||
senderDisplayName: String?,
|
||||
content: EventContent,
|
||||
): EventTimelineItem {
|
||||
val sender = if (sentByYou) A_USER_ID else someoneElseId
|
||||
val profile = aProfileDetails(senderDisplayName)
|
||||
return anEventTimelineItem(
|
||||
content = content,
|
||||
senderProfile = profile,
|
||||
sender = sender,
|
||||
isOwn = sentByYou,
|
||||
)
|
||||
}
|
||||
|
||||
private val someoneElseId = UserId("@someone_else:domain")
|
||||
}
|
||||
+944
@@ -0,0 +1,944 @@
|
||||
/*
|
||||
* Copyright (c) 2025 Element Creations Ltd.
|
||||
* Copyright 2023-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.libraries.eventformatter.impl
|
||||
|
||||
import android.content.Context
|
||||
import androidx.compose.ui.text.AnnotatedString
|
||||
import com.google.common.truth.Truth.assertThat
|
||||
import com.google.common.truth.Truth.assertWithMessage
|
||||
import io.element.android.libraries.matrix.api.core.UserId
|
||||
import io.element.android.libraries.matrix.api.media.ImageInfo
|
||||
import io.element.android.libraries.matrix.api.media.MediaSource
|
||||
import io.element.android.libraries.matrix.api.roomlist.LatestEventValue
|
||||
import io.element.android.libraries.matrix.api.timeline.item.event.AudioMessageType
|
||||
import io.element.android.libraries.matrix.api.timeline.item.event.EmoteMessageType
|
||||
import io.element.android.libraries.matrix.api.timeline.item.event.EventContent
|
||||
import io.element.android.libraries.matrix.api.timeline.item.event.FailedToParseMessageLikeContent
|
||||
import io.element.android.libraries.matrix.api.timeline.item.event.FailedToParseStateContent
|
||||
import io.element.android.libraries.matrix.api.timeline.item.event.FileMessageType
|
||||
import io.element.android.libraries.matrix.api.timeline.item.event.ImageMessageType
|
||||
import io.element.android.libraries.matrix.api.timeline.item.event.LocationMessageType
|
||||
import io.element.android.libraries.matrix.api.timeline.item.event.MembershipChange
|
||||
import io.element.android.libraries.matrix.api.timeline.item.event.MessageContent
|
||||
import io.element.android.libraries.matrix.api.timeline.item.event.MessageType
|
||||
import io.element.android.libraries.matrix.api.timeline.item.event.NoticeMessageType
|
||||
import io.element.android.libraries.matrix.api.timeline.item.event.OtherMessageType
|
||||
import io.element.android.libraries.matrix.api.timeline.item.event.OtherState
|
||||
import io.element.android.libraries.matrix.api.timeline.item.event.RedactedContent
|
||||
import io.element.android.libraries.matrix.api.timeline.item.event.StateContent
|
||||
import io.element.android.libraries.matrix.api.timeline.item.event.StickerMessageType
|
||||
import io.element.android.libraries.matrix.api.timeline.item.event.TextMessageType
|
||||
import io.element.android.libraries.matrix.api.timeline.item.event.UnableToDecryptContent
|
||||
import io.element.android.libraries.matrix.api.timeline.item.event.UnknownContent
|
||||
import io.element.android.libraries.matrix.api.timeline.item.event.VideoMessageType
|
||||
import io.element.android.libraries.matrix.api.timeline.item.event.VoiceMessageType
|
||||
import io.element.android.libraries.matrix.test.A_REASON
|
||||
import io.element.android.libraries.matrix.test.A_USER_ID
|
||||
import io.element.android.libraries.matrix.test.FakeMatrixClient
|
||||
import io.element.android.libraries.matrix.test.media.aMediaSource
|
||||
import io.element.android.libraries.matrix.test.permalink.FakePermalinkParser
|
||||
import io.element.android.libraries.matrix.test.room.aRemoteLatestEvent
|
||||
import io.element.android.libraries.matrix.test.timeline.aPollContent
|
||||
import io.element.android.libraries.matrix.test.timeline.aProfileChangeMessageContent
|
||||
import io.element.android.libraries.matrix.test.timeline.aProfileDetails
|
||||
import io.element.android.libraries.matrix.test.timeline.aStickerContent
|
||||
import io.element.android.libraries.matrix.test.timeline.item.event.aRoomMembershipContent
|
||||
import io.element.android.services.toolbox.impl.strings.AndroidStringProvider
|
||||
import org.junit.Before
|
||||
import org.junit.Test
|
||||
import org.junit.runner.RunWith
|
||||
import org.robolectric.RobolectricTestRunner
|
||||
import org.robolectric.RuntimeEnvironment
|
||||
import org.robolectric.annotation.Config
|
||||
|
||||
@Suppress("LargeClass")
|
||||
@RunWith(RobolectricTestRunner::class)
|
||||
class DefaultRoomLatestEventFormatterTest {
|
||||
private lateinit var context: Context
|
||||
private lateinit var fakeMatrixClient: FakeMatrixClient
|
||||
private lateinit var formatter: DefaultRoomLatestEventFormatter
|
||||
|
||||
@Before
|
||||
fun setup() {
|
||||
context = RuntimeEnvironment.getApplication() as Context
|
||||
fakeMatrixClient = FakeMatrixClient()
|
||||
val stringProvider = AndroidStringProvider(context.resources)
|
||||
formatter = DefaultRoomLatestEventFormatter(
|
||||
sp = AndroidStringProvider(context.resources),
|
||||
roomMembershipContentFormatter = RoomMembershipContentFormatter(fakeMatrixClient, stringProvider),
|
||||
profileChangeContentFormatter = ProfileChangeContentFormatter(stringProvider),
|
||||
stateContentFormatter = StateContentFormatter(stringProvider),
|
||||
permalinkParser = FakePermalinkParser(),
|
||||
)
|
||||
}
|
||||
|
||||
@Test
|
||||
@Config(qualifiers = "en")
|
||||
fun `Redacted content`() {
|
||||
val expected = "Message removed"
|
||||
val senderName = "Someone"
|
||||
sequenceOf(false, true).forEach { isDm ->
|
||||
val message = createLatestEvent(false, senderName, RedactedContent)
|
||||
val result = formatter.format(message, isDm)
|
||||
if (isDm) {
|
||||
assertThat(result).isEqualTo(expected)
|
||||
} else {
|
||||
assertThat(result).isInstanceOf(AnnotatedString::class.java)
|
||||
assertThat(result.toString()).isEqualTo("$senderName: $expected")
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
@Config(qualifiers = "en")
|
||||
fun `Sticker content`() {
|
||||
val body = "a sticker body"
|
||||
val info = ImageInfo(null, null, null, null, null, null, null)
|
||||
val message = createLatestEvent(false, null, aStickerContent(body, info, aMediaSource(url = "url")))
|
||||
val result = formatter.format(message, false)
|
||||
val expectedBody = someoneElseId.value + ": Sticker (a sticker body)"
|
||||
assertThat(result.toString()).isEqualTo(expectedBody)
|
||||
}
|
||||
|
||||
@Test
|
||||
@Config(qualifiers = "en")
|
||||
fun `Unable to decrypt content`() {
|
||||
val expected = "Waiting for this message"
|
||||
val senderName = "Someone"
|
||||
sequenceOf(false, true).forEach { isDm ->
|
||||
val message = createLatestEvent(false, senderName, UnableToDecryptContent(UnableToDecryptContent.Data.Unknown))
|
||||
val result = formatter.format(message, isDm)
|
||||
if (isDm) {
|
||||
assertThat(result).isEqualTo(expected)
|
||||
} else {
|
||||
assertThat(result).isInstanceOf(AnnotatedString::class.java)
|
||||
assertThat(result.toString()).isEqualTo("$senderName: $expected")
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
@Config(qualifiers = "en")
|
||||
fun `FailedToParseMessageLike, FailedToParseState & Unknown content`() {
|
||||
val expected = "Unsupported event"
|
||||
val senderName = "Someone"
|
||||
sequenceOf(false, true).forEach { isDm ->
|
||||
sequenceOf(
|
||||
FailedToParseMessageLikeContent("", ""),
|
||||
FailedToParseStateContent("", "", ""),
|
||||
UnknownContent,
|
||||
).forEach { type ->
|
||||
val message = createLatestEvent(false, senderName, type)
|
||||
val result = formatter.format(message, isDm)
|
||||
if (isDm) {
|
||||
assertWithMessage("$type was not properly handled").that(result).isEqualTo(expected)
|
||||
} else {
|
||||
assertWithMessage("$type does not create an AnnotatedString").that(result).isInstanceOf(AnnotatedString::class.java)
|
||||
assertWithMessage("$type was not properly handled").that(result.toString()).isEqualTo("$senderName: $expected")
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// region Message contents
|
||||
|
||||
@Test
|
||||
@Config(qualifiers = "en")
|
||||
fun `Message contents sent by other user`() {
|
||||
testMessageContents(
|
||||
sentByYou = false,
|
||||
senderName = "Alice",
|
||||
expectedPrefix = "Alice",
|
||||
)
|
||||
}
|
||||
|
||||
@Test
|
||||
@Config(qualifiers = "en")
|
||||
fun `Message contents sent by current user`() {
|
||||
testMessageContents(
|
||||
sentByYou = true,
|
||||
senderName = "Bob",
|
||||
expectedPrefix = "You",
|
||||
)
|
||||
}
|
||||
|
||||
private fun testMessageContents(
|
||||
sentByYou: Boolean,
|
||||
senderName: String,
|
||||
expectedPrefix: String,
|
||||
) {
|
||||
val body = "Shared body"
|
||||
fun createMessageContent(type: MessageType): MessageContent {
|
||||
return MessageContent(body, null, false, null, type)
|
||||
}
|
||||
|
||||
val sharedContentMessagesTypes = arrayOf(
|
||||
TextMessageType(body, null),
|
||||
VideoMessageType(body, null, null, MediaSource("url"), null),
|
||||
AudioMessageType(body, null, null, MediaSource("url"), null),
|
||||
VoiceMessageType(body, null, null, MediaSource("url"), null, null),
|
||||
ImageMessageType(body, null, null, MediaSource("url"), null),
|
||||
StickerMessageType(body, null, null, MediaSource("url"), null),
|
||||
FileMessageType(body, null, null, MediaSource("url"), null),
|
||||
LocationMessageType(body, "geo:1,2", null),
|
||||
NoticeMessageType(body, null),
|
||||
EmoteMessageType(body, null),
|
||||
OtherMessageType(msgType = "a_type", body = body),
|
||||
)
|
||||
val resultsInRoom = mutableListOf<Pair<MessageType, CharSequence?>>()
|
||||
val resultsInDm = mutableListOf<Pair<MessageType, CharSequence?>>()
|
||||
|
||||
// Create messages for all types in DM and Room mode
|
||||
sequenceOf(false, true).forEach { isDm ->
|
||||
sharedContentMessagesTypes.forEach { type ->
|
||||
val content = createMessageContent(type)
|
||||
val message = createLatestEvent(sentByYou = sentByYou, senderDisplayName = senderName, content = content)
|
||||
val result = formatter.format(message, isDmRoom = isDm)
|
||||
if (isDm) {
|
||||
resultsInDm.add(type to result)
|
||||
} else {
|
||||
resultsInRoom.add(type to result)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Verify results of DM mode
|
||||
for ((type, result) in resultsInDm) {
|
||||
val string = result.toString()
|
||||
val expectedResult = when (type) {
|
||||
is VideoMessageType -> "Video: Shared body"
|
||||
is AudioMessageType -> "Audio: Shared body"
|
||||
is VoiceMessageType -> "Voice message"
|
||||
is ImageMessageType -> "Image: Shared body"
|
||||
is StickerMessageType -> "Sticker: Shared body"
|
||||
is FileMessageType -> "File: Shared body"
|
||||
is LocationMessageType -> "Shared location"
|
||||
is EmoteMessageType -> "* $senderName ${type.body}"
|
||||
is TextMessageType,
|
||||
is NoticeMessageType,
|
||||
is OtherMessageType -> body
|
||||
}
|
||||
val shouldCreateAnnotatedString = when (type) {
|
||||
is VideoMessageType -> true
|
||||
is AudioMessageType -> true
|
||||
is VoiceMessageType -> false
|
||||
is ImageMessageType -> true
|
||||
is StickerMessageType -> true
|
||||
is FileMessageType -> true
|
||||
is LocationMessageType -> false
|
||||
is EmoteMessageType -> false
|
||||
is TextMessageType -> false
|
||||
is NoticeMessageType -> false
|
||||
is OtherMessageType -> false
|
||||
}
|
||||
if (shouldCreateAnnotatedString) {
|
||||
assertWithMessage("$type doesn't produce an AnnotatedString")
|
||||
.that(result)
|
||||
.isInstanceOf(AnnotatedString::class.java)
|
||||
}
|
||||
assertWithMessage("$type was not properly handled for DM").that(string).isEqualTo(expectedResult)
|
||||
}
|
||||
|
||||
// Verify results of Room mode
|
||||
for ((type, result) in resultsInRoom) {
|
||||
val string = result.toString()
|
||||
val expectedResult = when (type) {
|
||||
is VideoMessageType -> "$expectedPrefix: Video: Shared body"
|
||||
is AudioMessageType -> "$expectedPrefix: Audio: Shared body"
|
||||
is VoiceMessageType -> "$expectedPrefix: Voice message"
|
||||
is ImageMessageType -> "$expectedPrefix: Image: Shared body"
|
||||
is StickerMessageType -> "$expectedPrefix: Sticker: Shared body"
|
||||
is FileMessageType -> "$expectedPrefix: File: Shared body"
|
||||
is LocationMessageType -> "$expectedPrefix: Shared location"
|
||||
is TextMessageType,
|
||||
is NoticeMessageType,
|
||||
is OtherMessageType -> "$expectedPrefix: $body"
|
||||
is EmoteMessageType -> "* $senderName ${type.body}"
|
||||
}
|
||||
val shouldCreateAnnotatedString = when (type) {
|
||||
is VideoMessageType -> true
|
||||
is AudioMessageType -> true
|
||||
is VoiceMessageType -> true
|
||||
is ImageMessageType -> true
|
||||
is StickerMessageType -> true
|
||||
is FileMessageType -> true
|
||||
is LocationMessageType -> false
|
||||
is EmoteMessageType -> false
|
||||
is TextMessageType -> true
|
||||
is NoticeMessageType -> true
|
||||
is OtherMessageType -> true
|
||||
}
|
||||
if (shouldCreateAnnotatedString) {
|
||||
assertWithMessage("$type doesn't produce an AnnotatedString")
|
||||
.that(result)
|
||||
.isInstanceOf(AnnotatedString::class.java)
|
||||
}
|
||||
assertWithMessage("$type was not properly handled for room").that(string).isEqualTo(expectedResult)
|
||||
}
|
||||
}
|
||||
|
||||
// endregion
|
||||
|
||||
// region Membership change
|
||||
|
||||
@Test
|
||||
@Config(qualifiers = "en")
|
||||
fun `Membership change - joined`() {
|
||||
val otherName = "Other"
|
||||
val youContent = aRoomMembershipContent(A_USER_ID, null, MembershipChange.JOINED)
|
||||
val someoneContent = aRoomMembershipContent(UserId("@someone_else:domain"), otherName, MembershipChange.JOINED)
|
||||
|
||||
val youJoinedRoomEvent = createLatestEvent(sentByYou = true, senderDisplayName = null, content = youContent)
|
||||
val youJoinedRoom = formatter.format(youJoinedRoomEvent, false)
|
||||
assertThat(youJoinedRoom).isEqualTo("You joined the room")
|
||||
|
||||
val someoneJoinedRoomEvent = createLatestEvent(sentByYou = false, senderDisplayName = otherName, content = someoneContent)
|
||||
val someoneJoinedRoom = formatter.format(someoneJoinedRoomEvent, false)
|
||||
assertThat(someoneJoinedRoom).isEqualTo("$otherName joined the room")
|
||||
}
|
||||
|
||||
@Test
|
||||
@Config(qualifiers = "en")
|
||||
fun `Membership change - left`() {
|
||||
val otherName = "Other"
|
||||
val youContent = aRoomMembershipContent(A_USER_ID, null, MembershipChange.LEFT)
|
||||
val someoneContent = aRoomMembershipContent(UserId("@someone_else:domain"), otherName, MembershipChange.LEFT)
|
||||
|
||||
val youLeftRoomEvent = createLatestEvent(sentByYou = true, senderDisplayName = null, content = youContent)
|
||||
val youLeftRoom = formatter.format(youLeftRoomEvent, false)
|
||||
assertThat(youLeftRoom).isEqualTo("You left the room")
|
||||
|
||||
val someoneLeftRoomEvent = createLatestEvent(sentByYou = false, senderDisplayName = otherName, content = someoneContent)
|
||||
val someoneLeftRoom = formatter.format(someoneLeftRoomEvent, false)
|
||||
assertThat(someoneLeftRoom).isEqualTo("$otherName left the room")
|
||||
}
|
||||
|
||||
@Test
|
||||
@Config(qualifiers = "en")
|
||||
fun `Membership change - banned`() {
|
||||
val otherName = "Other"
|
||||
val third = "Someone"
|
||||
val youContent = aRoomMembershipContent(UserId("@someone_else:domain"), third, MembershipChange.BANNED)
|
||||
val youKickedContent = aRoomMembershipContent(UserId("@someone_else:domain"), third, MembershipChange.KICKED_AND_BANNED)
|
||||
val someoneContent = aRoomMembershipContent(UserId("@someone_else:domain"), third, MembershipChange.BANNED)
|
||||
val someoneKickedContent = aRoomMembershipContent(UserId("@someone_else:domain"), third, MembershipChange.KICKED_AND_BANNED)
|
||||
|
||||
val youBannedEvent = createLatestEvent(sentByYou = true, senderDisplayName = null, content = youContent)
|
||||
val youBanned = formatter.format(youBannedEvent, false)
|
||||
assertThat(youBanned).isEqualTo("You banned $third")
|
||||
|
||||
val youKickBannedEvent = createLatestEvent(sentByYou = true, senderDisplayName = null, content = youKickedContent)
|
||||
val youKickedBanned = formatter.format(youKickBannedEvent, false)
|
||||
assertThat(youKickedBanned).isEqualTo("You banned $third")
|
||||
|
||||
val someoneBannedEvent = createLatestEvent(sentByYou = false, senderDisplayName = otherName, content = someoneContent)
|
||||
val someoneBanned = formatter.format(someoneBannedEvent, false)
|
||||
assertThat(someoneBanned).isEqualTo("$otherName banned $third")
|
||||
|
||||
val someoneKickBannedEvent = createLatestEvent(sentByYou = false, senderDisplayName = otherName, content = someoneKickedContent)
|
||||
val someoneKickBanned = formatter.format(someoneKickBannedEvent, false)
|
||||
assertThat(someoneKickBanned).isEqualTo("$otherName banned $third")
|
||||
}
|
||||
|
||||
@Test
|
||||
@Config(qualifiers = "en")
|
||||
fun `Membership change - banned with reason`() {
|
||||
val otherName = "Other"
|
||||
val third = "Someone"
|
||||
val youContent = aRoomMembershipContent(UserId("@someone_else:domain"), third, MembershipChange.BANNED, A_REASON)
|
||||
val youKickedContent = aRoomMembershipContent(UserId("@someone_else:domain"), third, MembershipChange.KICKED_AND_BANNED, A_REASON)
|
||||
val someoneContent = aRoomMembershipContent(UserId("@someone_else:domain"), third, MembershipChange.BANNED, A_REASON)
|
||||
val someoneKickedContent = aRoomMembershipContent(UserId("@someone_else:domain"), third, MembershipChange.KICKED_AND_BANNED, A_REASON)
|
||||
|
||||
val youBannedEvent = createLatestEvent(sentByYou = true, senderDisplayName = null, content = youContent)
|
||||
val youBanned = formatter.format(youBannedEvent, false)
|
||||
assertThat(youBanned).isEqualTo("You banned $third: $A_REASON")
|
||||
|
||||
val youKickBannedEvent = createLatestEvent(sentByYou = true, senderDisplayName = null, content = youKickedContent)
|
||||
val youKickedBanned = formatter.format(youKickBannedEvent, false)
|
||||
assertThat(youKickedBanned).isEqualTo("You banned $third: $A_REASON")
|
||||
|
||||
val someoneBannedEvent = createLatestEvent(sentByYou = false, senderDisplayName = otherName, content = someoneContent)
|
||||
val someoneBanned = formatter.format(someoneBannedEvent, false)
|
||||
assertThat(someoneBanned).isEqualTo("$otherName banned $third: $A_REASON")
|
||||
|
||||
val someoneKickBannedEvent = createLatestEvent(sentByYou = false, senderDisplayName = otherName, content = someoneKickedContent)
|
||||
val someoneKickBanned = formatter.format(someoneKickBannedEvent, false)
|
||||
assertThat(someoneKickBanned).isEqualTo("$otherName banned $third: $A_REASON")
|
||||
}
|
||||
|
||||
@Test
|
||||
@Config(qualifiers = "en")
|
||||
fun `Membership change - unban`() {
|
||||
val otherName = "Other"
|
||||
val third = "Someone"
|
||||
val youContent = aRoomMembershipContent(UserId("@someone_else:domain"), third, MembershipChange.UNBANNED)
|
||||
val someoneContent = aRoomMembershipContent(UserId("@someone_else:domain"), third, MembershipChange.UNBANNED)
|
||||
|
||||
val youUnbannedEvent = createLatestEvent(sentByYou = true, senderDisplayName = null, content = youContent)
|
||||
val youUnbanned = formatter.format(youUnbannedEvent, false)
|
||||
assertThat(youUnbanned).isEqualTo("You unbanned $third")
|
||||
|
||||
val someoneUnbannedEvent = createLatestEvent(sentByYou = false, senderDisplayName = otherName, content = someoneContent)
|
||||
val someoneUnbanned = formatter.format(someoneUnbannedEvent, false)
|
||||
assertThat(someoneUnbanned).isEqualTo("$otherName unbanned $third")
|
||||
}
|
||||
|
||||
@Test
|
||||
@Config(qualifiers = "en")
|
||||
fun `Membership change - kicked`() {
|
||||
val otherName = "Other"
|
||||
val third = "Someone"
|
||||
val youContent = aRoomMembershipContent(UserId("@someone_else:domain"), third, MembershipChange.KICKED)
|
||||
val someoneContent = aRoomMembershipContent(UserId("@someone_else:domain"), third, MembershipChange.KICKED)
|
||||
|
||||
val youKickedEvent = createLatestEvent(sentByYou = true, senderDisplayName = null, content = youContent)
|
||||
val youKicked = formatter.format(youKickedEvent, false)
|
||||
assertThat(youKicked).isEqualTo("You removed $third")
|
||||
|
||||
val someoneKickedEvent = createLatestEvent(sentByYou = false, senderDisplayName = otherName, content = someoneContent)
|
||||
val someoneKicked = formatter.format(someoneKickedEvent, false)
|
||||
assertThat(someoneKicked).isEqualTo("$otherName removed $third")
|
||||
}
|
||||
|
||||
@Test
|
||||
@Config(qualifiers = "en")
|
||||
fun `Membership change - kicked with reason`() {
|
||||
val otherName = "Other"
|
||||
val third = "Someone"
|
||||
val youContent = aRoomMembershipContent(UserId("@someone_else:domain"), third, MembershipChange.KICKED, A_REASON)
|
||||
val someoneContent = aRoomMembershipContent(UserId("@someone_else:domain"), third, MembershipChange.KICKED, A_REASON)
|
||||
|
||||
val youKickedEvent = createLatestEvent(sentByYou = true, senderDisplayName = null, content = youContent)
|
||||
val youKicked = formatter.format(youKickedEvent, false)
|
||||
assertThat(youKicked).isEqualTo("You removed $third: $A_REASON")
|
||||
|
||||
val someoneKickedEvent = createLatestEvent(sentByYou = false, senderDisplayName = otherName, content = someoneContent)
|
||||
val someoneKicked = formatter.format(someoneKickedEvent, false)
|
||||
assertThat(someoneKicked).isEqualTo("$otherName removed $third: $A_REASON")
|
||||
}
|
||||
|
||||
@Test
|
||||
@Config(qualifiers = "en")
|
||||
fun `Membership change - invited`() {
|
||||
val otherName = "Other"
|
||||
val third = "Someone"
|
||||
val youContent = aRoomMembershipContent(A_USER_ID, null, MembershipChange.INVITED)
|
||||
val someoneContent = aRoomMembershipContent(UserId("@someone_else:domain"), third, MembershipChange.INVITED)
|
||||
|
||||
val youWereInvitedEvent = createLatestEvent(sentByYou = false, senderDisplayName = otherName, content = youContent)
|
||||
val youWereInvited = formatter.format(youWereInvitedEvent, false)
|
||||
assertThat(youWereInvited).isEqualTo("$otherName invited you")
|
||||
|
||||
val youInvitedEvent = createLatestEvent(sentByYou = true, senderDisplayName = null, content = someoneContent)
|
||||
val youInvited = formatter.format(youInvitedEvent, false)
|
||||
assertThat(youInvited).isEqualTo("You invited $third")
|
||||
|
||||
val someoneInvitedEvent = createLatestEvent(sentByYou = false, senderDisplayName = otherName, content = someoneContent)
|
||||
val someoneInvited = formatter.format(someoneInvitedEvent, false)
|
||||
assertThat(someoneInvited).isEqualTo("$otherName invited $third")
|
||||
}
|
||||
|
||||
@Test
|
||||
@Config(qualifiers = "en")
|
||||
fun `Membership change - invitation accepted`() {
|
||||
val otherName = "Other"
|
||||
val youContent = aRoomMembershipContent(A_USER_ID, null, MembershipChange.INVITATION_ACCEPTED)
|
||||
val someoneContent = aRoomMembershipContent(UserId("@someone_else:domain"), otherName, MembershipChange.INVITATION_ACCEPTED)
|
||||
|
||||
val youAcceptedInviteEvent = createLatestEvent(sentByYou = true, senderDisplayName = null, content = youContent)
|
||||
val youAcceptedInvite = formatter.format(youAcceptedInviteEvent, false)
|
||||
assertThat(youAcceptedInvite).isEqualTo("You accepted the invite")
|
||||
|
||||
val someoneAcceptedInviteEvent = createLatestEvent(sentByYou = false, senderDisplayName = otherName, content = someoneContent)
|
||||
val someoneAcceptedInvite = formatter.format(someoneAcceptedInviteEvent, false)
|
||||
assertThat(someoneAcceptedInvite).isEqualTo("$otherName accepted the invite")
|
||||
}
|
||||
|
||||
@Test
|
||||
@Config(qualifiers = "en")
|
||||
fun `Membership change - invitation rejected`() {
|
||||
val otherName = "Other"
|
||||
val youContent = aRoomMembershipContent(A_USER_ID, null, MembershipChange.INVITATION_REJECTED)
|
||||
val someoneContent = aRoomMembershipContent(UserId("@someone_else:domain"), otherName, MembershipChange.INVITATION_REJECTED)
|
||||
|
||||
val youRejectedInviteEvent = createLatestEvent(sentByYou = true, senderDisplayName = null, content = youContent)
|
||||
val youRejectedInvite = formatter.format(youRejectedInviteEvent, false)
|
||||
assertThat(youRejectedInvite).isEqualTo("You rejected the invitation")
|
||||
|
||||
val someoneRejectedInviteEvent = createLatestEvent(sentByYou = false, senderDisplayName = otherName, content = someoneContent)
|
||||
val someoneRejectedInvite = formatter.format(someoneRejectedInviteEvent, false)
|
||||
assertThat(someoneRejectedInvite).isEqualTo("$otherName rejected the invitation")
|
||||
}
|
||||
|
||||
@Test
|
||||
@Config(qualifiers = "en")
|
||||
fun `Membership change - invitation revoked`() {
|
||||
val otherName = "Other"
|
||||
val third = "Someone"
|
||||
val someoneContent = aRoomMembershipContent(UserId("@someone_else:domain"), third, MembershipChange.INVITATION_REVOKED)
|
||||
|
||||
val youRevokedInviteEvent = createLatestEvent(sentByYou = true, senderDisplayName = null, content = someoneContent)
|
||||
val youRevokedInvite = formatter.format(youRevokedInviteEvent, false)
|
||||
assertThat(youRevokedInvite).isEqualTo("You revoked the invitation for $third to join the room")
|
||||
|
||||
val someoneRevokedInviteEvent = createLatestEvent(sentByYou = false, senderDisplayName = otherName, content = someoneContent)
|
||||
val someoneRevokedInvite = formatter.format(someoneRevokedInviteEvent, false)
|
||||
assertThat(someoneRevokedInvite).isEqualTo("$otherName revoked the invitation for $third to join the room")
|
||||
}
|
||||
|
||||
@Test
|
||||
@Config(qualifiers = "en")
|
||||
fun `Membership change - knocked`() {
|
||||
val otherName = "Other"
|
||||
val youContent = aRoomMembershipContent(A_USER_ID, null, MembershipChange.KNOCKED)
|
||||
val someoneContent = aRoomMembershipContent(UserId("@someone_else:domain"), otherName, MembershipChange.KNOCKED)
|
||||
|
||||
val youKnockedEvent = createLatestEvent(sentByYou = true, senderDisplayName = null, content = youContent)
|
||||
val youKnocked = formatter.format(youKnockedEvent, false)
|
||||
assertThat(youKnocked).isEqualTo("You requested to join")
|
||||
|
||||
val someoneKnockedEvent = createLatestEvent(sentByYou = false, senderDisplayName = otherName, content = someoneContent)
|
||||
val someoneKnocked = formatter.format(someoneKnockedEvent, false)
|
||||
assertThat(someoneKnocked).isEqualTo("$otherName is requesting to join")
|
||||
}
|
||||
|
||||
@Test
|
||||
@Config(qualifiers = "en")
|
||||
fun `Membership change - knock accepted`() {
|
||||
val otherName = "Other"
|
||||
val third = "Someone"
|
||||
val someoneContent = aRoomMembershipContent(UserId("@someone_else:domain"), third, MembershipChange.KNOCK_ACCEPTED)
|
||||
|
||||
val youAcceptedKnockEvent = createLatestEvent(sentByYou = true, senderDisplayName = null, content = someoneContent)
|
||||
val youAcceptedKnock = formatter.format(youAcceptedKnockEvent, false)
|
||||
assertThat(youAcceptedKnock).isEqualTo("You allowed $third to join")
|
||||
|
||||
val someoneAcceptedKnockEvent = createLatestEvent(sentByYou = false, senderDisplayName = otherName, content = someoneContent)
|
||||
val someoneAcceptedKnock = formatter.format(someoneAcceptedKnockEvent, false)
|
||||
assertThat(someoneAcceptedKnock).isEqualTo("$otherName granted access to $third")
|
||||
}
|
||||
|
||||
@Test
|
||||
@Config(qualifiers = "en")
|
||||
fun `Membership change - knock retracted`() {
|
||||
val otherName = "Other"
|
||||
val youContent = aRoomMembershipContent(A_USER_ID, null, MembershipChange.KNOCK_RETRACTED)
|
||||
val someoneContent = aRoomMembershipContent(UserId("@someone_else:domain"), null, MembershipChange.KNOCK_RETRACTED)
|
||||
|
||||
val youRetractedKnockEvent = createLatestEvent(sentByYou = true, senderDisplayName = null, content = youContent)
|
||||
val youRetractedKnock = formatter.format(youRetractedKnockEvent, false)
|
||||
assertThat(youRetractedKnock).isEqualTo("You cancelled your request to join")
|
||||
|
||||
val someoneRetractedKnockEvent = createLatestEvent(sentByYou = false, senderDisplayName = otherName, content = someoneContent)
|
||||
val someoneRetractedKnock = formatter.format(someoneRetractedKnockEvent, false)
|
||||
assertThat(someoneRetractedKnock).isEqualTo("$otherName is no longer interested in joining")
|
||||
}
|
||||
|
||||
@Test
|
||||
@Config(qualifiers = "en")
|
||||
fun `Membership change - knock denied`() {
|
||||
val otherName = "Other"
|
||||
val third = "Someone"
|
||||
val youContent = aRoomMembershipContent(A_USER_ID, third, MembershipChange.KNOCK_DENIED)
|
||||
val someoneContent = aRoomMembershipContent(UserId("@someone_else:domain"), third, MembershipChange.KNOCK_DENIED)
|
||||
|
||||
val youDeniedKnockEvent = createLatestEvent(sentByYou = true, senderDisplayName = null, content = someoneContent)
|
||||
val youDeniedKnock = formatter.format(youDeniedKnockEvent, false)
|
||||
assertThat(youDeniedKnock).isEqualTo("You rejected $third's request to join")
|
||||
|
||||
val someoneDeniedKnockEvent = createLatestEvent(sentByYou = false, senderDisplayName = otherName, content = someoneContent)
|
||||
val someoneDeniedKnock = formatter.format(someoneDeniedKnockEvent, false)
|
||||
assertThat(someoneDeniedKnock).isEqualTo("$otherName rejected $third's request to join")
|
||||
|
||||
val someoneDeniedYourKnockEvent = createLatestEvent(sentByYou = false, senderDisplayName = otherName, content = youContent)
|
||||
val someoneDeniedYourKnock = formatter.format(someoneDeniedYourKnockEvent, false)
|
||||
assertThat(someoneDeniedYourKnock).isEqualTo("$otherName rejected your request to join")
|
||||
}
|
||||
|
||||
@Test
|
||||
@Config(qualifiers = "en")
|
||||
fun `Membership change - None`() {
|
||||
val otherName = "Other"
|
||||
val youContent = aRoomMembershipContent(A_USER_ID, null, MembershipChange.NONE)
|
||||
val someoneContent = aRoomMembershipContent(UserId("@someone_else:domain"), otherName, MembershipChange.NONE)
|
||||
|
||||
val youNoneRoomEvent = createLatestEvent(sentByYou = true, senderDisplayName = null, content = youContent)
|
||||
val youNoneRoom = formatter.format(youNoneRoomEvent, false)
|
||||
assertThat(youNoneRoom).isEqualTo("You made no changes")
|
||||
|
||||
val someoneNoneRoomEvent = createLatestEvent(sentByYou = false, senderDisplayName = otherName, content = someoneContent)
|
||||
val someoneNoneRoom = formatter.format(someoneNoneRoomEvent, false)
|
||||
assertThat(someoneNoneRoom).isEqualTo("$otherName made no changes")
|
||||
}
|
||||
|
||||
@Test
|
||||
@Config(qualifiers = "en")
|
||||
fun `Membership change - others`() {
|
||||
val otherChanges = arrayOf(MembershipChange.ERROR, MembershipChange.NOT_IMPLEMENTED, null)
|
||||
|
||||
val results = otherChanges.map { change ->
|
||||
val content = aRoomMembershipContent(A_USER_ID, null, change)
|
||||
val event = createLatestEvent(sentByYou = false, senderDisplayName = "Someone", content = content)
|
||||
val result = formatter.format(event, false)
|
||||
change to result
|
||||
}
|
||||
val expected = otherChanges.map { it to null }
|
||||
assertThat(results).isEqualTo(expected)
|
||||
}
|
||||
|
||||
// endregion
|
||||
|
||||
// region Room State
|
||||
|
||||
@Test
|
||||
@Config(qualifiers = "en")
|
||||
fun `Room state change - avatar`() {
|
||||
val otherName = "Other"
|
||||
val changedContent = StateContent("", OtherState.RoomAvatar("new_avatar"))
|
||||
val removedContent = StateContent("", OtherState.RoomAvatar(null))
|
||||
|
||||
val youChangedRoomAvatarEvent = createLatestEvent(sentByYou = true, senderDisplayName = null, content = changedContent)
|
||||
val youChangedRoomAvatar = formatter.format(youChangedRoomAvatarEvent, false)
|
||||
assertThat(youChangedRoomAvatar).isEqualTo("You changed the room avatar")
|
||||
|
||||
val someoneChangedRoomAvatarEvent = createLatestEvent(sentByYou = false, senderDisplayName = otherName, content = changedContent)
|
||||
val someoneChangedRoomAvatar = formatter.format(someoneChangedRoomAvatarEvent, false)
|
||||
assertThat(someoneChangedRoomAvatar).isEqualTo("$otherName changed the room avatar")
|
||||
|
||||
val youRemovedRoomAvatarEvent = createLatestEvent(sentByYou = true, senderDisplayName = null, content = removedContent)
|
||||
val youRemovedRoomAvatar = formatter.format(youRemovedRoomAvatarEvent, false)
|
||||
assertThat(youRemovedRoomAvatar).isEqualTo("You removed the room avatar")
|
||||
|
||||
val someoneRemovedRoomAvatarEvent = createLatestEvent(sentByYou = false, senderDisplayName = otherName, content = removedContent)
|
||||
val someoneRemovedRoomAvatar = formatter.format(someoneRemovedRoomAvatarEvent, false)
|
||||
assertThat(someoneRemovedRoomAvatar).isEqualTo("$otherName removed the room avatar")
|
||||
}
|
||||
|
||||
@Test
|
||||
@Config(qualifiers = "en")
|
||||
fun `Room state change - create`() {
|
||||
val otherName = "Other"
|
||||
val content = StateContent("", OtherState.RoomCreate)
|
||||
|
||||
val youCreatedRoomMessage = createLatestEvent(sentByYou = true, senderDisplayName = null, content = content)
|
||||
val youCreatedRoom = formatter.format(youCreatedRoomMessage, false)
|
||||
assertThat(youCreatedRoom).isEqualTo("You created the room")
|
||||
|
||||
val someoneCreatedRoomEvent = createLatestEvent(sentByYou = false, senderDisplayName = otherName, content = content)
|
||||
val someoneCreatedRoom = formatter.format(someoneCreatedRoomEvent, false)
|
||||
assertThat(someoneCreatedRoom).isEqualTo("$otherName created the room")
|
||||
}
|
||||
|
||||
@Test
|
||||
@Config(qualifiers = "en")
|
||||
fun `Room state change - encryption`() {
|
||||
val otherName = "Other"
|
||||
val content = StateContent("", OtherState.RoomEncryption)
|
||||
|
||||
val youCreatedRoomMessage = createLatestEvent(sentByYou = true, senderDisplayName = null, content = content)
|
||||
val youCreatedRoom = formatter.format(youCreatedRoomMessage, false)
|
||||
assertThat(youCreatedRoom).isEqualTo("Encryption enabled")
|
||||
|
||||
val someoneCreatedRoomEvent = createLatestEvent(sentByYou = false, senderDisplayName = otherName, content = content)
|
||||
val someoneCreatedRoom = formatter.format(someoneCreatedRoomEvent, false)
|
||||
assertThat(someoneCreatedRoom).isEqualTo("Encryption enabled")
|
||||
}
|
||||
|
||||
@Test
|
||||
@Config(qualifiers = "en")
|
||||
fun `Room state change - room name`() {
|
||||
val otherName = "Other"
|
||||
val newName = "New name"
|
||||
val changedContent = StateContent("", OtherState.RoomName(newName))
|
||||
val removedContent = StateContent("", OtherState.RoomName(null))
|
||||
|
||||
val youChangedRoomNameEvent = createLatestEvent(sentByYou = true, senderDisplayName = null, content = changedContent)
|
||||
val youChangedRoomName = formatter.format(youChangedRoomNameEvent, false)
|
||||
assertThat(youChangedRoomName).isEqualTo("You changed the room name to: $newName")
|
||||
|
||||
val someoneChangedRoomNameEvent = createLatestEvent(sentByYou = false, senderDisplayName = otherName, content = changedContent)
|
||||
val someoneChangedRoomName = formatter.format(someoneChangedRoomNameEvent, false)
|
||||
assertThat(someoneChangedRoomName).isEqualTo("$otherName changed the room name to: $newName")
|
||||
|
||||
val youRemovedRoomNameEvent = createLatestEvent(sentByYou = true, senderDisplayName = null, content = removedContent)
|
||||
val youRemovedRoomName = formatter.format(youRemovedRoomNameEvent, false)
|
||||
assertThat(youRemovedRoomName).isEqualTo("You removed the room name")
|
||||
|
||||
val someoneRemovedRoomNameEvent = createLatestEvent(sentByYou = false, senderDisplayName = otherName, content = removedContent)
|
||||
val someoneRemovedRoomName = formatter.format(someoneRemovedRoomNameEvent, false)
|
||||
assertThat(someoneRemovedRoomName).isEqualTo("$otherName removed the room name")
|
||||
}
|
||||
|
||||
@Test
|
||||
@Config(qualifiers = "en")
|
||||
fun `Room state change - third party invite`() {
|
||||
val otherName = "Other"
|
||||
val inviteeName = "Alice"
|
||||
val changedContent = StateContent("", OtherState.RoomThirdPartyInvite(inviteeName))
|
||||
val removedContent = StateContent("", OtherState.RoomThirdPartyInvite(null))
|
||||
|
||||
val youInvitedSomeoneEvent = createLatestEvent(sentByYou = true, senderDisplayName = null, content = changedContent)
|
||||
val youInvitedSomeone = formatter.format(youInvitedSomeoneEvent, false)
|
||||
assertThat(youInvitedSomeone).isEqualTo("You sent an invitation to $inviteeName to join the room")
|
||||
|
||||
val someoneInvitedSomeoneEvent = createLatestEvent(sentByYou = false, senderDisplayName = otherName, content = changedContent)
|
||||
val someoneInvitedSomeone = formatter.format(someoneInvitedSomeoneEvent, false)
|
||||
assertThat(someoneInvitedSomeone).isEqualTo("$otherName sent an invitation to $inviteeName to join the room")
|
||||
|
||||
val youInvitedNoOneEvent = createLatestEvent(sentByYou = true, senderDisplayName = null, content = removedContent)
|
||||
val youInvitedNoOne = formatter.format(youInvitedNoOneEvent, false)
|
||||
assertThat(youInvitedNoOne).isNull()
|
||||
|
||||
val someoneInvitedNoOneEvent = createLatestEvent(sentByYou = false, senderDisplayName = otherName, content = removedContent)
|
||||
val someoneInvitedNoOne = formatter.format(someoneInvitedNoOneEvent, false)
|
||||
assertThat(someoneInvitedNoOne).isNull()
|
||||
}
|
||||
|
||||
@Test
|
||||
@Config(qualifiers = "en")
|
||||
fun `Room state change - room topic`() {
|
||||
val otherName = "Other"
|
||||
val roomTopic = "New topic"
|
||||
val changedContent = StateContent("", OtherState.RoomTopic(roomTopic))
|
||||
val removedContent = StateContent("", OtherState.RoomTopic(null))
|
||||
val blankContent = StateContent("", OtherState.RoomTopic(""))
|
||||
|
||||
val youChangedRoomTopicEvent = createLatestEvent(sentByYou = true, senderDisplayName = null, content = changedContent)
|
||||
val youChangedRoomTopic = formatter.format(youChangedRoomTopicEvent, false)
|
||||
assertThat(youChangedRoomTopic).isEqualTo("You changed the topic to: $roomTopic")
|
||||
|
||||
val someoneChangedRoomTopicEvent = createLatestEvent(sentByYou = false, senderDisplayName = otherName, content = changedContent)
|
||||
val someoneChangedRoomTopic = formatter.format(someoneChangedRoomTopicEvent, false)
|
||||
assertThat(someoneChangedRoomTopic).isEqualTo("$otherName changed the topic to: $roomTopic")
|
||||
|
||||
val youRemovedRoomTopicEvent = createLatestEvent(sentByYou = true, senderDisplayName = null, content = removedContent)
|
||||
val youRemovedRoomTopic = formatter.format(youRemovedRoomTopicEvent, false)
|
||||
assertThat(youRemovedRoomTopic).isEqualTo("You removed the room topic")
|
||||
|
||||
val someoneRemovedRoomTopicEvent = createLatestEvent(sentByYou = false, senderDisplayName = otherName, content = removedContent)
|
||||
val someoneRemovedRoomTopic = formatter.format(someoneRemovedRoomTopicEvent, false)
|
||||
assertThat(someoneRemovedRoomTopic).isEqualTo("$otherName removed the room topic")
|
||||
|
||||
val youSetBlankRoomTopicEvent = createLatestEvent(sentByYou = true, senderDisplayName = null, content = blankContent)
|
||||
val youSetBlankRoomTopic = formatter.format(youSetBlankRoomTopicEvent, false)
|
||||
assertThat(youSetBlankRoomTopic).isEqualTo("You removed the room topic")
|
||||
|
||||
val someoneSetBlankRoomTopicEvent = createLatestEvent(sentByYou = false, senderDisplayName = otherName, content = blankContent)
|
||||
val someoneSetBlankRoomTopic = formatter.format(someoneSetBlankRoomTopicEvent, false)
|
||||
assertThat(someoneSetBlankRoomTopic).isEqualTo("$otherName removed the room topic")
|
||||
}
|
||||
|
||||
@Test
|
||||
@Config(qualifiers = "en")
|
||||
fun `Room state change - others must return null`() {
|
||||
val otherStates = arrayOf(
|
||||
OtherState.PolicyRuleRoom,
|
||||
OtherState.PolicyRuleServer,
|
||||
OtherState.PolicyRuleUser,
|
||||
OtherState.RoomAliases,
|
||||
OtherState.RoomCanonicalAlias,
|
||||
OtherState.RoomGuestAccess,
|
||||
OtherState.RoomHistoryVisibility,
|
||||
OtherState.RoomJoinRules(null),
|
||||
OtherState.RoomPinnedEvents(OtherState.RoomPinnedEvents.Change.CHANGED),
|
||||
OtherState.RoomUserPowerLevels(emptyMap()),
|
||||
OtherState.RoomServerAcl,
|
||||
OtherState.RoomTombstone,
|
||||
OtherState.SpaceChild,
|
||||
OtherState.SpaceParent,
|
||||
OtherState.Custom("custom_event_type")
|
||||
)
|
||||
|
||||
val results = otherStates.map { state ->
|
||||
val content = StateContent("", state)
|
||||
val event = createLatestEvent(sentByYou = false, senderDisplayName = "Someone", content = content)
|
||||
val result = formatter.format(event, false)
|
||||
state to result
|
||||
}
|
||||
val expected = otherStates.map { it to null }
|
||||
assertThat(results).isEqualTo(expected)
|
||||
}
|
||||
|
||||
// endregion
|
||||
|
||||
// region Profile change
|
||||
|
||||
@Test
|
||||
@Config(qualifiers = "en")
|
||||
fun `Profile change - avatar`() {
|
||||
val otherName = "Other"
|
||||
val changedContent = aProfileChangeMessageContent(avatarUrl = "new_avatar_url", prevAvatarUrl = "old_avatar_url")
|
||||
val setContent = aProfileChangeMessageContent(avatarUrl = "new_avatar_url", prevAvatarUrl = null)
|
||||
val removedContent = aProfileChangeMessageContent(avatarUrl = null, prevAvatarUrl = "old_avatar_url")
|
||||
val invalidContent = aProfileChangeMessageContent(avatarUrl = null, prevAvatarUrl = null)
|
||||
val sameContent = aProfileChangeMessageContent(avatarUrl = "same_avatar_url", prevAvatarUrl = "same_avatar_url")
|
||||
|
||||
val youChangedAvatarEvent = createLatestEvent(sentByYou = true, senderDisplayName = null, content = changedContent)
|
||||
val youChangedAvatar = formatter.format(youChangedAvatarEvent, false)
|
||||
assertThat(youChangedAvatar).isEqualTo("You changed your avatar")
|
||||
|
||||
val someoneChangeAvatarEvent = createLatestEvent(sentByYou = false, senderDisplayName = otherName, content = changedContent)
|
||||
val someoneChangeAvatar = formatter.format(someoneChangeAvatarEvent, false)
|
||||
assertThat(someoneChangeAvatar).isEqualTo("$otherName changed their avatar")
|
||||
|
||||
val youSetAvatarEvent = createLatestEvent(sentByYou = true, senderDisplayName = null, content = setContent)
|
||||
val youSetAvatar = formatter.format(youSetAvatarEvent, false)
|
||||
assertThat(youSetAvatar).isEqualTo("You changed your avatar")
|
||||
|
||||
val someoneSetAvatarEvent = createLatestEvent(sentByYou = false, senderDisplayName = otherName, content = setContent)
|
||||
val someoneSetAvatar = formatter.format(someoneSetAvatarEvent, false)
|
||||
assertThat(someoneSetAvatar).isEqualTo("$otherName changed their avatar")
|
||||
|
||||
val youRemovedAvatarEvent = createLatestEvent(sentByYou = true, senderDisplayName = null, content = removedContent)
|
||||
val youRemovedAvatar = formatter.format(youRemovedAvatarEvent, false)
|
||||
assertThat(youRemovedAvatar).isEqualTo("You changed your avatar")
|
||||
|
||||
val someoneRemovedAvatarEvent = createLatestEvent(sentByYou = false, senderDisplayName = otherName, content = removedContent)
|
||||
val someoneRemovedAvatar = formatter.format(someoneRemovedAvatarEvent, false)
|
||||
assertThat(someoneRemovedAvatar).isEqualTo("$otherName changed their avatar")
|
||||
|
||||
val unchangedEvent = createLatestEvent(sentByYou = true, senderDisplayName = otherName, content = sameContent)
|
||||
val unchangedResult = formatter.format(unchangedEvent, false)
|
||||
assertThat(unchangedResult).isNull()
|
||||
|
||||
val invalidEvent = createLatestEvent(sentByYou = true, senderDisplayName = otherName, content = invalidContent)
|
||||
val invalidResult = formatter.format(invalidEvent, false)
|
||||
assertThat(invalidResult).isNull()
|
||||
}
|
||||
|
||||
@Test
|
||||
@Config(qualifiers = "en")
|
||||
fun `Profile change - display name`() {
|
||||
val newDisplayName = "New"
|
||||
val oldDisplayName = "Old"
|
||||
val otherName = "Other"
|
||||
val changedContent = aProfileChangeMessageContent(displayName = newDisplayName, prevDisplayName = oldDisplayName)
|
||||
val setContent = aProfileChangeMessageContent(displayName = newDisplayName, prevDisplayName = null)
|
||||
val removedContent = aProfileChangeMessageContent(displayName = null, prevDisplayName = oldDisplayName)
|
||||
val sameContent = aProfileChangeMessageContent(displayName = newDisplayName, prevDisplayName = newDisplayName)
|
||||
val invalidContent = aProfileChangeMessageContent(displayName = null, prevDisplayName = null)
|
||||
|
||||
val youChangedDisplayNameEvent = createLatestEvent(sentByYou = true, senderDisplayName = null, content = changedContent)
|
||||
val youChangedDisplayName = formatter.format(youChangedDisplayNameEvent, false)
|
||||
assertThat(youChangedDisplayName).isEqualTo("You changed your display name from $oldDisplayName to $newDisplayName")
|
||||
|
||||
val someoneChangedDisplayNameEvent = createLatestEvent(sentByYou = false, senderDisplayName = otherName, content = changedContent)
|
||||
val someoneChangedDisplayName = formatter.format(someoneChangedDisplayNameEvent, false)
|
||||
assertThat(someoneChangedDisplayName).isEqualTo("$someoneElseId changed their display name from $oldDisplayName to $newDisplayName")
|
||||
|
||||
val youSetDisplayNameEvent = createLatestEvent(sentByYou = true, senderDisplayName = null, content = setContent)
|
||||
val youSetDisplayName = formatter.format(youSetDisplayNameEvent, false)
|
||||
assertThat(youSetDisplayName).isEqualTo("You set your display name to $newDisplayName")
|
||||
|
||||
val someoneSetDisplayNameEvent = createLatestEvent(sentByYou = false, senderDisplayName = otherName, content = setContent)
|
||||
val someoneSetDisplayName = formatter.format(someoneSetDisplayNameEvent, false)
|
||||
assertThat(someoneSetDisplayName).isEqualTo("$someoneElseId set their display name to $newDisplayName")
|
||||
|
||||
val youRemovedDisplayNameEvent = createLatestEvent(sentByYou = true, senderDisplayName = null, content = removedContent)
|
||||
val youRemovedDisplayName = formatter.format(youRemovedDisplayNameEvent, false)
|
||||
assertThat(youRemovedDisplayName).isEqualTo("You removed your display name (it was $oldDisplayName)")
|
||||
|
||||
val someoneRemovedDisplayNameEvent = createLatestEvent(sentByYou = false, senderDisplayName = otherName, content = removedContent)
|
||||
val someoneRemovedDisplayName = formatter.format(someoneRemovedDisplayNameEvent, false)
|
||||
assertThat(someoneRemovedDisplayName).isEqualTo("$someoneElseId removed their display name (it was $oldDisplayName)")
|
||||
|
||||
val unchangedEvent = createLatestEvent(sentByYou = true, senderDisplayName = otherName, content = sameContent)
|
||||
val unchangedResult = formatter.format(unchangedEvent, false)
|
||||
assertThat(unchangedResult).isNull()
|
||||
|
||||
val invalidEvent = createLatestEvent(sentByYou = true, senderDisplayName = otherName, content = invalidContent)
|
||||
val invalidResult = formatter.format(invalidEvent, false)
|
||||
assertThat(invalidResult).isNull()
|
||||
}
|
||||
|
||||
@Test
|
||||
@Config(qualifiers = "en")
|
||||
fun `Profile change - display name & avatar`() {
|
||||
val newDisplayName = "New"
|
||||
val oldDisplayName = "Old"
|
||||
val changedContent = aProfileChangeMessageContent(
|
||||
displayName = newDisplayName,
|
||||
prevDisplayName = oldDisplayName,
|
||||
avatarUrl = "new_avatar_url",
|
||||
prevAvatarUrl = "old_avatar_url",
|
||||
)
|
||||
val invalidContent = aProfileChangeMessageContent(
|
||||
displayName = null,
|
||||
prevDisplayName = null,
|
||||
avatarUrl = null,
|
||||
prevAvatarUrl = null,
|
||||
)
|
||||
val sameContent = aProfileChangeMessageContent(
|
||||
displayName = newDisplayName,
|
||||
prevDisplayName = newDisplayName,
|
||||
avatarUrl = "same_avatar_url",
|
||||
prevAvatarUrl = "same_avatar_url",
|
||||
)
|
||||
|
||||
val youChangedBothEvent = createLatestEvent(sentByYou = true, senderDisplayName = null, content = changedContent)
|
||||
val youChangedBoth = formatter.format(youChangedBothEvent, false)
|
||||
assertThat(youChangedBoth).isEqualTo("You changed your display name from $oldDisplayName to $newDisplayName\n(avatar was changed too)")
|
||||
|
||||
val invalidContentEvent = createLatestEvent(sentByYou = true, senderDisplayName = null, content = invalidContent)
|
||||
val invalidMessage = formatter.format(invalidContentEvent, false)
|
||||
assertThat(invalidMessage).isNull()
|
||||
|
||||
val sameContentEvent = createLatestEvent(sentByYou = true, senderDisplayName = null, content = sameContent)
|
||||
val sameMessage = formatter.format(sameContentEvent, false)
|
||||
assertThat(sameMessage).isNull()
|
||||
}
|
||||
|
||||
// endregion
|
||||
|
||||
// region Polls
|
||||
|
||||
@Test
|
||||
@Config(qualifiers = "en")
|
||||
fun `Computes last message for poll in DM`() {
|
||||
val pollContent = aPollContent()
|
||||
|
||||
val mineContentEvent = createLatestEvent(sentByYou = true, senderDisplayName = "Alice", content = pollContent)
|
||||
assertThat(formatter.format(mineContentEvent, true)).isEqualTo("Poll: Do you like polls?")
|
||||
|
||||
val contentEvent = createLatestEvent(sentByYou = false, senderDisplayName = "Bob", content = pollContent)
|
||||
assertThat(formatter.format(contentEvent, true)).isEqualTo("Poll: Do you like polls?")
|
||||
}
|
||||
|
||||
@Test
|
||||
@Config(qualifiers = "en")
|
||||
fun `Computes last message for poll in room`() {
|
||||
val pollContent = aPollContent()
|
||||
|
||||
val mineContentEvent = createLatestEvent(sentByYou = true, senderDisplayName = "Alice", content = pollContent)
|
||||
assertThat(formatter.format(mineContentEvent, false).toString()).isEqualTo("You: Poll: Do you like polls?")
|
||||
|
||||
val contentEvent = createLatestEvent(sentByYou = false, senderDisplayName = "Bob", content = pollContent)
|
||||
assertThat(formatter.format(contentEvent, false).toString()).isEqualTo("Bob: Poll: Do you like polls?")
|
||||
}
|
||||
|
||||
// endregion
|
||||
|
||||
private fun createLatestEvent(
|
||||
sentByYou: Boolean,
|
||||
senderDisplayName: String?,
|
||||
content: EventContent,
|
||||
): LatestEventValue.Remote {
|
||||
val sender = if (sentByYou) A_USER_ID else someoneElseId
|
||||
val profile = aProfileDetails(senderDisplayName)
|
||||
return aRemoteLatestEvent(
|
||||
senderId = sender,
|
||||
senderProfile = profile,
|
||||
content = content,
|
||||
isOwn = sentByYou,
|
||||
)
|
||||
}
|
||||
|
||||
private val someoneElseId = UserId("@someone_else:domain")
|
||||
}
|
||||
@@ -0,0 +1,20 @@
|
||||
/*
|
||||
* Copyright (c) 2025 Element Creations Ltd.
|
||||
* Copyright 2022-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-library")
|
||||
}
|
||||
|
||||
android {
|
||||
namespace = "io.element.android.libraries.eventformatter.test"
|
||||
}
|
||||
|
||||
dependencies {
|
||||
implementation(projects.libraries.eventformatter.api)
|
||||
implementation(projects.libraries.matrix.api)
|
||||
}
|
||||
+20
@@ -0,0 +1,20 @@
|
||||
/*
|
||||
* Copyright (c) 2025 Element Creations Ltd.
|
||||
* Copyright 2024, 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.libraries.eventformatter.test
|
||||
|
||||
import io.element.android.libraries.eventformatter.api.PinnedMessagesBannerFormatter
|
||||
import io.element.android.libraries.matrix.api.timeline.item.event.EventTimelineItem
|
||||
|
||||
class FakePinnedMessagesBannerFormatter(
|
||||
val formatLambda: (event: EventTimelineItem) -> CharSequence
|
||||
) : PinnedMessagesBannerFormatter {
|
||||
override fun format(event: EventTimelineItem): CharSequence {
|
||||
return formatLambda(event)
|
||||
}
|
||||
}
|
||||
+28
@@ -0,0 +1,28 @@
|
||||
/*
|
||||
* Copyright (c) 2025 Element Creations Ltd.
|
||||
* Copyright 2023-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.libraries.eventformatter.test
|
||||
|
||||
import io.element.android.libraries.eventformatter.api.RoomLatestEventFormatter
|
||||
import io.element.android.libraries.matrix.api.roomlist.LatestEventValue
|
||||
|
||||
class FakeRoomLatestEventFormatter : RoomLatestEventFormatter {
|
||||
private var result: CharSequence? = null
|
||||
|
||||
override fun format(latestEvent: LatestEventValue.Local, isDmRoom: Boolean): CharSequence? {
|
||||
return result
|
||||
}
|
||||
|
||||
override fun format(latestEvent: LatestEventValue.Remote, isDmRoom: Boolean): CharSequence? {
|
||||
return result
|
||||
}
|
||||
|
||||
fun givenFormatResult(result: CharSequence?) {
|
||||
this.result = result
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user