mirror of
https://github.com/chillpadclub/bedolaga-cabinet.git
synced 2026-07-28 09:33:46 +00:00
Move hardcoded translations from AdminSettings to locales
- Remove SETTING_TRANSLATIONS object with 50+ hardcoded Russian translations - Add translations to ru.json under admin.settings.settingNames - Rename formatSettingName to formatSettingKey - Use t() function with fallback for setting names
This commit is contained in:
@@ -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": "Верификация платежей",
|
||||
|
||||
@@ -105,62 +105,11 @@ const MenuIcon = () => (
|
||||
)
|
||||
|
||||
// ============ HELPER FUNCTIONS ============
|
||||
// Словарь переводов для распространенных настроек
|
||||
const SETTING_TRANSLATIONS: Record<string, string> = {
|
||||
// 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 (
|
||||
|
||||
Reference in New Issue
Block a user