Localization base: add EN/RU chat keys and wire chat info/member labels
Some checks failed
Android CI / android (push) Has started running
Android Release / release (push) Has been cancelled
CI / test (push) Has been cancelled

This commit is contained in:
2026-03-11 05:52:42 +03:00
parent 732b21a4e3
commit 60d898bf21
3 changed files with 65 additions and 19 deletions

View File

@@ -111,6 +111,7 @@ import androidx.compose.ui.input.pointer.positionChange
import androidx.compose.ui.semantics.contentDescription import androidx.compose.ui.semantics.contentDescription
import androidx.compose.ui.semantics.semantics import androidx.compose.ui.semantics.semantics
import androidx.compose.ui.layout.onSizeChanged import androidx.compose.ui.layout.onSizeChanged
import androidx.annotation.StringRes
import androidx.hilt.navigation.compose.hiltViewModel import androidx.hilt.navigation.compose.hiltViewModel
import androidx.lifecycle.compose.collectAsStateWithLifecycle import androidx.lifecycle.compose.collectAsStateWithLifecycle
import androidx.core.content.ContextCompat import androidx.core.content.ContextCompat
@@ -1317,7 +1318,7 @@ fun ChatScreen(
contentAlignment = Alignment.Center, contentAlignment = Alignment.Center,
) { ) {
Text( Text(
text = tab.title, text = stringResource(id = tab.titleRes),
style = MaterialTheme.typography.labelMedium, style = MaterialTheme.typography.labelMedium,
fontWeight = if (selected) FontWeight.SemiBold else FontWeight.Normal, fontWeight = if (selected) FontWeight.SemiBold else FontWeight.Normal,
) )
@@ -3450,16 +3451,16 @@ private fun openUrlExternally(context: Context, url: String) {
} }
context.startActivity(intent) context.startActivity(intent)
}.onFailure { }.onFailure {
Toast.makeText(context, "Unable to open item", Toast.LENGTH_SHORT).show() Toast.makeText(context, context.getString(R.string.chat_open_item_failed), Toast.LENGTH_SHORT).show()
} }
} }
private enum class ChatInfoTab(val title: String) { private enum class ChatInfoTab(@StringRes val titleRes: Int) {
Media("Media"), Media(R.string.chat_info_tab_media),
Files("Files"), Files(R.string.chat_info_tab_files),
Links("Links"), Links(R.string.chat_info_tab_links),
Voice("Voice"), Voice(R.string.chat_info_tab_voice),
Members("Members"), Members(R.string.chat_info_tab_members),
} }
private enum class ChatInfoEntryType { private enum class ChatInfoEntryType {
@@ -3543,7 +3544,10 @@ private fun ChatInfoTabContent(
contentAlignment = Alignment.Center, contentAlignment = Alignment.Center,
) { ) {
Text( Text(
text = "No ${tab.title.lowercase(Locale.getDefault())} yet", text = stringResource(
id = R.string.chat_info_empty,
stringResource(id = tab.titleRes).lowercase(Locale.getDefault()),
),
style = MaterialTheme.typography.bodyMedium, style = MaterialTheme.typography.bodyMedium,
color = MaterialTheme.colorScheme.onSurfaceVariant, color = MaterialTheme.colorScheme.onSurfaceVariant,
) )
@@ -3594,7 +3598,7 @@ private fun ChatInfoTabContent(
.padding(6.dp), .padding(6.dp),
) { ) {
Text( Text(
text = "Video", text = stringResource(id = R.string.chat_media_badge_video),
modifier = Modifier.padding(horizontal = 6.dp, vertical = 2.dp), modifier = Modifier.padding(horizontal = 6.dp, vertical = 2.dp),
style = MaterialTheme.typography.labelSmall, style = MaterialTheme.typography.labelSmall,
color = Color.White, color = Color.White,
@@ -3782,7 +3786,7 @@ private fun ChatMembersTabContent(
contentAlignment = Alignment.Center, contentAlignment = Alignment.Center,
) { ) {
Text( Text(
text = "No members data", text = stringResource(id = R.string.chat_info_no_members_data),
style = MaterialTheme.typography.bodyMedium, style = MaterialTheme.typography.bodyMedium,
color = MaterialTheme.colorScheme.onSurfaceVariant, color = MaterialTheme.colorScheme.onSurfaceVariant,
) )
@@ -3799,7 +3803,7 @@ private fun ChatMembersTabContent(
if (members.isNotEmpty()) { if (members.isNotEmpty()) {
item { item {
Text( Text(
text = "Members (${members.size})", text = stringResource(id = R.string.chat_members_header, members.size),
style = MaterialTheme.typography.labelLarge, style = MaterialTheme.typography.labelLarge,
color = MaterialTheme.colorScheme.onSurfaceVariant, color = MaterialTheme.colorScheme.onSurfaceVariant,
) )
@@ -3852,7 +3856,7 @@ private fun ChatMembersTabContent(
if (canPromote) { if (canPromote) {
AssistChip( AssistChip(
onClick = { onPromoteMember(member.userId) }, onClick = { onPromoteMember(member.userId) },
label = { Text("Promote") }, label = { Text(stringResource(id = R.string.chat_member_action_promote)) },
) )
} }
if (canDemote) { if (canDemote) {
@@ -3864,7 +3868,7 @@ private fun ChatMembersTabContent(
onConfirm = { onDemoteMember(member.userId) }, onConfirm = { onDemoteMember(member.userId) },
) )
}, },
label = { Text("Demote") }, label = { Text(stringResource(id = R.string.chat_member_action_demote)) },
) )
} }
if (canTransfer) { if (canTransfer) {
@@ -3876,7 +3880,7 @@ private fun ChatMembersTabContent(
onConfirm = { onTransferOwnership(member.userId) }, onConfirm = { onTransferOwnership(member.userId) },
) )
}, },
label = { Text("Transfer owner") }, label = { Text(stringResource(id = R.string.chat_member_action_transfer_owner)) },
) )
} }
if (canManageTarget) { if (canManageTarget) {
@@ -3888,7 +3892,7 @@ private fun ChatMembersTabContent(
onConfirm = { onBanMember(member.userId) }, onConfirm = { onBanMember(member.userId) },
) )
}, },
label = { Text("Ban") }, label = { Text(stringResource(id = R.string.chat_member_action_ban)) },
) )
AssistChip( AssistChip(
onClick = { onClick = {
@@ -3898,7 +3902,7 @@ private fun ChatMembersTabContent(
onConfirm = { onKickMember(member.userId) }, onConfirm = { onKickMember(member.userId) },
) )
}, },
label = { Text("Kick") }, label = { Text(stringResource(id = R.string.chat_member_action_kick)) },
) )
} }
} }
@@ -3910,7 +3914,7 @@ private fun ChatMembersTabContent(
if (bans.isNotEmpty()) { if (bans.isNotEmpty()) {
item { item {
Text( Text(
text = "Banned (${bans.size})", text = stringResource(id = R.string.chat_banned_header, bans.size),
style = MaterialTheme.typography.labelLarge, style = MaterialTheme.typography.labelLarge,
color = MaterialTheme.colorScheme.onSurfaceVariant, color = MaterialTheme.colorScheme.onSurfaceVariant,
) )
@@ -3940,7 +3944,7 @@ private fun ChatMembersTabContent(
if (canManageMembers) { if (canManageMembers) {
AssistChip( AssistChip(
onClick = { onUnbanMember(ban.userId) }, onClick = { onUnbanMember(ban.userId) },
label = { Text("Unban") }, label = { Text(stringResource(id = R.string.chat_member_action_unban)) },
) )
} }
} }

View File

@@ -66,6 +66,27 @@
<string name="chat_enable_sound">Включить звук</string> <string name="chat_enable_sound">Включить звук</string>
<string name="chat_disable_sound">Выключить звук</string> <string name="chat_disable_sound">Выключить звук</string>
<string name="chat_circle_video">Видеокружок</string> <string name="chat_circle_video">Видеокружок</string>
<string name="chat_open_item_failed">Не удалось открыть элемент</string>
<string name="chat_status_online">в сети</string>
<string name="chat_status_last_seen_recently">был(а) недавно</string>
<string name="chat_type_group">группа</string>
<string name="chat_type_channel">канал</string>
<string name="chat_info_tab_media">Медиа</string>
<string name="chat_info_tab_files">Файлы</string>
<string name="chat_info_tab_links">Ссылки</string>
<string name="chat_info_tab_voice">Голосовые</string>
<string name="chat_info_tab_members">Участники</string>
<string name="chat_info_empty">Пока нет: %1$s</string>
<string name="chat_info_no_members_data">Нет данных об участниках</string>
<string name="chat_members_header">Участники (%1$d)</string>
<string name="chat_banned_header">Заблокированные (%1$d)</string>
<string name="chat_member_action_promote">Повысить</string>
<string name="chat_member_action_demote">Понизить</string>
<string name="chat_member_action_transfer_owner">Передать owner</string>
<string name="chat_member_action_ban">Забанить</string>
<string name="chat_member_action_kick">Кикнуть</string>
<string name="chat_member_action_unban">Разбанить</string>
<string name="chat_media_badge_video">Видео</string>
<string name="settings_user_fallback">Пользователь</string> <string name="settings_user_fallback">Пользователь</string>
<string name="settings_accounts_header">АККАУНТЫ</string> <string name="settings_accounts_header">АККАУНТЫ</string>

View File

@@ -66,6 +66,27 @@
<string name="chat_enable_sound">Enable sound</string> <string name="chat_enable_sound">Enable sound</string>
<string name="chat_disable_sound">Disable sound</string> <string name="chat_disable_sound">Disable sound</string>
<string name="chat_circle_video">Circle video</string> <string name="chat_circle_video">Circle video</string>
<string name="chat_open_item_failed">Unable to open item</string>
<string name="chat_status_online">online</string>
<string name="chat_status_last_seen_recently">last seen recently</string>
<string name="chat_type_group">group</string>
<string name="chat_type_channel">channel</string>
<string name="chat_info_tab_media">Media</string>
<string name="chat_info_tab_files">Files</string>
<string name="chat_info_tab_links">Links</string>
<string name="chat_info_tab_voice">Voice</string>
<string name="chat_info_tab_members">Members</string>
<string name="chat_info_empty">No %1$s yet</string>
<string name="chat_info_no_members_data">No members data</string>
<string name="chat_members_header">Members (%1$d)</string>
<string name="chat_banned_header">Banned (%1$d)</string>
<string name="chat_member_action_promote">Promote</string>
<string name="chat_member_action_demote">Demote</string>
<string name="chat_member_action_transfer_owner">Transfer owner</string>
<string name="chat_member_action_ban">Ban</string>
<string name="chat_member_action_kick">Kick</string>
<string name="chat_member_action_unban">Unban</string>
<string name="chat_media_badge_video">Video</string>
<string name="settings_user_fallback">User</string> <string name="settings_user_fallback">User</string>
<string name="settings_accounts_header">ACCOUNTS</string> <string name="settings_accounts_header">ACCOUNTS</string>