From 33f32648f0c070a26ad5c63532465448fa4c8f5c Mon Sep 17 00:00:00 2001 From: Fringg Date: Thu, 23 Apr 2026 05:00:36 +0300 Subject: [PATCH] =?UTF-8?q?feat:=20improve=20squad=20management=20UX=20?= =?UTF-8?q?=E2=80=94=20rename,=20swap=20icons,=20color=20gift=20button?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 1. Rename "Управление серверами" → "Управление сквадами" across all 4 locales (ru, en, zh, fa) — title, subtitle, nav, subscription options. The page manages RemnaWave squads, not individual servers. 2. Swap toggle button semantics — the button now shows the ACTION that will happen on click, not the current state: - Active squad: red X icon (click to deactivate) - Inactive squad: green checkmark (click to activate) 3. Gift/trial button: amber/orange when functional (clearly clickable), gray when disabled. Previously always gray, making it look inactive even when it could be clicked. --- src/locales/en.json | 10 +++++----- src/locales/fa.json | 10 +++++----- src/locales/ru.json | 10 +++++----- src/locales/zh.json | 6 +++--- src/pages/AdminServers.tsx | 8 ++++---- 5 files changed, 22 insertions(+), 22 deletions(-) diff --git a/src/locales/en.json b/src/locales/en.json index 4038228..9fb58e4 100644 --- a/src/locales/en.json +++ b/src/locales/en.json @@ -555,8 +555,8 @@ "unlimited": "Unlimited", "buyTrafficGb": "Buy {{gb}} GB", "buyUnlimited": "Buy Unlimited", - "manageServers": "Server management", - "manageServersTitle": "Server management" + "manageServers": "Squad management", + "manageServersTitle": "Squad management" }, "serverManagement": { "statusLegend": "✅ — connected • ➕ — will be added (paid) • ➖ — will be disconnected", @@ -1100,7 +1100,7 @@ "apps": "Apps", "wheel": "Wheel", "tariffs": "Tariffs", - "servers": "Servers", + "servers": "Squads", "banSystem": "Ban Monitoring", "broadcasts": "Broadcasts", "users": "Users", @@ -2351,8 +2351,8 @@ } }, "servers": { - "title": "Server Management", - "subtitle": "Configure VPN servers", + "title": "Squad Management", + "subtitle": "Configure squads", "sync": "Sync", "syncing": "Syncing...", "syncNow": "Sync now", diff --git a/src/locales/fa.json b/src/locales/fa.json index d3ea298..fbe1cde 100644 --- a/src/locales/fa.json +++ b/src/locales/fa.json @@ -386,8 +386,8 @@ "unlimited": "نامحدود", "buyTrafficGb": "خرید {{gb}} GB", "buyUnlimited": "خرید نامحدود", - "manageServers": "مدیریت سرورها", - "manageServersTitle": "مدیریت سرورها" + "manageServers": "مدیریت اسکوادها", + "manageServersTitle": "مدیریت اسکوادها" }, "serverManagement": { "statusLegend": "✅ — متصل • ➕ — اضافه خواهد شد (پولی) • ➖ — قطع خواهد شد", @@ -924,7 +924,7 @@ "apps": "برنامه‌ها", "wheel": "چرخ", "tariffs": "تعرفه‌ها", - "servers": "سرورها", + "servers": "اسکوادها", "broadcasts": "پیام‌رسانی", "emailTemplates": "قالب‌های ایمیل", "paymentMethods": "روش‌های پرداخت", @@ -1986,8 +1986,8 @@ } }, "servers": { - "title": "مدیریت سرورها", - "subtitle": "پیکربندی سرورهای VPN", + "title": "مدیریت اسکوادها", + "subtitle": "پیکربندی اسکوادها", "sync": "همگام‌سازی", "syncing": "در حال همگام‌سازی...", "syncNow": "همگام‌سازی الان", diff --git a/src/locales/ru.json b/src/locales/ru.json index 21dd916..2c69a25 100644 --- a/src/locales/ru.json +++ b/src/locales/ru.json @@ -583,8 +583,8 @@ "unlimited": "Безлимит", "buyTrafficGb": "Купить {{gb}} ГБ", "buyUnlimited": "Купить Безлимит", - "manageServers": "Управление серверами", - "manageServersTitle": "Управление серверами" + "manageServers": "Управление сквадами", + "manageServersTitle": "Управление сквадами" }, "serverManagement": { "statusLegend": "✅ — подключено • ➕ — будет добавлено (платно) • ➖ — будет отключено", @@ -1121,7 +1121,7 @@ "apps": "Приложения", "wheel": "Колесо", "tariffs": "Тарифы", - "servers": "Серверы", + "servers": "Сквады", "banSystem": "Мониторинг банов", "broadcasts": "Рассылки", "users": "Пользователи", @@ -2857,8 +2857,8 @@ } }, "servers": { - "title": "Управление серверами", - "subtitle": "Настройка серверов VPN", + "title": "Управление сквадами", + "subtitle": "Настройка сквадов", "sync": "Синхронизировать", "syncing": "Синхронизация...", "syncNow": "Синхронизировать сейчас", diff --git a/src/locales/zh.json b/src/locales/zh.json index 9ff3064..5d775b2 100644 --- a/src/locales/zh.json +++ b/src/locales/zh.json @@ -386,8 +386,8 @@ "unlimited": "无限制", "buyTrafficGb": "购买 {{gb}} GB", "buyUnlimited": "购买无限流量", - "manageServers": "服务器管理", - "manageServersTitle": "服务器管理" + "manageServers": "小队管理", + "manageServersTitle": "小队管理" }, "serverManagement": { "statusLegend": "✅ — 已连接 • ➕ — 将添加(付费)• ➖ — 将断开", @@ -924,7 +924,7 @@ "apps": "应用", "wheel": "转盘", "tariffs": "套餐", - "servers": "服务器", + "servers": "小队", "broadcasts": "群发", "emailTemplates": "邮件模板", "paymentMethods": "支付方式", diff --git a/src/pages/AdminServers.tsx b/src/pages/AdminServers.tsx index be2ba1f..f04bead 100644 --- a/src/pages/AdminServers.tsx +++ b/src/pages/AdminServers.tsx @@ -186,14 +186,14 @@ export default function AdminServers() { onClick={() => toggleMutation.mutate(server.id)} className={`rounded-lg p-2 transition-colors ${ server.is_available - ? 'bg-success-500/20 text-success-400 hover:bg-success-500/30' - : 'bg-dark-700 text-dark-400 hover:bg-dark-600' + ? 'bg-error-500/20 text-error-400 hover:bg-error-500/30' + : 'bg-success-500/20 text-success-400 hover:bg-success-500/30' }`} title={ server.is_available ? t('admin.servers.disable') : t('admin.servers.enable') } > - {server.is_available ? : } + {server.is_available ? : } {/* Toggle Trial */} @@ -201,7 +201,7 @@ export default function AdminServers() { onClick={() => toggleTrialMutation.mutate(server.id)} className={`rounded-lg p-2 transition-colors ${ server.is_trial_eligible - ? 'bg-accent-500/20 text-accent-400 hover:bg-accent-500/30' + ? 'bg-warning-500/20 text-warning-400 hover:bg-warning-500/30' : 'bg-dark-700 text-dark-400 hover:bg-dark-600' }`} title={t('admin.servers.toggleTrial')}