fix(i18n): spell the brand "Remnawave" instead of camelCase "RemnaWave"

Replace the user-facing 'RemnaWave' spelling with 'Remnawave' across all locale values (en/ru/zh/fa, 67 strings), t() display fallbacks, and code comments. Translation keys (refreshRemnaWave, ...) and code identifiers (RemnaWaveService, setRemnaWaveUuid, ...) are left untouched.
This commit is contained in:
c0mrade
2026-06-01 13:30:53 +03:00
parent 9309643b7e
commit 0d024aec58
12 changed files with 87 additions and 87 deletions

View File

@@ -9,7 +9,7 @@ export interface LocalizedText {
}
export const adminAppsApi = {
// Get RemnaWave config status
// Get Remnawave config status
getRemnaWaveStatus: async (): Promise<{ enabled: boolean; config_uuid: string | null }> => {
const response = await apiClient.get<{ enabled: boolean; config_uuid: string | null }>(
'/cabinet/admin/apps/remnawave/status',
@@ -17,7 +17,7 @@ export const adminAppsApi = {
return response.data;
},
// Set RemnaWave config UUID
// Set Remnawave config UUID
setRemnaWaveUuid: async (
uuid: string | null,
): Promise<{ enabled: boolean; config_uuid: string | null }> => {
@@ -28,7 +28,7 @@ export const adminAppsApi = {
return response.data;
},
// List available RemnaWave configs
// List available Remnawave configs
listRemnaWaveConfigs: async (): Promise<
{ uuid: string; name: string; view_position: number }[]
> => {
@@ -38,7 +38,7 @@ export const adminAppsApi = {
return response.data;
},
// Get RemnaWave subscription config
// Get Remnawave subscription config
getRemnaWaveConfig: async (): Promise<RemnawaveConfig> => {
const response = await apiClient.get<{
uuid: string;
@@ -50,7 +50,7 @@ export const adminAppsApi = {
},
};
// ============== RemnaWave Format Types ==============
// ============== Remnawave Format Types ==============
export interface RemnawaveButton {
url: string;

View File

@@ -698,7 +698,7 @@ export const adminUsersApi = {
return response.data;
},
// Get subscription request history from RemnaWave panel
// Get subscription request history from Remnawave panel
getSubscriptionRequestHistory: async (
userId: number,
subscriptionId?: number,

View File

@@ -134,7 +134,7 @@ export const serversApi = {
return response.data;
},
// Sync servers with RemnaWave
// Sync servers with Remnawave
syncServers: async (): Promise<ServerSyncResponse> => {
const response = await apiClient.post('/cabinet/admin/servers/sync');
return response.data;

View File

@@ -87,7 +87,7 @@ export interface TariffDetail {
daily_price_kopeks: number;
// Режим сброса трафика
traffic_reset_mode: string | null; // 'DAY', 'WEEK', 'MONTH', 'MONTH_ROLLING', 'NO_RESET', null = глобальная настройка
// Внешний сквад RemnaWave
// Внешний сквад Remnawave
external_squad_uuid: string | null;
created_at: string;
updated_at: string | null;
@@ -126,7 +126,7 @@ export interface TariffCreateRequest {
daily_price_kopeks?: number;
// Режим сброса трафика
traffic_reset_mode?: string | null;
// Внешний сквад RemnaWave
// Внешний сквад Remnawave
external_squad_uuid?: string | null;
}
@@ -170,7 +170,7 @@ export interface TariffUpdateRequest {
daily_price_kopeks?: number;
// Режим сброса трафика
traffic_reset_mode?: string | null;
// Внешний сквад RemnaWave
// Внешний сквад Remnawave
external_squad_uuid?: string | null;
}
@@ -266,7 +266,7 @@ export const tariffsApi = {
return response.data;
},
// Get available external squads from RemnaWave
// Get available external squads from Remnawave
getAvailableExternalSquads: async (): Promise<ExternalSquadInfo[]> => {
const response = await apiClient.get('/cabinet/admin/tariffs/available-external-squads');
return response.data;

View File

@@ -1207,7 +1207,7 @@
"broadcasts": "Broadcasts",
"users": "Users",
"payments": "Payments",
"remnawave": "RemnaWave",
"remnawave": "Remnawave",
"emailTemplates": "Email Templates",
"paymentMethods": "Payment Methods",
"campaigns": "Campaigns",
@@ -1605,7 +1605,7 @@
"notFound": "Payment method not found"
},
"remnawave": {
"title": "RemnaWave",
"title": "Remnawave",
"subtitle": "Panel management and statistics",
"connected": "Connected",
"disconnected": "Not configured",
@@ -1719,9 +1719,9 @@
"success": "Success",
"runAutoSyncNow": "Run Auto Sync Now",
"fromPanel": "From Panel",
"fromPanelDesc": "Import users from RemnaWave to bot",
"fromPanelDesc": "Import users from Remnawave to bot",
"toPanel": "To Panel",
"toPanelDesc": "Export users from bot to RemnaWave"
"toPanelDesc": "Export users from bot to Remnawave"
}
},
"wheel": {
@@ -2128,7 +2128,7 @@
"db_sqlite": "SQLite",
"db_redis": "Redis",
"sys_core": "Core & Debug",
"sys_remnawave": "RemnaWave",
"sys_remnawave": "Remnawave",
"sys_webapi": "Web API",
"sys_webhook": "Webhook",
"sys_server": "Server status",
@@ -2178,7 +2178,7 @@
"deleteUser": "Delete users"
},
"deleteSubscription": {
"warning": "Selected subscriptions will be permanently deleted from the bot and RemnaWave panel!",
"warning": "Selected subscriptions will be permanently deleted from the bot and Remnawave panel!",
"hint": "Users will lose VPN access for deleted subscriptions. This action cannot be undone.",
"activePaidWarning": "{{count}} of {{total}} selected subscriptions are active paid",
"forceDeleteConfirm": "I confirm deletion of active paid subscriptions"
@@ -2186,7 +2186,7 @@
"deleteUser": {
"warning": "Selected users will be permanently deleted from the bot! All their subscriptions, balance, and data will be lost!",
"hint": "This action cannot be undone. Users will need to restart the bot to create a new account.",
"deleteFromPanel": "Also delete from RemnaWave panel"
"deleteFromPanel": "Also delete from Remnawave panel"
},
"params": {
"days": "Number of days",
@@ -2370,16 +2370,16 @@
"importError": "Invalid JSON file format",
"importCreateError": "Failed to create some apps",
"noAppsToImport": "No apps to import",
"remnaWaveToggle": "Toggle RemnaWave source",
"refreshRemnaWave": "Refresh from RemnaWave",
"remnaWaveMode": "Showing apps from RemnaWave panel. Read-only mode.",
"remnaWaveSettings": "RemnaWave Settings",
"remnaWaveToggle": "Toggle Remnawave source",
"refreshRemnaWave": "Refresh from Remnawave",
"remnaWaveMode": "Showing apps from Remnawave panel. Read-only mode.",
"remnaWaveSettings": "Remnawave Settings",
"remnaWaveConfigUuid": "Config UUID",
"remnaWaveConfigUuidHint": "UUID of subscription page config from RemnaWave panel",
"remnaWaveConfigUuidHint": "UUID of subscription page config from Remnawave panel",
"availableConfigs": "Available configs",
"noConfigs": "No configs",
"remnaWaveConnected": "RemnaWave connected",
"remnaWaveDisconnected": "RemnaWave disconnected"
"remnaWaveConnected": "Remnawave connected",
"remnaWaveDisconnected": "Remnawave disconnected"
},
"tickets": {
"title": "Ticket Management",
@@ -2528,7 +2528,7 @@
"daysShort": "d.",
"serversTitle": "Servers",
"externalSquadTitle": "External Squad",
"externalSquadHint": "Assign a RemnaWave external squad for users on this tariff. When a subscription is created, the user will be automatically added to the selected squad.",
"externalSquadHint": "Assign a Remnawave external squad for users on this tariff. When a subscription is created, the user will be automatically added to the selected squad.",
"noExternalSquad": "No external squad",
"externalSquadUsers": "users",
"serversTabHint": "Select servers available on this tariff.",
@@ -2607,7 +2607,7 @@
"sync": "Sync",
"syncing": "Syncing...",
"syncNow": "Sync now",
"noServers": "No servers. Sync with RemnaWave.",
"noServers": "No servers. Sync with Remnawave.",
"edit": "Edit Server",
"originalName": "Original Name",
"displayName": "Display Name",

View File

@@ -1086,7 +1086,7 @@
"promoOffers": "پیشنهادات تبلیغاتی",
"promocodes": "کدهای تخفیف",
"promoGroups": "گروه‌های تخفیف",
"remnawave": "RemnaWave",
"remnawave": "Remnawave",
"users": "کاربران",
"trafficUsage": "مصرف ترافیک",
"updates": "به‌روزرسانی‌ها",
@@ -1832,7 +1832,7 @@
"db_sqlite": "SQLite",
"db_redis": "Redis",
"sys_core": "هسته و اشکال‌زدایی",
"sys_remnawave": "RemnaWave",
"sys_remnawave": "Remnawave",
"sys_webapi": "Web API",
"sys_webhook": "Webhook",
"sys_server": "وضعیت سرور",
@@ -1957,15 +1957,15 @@
"importError": "فرمت فایل JSON نامعتبر",
"importPreview": "پیش‌نمایش وارد کردن",
"noAppsToImport": "هیچ برنامه‌ای برای وارد کردن نیست",
"refreshRemnaWave": "بازخوانی از RemnaWave",
"refreshRemnaWave": "بازخوانی از Remnawave",
"remnaWaveConfigUuid": "UUID پیکربندی",
"remnaWaveConfigUuidHint": "UUID پیکربندی صفحه اشتراک از پنل RemnaWave",
"remnaWaveMode": "نمایش برنامه‌ها از پنل RemnaWave. حالت فقط خواندنی.",
"remnaWaveSettings": "تنظیمات RemnaWave",
"remnaWaveToggle": "تغییر منبع RemnaWave",
"remnaWaveConfigUuidHint": "UUID پیکربندی صفحه اشتراک از پنل Remnawave",
"remnaWaveMode": "نمایش برنامه‌ها از پنل Remnawave. حالت فقط خواندنی.",
"remnaWaveSettings": "تنظیمات Remnawave",
"remnaWaveToggle": "تغییر منبع Remnawave",
"noConfigs": "هیچ تنظیماتی وجود ندارد",
"remnaWaveConnected": "RemnaWave متصل است",
"remnaWaveDisconnected": "RemnaWave قطع است"
"remnaWaveConnected": "Remnawave متصل است",
"remnaWaveDisconnected": "Remnawave قطع است"
},
"tickets": {
"title": "مدیریت تیکت‌ها",
@@ -2107,7 +2107,7 @@
"daysShort": "روز",
"serversTitle": "سرورها",
"externalSquadTitle": "گروه خارجی",
"externalSquadHint": "یک گروه خارجی RemnaWave برای کاربران این تعرفه تعیین کنید. هنگام ایجاد اشتراک، کاربر به طور خودکار به گروه انتخاب شده اضافه می‌شود.",
"externalSquadHint": "یک گروه خارجی Remnawave برای کاربران این تعرفه تعیین کنید. هنگام ایجاد اشتراک، کاربر به طور خودکار به گروه انتخاب شده اضافه می‌شود.",
"noExternalSquad": "بدون گروه خارجی",
"externalSquadUsers": "کاربران",
"serversTabHint": "سرورهای موجود در این تعرفه را انتخاب کنید.",
@@ -2186,7 +2186,7 @@
"sync": "همگام‌سازی",
"syncing": "در حال همگام‌سازی...",
"syncNow": "همگام‌سازی الان",
"noServers": "سروری نیست. با RemnaWave همگام‌سازی کنید.",
"noServers": "سروری نیست. با Remnawave همگام‌سازی کنید.",
"edit": "ویرایش سرور",
"originalName": "نام اصلی",
"displayName": "نام نمایشی",
@@ -3138,7 +3138,7 @@
"connected": "متصل",
"disconnected": "تنظیم نشده",
"noData": "بارگذاری داده‌ها ناموفق بود",
"title": "RemnaWave",
"title": "Remnawave",
"subtitle": "مدیریت پنل و آمار",
"tabs": {
"overview": "نمای کلی",
@@ -3246,9 +3246,9 @@
"success": "موفق",
"runAutoSyncNow": "اجرای همگام‌سازی خودکار",
"fromPanel": "از پنل",
"fromPanelDesc": "وارد کردن کاربران از RemnaWave به ربات",
"fromPanelDesc": "وارد کردن کاربران از Remnawave به ربات",
"toPanel": "به پنل",
"toPanelDesc": "صادر کردن کاربران از ربات به RemnaWave"
"toPanelDesc": "صادر کردن کاربران از ربات به Remnawave"
}
},
"theme": {
@@ -3824,7 +3824,7 @@
"deleteUser": "حذف کاربران"
},
"deleteSubscription": {
"warning": "اشتراک‌های انتخاب شده برای همیشه از ربات و پنل RemnaWave حذف خواهند شد!",
"warning": "اشتراک‌های انتخاب شده برای همیشه از ربات و پنل Remnawave حذف خواهند شد!",
"hint": "کاربران دسترسی VPN اشتراک‌های حذف شده را از دست خواهند داد. این عملیات قابل بازگشت نیست.",
"activePaidWarning": "{{count}} از {{total}} اشتراک انتخاب‌شده اشتراک‌های فعال پرداختی هستند",
"forceDeleteConfirm": "حذف اشتراک‌های فعال پرداختی را تأیید می‌کنم"
@@ -3832,7 +3832,7 @@
"deleteUser": {
"warning": "کاربران انتخاب شده برای همیشه از ربات حذف خواهند شد! تمام اشتراک‌ها، موجودی و داده‌های آن‌ها از بین خواهد رفت!",
"hint": "این عملیات قابل بازگشت نیست. کاربران باید ربات را دوباره راه‌اندازی کنند تا حساب جدید بسازند.",
"deleteFromPanel": "همچنین از پنل RemnaWave حذف شود"
"deleteFromPanel": "همچنین از پنل Remnawave حذف شود"
},
"params": {
"days": "تعداد روز",

View File

@@ -1229,7 +1229,7 @@
"broadcasts": "Рассылки",
"users": "Пользователи",
"payments": "Платежи",
"remnawave": "RemnaWave",
"remnawave": "Remnawave",
"emailTemplates": "Email-шаблоны",
"paymentMethods": "Платёжные методы",
"campaigns": "Кампании",
@@ -1627,7 +1627,7 @@
"notFound": "Метод оплаты не найден"
},
"remnawave": {
"title": "RemnaWave",
"title": "Remnawave",
"subtitle": "Управление панелью и статистика",
"connected": "Подключено",
"disconnected": "Не настроено",
@@ -1744,9 +1744,9 @@
"success": "Успешно",
"runAutoSyncNow": "Запустить автосинхронизацию",
"fromPanel": "Из панели",
"fromPanelDesc": "Импорт пользователей из RemnaWave в бота",
"fromPanelDesc": "Импорт пользователей из Remnawave в бота",
"toPanel": "В панель",
"toPanelDesc": "Экспорт пользователей из бота в RemnaWave"
"toPanelDesc": "Экспорт пользователей из бота в Remnawave"
}
},
"wheel": {
@@ -2145,7 +2145,7 @@
"db_sqlite": "SQLite",
"db_redis": "Redis",
"sys_core": "Ядро и отладка",
"sys_remnawave": "RemnaWave",
"sys_remnawave": "Remnawave",
"sys_webapi": "Web API",
"sys_webhook": "Webhook",
"sys_server": "Статус сервера",
@@ -2355,8 +2355,8 @@
"Api Key": "API ключ",
"Api Token": "API токен",
"Webhook Secret": "Секрет вебхука",
"Remnawave Url": "URL RemnaWave",
"Remnawave Token": "Токен RemnaWave",
"Remnawave Url": "URL Remnawave",
"Remnawave Token": "Токен Remnawave",
"Server Status Enabled": "Статус сервера",
"Monitoring Enabled": "Мониторинг",
"Backup Enabled": "Бэкап",
@@ -2646,7 +2646,7 @@
"SQLITE": "SQLite",
"REDIS": "Redis",
"CORE": "Бот",
"REMNAWAVE": "RemnaWave",
"REMNAWAVE": "Remnawave",
"SERVER_STATUS": "Статус сервера",
"MONITORING": "Мониторинг",
"MAINTENANCE": "Обслуживание",
@@ -2765,16 +2765,16 @@
"importError": "Неверный формат JSON файла",
"importCreateError": "Ошибка при создании приложений",
"noAppsToImport": "Нет приложений для импорта",
"remnaWaveToggle": "Переключить источник RemnaWave",
"refreshRemnaWave": "Обновить данные из RemnaWave",
"remnaWaveMode": "Отображаются приложения из панели RemnaWave. Режим только для чтения.",
"remnaWaveSettings": "Настройки RemnaWave",
"remnaWaveToggle": "Переключить источник Remnawave",
"refreshRemnaWave": "Обновить данные из Remnawave",
"remnaWaveMode": "Отображаются приложения из панели Remnawave. Режим только для чтения.",
"remnaWaveSettings": "Настройки Remnawave",
"remnaWaveConfigUuid": "UUID конфигурации",
"remnaWaveConfigUuidHint": "UUID конфигурации страницы подписки из панели RemnaWave",
"remnaWaveConfigUuidHint": "UUID конфигурации страницы подписки из панели Remnawave",
"availableConfigs": "Доступные конфигурации",
"noConfigs": "Нет настроенных конфигов",
"remnaWaveConnected": "RemnaWave подключён",
"remnaWaveDisconnected": "RemnaWave отключён"
"remnaWaveConnected": "Remnawave подключён",
"remnaWaveDisconnected": "Remnawave отключён"
},
"tickets": {
"title": "Управление тикетами",
@@ -2926,7 +2926,7 @@
"daysShort": "дн.",
"serversTitle": "Серверы",
"externalSquadTitle": "Внешний сквад",
"externalSquadHint": "Назначьте внешний сквад RemnaWave для пользователей этого тарифа. При создании подписки пользователь будет автоматически добавлен в выбранный сквад.",
"externalSquadHint": "Назначьте внешний сквад Remnawave для пользователей этого тарифа. При создании подписки пользователь будет автоматически добавлен в выбранный сквад.",
"noExternalSquad": "Без внешнего сквада",
"externalSquadUsers": "пользователей",
"serversTabHint": "Выберите серверы, доступные на этом тарифе.",
@@ -3005,7 +3005,7 @@
"sync": "Синхронизировать",
"syncing": "Синхронизация...",
"syncNow": "Синхронизировать сейчас",
"noServers": "Нет серверов. Синхронизируйте с RemnaWave.",
"noServers": "Нет серверов. Синхронизируйте с Remnawave.",
"edit": "Редактировать сервер",
"originalName": "Оригинальное название",
"displayName": "Отображаемое название",
@@ -3976,7 +3976,7 @@
"deleteUser": "Удалить пользователей"
},
"deleteSubscription": {
"warning": "Выбранные подписки будут безвозвратно удалены из бота и панели RemnaWave!",
"warning": "Выбранные подписки будут безвозвратно удалены из бота и панели Remnawave!",
"hint": "Пользователи потеряют доступ к VPN по удалённым подпискам. Это действие нельзя отменить.",
"activePaidWarning": "{{count}} из {{total}} выбранных подписок: активные платные",
"forceDeleteConfirm": "Подтверждаю удаление активных платных подписок"
@@ -3984,7 +3984,7 @@
"deleteUser": {
"warning": "Выбранные пользователи будут безвозвратно удалены из бота! Все их подписки, баланс и данные будут потеряны!",
"hint": "Это действие нельзя отменить. Пользователям придётся заново запустить бота для создания нового аккаунта.",
"deleteFromPanel": "Также удалить из панели RemnaWave"
"deleteFromPanel": "Также удалить из панели Remnawave"
},
"params": {
"days": "Количество дней",

View File

@@ -1086,7 +1086,7 @@
"promoOffers": "促销优惠",
"promocodes": "促销码",
"promoGroups": "折扣组",
"remnawave": "RemnaWave",
"remnawave": "Remnawave",
"users": "用户",
"trafficUsage": "流量使用",
"updates": "更新",
@@ -1873,7 +1873,7 @@
"db_sqlite": "SQLite",
"db_redis": "Redis",
"sys_core": "核心与调试",
"sys_remnawave": "RemnaWave",
"sys_remnawave": "Remnawave",
"sys_webapi": "Web API",
"sys_webhook": "Webhook",
"sys_server": "服务器状态",
@@ -1991,12 +1991,12 @@
"importError": "无效的JSON文件格式",
"importPreview": "导入预览",
"noAppsToImport": "没有可导入的应用",
"refreshRemnaWave": "从RemnaWave刷新",
"refreshRemnaWave": "从Remnawave刷新",
"remnaWaveConfigUuid": "配置UUID",
"remnaWaveConfigUuidHint": "来自RemnaWave面板的订阅页面配置UUID",
"remnaWaveMode": "显示来自RemnaWave面板的应用。只读模式。",
"remnaWaveSettings": "RemnaWave设置",
"remnaWaveToggle": "切换RemnaWave源",
"remnaWaveConfigUuidHint": "来自Remnawave面板的订阅页面配置UUID",
"remnaWaveMode": "显示来自Remnawave面板的应用。只读模式。",
"remnaWaveSettings": "Remnawave设置",
"remnaWaveToggle": "切换Remnawave源",
"tabs": {
"basic": "基本",
"installation": "安装",
@@ -2005,8 +2005,8 @@
"additional": "附加"
},
"noConfigs": "未配置任何配置",
"remnaWaveConnected": "RemnaWave 已连接",
"remnaWaveDisconnected": "RemnaWave 未连接"
"remnaWaveConnected": "Remnawave 已连接",
"remnaWaveDisconnected": "Remnawave 未连接"
},
"tickets": {
"title": "工单管理",
@@ -2147,7 +2147,7 @@
"daysShort": "天",
"serversTitle": "服务器",
"externalSquadTitle": "外部小组",
"externalSquadHint": "为此套餐的用户分配RemnaWave外部小组。创建订阅时用户将自动添加到所选小组。",
"externalSquadHint": "为此套餐的用户分配Remnawave外部小组。创建订阅时用户将自动添加到所选小组。",
"noExternalSquad": "无外部小组",
"externalSquadUsers": "用户",
"serversTabHint": "选择此套餐上可用的服务器。",
@@ -2226,7 +2226,7 @@
"sync": "同步",
"syncing": "同步中...",
"syncNow": "立即同步",
"noServers": "暂无服务器。请与RemnaWave同步。",
"noServers": "暂无服务器。请与Remnawave同步。",
"edit": "编辑服务器",
"originalName": "原始名称",
"displayName": "显示名称",
@@ -3146,7 +3146,7 @@
"connected": "已连接",
"disconnected": "未配置",
"noData": "加载数据失败",
"title": "RemnaWave",
"title": "Remnawave",
"subtitle": "面板管理和统计",
"tabs": {
"overview": "概览",
@@ -3254,9 +3254,9 @@
"success": "成功",
"runAutoSyncNow": "立即运行自动同步",
"fromPanel": "从面板",
"fromPanelDesc": "从RemnaWave导入用户到机器人",
"fromPanelDesc": "从Remnawave导入用户到机器人",
"toPanel": "到面板",
"toPanelDesc": "从机器人导出用户到RemnaWave"
"toPanelDesc": "从机器人导出用户到Remnawave"
}
},
"roles": {
@@ -3823,7 +3823,7 @@
"deleteUser": "删除用户"
},
"deleteSubscription": {
"warning": "选中的订阅将从机器人和RemnaWave面板中永久删除",
"warning": "选中的订阅将从机器人和Remnawave面板中永久删除",
"hint": "用户将失去已删除订阅的VPN访问权限。此操作无法撤销。",
"activePaidWarning": "所选订阅中有 {{count}} / {{total}} 是有效的付费订阅",
"forceDeleteConfirm": "我确认删除有效的付费订阅"
@@ -3831,7 +3831,7 @@
"deleteUser": {
"warning": "选中的用户将从机器人中永久删除!他们的所有订阅、余额和数据将丢失!",
"hint": "此操作无法撤销。用户需要重新启动机器人以创建新账户。",
"deleteFromPanel": "同时从RemnaWave面板删除"
"deleteFromPanel": "同时从Remnawave面板删除"
},
"params": {
"days": "天数",

View File

@@ -11,7 +11,7 @@ export default function AdminApps() {
const queryClient = useQueryClient();
const { capabilities } = usePlatform();
// RemnaWave status
// Remnawave status
const { data: status } = useQuery({
queryKey: ['remnawave-status'],
queryFn: adminAppsApi.getRemnaWaveStatus,
@@ -60,8 +60,8 @@ export default function AdminApps() {
/>
<span className="text-sm font-medium text-dark-200">
{status?.enabled
? t('admin.apps.remnaWaveConnected', 'RemnaWave connected')
: t('admin.apps.remnaWaveDisconnected', 'RemnaWave not connected')}
? t('admin.apps.remnaWaveConnected', 'Remnawave connected')
: t('admin.apps.remnaWaveDisconnected', 'Remnawave not connected')}
</span>
</div>
{status?.config_uuid && (

View File

@@ -1122,7 +1122,7 @@ function SyncTab({
title={t('admin.remnawave.sync.fromPanel', 'Sync from Panel')}
description={t(
'admin.remnawave.sync.fromPanelDesc',
'Import users from RemnaWave panel to bot',
'Import users from Remnawave panel to bot',
)}
onAction={onSyncFromPanel}
isLoading={loadingStates.fromPanel}
@@ -1132,7 +1132,7 @@ function SyncTab({
title={t('admin.remnawave.sync.toPanel', 'Sync to Panel')}
description={t(
'admin.remnawave.sync.toPanelDesc',
'Export users from bot to RemnaWave panel',
'Export users from bot to Remnawave panel',
)}
onAction={onSyncToPanel}
isLoading={loadingStates.toPanel}
@@ -1498,7 +1498,7 @@ export default function AdminRemnawave() {
</div>
<div>
<h1 className="text-xl font-semibold text-dark-100">
{t('admin.remnawave.title', 'RemnaWave')}
{t('admin.remnawave.title', 'Remnawave')}
</h1>
<p className="text-sm text-dark-400">
{t('admin.remnawave.subtitle', 'Panel management and statistics')}

View File

@@ -438,7 +438,7 @@ export default function Subscription() {
queryClient.invalidateQueries({ queryKey: ['subscription'] });
queryClient.invalidateQueries({ queryKey: ['connection-link', subscriptionId] });
queryClient.invalidateQueries({ queryKey: ['subscriptions-list'] });
// RemnaWave resets device HWIDs on revoke — make sure the cabinet
// Remnawave resets device HWIDs on revoke — make sure the cabinet
// re-reads the now-empty device list instead of showing the stale cache.
queryClient.invalidateQueries({ queryKey: ['devices', subscriptionId] });
haptic.notification('success');

View File

@@ -538,7 +538,7 @@ export interface LocalizedText {
[key: string]: string;
}
// RemnaWave format types
// Remnawave format types
export interface RemnawaveButtonClient {
url?: string;
link?: string;
@@ -581,7 +581,7 @@ export interface AppConfig {
supportUrl?: string;
};
// RemnaWave
// Remnawave
isRemnawave?: boolean;
svgLibrary?: Record<string, string | { svgString: string }>;
baseTranslations?: Record<string, LocalizedText>;