fix: improve mobile layout for bandwidth and add pluralization support

This commit is contained in:
c0mrade
2026-02-02 11:14:29 +03:00
parent ed86dfa8bd
commit e9af285dad
5 changed files with 31 additions and 4 deletions

View File

@@ -881,6 +881,8 @@
"restartAll": "Restart All",
"confirmRestartAll": "Are you sure you want to restart all nodes?",
"usersOnline": "online",
"usersOnlineCount_one": "{{count}} online",
"usersOnlineCount_other": "{{count}} online",
"trafficUsed": "used",
"uptimeLabel": "Uptime",
"stats": {
@@ -897,7 +899,11 @@
"noSquads": "No squads found",
"syncServers": "Sync Servers",
"members": "members",
"membersCount_one": "{{count}} member",
"membersCount_other": "{{count}} members",
"inbounds": "inbounds",
"inboundsCount_one": "{{count}} inbound",
"inboundsCount_other": "{{count}} inbounds",
"available": "Available",
"unavailable": "Unavailable",
"stats": {

View File

@@ -1704,6 +1704,7 @@
"restart": "راه‌اندازی مجدد",
"restartAll": "راه‌اندازی مجدد همه",
"usersOnline": "آنلاین",
"usersOnlineCount_other": "{{count}} آنلاین",
"trafficUsed": "استفاده شده",
"uptimeLabel": "زمان فعالیت",
"stats": {
@@ -1742,7 +1743,9 @@
"syncServers": "همگام‌سازی سرورها",
"synced": "همگام شده",
"members": "اعضا",
"membersCount_other": "{{count}} عضو",
"inbounds": "ورودی‌ها",
"inboundsCount_other": "{{count}} ورودی",
"available": "در دسترس",
"unavailable": "در دسترس نیست",
"stats": {

View File

@@ -897,6 +897,9 @@
"restartAll": "Перезапустить все",
"confirmRestartAll": "Вы уверены, что хотите перезапустить все ноды?",
"usersOnline": "онлайн",
"usersOnlineCount_one": "{{count}} онлайн",
"usersOnlineCount_few": "{{count}} онлайн",
"usersOnlineCount_many": "{{count}} онлайн",
"trafficUsed": "использовано",
"uptimeLabel": "Аптайм",
"stats": {
@@ -913,7 +916,13 @@
"noSquads": "Сквады не найдены",
"syncServers": "Синхронизировать серверы",
"members": "участников",
"membersCount_one": "{{count}} участник",
"membersCount_few": "{{count}} участника",
"membersCount_many": "{{count}} участников",
"inbounds": "inbounds",
"inboundsCount_one": "{{count}} inbound",
"inboundsCount_few": "{{count}} inbounds",
"inboundsCount_many": "{{count}} inbounds",
"available": "Доступен",
"unavailable": "Недоступен",
"stats": {

View File

@@ -1712,6 +1712,7 @@
"restart": "重启",
"restartAll": "全部重启",
"usersOnline": "在线",
"usersOnlineCount_other": "{{count}} 在线",
"trafficUsed": "已使用",
"uptimeLabel": "运行时间",
"stats": {
@@ -1750,7 +1751,9 @@
"syncServers": "同步服务器",
"synced": "已同步",
"members": "成员",
"membersCount_other": "{{count}} 成员",
"inbounds": "入站",
"inboundsCount_other": "{{count}} 入站",
"available": "可用",
"unavailable": "不可用",
"stats": {

View File

@@ -157,7 +157,9 @@ function NodeCard({ node, onAction, isLoading }: NodeCardProps) {
<div className="mt-3 flex flex-wrap gap-x-4 gap-y-1 text-xs text-dark-400">
<span className="flex items-center gap-1">
<UsersIcon className="h-3.5 w-3.5" />
{node.users_online ?? 0} {t('admin.remnawave.nodes.usersOnline', 'online')}
{t('admin.remnawave.nodes.usersOnlineCount', '{{count}} online', {
count: node.users_online ?? 0,
})}
</span>
{node.traffic_used_bytes !== undefined && (
<span>
@@ -239,7 +241,9 @@ function SquadCard({ squad, onClick }: SquadCardProps) {
<div className="mt-3 flex flex-wrap gap-x-4 gap-y-1 text-xs text-dark-400">
<span className="flex items-center gap-1">
<UsersIcon className="h-3.5 w-3.5" />
{squad.members_count} {t('admin.remnawave.squads.members', 'members')}
{t('admin.remnawave.squads.membersCount', '{{count}} members', {
count: squad.members_count,
})}
</span>
{squad.current_users !== undefined && (
<span>
@@ -247,7 +251,9 @@ function SquadCard({ squad, onClick }: SquadCardProps) {
</span>
)}
<span>
{squad.inbounds_count} {t('admin.remnawave.squads.inbounds', 'inbounds')}
{t('admin.remnawave.squads.inboundsCount', '{{count}} inbounds', {
count: squad.inbounds_count,
})}
</span>
{squad.is_available !== undefined && (
<span className={squad.is_available ? 'text-success-400' : 'text-error-400'}>
@@ -389,7 +395,7 @@ function OverviewTab({ stats, isLoading, onRefresh }: OverviewTabProps) {
<h3 className="mb-3 text-sm font-medium text-dark-300">
{t('admin.remnawave.overview.bandwidth', 'Realtime Bandwidth')}
</h3>
<div className="grid grid-cols-3 gap-3">
<div className="grid grid-cols-2 gap-3 sm:grid-cols-3">
<StatCard
label={t('admin.remnawave.overview.download', 'Download')}
value={formatBytes(stats.bandwidth.realtime_download) + '/s'}