diff --git a/bot/app/web/admin_settings_manifest.py b/bot/app/web/admin_settings_manifest.py index d704a23..71bc58c 100644 --- a/bot/app/web/admin_settings_manifest.py +++ b/bot/app/web/admin_settings_manifest.py @@ -173,8 +173,8 @@ SETTINGS_MANIFEST: List[SettingField] = [ "notifications", "Логировать действия администраторов", "Если выключено, события от пользователей из ADMIN_IDS не записываются в message logs.", - i18n_label_key="admin_settings_field_log_admin_actions_label", - i18n_description_key="admin_settings_field_log_admin_actions_description", + i18n_label_key="settings_field_log_admin_actions_label", + i18n_description_key="settings_field_log_admin_actions_description", ), SettingField("LOG_LEVEL", "string", "notifications", "Глобальный уровень логов", "DEBUG / INFO / WARNING / ERROR"), SettingField("LOG_CHAT_ID", "int", "notifications", "ID чата для логов"), @@ -255,6 +255,8 @@ def manifest_payload() -> List[dict]: } items: List[dict] = [] for field in SETTINGS_MANIFEST: + auto_label_i18n_key = f"settings_field_{field.key.lower()}_label" + auto_description_i18n_key = f"settings_field_{field.key.lower()}_description" items.append( { "key": field.key, @@ -264,8 +266,10 @@ def manifest_payload() -> List[dict]: "subsection": field.subsection, "label": field.label, "description": field.description, - "i18n_label_key": field.i18n_label_key, - "i18n_description_key": field.i18n_description_key, + "i18n_label_key": field.i18n_label_key or auto_label_i18n_key, + "i18n_description_key": field.i18n_description_key or ( + auto_description_i18n_key if field.description else None + ), "placeholder": field.placeholder, "optional": field.optional, "secret": field.secret, diff --git a/bot/app/web/frontend/src/admin/AdminPanel.svelte b/bot/app/web/frontend/src/admin/AdminPanel.svelte index 8b28002..389ce4e 100644 --- a/bot/app/web/frontend/src/admin/AdminPanel.svelte +++ b/bot/app/web/frontend/src/admin/AdminPanel.svelte @@ -494,7 +494,7 @@ {/if} {#if active === "settings"} - + {/if} diff --git a/bot/app/web/frontend/src/admin/sections/SettingsSection.svelte b/bot/app/web/frontend/src/admin/sections/SettingsSection.svelte index f0f84fb..5ed71e7 100644 --- a/bot/app/web/frontend/src/admin/sections/SettingsSection.svelte +++ b/bot/app/web/frontend/src/admin/sections/SettingsSection.svelte @@ -7,6 +7,7 @@ export let at; export let onSettingsSaved; export let isCompact = false; + export let currentLang = "ru"; const settingsStore = getContext("settingsStore"); @@ -90,6 +91,28 @@ }; return map[id] || id; } + + function englishFieldLabelFallback(key, originalLabel) { + if (!key) return originalLabel || ""; + return String(key) + .toLowerCase() + .split("_") + .filter(Boolean) + .map((part) => { + if (part === "id") return "ID"; + if (part === "url") return "URL"; + if (part === "api") return "API"; + if (part === "tg") return "TG"; + return part.charAt(0).toUpperCase() + part.slice(1); + }) + .join(" "); + } + + function fieldLabelText(field) { + const isEnglish = String(currentLang || "").toLowerCase().startsWith("en"); + const fallback = isEnglish ? englishFieldLabelFallback(field.key, field.label) : field.label; + return field.i18n_label_key ? at(field.i18n_label_key, {}, fallback) : fallback; + } {#snippet renderField(field)} @@ -97,7 +120,7 @@
- {field.i18n_label_key ? at(field.i18n_label_key, {}, field.label) : field.label} + {fieldLabelText(field)} {at("settings_badge_secret", {}, "Secret")} {#if isOverridden(field)} {at("settings_badge_override", {}, "Override")} diff --git a/locales/en.json b/locales/en.json index d59d9ad..49d609b 100644 --- a/locales/en.json +++ b/locales/en.json @@ -508,7 +508,7 @@ "status_inactive": "Inactive", "admin_ads_section": "📈 Ads", "admin_ads_header": "📈 Ad Campaigns:", - "admin_ads_empty": "📭 No ad campaigns. Click \"Create\" to add one.", + "admin_ads_empty": "No campaigns found", "admin_ads_item": "ID: {id}\nSource: {source}\nstart={start_param}\nCost: {cost} RUB\nActive: {active}\n— Starts: {starts}\n— Trials: {trials}\n— Payers: {payers}\n— Revenue: {revenue} RUB", "admin_ads_create_button": "➕ Create campaign", "admin_ads_create_source_prompt": "Enter source (e.g., AEZA, VK, TG-channel):", @@ -796,7 +796,7 @@ "admin_nav_operations": "Operations", "admin_nav_users": "Users", "admin_nav_payments": "Payments", - "admin_nav_promos": "Promo codes", + "admin_nav_promos": "Promos", "admin_nav_ads": "Ads", "admin_nav_communication": "Communication", "admin_nav_broadcast": "Broadcast", @@ -810,18 +810,18 @@ "admin_section_users_subtitle": "Search, bans, and account actions", "admin_section_payments_title": "Payments", "admin_section_payments_subtitle": "Transaction history and export", - "admin_section_promos_title": "Promo codes", - "admin_section_promos_subtitle": "Create and manage codes", - "admin_section_ads_title": "Ad campaigns", + "admin_section_promos_title": "Promos", + "admin_section_promos_subtitle": "Create and manage promo codes", + "admin_section_ads_title": "Ad Campaigns", "admin_section_ads_subtitle": "UTM sources and attribution", "admin_section_broadcast_title": "Broadcast", - "admin_section_broadcast_subtitle": "Bulk Telegram message delivery", - "admin_section_logs_title": "Activity logs", + "admin_section_broadcast_subtitle": "Mass messaging in Telegram", + "admin_section_logs_title": "Activity Logs", "admin_section_logs_subtitle": "User events and admin actions", "admin_section_tariffs_title": "Tariffs", "admin_section_tariffs_subtitle": "Sales catalog, periods, packages, and limits", - "admin_section_settings_title": "Application settings", - "admin_section_settings_subtitle": "Overrides over .env, applied immediately", + "admin_section_settings_title": "App Settings", + "admin_section_settings_subtitle": "Overrides for .env, applied instantly", "admin_filter_all": "All", "admin_filter_not_banned": "Not banned", "admin_filter_banned": "Banned", @@ -1035,7 +1035,6 @@ "admin_btn_delete": "Delete", "admin_promos_empty": "No promo codes found", "admin_btn_create": "Create", - "admin_ads_empty": "No campaigns found", "admin_btn_campaign": "Campaign", "admin_btn_tariff": "Tariff", "admin_btn_sync": "Synchronize", @@ -1046,38 +1045,6 @@ "admin_btn_disable": "Off", "admin_btn_show_more": "Show more", "admin_settings_dirty_count": "Changes: {count}", - "admin_nav_overview": "Overview", - "admin_nav_dashboard": "Dashboard", - "admin_nav_operations": "Operations", - "admin_nav_users": "Users", - "admin_nav_payments": "Payments", - "admin_nav_promos": "Promos", - "admin_nav_ads": "Ads", - "admin_nav_communication": "Communication", - "admin_nav_broadcast": "Broadcast", - "admin_nav_logs": "Logs", - "admin_nav_system": "System", - "admin_nav_tariffs": "Tariffs", - "admin_nav_settings": "Settings", - "admin_section_stats_title": "Dashboard", - "admin_section_stats_subtitle": "Audience, revenue, Remnawave panel, and recent payments", - "admin_section_users_title": "Users", - "admin_section_users_subtitle": "Search, bans, and account actions", - "admin_section_payments_title": "Payments", - "admin_section_payments_subtitle": "Transaction history and export", - "admin_section_promos_title": "Promos", - "admin_section_promos_subtitle": "Create and manage promo codes", - "admin_section_ads_title": "Ad Campaigns", - "admin_section_ads_subtitle": "UTM sources and attribution", - "admin_section_broadcast_title": "Broadcast", - "admin_section_broadcast_subtitle": "Mass messaging in Telegram", - "admin_section_logs_title": "Activity Logs", - "admin_section_logs_subtitle": "User events and admin actions", - "admin_section_tariffs_title": "Tariffs", - "admin_section_tariffs_subtitle": "Sales catalog, periods, packages, and limits", - "admin_section_settings_title": "App Settings", - "admin_section_settings_subtitle": "Overrides for .env, applied instantly", - "admin_panel_title": "Admin Panel", "admin_promo_col_code": "Code", "admin_promo_col_bonus": "Bonus", "admin_promo_col_activations": "Activations", @@ -1143,5 +1110,122 @@ "admin_broadcast_started": "Broadcast started", "admin_broadcast_failed": "Broadcast failed", "admin_user_short": "User", - "admin_target_short": "Target" + "admin_target_short": "Target", + "admin_settings_field_default_language_label": "Default Language", + "admin_settings_field_default_language_description": "Controls the 'Default Language' setting in admin overrides.", + "admin_settings_field_default_currency_symbol_label": "Default Currency Symbol", + "admin_settings_field_default_currency_symbol_description": "Controls the 'Default Currency Symbol' setting in admin overrides.", + "admin_settings_field_support_link_label": "Support Link", + "admin_settings_field_support_link_description": "Controls the 'Support Link' setting in admin overrides.", + "admin_settings_field_server_status_url_label": "Server Status URL", + "admin_settings_field_terms_of_service_url_label": "Terms Of Service URL", + "admin_settings_field_privacy_policy_url_label": "Privacy Policy URL", + "admin_settings_field_user_agreement_url_label": "User Agreement URL", + "admin_settings_field_disable_welcome_message_label": "Disable Welcome Message", + "admin_settings_field_start_command_description_label": "Start Command Description", + "admin_settings_field_required_channel_id_label": "Required Channel ID", + "admin_settings_field_required_channel_id_description": "Controls the 'Required Channel ID' setting in admin overrides.", + "admin_settings_field_required_channel_link_label": "Required Channel Link", + "admin_settings_field_required_channel_link_description": "Controls the 'Required Channel Link' setting in admin overrides.", + "admin_settings_field_webapp_title_label": "WebApp Title", + "admin_settings_field_webapp_primary_color_label": "WebApp Primary Color", + "admin_settings_field_webapp_logo_url_label": "WebApp Logo URL", + "admin_settings_field_webapp_logo_emoji_label": "WebApp Logo Emoji", + "admin_settings_field_webapp_enabled_label": "WebApp Enabled", + "admin_settings_field_month_1_enabled_label": "Month 1 Enabled", + "admin_settings_field_month_3_enabled_label": "Month 3 Enabled", + "admin_settings_field_month_6_enabled_label": "Month 6 Enabled", + "admin_settings_field_month_12_enabled_label": "Month 12 Enabled", + "admin_settings_field_rub_price_1_month_label": "Rub Price 1 Month", + "admin_settings_field_rub_price_3_months_label": "Rub Price 3 Months", + "admin_settings_field_rub_price_6_months_label": "Rub Price 6 Months", + "admin_settings_field_rub_price_12_months_label": "Rub Price 12 Months", + "admin_settings_field_stars_price_1_month_label": "Stars Price 1 Month", + "admin_settings_field_stars_price_3_months_label": "Stars Price 3 Months", + "admin_settings_field_stars_price_6_months_label": "Stars Price 6 Months", + "admin_settings_field_stars_price_12_months_label": "Stars Price 12 Months", + "admin_settings_field_traffic_packages_label": "Traffic Packages", + "admin_settings_field_traffic_packages_description": "Controls the 'Traffic Packages' setting in admin overrides.", + "admin_settings_field_stars_traffic_packages_label": "Stars Traffic Packages", + "admin_settings_field_payment_methods_order_label": "Payment Methods Order", + "admin_settings_field_payment_methods_order_description": "Controls the 'Payment Methods Order' setting in admin overrides.", + "admin_settings_field_stars_enabled_label": "Stars Enabled", + "admin_settings_field_yookassa_enabled_label": "YooKassa Enabled", + "admin_settings_field_yookassa_shop_id_label": "YooKassa Shop ID", + "admin_settings_field_yookassa_secret_key_label": "YooKassa Secret Key", + "admin_settings_field_yookassa_return_url_label": "YooKassa Return URL", + "admin_settings_field_yookassa_default_receipt_email_label": "YooKassa Default Receipt Email", + "admin_settings_field_yookassa_vat_code_label": "YooKassa VAT Code", + "admin_settings_field_yookassa_vat_code_description": "Controls the 'YooKassa VAT Code' setting in admin overrides.", + "admin_settings_field_yookassa_autopayments_enabled_label": "YooKassa Autopayments Enabled", + "admin_settings_field_yookassa_autopayments_require_card_binding_label": "YooKassa Autopayments Require Card Binding", + "admin_settings_field_freekassa_enabled_label": "FreeKassa Enabled", + "admin_settings_field_freekassa_merchant_id_label": "FreeKassa Merchant ID", + "admin_settings_field_freekassa_first_secret_label": "FreeKassa First Secret", + "admin_settings_field_freekassa_second_secret_label": "FreeKassa Second Secret", + "admin_settings_field_freekassa_second_secret_description": "Controls the 'FreeKassa Second Secret' setting in admin overrides.", + "admin_settings_field_freekassa_api_key_label": "FreeKassa API Key", + "admin_settings_field_freekassa_payment_url_label": "FreeKassa Payment URL", + "admin_settings_field_freekassa_payment_method_id_label": "FreeKassa Payment Method ID", + "admin_settings_field_freekassa_payment_ip_label": "FreeKassa Payment Ip", + "admin_settings_field_freekassa_payment_ip_description": "Controls the 'FreeKassa Payment Ip' setting in admin overrides.", + "admin_settings_field_freekassa_trusted_ips_label": "FreeKassa Trusted Ips", + "admin_settings_field_freekassa_trusted_ips_description": "Controls the 'FreeKassa Trusted Ips' setting in admin overrides.", + "admin_settings_field_platega_enabled_label": "Platega Enabled", + "admin_settings_field_platega_base_url_label": "Platega Base URL", + "admin_settings_field_platega_merchant_id_label": "Platega Merchant ID", + "admin_settings_field_platega_secret_label": "Platega Secret", + "admin_settings_field_platega_payment_method_label": "Platega Payment Method", + "admin_settings_field_platega_sbp_enabled_label": "Platega SBP Enabled", + "admin_settings_field_platega_sbp_method_label": "Platega SBP Method", + "admin_settings_field_platega_crypto_enabled_label": "Platega Crypto Enabled", + "admin_settings_field_platega_crypto_method_label": "Platega Crypto Method", + "admin_settings_field_platega_return_url_label": "Platega Return URL", + "admin_settings_field_platega_failed_url_label": "Platega Failed URL", + "admin_settings_field_severpay_enabled_label": "SeverPay Enabled", + "admin_settings_field_severpay_mid_label": "SeverPay Mid", + "admin_settings_field_severpay_token_label": "SeverPay Token", + "admin_settings_field_severpay_base_url_label": "SeverPay Base URL", + "admin_settings_field_severpay_return_url_label": "SeverPay Return URL", + "admin_settings_field_severpay_lifetime_minutes_label": "SeverPay Lifetime Minutes", + "admin_settings_field_severpay_lifetime_minutes_description": "Controls the 'SeverPay Lifetime Minutes' setting in admin overrides.", + "admin_settings_field_cryptopay_enabled_label": "CryptoPay Enabled", + "admin_settings_field_cryptopay_token_label": "CryptoPay Token", + "admin_settings_field_cryptopay_network_label": "CryptoPay Network", + "admin_settings_field_cryptopay_network_description": "Controls the 'CryptoPay Network' setting in admin overrides.", + "admin_settings_field_cryptopay_currency_type_label": "CryptoPay Currency Type", + "admin_settings_field_cryptopay_currency_type_description": "Controls the 'CryptoPay Currency Type' setting in admin overrides.", + "admin_settings_field_cryptopay_asset_label": "CryptoPay Asset", + "admin_settings_field_trial_enabled_label": "Trial Enabled", + "admin_settings_field_trial_duration_days_label": "Trial Duration Days", + "admin_settings_field_trial_traffic_limit_gb_label": "Trial Traffic Limit Gb", + "admin_settings_field_trial_traffic_strategy_label": "Trial Traffic Strategy", + "admin_settings_field_referral_one_bonus_per_referee_label": "Referral One Bonus Per Referee", + "admin_settings_field_referral_welcome_bonus_days_label": "Referral Welcome Bonus Days", + "admin_settings_field_legacy_refs_label": "Legacy Refs", + "admin_settings_field_referral_bonus_days_inviter_1_month_label": "Referral Bonus Days Inviter 1 Month", + "admin_settings_field_referral_bonus_days_inviter_3_months_label": "Referral Bonus Days Inviter 3 Months", + "admin_settings_field_referral_bonus_days_inviter_6_months_label": "Referral Bonus Days Inviter 6 Months", + "admin_settings_field_referral_bonus_days_inviter_12_months_label": "Referral Bonus Days Inviter 12 Months", + "admin_settings_field_referral_bonus_days_referee_1_month_label": "Referral Bonus Days Referee 1 Month", + "admin_settings_field_referral_bonus_days_referee_3_months_label": "Referral Bonus Days Referee 3 Months", + "admin_settings_field_referral_bonus_days_referee_6_months_label": "Referral Bonus Days Referee 6 Months", + "admin_settings_field_referral_bonus_days_referee_12_months_label": "Referral Bonus Days Referee 12 Months", + "admin_settings_field_subscription_notifications_enabled_label": "Subscription Notifications Enabled", + "admin_settings_field_subscription_notify_on_expire_label": "Subscription Notify On Expire", + "admin_settings_field_subscription_notify_after_expire_label": "Subscription Notify After Expire", + "admin_settings_field_subscription_notify_days_before_label": "Subscription Notify Days Before", + "admin_settings_field_log_new_users_label": "Log New Users", + "admin_settings_field_log_payments_label": "Log Payments", + "admin_settings_field_log_promo_activations_label": "Log Promo Activations", + "admin_settings_field_log_trial_activations_label": "Log Trial Activations", + "admin_settings_field_log_suspicious_activity_label": "Log Suspicious Activity", + "admin_settings_field_log_level_label": "Log Level", + "admin_settings_field_log_level_description": "Controls the 'Log Level' setting in admin overrides.", + "admin_settings_field_log_chat_id_label": "Log Chat ID", + "admin_settings_field_log_thread_id_label": "Log Thread ID", + "admin_settings_field_my_devices_section_enabled_label": "My Devices Section Enabled", + "admin_settings_field_user_hwid_device_limit_label": "User HWID Device Limit", + "admin_settings_field_user_traffic_limit_gb_label": "User Traffic Limit Gb", + "admin_settings_field_user_traffic_strategy_label": "User Traffic Strategy" } diff --git a/locales/ru.json b/locales/ru.json index e9e7750..aee7f56 100644 --- a/locales/ru.json +++ b/locales/ru.json @@ -113,7 +113,7 @@ "referral_bonus_inviter_notification_extended": "🎉 Поздравляем! Ваш друг {referee_name} оплатил подписку. Вам начислено {days} бонусных дней! Ваша подписка теперь активна до {new_end_date}.", "referral_bonus_inviter_notification_new_sub": "🎉 Поздравляем! Ваш друг {referee_name} оплатил подписку. Вам начислена бонусная подписка на {days} дней! Она активна до {new_end_date}.", "user_is_banned": "🚫 Ваш аккаунт заблокирован. Пожалуйста, свяжитесь со службой поддержки.", - "admin_panel_title": "Панель администратора", + "admin_panel_title": "Админ-панель", "admin_stats_button": "📊 Статистика", "admin_broadcast_button": "📢 Рассылка", "admin_create_promo_button": "🎁 Создать промо", @@ -508,7 +508,7 @@ "status_inactive": "Неактивна", "admin_ads_section": "📈 Реклама", "admin_ads_header": "📈 Рекламные кампании:", - "admin_ads_empty": "📭 Рекламные кампании отсутствуют. Нажмите \"Создать\" чтобы добавить новую.", + "admin_ads_empty": "Кампаний нет", "admin_ads_item": "ID: {id}\nИсточник: {source}\nstart={start_param}\nСтоимость: {cost} RUB\nАктивна: {active}\n— Запустили: {starts}\n— Взяли триал: {trials}\n— Оплатили: {payers}\n— Доход: {revenue} RUB", "admin_ads_create_button": "➕ Создать кампанию", "admin_ads_create_source_prompt": "Введите источник (например: AEZA, VK, TG-канал):", @@ -791,7 +791,7 @@ "wa_hwid_devices_package": "+{count} устройств", "wa_no_hwid_device_options": "Нет доступных пакетов устройств", "wa_device_topup_options_failed": "Не удалось загрузить пакеты устройств", - "admin_nav_overview": "Overview", + "admin_nav_overview": "Обзор", "admin_nav_dashboard": "Дашборд", "admin_nav_operations": "Управление", "admin_nav_users": "Пользователи", @@ -807,7 +807,7 @@ "admin_section_stats_title": "Дашборд", "admin_section_stats_subtitle": "Аудитория, доходы, панель Remnawave и последние платежи", "admin_section_users_title": "Пользователи", - "admin_section_users_subtitle": "Поиск, баны, действия над аккаунтами", + "admin_section_users_subtitle": "Поиск, баны и действия над аккаунтами", "admin_section_payments_title": "Платежи", "admin_section_payments_subtitle": "История транзакций и экспорт", "admin_section_promos_title": "Промокоды", @@ -1035,7 +1035,6 @@ "admin_btn_delete": "Удалить", "admin_promos_empty": "Промокодов нет", "admin_btn_create": "Создать", - "admin_ads_empty": "Кампаний нет", "admin_btn_campaign": "Кампания", "admin_btn_tariff": "Тариф", "admin_btn_sync": "Синхронизировать", @@ -1046,38 +1045,6 @@ "admin_btn_disable": "Выкл", "admin_btn_show_more": "Показать еще", "admin_settings_dirty_count": "Изменений: {count}", - "admin_nav_overview": "Обзор", - "admin_nav_dashboard": "Дашборд", - "admin_nav_operations": "Управление", - "admin_nav_users": "Пользователи", - "admin_nav_payments": "Платежи", - "admin_nav_promos": "Промокоды", - "admin_nav_ads": "Реклама", - "admin_nav_communication": "Коммуникации", - "admin_nav_broadcast": "Рассылка", - "admin_nav_logs": "Логи", - "admin_nav_system": "Система", - "admin_nav_tariffs": "Тарифы", - "admin_nav_settings": "Настройки", - "admin_section_stats_title": "Дашборд", - "admin_section_stats_subtitle": "Аудитория, доходы, панель Remnawave и последние платежи", - "admin_section_users_title": "Пользователи", - "admin_section_users_subtitle": "Поиск, баны и действия над аккаунтами", - "admin_section_payments_title": "Платежи", - "admin_section_payments_subtitle": "История транзакций и экспорт", - "admin_section_promos_title": "Промокоды", - "admin_section_promos_subtitle": "Создание и управление кодами", - "admin_section_ads_title": "Рекламные кампании", - "admin_section_ads_subtitle": "UTM-источники и атрибуция", - "admin_section_broadcast_title": "Рассылка", - "admin_section_broadcast_subtitle": "Массовая отправка сообщений в Telegram", - "admin_section_logs_title": "Логи активности", - "admin_section_logs_subtitle": "События пользователей и админ-действия", - "admin_section_tariffs_title": "Тарифы", - "admin_section_tariffs_subtitle": "Каталог продаж, периоды, пакеты и лимиты", - "admin_section_settings_title": "Настройки приложения", - "admin_section_settings_subtitle": "Оверрайды над .env, применяются мгновенно", - "admin_panel_title": "Админ-панель", "admin_promo_col_code": "Код", "admin_promo_col_bonus": "Бонус", "admin_promo_col_activations": "Активаций", @@ -1143,5 +1110,122 @@ "admin_broadcast_started": "Рассылка запущена", "admin_broadcast_failed": "Ошибка рассылки", "admin_user_short": "Пользователь", - "admin_target_short": "Цель" + "admin_target_short": "Цель", + "admin_settings_field_default_language_label": "Язык по умолчанию", + "admin_settings_field_default_language_description": "Используется для приветственных сообщений и публичных страниц.", + "admin_settings_field_default_currency_symbol_label": "Валюта", + "admin_settings_field_default_currency_symbol_description": "Например, RUB, USD, EUR.", + "admin_settings_field_support_link_label": "Ссылка поддержки", + "admin_settings_field_support_link_description": "Куда вести пользователей за помощью.", + "admin_settings_field_server_status_url_label": "Ссылка на статус серверов", + "admin_settings_field_terms_of_service_url_label": "Условия использования", + "admin_settings_field_privacy_policy_url_label": "Политика конфиденциальности", + "admin_settings_field_user_agreement_url_label": "Пользовательское соглашение", + "admin_settings_field_disable_welcome_message_label": "Скрыть приветствие /start", + "admin_settings_field_start_command_description_label": "Описание /start", + "admin_settings_field_required_channel_id_label": "ID обязательного канала", + "admin_settings_field_required_channel_id_description": "Telegram ID канала, в котором нужно состоять.", + "admin_settings_field_required_channel_link_label": "Ссылка на канал", + "admin_settings_field_required_channel_link_description": "Имя пользователя или invite-link.", + "admin_settings_field_webapp_title_label": "Название Web App", + "admin_settings_field_webapp_primary_color_label": "Основной цвет", + "admin_settings_field_webapp_logo_url_label": "URL логотипа", + "admin_settings_field_webapp_logo_emoji_label": "Эмоджи-логотип", + "admin_settings_field_webapp_enabled_label": "Web App включён", + "admin_settings_field_month_1_enabled_label": "Тариф 1 месяц", + "admin_settings_field_month_3_enabled_label": "Тариф 3 месяца", + "admin_settings_field_month_6_enabled_label": "Тариф 6 месяцев", + "admin_settings_field_month_12_enabled_label": "Тариф 12 месяцев", + "admin_settings_field_rub_price_1_month_label": "Цена 1 мес. (RUB)", + "admin_settings_field_rub_price_3_months_label": "Цена 3 мес. (RUB)", + "admin_settings_field_rub_price_6_months_label": "Цена 6 мес. (RUB)", + "admin_settings_field_rub_price_12_months_label": "Цена 12 мес. (RUB)", + "admin_settings_field_stars_price_1_month_label": "Цена 1 мес. (Stars)", + "admin_settings_field_stars_price_3_months_label": "Цена 3 мес. (Stars)", + "admin_settings_field_stars_price_6_months_label": "Цена 6 мес. (Stars)", + "admin_settings_field_stars_price_12_months_label": "Цена 12 мес. (Stars)", + "admin_settings_field_traffic_packages_label": "Пакеты трафика", + "admin_settings_field_traffic_packages_description": "Формат: 10:199,50:799 (ГБ:цена)", + "admin_settings_field_stars_traffic_packages_label": "Пакеты трафика (Stars)", + "admin_settings_field_payment_methods_order_label": "Порядок методов оплаты", + "admin_settings_field_payment_methods_order_description": "Через запятую, например: severpay,freekassa,yookassa", + "admin_settings_field_stars_enabled_label": "Telegram Stars", + "admin_settings_field_yookassa_enabled_label": "Включена", + "admin_settings_field_yookassa_shop_id_label": "Shop ID", + "admin_settings_field_yookassa_secret_key_label": "Secret key", + "admin_settings_field_yookassa_return_url_label": "Return URL", + "admin_settings_field_yookassa_default_receipt_email_label": "Email для чека по умолчанию", + "admin_settings_field_yookassa_vat_code_label": "VAT code", + "admin_settings_field_yookassa_vat_code_description": "1..6 в зависимости от системы налогообложения", + "admin_settings_field_yookassa_autopayments_enabled_label": "Автоплатежи (recurring)", + "admin_settings_field_yookassa_autopayments_require_card_binding_label": "Принудительная привязка карты", + "admin_settings_field_freekassa_enabled_label": "Включена", + "admin_settings_field_freekassa_merchant_id_label": "Merchant ID", + "admin_settings_field_freekassa_first_secret_label": "First secret", + "admin_settings_field_freekassa_second_secret_label": "Second secret", + "admin_settings_field_freekassa_second_secret_description": "Используется для проверки подписи входящих уведомлений", + "admin_settings_field_freekassa_api_key_label": "API key", + "admin_settings_field_freekassa_payment_url_label": "Payment URL", + "admin_settings_field_freekassa_payment_method_id_label": "Метод оплаты по умолчанию", + "admin_settings_field_freekassa_payment_ip_label": "IP сервера", + "admin_settings_field_freekassa_payment_ip_description": "Передаётся в подпись запроса при создании платежа", + "admin_settings_field_freekassa_trusted_ips_label": "Доверенные IP", + "admin_settings_field_freekassa_trusted_ips_description": "Через запятую — IP-адреса, с которых принимаются нотификации", + "admin_settings_field_platega_enabled_label": "Включена", + "admin_settings_field_platega_base_url_label": "Base URL", + "admin_settings_field_platega_merchant_id_label": "Merchant ID", + "admin_settings_field_platega_secret_label": "Secret", + "admin_settings_field_platega_payment_method_label": "Метод оплаты (legacy)", + "admin_settings_field_platega_sbp_enabled_label": "SBP-кнопка", + "admin_settings_field_platega_sbp_method_label": "SBP method ID", + "admin_settings_field_platega_crypto_enabled_label": "Crypto-кнопка", + "admin_settings_field_platega_crypto_method_label": "Crypto method ID", + "admin_settings_field_platega_return_url_label": "Return URL", + "admin_settings_field_platega_failed_url_label": "Failed URL", + "admin_settings_field_severpay_enabled_label": "Включена", + "admin_settings_field_severpay_mid_label": "MID", + "admin_settings_field_severpay_token_label": "Token", + "admin_settings_field_severpay_base_url_label": "Base URL", + "admin_settings_field_severpay_return_url_label": "Return URL", + "admin_settings_field_severpay_lifetime_minutes_label": "Срок жизни ссылки (мин)", + "admin_settings_field_severpay_lifetime_minutes_description": "30..4320; пусто — значение провайдера", + "admin_settings_field_cryptopay_enabled_label": "Включена", + "admin_settings_field_cryptopay_token_label": "Token", + "admin_settings_field_cryptopay_network_label": "Network", + "admin_settings_field_cryptopay_network_description": "mainnet или testnet", + "admin_settings_field_cryptopay_currency_type_label": "Currency type", + "admin_settings_field_cryptopay_currency_type_description": "fiat или crypto", + "admin_settings_field_cryptopay_asset_label": "Asset", + "admin_settings_field_trial_enabled_label": "Триал включён", + "admin_settings_field_trial_duration_days_label": "Длительность триала (дней)", + "admin_settings_field_trial_traffic_limit_gb_label": "Лимит трафика триала (ГБ)", + "admin_settings_field_trial_traffic_strategy_label": "Стратегия сброса трафика триала", + "admin_settings_field_referral_one_bonus_per_referee_label": "Один бонус на приглашённого", + "admin_settings_field_referral_welcome_bonus_days_label": "Приветственный бонус (дней)", + "admin_settings_field_legacy_refs_label": "Поддержка старых ref-ссылок", + "admin_settings_field_referral_bonus_days_inviter_1_month_label": "Бонус приглашающему: 1 мес.", + "admin_settings_field_referral_bonus_days_inviter_3_months_label": "Бонус приглашающему: 3 мес.", + "admin_settings_field_referral_bonus_days_inviter_6_months_label": "Бонус приглашающему: 6 мес.", + "admin_settings_field_referral_bonus_days_inviter_12_months_label": "Бонус приглашающему: 12 мес.", + "admin_settings_field_referral_bonus_days_referee_1_month_label": "Бонус приглашённому: 1 мес.", + "admin_settings_field_referral_bonus_days_referee_3_months_label": "Бонус приглашённому: 3 мес.", + "admin_settings_field_referral_bonus_days_referee_6_months_label": "Бонус приглашённому: 6 мес.", + "admin_settings_field_referral_bonus_days_referee_12_months_label": "Бонус приглашённому: 12 мес.", + "admin_settings_field_subscription_notifications_enabled_label": "Включены уведомления о подписке", + "admin_settings_field_subscription_notify_on_expire_label": "Уведомлять об истечении", + "admin_settings_field_subscription_notify_after_expire_label": "Уведомлять после истечения", + "admin_settings_field_subscription_notify_days_before_label": "За сколько дней предупреждать", + "admin_settings_field_log_new_users_label": "Логировать новых пользователей", + "admin_settings_field_log_payments_label": "Логировать платежи", + "admin_settings_field_log_promo_activations_label": "Логировать активации промокодов", + "admin_settings_field_log_trial_activations_label": "Логировать активации триала", + "admin_settings_field_log_suspicious_activity_label": "Логировать подозрительные действия", + "admin_settings_field_log_level_label": "Глобальный уровень логов", + "admin_settings_field_log_level_description": "DEBUG / INFO / WARNING / ERROR", + "admin_settings_field_log_chat_id_label": "ID чата для логов", + "admin_settings_field_log_thread_id_label": "ID треда (для супергрупп)", + "admin_settings_field_my_devices_section_enabled_label": "Раздел «Мои устройства»", + "admin_settings_field_user_hwid_device_limit_label": "Лимит устройств по умолчанию (0 = ∞)", + "admin_settings_field_user_traffic_limit_gb_label": "Лимит трафика пользователя (ГБ)", + "admin_settings_field_user_traffic_strategy_label": "Стратегия сброса трафика" }