diff --git a/src/locales/ru.json b/src/locales/ru.json index a32c61e..7568b7e 100644 --- a/src/locales/ru.json +++ b/src/locales/ru.json @@ -722,6 +722,211 @@ "warning": "Предупреждение", "error": "Ошибка" }, + "settingNames": { + "Skip Referral Code": "Пропуск реф. кода", + "Skip Rules Accept": "Пропуск правил", + "Connect Button Happ Download Enabled": "Кнопка скачивания Happ", + "Happ Cryptolink Redirect Template": "Шаблон редиректа", + "Happ Download Link Android": "Ссылка (Android)", + "Happ Download Link Ios": "Ссылка (iOS)", + "Happ Download Link Macos": "Ссылка (macOS)", + "Happ Download Link Pc": "Ссылка (PC)", + "Happ Download Link Windows": "Ссылка (Windows)", + "Main Menu Mode": "Режим меню", + "Cabinet Remna Sub Config": "UUID конфига", + "Miniapp Purchase Url": "URL покупки", + "Miniapp Service Description En": "Описание (EN)", + "Miniapp Service Description Ru": "Описание (RU)", + "Miniapp Service Name En": "Название (EN)", + "Miniapp Service Name Ru": "Название (RU)", + "Miniapp Static Path": "Путь к статике", + "Miniapp Support Type": "Тип поддержки", + "Miniapp Support Url": "URL поддержки", + "Miniapp Tickets Enabled": "Тикеты", + "Bot Name": "Название бота", + "Logo Letter": "Буква логотипа", + "Branding Name": "Название бренда", + "Branding Logo Url": "URL логотипа", + "Connect Button Enabled": "Кнопка подключения", + "Connect Button Text": "Текст кнопки", + "Additional Menu Enabled": "Доп. меню", + "Additional Menu Items": "Элементы меню", + "Additional Menu Title": "Заголовок меню", + "Subscription Page Layout": "Макет страницы", + "Subscription Show Traffic": "Показывать трафик", + "Subscription Show Devices": "Показывать устройства", + "Telegram Stars Enabled": "Stars включены", + "Telegram Stars Rate Rub": "Курс Stars (₽)", + "Tribute Api Key": "API ключ", + "Tribute Donate Link": "Ссылка доната", + "Tribute Enabled": "Tribute включен", + "Tribute Webhook Host": "Хост вебхука", + "Tribute Webhook Path": "Путь вебхука", + "Tribute Webhook Port": "Порт вебхука", + "Pal24 Api Token": "API токен", + "Pal24 Base Url": "Базовый URL", + "Pal24 Card Button Text": "Текст кнопки карты", + "Pal24 Card Button Visible": "Кнопка карты", + "Pal24 Enabled": "PAL24 включен", + "Pal24 Max Amount Kopeks": "Макс. сумма (коп.)", + "Pal24 Min Amount Kopeks": "Мин. сумма (коп.)", + "Pal24 Payment Description": "Описание платежа", + "Pal24 Request Timeout": "Таймаут запроса", + "Pal24 Sbp Button Text": "Текст кнопки СБП", + "Pal24 Sbp Button Visible": "Кнопка СБП", + "Pal24 Shop Id": "ID магазина", + "Pal24 Signature Token": "Токен подписи", + "Pal24 Webhook Path": "Путь вебхука", + "Pal24 Webhook Port": "Порт вебхука", + "Wata Access Token": "Токен доступа", + "Wata Base Url": "Базовый URL", + "Wata Enabled": "Wata включен", + "Wata Fail Redirect Url": "URL при ошибке", + "Wata Link Ttl Minutes": "Время жизни ссылки (мин)", + "Wata Max Amount Kopeks": "Макс. сумма (коп.)", + "Wata Min Amount Kopeks": "Мин. сумма (коп.)", + "Wata Payment Description": "Описание платежа", + "Wata Payment Type": "Тип платежа", + "Wata Public Key Cache Seconds": "Кэш ключа (сек)", + "Wata Public Key Url": "URL публичного ключа", + "Wata Request Timeout": "Таймаут запроса", + "Wata Success Redirect Url": "URL при успехе", + "Wata Terminal Public Id": "ID терминала", + "Wata Webhook Host": "Хост вебхука", + "Wata Webhook Path": "Путь вебхука", + "Wata Webhook Port": "Порт вебхука", + "Mulenpay Api Key": "API ключ", + "Mulenpay Base Url": "Базовый URL", + "Mulenpay Description": "Описание", + "Mulenpay Display Name": "Отображаемое имя", + "Mulenpay Enabled": "MulenPay включен", + "Mulenpay Iframe Expected Origin": "Origin iframe", + "Mulenpay Language": "Язык", + "Mulenpay Max Amount Kopeks": "Макс. сумма (коп.)", + "Mulenpay Min Amount Kopeks": "Мин. сумма (коп.)", + "Mulenpay Payment Mode": "Режим оплаты", + "Mulenpay Payment Subject": "Предмет оплаты", + "Mulenpay Secret Key": "Секретный ключ", + "Mulenpay Shop Id": "ID магазина", + "Mulenpay Vat Code": "Код НДС", + "Mulenpay Webhook Path": "Путь вебхука", + "Platega Active Methods": "Активные методы", + "Platega Base Url": "Базовый URL", + "Platega Currency": "Валюта", + "Platega Display Name": "Отображаемое имя", + "Platega Enabled": "Platega включен", + "Platega Failed Url": "URL при ошибке", + "Platega Max Amount Kopeks": "Макс. сумма (коп.)", + "Platega Merchant Id": "ID мерчанта", + "Platega Min Amount Kopeks": "Мин. сумма (коп.)", + "Platega Return Url": "URL возврата", + "Platega Secret": "Секрет", + "Platega Webhook Host": "Хост вебхука", + "Platega Webhook Path": "Путь вебхука", + "Platega Webhook Port": "Порт вебхука", + "Auto Purchase After Topup Enabled": "Автопокупка после пополнения", + "Disable Topup Buttons": "Отключить кнопки пополнения", + "Payment Balance Description": "Описание баланса", + "Payment Balance Template": "Шаблон баланса", + "Payment Service Name": "Название сервиса", + "Payment Subscription Description": "Описание подписки", + "Payment Subscription Template": "Шаблон подписки", + "Show Activation Prompt After Topup": "Промпт активации", + "Support Topup Enabled": "Поддержка пополнения", + "Payment Verification Auto Check Enabled": "Автопроверка платежей", + "Payment Verification Auto Check Interval Minutes": "Интервал проверки (мин)", + "Yookassa Default Receipt Email": "Email чека", + "Yookassa Enabled": "YooKassa включена", + "Yookassa Max Amount Kopeks": "Макс. сумма (коп.)", + "Yookassa Min Amount Kopeks": "Мин. сумма (коп.)", + "Yookassa Payment Mode": "Режим оплаты", + "Yookassa Payment Subject": "Предмет оплаты", + "Yookassa Quick Amount Selection Enabled": "Быстрый выбор суммы", + "Yookassa Return Url": "URL возврата", + "Yookassa Sbp Enabled": "СБП включен", + "Yookassa Secret Key": "Секретный ключ", + "Yookassa Shop Id": "ID магазина", + "Yookassa Trusted Proxy Networks": "Доверенные прокси", + "Yookassa Vat Code": "Код НДС", + "Yookassa Webhook Host": "Хост вебхука", + "Yookassa Webhook Path": "Путь вебхука", + "Yookassa Webhook Port": "Порт вебхука", + "Cryptobot Api Token": "API токен", + "Cryptobot Assets": "Активы", + "Cryptobot Base Url": "Базовый URL", + "Cryptobot Default Asset": "Актив по умолчанию", + "Cryptobot Enabled": "CryptoBot включен", + "Cryptobot Invoice Expires Hours": "Срок счёта (час)", + "Cryptobot Testnet": "Тестовая сеть", + "Cryptobot Webhook Path": "Путь вебхука", + "Cryptobot Webhook Port": "Порт вебхука", + "Cryptobot Webhook Secret": "Секрет вебхука", + "Heleket Api Key": "API ключ", + "Heleket Base Url": "Базовый URL", + "Heleket Callback Url": "URL callback", + "Heleket Default Currency": "Валюта по умолчанию", + "Heleket Default Network": "Сеть по умолчанию", + "Heleket Enabled": "Heleket включен", + "Heleket Invoice Lifetime": "Срок счёта (сек)", + "Heleket Markup Percent": "Наценка (%)", + "Heleket Merchant Id": "ID мерчанта", + "Heleket Return Url": "URL возврата", + "Heleket Success Url": "URL при успехе", + "Heleket Webhook Host": "Хост вебхука", + "Heleket Webhook Path": "Путь вебхука", + "Heleket Webhook Port": "Порт вебхука", + "Subscription Trial Enabled": "Триал включен", + "Subscription Trial Days": "Дней триала", + "Subscription Trial Traffic": "Трафик триала (ГБ)", + "Subscription Autopay Enabled": "Автоплатёж", + "Subscription Autopay Days Before": "Дней до автоплатежа", + "Traffic Enabled": "Трафик включен", + "Traffic Default Limit": "Лимит по умолчанию", + "Traffic Unlimited": "Безлимитный", + "Traffic Reset Day": "День сброса", + "Notifications Enabled": "Уведомления", + "Notifications Expiry Days": "Дней до истечения", + "Notifications Traffic Percent": "Процент трафика", + "Admin Notifications Enabled": "Уведомления админов", + "Admin Reports Enabled": "Отчёты админов", + "Admin Reports Hour": "Час отчётов", + "Database Type": "Тип БД", + "Postgres Host": "Хост", + "Postgres Port": "Порт", + "Postgres Database": "Имя БД", + "Postgres User": "Пользователь", + "Postgres Password": "Пароль", + "Redis Enabled": "Redis", + "Redis Host": "Хост Redis", + "Redis Port": "Порт Redis", + "Redis Password": "Пароль Redis", + "Debug Mode": "Отладка", + "Log Level": "Уровень логов", + "Api Url": "URL API", + "Api Key": "API ключ", + "Api Token": "API токен", + "Webhook Url": "URL вебхука", + "Webhook Secret": "Секрет вебхука", + "Remnawave Url": "URL RemnaWave", + "Remnawave Token": "Токен RemnaWave", + "Server Status Enabled": "Статус сервера", + "Monitoring Enabled": "Мониторинг", + "Maintenance Mode": "Обслуживание", + "Backup Enabled": "Бэкап", + "Backup Interval": "Интервал бэкапа", + "Support Enabled": "Поддержка", + "Support Username": "Username поддержки", + "Support Url": "URL поддержки", + "Referral Enabled": "Рефералы", + "Referral Percent": "Процент рефералов", + "Referral Min Topup": "Мин. пополнение", + "Moderation Enabled": "Модерация", + "Channel Required": "Требуется канал", + "Channel Id": "ID канала", + "Channel Url": "URL канала", + "Timezone": "Часовой пояс", + "Locale Default": "Язык" + }, "categories": { "PAYMENT": "Платежи", "PAYMENT_VERIFICATION": "Верификация платежей", diff --git a/src/pages/AdminSettings.tsx b/src/pages/AdminSettings.tsx index 10f44df..fe8dd20 100644 --- a/src/pages/AdminSettings.tsx +++ b/src/pages/AdminSettings.tsx @@ -105,62 +105,11 @@ const MenuIcon = () => ( ) // ============ HELPER FUNCTIONS ============ -// Словарь переводов для распространенных настроек -const SETTING_TRANSLATIONS: Record = { - // Skip - 'Skip Referral Code': 'Пропуск реферального кода', - 'Skip Rules Accept': 'Пропуск принятия правил', - // HAPP - 'Connect Button Happ Download Enabled': 'Кнопка скачивания Happ', - 'Happ Cryptolink Redirect Template': 'Шаблон редиректа Happ', - 'Happ Download Link Android': 'Ссылка скачивания Happ (Android)', - 'Happ Download Link Ios': 'Ссылка скачивания Happ (iOS)', - 'Happ Download Link Macos': 'Ссылка скачивания Happ (macOS)', - 'Happ Download Link Pc': 'Ссылка скачивания Happ (PC)', - 'Happ Download Link Windows': 'Ссылка скачивания Happ (Windows)', - // Interface - 'Main Menu Mode': 'Режим главного меню', - // MiniApp - 'Cabinet Remna Sub Config': 'UUID конфига RemnaWave', - 'Miniapp Purchase Url': 'URL покупки в MiniApp', - 'Miniapp Service Description En': 'Описание сервиса (EN)', - 'Miniapp Service Description Ru': 'Описание сервиса (RU)', - 'Miniapp Service Name En': 'Название сервиса (EN)', - 'Miniapp Service Name Ru': 'Название сервиса (RU)', - 'Miniapp Static Path': 'Путь к статике MiniApp', - 'Miniapp Support Type': 'Тип поддержки MiniApp', - 'Miniapp Support Url': 'URL поддержки MiniApp', - 'Miniapp Tickets Enabled': 'Тикеты в MiniApp', - // Branding - 'Bot Name': 'Название бота', - 'Logo Letter': 'Буква логотипа', - // Connect Button - 'Connect Button Enabled': 'Кнопка подключения', - 'Connect Button Text': 'Текст кнопки подключения', - // Additional - 'Additional Menu Enabled': 'Дополнительное меню', - 'Additional Menu Items': 'Элементы доп. меню', - 'Additional Menu Title': 'Заголовок доп. меню', - // Subscription Interface - 'Subscription Page Layout': 'Макет страницы подписки', - // Common - 'Enabled': 'Включено', - 'Disabled': 'Отключено', - 'Debug Mode': 'Режим отладки', - 'Log Level': 'Уровень логирования', - 'Api Url': 'URL API', - 'Api Key': 'API ключ', - 'Api Token': 'API токен', - 'Webhook Url': 'URL вебхука', - 'Webhook Secret': 'Секрет вебхука', -} - // Форматирование названия настройки (Snake_Case / CamelCase -> читаемый текст) -function formatSettingName(name: string): string { +function formatSettingKey(name: string): string { if (!name) return '' - // Сначала форматируем в читаемый вид - let formatted = name + return name // CamelCase -> пробелы .replace(/([a-z])([A-Z])/g, '$1 $2') // snake_case -> пробелы @@ -168,18 +117,14 @@ function formatSettingName(name: string): string { // Убираем лишние пробелы .replace(/\s+/g, ' ') .trim() - - // Делаем первую букву заглавной - formatted = formatted.charAt(0).toUpperCase() + formatted.slice(1) - - // Проверяем есть ли перевод - return SETTING_TRANSLATIONS[formatted] || formatted + // Первая буква заглавная + .replace(/^./, c => c.toUpperCase()) } -// Очистка HTML тегов из описания +// Очистка HTML тегов и шаблонных описаний function stripHtml(html: string): string { if (!html) return '' - return html + let cleaned = html .replace(/<[^>]*>/g, '') .replace(/ /g, ' ') .replace(/&/g, '&') @@ -187,6 +132,13 @@ function stripHtml(html: string): string { .replace(/>/g, '>') .replace(/"/g, '"') .trim() + + // Убираем шаблонные описания типа "Параметр X управляет категорией Y" + if (cleaned.match(/^Параметр .+ управляет категорией/)) { + return '' + } + + return cleaned } // ============ SIDEBAR MENU ITEMS ============ @@ -464,7 +416,9 @@ export default function AdminSettings() { const renderSettingRow = (setting: SettingDefinition) => { const isFav = isFavorite(setting.key) - const displayName = formatSettingName(setting.name || setting.key) + // Форматируем ключ в читаемый вид и ищем перевод + const formattedKey = formatSettingKey(setting.name || setting.key) + const displayName = t(`admin.settings.settingNames.${formattedKey}`, formattedKey) const description = setting.hint?.description ? stripHtml(setting.hint.description) : null return (