Merge origin/dev into feature/telegram-flood-hardening

This commit is contained in:
3252a8
2026-06-10 16:49:53 +03:00
139 changed files with 6227 additions and 535 deletions
+32 -1
View File
@@ -1024,6 +1024,30 @@
"admin_section_backups_subtitle": "Archives, uploads, and database/compose restore",
"admin_section_settings_title": "App Settings",
"admin_section_settings_subtitle": "Overrides for .env, applied instantly",
"admin_health_title": "Configuration issues",
"admin_health_refresh": "Check again",
"admin_health_data_dir_missing": "Data directory ({path}) not found. Make sure the data volume is mounted into the container.",
"admin_health_data_dir_not_writable": "No write access to {path} — backups, tariffs, logos and translations cannot be saved.",
"admin_health_backups_dir_not_writable": "Backups directory {path} is not writable.",
"admin_health_tariffs_config_invalid": "Tariffs file {path} cannot be read: {error}",
"admin_health_locale_overrides_invalid": "Translations file {path} is corrupted: {error}",
"admin_health_subscription_page_config_invalid": "Subscription guides config cannot be read: {error}",
"admin_health_provider_not_configured": "Provider {provider} is enabled but not configured — payments through it will not work.",
"admin_health_provider_webhook_needs_base_url": "Provider {provider} requires WEBHOOK_BASE_URL for webhooks, but it is not set.",
"admin_health_no_payment_methods": "No payment method is enabled.",
"admin_health_mini_app_url_missing": "SUBSCRIPTION_MINI_APP_URL is not set — the Mini App button will not appear in the bot.",
"admin_health_mini_app_url_not_https": "SUBSCRIPTION_MINI_APP_URL must start with https:// (currently {url}).",
"admin_health_redis_not_configured": "REDIS_URL is not set — bot dialog states and caches will not survive a restart.",
"admin_health_smtp_incomplete": "SMTP is partially configured — email login will not work.",
"admin_health_proxy_not_trusted": "Requests arrive through proxy {remote} which is not in TRUSTED_PROXIES — payment provider webhooks may be rejected by IP.",
"admin_health_bot_token_invalid": "Telegram rejected BOT_TOKEN — the bot is not working.",
"admin_health_telegram_api_error": "Failed to reach the Telegram API: {error}",
"admin_health_telegram_webhook_missing": "Telegram webhook is not set — the bot does not receive updates.",
"admin_health_telegram_webhook_mismatch": "Telegram webhook points to {actual}, expected {expected}.",
"admin_health_telegram_webhook_error": "Telegram reports a webhook delivery error: {error}",
"admin_health_telegram_webhook_pending": "{count} unprocessed updates are queued in Telegram.",
"admin_health_panel_api_not_configured": "PANEL_API_URL and PANEL_API_KEY are not set — sync and subscription provisioning do not work.",
"admin_health_panel_api_unreachable": "Remnawave panel is unreachable at {url}.",
"admin_backups_load_failed": "Failed to load backups",
"admin_backups_upload_done": "Archive uploaded",
"admin_backups_upload_failed": "Failed to upload archive",
@@ -1154,7 +1178,7 @@
"admin_settings_section_system": "System",
"admin_settings_section_migrations": "Migrations",
"admin_settings_field_telemetry_enabled_label": "Anonymous install analytics",
"admin_settings_field_telemetry_enabled_description": "Sends one anonymous heartbeat per day (version, OS, locale, user-count range). No personal data, tokens or domains. Helps gauge how many installs are active and which versions are in use. Toggling this off takes effect without a restart.",
"admin_settings_field_telemetry_enabled_description": "Sends one anonymous heartbeat per day (version, official/custom image marker, OS, locale, user-count range). No personal data, tokens or domains. Helps gauge active installs, versions in use and the share of modified builds. Toggling this off takes effect without a restart.",
"admin_settings_field_telegram_drop_non_private_updates_label": "Drop non-private Telegram updates",
"admin_settings_field_telegram_drop_non_private_updates_description": "Drops group and channel messages/callbacks before database-backed middleware runs. Keep enabled for a private sales bot.",
"admin_settings_field_telegram_antiflood_enabled_label": "Telegram anti-flood enabled",
@@ -1195,6 +1219,7 @@
"admin_settings_subsection_cryptopay": "CryptoPay",
"admin_settings_subsection_wata": "Wata",
"admin_settings_subsection_heleket": "Heleket",
"admin_settings_subsection_paykilla": "PayKilla",
"admin_settings_provider_webhook_url": "Webhook URL",
"admin_settings_provider_webhook_url_hint": "Use this URL in the provider webhook settings.",
"admin_settings_panel_webhook_url_hint": "Use this URL as WEBHOOK_URL in Remnawave Panel.",
@@ -1225,6 +1250,7 @@
"admin_broadcast_target_active": "With subscription",
"admin_broadcast_target_inactive": "No subscription",
"admin_broadcast_target_expired": "Expired subscription",
"admin_broadcast_target_active_never_connected": "With subscription, no VPN connections",
"admin_broadcast_target_never": "No subscription, no history",
"admin_expired_at": "Expired {date}",
"admin_expired_badge": "Expired {date}",
@@ -1357,6 +1383,9 @@
"admin_user_label_logs": "Logs",
"admin_user_section_profile": "Profile",
"admin_user_label_registration": "Registration",
"admin_user_label_vpn_last_connected": "Last VPN connection",
"admin_user_vpn_never_connected": "Never",
"admin_user_vpn_connected_no_time": "Connected, time unknown",
"admin_user_label_ref_code": "Referral Code",
"admin_user_label_invited_by": "Invited by",
"admin_user_label_invited_users": "Invited users",
@@ -1701,6 +1730,8 @@
"admin_settings_field_subscription_purchase_description_ru_description": "Russian text shown during checkout.",
"admin_settings_field_subscription_purchase_description_en_label": "Subscription description (EN)",
"admin_settings_field_subscription_purchase_description_en_description": "English text shown during checkout.",
"admin_settings_field_payment_request_timeout_seconds_label": "Payment provider request timeout",
"admin_settings_field_payment_request_timeout_seconds_description": "Maximum total time for one payment provider API request, in seconds.",
"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",
+32 -1
View File
@@ -1024,6 +1024,30 @@
"admin_section_backups_subtitle": "Архивы, загрузка и восстановление БД/compose",
"admin_section_settings_title": "Настройки приложения",
"admin_section_settings_subtitle": "Оверрайды над .env, применяются мгновенно",
"admin_health_title": "Проблемы конфигурации",
"admin_health_refresh": "Проверить снова",
"admin_health_data_dir_missing": "Каталог data ({path}) не найден. Проверьте, что том data смонтирован в контейнер.",
"admin_health_data_dir_not_writable": "Нет прав на запись в {path} — бэкапы, тарифы, логотипы и переводы не сохранятся.",
"admin_health_backups_dir_not_writable": "Каталог бэкапов {path} недоступен для записи.",
"admin_health_tariffs_config_invalid": "Файл тарифов {path} не читается: {error}",
"admin_health_locale_overrides_invalid": "Файл переводов {path} повреждён: {error}",
"admin_health_subscription_page_config_invalid": "Конфиг гайдов подписки не читается: {error}",
"admin_health_provider_not_configured": "Провайдер {provider} включён, но не настроен — оплата через него не работает.",
"admin_health_provider_webhook_needs_base_url": "Провайдеру {provider} нужен WEBHOOK_BASE_URL для приёма вебхуков, а он не задан.",
"admin_health_no_payment_methods": "Не включён ни один способ оплаты.",
"admin_health_mini_app_url_missing": "SUBSCRIPTION_MINI_APP_URL не задан — кнопка Mini App в боте не появится.",
"admin_health_mini_app_url_not_https": "SUBSCRIPTION_MINI_APP_URL должен начинаться с https:// (сейчас {url}).",
"admin_health_redis_not_configured": "REDIS_URL не задан — состояния диалогов бота и кэш не переживут перезапуск.",
"admin_health_smtp_incomplete": "SMTP настроен не полностью — вход по email работать не будет.",
"admin_health_proxy_not_trusted": "Запросы приходят через прокси {remote}, которого нет в TRUSTED_PROXIES — вебхуки платёжных провайдеров могут отклоняться по IP.",
"admin_health_bot_token_invalid": "Telegram отверг BOT_TOKEN — бот не работает.",
"admin_health_telegram_api_error": "Не удалось обратиться к Telegram API: {error}",
"admin_health_telegram_webhook_missing": "Вебхук Telegram не установлен — бот не получает обновления.",
"admin_health_telegram_webhook_mismatch": "Вебхук Telegram указывает на {actual}, ожидается {expected}.",
"admin_health_telegram_webhook_error": "Telegram сообщает об ошибке доставки вебхука: {error}",
"admin_health_telegram_webhook_pending": "В очереди Telegram скопилось {count} необработанных обновлений.",
"admin_health_panel_api_not_configured": "PANEL_API_URL и PANEL_API_KEY не заданы — синхронизация и выдача подписок не работают.",
"admin_health_panel_api_unreachable": "Панель Remnawave недоступна по адресу {url}.",
"admin_backups_load_failed": "Не удалось загрузить бэкапы",
"admin_backups_upload_done": "Архив загружен",
"admin_backups_upload_failed": "Не удалось загрузить архив",
@@ -1154,7 +1178,7 @@
"admin_settings_section_system": "Система",
"admin_settings_section_migrations": "Миграции",
"admin_settings_field_telemetry_enabled_label": "Анонимная статистика установки",
"admin_settings_field_telemetry_enabled_description": "Раз в сутки отправляет обезличенный сигнал: версия, ОС, локаль и число пользователей в виде диапазона. Без персональных данных, токенов и доменов. Помогает оценить число активных установок и используемые версии. Отключение применяется без перезапуска.",
"admin_settings_field_telemetry_enabled_description": "Раз в сутки отправляет обезличенный сигнал: версия, маркер образа official/custom, ОС, локаль и число пользователей в виде диапазона. Без персональных данных, токенов и доменов. Помогает оценить число активных установок, используемые версии и долю изменённых сборок. Отключение применяется без перезапуска.",
"admin_settings_field_telegram_drop_non_private_updates_label": "Отбрасывать неприватные чаты",
"admin_settings_field_telegram_drop_non_private_updates_description": "Отбрасывает сообщения и нажатия кнопок из групп и каналов до middleware, которые ходят в базу. Для приватного продающего бота лучше держать включенным.",
"admin_settings_field_telegram_antiflood_enabled_label": "Антифлуд Telegram включен",
@@ -1195,6 +1219,7 @@
"admin_settings_subsection_cryptopay": "CryptoPay",
"admin_settings_subsection_wata": "Wata",
"admin_settings_subsection_heleket": "Heleket",
"admin_settings_subsection_paykilla": "PayKilla",
"admin_settings_provider_webhook_url": "Webhook URL",
"admin_settings_provider_webhook_url_hint": "Укажите этот адрес в настройках вебхуков провайдера.",
"admin_settings_panel_webhook_url_hint": "Укажите этот адрес как WEBHOOK_URL в Remnawave Panel.",
@@ -1225,6 +1250,7 @@
"admin_broadcast_target_active": "С подпиской",
"admin_broadcast_target_inactive": "Без подписки",
"admin_broadcast_target_expired": "С просроченной подпиской",
"admin_broadcast_target_active_never_connected": "С подпиской, но без VPN-подключений",
"admin_broadcast_target_never": "Без подписки и без истории",
"admin_expired_at": "Истекла {date}",
"admin_expired_badge": "Expired {date}",
@@ -1357,6 +1383,9 @@
"admin_user_label_logs": "Логов",
"admin_user_section_profile": "Профиль",
"admin_user_label_registration": "Регистрация",
"admin_user_label_vpn_last_connected": "Последнее VPN-подключение",
"admin_user_vpn_never_connected": "Никогда",
"admin_user_vpn_connected_no_time": "Подключался, время неизвестно",
"admin_user_label_ref_code": "Реф. код",
"admin_user_label_invited_by": "Пригласил",
"admin_user_label_invited_users": "Приглашённые",
@@ -1701,6 +1730,8 @@
"admin_settings_field_subscription_purchase_description_ru_description": "Русская версия текста на этапе оплаты.",
"admin_settings_field_subscription_purchase_description_en_label": "Описание подписки (EN)",
"admin_settings_field_subscription_purchase_description_en_description": "Английская версия текста на этапе оплаты.",
"admin_settings_field_payment_request_timeout_seconds_label": "Таймаут запроса к провайдеру",
"admin_settings_field_payment_request_timeout_seconds_description": "Максимальное общее время одного API-запроса к платёжному провайдеру, в секундах.",
"admin_settings_field_stars_enabled_label": "Telegram Stars",
"admin_settings_field_yookassa_enabled_label": "Включена",
"admin_settings_field_yookassa_shop_id_label": "Shop ID",