Merge branch 'develop' into feature/fga/pinned_message_banner_ui
This commit is contained in:
commit
8852735b70
128 changed files with 2576 additions and 962 deletions
|
|
@ -0,0 +1,4 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
|
||||
<string name="error_no_compatible_app_found">"Bu amalni bajarish uchun mos ilova topilmadi."</string>
|
||||
</resources>
|
||||
|
|
@ -3,12 +3,16 @@
|
|||
<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>
|
||||
|
|
@ -42,7 +46,7 @@
|
|||
<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_reject">"%1$s odrzucił zaproszenie"</string>
|
||||
<string name="state_event_room_reject_by_you">"Odrzuciłeś(aś) 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_third_party_invite">"%1$s wysłał zaproszenie do %2$s, aby dołączył do pokoju"</string>
|
||||
|
|
|
|||
|
|
@ -3,12 +3,16 @@
|
|||
<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>
|
||||
|
|
@ -39,6 +43,8 @@
|
|||
<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_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>
|
||||
|
|
|
|||
|
|
@ -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">"(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_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_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_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$ 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_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$o\'chirildi%2$s"</string>
|
||||
<string name="state_event_room_remove_by_you">"siz o\'chirildingiz%1$s"</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$sga xonaga qo\'shilishi uchun"</string>
|
||||
<string name="state_event_room_third_party_revoked_invite">"%1$s taklifni %2$sga 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>
|
||||
|
|
@ -120,4 +120,18 @@ enum class FeatureFlags(
|
|||
defaultValue = { it.buildType != BuildType.RELEASE },
|
||||
isFinished = false,
|
||||
),
|
||||
PinnedEvents(
|
||||
key = "feature.pinnedEvents",
|
||||
title = "Pinned Events",
|
||||
description = "Allow user to pin events in a room",
|
||||
defaultValue = { false },
|
||||
isFinished = false,
|
||||
),
|
||||
SyncOnPush(
|
||||
key = "feature.syncOnPush",
|
||||
title = "Sync on push",
|
||||
description = "Subscribe to room sync when a push is received",
|
||||
defaultValue = { false },
|
||||
isFinished = false,
|
||||
),
|
||||
}
|
||||
|
|
|
|||
|
|
@ -180,6 +180,8 @@ interface MatrixRoom : Closeable {
|
|||
|
||||
suspend fun canUserTriggerRoomNotification(userId: UserId): Result<Boolean>
|
||||
|
||||
suspend fun canUserPinUnpin(userId: UserId): Result<Boolean>
|
||||
|
||||
suspend fun canUserJoinCall(userId: UserId): Result<Boolean> =
|
||||
canUserSendState(userId, StateEventType.CALL_MEMBER)
|
||||
|
||||
|
|
|
|||
|
|
@ -17,6 +17,7 @@
|
|||
package io.element.android.libraries.matrix.api.room
|
||||
|
||||
import androidx.compose.runtime.Immutable
|
||||
import io.element.android.libraries.matrix.api.core.EventId
|
||||
import io.element.android.libraries.matrix.api.core.RoomAlias
|
||||
import io.element.android.libraries.matrix.api.core.RoomId
|
||||
import io.element.android.libraries.matrix.api.core.UserId
|
||||
|
|
@ -52,4 +53,5 @@ data class MatrixRoomInfo(
|
|||
val hasRoomCall: Boolean,
|
||||
val activeRoomCallParticipants: ImmutableList<String>,
|
||||
val heroes: ImmutableList<MatrixUser>,
|
||||
val pinnedEventIds: ImmutableList<EventId>
|
||||
)
|
||||
|
|
|
|||
|
|
@ -65,3 +65,8 @@ suspend fun MatrixRoom.canRedactOwn(): Result<Boolean> = canUserRedactOwn(sessio
|
|||
* Shortcut for calling [MatrixRoom.canRedactOther] with our own user.
|
||||
*/
|
||||
suspend fun MatrixRoom.canRedactOther(): Result<Boolean> = canUserRedactOther(sessionId)
|
||||
|
||||
/**
|
||||
* Shortcut for calling [MatrixRoom.canUserPinUnpin] with our own user.
|
||||
*/
|
||||
suspend fun MatrixRoom.canPinUnpin(): Result<Boolean> = canUserPinUnpin(sessionId)
|
||||
|
|
|
|||
|
|
@ -169,4 +169,22 @@ interface Timeline : AutoCloseable {
|
|||
): Result<MediaUploadHandler>
|
||||
|
||||
suspend fun loadReplyDetails(eventId: EventId): InReplyTo
|
||||
|
||||
/**
|
||||
* Adds a new pinned event by sending an updated `m.room.pinned_events`
|
||||
* event containing the new event id.
|
||||
*
|
||||
* Returns `true` if we sent the request, `false` if the event was already
|
||||
* pinned.
|
||||
*/
|
||||
suspend fun pinEvent(eventId: EventId): Result<Boolean>
|
||||
|
||||
/**
|
||||
* Adds a new pinned event by sending an updated `m.room.pinned_events`
|
||||
* event without the event id we want to remove.
|
||||
*
|
||||
* Returns `true` if we sent the request, `false` if the event wasn't
|
||||
* pinned
|
||||
*/
|
||||
suspend fun unpinEvent(eventId: EventId): Result<Boolean>
|
||||
}
|
||||
|
|
|
|||
|
|
@ -26,6 +26,7 @@ data class EventTimelineItem(
|
|||
val eventId: EventId?,
|
||||
val transactionId: TransactionId?,
|
||||
val isEditable: Boolean,
|
||||
val canBeRepliedTo: Boolean,
|
||||
val isLocal: Boolean,
|
||||
val isOwn: Boolean,
|
||||
val isRemote: Boolean,
|
||||
|
|
|
|||
|
|
@ -16,6 +16,7 @@
|
|||
|
||||
package io.element.android.libraries.matrix.impl.room
|
||||
|
||||
import io.element.android.libraries.matrix.api.core.EventId
|
||||
import io.element.android.libraries.matrix.api.core.RoomAlias
|
||||
import io.element.android.libraries.matrix.api.core.RoomId
|
||||
import io.element.android.libraries.matrix.api.core.UserId
|
||||
|
|
@ -58,7 +59,8 @@ class MatrixRoomInfoMapper {
|
|||
userDefinedNotificationMode = it.userDefinedNotificationMode?.map(),
|
||||
hasRoomCall = it.hasRoomCall,
|
||||
activeRoomCallParticipants = it.activeRoomCallParticipants.toImmutableList(),
|
||||
heroes = it.elementHeroes().toImmutableList()
|
||||
heroes = it.elementHeroes().toImmutableList(),
|
||||
pinnedEventIds = it.pinnedEventIds.map(::EventId).toImmutableList(),
|
||||
)
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -403,6 +403,12 @@ class RustMatrixRoom(
|
|||
}
|
||||
}
|
||||
|
||||
override suspend fun canUserPinUnpin(userId: UserId): Result<Boolean> {
|
||||
return runCatching {
|
||||
innerRoom.canUserPinUnpin(userId.value)
|
||||
}
|
||||
}
|
||||
|
||||
override suspend fun sendImage(
|
||||
file: File,
|
||||
thumbnailFile: File?,
|
||||
|
|
|
|||
|
|
@ -525,6 +525,18 @@ class RustTimeline(
|
|||
}
|
||||
}
|
||||
|
||||
override suspend fun pinEvent(eventId: EventId): Result<Boolean> = withContext(dispatcher) {
|
||||
runCatching {
|
||||
inner.pinEvent(eventId = eventId.value)
|
||||
}
|
||||
}
|
||||
|
||||
override suspend fun unpinEvent(eventId: EventId): Result<Boolean> = withContext(dispatcher) {
|
||||
runCatching {
|
||||
inner.unpinEvent(eventId = eventId.value)
|
||||
}
|
||||
}
|
||||
|
||||
private suspend fun fetchDetailsForEvent(eventId: EventId): Result<Unit> {
|
||||
return runCatching {
|
||||
inner.fetchDetailsForEvent(eventId.value)
|
||||
|
|
|
|||
|
|
@ -44,6 +44,7 @@ class EventTimelineItemMapper(private val contentMapper: TimelineEventContentMap
|
|||
eventId = it.eventId()?.let(::EventId),
|
||||
transactionId = it.transactionId()?.let(::TransactionId),
|
||||
isEditable = it.isEditable(),
|
||||
canBeRepliedTo = it.canBeRepliedTo(),
|
||||
isLocal = it.isLocal(),
|
||||
isOwn = it.isOwn(),
|
||||
isRemote = it.isRemote(),
|
||||
|
|
|
|||
|
|
@ -221,6 +221,7 @@ private fun aRustRoomInfo(
|
|||
numUnreadMessages: ULong = 0uL,
|
||||
numUnreadNotifications: ULong = 0uL,
|
||||
numUnreadMentions: ULong = 0uL,
|
||||
pinnedEventIds: List<String> = listOf(),
|
||||
) = RoomInfo(
|
||||
id = id,
|
||||
displayName = displayName,
|
||||
|
|
@ -249,7 +250,8 @@ private fun aRustRoomInfo(
|
|||
isMarkedUnread = isMarkedUnread,
|
||||
numUnreadMessages = numUnreadMessages,
|
||||
numUnreadNotifications = numUnreadNotifications,
|
||||
numUnreadMentions = numUnreadMentions
|
||||
numUnreadMentions = numUnreadMentions,
|
||||
pinnedEventIds = pinnedEventIds,
|
||||
)
|
||||
|
||||
class FakeRoomListItem(
|
||||
|
|
|
|||
|
|
@ -125,6 +125,7 @@ class FakeMatrixRoom(
|
|||
private val getWidgetDriverResult: (MatrixWidgetSettings) -> Result<MatrixWidgetDriver> = { lambdaError() },
|
||||
private val canUserTriggerRoomNotificationResult: (UserId) -> Result<Boolean> = { lambdaError() },
|
||||
private val canUserJoinCallResult: (UserId) -> Result<Boolean> = { lambdaError() },
|
||||
private val canUserPinUnpinResult: (UserId) -> Result<Boolean> = { lambdaError() },
|
||||
private val setIsFavoriteResult: (Boolean) -> Result<Unit> = { lambdaError() },
|
||||
private val powerLevelsResult: () -> Result<MatrixRoomPowerLevels> = { lambdaError() },
|
||||
private val updatePowerLevelsResult: () -> Result<Unit> = { lambdaError() },
|
||||
|
|
@ -289,6 +290,10 @@ class FakeMatrixRoom(
|
|||
return canUserJoinCallResult(userId)
|
||||
}
|
||||
|
||||
override suspend fun canUserPinUnpin(userId: UserId): Result<Boolean> {
|
||||
return canUserPinUnpinResult(userId)
|
||||
}
|
||||
|
||||
override suspend fun sendImage(
|
||||
file: File,
|
||||
thumbnailFile: File?,
|
||||
|
|
@ -517,6 +522,7 @@ fun aRoomInfo(
|
|||
userPowerLevels: ImmutableMap<UserId, Long> = persistentMapOf(),
|
||||
activeRoomCallParticipants: List<String> = emptyList(),
|
||||
heroes: List<MatrixUser> = emptyList(),
|
||||
pinnedEventIds: List<EventId> = emptyList(),
|
||||
) = MatrixRoomInfo(
|
||||
id = id,
|
||||
name = name,
|
||||
|
|
@ -542,6 +548,7 @@ fun aRoomInfo(
|
|||
userPowerLevels = userPowerLevels,
|
||||
activeRoomCallParticipants = activeRoomCallParticipants.toImmutableList(),
|
||||
heroes = heroes.toImmutableList(),
|
||||
pinnedEventIds = pinnedEventIds.toImmutableList(),
|
||||
)
|
||||
|
||||
fun defaultRoomPowerLevels() = MatrixRoomPowerLevels(
|
||||
|
|
|
|||
|
|
@ -33,6 +33,7 @@ import io.element.android.libraries.matrix.api.timeline.ReceiptType
|
|||
import io.element.android.libraries.matrix.api.timeline.Timeline
|
||||
import io.element.android.libraries.matrix.api.timeline.item.event.InReplyTo
|
||||
import io.element.android.libraries.matrix.test.media.FakeMediaUploadHandler
|
||||
import io.element.android.tests.testutils.lambda.lambdaError
|
||||
import kotlinx.coroutines.flow.Flow
|
||||
import kotlinx.coroutines.flow.MutableSharedFlow
|
||||
import kotlinx.coroutines.flow.MutableStateFlow
|
||||
|
|
@ -371,6 +372,16 @@ class FakeTimeline(
|
|||
|
||||
override suspend fun loadReplyDetails(eventId: EventId) = loadReplyDetailsLambda(eventId)
|
||||
|
||||
var pinEventLambda: (eventId: EventId) -> Result<Boolean> = { lambdaError() }
|
||||
override suspend fun pinEvent(eventId: EventId): Result<Boolean> {
|
||||
return pinEventLambda(eventId)
|
||||
}
|
||||
|
||||
var unpinEventLambda: (eventId: EventId) -> Result<Boolean> = { lambdaError() }
|
||||
override suspend fun unpinEvent(eventId: EventId): Result<Boolean> {
|
||||
return unpinEventLambda(eventId)
|
||||
}
|
||||
|
||||
var closeCounter = 0
|
||||
private set
|
||||
|
||||
|
|
|
|||
|
|
@ -46,6 +46,7 @@ fun anEventTimelineItem(
|
|||
eventId: EventId = AN_EVENT_ID,
|
||||
transactionId: TransactionId? = null,
|
||||
isEditable: Boolean = false,
|
||||
canBeRepliedTo: Boolean = false,
|
||||
isLocal: Boolean = false,
|
||||
isOwn: Boolean = false,
|
||||
isRemote: Boolean = false,
|
||||
|
|
@ -61,6 +62,7 @@ fun anEventTimelineItem(
|
|||
eventId = eventId,
|
||||
transactionId = transactionId,
|
||||
isEditable = isEditable,
|
||||
canBeRepliedTo = canBeRepliedTo,
|
||||
isLocal = isLocal,
|
||||
isOwn = isOwn,
|
||||
isRemote = isRemote,
|
||||
|
|
|
|||
|
|
@ -56,6 +56,13 @@ fun MatrixRoom.canCall(updateKey: Long): State<Boolean> {
|
|||
}
|
||||
}
|
||||
|
||||
@Composable
|
||||
fun MatrixRoom.canPinUnpin(updateKey: Long): State<Boolean> {
|
||||
return produceState(initialValue = false, key1 = updateKey) {
|
||||
value = canUserPinUnpin(sessionId).getOrElse { false }
|
||||
}
|
||||
}
|
||||
|
||||
@Composable
|
||||
fun MatrixRoom.isOwnUserAdmin(): Boolean {
|
||||
val roomInfo by roomInfoFlow.collectAsState(initial = null)
|
||||
|
|
|
|||
|
|
@ -0,0 +1,4 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
|
||||
<string name="screen_invites_invited_you">"%1$s(%2$s ) sizni taklif qildi"</string>
|
||||
</resources>
|
||||
|
|
@ -0,0 +1,7 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
|
||||
<string name="dialog_permission_camera">"Ilovaga kameradan foydalanishiga ruxsat berish uchun tizim sozlamalarida ruxsat bering."</string>
|
||||
<string name="dialog_permission_generic">"Iltimos, tizim sozlamalarida ruxsat bering."</string>
|
||||
<string name="dialog_permission_microphone">"Ilovaga mikrofondan foydalanishiga ruxsat berish uchun tizim sozlamalarida ruxsat bering."</string>
|
||||
<string name="dialog_permission_notification">"Ilova bildirishnomalarni ko\'rsatishi uchun tizim sozlamalarida ruxsat bering."</string>
|
||||
</resources>
|
||||
|
|
@ -0,0 +1,5 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
|
||||
<string name="troubleshoot_notifications_test_check_permission_description">"Sprawdź, czy aplikacja może wyświetlać powiadomienia."</string>
|
||||
<string name="troubleshoot_notifications_test_check_permission_title">"Sprawdź uprawnienia"</string>
|
||||
</resources>
|
||||
|
|
@ -56,6 +56,7 @@ dependencies {
|
|||
implementation(projects.libraries.uiStrings)
|
||||
implementation(projects.libraries.troubleshoot.api)
|
||||
implementation(projects.features.call.api)
|
||||
implementation(projects.libraries.featureflag.api)
|
||||
api(projects.libraries.pushproviders.api)
|
||||
api(projects.libraries.pushstore.api)
|
||||
api(projects.libraries.push.api)
|
||||
|
|
|
|||
|
|
@ -18,6 +18,9 @@ package io.element.android.libraries.push.impl.push
|
|||
|
||||
import com.squareup.anvil.annotations.ContributesBinding
|
||||
import io.element.android.libraries.di.AppScope
|
||||
import io.element.android.libraries.featureflag.api.FeatureFlagService
|
||||
import io.element.android.libraries.featureflag.api.FeatureFlags
|
||||
import io.element.android.libraries.matrix.api.MatrixClientProvider
|
||||
import io.element.android.libraries.push.impl.notifications.DefaultNotificationDrawerManager
|
||||
import io.element.android.libraries.push.impl.notifications.model.NotifiableEvent
|
||||
import kotlinx.coroutines.CoroutineScope
|
||||
|
|
@ -32,10 +35,23 @@ interface OnNotifiableEventReceived {
|
|||
class DefaultOnNotifiableEventReceived @Inject constructor(
|
||||
private val defaultNotificationDrawerManager: DefaultNotificationDrawerManager,
|
||||
private val coroutineScope: CoroutineScope,
|
||||
private val matrixClientProvider: MatrixClientProvider,
|
||||
private val featureFlagService: FeatureFlagService,
|
||||
) : OnNotifiableEventReceived {
|
||||
override fun onNotifiableEventReceived(notifiableEvent: NotifiableEvent) {
|
||||
coroutineScope.launch {
|
||||
subscribeToRoomIfNeeded(notifiableEvent)
|
||||
defaultNotificationDrawerManager.onNotifiableEventReceived(notifiableEvent)
|
||||
}
|
||||
}
|
||||
|
||||
private fun CoroutineScope.subscribeToRoomIfNeeded(notifiableEvent: NotifiableEvent) = launch {
|
||||
if (!featureFlagService.isFeatureEnabled(FeatureFlags.SyncOnPush)) {
|
||||
return@launch
|
||||
}
|
||||
val client = matrixClientProvider.getOrRestore(notifiableEvent.sessionId).getOrNull() ?: return@launch
|
||||
client.getRoom(notifiableEvent.roomId)?.use { room ->
|
||||
room.subscribeToSync()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -34,6 +34,7 @@
|
|||
<item quantity="many">"%d nowych wiadomości"</item>
|
||||
</plurals>
|
||||
<string name="notification_reaction_body">"Zareagował z %1$s"</string>
|
||||
<string name="notification_room_action_mark_as_read">"Oznacz jako przeczytane"</string>
|
||||
<string name="notification_room_action_quick_reply">"Szybka odpowiedź"</string>
|
||||
<string name="notification_room_invite_body">"Zaprosił Cię do dołączenia do pokoju"</string>
|
||||
<string name="notification_sender_me">"Ja"</string>
|
||||
|
|
@ -56,4 +57,29 @@
|
|||
<string name="push_distributor_background_sync_android">"Synchronizacja w tle"</string>
|
||||
<string name="push_distributor_firebase_android">"Usługi Google"</string>
|
||||
<string name="push_no_valid_google_play_services_apk_android">"Nie znaleziono usług Google Play. Powiadomienia mogą nie działać prawidłowo."</string>
|
||||
<string name="troubleshoot_notifications_test_current_push_provider_description">"Uzyskaj nazwę bieżącego dostawcy."</string>
|
||||
<string name="troubleshoot_notifications_test_current_push_provider_failure">"Nie wybrano dostawców push."</string>
|
||||
<string name="troubleshoot_notifications_test_current_push_provider_success">"Bieżący dostawca push: %1$s."</string>
|
||||
<string name="troubleshoot_notifications_test_current_push_provider_title">"Bieżący dostawca push"</string>
|
||||
<string name="troubleshoot_notifications_test_detect_push_provider_description">"Upewnij się, że aplikacja ma co najmniej jednego dostawcę push."</string>
|
||||
<string name="troubleshoot_notifications_test_detect_push_provider_failure">"Nie znaleziono dostawców push."</string>
|
||||
<plurals name="troubleshoot_notifications_test_detect_push_provider_success">
|
||||
<item quantity="one">"Znaleziono %1$d dostawcę push: %2$s"</item>
|
||||
<item quantity="few">"Znaleziono %1$d dostawców push: %2$s"</item>
|
||||
<item quantity="many">"Znaleziono %1$d dostawców push: %2$s"</item>
|
||||
</plurals>
|
||||
<string name="troubleshoot_notifications_test_detect_push_provider_title">"Wykryj dostawców powiadomień push"</string>
|
||||
<string name="troubleshoot_notifications_test_display_notification_description">"Sprawdź, czy aplikacja może wyświetlać powiadomienie."</string>
|
||||
<string name="troubleshoot_notifications_test_display_notification_failure">"Powiadomienie nie zostało kliknięte."</string>
|
||||
<string name="troubleshoot_notifications_test_display_notification_permission_failure">"Nie można wyświetlić powiadomienia."</string>
|
||||
<string name="troubleshoot_notifications_test_display_notification_success">"Powiadomienie zostało kliknięte!"</string>
|
||||
<string name="troubleshoot_notifications_test_display_notification_title">"Wyświetl powiadomienie"</string>
|
||||
<string name="troubleshoot_notifications_test_display_notification_waiting">"Kliknij powiadomienie, aby kontynuować test."</string>
|
||||
<string name="troubleshoot_notifications_test_push_loop_back_description">"Upewnij się, że aplikacja otrzymuje powiadomienie push."</string>
|
||||
<string name="troubleshoot_notifications_test_push_loop_back_failure_1">"Błąd: pusher odrzucił żądanie."</string>
|
||||
<string name="troubleshoot_notifications_test_push_loop_back_failure_2">"Błąd: %1$s."</string>
|
||||
<string name="troubleshoot_notifications_test_push_loop_back_failure_3">"Błąd, nie można przetestować push."</string>
|
||||
<string name="troubleshoot_notifications_test_push_loop_back_failure_4">"Błąd, upłynął limit czasu powiadomienia push."</string>
|
||||
<string name="troubleshoot_notifications_test_push_loop_back_success">"Pętla powrotna push zajęła %1$d ms."</string>
|
||||
<string name="troubleshoot_notifications_test_push_loop_back_title">"Przetestuj pętlę Push back"</string>
|
||||
</resources>
|
||||
|
|
|
|||
|
|
@ -21,12 +21,14 @@
|
|||
<item quantity="other">"%d convites"</item>
|
||||
</plurals>
|
||||
<string name="notification_invite_body">"Convidou você para conversar"</string>
|
||||
<string name="notification_mentioned_you_body">"Mencionou você: %1$s"</string>
|
||||
<string name="notification_new_messages">"Novas mensagens"</string>
|
||||
<plurals name="notification_new_messages_for_room">
|
||||
<item quantity="one">"%d nova mensagem"</item>
|
||||
<item quantity="other">"%d novas mensagens"</item>
|
||||
</plurals>
|
||||
<string name="notification_reaction_body">"Reagiu com %1$s"</string>
|
||||
<string name="notification_room_action_mark_as_read">"Marcar como lido"</string>
|
||||
<string name="notification_room_action_quick_reply">"Resposta rápida"</string>
|
||||
<string name="notification_room_invite_body">"Convidou você para entrar na sala"</string>
|
||||
<string name="notification_sender_me">"Eu"</string>
|
||||
|
|
|
|||
50
libraries/push/impl/src/main/res/values-uz/translations.xml
Normal file
50
libraries/push/impl/src/main/res/values-uz/translations.xml
Normal file
|
|
@ -0,0 +1,50 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
|
||||
<string name="notification_channel_call">"Qo\'ng\'iroq"</string>
|
||||
<string name="notification_channel_listening_for_events">"Voqealarni tinglash"</string>
|
||||
<string name="notification_channel_noisy">"Shovqinli bildirishnomalar"</string>
|
||||
<string name="notification_channel_silent">"Ovozsiz bildirishnomalar"</string>
|
||||
<plurals name="notification_compat_summary_line_for_room">
|
||||
<item quantity="one">"%1$s:%2$d xabar"</item>
|
||||
<item quantity="other">"%1$s:%2$d xabarlar"</item>
|
||||
</plurals>
|
||||
<plurals name="notification_compat_summary_title">
|
||||
<item quantity="one">"%dbildirishnoma"</item>
|
||||
<item quantity="other">"%dbildirishnomalar"</item>
|
||||
</plurals>
|
||||
<string name="notification_fallback_content">"Bildirishnoma"</string>
|
||||
<string name="notification_inline_reply_failed">"** Yuborilmadi - iltimos, xonani oching"</string>
|
||||
<string name="notification_invitation_action_join">"Qo\'shilish"</string>
|
||||
<string name="notification_invitation_action_reject">"Rad etish"</string>
|
||||
<plurals name="notification_invitations">
|
||||
<item quantity="one">"%dtaklifnoma"</item>
|
||||
<item quantity="other">"%dtaklifnomalar"</item>
|
||||
</plurals>
|
||||
<string name="notification_invite_body">"Sizni suhbatga taklif qildi"</string>
|
||||
<string name="notification_new_messages">"Yangi xabarlar"</string>
|
||||
<plurals name="notification_new_messages_for_room">
|
||||
<item quantity="one">"%dyangi xabar"</item>
|
||||
<item quantity="other">"%dyangi xabarlar"</item>
|
||||
</plurals>
|
||||
<string name="notification_reaction_body">"%1$sbilan munosabat bildiring"</string>
|
||||
<string name="notification_room_action_quick_reply">"Tez javob"</string>
|
||||
<string name="notification_room_invite_body">"Sizni xonaga kirishga taklif qildi"</string>
|
||||
<string name="notification_sender_me">"Men"</string>
|
||||
<string name="notification_test_push_notification_content">"Siz bildirishnomani ko\'ryapsiz! Meni bosing!"</string>
|
||||
<string name="notification_ticker_text_dm">"%1$s:%2$s"</string>
|
||||
<string name="notification_ticker_text_group">"%1$s:%2$s%3$s"</string>
|
||||
<plurals name="notification_unread_notified_messages">
|
||||
<item quantity="one">"%do\'qilmagan xabarnoma"</item>
|
||||
<item quantity="other">"%do\'qilmagan xabarlar"</item>
|
||||
</plurals>
|
||||
<string name="notification_unread_notified_messages_and_invitation">"%1$sva%2$s"</string>
|
||||
<string name="notification_unread_notified_messages_in_room">"%1$sichida%2$s"</string>
|
||||
<string name="notification_unread_notified_messages_in_room_and_invitation">"%1$sichida%2$s va%3$s"</string>
|
||||
<plurals name="notification_unread_notified_messages_in_room_rooms">
|
||||
<item quantity="one">"%dxona"</item>
|
||||
<item quantity="other">"%dxonalar"</item>
|
||||
</plurals>
|
||||
<string name="push_distributor_background_sync_android">"Orqa Fon sinxronizatsiyasi"</string>
|
||||
<string name="push_distributor_firebase_android">"Google xizmatlari"</string>
|
||||
<string name="push_no_valid_google_play_services_apk_android">"Yaroqli Google Play xizmatlari topilmadi. Bildirishnomalar to\'g\'ri ishlamasligi mumkin."</string>
|
||||
</resources>
|
||||
|
|
@ -0,0 +1,11 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
|
||||
<string name="troubleshoot_notifications_test_firebase_availability_description">"Upewnij się, że Firebase jest dostępny."</string>
|
||||
<string name="troubleshoot_notifications_test_firebase_availability_failure">"Baza Firebase jest niedostępna."</string>
|
||||
<string name="troubleshoot_notifications_test_firebase_availability_success">"Baza Firebase jest dostępna."</string>
|
||||
<string name="troubleshoot_notifications_test_firebase_availability_title">"Sprawdź Firebase"</string>
|
||||
<string name="troubleshoot_notifications_test_firebase_token_description">"Upewnij się, że token Firebase jest dostępny."</string>
|
||||
<string name="troubleshoot_notifications_test_firebase_token_failure">"Token Firebase nie jest znany."</string>
|
||||
<string name="troubleshoot_notifications_test_firebase_token_success">"Token Firebase: %1$s."</string>
|
||||
<string name="troubleshoot_notifications_test_firebase_token_title">"Sprawdź token Firebase"</string>
|
||||
</resources>
|
||||
|
|
@ -0,0 +1,11 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
|
||||
<string name="troubleshoot_notifications_test_unified_push_description">"Upewnij się, że dystrybutorzy UnifiedPush są dostępni."</string>
|
||||
<string name="troubleshoot_notifications_test_unified_push_failure">"Nie znaleziono dystrybutorów push."</string>
|
||||
<plurals name="troubleshoot_notifications_test_unified_push_success">
|
||||
<item quantity="one">"Znaleziono %1$d dystrybutora: %2$s."</item>
|
||||
<item quantity="few">"Znaleziono %1$d dystrybutorów: %2$s."</item>
|
||||
<item quantity="many">"Znaleziono %1$d dystrybutorów: %2$s."</item>
|
||||
</plurals>
|
||||
<string name="troubleshoot_notifications_test_unified_push_title">"Sprawdź UnifiedPush"</string>
|
||||
</resources>
|
||||
|
|
@ -64,6 +64,7 @@ import io.element.android.libraries.ui.strings.CommonStrings
|
|||
import kotlinx.collections.immutable.ImmutableList
|
||||
import kotlinx.collections.immutable.toPersistentList
|
||||
|
||||
@Suppress("MultipleEmitters") // False positive
|
||||
@OptIn(ExperimentalMaterial3Api::class)
|
||||
@Composable
|
||||
fun RoomSelectView(
|
||||
|
|
|
|||
|
|
@ -7,14 +7,14 @@
|
|||
<string name="rich_text_editor_composer_placeholder">"Wiadomość…"</string>
|
||||
<string name="rich_text_editor_create_link">"Utwórz link"</string>
|
||||
<string name="rich_text_editor_edit_link">"Edytuj link"</string>
|
||||
<string name="rich_text_editor_format_bold">"Zastosuj pogrubiony format"</string>
|
||||
<string name="rich_text_editor_format_italic">"Zastosuj format kursywy"</string>
|
||||
<string name="rich_text_editor_format_strikethrough">"Zastosuj format przekreślenia"</string>
|
||||
<string name="rich_text_editor_format_underline">"Zastosuj format podkreślenia"</string>
|
||||
<string name="rich_text_editor_full_screen_toggle">"Przełącz tryb pełnoekranowy"</string>
|
||||
<string name="rich_text_editor_format_bold">"Zastosuj pogrubienie"</string>
|
||||
<string name="rich_text_editor_format_italic">"Zastosuj kursywę"</string>
|
||||
<string name="rich_text_editor_format_strikethrough">"Zastosuj przekreślenie"</string>
|
||||
<string name="rich_text_editor_format_underline">"Zastosuj podkreślenie"</string>
|
||||
<string name="rich_text_editor_full_screen_toggle">"Przełącz pełny ekran"</string>
|
||||
<string name="rich_text_editor_indent">"Wcięcie"</string>
|
||||
<string name="rich_text_editor_inline_code">"Zastosuj format kodu wbudowanego"</string>
|
||||
<string name="rich_text_editor_link">"Wstaw łącze"</string>
|
||||
<string name="rich_text_editor_inline_code">"Zastosuj formatowanie kodu w wierszu"</string>
|
||||
<string name="rich_text_editor_link">"Wstaw link"</string>
|
||||
<string name="rich_text_editor_numbered_list">"Przełącz listę numerowaną"</string>
|
||||
<string name="rich_text_editor_open_compose_options">"Otwórz opcje tworzenia"</string>
|
||||
<string name="rich_text_editor_quote">"Przełącz cytat"</string>
|
||||
|
|
|
|||
|
|
@ -12,12 +12,14 @@
|
|||
<string name="rich_text_editor_format_strikethrough">"Aplicar formato tachado"</string>
|
||||
<string name="rich_text_editor_format_underline">"Aplicar sublinhado"</string>
|
||||
<string name="rich_text_editor_full_screen_toggle">"Alternar o modo de tela cheia"</string>
|
||||
<string name="rich_text_editor_indent">"Identar"</string>
|
||||
<string name="rich_text_editor_inline_code">"Aplicar formato de código embutido"</string>
|
||||
<string name="rich_text_editor_link">"Definir link"</string>
|
||||
<string name="rich_text_editor_numbered_list">"Alternar lista numerada"</string>
|
||||
<string name="rich_text_editor_open_compose_options">"Abrir opções de composição"</string>
|
||||
<string name="rich_text_editor_quote">"Alternar citação"</string>
|
||||
<string name="rich_text_editor_remove_link">"Remover link"</string>
|
||||
<string name="rich_text_editor_unindent">"Desidentar"</string>
|
||||
<string name="rich_text_editor_url_placeholder">"Link"</string>
|
||||
<string name="screen_room_voice_message_tooltip">"Segure para gravar"</string>
|
||||
</resources>
|
||||
|
|
|
|||
|
|
@ -0,0 +1,25 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
|
||||
<string name="rich_text_editor_a11y_add_attachment">"Biriktirma qo\'shing"</string>
|
||||
<string name="rich_text_editor_bullet_list">"Belgilar roʻyxatini almashtirish"</string>
|
||||
<string name="rich_text_editor_close_formatting_options">"Formatlash parametrlarini yoping"</string>
|
||||
<string name="rich_text_editor_code_block">"Kod blokini almashtirish"</string>
|
||||
<string name="rich_text_editor_composer_placeholder">"Xabar…"</string>
|
||||
<string name="rich_text_editor_create_link">"Havola yarating"</string>
|
||||
<string name="rich_text_editor_edit_link">"Havolani tahrirlash"</string>
|
||||
<string name="rich_text_editor_format_bold">"Qalin formatni qo\'llang"</string>
|
||||
<string name="rich_text_editor_format_italic">"Kursiv formatini qo\'llang"</string>
|
||||
<string name="rich_text_editor_format_strikethrough">"Chizilgan formatni qo\'llash"</string>
|
||||
<string name="rich_text_editor_format_underline">"Pastki chiziq formatini qo\'llang"</string>
|
||||
<string name="rich_text_editor_full_screen_toggle">"Toʻliq ekran rejimiga oʻtish"</string>
|
||||
<string name="rich_text_editor_indent">"Paragraf"</string>
|
||||
<string name="rich_text_editor_inline_code">"Koq formatini mos ravishda qo\'shing"</string>
|
||||
<string name="rich_text_editor_link">"Havolani o\'rnatish"</string>
|
||||
<string name="rich_text_editor_numbered_list">"Raqamlangan roʻyxatni almashtirish"</string>
|
||||
<string name="rich_text_editor_open_compose_options">"Yozish parametrlarini oching"</string>
|
||||
<string name="rich_text_editor_quote">"Iqtibosni almashtirish"</string>
|
||||
<string name="rich_text_editor_remove_link">"Havolani olib tashlang"</string>
|
||||
<string name="rich_text_editor_unindent">"Paragrafni bekor qilish"</string>
|
||||
<string name="rich_text_editor_url_placeholder">"Havola"</string>
|
||||
<string name="screen_room_voice_message_tooltip">"Yozib olish uchun bosib turing"</string>
|
||||
</resources>
|
||||
|
|
@ -16,6 +16,7 @@
|
|||
|
||||
package io.element.android.libraries.troubleshoot.impl
|
||||
|
||||
import androidx.compose.foundation.layout.ColumnScope
|
||||
import androidx.compose.foundation.layout.fillMaxWidth
|
||||
import androidx.compose.foundation.layout.size
|
||||
import androidx.compose.foundation.progressSemantics
|
||||
|
|
@ -68,7 +69,7 @@ fun TroubleshootNotificationsView(
|
|||
}
|
||||
|
||||
@Composable
|
||||
private fun TroubleshootTestView(
|
||||
private fun ColumnScope.TroubleshootTestView(
|
||||
testState: NotificationTroubleshootTestState,
|
||||
onQuickFixClick: () -> Unit,
|
||||
) {
|
||||
|
|
@ -127,7 +128,7 @@ private fun TroubleshootTestView(
|
|||
}
|
||||
|
||||
@Composable
|
||||
private fun TroubleshootNotificationsContent(state: TroubleshootNotificationsState) {
|
||||
private fun ColumnScope.TroubleshootNotificationsContent(state: TroubleshootNotificationsState) {
|
||||
when (state.testSuiteState.mainState) {
|
||||
AsyncAction.Loading,
|
||||
AsyncAction.Confirming,
|
||||
|
|
@ -197,7 +198,7 @@ private fun RunTestButton(state: TroubleshootNotificationsState) {
|
|||
}
|
||||
|
||||
@Composable
|
||||
private fun TestSuiteView(
|
||||
private fun ColumnScope.TestSuiteView(
|
||||
testSuiteState: TroubleshootTestSuiteState,
|
||||
onQuickFixClick: (Int) -> Unit,
|
||||
) {
|
||||
|
|
|
|||
|
|
@ -0,0 +1,11 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
|
||||
<string name="troubleshoot_notifications_screen_action">"Uruchom testy"</string>
|
||||
<string name="troubleshoot_notifications_screen_action_again">"Uruchom testy ponownie"</string>
|
||||
<string name="troubleshoot_notifications_screen_failure">"Niektóre testy się nie powiodły. Sprawdź szczegóły."</string>
|
||||
<string name="troubleshoot_notifications_screen_notice">"Uruchom testy, aby wykryć potencjalne problemy z konfiguracją, jeśli powiadomienia nie działają prawidłowo."</string>
|
||||
<string name="troubleshoot_notifications_screen_quick_fix_action">"Spróbuj naprawić"</string>
|
||||
<string name="troubleshoot_notifications_screen_success">"Wszystkie testy przebiegły pomyślnie."</string>
|
||||
<string name="troubleshoot_notifications_screen_title">"Powiadomienia rozwiązywania problemów"</string>
|
||||
<string name="troubleshoot_notifications_screen_waiting">"Niektóre testy wymagają Twojej uwagi. Sprawdź szczegóły."</string>
|
||||
</resources>
|
||||
|
|
@ -281,6 +281,9 @@
|
|||
<string name="screen_room_member_details_unblock_alert_action">"Разблакіраваць"</string>
|
||||
<string name="screen_room_member_details_unblock_alert_description">"Вы зноў зможаце ўбачыць усе паведамленні."</string>
|
||||
<string name="screen_room_member_details_unblock_user">"Разблакіраваць карыстальніка"</string>
|
||||
<string name="screen_room_pinned_banner_indicator">"%1$s з %2$s"</string>
|
||||
<string name="screen_room_pinned_banner_indicator_description">"%1$s Замацаваныя паведамленні"</string>
|
||||
<string name="screen_room_pinned_banner_view_all_button_title">"Паглядзець усе"</string>
|
||||
<string name="screen_room_title">"Чат"</string>
|
||||
<string name="screen_share_location_title">"Падзяліцца месцазнаходжаннем"</string>
|
||||
<string name="screen_share_my_location_action">"Падзяліцца маім месцазнаходжаннем"</string>
|
||||
|
|
|
|||
|
|
@ -82,6 +82,7 @@
|
|||
<string name="action_ok">"OK"</string>
|
||||
<string name="action_open_settings">"Otevřít nastavení"</string>
|
||||
<string name="action_open_with">"Otevřít v aplikaci"</string>
|
||||
<string name="action_pin">"Pin"</string>
|
||||
<string name="action_quick_reply">"Rychlá odpověď"</string>
|
||||
<string name="action_quote">"Citovat"</string>
|
||||
<string name="action_react">"Reagovat"</string>
|
||||
|
|
@ -111,6 +112,7 @@
|
|||
<string name="action_take_photo">"Vyfotit"</string>
|
||||
<string name="action_tap_for_options">"Klepnutím zobrazíte možnosti"</string>
|
||||
<string name="action_try_again">"Zkusit znovu"</string>
|
||||
<string name="action_unpin">"Odepnout"</string>
|
||||
<string name="action_view_source">"Zobrazit zdroj"</string>
|
||||
<string name="action_yes">"Ano"</string>
|
||||
<string name="common_about">"O aplikaci"</string>
|
||||
|
|
@ -260,6 +262,10 @@ Důvod: %1$s."</string>
|
|||
<string name="error_missing_microphone_voice_rationale_android">"%1$s nemá oprávnění k přístupu k mikrofonu. Povolte přístup k nahrávání hlasové zprávy."</string>
|
||||
<string name="error_some_messages_have_not_been_sent">"Některé zprávy nebyly odeslány"</string>
|
||||
<string name="error_unknown">"Omlouváme se, došlo k chybě"</string>
|
||||
<string name="event_shield_reason_authenticity_not_guaranteed">"Autenticitu této zašifrované zprávy nelze na tomto zařízení zaručit."</string>
|
||||
<string name="event_shield_reason_unknown_device">"Šifrováno neznámým nebo smazaným zařízením."</string>
|
||||
<string name="event_shield_reason_unsigned_device">"Šifrováno zařízením, které nebylo ověřeno jeho vlastníkem."</string>
|
||||
<string name="event_shield_reason_unverified_identity">"Šifrováno neověřeným uživatelem."</string>
|
||||
<string name="invite_friends_rich_title">"🔐️ Připojte se ke mně na %1$s"</string>
|
||||
<string name="invite_friends_text">"Ahoj, ozvi se mi na %1$s: %2$s"</string>
|
||||
<string name="login_initial_device_name_android">"%1$s Android"</string>
|
||||
|
|
@ -276,6 +282,9 @@ Důvod: %1$s."</string>
|
|||
<string name="screen_room_member_details_unblock_alert_action">"Odblokovat"</string>
|
||||
<string name="screen_room_member_details_unblock_alert_description">"Znovu uvidíte všechny zprávy od nich."</string>
|
||||
<string name="screen_room_member_details_unblock_user">"Odblokovat uživatele"</string>
|
||||
<string name="screen_room_pinned_banner_indicator">"%1$s z %2$s"</string>
|
||||
<string name="screen_room_pinned_banner_indicator_description">"%1$s Připnuté zprávy"</string>
|
||||
<string name="screen_room_pinned_banner_view_all_button_title">"Zobrazit vše"</string>
|
||||
<string name="screen_room_title">"Chat"</string>
|
||||
<string name="screen_share_location_title">"Sdílet polohu"</string>
|
||||
<string name="screen_share_my_location_action">"Sdílet moji polohu"</string>
|
||||
|
|
|
|||
|
|
@ -110,6 +110,7 @@
|
|||
<string name="action_take_photo">"Τράβηξε φωτογραφία"</string>
|
||||
<string name="action_tap_for_options">"Πάτα για επιλογές"</string>
|
||||
<string name="action_try_again">"Προσπάθησε ξανά"</string>
|
||||
<string name="action_unpin">"Ξεκαρφίτσωμα"</string>
|
||||
<string name="action_view_source">"Προβολή πηγής"</string>
|
||||
<string name="action_yes">"Ναι"</string>
|
||||
<string name="common_about">"Σχετικά"</string>
|
||||
|
|
|
|||
|
|
@ -110,6 +110,7 @@
|
|||
<string name="action_take_photo">"Tee pilt"</string>
|
||||
<string name="action_tap_for_options">"Valikuteks klõpsa"</string>
|
||||
<string name="action_try_again">"Proovi uuesti"</string>
|
||||
<string name="action_unpin">"Eemalda kinnitus"</string>
|
||||
<string name="action_view_source">"Vaata lähtekoodi"</string>
|
||||
<string name="action_yes">"Jah"</string>
|
||||
<string name="common_about">"Rakenduse teave"</string>
|
||||
|
|
|
|||
|
|
@ -260,10 +260,14 @@ Powód: %1$s."</string>
|
|||
<string name="error_missing_microphone_voice_rationale_android">"%1$s nie ma uprawnień dostępu do Twojego mikrofonu. Włącz dostęp, aby nagrać wiadomość głosową."</string>
|
||||
<string name="error_some_messages_have_not_been_sent">"Niektóre wiadomości nie zostały wysłane"</string>
|
||||
<string name="error_unknown">"Przepraszamy, wystąpił błąd"</string>
|
||||
<string name="event_shield_reason_authenticity_not_guaranteed">"Autentyczność tej wiadomości szyfrowanej nie jest gwarantowana na tym urządzeniu."</string>
|
||||
<string name="event_shield_reason_unknown_device">"Zaszyfrowana przez nieznane lub usunięte urządzenie."</string>
|
||||
<string name="event_shield_reason_unsigned_device">"Zaszyfrowana przez urządzenie niezweryfikowane przez jego właściciela."</string>
|
||||
<string name="event_shield_reason_unverified_identity">"Zaszyfrowana przez niezweryfikowanego użytkownika."</string>
|
||||
<string name="invite_friends_rich_title">"🔐️ Dołącz do mnie na %1$s"</string>
|
||||
<string name="invite_friends_text">"Hej, porozmawiajmy na %1$s: %2$s"</string>
|
||||
<string name="login_initial_device_name_android">"%1$s Android"</string>
|
||||
<string name="preference_rageshake">"Gniewne wstrząsanie, aby zgłosić błąd"</string>
|
||||
<string name="preference_rageshake">"Wstrząśnij gniewnie, aby zgłosić błąd"</string>
|
||||
<string name="screen_media_picker_error_failed_selection">"Nie udało się wybrać multimediów. Spróbuj ponownie."</string>
|
||||
<string name="screen_media_upload_preview_error_failed_processing">"Przetwarzanie multimediów do przesłania nie powiodło się, spróbuj ponownie."</string>
|
||||
<string name="screen_media_upload_preview_error_failed_sending">"Przesyłanie multimediów nie powiodło się, spróbuj ponownie."</string>
|
||||
|
|
@ -272,9 +276,11 @@ Powód: %1$s."</string>
|
|||
<string name="screen_room_member_details_block_alert_action">"Zablokuj"</string>
|
||||
<string name="screen_room_member_details_block_alert_description">"Zablokowani użytkownicy nie będą mogli wysyłać Ci wiadomości, a wszystkie ich wiadomości zostaną ukryte. Możesz odblokować ich w dowolnym momencie."</string>
|
||||
<string name="screen_room_member_details_block_user">"Zablokuj użytkownika"</string>
|
||||
<string name="screen_room_member_details_title">"Profil"</string>
|
||||
<string name="screen_room_member_details_unblock_alert_action">"Odblokuj"</string>
|
||||
<string name="screen_room_member_details_unblock_alert_description">"Będziesz mógł ponownie zobaczyć wszystkie wiadomości od tego użytkownika."</string>
|
||||
<string name="screen_room_member_details_unblock_user">"Odblokuj użytkownika"</string>
|
||||
<string name="screen_room_title">"Czat"</string>
|
||||
<string name="screen_share_location_title">"Udostępnij lokalizację"</string>
|
||||
<string name="screen_share_my_location_action">"Udostępnij moją lokalizację"</string>
|
||||
<string name="screen_share_open_apple_maps">"Otwórz w Apple Maps"</string>
|
||||
|
|
|
|||
|
|
@ -1,6 +1,10 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
|
||||
<string name="a11y_delete">"Excluir"</string>
|
||||
<plurals name="a11y_digits_entered">
|
||||
<item quantity="one">"%1$d dígito inserido"</item>
|
||||
<item quantity="other">"%1$d dígitos inseridos"</item>
|
||||
</plurals>
|
||||
<string name="a11y_hide_password">"Ocultar senha"</string>
|
||||
<string name="a11y_jump_to_bottom">"Ir para o final"</string>
|
||||
<string name="a11y_notifications_mentions_only">"Apenas menções"</string>
|
||||
|
|
@ -14,6 +18,10 @@
|
|||
<string name="a11y_react_with">"Reagir com %1$s"</string>
|
||||
<string name="a11y_react_with_other_emojis">"Reaja com outros emojis"</string>
|
||||
<string name="a11y_read_receipts_multiple">"Lido por %1$s e %2$s"</string>
|
||||
<plurals name="a11y_read_receipts_multiple_with_others">
|
||||
<item quantity="one">"Lido por %1$s e %2$d outro"</item>
|
||||
<item quantity="other">"Lido por %1$s e %2$d outros"</item>
|
||||
</plurals>
|
||||
<string name="a11y_read_receipts_single">"Lido por %1$s"</string>
|
||||
<string name="a11y_read_receipts_tap_to_show_all">"Toque para mostrar tudo"</string>
|
||||
<string name="a11y_remove_reaction_with">"Remova a reação com %1$s"</string>
|
||||
|
|
@ -186,7 +194,7 @@
|
|||
<string name="common_room">"Sala"</string>
|
||||
<string name="common_room_name">"Nome da sala"</string>
|
||||
<string name="common_room_name_placeholder">"por exemplo, o nome do seu projeto"</string>
|
||||
<string name="common_saved_changes">"Mudanças salvas"</string>
|
||||
<string name="common_saved_changes">"Alterações salvas"</string>
|
||||
<string name="common_saving">"Salvando"</string>
|
||||
<string name="common_screen_lock">"Bloqueio de tela"</string>
|
||||
<string name="common_search_for_someone">"Procurar alguém"</string>
|
||||
|
|
@ -233,8 +241,8 @@
|
|||
<string name="dialog_title_error">"Erro"</string>
|
||||
<string name="dialog_title_success">"Sucesso"</string>
|
||||
<string name="dialog_title_warning">"Aviso"</string>
|
||||
<string name="dialog_unsaved_changes_description_android">"Suas mudanças não foram salvas. Tem certeza de que você quer voltar?"</string>
|
||||
<string name="dialog_unsaved_changes_title">"Salvar mudanças?"</string>
|
||||
<string name="dialog_unsaved_changes_description_android">"Suas alterações não foram salvas. Tem certeza de que você quer voltar?"</string>
|
||||
<string name="dialog_unsaved_changes_title">"Salvar alterações?"</string>
|
||||
<string name="error_failed_creating_the_permalink">"Falha ao criar o link permanente"</string>
|
||||
<string name="error_failed_loading_map">"%1$s não conseguiu carregar o mapa. Por favor, tente novamente mais tarde."</string>
|
||||
<string name="error_failed_loading_messages">"Falha ao carregar mensagens"</string>
|
||||
|
|
@ -243,6 +251,7 @@
|
|||
<string name="error_message_not_found">"Mensagem não encontrada"</string>
|
||||
<string name="error_missing_location_auth_android">"%1$s não tem permissão para acessar sua localização. Você pode ativar o acesso nas Configurações."</string>
|
||||
<string name="error_missing_location_rationale_android">"%1$s não tem permissão para acessar sua localização. Habilite o acesso abaixo."</string>
|
||||
<string name="error_missing_microphone_voice_rationale_android">"%1$s não tem permissão para acessar seu microfone. Permita o acesso para gravar uma mensagem de voz."</string>
|
||||
<string name="error_some_messages_have_not_been_sent">"Algumas mensagens não foram enviadas"</string>
|
||||
<string name="error_unknown">"Desculpe, ocorreu um erro"</string>
|
||||
<string name="event_shield_reason_unknown_device">"Criptografada por um dispositivo desconhecido ou apagado."</string>
|
||||
|
|
|
|||
|
|
@ -82,6 +82,7 @@
|
|||
<string name="action_ok">"Ок"</string>
|
||||
<string name="action_open_settings">"Открыть настройки"</string>
|
||||
<string name="action_open_with">"Открыть с помощью"</string>
|
||||
<string name="action_pin">"Закрепить"</string>
|
||||
<string name="action_quick_reply">"Быстрый ответ"</string>
|
||||
<string name="action_quote">"Цитата"</string>
|
||||
<string name="action_react">"Реакция"</string>
|
||||
|
|
@ -111,6 +112,7 @@
|
|||
<string name="action_take_photo">"Сделать фото"</string>
|
||||
<string name="action_tap_for_options">"Нажмите для просмотра вариантов"</string>
|
||||
<string name="action_try_again">"Повторить попытку"</string>
|
||||
<string name="action_unpin">"Открепить"</string>
|
||||
<string name="action_view_source">"Показать источник"</string>
|
||||
<string name="action_yes">"Да"</string>
|
||||
<string name="common_about">"О приложении"</string>
|
||||
|
|
@ -171,6 +173,7 @@
|
|||
<string name="common_no_results">"Ничего не найдено"</string>
|
||||
<string name="common_no_room_name">"Нету названия комнаты"</string>
|
||||
<string name="common_offline">"Не в сети"</string>
|
||||
<string name="common_open_source_licenses">"Лицензии с открытым исходным кодом"</string>
|
||||
<string name="common_or">"или"</string>
|
||||
<string name="common_password">"Пароль"</string>
|
||||
<string name="common_people">"Люди"</string>
|
||||
|
|
@ -261,6 +264,10 @@
|
|||
<string name="error_missing_microphone_voice_rationale_android">"%1$s не имеет разрешения на доступ к вашему микрофону. Разрешите доступ к записи голосового сообщения."</string>
|
||||
<string name="error_some_messages_have_not_been_sent">"Некоторые сообщения не были отправлены"</string>
|
||||
<string name="error_unknown">"Извините, произошла ошибка"</string>
|
||||
<string name="event_shield_reason_authenticity_not_guaranteed">"Подлинность этого зашифрованного сообщения не может быть гарантирована на этом устройстве."</string>
|
||||
<string name="event_shield_reason_unknown_device">"Зашифровано неизвестным или удаленным устройством."</string>
|
||||
<string name="event_shield_reason_unsigned_device">"Зашифровано устройством, не проверенным его владельцем."</string>
|
||||
<string name="event_shield_reason_unverified_identity">"Зашифровано непроверенным пользователем."</string>
|
||||
<string name="invite_friends_rich_title">"🔐️ Присоединяйтесь ко мне в %1$s"</string>
|
||||
<string name="invite_friends_text">"Привет, поговори со мной по %1$s: %2$s"</string>
|
||||
<string name="login_initial_device_name_android">"%1$s Android"</string>
|
||||
|
|
@ -277,6 +284,9 @@
|
|||
<string name="screen_room_member_details_unblock_alert_action">"Разблокировать"</string>
|
||||
<string name="screen_room_member_details_unblock_alert_description">"Вы снова сможете увидеть все сообщения."</string>
|
||||
<string name="screen_room_member_details_unblock_user">"Разблокировать пользователя"</string>
|
||||
<string name="screen_room_pinned_banner_indicator">"%1$s из %2$s"</string>
|
||||
<string name="screen_room_pinned_banner_indicator_description">"%1$s Закрепленные сообщения"</string>
|
||||
<string name="screen_room_pinned_banner_view_all_button_title">"Посмотреть все"</string>
|
||||
<string name="screen_room_title">"Чат"</string>
|
||||
<string name="screen_share_location_title">"Поделиться местоположением"</string>
|
||||
<string name="screen_share_my_location_action">"Поделиться моим местоположением"</string>
|
||||
|
|
|
|||
|
|
@ -112,6 +112,7 @@
|
|||
<string name="action_take_photo">"Urobiť fotku"</string>
|
||||
<string name="action_tap_for_options">"Klepnutím získate možnosti"</string>
|
||||
<string name="action_try_again">"Skúste to znova"</string>
|
||||
<string name="action_unpin">"Odopnúť"</string>
|
||||
<string name="action_view_source">"Zobraziť zdroj"</string>
|
||||
<string name="action_yes">"Áno"</string>
|
||||
<string name="common_about">"O aplikácii"</string>
|
||||
|
|
|
|||
210
libraries/ui-strings/src/main/res/values-uz/translations.xml
Normal file
210
libraries/ui-strings/src/main/res/values-uz/translations.xml
Normal file
|
|
@ -0,0 +1,210 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
|
||||
<string name="a11y_delete">"Oʻchirish"</string>
|
||||
<string name="a11y_hide_password">"Parolni yashirish"</string>
|
||||
<string name="a11y_notifications_mentions_only">"Faqat eslatmalar"</string>
|
||||
<string name="a11y_notifications_muted">"Ovozsiz"</string>
|
||||
<string name="a11y_pause">"Pauza"</string>
|
||||
<string name="a11y_play">"O\'ynang"</string>
|
||||
<string name="a11y_poll">"So\'ro\'vnoma"</string>
|
||||
<string name="a11y_poll_end">"So‘rovnoma yakunlandi"</string>
|
||||
<string name="a11y_send_files">"Fayllarni yuborish"</string>
|
||||
<string name="a11y_show_password">"Parolni ko\'rsatish"</string>
|
||||
<string name="a11y_user_menu">"Foydalanuvchi menyusi"</string>
|
||||
<string name="a11y_voice_message_record">"Ovoz yozishni amalga oshiring"</string>
|
||||
<string name="action_accept">"Qabul qiling"</string>
|
||||
<string name="action_add_to_timeline">"Vaqt jadvaliga qo\'shing"</string>
|
||||
<string name="action_back">"Orqaga"</string>
|
||||
<string name="action_cancel">"Bekor qilish"</string>
|
||||
<string name="action_choose_photo">"Fotosuratni tanlang"</string>
|
||||
<string name="action_clear">"Tozalash"</string>
|
||||
<string name="action_close">"Yopish"</string>
|
||||
<string name="action_complete_verification">"To\'liq tekshirish"</string>
|
||||
<string name="action_confirm">"Tasdiqlash"</string>
|
||||
<string name="action_continue">"Davom etish"</string>
|
||||
<string name="action_copy">"nusxa"</string>
|
||||
<string name="action_copy_link">"Havolani nusxalash"</string>
|
||||
<string name="action_copy_link_to_message">"Havolani xabaraga nusxalash"</string>
|
||||
<string name="action_create">"Yaratmoq"</string>
|
||||
<string name="action_create_a_room">"Xonani yaratish"</string>
|
||||
<string name="action_decline">"Rad etish"</string>
|
||||
<string name="action_disable">"Oʻchirish"</string>
|
||||
<string name="action_done">"Bajarildi"</string>
|
||||
<string name="action_edit">"Tahrirlash"</string>
|
||||
<string name="action_edit_poll">"So‘rovnomani tahrirlash"</string>
|
||||
<string name="action_enable">"Yoqish"</string>
|
||||
<string name="action_end_poll">"So‘rovnomani tugatish"</string>
|
||||
<string name="action_forgot_password">"Parolni unutdingizmi?"</string>
|
||||
<string name="action_forward">"Oldinga"</string>
|
||||
<string name="action_invite">"Taklif qilish"</string>
|
||||
<string name="action_invite_friends">"Odamlarni taklif qiling"</string>
|
||||
<string name="action_invite_friends_to_app">"Odamlarni taklif qilish%1$s"</string>
|
||||
<string name="action_invite_people_to_app">"Odamlarni taklif qiling%1$s"</string>
|
||||
<string name="action_invites_list">"Takliflar"</string>
|
||||
<string name="action_join">"Qo\'shilish"</string>
|
||||
<string name="action_learn_more">"Batafsil malumot"</string>
|
||||
<string name="action_leave">"Tark etish "</string>
|
||||
<string name="action_leave_room">"Xonani tark etish "</string>
|
||||
<string name="action_manage_account">"Hisobni boshqarish"</string>
|
||||
<string name="action_manage_devices">"Qurilmalarni boshqarish"</string>
|
||||
<string name="action_next">"Keyingisi"</string>
|
||||
<string name="action_no">"Yo\'q"</string>
|
||||
<string name="action_not_now">"Hozir emas"</string>
|
||||
<string name="action_ok">"Ok"</string>
|
||||
<string name="action_open_settings">"Sozlamalar"</string>
|
||||
<string name="action_open_with">"Bilan oching"</string>
|
||||
<string name="action_quick_reply">"Tez javob"</string>
|
||||
<string name="action_quote">"Iqtibos"</string>
|
||||
<string name="action_react">"Reaksiya qilish"</string>
|
||||
<string name="action_remove">"Ochirish"</string>
|
||||
<string name="action_reply">"Javob bering"</string>
|
||||
<string name="action_reply_in_thread">"Mavzuda javob bering"</string>
|
||||
<string name="action_report_bug">"Xato haqida xabar berish"</string>
|
||||
<string name="action_report_content">"Tarkib haqida xabar berish"</string>
|
||||
<string name="action_retry">"Qayta urinish"</string>
|
||||
<string name="action_retry_decryption">"Shifrni ochishni qayta urinish"</string>
|
||||
<string name="action_save">"Saqlash"</string>
|
||||
<string name="action_search">"Qidirmoq"</string>
|
||||
<string name="action_send">"Yuborish"</string>
|
||||
<string name="action_send_message">"Xabar yuborish"</string>
|
||||
<string name="action_share">"Ulashish"</string>
|
||||
<string name="action_share_link">"Havolani ulashing"</string>
|
||||
<string name="action_sign_in_again">"Qaytadan kiring"</string>
|
||||
<string name="action_signout">"Tizimdan chiqish"</string>
|
||||
<string name="action_signout_anyway">"Baribir tizimdan chiqing"</string>
|
||||
<string name="action_skip">"Oʻtkazib yuborish"</string>
|
||||
<string name="action_start">"Boshlash"</string>
|
||||
<string name="action_start_chat">"Suhbatni boshlash"</string>
|
||||
<string name="action_start_verification">"Tasdiqlashni boshlang"</string>
|
||||
<string name="action_static_map_load">"Xaritani yuklash uchun bosing"</string>
|
||||
<string name="action_take_photo">"Rasmga olmoq"</string>
|
||||
<string name="action_view_source">"Manbani korish "</string>
|
||||
<string name="action_yes">"Ha"</string>
|
||||
<string name="common_about">"Haqida"</string>
|
||||
<string name="common_acceptable_use_policy">"Qabul qilinadigan foydalanish siyosati"</string>
|
||||
<string name="common_advanced_settings">"Kengaytirilgan sozlamalar"</string>
|
||||
<string name="common_analytics">"Analitika"</string>
|
||||
<string name="common_audio">"Audio"</string>
|
||||
<string name="common_bubbles">"Pufakchalar"</string>
|
||||
<string name="common_chat_backup">"Chatning zaxira nusxasi"</string>
|
||||
<string name="common_copyright">"Mualliflik huquqi"</string>
|
||||
<string name="common_creating_room">"Xona yaratilmoqda…"</string>
|
||||
<string name="common_current_user_left_room">"Xonani tark etdi"</string>
|
||||
<string name="common_decryption_error">"Shifrni ochish xatosi"</string>
|
||||
<string name="common_developer_options">"Dasturchi variantlari"</string>
|
||||
<string name="common_edited_suffix">"(tahrirlangan)"</string>
|
||||
<string name="common_editing">"Tahrirlash"</string>
|
||||
<string name="common_emote">"*%1$s%2$s"</string>
|
||||
<string name="common_encryption_enabled">"Shifrlash yoqilgan"</string>
|
||||
<string name="common_error">"Xato"</string>
|
||||
<string name="common_everyone">"Har kim"</string>
|
||||
<string name="common_file">"Fayl"</string>
|
||||
<string name="common_file_saved_on_disk_android">"Fayl “Yuklashlar”ga saqlandi"</string>
|
||||
<string name="common_forward_message">"Xabarni yo\'naltirish"</string>
|
||||
<string name="common_image">"Surat"</string>
|
||||
<string name="common_in_reply_to">"%1$sga Javob bering"</string>
|
||||
<string name="common_install_apk_android">"APK-ni o\'rnating"</string>
|
||||
<string name="common_invite_unknown_profile">"Ushbu Matrix identifikatori topilmadi, shuning uchun taklif qabul qilinmasligi mumkin."</string>
|
||||
<string name="common_leaving_room">"Xonadan chiqish"</string>
|
||||
<string name="common_link_copied_to_clipboard">"Havola vaqtinchalik xotiraga nusxalandi"</string>
|
||||
<string name="common_loading">"Yuklanmoqda…"</string>
|
||||
<plurals name="common_member_count">
|
||||
<item quantity="one">"%1$d a\'zo"</item>
|
||||
<item quantity="other">"%1$d ishtirokchilar"</item>
|
||||
</plurals>
|
||||
<string name="common_message">"Xabar"</string>
|
||||
<string name="common_message_layout">"Xabar tartibi"</string>
|
||||
<string name="common_message_removed">"Xabar ochirib tashlandi"</string>
|
||||
<string name="common_modern">"Zamonaviy"</string>
|
||||
<string name="common_mute">"Ovozsiz qilish"</string>
|
||||
<string name="common_no_results">"Natijalar yoʻq"</string>
|
||||
<string name="common_offline">"Oflayn"</string>
|
||||
<string name="common_password">"Parol"</string>
|
||||
<string name="common_people">"Odamlar"</string>
|
||||
<string name="common_permalink">"Doimiy havola"</string>
|
||||
<string name="common_permission">"Ruxsat"</string>
|
||||
<string name="common_poll_end_confirmation">"Haqiqatan ham bu soʻrovnomani tugatmoqchimisiz?"</string>
|
||||
<string name="common_poll_summary">"So‘rov:%1$s"</string>
|
||||
<string name="common_poll_total_votes">"Jami ovozlar:%1$s"</string>
|
||||
<string name="common_poll_undisclosed_text">"Natijalar soʻrovnoma tugagandan soʻng koʻrsatiladi"</string>
|
||||
<plurals name="common_poll_votes_count">
|
||||
<item quantity="one">"%dovoz berish"</item>
|
||||
<item quantity="other">"%dovozlar"</item>
|
||||
</plurals>
|
||||
<string name="common_privacy_policy">"Maxfiylik siyosati"</string>
|
||||
<string name="common_reaction">"Reaktsiya"</string>
|
||||
<string name="common_reactions">"reaksiyalar"</string>
|
||||
<string name="common_recovery_key">"Qayta tiklash kaliti"</string>
|
||||
<string name="common_refreshing">"Yangilanmoqda…"</string>
|
||||
<string name="common_replying_to">"%1$sga Javob berilmoqda"</string>
|
||||
<string name="common_report_a_bug">"Xato haqida xabar bering"</string>
|
||||
<string name="common_report_submitted">"Hisobot topshirildi"</string>
|
||||
<string name="common_rich_text_editor">"Boy matn muharriri"</string>
|
||||
<string name="common_room_name">"Xona nomi"</string>
|
||||
<string name="common_room_name_placeholder">"masalan, loyihangiz nomi"</string>
|
||||
<string name="common_search_for_someone">"Kimnidir qidiring"</string>
|
||||
<string name="common_search_results">"Qidiruv natijalari"</string>
|
||||
<string name="common_security">"Xavfsizlik"</string>
|
||||
<string name="common_sending">"Yuborilmoqda…"</string>
|
||||
<string name="common_server_not_supported">"Server qo\'llab-quvvatlanmaydi"</string>
|
||||
<string name="common_server_url">"Server URL manzili"</string>
|
||||
<string name="common_settings">"Sozlamalar"</string>
|
||||
<string name="common_shared_location">"Joylashuvi ulashildi"</string>
|
||||
<string name="common_starting_chat">"Chat boshlanmoqda…"</string>
|
||||
<string name="common_sticker">"Stiker"</string>
|
||||
<string name="common_success">"Muvaffaqiyat"</string>
|
||||
<string name="common_suggestions">"Tavsiyalar"</string>
|
||||
<string name="common_syncing">"Sinxronlash"</string>
|
||||
<string name="common_text">"Matn"</string>
|
||||
<string name="common_third_party_notices">"Uchinchi tomon bildirishnomalari"</string>
|
||||
<string name="common_thread">"Ip"</string>
|
||||
<string name="common_topic">"Mavzu"</string>
|
||||
<string name="common_topic_placeholder">"Bu xona nima haqida?"</string>
|
||||
<string name="common_unable_to_decrypt">"Shifrni ochish imkonsiz"</string>
|
||||
<string name="common_unable_to_invite_message">"Takliflarni bir yoki bir nechta foydalanuvchiga yuborib bo‘lmadi."</string>
|
||||
<string name="common_unable_to_invite_title">"Taklif(lar)ni yuborib bo‘lmadi"</string>
|
||||
<string name="common_unmute">"Ovozni yoqish"</string>
|
||||
<string name="common_unsupported_event">"Qo\'llab-quvvatlanmagan hodisa"</string>
|
||||
<string name="common_username">"Foydalanuvchi nomi"</string>
|
||||
<string name="common_verification_cancelled">"Tasdiqlash bekor qilindi"</string>
|
||||
<string name="common_verification_complete">"Tasdiqlash yakunlandi"</string>
|
||||
<string name="common_video">"Video"</string>
|
||||
<string name="common_voice_message">"Ovozli xabar"</string>
|
||||
<string name="common_waiting">"Kutilmoqda…"</string>
|
||||
<string name="dialog_title_confirmation">"Tasdiqlash"</string>
|
||||
<string name="dialog_title_error">"Xato"</string>
|
||||
<string name="dialog_title_success">"Muvaffaqiyat"</string>
|
||||
<string name="dialog_title_warning">"Ogohlantirish"</string>
|
||||
<string name="error_failed_creating_the_permalink">"Doimiy havola yaratilmadi"</string>
|
||||
<string name="error_failed_loading_map">"%1$sxaritani yuklay olmadi. Iltimos keyinroq qayta urinib ko\'ring."</string>
|
||||
<string name="error_failed_loading_messages">"Xabarlar yuklanmadi"</string>
|
||||
<string name="error_failed_locating_user">"%1$sjoylashuvingizga kira olmadi. Iltimos keyinroq qayta urinib ko\'ring."</string>
|
||||
<string name="error_missing_location_auth_android">"%1$sjoylashuvingizga kirishga ruxsati yo\'q. Sozlamalar orqali kirishni yoqishingiz mumkin."</string>
|
||||
<string name="error_missing_location_rationale_android">"%1$sjoylashuvingizga kirishga ruxsati yo\'q. Quyida kirishni yoqing."</string>
|
||||
<string name="error_some_messages_have_not_been_sent">"Bazi xabarlar yuborilmagan"</string>
|
||||
<string name="error_unknown">"Kechirasiz, xatolik yuz berdi"</string>
|
||||
<string name="invite_friends_rich_title">"🔐️ Menga qo\'shiling%1$s"</string>
|
||||
<string name="invite_friends_text">"Hey, men bilan gaplash%1$s :%2$s"</string>
|
||||
<string name="login_initial_device_name_android">"%1$sAndroid"</string>
|
||||
<string name="preference_rageshake">"Xato haqida xabar berish uchun G\'azablanish"</string>
|
||||
<string name="screen_media_picker_error_failed_selection">"Media tanlash jarayonida xatolik yuz berdi, qayta urinib ko\'ring"</string>
|
||||
<string name="screen_media_upload_preview_error_failed_processing">"Mediani yuklab bo‘lmadi, qayta urinib ko‘ring."</string>
|
||||
<string name="screen_media_upload_preview_error_failed_sending">"Media yuklanmadi, qayta urinib ko‘ring."</string>
|
||||
<string name="screen_room_error_failed_processing_media">"Mediani yuklab bo‘lmadi, qayta urinib ko‘ring."</string>
|
||||
<string name="screen_room_error_failed_retrieving_user_details">"Foydalanuvchi tafsilotlarini olinmadi"</string>
|
||||
<string name="screen_room_member_details_block_alert_action">"Bloklash"</string>
|
||||
<string name="screen_room_member_details_block_alert_description">"Bloklangan foydalanuvchilar sizga xabar yubora olmaydi va ularning barcha xabarlari yashiriladi. Ularni istalgan vaqtda blokdan chiqarishingiz mumkin."</string>
|
||||
<string name="screen_room_member_details_block_user">"Foydalanuvchini bloklash"</string>
|
||||
<string name="screen_room_member_details_unblock_alert_action">"Blokdan chiqarish"</string>
|
||||
<string name="screen_room_member_details_unblock_alert_description">"Ulardan kelgan barcha xabarlarni yana koʻrishingiz mumkin boʻladi."</string>
|
||||
<string name="screen_room_member_details_unblock_user">"Foydalanuvchini blokdan chiqarish"</string>
|
||||
<string name="screen_share_location_title">"Joylashuvni ulashish"</string>
|
||||
<string name="screen_share_my_location_action">"Joylashuvimni ulashing"</string>
|
||||
<string name="screen_share_open_apple_maps">"Apple Mapsda oching"</string>
|
||||
<string name="screen_share_open_google_maps">"Google Mapsda oching"</string>
|
||||
<string name="screen_share_open_osm_maps">"OpenStreetMapda oching"</string>
|
||||
<string name="screen_share_this_location_action">"Bu joylashuvni ulashing"</string>
|
||||
<string name="screen_view_location_title">"Joylashuv"</string>
|
||||
<string name="settings_version_number">"Versiya:%1$s (%2$s )"</string>
|
||||
<string name="test_language_identifier">"en"</string>
|
||||
</resources>
|
||||
|
|
@ -110,6 +110,7 @@
|
|||
<string name="action_take_photo">"Take photo"</string>
|
||||
<string name="action_tap_for_options">"Tap for options"</string>
|
||||
<string name="action_try_again">"Try again"</string>
|
||||
<string name="action_unpin">"Unpin"</string>
|
||||
<string name="action_view_source">"View source"</string>
|
||||
<string name="action_yes">"Yes"</string>
|
||||
<string name="common_about">"About"</string>
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue