Add RU/EN admin locale strings for the LAVA settings subsection and field labels, regenerate the demo settings manifest snapshot, and list LAVA among the demo dataset payment methods.
2272 lines
161 KiB
JSON
2272 lines
161 KiB
JSON
{
|
||
"welcome": "Welcome, {user_name}!",
|
||
"channel_subscription_required": "To use the bot, join the channel and tap \"Check subscription\".",
|
||
"channel_subscription_join_button": "Open channel",
|
||
"channel_subscription_verify_button": "Check subscription",
|
||
"channel_subscription_check_failed": "Couldn't verify the subscription. Please try again later or contact support.",
|
||
"channel_subscription_verified_success": "✅ Subscription confirmed! You're good to go.",
|
||
"webapp_auth_success": "✅ Login confirmed. Return to the Web App.",
|
||
"webapp_auth_expired": "The login link has expired. Return to the Web App and try again.",
|
||
"telegram_notifications_enabled_message": "✅ Telegram notifications are enabled.",
|
||
"telegram_notifications_open_app_button": "Open account",
|
||
"telegram_notifications_started": "✅ Notifications are enabled. The bot can now send important messages.",
|
||
"main_menu_greeting": "Hi, {user_name}! 👋\nOpen \"Personal Account\" to set up the connection, view your subscription, or renew access.",
|
||
"menu_activate_trial_button": "🆓 Free Trial",
|
||
"menu_subscribe_inline": "🚀 Purchase",
|
||
"menu_personal_account_button": "🔑 Personal Account",
|
||
"menu_bot_interface_button": "🤖 Bot menu",
|
||
"menu_my_subscription_inline": "🔐 My Subscription",
|
||
"no_subscription_options_available": "Subscription issuance is not configured by the bot administrator",
|
||
"menu_referral_inline": "🎁 Invite friend",
|
||
"referral_no_bonuses_configured": "Sorry, the referral program is currently disabled",
|
||
"menu_apply_promo_button": "🎟 Promo Code",
|
||
"menu_language_settings_inline": "🌐 Language",
|
||
"menu_server_status_button": "📊 Status",
|
||
"menu_support_button": "💬 Admin contact",
|
||
"menu_info_button": "ℹ️ Information",
|
||
"bot_interface_menu_title": "Bot interface",
|
||
"bot_interface_menu_webapp_hint": "The Personal Account is the easier place to manage the service.",
|
||
"info_links_message": "Choose a document:",
|
||
"privacy_policy_button": "🔒 Privacy Policy",
|
||
"user_agreement_button": "📄 User Agreement",
|
||
"back_to_main_menu_button": "⬅️ Back",
|
||
"choose_language": "Choose language:",
|
||
"language_set_alert": "Language changed!",
|
||
"error_occurred_try_again": "An error occurred, please try again.",
|
||
"error_try_again": "Please try again.",
|
||
"error_displaying_menu": "Error displaying menu.",
|
||
"main_menu_unknown_action": "Unknown action.",
|
||
"select_subscription_period": "Select subscription period:",
|
||
"select_traffic_package": "Select a traffic package:",
|
||
"subscribe_for_months_button": "{months} mo. - {price} {currency_symbol}",
|
||
"buy_traffic_package_button": "{traffic_gb} GB - {price} {currency_symbol}",
|
||
"choose_payment_method": "Choose payment method:",
|
||
"choose_payment_method_traffic": "Choose how to pay for the traffic package:",
|
||
"pay_button": "💳 Pay",
|
||
"yookassa_autopay_flow_prompt": "Auto-renew is enabled. Choose how you'd like to pay:",
|
||
"yookassa_autopay_pay_saved_card_button": "💳 Pay with saved card",
|
||
"yookassa_autopay_pay_new_card_button": "➕ Pay with new card",
|
||
"yookassa_autopay_choose_saved_card": "Choose a saved card to charge:",
|
||
"yookassa_autopay_no_saved_cards": "No saved cards found. Pay with a new card or link one in Payment Methods.",
|
||
"yookassa_autopay_charge_initiated": "Charge request sent to the selected card. We'll notify you once the payment completes.",
|
||
"connect_button": "🔗 Connect",
|
||
"install_guide_share_button": "🔗 Share install guide",
|
||
"install_guide_share_link_line": "\n\nInstall guide for sharing:\n<code>{install_share_link}</code>",
|
||
"cancel_button": "❌ Cancel",
|
||
"devices_button": "📱 My Devices ({current_devices}/{max_devices})",
|
||
"my_devices_details": "📱 <b>My Devices ({current_devices}/{max_devices})</b>\n\n{devices}\n\nYou can disconnect a device by selecting it from the list below.\n<blockquote><i>Note: If you disconnect a device, it will be automatically connected again when you use it next. Before deleting, make sure you have deleted the subscription from the application.</i></blockquote>",
|
||
"no_devices_details_found_message": "📱 <b>My Devices</b>\n\nYou don't have any devices yet.\nYou have {max_devices} devices available. You can connect them by clicking the \"🔗 Connect\" button in the subscription menu.",
|
||
"device_details": "{index}) <b>{device_model} ({platform} {os_version})</b>\nDate connected: <b>{created_at_str}</b>\nUser Agent: <b>{user_agent}</b>\nHWID: <code>{hwid}</code>",
|
||
"disconnect_device_button": "🚫 Disconnect {hwid} ({index})",
|
||
"device_disconnected": "Device disconnected successfully.",
|
||
"no_devices_found": "Error loading device list.",
|
||
"devices_unlimited_label": "Unlimited",
|
||
"my_devices_feature_disabled": "The My Devices section is currently unavailable.",
|
||
"payment_description_subscription": "Subscription payment for {months} mo.",
|
||
"payment_description_traffic": "Traffic package {traffic_gb} GB",
|
||
"payment_link_message": "To pay for {months} mo. subscription, click the button below:",
|
||
"payment_link_message_traffic": "To pay for a {traffic_gb} GB package, tap the button below:",
|
||
"free_kassa_order_info": "Order #{order_id} from {date}",
|
||
"payment_invoice_sent_message": "Telegram has sent the invoice above. Complete the payment or pick another method below.",
|
||
"payment_invoice_sent_message_traffic": "Invoice for {traffic_gb} GB sent above. Complete the payment or pick another method below.",
|
||
"payment_successful_error_details": "✅ Payment succeeded, but an error occurred displaying details. Your subscription is active. Contact support if anything is wrong.",
|
||
"payment_successful_full": "✅ Payment successful!\nYour {months}-month subscription is active until {end_date}.",
|
||
"payment_successful_traffic_full": "✅ Payment successful!\nYour {traffic_gb} GB package is active.\nValidity: {end_date}",
|
||
"payment_successful_hwid_devices_full": "✅ Payment successful!\nExtra HWID devices added: +{count}.",
|
||
"payment_successful_with_referral_bonus_full": "✅ Payment successful!\nYour {months}-month subscription (base end date: {base_end_date}) has been extended by {bonus_days} bonus days for referral from {inviter_name} and is now active until {final_end_date}.",
|
||
"payment_failed": "❌ Payment failed or was cancelled. Please try again or contact support.",
|
||
"config_link_not_available": "not available, contact support",
|
||
"traffic_unlimited": "Unlimited",
|
||
"traffic_period_day": "per day",
|
||
"traffic_period_week": "per week",
|
||
"traffic_period_month": "per month",
|
||
"traffic_period_no_reset": "no reset",
|
||
"traffic_used_with_period": "{traffic_used} ({traffic_period})",
|
||
"promo_code_prompt": "Please enter your promo code:",
|
||
"promo_code_not_found": "Promo code <code>{code}</code> not found, expired, or already used the maximum number of times.",
|
||
"promo_code_too_many_attempts": "Too many failed promo code attempts. Please try again in {seconds} sec.",
|
||
"promo_code_already_used_by_user": "You have already used promo code <code>{code}</code>.",
|
||
"promo_code_applied_success_full": "✅ Promo code applied successfully!\nSubscription active until {end_date}.\n\nConnection key:\n<code>{config_link}</code>\n\nTo connect, open the link and follow the instructions 👇",
|
||
"error_applying_promo_bonus": "Failed to apply promo bonus. Please try again later or contact support.",
|
||
"promo_input_cancelled_short": "Promo code entry cancelled.",
|
||
"trial_feature_disabled": "Free trial is currently unavailable.",
|
||
"trial_already_had_subscription_or_trial": "You have already used a free trial or had a paid subscription. Free trial is available only once for new users.",
|
||
"trial_confirm_activate_button": "✅ Activate!",
|
||
"trial_activated_alert": "Trial activated!",
|
||
"trial_activated_details_message": "✅ Trial activated!\nYour {days}-day trial is active until {end_date}.\n\nConnection key:\n<code>{config_link}</code>\n\nTo connect, open the link and follow the instructions 👇",
|
||
"referral_welcome_bonus_applied": "🎁 You have received {days} bonus day(s) for registering via a referral link!\nYour subscription is active until {end_date}.",
|
||
"yes_button": "Yes",
|
||
"no_button": "No",
|
||
"referral_program_info_new": "🎁 <b>Referral Program</b>\n\n📊 <b>Your stats:</b>\n👥 Friends invited: <b>{invited_count}</b>\n💳 Purchased subscription: <b>{purchased_count}</b>\n\n🔗 Telegram link:\n<code>{referral_link}</code>{webapp_link_section}\n\n💰 <b>Invitation bonuses:</b>\n{bonus_details}\n\n📢 Share the link with friends and get bonuses!",
|
||
"referral_bonus_per_period": "\n\n🎁 For a friend's {months}-month subscription:\n ➢ You: <b>{inviter_bonus_days} days</b>\n ➢ Friend: <b>{referee_bonus_days} days</b>",
|
||
"referral_bonus_days_range": "from {min_days} to {max_days} days",
|
||
"referral_bonus_tariff_range": "\n\n🎁 {tariff_name}:\n ➢ You: <b>{inviter_bonus_range}</b>\n ➢ Friend: <b>{referee_bonus_range}</b>",
|
||
"referral_not_available_for_traffic": "Referral bonuses are not available for traffic packages.",
|
||
"referral_share_message_button": "📩 Message for friend",
|
||
"referral_friend_message": "🚀 Hey! Try this service - it's fast, reliable and affordable!\n\n🎁 Use my link to get bonus days with your subscription!\n\n{referral_link}",
|
||
"referral_friend_message_with_webapp": "🚀 Hey! Try this service - it's fast, reliable and affordable!\n\n🎁 Use my link to get bonus days with your subscription!\n\nTelegram: {referral_link}\nWeb: {webapp_referral_link}",
|
||
"referral_webapp_link_line": "\n🌐 Web link:\n<code>{webapp_referral_link}</code>",
|
||
"friend_placeholder": "friend",
|
||
"referral_bonus_inviter_notification_extended": "🎉 Congrats! Your friend {referee_name} paid for a subscription. You received {days} bonus days! Your subscription is now active until {new_end_date}.",
|
||
"referral_bonus_inviter_notification_new_sub": "🎉 Congrats! Your friend {referee_name} paid for a subscription. You received a {days}-day bonus subscription! It is active until {new_end_date}.",
|
||
"user_is_banned": "🚫 Your account is banned. Please contact support.",
|
||
"admin_panel_title": "Admin Panel",
|
||
"admin_stats_button": "📊 Statistics",
|
||
"admin_broadcast_button": "📢 Broadcast",
|
||
"admin_create_promo_button": "🎁 Create Promo",
|
||
"admin_create_bulk_promo_button": "📦 Bulk Create",
|
||
"admin_ban_user_button": "🚫 Ban",
|
||
"admin_unban_user_button": "✅ Unban",
|
||
"admin_view_banned_users_button": "📜 Ban List",
|
||
"admin_view_logs_menu_button": "📄 Logs",
|
||
"admin_sync_panel_button": "🔄 Sync",
|
||
"admin_unknown_action": "Unknown admin action.",
|
||
"admin_stats_and_monitoring_section": "📊 Statistics",
|
||
"admin_user_management_section": "👥 Users",
|
||
"admin_promo_marketing_section": "🎁 Promos",
|
||
"admin_system_functions_section": "⚙️ System",
|
||
"admin_ban_management_section": "🚫 Bans",
|
||
"admin_users_search_button": "🔍 Search",
|
||
"admin_users_management_button": "👥 User List",
|
||
"admin_users_list_header": "👥 <b>User List</b>\n\nPage {current}/{total} ({total_users} users)",
|
||
"admin_user_back_to_list_button": "⬅️ Back to List",
|
||
"back_to_user_management_button": "⬅️ To Users",
|
||
"back_to_admin_panel_button": "⬅️ To Admin",
|
||
"admin_stats_header": "📊 Bot Statistics",
|
||
"admin_enhanced_users_stats_header": "Users",
|
||
"admin_financial_stats_header": "Financial Statistics",
|
||
"admin_stats_recent_payments_header": "Recent Payments:",
|
||
"admin_stats_payment_item": "{status_emoji} {amount} {currency} from {user_info} ({p_status}) [{p_date}]",
|
||
"admin_stats_no_payments_found": "No payments found yet.",
|
||
"admin_view_payments_button": "💰 Payments",
|
||
"admin_user_ratings_button": "🏆 User Ratings",
|
||
"back_to_stats_monitoring_button": "⬅️ To Statistics",
|
||
"admin_user_ratings_header": "🏆 <b>User Ratings (TOP {top_limit})</b>",
|
||
"admin_user_ratings_traffic_title": "📊 By used traffic",
|
||
"admin_user_ratings_traffic_month_title": "📊 By used traffic (month)",
|
||
"admin_user_ratings_traffic_lifetime_title": "📊 By used traffic (lifetime)",
|
||
"admin_user_ratings_invited_title": "👥 By invited users",
|
||
"admin_user_ratings_revenue_title": "💸 By referral revenue",
|
||
"admin_user_ratings_traffic_item": "{rank}. {user} — <b>{traffic_gb} GB</b>",
|
||
"admin_user_ratings_invited_item": "{rank}. {user} — <b>{invited_count}</b>",
|
||
"admin_user_ratings_revenue_item": "{rank}. {user} — <b>{revenue} RUB</b>",
|
||
"admin_user_ratings_empty": "No data yet.",
|
||
"admin_payments_header": "💰 <b>All Payments</b>",
|
||
"admin_no_payments_found": "No payments found.",
|
||
"admin_export_payments_csv": "📊 Export CSV",
|
||
"admin_refresh_payments": "🔄 Refresh",
|
||
"admin_no_payments_to_export": "No payments to export.",
|
||
"admin_payments_export_success": "📊 Payments export completed!\nTotal records: {count}",
|
||
"admin_export_sent": "File sent!",
|
||
"admin_csv_user_id": "User ID",
|
||
"admin_csv_username": "Username",
|
||
"admin_csv_first_name": "First Name",
|
||
"admin_csv_currency": "Currency",
|
||
"admin_csv_provider": "Provider",
|
||
"admin_csv_units": "Months/GB",
|
||
"admin_csv_months": "Months",
|
||
"admin_csv_created_at": "Created At",
|
||
"admin_csv_provider_payment_id": "Provider Payment ID",
|
||
"admin_stats_last_sync_header": "Last Panel Sync:",
|
||
"admin_stats_sync_time": "Time",
|
||
"admin_stats_sync_users_processed": "Users Processed",
|
||
"admin_stats_sync_subs_synced": "Subscriptions Synced",
|
||
"admin_stats_sync_details_label": "Details",
|
||
"admin_sync_status_never_run": "Panel sync never run.",
|
||
"admin_broadcast_enter_message": "Enter the broadcast message (HTML supported):",
|
||
"admin_broadcast_confirm_prompt_short": "The message above will be sent. Confirm?",
|
||
"broadcast_target_all_button": "👥 All",
|
||
"broadcast_target_active_button": "✅ Active",
|
||
"broadcast_target_inactive_button": "⌛ Inactive",
|
||
"broadcast_target_expired_button": "⏰ Expired",
|
||
"confirm_broadcast_send_button": "✅ Send",
|
||
"admin_broadcast_sending_started": "Starting broadcast...",
|
||
"admin_broadcast_error_no_message": "Error: no message to broadcast.",
|
||
"admin_broadcast_error_no_message_alert": "Broadcast message is empty!",
|
||
"admin_broadcast_cancelled": "Broadcast cancelled.",
|
||
"admin_broadcast_cancelled_alert": "Broadcast cancelled!",
|
||
"admin_broadcast_cancelled_nav_back": "Broadcast cancelled. You are returned to the admin panel.",
|
||
"broadcast_queue_result": "🚀 Broadcast queued!\n📤 Enqueued: {sent_count}\n❌ Errors: {failed_count}\n\n📊 Queue Status:\n👥 User queue: {user_queue_size} messages\n📢 Group queue: {group_queue_size} messages\n\nℹ️ Messages will be sent automatically within Telegram limits.",
|
||
"admin_promo_invalid_code_format": "Code must be 3–30 alphanumeric characters.",
|
||
"admin_promo_invalid_bonus_days": "Bonus days must be a positive number.",
|
||
"admin_promo_invalid_max_activations": "Max activations must be a positive number.",
|
||
"admin_promo_invalid_validity_days": "Validity period (in days) must be a positive number.",
|
||
"admin_promo_created_success": "✅ Promo code <code>{code}</code> created successfully!\nBonus: {bonus_days} days\nMax uses: {max_activations}\nValid until: {valid_until_str}.",
|
||
"admin_promo_set_validity_days": "⏰ Set validity (days)",
|
||
"admin_back_to_panel": "⬅️ Back to panel",
|
||
"admin_promo_unlimited": "♾️ Unlimited",
|
||
"admin_bulk_promo_created_title": "📦 Bulk creation completed",
|
||
"admin_bulk_promo_created_stats": "📊 Created: <b>{created}</b> of <b>{total}</b>",
|
||
"admin_bulk_promo_settings": "🎁 Bonus days: <b>{bonus_days}</b>\n📊 Max activations: <b>{max_activations}</b>\n⏰ Validity: <b>{validity}</b>",
|
||
"admin_promo_list_page_info": "Page {current}/{total} ({count} promo codes)",
|
||
"admin_queue_status_button": "📊 Queue Status",
|
||
"admin_queue_status_title": "📊 Message Queue Status",
|
||
"admin_queue_status_info": "📤 <b>Message Queues:</b>\n\n👥 <b>Users (25 msg/sec):</b>\n 📋 In queue: {user_queue_size}\n 🔄 Processing: {user_processing}\n 📈 Sent per minute: {user_recent}\n\n📢 <b>Groups/channels (15 msg/min):</b>\n 📋 In queue: {group_queue_size}\n 🔄 Processing: {group_processing}\n 📈 Sent per minute: {group_recent}",
|
||
"admin_active_promos_list_header": "Active Promo Codes:",
|
||
"admin_no_active_promos": "No active promo codes.",
|
||
"admin_promo_valid_indefinitely": "indefinite",
|
||
"admin_promo_edit_button": "✏️ Edit",
|
||
"admin_promo_delete_button": "🗑 Delete",
|
||
"admin_promo_deleted_success": "Promo {code} deleted.",
|
||
"admin_promo_not_found": "Promo not found.",
|
||
"admin_promo_export_csv_button": "📄 Export to CSV",
|
||
"admin_promo_export_caption": "📄 Activations for promo code {code}",
|
||
"admin_promo_export_all_generating": "📄 Generating CSV...",
|
||
"admin_promo_export_all_caption": "📄 Export of all promo codes\n📊 Total: {count} promo codes",
|
||
"admin_promo_csv_code": "Code",
|
||
"admin_promo_csv_bonus_days": "Bonus Days",
|
||
"admin_promo_csv_max_activations": "Max Activations",
|
||
"admin_promo_csv_current_activations": "Current Activations",
|
||
"admin_promo_csv_valid_until": "Valid Until",
|
||
"admin_promo_csv_created_at": "Created",
|
||
"admin_promo_csv_created_by_admin_id": "Created By (Admin ID)",
|
||
"admin_promo_edit_select_field": "Select a field to edit:",
|
||
"admin_promo_prompt_bonus_days": "Enter the new number of bonus days:",
|
||
"admin_promo_prompt_max_activations": "Enter the new maximum number of activations:",
|
||
"admin_promo_prompt_validity_days": "Enter the new validity period in days (0 for indefinite):",
|
||
"admin_promo_edit_success": "Promo code updated successfully.",
|
||
"admin_promo_invalid_input": "Invalid input, please try again.",
|
||
"admin_promo_edit_bonus_days": "🎁 Bonus Days",
|
||
"admin_promo_edit_max_activations": "🔢 Max Activations",
|
||
"admin_promo_edit_validity": "⏰ Validity",
|
||
"admin_ban_user_prompt": "Enter user ID, @username, or email to ban:",
|
||
"admin_user_already_banned": "User {user_id_or_username} is already banned.",
|
||
"admin_unban_user_prompt": "Enter user ID, @username, or email to unban:",
|
||
"admin_user_not_banned": "⚠️ User is not banned",
|
||
"admin_banned_user_button_text": "{user_display} (ID: {user_id})",
|
||
"prev_page_button": "⬅️ Prev.",
|
||
"next_page_button": "Next ➡️",
|
||
"admin_user_card_title": "User Card",
|
||
"user_card_ban_button": "🚫 Ban",
|
||
"user_card_unban_button": "✅ Unban",
|
||
"user_card_open_profile_button": "👤 Open profile",
|
||
"user_card_open_referrer_profile_button": "👤 Referrer profile",
|
||
"user_card_back_to_banned_list_button": "⬅️ Back to Ban List",
|
||
"admin_logs_menu_title": "Logs Menu:",
|
||
"admin_view_all_logs_button": "📜 All Message Logs",
|
||
"admin_view_user_logs_prompt_button": "👤 User Logs",
|
||
"admin_export_logs_csv_button": "📄 Export to CSV",
|
||
"admin_no_logs_found": "No logs found.",
|
||
"admin_log_entry_format": "<code>{timestamp_str}</code> - <b>{user_display}</b> (ID: {user_id})\n <i>{event_type}</i>: {content_preview}",
|
||
"admin_prompt_for_user_id_or_username_logs": "Enter user ID, @username, or email to view logs:",
|
||
"admin_log_user_not_found": "User \"{input}\" not found in bot database.",
|
||
"sync_started_simple": "🔄 Starting synchronization...",
|
||
"sync_success_simple": "✅ Synchronization completed successfully",
|
||
"sync_failed_simple": "❌ Synchronization failed",
|
||
"sync_errors_simple": "⚠️ Synchronization completed with errors ({errors_count} errors)",
|
||
"sync_critical_error": "❌ Critical synchronization error",
|
||
"admin_sync_initiated_from_panel": "Sync initiated...",
|
||
"admin_broadcast_invalid_html": "❌ Invalid HTML in message. Please send valid HTML (Telegram-supported tags) or remove tags.",
|
||
"error_displaying_logs_too_long": "Error: logs too long to display in one message. Try viewing logs for a specific user.",
|
||
"error_displaying_statistics": "Error displaying statistics.",
|
||
"subscription_72h_notification": "👋 Hi, {user_name}!\n\n⏳ Your service subscription expires in 3 days — {end_date}.\n\nPlease renew it using the button below.",
|
||
"subscription_48h_notification": "👋 Hi, {user_name}!\n\n⏳ Your service subscription expires in 2 days — {end_date}.\n\nPlease renew it using the button below.",
|
||
"subscription_24h_notification": "👋 Hi, {user_name}!\n\n⏳ Your service subscription expires in 1 day — {end_date}.\n\nPlease renew it using the button below.",
|
||
"subscription_hours_notification": "👋 Hi, {user_name}!\n\n⏳ Your service subscription expires in {hours} hours — {end_date}.\n\nPlease renew it using the button below.",
|
||
"subscription_expired_notification": "👋 Hi, {user_name}!\n\n⛔ Your service subscription expired on {end_date}.\n\nPlease renew it using the button below.",
|
||
"subscription_expired_yesterday_notification": "👋 Hi, {user_name}!\n\n⏳ Your service subscription expired yesterday ({end_date}).\n\nPlease renew it using the button below.",
|
||
"trial_traffic_depleted_notification": "⛔️ Trial traffic is used up.\n\n<b>Used:</b> {used}\n<b>Remaining:</b> {remaining}\n<b>Limit:</b> {limit_total}\n\nTo keep using the service, buy a subscription using the button below.",
|
||
"autorenew_48h_charge_tomorrow_notice": "🔔 Reminder\n\nTomorrow an automatic charge will occur to renew your subscription. If you don't want auto-renew, disable it using the button below.",
|
||
"autorenew_confirm_enable": "🔄 Enable auto-renew? An automatic charge will be attempted before your subscription ends.",
|
||
"autorenew_confirm_disable": "🛑 Disable auto-renew? No further automatic charges will occur.",
|
||
"yookassa_auto_renewal": "🔄 <b>Subscription Auto-Renewed</b>\n\nYour subscription was automatically renewed for {months} month(s).\nNew expiration date: {end_date}",
|
||
"admin_user_management_prompt": "👤 User Management\n\nEnter user ID, @username, or email to search:",
|
||
"admin_user_subscription_info": "Subscription Information:",
|
||
"admin_user_reset_trial_button": "🔄 Reset Trial",
|
||
"admin_user_add_subscription_button": "➕ Add Days",
|
||
"admin_user_toggle_ban_button": "🚫 Block/Unblock",
|
||
"admin_user_send_message_button": "✉️ Send Message",
|
||
"admin_user_view_logs_button": "📜 User Actions",
|
||
"admin_user_refresh_button": "🔄 Refresh",
|
||
"admin_user_delete_button": "❌ Delete User",
|
||
"admin_user_premium_override_button": "⭐ Premium override",
|
||
"admin_user_premium_override_label": "🌟 Premium override:",
|
||
"admin_user_premium_override_unlimited": "Unlimited",
|
||
"admin_user_premium_override_bonus_value": "+{gb} GB",
|
||
"admin_user_hwid_limit_button": "📱 HWID limit",
|
||
"admin_user_hwid_limit_label": "📱 HWID devices:",
|
||
"admin_premium_override_title": "🌟 Premium override",
|
||
"admin_premium_override_hint": "Grant free extra premium traffic or unlimited premium access for this user.",
|
||
"admin_premium_override_current": "Current: {current}",
|
||
"admin_premium_override_state_unlimited": "unlimited",
|
||
"admin_premium_override_state_bonus": "+{gb} GB bonus",
|
||
"admin_premium_override_state_none": "not set",
|
||
"admin_premium_override_btn_unlimited": "♾ Make unlimited",
|
||
"admin_premium_override_btn_bonus": "➕ Set bonus GB",
|
||
"admin_premium_override_btn_clear": "🗑 Clear override",
|
||
"admin_premium_override_no_subscription": "User has no active subscription",
|
||
"admin_premium_override_bonus_prompt": "Enter additional premium GB for user {user_id} (number, decimals allowed):",
|
||
"admin_premium_override_invalid_gb": "❌ Invalid value. Enter a non-negative number of GB.",
|
||
"admin_premium_override_state_missing": "⚠️ Target user missing in state. Open the user card again.",
|
||
"admin_premium_override_bonus_set": "✅ Premium override: +{gb} GB for user {user_id}",
|
||
"admin_premium_override_saved": "✅ Premium override saved",
|
||
"admin_premium_override_save_error": "❌ Failed to save premium override",
|
||
"admin_hwid_limit_title": "📱 HWID device limit",
|
||
"admin_hwid_limit_hint": "Set a manual base device limit for this user. 0 means unlimited; reset returns to the tariff or default limit.",
|
||
"admin_hwid_limit_current": "Current: {current}",
|
||
"admin_hwid_limit_state_default": "tariff / default",
|
||
"admin_hwid_limit_state_unlimited": "unlimited",
|
||
"admin_hwid_limit_state_count": "{count} devices",
|
||
"admin_hwid_limit_state_with_extra": "{total} devices ({base} + {extra})",
|
||
"admin_hwid_limit_btn_set_number": "🔢 Set number",
|
||
"admin_hwid_limit_btn_unlimited": "♾ Make unlimited",
|
||
"admin_hwid_limit_btn_reset": "↩️ Use tariff/default",
|
||
"admin_hwid_limit_prompt": "Enter the HWID device limit for user {user_id}. 0 means unlimited:",
|
||
"admin_hwid_limit_invalid": "❌ Enter an integer device count from 0 to 1,000,000.",
|
||
"admin_hwid_limit_no_subscription": "User has no active subscription",
|
||
"admin_hwid_limit_state_missing": "⚠️ Target user missing in state. Open the user card again.",
|
||
"admin_hwid_limit_set": "✅ HWID device limit for user {user_id}: {current}",
|
||
"admin_hwid_limit_saved": "✅ HWID device limit saved",
|
||
"admin_hwid_limit_save_error": "❌ Failed to save HWID device limit",
|
||
"admin_user_traffic_grant_button": "🎁 Grant GB",
|
||
"admin_traffic_grant_title": "🎁 Grant traffic",
|
||
"admin_traffic_grant_hint": "Credit GB to the user's balance — same effect as a top-up purchase, but without payment. The panel limit and squads refresh immediately.",
|
||
"admin_traffic_grant_btn_regular": "🟢 Regular traffic",
|
||
"admin_traffic_grant_btn_premium": "⭐ Premium traffic",
|
||
"admin_traffic_grant_prompt_regular": "Enter the amount of regular traffic in GB for user {user_id} (number, decimals allowed):",
|
||
"admin_traffic_grant_prompt_premium": "Enter the amount of premium traffic in GB for user {user_id} (number, decimals allowed):",
|
||
"admin_traffic_grant_invalid_gb": "❌ Enter a positive number of GB (up to 1,000,000).",
|
||
"admin_traffic_grant_no_user": "⚠️ No target user selected. Open the user card again.",
|
||
"admin_traffic_grant_failed": "❌ Failed to grant traffic. Make sure the user has an active subscription and the tariff supports premium squads.",
|
||
"admin_traffic_grant_regular_done": "✅ +{gb} GB of regular traffic granted to user {user_id}",
|
||
"admin_traffic_grant_premium_done": "✅ +{gb} GB of premium traffic granted to user {user_id}",
|
||
"admin_user_delete_not_allowed": "❌ You are not permitted to delete users.",
|
||
"admin_user_delete_confirmation_prompt": "⚠️ You are about to delete user {user_id} from the bot and the panel.\n\nSend the exact Telegram ID of this user to confirm.\nAny other reply will cancel the operation.",
|
||
"admin_user_delete_state_missing": "⚠️ No active delete operation. Start again.",
|
||
"admin_user_delete_cancelled": "Deletion cancelled.",
|
||
"admin_user_delete_mismatch": "⚠️ ID mismatch. Deletion aborted.",
|
||
"admin_user_delete_already_removed": "ℹ️ The user is already removed.",
|
||
"admin_user_delete_panel_error": "❌ Failed to remove the user from the panel. Operation aborted.",
|
||
"admin_user_delete_success": "✅ User {user_id} was removed from the bot and the panel.",
|
||
"admin_user_delete_error": "❌ Unable to delete the user. Please try again later.",
|
||
"admin_user_search_new_button": "🔍 Find Another",
|
||
"admin_user_view_all_logs_button": "📋 All Actions",
|
||
"admin_user_back_to_card_button": "🔙 Back to Card",
|
||
"admin_user_recent_actions_title": "📜 Recent actions of user {user_id}:",
|
||
"admin_user_not_found": "❌ User not found: {input}",
|
||
"admin_user_not_found_action": "User not found",
|
||
"admin_user_card_error": "❌ Error displaying user card",
|
||
"admin_user_trial_reset_success": "✅ Trial reset! User can activate trial again.",
|
||
"admin_user_trial_reset_error": "❌ Error resetting trial",
|
||
"admin_user_add_subscription_prompt": "➕ Adding subscription days for user {user_id}\n\nEnter number of days to add:",
|
||
"admin_user_invalid_days": "❌ Invalid number of days. Enter number from 1 to 3650.",
|
||
"admin_user_subscription_added_success": "✅ Successfully added {days} days to user {user_id}",
|
||
"admin_user_subscription_added_error": "❌ Error adding subscription days",
|
||
"admin_panel_user_creation_failed": "❌ Failed to create or link panel user for ID {user_id}. Manual intervention required.",
|
||
"admin_user_ban_toggle_success": "✅ User {status}",
|
||
"admin_user_ban_toggle_error": "❌ Error changing ban status",
|
||
"admin_user_ban_success": "✅ User {input} has been banned",
|
||
"admin_user_unban_success": "✅ User {input} has been unbanned",
|
||
"admin_user_ban_error": "❌ Error banning user",
|
||
"admin_user_unban_error": "❌ Error unbanning user",
|
||
"admin_user_send_message_prompt": "✉️ Sending message to user {user_id}\n\nEnter message text:",
|
||
"admin_user_message_too_long": "❌ Message too long (maximum 4000 characters)",
|
||
"admin_user_message_sent_success": "✅ Message sent to user {user_id}",
|
||
"admin_user_message_sent_error": "❌ Error sending message",
|
||
"admin_user_no_logs": "📜 User has no actions",
|
||
"admin_user_logs_error": "❌ Error loading user actions",
|
||
"admin_direct_message_signature": "\n\n---\n💬 Message from administrator",
|
||
"inline_user_stats_message": "👥 <b>User Statistics</b>\n\n📊 Total: <b>{total}</b>\n📈 Active today: <b>{active_today}</b>\n📡 With active subscription: <b>{active}</b>\n💳 With paid subscription: <b>{paid}</b>\n🧪 With trial subscription: <b>{trial}</b>\n🎁 With free subscription: <b>{free}</b>\n😴 Without active subscription: <b>{inactive}</b>\n🚫 Banned: <b>{banned}</b>\n🎁 Via referral program: <b>{referral}</b>",
|
||
"inline_user_stats_description": "Total: {total}, subscribed: {active}",
|
||
"inline_admin_user_stats_title": "👥 User Statistics",
|
||
"inline_financial_stats_message": "💰 <b>Financial Statistics</b>\n\n📅 Today: <b>{today:.2f} RUB</b>\n ({today_count} payments)\n📅 Week: <b>{week:.2f} RUB</b>\n📅 Month: <b>{month:.2f} RUB</b>\n🏆 All time: <b>{all_time:.2f} RUB</b>",
|
||
"inline_admin_financial_stats_title": "💰 Financial Statistics",
|
||
"inline_system_stats_message": "🖥 <b>Panel Statistics</b>\n\n🟢 Online: <b>{online}</b>\n📊 Active: <b>{active}</b>\n🔴 Disabled: <b>{disabled}</b>\n⏰ Expired: <b>{expired}</b>\n⚠️ Limited: <b>{limited}</b>\n👥 Total users: <b>{total}</b>\n💾 RAM Usage: <b>{memory:.1f}%</b>\n📊 Week traffic: <b>{week_traffic}</b>\n📊 Month traffic: <b>{month_traffic}</b>\n🔗 Active nodes: <b>{active_nodes}/{total_nodes}</b>",
|
||
"inline_admin_system_stats_title": "🖥 System Statistics",
|
||
"log_referral_suffix": " (referral from {referrer_link})",
|
||
"log_open_profile_link": "👤 Open profile",
|
||
"log_open_referrer_profile_button": "👤 Referrer profile",
|
||
"log_new_user_registration": "👤 <b>New User</b>\n\n🆔 ID: <code>{user_id}</code>\n👤 Name: {user_display}{referral_text}\n📅 Time: {timestamp}",
|
||
"log_new_email_user_registration": "📧 <b>New User (email)</b>\n\n🆔 ID: <code>{user_id}</code>\n📧 Email: <code>{email}</code>{referral_text}\n📅 Time: {timestamp}",
|
||
"log_account_email_linked": "📧 <b>Email linked</b>\n\n🆔 User ID: <code>{user_id}</code>\n📨 Telegram ID: <code>{telegram_id}</code>\n👤 User: {user_display}\n📧 Email: <code>{email}</code>\n🕐 Time: {timestamp}",
|
||
"log_account_telegram_linked": "📨 <b>Telegram linked</b>\n\n🆔 User ID: <code>{user_id}</code>\n📨 Telegram ID: <code>{telegram_id}</code>\n👤 User: {user_display}\n📧 Email: <code>{email}</code>\n🕐 Time: {timestamp}",
|
||
"log_account_merged": "🔗 <b>Accounts merged</b>\n\n🆔 Kept user ID: <code>{primary_user_id}</code>\n🗑 Removed user ID: <code>{removed_user_id}</code>\n📨 Telegram ID: <code>{telegram_id}</code>\n👤 User: {user_display}\n📧 Email: <code>{email}</code>\n⏰ New end date: <b>{final_end_date}</b>\n📋 Kept panel UUID: <code>{primary_panel_user_uuid}</code>\n📋 Removed panel UUID: <code>{removed_panel_user_uuid}</code>\n🕐 Time: {timestamp}",
|
||
"log_payment_received": "{provider_emoji} <b>Payment Received</b>\n\n👤 User: {user_display}\n💰 Amount: <b>{amount} {currency}</b>\n📅 Period: <b>{months} mo.</b>\n🏦 Provider: {payment_provider}\n🕐 Time: {timestamp}",
|
||
"log_payment_received_traffic": "{provider_emoji} <b>Payment Received (traffic top-up)</b>\n\n👤 User: {user_display}\n💰 Amount: <b>{amount} {currency}</b>\n🗂 {traffic_summary}\n{tariff_line}🏦 Provider: {payment_provider}\n🕐 Time: {timestamp}",
|
||
"log_payment_traffic_purchase_line": "<b>{gb} GB</b> · {kind}",
|
||
"log_payment_traffic_kind_regular": "regular traffic",
|
||
"log_payment_traffic_kind_premium": "premium traffic",
|
||
"log_payment_tariff_line": "📋 Plan: <b>{name}</b>\n",
|
||
"traffic_warning_regular_almost": "⚠️ Traffic for plan <b>{tariff_name}</b> is almost used up.\nAbout <b>{left_pct}%</b> remains.\n\n<b>Current period:</b>\nused — <b>{used}</b>\navailable — <b>{remaining}</b>\nlimit — <b>{limit_total}</b>\n\nUse the button below to buy more regular traffic in the mini app.",
|
||
"traffic_warning_regular_depleted": "⛔️ Traffic for plan <b>{tariff_name}</b> is depleted.\n\n<b>Current period:</b>\nused — <b>{used}</b>\navailable — <b>{remaining}</b>\nlimit — <b>{limit_total}</b>\n\nAccess may be limited until the period resets or you top up.\n\nUse the button below to buy traffic.",
|
||
"traffic_warning_premium_almost": "⚠️ The <b>premium</b> server quota for plan <b>{tariff_name}</b> is almost used up.\nAbout <b>{left_pct}%</b> remains.\n\n<b>Current period:</b>\nused — <b>{used}</b>\navailable — <b>{remaining}</b>\nlimit — <b>{limit_total}</b>\n\nThis limit applies to:\n{servers}\n\nUse the button below to buy premium traffic in the mini app; unused purchased balance carries over to later months.",
|
||
"traffic_warning_premium_depleted": "⛔️ The <b>premium</b> server quota for plan <b>{tariff_name}</b> is used up.\n\n<b>Current period:</b>\nused — <b>{used}</b>\navailable — <b>{remaining}</b>\nlimit — <b>{limit_total}</b>\n\nThis limit applies to:\n{servers}\n\nAccess may be limited until the period resets or you buy more premium traffic.\n\nUse the button below to top up.",
|
||
"traffic_warning_premium_generic_servers": "• servers with premium access under your plan",
|
||
"traffic_warning_premium_servers_more": "… and {count} more servers",
|
||
"traffic_warn_btn_topup_webapp_regular": "Top up traffic",
|
||
"traffic_warn_btn_topup_webapp_premium": "Top up premium traffic",
|
||
"traffic_warn_btn_topup_regular": "Top up traffic",
|
||
"traffic_warn_btn_topup_premium": "Top up premium traffic",
|
||
"log_promo_activation": "🎁 <b>Promo Code Activated</b>\n\n👤 User: {user_display}\n🏷 Code: <code>{promo_code}</code>\n🎯 Bonus: <b>+{bonus_days}d</b>\n🕐 Time: {timestamp}",
|
||
"log_trial_activation": "🆓 <b>Trial Activated</b>\n\n👤 User: {user_display}\n⏰ Valid until: <b>{end_date}</b>\n🕐 Time: {timestamp}",
|
||
"log_panel_sync": "{status_emoji} <b>Panel Synchronization</b>\n\n📊 Status: <b>{status}</b>\n👥 Users processed: <b>{users_processed}</b>\n📋 Subscriptions synced: <b>{subs_synced}</b>\n🕐 Time: {timestamp}\n\n📝 Details:\n{details}",
|
||
"log_suspicious_promo": "⚠️ <b>Suspicious Promo Code Attempt</b>\n\n👤 User: {user_display}\n🆔 ID: <code>{user_id}</code>\n📝 Input: <pre>{suspicious_input}</pre>\n🕐 Time: {timestamp}",
|
||
"admin_logs_csv_export_started": "📄 Starting log export to CSV...",
|
||
"admin_logs_csv_export_success": "✅ Logs exported! File attached above.",
|
||
"admin_user_logs_title": "Logs for {user_display} (page {current_page}/{total_pages}):",
|
||
"admin_all_logs_title": "All Logs (page {current_page}/{total_pages}):",
|
||
"admin_csv_header_log_id": "Log ID",
|
||
"admin_csv_header_timestamp": "Timestamp",
|
||
"admin_csv_header_user_id": "User ID",
|
||
"admin_csv_header_telegram_username": "Username",
|
||
"admin_csv_header_telegram_first_name": "First Name",
|
||
"admin_csv_header_email": "Email",
|
||
"admin_csv_header_event_type": "Event Type",
|
||
"admin_csv_header_content": "Content",
|
||
"admin_csv_header_is_admin_event": "Admin Event",
|
||
"admin_csv_header_target_user_id": "Target User ID",
|
||
"admin_csv_header_raw_update_preview": "Update Preview",
|
||
"admin_banned_users_empty": "📋 Banned Users\n\nList is empty",
|
||
"admin_banned_users_list": "📋 Banned Users ({count}):\n\n{users}",
|
||
"admin_panel_stats_header": "Panel Statistics",
|
||
"admin_bulk_promo_step1_quantity": "📦 <b>Bulk Promo Code Creation</b>\n\n<b>Step 1 of 4:</b> Quantity\n\nEnter the number of promo codes to create (1-1000):",
|
||
"admin_bulk_promo_step2_bonus_days": "📦 <b>Bulk Promo Code Creation</b>\n\n<b>Step 2 of 4:</b> Bonus Days\n\nQuantity: <b>{quantity}</b>\n\nEnter the number of bonus days (1-365):",
|
||
"admin_bulk_promo_step3_max_activations": "📦 <b>Bulk Promo Code Creation</b>\n\n<b>Step 3 of 4:</b> Max Activations\n\nQuantity: <b>{quantity}</b>\nBonus days: <b>{bonus_days}</b>\n\nEnter the maximum number of activations for each promo code (1-10000):",
|
||
"admin_bulk_promo_step4_validity": "📦 <b>Bulk Promo Code Creation</b>\n\n<b>Step 4 of 4:</b> Validity Period\n\nQuantity: <b>{quantity}</b>\nBonus days: <b>{bonus_days}</b>\nMax activations: <b>{max_activations}</b>\n\nChoose the validity period for promo codes:",
|
||
"admin_bulk_promo_invalid_quantity": "❌ Quantity must be between 1 and 1000",
|
||
"admin_bulk_promo_enter_validity_days": "⏰ Enter the number of validity days for promo codes (1-365):",
|
||
"admin_bulk_promo_creating": "⏳ Creating {quantity} promo codes...",
|
||
"admin_promo_step1_code": "🎟 <b>Create Promo Code</b>\n\n<b>Step 1 of 4:</b> Promo Code\n\nEnter promo code (3-30 characters, letters and numbers only):",
|
||
"admin_promo_step2_bonus_days": "🎟 <b>Create Promo Code</b>\n\n<b>Step 2 of 4:</b> Bonus Days\n\nCode: <b>{code}</b>\n\nEnter the number of bonus days (1-365):",
|
||
"admin_promo_step3_max_activations": "🎟 <b>Create Promo Code</b>\n\n<b>Step 3 of 4:</b> Max Activations\n\nCode: <b>{code}</b>\nBonus days: <b>{bonus_days}</b>\n\nEnter the maximum number of activations (1-10000):",
|
||
"admin_promo_step4_validity": "🎟 <b>Create Promo Code</b>\n\n<b>Step 4 of 4:</b> Validity Period\n\nCode: <b>{code}</b>\nBonus days: <b>{bonus_days}</b>\nMax activations: <b>{max_activations}</b>\n\nChoose the validity period for the promo code:",
|
||
"admin_promo_code_already_exists": "❌ A promo code with this code already exists",
|
||
"admin_promo_enter_validity_days": "⏰ Enter the number of validity days for the promo code (1-365):",
|
||
"admin_user_id_label": "🆔 <b>ID:</b>",
|
||
"admin_user_name_label": "👤 <b>Name:</b>",
|
||
"admin_user_username_label": "📱 <b>Username:</b>",
|
||
"admin_user_email_label": "✉️ <b>Email:</b>",
|
||
"admin_user_telegram_id_label": "📨 <b>Telegram ID:</b>",
|
||
"admin_user_language_label": "🌍 <b>Language:</b>",
|
||
"admin_user_registration_label": "📅 <b>Registration:</b>",
|
||
"admin_user_status_label": "🛡 <b>Status:</b>",
|
||
"admin_user_referral_label": "🎁 <b>Referred by:</b>",
|
||
"admin_user_panel_uuid_label": "🔗 <b>Panel UUID:</b>",
|
||
"admin_user_panel_status_label": "📊 <b>Panel Status:</b>",
|
||
"admin_user_traffic_label": "📊 <b>Traffic:</b>",
|
||
"admin_user_subscription_label": "💼 <b>Subscription:</b>",
|
||
"admin_user_trial_label": "🏡 <b>Trial:</b>",
|
||
"admin_user_status_banned": "🚫 Banned",
|
||
"admin_user_status_active": "✅ Active",
|
||
"admin_user_trial_used": "Used",
|
||
"admin_user_trial_not_used": "Not used",
|
||
"admin_user_ban_action_banned": "banned",
|
||
"admin_user_ban_action_unbanned": "unbanned",
|
||
"admin_user_na_value": "N/A",
|
||
"admin_user_subscription_none": "No active subscription",
|
||
"admin_user_actions_count_label": "📜 <b>Total actions:</b>",
|
||
"admin_user_total_paid_label": "💰 <b>Total Paid:</b>",
|
||
"admin_user_referral_revenue_label": "💸 <b>Referral Revenue:</b>",
|
||
"admin_user_invited_friends_label": "👥 <b>Friends invited:</b>",
|
||
"admin_user_ref_purchased_label": "💳 <b>Purchased subscription:</b>",
|
||
"admin_user_invited_by_label": "🎁 <b>Invited by:</b>",
|
||
"admin_user_invitees_button": "👥 Invited users",
|
||
"admin_user_invitees_message_title": "👥 <b>Users invited by {user}</b>\n\nTotal: <b>{total}</b>. Page {current}/{total_pages}.",
|
||
"admin_user_invitees_empty": "This user has not invited anyone yet.",
|
||
"admin_user_invitee_item": "{index}. {user}{suffix}",
|
||
"admin_user_invitee_registered_suffix": " · registered {date}",
|
||
"admin_user_invitees_error": "❌ Failed to load invited users",
|
||
"admin_user_links_section_title": "🔗 <b>Links</b>",
|
||
"admin_user_subscription_url_label": "📡 <b>Subscription:</b>",
|
||
"admin_user_ref_bot_link_label": "🤖 <b>Referral link (bot):</b>",
|
||
"admin_user_ref_webapp_link_label": "🌐 <b>Referral link (web):</b>",
|
||
"admin_user_subscription_active_until": "⏰ <b>Active until:</b>",
|
||
"admin_user_subscription_error": "Loading error",
|
||
"admin_promo_management_button": "🎟 Promo Management",
|
||
"admin_promo_management_title": "🎟 <b>Promo Code Management</b>\n\nSelect a promo code for detailed view:",
|
||
"admin_promo_management_empty": "📭 No promo codes available",
|
||
"admin_promo_card_title": "🎟 <b>Promo Code: {code}</b>",
|
||
"admin_promo_card_bonus_days": "🎁 Bonus days: <b>{days}</b>",
|
||
"admin_promo_card_activations": "🔢 Activations: <b>{current}/{max}</b>",
|
||
"admin_promo_card_validity": "⏰ Valid until: <b>{validity}</b>",
|
||
"admin_promo_card_status": "📊 Status: <b>{status}</b>",
|
||
"admin_promo_card_created": "📅 Created: <b>{created}</b>",
|
||
"admin_promo_card_created_by": "👤 Created by: <b>{creator}</b>",
|
||
"admin_promo_status_active": "✅ Active",
|
||
"admin_promo_status_inactive": "🚫 Inactive",
|
||
"admin_promo_status_activated": "activated",
|
||
"admin_promo_status_deactivated": "deactivated",
|
||
"admin_promo_status_expired": "⏰ Expired",
|
||
"admin_promo_status_used_up": "🔄 Used up",
|
||
"admin_promo_toggle_status_button": "🔄 On/Off",
|
||
"admin_promo_view_activations_button": "📋 Activations",
|
||
"admin_promo_back_to_list_button": "⬅️ Back to list",
|
||
"admin_promo_toggle_success": "✅ Promo code {code} {status}",
|
||
"admin_promo_no_activations": "📋 <b>Activations of promo code: {code}</b>\n\n❌ No activations found",
|
||
"admin_promo_activations_header": "📋 <b>Activations of promo code: {code}</b>\n\n",
|
||
"admin_promo_activation_item": "👤 User ID: <b>{user_id}</b>\n📅 Date: <b>{date}</b>\n",
|
||
"admin_promo_back_to_detail_button": "⬅️ Back to promo",
|
||
"admin_panel_online_label": "Online",
|
||
"admin_panel_active_label": "Active",
|
||
"admin_panel_disabled_label": "Disabled",
|
||
"admin_panel_expired_label": "Expired",
|
||
"admin_panel_limited_label": "Limited",
|
||
"admin_panel_total_users_label": "Total users",
|
||
"admin_panel_memory_usage_label": "RAM Usage",
|
||
"admin_panel_traffic_week_label": "Traffic this week",
|
||
"admin_panel_traffic_month_label": "Traffic this month",
|
||
"admin_panel_nodes_label": "Active nodes",
|
||
"admin_panel_system_stats_error": "Error getting system statistics",
|
||
"admin_panel_bandwidth_stats_error": "Error getting bandwidth statistics",
|
||
"admin_panel_stats_fetch_error": "Error fetching panel data",
|
||
"admin_panel_stats_error_details": "Details",
|
||
"inline_referral_title": "Referral link",
|
||
"inline_referral_description": "Share referral link to get bonuses",
|
||
"inline_financial_description": "Today: {today} RUB",
|
||
"inline_system_description": "🟢 Online: {online}, 📊 Active: {active}",
|
||
"admin_user_stats_active_subscription_label": "With active subscription",
|
||
"admin_user_stats_paid_subs_label": "With paid subscription",
|
||
"admin_user_stats_trial_label": "With trial subscription",
|
||
"admin_user_stats_free_subscription_label": "With free subscription",
|
||
"admin_user_stats_inactive_label": "Without active subscription",
|
||
"admin_user_stats_banned_label": "Banned",
|
||
"admin_user_stats_referral_label": "Attracted via referral program",
|
||
"admin_financial_today_label": "Today",
|
||
"admin_financial_week_label": "This week",
|
||
"admin_financial_month_label": "This month",
|
||
"admin_financial_all_time_label": "All time",
|
||
"admin_financial_payments_label": "payments",
|
||
"admin_sync_details": "📊 Synchronization Statistics:\n🔍 Panel records checked: {panel_records_checked}\n👥 Users found in DB: {users_found_in_db}\n✨ New users created: {users_created}\n🔄 Users updated: {users_updated}\n📋 Subscriptions synced: {subscriptions_synced_count}\n ├── Created new: {subscriptions_created}\n └── Updated existing: {subscriptions_updated}{additional_stats}",
|
||
"admin_sync_no_telegram_id": "\n⚠️ Records without telegramId: {count}",
|
||
"admin_sync_not_found_in_db": "\n❌ Not found in DB: {count}",
|
||
"admin_payments_pagination_info": "📊 Showing {shown} of {total} payments (page {current_page}/{total_pages})",
|
||
"admin_payment_traffic_label": "🗂 Traffic: <b>{traffic_gb} GB</b>",
|
||
"admin_payment_months_label": "📅 Period: <b>{months} mo.</b>",
|
||
"my_subscription_details": "🔐 <b>My Subscription</b>\n\n⏰ Status: <b>{status}</b>\n📅 Active until: <b>{end_date}</b>\n📆 Days left: <b>{days_left}</b>\n\n🔗 Configuration link:\n<code>{config_link}</code>\n\n📊 Traffic ({traffic_period}):\nLimit: <b>{traffic_limit}</b>\nUsed: <b>{traffic_used}</b>",
|
||
"my_traffic_details": "🔐 <b>My Traffic</b>\n\n⏰ Status: <b>{status}</b>\n📅 Valid until: <b>{end_date}</b>\n\n🔗 Configuration link:\n<code>{config_link}</code>\n\n📊 Traffic ({traffic_period}):\nLimit: <b>{traffic_limit}</b>\nUsed: <b>{traffic_used}</b>\nLeft: <b>{traffic_left}</b>",
|
||
"traffic_no_expiry": "no limit",
|
||
"traffic_period_unknown": "unknown",
|
||
"autorenew_enable_button": "🔄 Enable auto-renew",
|
||
"autorenew_disable_button": "🛑 Disable auto-renew",
|
||
"subscription_autorenew_updated": "Auto-renew settings updated.",
|
||
"payment_methods_manage_button": "💳 Payment Methods",
|
||
"payment_methods_title": "💳 <b>Payment Methods</b>",
|
||
"payment_method_bind_button": "➕ Add method",
|
||
"payment_method_delete_button": "🗑 Remove",
|
||
"payment_method_view_button": "ℹ️ Details",
|
||
"payment_method_none": "You don't have a saved payment method yet.",
|
||
"payment_method_bound_success": "✅ Payment method added.",
|
||
"payment_method_deleted_success": "✅ Payment method removed.",
|
||
"payment_method_delete_confirm": "Remove saved payment method?",
|
||
"payment_method_card_title": "💳 {network} ••••{last4}",
|
||
"payment_method_generic_title": "💳 {network}",
|
||
"payment_method_wallet_title": "💼 YooMoney wallet ••••{last4}",
|
||
"payment_network_card": "Card",
|
||
"payment_network_generic": "Payment method",
|
||
"payment_method_added_at": "Added: {date}",
|
||
"payment_method_last_tx": "Last transaction: {date}",
|
||
"payment_method_tx_history_title": "📜 Transactions history",
|
||
"payment_method_no_history": "No transactions history.",
|
||
"subscription_purchase_title": "Subscription purchase for {months} mo.",
|
||
"traffic_purchase_title": "Traffic purchase {traffic_gb} GB",
|
||
"autorenew_enable_requires_card": "Link a payment card in Payment Methods before enabling auto-renew.",
|
||
"subscription_not_active": "You don't have an active subscription.",
|
||
"error_service_unavailable": "Service unavailable. Please try again later.",
|
||
"error_payment_gateway": "Payment service error. Please try again later.",
|
||
"traffic_na": "N/A",
|
||
"payment_service_unavailable": "Payment service is unavailable.",
|
||
"payment_service_unavailable_alert": "Payment service is unavailable. Please try again later.",
|
||
"error_creating_payment_record": "Error creating payment record. Please try again later.",
|
||
"error_payment_gateway_link_failed": "Error creating payment link. Please try again later.",
|
||
"status_active": "Active",
|
||
"status_inactive": "Inactive",
|
||
"admin_ads_section": "📈 Ads",
|
||
"admin_ads_header": "📈 Ad Campaigns:",
|
||
"admin_ads_empty": "No campaigns found",
|
||
"admin_ads_item": "ID: {id}\nSource: <b>{source}</b>\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):",
|
||
"admin_ads_create_start_param_prompt": "Enter start link parameter (e.g., AEZA). Will be used as start=AEZA",
|
||
"admin_ads_create_cost_prompt": "Enter campaign cost (RUB):",
|
||
"admin_ads_invalid_source": "❌ Invalid source. Enter up to 64 characters.",
|
||
"admin_ads_invalid_start_param": "❌ Invalid parameter. Allowed letters/digits/underscore/dash (2-64).",
|
||
"admin_ads_invalid_cost": "❌ Invalid amount. Enter a non-negative number.",
|
||
"admin_ads_start_param_exists": "❌ A campaign with this start parameter already exists.",
|
||
"admin_ads_created_success": "✅ Campaign created!\nID: {id}\nSource: {source}\nParam: {start_param}\nCost: {cost} RUB",
|
||
"admin_ads_back_to_menu_hint": "Done. Back to Ads section:",
|
||
"admin_ads_overview": "📈 <b>Ads</b>\n💰 Revenue: <b>{revenue} RUB</b>\n💸 Spent: <b>{cost} RUB</b>",
|
||
"back_to_ads_list_button": "⬅️ Back to list",
|
||
"admin_ads_card": "📈 <b>Campaign #{id}</b>\nSource: <b>{source}</b>\nstart=<code>{start_param}</code>\nCost: <b>{cost} RUB</b>\nActive: {active}\n\n👥 Starts: <b>{starts}</b>\n🆓 Trials: <b>{trials}</b>\n💳 Payers: <b>{payers}</b>\n💵 Revenue: <b>{revenue} RUB</b>",
|
||
"admin_ads_delete_button": "🗑 Delete campaign",
|
||
"admin_ads_delete_confirm": "Are you sure you want to delete campaign #{id}? This action is irreversible.",
|
||
"admin_ads_deleted_success": "Campaign deleted.",
|
||
"admin_ads_not_found": "Campaign not found.",
|
||
"free_kassa_order_full": "Order #{order_id} from {date}\n\n",
|
||
"email_footer_auto": "Sent automatically by {brand}. Please don't reply.",
|
||
"email_login_code_subject": "{code} — your sign-in code",
|
||
"email_login_code_preheader": "Your one-time code expires in {minutes} min.",
|
||
"email_login_code_heading": "Confirm your sign-in",
|
||
"email_login_code_intro": "Use this 6-digit code to finish signing in to your subscription dashboard.",
|
||
"email_login_code_expiry_html": "The code is valid for <strong style=\"color:#e6e9ef;\">{minutes} min</strong>.",
|
||
"email_login_code_security": "If you didn't request this code, you can ignore this email — your account stays safe.",
|
||
"email_login_code_magic_cta": "Sign in with one tap",
|
||
"email_login_code_magic_intro": "Don't want to type the code? Sign in with this link.",
|
||
"email_login_code_magic_hint": "The link is single-use and expires together with the code.",
|
||
"email_login_code_magic_or": "or",
|
||
"email_login_code_text": "Your verification code: {code}\n\nThe code is valid for {minutes} min.\nIf you didn't request this code, ignore this message.",
|
||
"email_login_code_text_magic": "Or sign in with this single-use link: {url}",
|
||
"email_set_password_code_subject": "{code} — code to create your password",
|
||
"email_set_password_code_preheader": "Confirm password creation. The code expires in {minutes} min.",
|
||
"email_set_password_code_heading": "Confirm password creation",
|
||
"email_set_password_code_intro": "Enter this 6-digit code in your account settings to create or change the password for email sign-in.",
|
||
"email_set_password_code_expiry_html": "The password creation code is valid for <strong style=\"color:#e6e9ef;\">{minutes} min</strong>.",
|
||
"email_set_password_code_security": "If you didn't try to create a password, ignore this email — your account password will not change.",
|
||
"email_set_password_code_text": "Your password creation code: {code}\n\nThe code is valid for {minutes} min.\nIf you didn't try to create a password, ignore this email — your account password will not change.",
|
||
"email_account_merged_subject": "Accounts merged",
|
||
"email_account_merged_preheader": "Your accounts were combined into one profile.",
|
||
"email_account_merged_heading": "Accounts merged",
|
||
"email_account_merged_intro": "We merged your accounts into a single profile so you keep one subscription and one history of payments.",
|
||
"email_account_merged_row_kept": "Kept account",
|
||
"email_account_merged_row_removed": "Removed account",
|
||
"email_account_merged_row_end_date": "New end date",
|
||
"email_account_merged_note": "Your subscription link is unchanged. The duplicate panel user was removed automatically.",
|
||
"email_account_merged_text": "We merged your accounts into one profile.\n\nKept account: {primary}\nRemoved account: {removed}\nPaid periods were combined. New subscription end date: {end_date}.\nYour subscription link stayed the same, and the later account was removed from Remnawave automatically.",
|
||
"email_payment_success_subject": "Payment received",
|
||
"email_payment_success_preheader": "Thanks — your subscription has been activated.",
|
||
"email_payment_success_heading": "Payment received",
|
||
"email_payment_success_intro_subscription": "Thanks! Your subscription has been extended by {months} month(s).",
|
||
"email_payment_success_intro_traffic": "Thanks! We added {traffic_gb} GB of traffic to your account.",
|
||
"email_payment_success_intro_premium_topup": "Thanks! We added {traffic_gb} GB of premium traffic to your account.",
|
||
"email_payment_success_intro_hwid": "Thanks! We added extra HWID devices to your subscription: +{count}.",
|
||
"email_payment_success_intro_tariff_upgrade": "Thanks! Your paid plan upgrade has been applied.",
|
||
"email_payment_success_row_period": "Period",
|
||
"email_payment_success_row_traffic": "Traffic added",
|
||
"email_payment_success_row_hwid": "HWID devices",
|
||
"email_payment_success_row_operation": "Operation",
|
||
"email_payment_success_row_amount": "Amount",
|
||
"email_payment_success_row_end_date": "Active until",
|
||
"email_payment_success_row_method": "Method",
|
||
"email_payment_success_period_value": "{months} month(s)",
|
||
"email_payment_success_traffic_value": "{traffic_gb} GB",
|
||
"email_payment_success_hwid_value": "+{count}",
|
||
"email_payment_success_tariff_upgrade_value": "Plan upgrade",
|
||
"email_payment_success_cta": "Open dashboard",
|
||
"email_payment_success_footer_note": "We'll remind you a few days before the subscription ends.",
|
||
"email_payment_success_text_subscription": "Payment received: {amount}.\nSubscription extended by {months} month(s).\nActive until: {end_date}.",
|
||
"email_payment_success_text_traffic": "Payment received: {amount}.\nTraffic added: {traffic_gb} GB.\nActive until: {end_date}.",
|
||
"email_payment_success_text_hwid": "Payment received: {amount}.\nExtra HWID devices added: +{count}.\nActive until: {end_date}.",
|
||
"email_payment_success_text_tariff_upgrade": "Payment received: {amount}.\nPlan upgrade applied.\nActive until: {end_date}.",
|
||
"email_payment_success_text_dashboard": "Dashboard: {url}",
|
||
"email_user_notification_subject": "Notification",
|
||
"email_user_notification_intro": "An important event happened on your account.",
|
||
"email_user_notification_cta": "Open dashboard",
|
||
"email_user_notification_text_dashboard": "Dashboard: {url}",
|
||
"email_payment_failed_subject": "Payment failed",
|
||
"email_payment_method_bound_subject": "Payment method added",
|
||
"email_referral_bonus_subject": "Referral bonus credited",
|
||
"email_trial_traffic_depleted_subject": "Trial traffic used up",
|
||
"email_traffic_warning_regular_almost_subject": "Plan traffic is almost used up",
|
||
"email_traffic_warning_regular_depleted_subject": "Plan traffic is used up",
|
||
"email_traffic_warning_premium_almost_subject": "Premium traffic is almost used up",
|
||
"email_traffic_warning_premium_depleted_subject": "Premium traffic is used up",
|
||
"email_traffic_warning_regular_cta": "Buy traffic",
|
||
"email_traffic_warning_premium_cta": "Buy premium traffic",
|
||
"email_subscription_expiring_subject_today": "Your subscription ends today",
|
||
"email_subscription_expiring_subject_tomorrow": "1 day left on your subscription",
|
||
"email_subscription_expiring_subject_days": "{days} days left on your subscription",
|
||
"email_subscription_expiring_heading_today": "Subscription ends today",
|
||
"email_subscription_expiring_heading_tomorrow": "1 day left on your subscription",
|
||
"email_subscription_expiring_heading_days": "{days} days left on your subscription",
|
||
"email_subscription_expiring_preheader_today": "Renew today to avoid disconnection.",
|
||
"email_subscription_expiring_preheader_tomorrow": "Your subscription expires tomorrow.",
|
||
"email_subscription_expiring_preheader_days": "Your subscription expires in {days} days.",
|
||
"email_subscription_expiring_intro_today": "Your subscription is about to expire. Renew now to keep your connection active without interruption.",
|
||
"email_subscription_expiring_intro_tomorrow": "Your subscription expires tomorrow. Renew now to avoid losing access.",
|
||
"email_subscription_expiring_intro_days": "A heads-up so you can renew in advance and avoid any interruption.",
|
||
"email_subscription_expiring_row_days_left": "Days left",
|
||
"email_subscription_expiring_row_end_date": "Active until",
|
||
"email_subscription_expiring_cta": "Renew subscription",
|
||
"email_subscription_expiring_note": "If you've already renewed or use auto-renewal, you can ignore this email.",
|
||
"email_subscription_expiring_text": "{heading}.\nActive until: {end_date}.",
|
||
"email_subscription_expiring_text_renew": "Renew: {url}",
|
||
"email_subscription_lifecycle_subject_before_days": "{days} days left on your subscription",
|
||
"email_subscription_lifecycle_subject_before_hours": "{hours} hours left on your subscription",
|
||
"email_subscription_lifecycle_subject_expired": "Your subscription has expired",
|
||
"email_subscription_lifecycle_subject_expired_after": "Your subscription expired yesterday",
|
||
"email_subscription_lifecycle_subject_autorenew": "Auto-renewal runs tomorrow",
|
||
"email_subscription_lifecycle_intro": "This is an important subscription notification.",
|
||
"email_subscription_lifecycle_intro_direct": "This is an important subscription notification sent to your linked email address.",
|
||
"email_subscription_lifecycle_intro_mirrored": "This notification is mirrored from Telegram so you do not miss an important subscription event.",
|
||
"email_subscription_lifecycle_row_end_date": "Active until",
|
||
"email_subscription_lifecycle_cta": "Open dashboard",
|
||
"email_subscription_lifecycle_text_renew": "Dashboard: {url}",
|
||
"email_support_new_ticket_admin_subject": "New support ticket #{ticket_id}",
|
||
"email_support_new_ticket_admin_heading": "New support ticket #{ticket_id}",
|
||
"email_support_new_ticket_admin_intro": "A user opened a new support ticket.",
|
||
"email_support_user_reply_admin_subject": "New user reply in ticket #{ticket_id}",
|
||
"email_support_user_reply_admin_heading": "User replied in ticket #{ticket_id}",
|
||
"email_support_user_reply_admin_intro": "A user sent a new support message.",
|
||
"email_support_admin_reply_user_subject": "New reply for ticket #{ticket_id}",
|
||
"email_support_admin_reply_user_heading": "New reply for ticket #{ticket_id}",
|
||
"email_support_admin_reply_user_intro": "Support has replied to your ticket.",
|
||
"email_support_ticket_closed_user_subject": "Ticket #{ticket_id} was closed",
|
||
"email_support_ticket_closed_user_heading": "Ticket #{ticket_id} was closed",
|
||
"email_support_ticket_closed_user_intro": "Your support ticket has been closed.",
|
||
"email_support_ticket_closed_user_body": "The ticket is closed.",
|
||
"email_support_row_ticket": "Ticket",
|
||
"email_support_row_user": "User",
|
||
"email_support_row_subject": "Subject",
|
||
"email_support_row_tariff": "Tariff",
|
||
"email_support_row_end_date": "End date",
|
||
"email_support_row_remaining": "Remaining",
|
||
"email_support_row_panel_status": "Panel status",
|
||
"email_support_cta_open_ticket": "Open ticket",
|
||
"email_support_cta_open_mini_app": "Open ticket",
|
||
"wa_loading": "Loading...",
|
||
"wa_back": "Back",
|
||
"wa_next": "Next",
|
||
"wa_close": "Close",
|
||
"wa_auth_checking_login": "Checking sign-in...",
|
||
"wa_auth_login_confirm_failed": "Could not confirm sign-in",
|
||
"wa_auth_checking_telegram": "Checking Telegram...",
|
||
"wa_auth_access_denied": "Access denied",
|
||
"wa_auth_telegram_not_confirmed": "Telegram sign-in not confirmed",
|
||
"wa_auth_telegram_unavailable": "Telegram sign-in is currently unavailable",
|
||
"wa_auth_telegram_timeout": "Could not check Telegram availability. Try again later or sign in with email",
|
||
"wa_auth_telegram_not_configured": "Telegram sign-in is not configured",
|
||
"wa_auth_telegram_cancelled": "Telegram sign-in was cancelled",
|
||
"wa_auth_invalid_email": "Enter a valid email",
|
||
"wa_auth_sending_code": "Sending code...",
|
||
"wa_auth_send_code_failed": "Failed to send code",
|
||
"wa_auth_enter_code_6digits": "Enter the 6-digit code from the email",
|
||
"wa_auth_checking_code": "Checking code...",
|
||
"wa_auth_invalid_code": "Invalid code",
|
||
"wa_auth_code_expired": "Code expired",
|
||
"wa_auth_resend_wait": "You can resend in {seconds} sec.",
|
||
"wa_email_verification_title": "Email confirmation",
|
||
"wa_email_sent_to": "We sent a code to {email}",
|
||
"wa_email_code_aria": "Verification code",
|
||
"wa_email_placeholder": "Email",
|
||
"wa_confirm": "Confirm",
|
||
"wa_resend_code": "Resend code",
|
||
"wa_send_code_email": "Send code to email",
|
||
"wa_or": "or",
|
||
"wa_login_telegram_button": "Sign in with Telegram",
|
||
"wa_login_telegram_unavailable_button": "Telegram unavailable",
|
||
"wa_auth_legal_intro": "By creating an account, you agree to the",
|
||
"wa_auth_legal_privacy": "privacy policy",
|
||
"wa_auth_legal_and": "and",
|
||
"wa_auth_legal_agreement": "user agreement",
|
||
"wa_home_subscription_active": "Subscription active",
|
||
"wa_home_access_active": "Access active",
|
||
"wa_subscription_expiring_soon": "Ending soon!",
|
||
"wa_sub_term_forever": "Forever",
|
||
"wa_sub_term_value_unit": "{value} {unit}",
|
||
"wa_sub_term_day_one": "day",
|
||
"wa_sub_term_day_few": "days",
|
||
"wa_sub_term_day_many": "days",
|
||
"wa_sub_term_month_one": "month",
|
||
"wa_sub_term_month_few": "months",
|
||
"wa_sub_term_month_many": "months",
|
||
"wa_sub_term_year_one": "year",
|
||
"wa_sub_term_year_few": "years",
|
||
"wa_sub_term_year_many": "years",
|
||
"wa_home_subscription_inactive": "Subscription inactive",
|
||
"wa_until_date": "until {date}",
|
||
"wa_subscription_remaining_countdown": "left: {countdown}",
|
||
"wa_home_traffic_used": "Traffic used",
|
||
"wa_premium_traffic_title": "Premium servers",
|
||
"wa_premium_reset_monthly": "Separate monthly limit",
|
||
"wa_premium_access_limited": "Premium access is temporarily limited",
|
||
"wa_premium_unlimited": "Unlimited premium access",
|
||
"wa_premium_left": "Left",
|
||
"wa_premium_topup_balance": "Top-up balance",
|
||
"wa_renew": "Renew",
|
||
"wa_renew_subscription": "Renew subscription",
|
||
"wa_pay_subscription": "Pay subscription",
|
||
"wa_pay_full_subscription": "Pay full subscription",
|
||
"wa_subscription_title": "Subscription",
|
||
"wa_subscription_choose_period": "Choose subscription period",
|
||
"wa_tariffs_title": "Tariffs",
|
||
"wa_tariffs_choose": "Choose a tariff and payment option",
|
||
"wa_tariff_choose_period_payment": "{tariff}: choose period and payment method",
|
||
"wa_back_to_tariffs": "Back to tariffs",
|
||
"wa_selected_tariff": "Selected tariff: {tariff}",
|
||
"wa_tariff_no_description": "Tariff description is not configured",
|
||
"wa_change_tariff": "Change tariff",
|
||
"wa_topup_traffic": "Buy traffic",
|
||
"wa_add_traffic": "Add traffic",
|
||
"wa_add_traffic_premium": "Add traffic on {target}",
|
||
"wa_current_tariff": "Current tariff: {tariff}",
|
||
"wa_tariff_options_loading": "Loading options",
|
||
"wa_tariff_options_failed": "Failed to load tariff options",
|
||
"wa_tariff_change_applied": "Tariff changed",
|
||
"wa_tariff_change_failed": "Failed to change tariff",
|
||
"wa_no_tariff_change_options": "No tariff change options available",
|
||
"wa_no_topup_options": "No top-up packages available",
|
||
"wa_tariff_model_period": "period",
|
||
"wa_tariff_model_traffic": "traffic",
|
||
"wa_tariff_change_recalc_days": "No payment: {days} days left",
|
||
"wa_tariff_change_convert_gb": "No payment: receive {gb} GB",
|
||
"wa_tariff_change_pay_diff": "Pay {price}",
|
||
"wa_tariff_change_buy_package": "Switch and add {gb} GB for {price}",
|
||
"wa_tariff_change_recalc_hint": "Remaining {days} days will be recalculated using the new tariff price.",
|
||
"wa_tariff_change_convert_hint": "Remaining {days} days will be converted into traffic.",
|
||
"wa_tariff_change_payment_hint": "The switch is applied after payment.",
|
||
"wa_tariff_change_targets_title": "New tariff",
|
||
"wa_tariff_change_strategy_title": "Switch option",
|
||
"wa_tariff_change_confirm_title": "Confirm tariff change",
|
||
"wa_tariff_change_confirm_desc": "Check what will happen after confirmation.",
|
||
"wa_tariff_change_confirm_target": "New tariff: {tariff}",
|
||
"wa_tariff_change_confirm_action": "Option: {action}",
|
||
"wa_tariff_change_confirm_recalc": "{days} days will remain after the switch.",
|
||
"wa_tariff_change_confirm_convert": "{gb} GB of traffic will be added.",
|
||
"wa_tariff_change_confirm_payment": "A payment for {price} will be created.",
|
||
"wa_confirm_and_apply": "Confirm and apply",
|
||
"wa_confirm_and_pay": "Confirm and pay",
|
||
"wa_topup_for_tariff": "Packages for {tariff}",
|
||
"wa_topup_carryover": "Top-up traffic does not expire: the monthly limit is used first, then the top-up balance.",
|
||
"wa_topup_warning_levels": "Traffic warnings are sent at {levels}%.",
|
||
"wa_topup_warning_medium": "{percent}% of traffic is used. Warnings are set at {levels}%.",
|
||
"wa_topup_warning_high": "{percent}% of traffic is used. Buying a package now is recommended.",
|
||
"wa_topup_warning_critical": "{percent}% of traffic is used. Access may be limited soon.",
|
||
"wa_apply": "Apply",
|
||
"wa_per_month_short": "/mo",
|
||
"wa_traffic_packages_title": "Traffic",
|
||
"wa_traffic_packages_choose": "Choose traffic package",
|
||
"wa_per_gb_short": "/GB",
|
||
"wa_buy_traffic": "Buy traffic",
|
||
"wa_activate_trial": "Activate trial",
|
||
"wa_trial_title": "Trial period",
|
||
"wa_trial_details": "{days} days, {traffic}",
|
||
"wa_trial_offer_title": "Start with a grace period",
|
||
"wa_trial_offer_description": "Activate a trial: {duration} of access and {traffic} available to download for free.",
|
||
"wa_trial_duration_label": "Duration",
|
||
"wa_trial_download_traffic_label": "Available to download",
|
||
"wa_trial_try_free": "Try for free",
|
||
"wa_trial_activated": "Trial activated",
|
||
"wa_trial_telegram_required_title": "Link Telegram to start trial",
|
||
"wa_trial_telegram_required_description": "To activate a {duration} trial with {traffic}, link Telegram first.",
|
||
"wa_trial_link_telegram_and_activate": "Link and activate",
|
||
"wa_activation_success_title": "Everything is successfully activated",
|
||
"wa_activation_success_install_hint": "Press OK and follow the setup instructions for your device.",
|
||
"wa_activation_success_connect_hint": "Press OK and we will open the Remnawave subscription page for setup.",
|
||
"wa_trial_activation_failed": "Failed to activate trial",
|
||
"wa_trial_telegram_required_error": "Link Telegram to activate the trial.",
|
||
"wa_trial_activation_loading": "Activating trial...",
|
||
"wa_trial_activation_wait": "Preparing access and connection details.",
|
||
"wa_trial_active_hint": "Access is ready. Install the app and import the profile.",
|
||
"wa_trial_active_until_label": "Active until",
|
||
"wa_trial_days_left_label": "Time left",
|
||
"wa_trial_days_left": "{days} days",
|
||
"wa_trial_traffic_label": "Traffic",
|
||
"wa_trial_unavailable_title": "Trial is unavailable",
|
||
"wa_trial_unavailable_hint": "Trial may already be used, or this account already has active access.",
|
||
"wa_trial_retry": "Try again",
|
||
"wa_install_and_configure": "Install and configure",
|
||
"wa_payment_methods_not_configured": "Payment methods are not configured yet",
|
||
"wa_pay": "Pay",
|
||
"wa_referral_program_title": "Referral program",
|
||
"wa_referral_link_title": "Your referral link",
|
||
"wa_referral_welcome_telegram_required_title": "Your bonus is waiting for Telegram",
|
||
"wa_referral_welcome_telegram_required_description": "Link Telegram to claim {days} bonus days for registering via an invite.",
|
||
"wa_referral_link_telegram_and_claim": "Link and claim bonus",
|
||
"wa_referral_welcome_claimed": "Referral bonus granted",
|
||
"wa_referral_welcome_claimed_until": "Referral bonus granted until {date}",
|
||
"wa_referral_welcome_claim_failed": "Failed to grant referral bonus",
|
||
"wa_referral_welcome_telegram_required_error": "Link Telegram to claim the referral bonus.",
|
||
"wa_link_unavailable": "Link is not available yet",
|
||
"wa_link_copied": "Link copied",
|
||
"wa_copy": "Copy",
|
||
"wa_referral_bonus_overview_title": "Bonus system",
|
||
"wa_referral_bonus_once_note": "Bonus is granted only once per invited user after their first payment.",
|
||
"wa_referral_bonus_registration_title": "For registration via referral link",
|
||
"wa_referral_bonus_paid_intro": "If a friend pays for a subscription:",
|
||
"wa_referral_bonus_depends_on_tariff": "Bonus depends on the tariff and payment period your friend chooses",
|
||
"wa_referral_bonus_range_days": "from {min} to {max} days",
|
||
"wa_referral_bonus_you_days": "You: +{days} days",
|
||
"wa_referral_bonus_friend_days": "Friend: +{days} days",
|
||
"wa_referral_bonus_you_range": "You: {range}",
|
||
"wa_referral_bonus_friend_range": "Friend: {range}",
|
||
"wa_referral_bonus_not_configured": "Referral bonuses are not configured",
|
||
"wa_promo_enter": "Enter promo code",
|
||
"wa_promo_activated_until": "Promo code activated. Subscription until {date}",
|
||
"wa_promo_activated": "Promo code activated",
|
||
"wa_promo_activation_failed": "Failed to activate promo code",
|
||
"wa_activate": "Activate",
|
||
"wa_settings_avatar_alt": "User avatar",
|
||
"wa_settings_language": "Language",
|
||
"wa_settings_theme": "Appearance theme",
|
||
"wa_settings_theme_follow_default": "Server default",
|
||
"wa_settings_theme_update_failed": "Failed to update theme",
|
||
"wa_settings_link_telegram": "Telegram linked",
|
||
"wa_settings_not_linked": "Not linked",
|
||
"wa_settings_link_email": "Email linked",
|
||
"wa_settings_email_not_linked": "Not linked",
|
||
"wa_settings_linked": "Linked",
|
||
"wa_settings_language_update_failed": "Failed to update language",
|
||
"wa_settings_user_agreement": "User agreement",
|
||
"wa_settings_privacy_policy": "Privacy policy",
|
||
"wa_logout": "Log out",
|
||
"wa_end_session": "End session",
|
||
"wa_navigation": "Navigation",
|
||
"wa_nav_home": "Home",
|
||
"wa_nav_settings": "Settings",
|
||
"wa_nav_devices": "Devices",
|
||
"wa_devices_title": "My devices",
|
||
"wa_devices_count": "{current} of {max}",
|
||
"wa_devices_unlimited": "Unlimited",
|
||
"wa_devices_refresh": "Refresh devices",
|
||
"wa_devices_loading": "Loading devices...",
|
||
"wa_devices_load_failed": "Failed to load devices",
|
||
"wa_devices_empty": "No devices yet",
|
||
"wa_devices_empty_hint": "You can connect up to {max} devices from your subscription app.",
|
||
"wa_device_fallback_name": "Device {index}",
|
||
"wa_devices_platform_unknown": "Platform unknown",
|
||
"wa_devices_connected_at": "Connected",
|
||
"wa_devices_disconnect": "Disconnect device",
|
||
"wa_devices_disconnect_desc": "{device} will be removed from your device list. It may connect again next time you use the subscription on that device.",
|
||
"wa_devices_disconnect_confirm": "Disconnect",
|
||
"wa_device_disconnected": "Device disconnected",
|
||
"wa_device_disconnect_failed": "Failed to disconnect device",
|
||
"wa_cancel": "Cancel",
|
||
"wa_ok": "OK",
|
||
"wa_payment_created": "Payment created",
|
||
"wa_payment_create_failed": "Failed to create payment",
|
||
"wa_payment_stars_telegram_required": "Open this payment in Telegram to pay with Stars",
|
||
"wa_connect_link_unavailable": "Connection link is not available yet",
|
||
"wa_copied": "Copied",
|
||
"wa_unavailable": "Not available yet",
|
||
"wa_method_other_title": "Other methods",
|
||
"wa_unlimited_traffic": "Unlimited traffic",
|
||
"wa_traffic_of": "{used} of {limit}",
|
||
"wa_traffic_depleted": "Traffic depleted",
|
||
"wa_language_default": "English",
|
||
"wa_telegram_not_linked": "Telegram not linked",
|
||
"wa_tg_id_not_linked": "TG ID not linked",
|
||
"wa_nav_bonuses": "Bonuses",
|
||
"wa_method_platega_sbp_card": "SBP/Card",
|
||
"wa_method_platega_crypto": "Crypto",
|
||
"wa_settings_link_telegram_action": "Link Telegram",
|
||
"wa_settings_telegram_linked_title": "Telegram linked",
|
||
"wa_settings_link_email_action": "Link email",
|
||
"wa_settings_email_linked_title": "Email linked",
|
||
"wa_telegram_notifications_banner_title": "Enable Telegram notifications",
|
||
"wa_telegram_notifications_banner_text": "The bot can send subscription, payment, and support updates only after you allow messages or start the chat.",
|
||
"wa_telegram_notifications_blocked_title": "The bot cannot send notifications",
|
||
"wa_telegram_notifications_blocked_text": "Open the bot in Telegram and unblock the chat, then return to the app.",
|
||
"wa_telegram_notifications_open_bot": "Start bot",
|
||
"wa_telegram_notifications_link_unavailable": "Bot link is not available yet",
|
||
"wa_activate_promo_title": "Activate promo code",
|
||
"wa_traffic_reset_none": "No reset",
|
||
"wa_traffic_reset_monthly": "Monthly reset",
|
||
"wa_traffic_reset_weekly": "Weekly reset",
|
||
"wa_traffic_reset_daily": "Daily reset",
|
||
"wa_traffic_reset_yearly": "Yearly reset",
|
||
"wa_traffic_reset_policy": "Traffic reset policy",
|
||
"wa_plan_one_year": "1 year",
|
||
"wa_link_email_modal_desc": "Enter your email and get a verification code",
|
||
"buy_hwid_devices_menu_button": "+ HWID devices",
|
||
"buy_hwid_devices_button": "+{count} HWID for {price} {currency_symbol}",
|
||
"select_hwid_device_package": "Select HWID device package:",
|
||
"select_hwid_device_renewal_package": "Purchased HWID devices are renewed together with subscription renewal. Your current top-up is valid until {date}.",
|
||
"choose_payment_method_hwid_devices": "Choose a payment method for extra HWID devices:",
|
||
"payment_hwid_renewal_toggle_on": "✅ Also renew +{count} HWID devices for {price} {currency_symbol}",
|
||
"payment_hwid_renewal_toggle_off": "☐ Renew +{count} HWID devices for {price} {currency_symbol}",
|
||
"no_hwid_device_packages_available": "Extra HWID devices are not configured for this tariff.",
|
||
"hwid_devices_unlimited_no_topup": "Your device limit is already unlimited.",
|
||
"payment_description_hwid_devices": "Extra HWID devices +{count}",
|
||
"payment_successful_hwid_devices_renewal_note": "Your +{count} extra HWID devices are valid until {date}. To keep them for the next period, enable device renewal while renewing the subscription.",
|
||
"payment_successful_hwid_devices_renewed_note": "Your +{count} extra HWID devices were renewed with the subscription until {date}.",
|
||
"subscription_hwid_renewal_reminder": "You have +{count} extra HWID devices valid until {date}. When renewing the subscription, you can include these devices in the same payment.",
|
||
"wa_buy_hwid_devices": "Buy devices",
|
||
"wa_device_topup_for_tariff": "Device packages for {tariff}",
|
||
"wa_hwid_devices_package": "+{count} devices",
|
||
"wa_hwid_devices_renewal_package": "Renew +{count} devices",
|
||
"wa_hwid_devices_active_until": "Active until {date}",
|
||
"wa_hwid_devices_renewal_period": "From {from} to {to}",
|
||
"wa_hwid_devices_valid_until": "+{count} extra devices are valid until {date}",
|
||
"wa_hwid_devices_renewal_notice": "Your +{count} extra devices are valid until {date}. You can renew them together with the subscription.",
|
||
"wa_hwid_devices_renewal_checkbox": "Also renew +{count} extra devices for {price}",
|
||
"wa_hwid_devices_renewal_checkbox_aria": "Renew extra devices with the subscription",
|
||
"wa_hwid_devices_renewal_checkbox_hint": "New device period: from {from} to {to}",
|
||
"wa_hwid_devices_renewal_checkbox_hint_short": "Devices will be renewed for the new subscription period",
|
||
"wa_hwid_devices_desync_notice": "The current device top-up is valid until {date}; before the new period starts, the limit may return to the base tariff limit.",
|
||
"wa_hwid_devices_renewal_offer": "Your current +{count} device top-up is valid until {date}. Device renewal is handled together with subscription renewal.",
|
||
"wa_hwid_devices_renewal_prompt": "Subscription renewed. If devices were not renewed with it, the current device top-up remains valid until its own end date.",
|
||
"wa_hwid_devices_renewal_unavailable": "You currently have +{count} extra devices valid until {date}. Device renewal is not available for the selected payment method or tariff.",
|
||
"wa_no_hwid_device_options": "No device packages available",
|
||
"wa_device_topup_options_failed": "Could not load device packages",
|
||
"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_themes": "Themes",
|
||
"admin_nav_backups": "Backups",
|
||
"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_themes_title": "Web App themes",
|
||
"admin_section_themes_subtitle": "Colors, fonts, and Mini App appearance",
|
||
"admin_section_backups_title": "Backups",
|
||
"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",
|
||
"admin_backups_select_archive": "Select an archive",
|
||
"admin_backups_select_target": "Select what to restore",
|
||
"admin_backups_restore_done": "Restore completed",
|
||
"admin_backups_restore_failed": "Restore failed",
|
||
"admin_backups_col_archive": "Archive",
|
||
"admin_backups_col_created": "Created",
|
||
"admin_backups_col_size": "Size",
|
||
"admin_backups_col_contents": "Contents",
|
||
"admin_backups_col_warnings": "Warnings",
|
||
"admin_backups_target_database": "Database",
|
||
"admin_backups_target_compose": "compose folder",
|
||
"admin_backups_restore_confirm": "Start restore from {name}: {components}?",
|
||
"admin_backups_uploading": "Uploading...",
|
||
"admin_backups_upload": "Upload archive",
|
||
"admin_backups_dir": "Directory",
|
||
"admin_backups_restore_title": "Restore",
|
||
"admin_backups_last_restore_done": "Done",
|
||
"admin_backups_restoring": "Restoring...",
|
||
"admin_backups_restore_run": "Start",
|
||
"admin_backups_pre_restore_snapshot": "Current compose folder was saved before replacement: {path}",
|
||
"admin_backups_empty": "No archives yet",
|
||
"admin_backups_badge_db": "DB",
|
||
"admin_backups_badge_compose": "Compose",
|
||
"admin_filter_all": "All",
|
||
"admin_filter_not_banned": "Not banned",
|
||
"admin_filter_banned": "Banned",
|
||
"admin_filter_tg_linked": "With Telegram",
|
||
"admin_filter_no_tg": "No Telegram",
|
||
"admin_filter_email_linked": "With email",
|
||
"admin_filter_no_email": "No email",
|
||
"admin_filter_panel_linked": "With panel",
|
||
"admin_panel_status": "Panel status",
|
||
"admin_panel_status_all": "All statuses",
|
||
"admin_sort_registered_desc": "Newest first",
|
||
"admin_sort_registered_asc": "Oldest first",
|
||
"admin_sort_name_asc": "Name ↑",
|
||
"admin_sort_name_desc": "Name ↓",
|
||
"admin_sort_id_asc": "ID ↑",
|
||
"admin_sort_id_desc": "ID ↓",
|
||
"admin_sort_premium_ratio_asc": "Premium usage % ↑",
|
||
"admin_sort_premium_ratio_desc": "Premium usage % ↓",
|
||
"admin_sort_ascending": "Sorted ascending",
|
||
"admin_sort_descending": "Sorted descending",
|
||
"admin_sort_off": "Not sorted",
|
||
"admin_premium_traffic_filter_label": "Premium traffic",
|
||
"admin_premium_traffic_filter_all": "All",
|
||
"admin_premium_traffic_filter_none": "No tariff limit",
|
||
"admin_premium_traffic_filter_unlimited": "Unlimited (override)",
|
||
"admin_premium_traffic_filter_good": "Premium: OK",
|
||
"admin_premium_traffic_filter_warn": "Premium: low",
|
||
"admin_premium_traffic_filter_critical": "Premium: depleted",
|
||
"admin_premium_traffic_na": "—",
|
||
"admin_close_menu": "Close menu",
|
||
"admin_sidebar_navigation": "Admin navigation",
|
||
"admin_exit": "Exit",
|
||
"admin_language": "Language",
|
||
"admin_menu": "Menu",
|
||
"admin_users_search_placeholder": "ID, @username, or email",
|
||
"admin_find": "Find",
|
||
"admin_filter": "Filter",
|
||
"admin_filters": "Filters",
|
||
"admin_active_filters": "Active filters",
|
||
"admin_clear_filter": "Clear {label}",
|
||
"admin_done": "Done",
|
||
"admin_users_filters_open": "Open filters",
|
||
"admin_users_filters_title": "User filters",
|
||
"admin_users_filters_description": "Refine the user list without leaving the table.",
|
||
"admin_sort": "Sort",
|
||
"admin_total": "Total",
|
||
"admin_users_empty": "No users found",
|
||
"admin_users_col_payments_total": "Paid total",
|
||
"admin_users_col_payments_count": "Payments",
|
||
"admin_users_col_invited": "Invited",
|
||
"admin_users_col_subscription_expires": "Expires",
|
||
"admin_users_col_registration": "Registered",
|
||
"admin_page": "Page",
|
||
"admin_page_short": "Page",
|
||
"admin_user": "User",
|
||
"admin_amount": "Amount",
|
||
"admin_provider": "Provider",
|
||
"admin_description": "Description",
|
||
"admin_status": "Status",
|
||
"admin_date": "Date",
|
||
"admin_payments_empty": "No payments",
|
||
"admin_payments_col_traffic_regular": "Main traffic",
|
||
"admin_payments_col_traffic_premium": "Premium traffic",
|
||
"admin_payments_col_actions": "",
|
||
"admin_payments_open_user": "Open user card",
|
||
"admin_payments_desc_traffic_package_regular": "Traffic package {gb} GB (standard)",
|
||
"admin_payments_desc_traffic_package_premium": "Traffic package {gb} GB (premium)",
|
||
"admin_payment_detail_open": "Open payment",
|
||
"admin_payment_detail_title": "Payment #{id}",
|
||
"admin_payment_load_failed": "Failed to load payment",
|
||
"admin_payment_detail_updated_at": "Updated",
|
||
"admin_payment_detail_provider_payment_id": "Provider ID",
|
||
"admin_payment_detail_idempotence_key": "Idempotence key",
|
||
"admin_payment_detail_sale_mode": "Sale type",
|
||
"admin_payment_detail_tariff_key": "Tariff",
|
||
"admin_payment_detail_duration_months": "Period",
|
||
"admin_payment_detail_months_count": "{count} mo.",
|
||
"admin_payment_detail_traffic": "Traffic",
|
||
"admin_payment_detail_regular_traffic": "Regular: {gb}",
|
||
"admin_payment_detail_premium_traffic": "Premium: {gb}",
|
||
"admin_payment_detail_purchased_gb": "Purchased GB",
|
||
"admin_payment_detail_hwid_devices": "HWID devices",
|
||
"admin_payment_detail_promo_code": "Promo code",
|
||
"admin_payment_detail_payment_section": "Payment",
|
||
"admin_payment_detail_purchase_section": "Purchase",
|
||
"admin_logs_user_filter_placeholder": "Filter by user ID",
|
||
"admin_reset": "Reset",
|
||
"admin_event": "Event",
|
||
"admin_content": "Content",
|
||
"admin_logs_empty": "No entries",
|
||
"admin_settings_section_general": "General",
|
||
"admin_settings_section_remnawave": "Remnawave Panel",
|
||
"admin_settings_section_appearance": "Appearance",
|
||
"admin_settings_section_pricing": "Tariffs",
|
||
"admin_settings_section_payments": "Payment systems",
|
||
"admin_settings_section_trial": "Trial",
|
||
"admin_settings_section_referral": "Referral program",
|
||
"admin_settings_section_notifications": "Notifications",
|
||
"admin_settings_section_backups": "Backups",
|
||
"admin_settings_section_devices": "Devices",
|
||
"admin_settings_section_support": "Support",
|
||
"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, 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",
|
||
"admin_settings_field_telegram_antiflood_enabled_description": "Enables soft per-user limits that cut off only extreme Telegram update floods.",
|
||
"admin_settings_field_telegram_antiflood_window_seconds_label": "Anti-flood window",
|
||
"admin_settings_field_telegram_antiflood_window_seconds_description": "Rolling window in seconds used by all Telegram anti-flood buckets.",
|
||
"admin_settings_field_telegram_antiflood_max_updates_per_window_label": "All updates limit",
|
||
"admin_settings_field_telegram_antiflood_max_updates_per_window_description": "Maximum total Telegram updates from one user or chat during the window. 0 disables this bucket.",
|
||
"admin_settings_field_telegram_antiflood_message_max_per_window_label": "Messages limit",
|
||
"admin_settings_field_telegram_antiflood_message_max_per_window_description": "Maximum message updates from one user or chat during the window. 0 disables this bucket.",
|
||
"admin_settings_field_telegram_antiflood_callback_max_per_window_label": "Button callbacks limit",
|
||
"admin_settings_field_telegram_antiflood_callback_max_per_window_description": "Maximum callback-query updates from one user during the window. 0 disables this bucket.",
|
||
"admin_settings_field_telegram_antiflood_inline_max_per_window_label": "Inline queries limit",
|
||
"admin_settings_field_telegram_antiflood_inline_max_per_window_description": "Maximum inline-query updates from one user during the window. 0 disables this bucket.",
|
||
"admin_settings_field_telegram_antiflood_start_max_per_window_label": "/start limit",
|
||
"admin_settings_field_telegram_antiflood_start_max_per_window_description": "Maximum /start messages from one user during the window. 0 disables this bucket.",
|
||
"admin_settings_field_telegram_antiflood_expensive_callback_max_per_window_label": "Expensive callbacks limit",
|
||
"admin_settings_field_telegram_antiflood_expensive_callback_max_per_window_description": "Maximum payment, trial, promo and account-changing callbacks from one user during the window. 0 disables this bucket.",
|
||
"admin_settings_field_telegram_action_cooldown_enabled_label": "Action cooldowns enabled",
|
||
"admin_settings_field_telegram_action_cooldown_enabled_description": "Deduplicates exact repeated payment and trial button presses from the same user.",
|
||
"admin_settings_field_telegram_payment_callback_cooldown_seconds_label": "Payment callback cooldown",
|
||
"admin_settings_field_telegram_payment_callback_cooldown_seconds_description": "Seconds to suppress an exact repeated payment callback from the same user. 0 disables this cooldown.",
|
||
"admin_settings_field_telegram_trial_callback_cooldown_seconds_label": "Trial callback cooldown",
|
||
"admin_settings_field_telegram_trial_callback_cooldown_seconds_description": "Seconds to suppress an exact repeated trial activation callback from the same user. 0 disables this cooldown.",
|
||
"admin_settings_subsection_common": "Common",
|
||
"admin_settings_subsection_telegram_antiflood": "Telegram anti-flood",
|
||
"admin_settings_subsection_checkout": "Checkout",
|
||
"admin_settings_subsection_trial": "Trial",
|
||
"admin_settings_subsection_referral": "Referral program",
|
||
"admin_settings_subsection_legacy_tariffs": "Legacy tariffs",
|
||
"admin_settings_subsection_remnawave": "Remnawave",
|
||
"admin_settings_subsection_remnashop": "Remnashop",
|
||
"admin_settings_subsection_telegram_stars": "Telegram Stars",
|
||
"admin_settings_subsection_yookassa": "YooKassa",
|
||
"admin_settings_subsection_freekassa": "FreeKassa",
|
||
"admin_settings_subsection_platega": "Platega",
|
||
"admin_settings_subsection_severpay": "SeverPay",
|
||
"admin_settings_subsection_cryptopay": "CryptoPay",
|
||
"admin_settings_subsection_wata": "Wata",
|
||
"admin_settings_subsection_heleket": "Heleket",
|
||
"admin_settings_subsection_paykilla": "PayKilla",
|
||
"admin_settings_subsection_lava": "LAVA",
|
||
"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.",
|
||
"admin_settings_provider_webhook_base_missing": "Set WEBHOOK_BASE_URL in .env to show the full URL for {path}.",
|
||
"admin_settings_provider_admin_only_label": "Only for admins",
|
||
"admin_settings_provider_admin_only_description": "Shows this provider only to admins. Webhooks and payment status handling remain active for test payments.",
|
||
"admin_settings_field_migration_remnashop_referral_code_compat_enabled_label": "Remnashop ref-code compatibility",
|
||
"admin_settings_field_migration_remnashop_referral_code_compat_enabled_description": "Allows old Remnashop referral codes to resolve without changing their case or format. The importer enables it automatically.",
|
||
"admin_settings_field_migration_remnashop_promo_code_compat_enabled_label": "Remnashop promo-code compatibility",
|
||
"admin_settings_field_migration_remnashop_promo_code_compat_enabled_description": "Looks up promo codes in the original case first, then falls back to the current rules. Regular promo codes keep working as before.",
|
||
"admin_settings_field_migration_remnashop_imported_at_label": "Remnashop import date",
|
||
"admin_settings_field_migration_remnashop_imported_at_description": "Operational marker for the latest Remnashop import, stored as an ISO timestamp.",
|
||
"admin_settings_field_migration_remnashop_notes_label": "Remnashop import notes",
|
||
"admin_settings_field_migration_remnashop_notes_description": "Short importer summary: migrated entities and enabled compatibility modes.",
|
||
"admin_settings_validation_errors": "Errors: {errors}",
|
||
"admin_settings_save_error": "Error: {error}",
|
||
"admin_sync_started": "Synchronization started",
|
||
"admin_sync_error": "Synchronization error",
|
||
"admin_error": "Error",
|
||
"admin_user_banned": "User banned",
|
||
"admin_user_unbanned": "User unbanned",
|
||
"admin_message_sent": "Message sent",
|
||
"admin_message_send_failed": "Could not send",
|
||
"admin_subscription_extended": "Subscription extended by {days} days",
|
||
"admin_trial_reset": "Trial reset",
|
||
"admin_user_deleted": "User deleted",
|
||
"admin_broadcast_target_all": "All active",
|
||
"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}",
|
||
"admin_stats_error": "Failed to load statistics: {error}",
|
||
"admin_stats_label_users": "Users",
|
||
"admin_stats_trend_banned": "Banned: {count}",
|
||
"admin_stats_label_active_subs": "Active users",
|
||
"admin_stats_label_paid_subs": "Paid users",
|
||
"admin_stats_label_trial_users": "With trial subscription",
|
||
"admin_stats_label_free_users": "With free subscription",
|
||
"admin_stats_trend_paid": "Paid: {count}",
|
||
"admin_stats_trend_trials": "Trials: {count}",
|
||
"admin_stats_trend_free": "Free: {count}",
|
||
"admin_stats_label_today_rev": "Today's Revenue",
|
||
"admin_stats_trend_payments": "{count} payments",
|
||
"admin_stats_label_week": "This Week",
|
||
"admin_stats_trend_month": "Month: {value}",
|
||
"admin_stats_label_all_time": "All Time",
|
||
"admin_stats_sync_label": "Sync with panel",
|
||
"admin_stats_label_queue": "Queue",
|
||
"admin_stats_trend_groups": "Groups: {count}",
|
||
"admin_stats_recent_payments": "Recent Payments",
|
||
"admin_stats_records_count": "{count} records",
|
||
"admin_stats_section_audience": "Audience",
|
||
"admin_stats_section_audience_hint": "Bot users and subscriptions",
|
||
"admin_stats_trend_referrals": "Referrals: {count}",
|
||
"admin_stats_label_inactive": "No active subscription",
|
||
"admin_stats_trend_new_today": "Registrations today: {count}",
|
||
"admin_stats_trend_expired_subscriptions": "Expired subscriptions: {count}",
|
||
"admin_stats_section_revenue": "Revenue",
|
||
"admin_stats_section_revenue_hint": "Succeeded payments, shop currency",
|
||
"admin_stats_revenue_chart_title": "Daily revenue (UTC)",
|
||
"admin_stats_revenue_chart_aria": "Daily revenue chart; hover for date and amount",
|
||
"admin_stats_revenue_chart_aria_period": "Daily revenue, last {days} days (UTC)",
|
||
"admin_stats_revenue_chart_hint": "Hover the chart to see each day’s total",
|
||
"admin_stats_revenue_chart_range_sum": "Selected range total: {value}",
|
||
"admin_stats_revenue_chart_days_available": "Series length: {count} days",
|
||
"admin_stats_revenue_chart_uplot_time": "Time",
|
||
"admin_stats_revenue_chart_uplot_value": "Value",
|
||
"admin_stats_revenue_period_7": "7d",
|
||
"admin_stats_revenue_period_14": "14d",
|
||
"admin_stats_revenue_period_30": "30d",
|
||
"admin_stats_revenue_period_90": "90d",
|
||
"admin_stats_revenue_period_180": "6 mo",
|
||
"admin_stats_revenue_period_365": "1 yr",
|
||
"admin_stats_revenue_period_custom": "Custom",
|
||
"admin_stats_revenue_custom_range_title": "Date range (UTC)",
|
||
"admin_stats_revenue_granularity_aria": "Revenue chart step",
|
||
"admin_stats_revenue_granularity_day": "By day",
|
||
"admin_stats_revenue_granularity_week": "By week",
|
||
"admin_stats_revenue_granularity_month": "By month",
|
||
"admin_stats_revenue_chart_hint_week": "Weeks start on Monday (UTC); hover the chart for totals",
|
||
"admin_stats_revenue_chart_hint_month": "Months are calendar months (UTC); hover the chart for totals",
|
||
"admin_stats_revenue_chart_bucket_count": "Points: {count}",
|
||
"admin_stats_revenue_chart_custom_span": "Range: {days} d.",
|
||
"admin_stats_revenue_tooltip_day": "Day",
|
||
"admin_stats_revenue_avg_check": "Average ticket today: {value}",
|
||
"admin_stats_revenue_avg_none": "No successful payments today",
|
||
"admin_stats_revenue_avg_ticket_label": "Avg. ticket (today)",
|
||
"admin_stats_card_active_subs_caption": "Paid, trial, and free access combined",
|
||
"admin_stats_card_paid_caption": "Paid users separated from trial and free access",
|
||
"admin_stats_card_trial_caption": "Only real trial subscriptions",
|
||
"admin_stats_card_free_caption": "Manual extensions and bonus access",
|
||
"admin_stats_card_inactive_caption": "Share of all users is in the badge",
|
||
"admin_stats_revenue_last_7_calendar": "Last 7 calendar days total",
|
||
"admin_stats_revenue_prev_7_calendar": "Previous 7 days",
|
||
"admin_stats_revenue_growth": "vs previous 7 days: {value}%",
|
||
"admin_stats_revenue_growth_na": "Not enough history for 7×7 comparison",
|
||
"admin_stats_revenue_total_14": "14-day chart total",
|
||
"admin_stats_revenue_rolling_week": "Rolling 7 days",
|
||
"admin_stats_revenue_rolling_month": "Rolling 30 days",
|
||
"admin_stats_revenue_all_time": "All time",
|
||
"admin_stats_revenue_no_chart": "No data for chart",
|
||
"admin_stats_section_panel": "Remnawave panel",
|
||
"admin_stats_panel_unavailable": "Panel unavailable",
|
||
"admin_stats_section_panel_hint": "Live data from panel API",
|
||
"admin_stats_panel_unavailable_detail": "Check REMNAWAVE_* settings and panel API reachability.",
|
||
"admin_stats_panel_online": "Online",
|
||
"admin_stats_panel_active": "Active",
|
||
"admin_stats_panel_expired": "Expired",
|
||
"admin_stats_panel_disabled": "Disabled",
|
||
"admin_stats_panel_limited": "Limited",
|
||
"admin_stats_panel_total_users": "Total in panel",
|
||
"admin_stats_panel_nodes_online": "Nodes in breakdown",
|
||
"admin_stats_panel_nodes_online_hint": "Same as the number of rows in the per-node section below (7-day window from bandwidth or node metrics). Not the same as system.nodes.totalOnline from /system/stats, which often counts backends/inbounds and can exceed visible nodes.",
|
||
"admin_stats_panel_memory": "Memory",
|
||
"admin_stats_panel_bw_week": "Traffic 7 days",
|
||
"admin_stats_panel_bw_month": "Traffic 30 days",
|
||
"admin_stats_panel_inner_nodes": "Per node (7 days)",
|
||
"admin_stats_panel_inner_nodes_hint": "Traffic from bandwidth API; online users from node metrics, sorted by traffic",
|
||
"admin_stats_panel_node_users_online": "Online now: {count}",
|
||
"admin_stats_panel_cpu": "CPU",
|
||
"admin_stats_panel_nodes_empty": "No per-node breakdown from the panel",
|
||
"admin_stats_panel_nodes_overflow": "+{count} more",
|
||
"admin_stats_sync_last": "Last run",
|
||
"admin_stats_sync_processed": "Processed: {users} users, {subs} subscriptions",
|
||
"admin_stats_queue_users": " users",
|
||
"admin_stats_queue_groups": " groups",
|
||
"admin_id": "ID",
|
||
"admin_status_default": "Default",
|
||
"admin_status_current": "Current",
|
||
"admin_tariff_squads": "Squads",
|
||
"admin_tariff_premium": "Premium",
|
||
"admin_settings_badge_secret": "Secret",
|
||
"admin_settings_secret_configured": "Secret is set",
|
||
"admin_settings_secret_empty": "Not set",
|
||
"admin_settings_badge_override": "Override",
|
||
"admin_settings_badge_dirty": "Changed",
|
||
"admin_status_limited": "Limited",
|
||
"admin_status_expired": "Expired",
|
||
"admin_status_disabled": "Disabled",
|
||
"admin_status_not_configured": "Not configured",
|
||
"admin_status_bot_only": "Bot Only",
|
||
"admin_user_detail_title": "User #{id}",
|
||
"admin_user_avatar_open": "Open avatar",
|
||
"admin_user_avatar_title": "Avatar",
|
||
"admin_user_open_tg_profile": "Open Telegram",
|
||
"admin_user_open_tg_profile_hint": "Open Telegram profile",
|
||
"admin_user_open_tg_profile_id_hint": "The bot will send a profile button in Telegram.",
|
||
"admin_user_tg_profile_unavailable": "Telegram profile link is unavailable",
|
||
"admin_user_tg_profile_link_sent": "Link sent to Telegram",
|
||
"admin_user_tg_profile_link_failed": "Failed to send link",
|
||
"admin_user_profile_link_message": "User profile: <b>{name}</b>\nUser ID: <code>{user_id}</code>\nTelegram ID: <code>{telegram_id}</code>\n\nTap the button below to open the profile in Telegram.",
|
||
"admin_loading": "Loading…",
|
||
"admin_badge_banned": "Banned",
|
||
"admin_badge_active": "Active",
|
||
"admin_badge_subscription": "Subscription",
|
||
"admin_badge_no_subscription": "No subscription",
|
||
"admin_user_label_paid": "Total Paid",
|
||
"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",
|
||
"admin_user_invited_by_none": "—",
|
||
"admin_user_invitees_open": "Show",
|
||
"admin_user_open_related": "Open user card",
|
||
"admin_user_invitees_title": "Invited users",
|
||
"admin_user_invitees_description": "{name} · {count}",
|
||
"admin_user_col_user": "User",
|
||
"admin_user_section_links": "Links",
|
||
"admin_user_copy_tooltip": "Copy",
|
||
"admin_user_sub_link_copied": "Subscription link copied",
|
||
"admin_user_ref_link_copied": "Referral link copied",
|
||
"admin_user_tab_subscription": "Subscription",
|
||
"admin_user_tab_activity": "Activity",
|
||
"admin_user_tab_logs": "Logs",
|
||
"admin_user_tab_actions": "Actions",
|
||
"admin_user_logs_section_title": "User logs",
|
||
"admin_user_logs_admin_event": "Admin",
|
||
"admin_refresh": "Refresh",
|
||
"admin_user_label_active_until": "Active until",
|
||
"admin_user_label_tariff": "Tariff",
|
||
"admin_user_label_auto_renew": "Auto-renew",
|
||
"admin_user_label_main_traffic": "Main Traffic",
|
||
"admin_user_traffic_left": "Left: {left}",
|
||
"admin_user_label_premium_squads": "Premium Squads",
|
||
"user_label_hwid_devices": "HWID devices",
|
||
"user_override_unlimited_short": "Unlimited",
|
||
"user_hwid_limit_card_title": "HWID devices",
|
||
"user_hwid_limit_card_hint": "Manual device limit for this user. Empty value returns to the tariff or default limit.",
|
||
"user_hwid_limit_input": "Device limit",
|
||
"user_hwid_limit_input_hint": "Empty means tariff/default; 0 or the checkbox means unlimited.",
|
||
"user_hwid_limit_default_placeholder": "Tariff",
|
||
"user_hwid_limit_save": "Save",
|
||
"user_hwid_limit_status": "Current: {current}",
|
||
"user_hwid_limit_default": "Tariff / default",
|
||
"user_hwid_limit_unlimited": "Unlimited",
|
||
"user_hwid_limit_count": "{count} devices",
|
||
"user_hwid_limit_with_extra": "{total} devices ({base} + {extra})",
|
||
"hwid_limit_saved": "Device limit saved",
|
||
"hwid_limit_invalid": "Enter an integer device count from 0 to 1,000,000 or enable unlimited",
|
||
"user_premium_override_card_title": "Premium traffic",
|
||
"user_premium_override_card_hint": "Unlimited access and extra volume for premium squads on top of the tariff.",
|
||
"user_regular_override_card_title": "Main traffic",
|
||
"user_regular_override_card_hint": "Unlimited access and a persistent bonus on the main traffic limit.",
|
||
"user_regular_override_status_unlimited": "Current: unlimited",
|
||
"regular_override_saved": "Main traffic override saved",
|
||
"user_traffic_override_title": "Traffic overrides",
|
||
"user_traffic_override_hint": "Extra main or premium traffic limits on top of the tariff; unlimited can be applied to main traffic or premium squads.",
|
||
"user_regular_override_bonus": "Extra main traffic, GB",
|
||
"user_regular_override_bonus_hint": "Persistent bonus bytes added to the main traffic limit (not a balance top-up).",
|
||
"user_regular_override_status_bonus": "Main traffic now: +{gb} GB",
|
||
"user_regular_override_status_none": "No main-traffic bonus override",
|
||
"regular_override_invalid_bonus": "Invalid GB value for main traffic",
|
||
"user_premium_override_title": "Premium override",
|
||
"user_premium_override_hint": "Grant free unlimited access or extra premium traffic on top of the tariff limit.",
|
||
"user_premium_override_bonus_hint": "Ignored while unlimited premium is enabled.",
|
||
"user_premium_override_unlimited": "Unlimited premium",
|
||
"user_premium_override_bonus": "Extra premium traffic, GB",
|
||
"user_premium_override_save": "Save override",
|
||
"user_premium_override_status_bonus": "Current: +{gb} GB",
|
||
"user_premium_override_status_none": "No premium override",
|
||
"user_premium_unlimited_value": "∞ (used {used})",
|
||
"user_premium_unlimited_hint": "Unlimited (admin override)",
|
||
"premium_override_saved": "Premium override saved",
|
||
"premium_override_invalid_bonus": "Invalid GB value",
|
||
"user_traffic_grant_title": "Grant traffic",
|
||
"user_traffic_grant_hint": "Credit GB to the user's balance — same effect as a top-up purchase, but without payment. The panel limit and squads refresh immediately.",
|
||
"user_traffic_grant_kind": "Traffic kind",
|
||
"user_traffic_grant_kind_regular": "Regular",
|
||
"user_traffic_grant_kind_premium": "Premium",
|
||
"user_traffic_grant_gb": "GB to grant",
|
||
"user_traffic_grant_submit": "Grant",
|
||
"traffic_grant_invalid_gb": "Enter a positive number of GB",
|
||
"traffic_grant_regular_done": "+{gb} GB of regular traffic granted",
|
||
"traffic_grant_premium_done": "+{gb} GB of premium traffic granted",
|
||
"admin_user_no_active_subscription": "No active subscription",
|
||
"admin_user_history_title": "Subscription History · {count}",
|
||
"admin_user_history_no_tariff": "No tariff",
|
||
"admin_user_history_active": "Active",
|
||
"admin_user_history_status_panel": "History",
|
||
"admin_user_recent_payments_title": "Recent Payments · {count}",
|
||
"admin_user_no_payments": "No payments",
|
||
"admin_user_btn_reset_trial": "Reset Trial",
|
||
"admin_user_label_extend": "Extend Subscription",
|
||
"admin_user_label_extend_days": "Days",
|
||
"admin_user_extend_hwid_devices": "Also extend +{count} HWID devices",
|
||
"admin_user_extend_hwid_devices_aria": "Extend purchased HWID devices",
|
||
"admin_user_extend_hwid_devices_hint": "Active device top-ups will receive the same number of extra days.",
|
||
"admin_user_btn_extend": "Extend",
|
||
"admin_user_label_telegram_msg": "Telegram Message",
|
||
"admin_user_hint_telegram_msg": "Telegram HTML formatting supported",
|
||
"admin_user_placeholder_msg": "Message text",
|
||
"admin_user_btn_preview_tg": "Preview in Telegram",
|
||
"admin_user_btn_send_msg": "Send Message",
|
||
"admin_user_danger_zone_title": "Danger Zone",
|
||
"admin_user_danger_zone_subtitle": "These actions require confirmation and (for deletion) are irreversible",
|
||
"admin_user_btn_unban": "Unban user",
|
||
"admin_user_btn_ban": "Ban user",
|
||
"admin_user_btn_delete_account": "Delete account",
|
||
"admin_user_msg_confirm_title": "Send message to user?",
|
||
"admin_user_msg_confirm_recipient": "Recipient: {name}",
|
||
"admin_user_btn_confirm_send": "Confirm Send",
|
||
"admin_user_ban_confirm_title": "Ban user?",
|
||
"admin_user_ban_confirm_subtitle": "{name} will no longer be able to interact with the bot. This can be undone later.",
|
||
"admin_user_delete_confirm_title": "Delete user?",
|
||
"admin_user_delete_confirm_subtitle": "This action is irreversible. Bot database records and the Remnawave Panel user will be deleted.",
|
||
"admin_user_btn_confirm_delete": "Confirm Delete",
|
||
"admin_btn_add_premium_squad": "Add premium squad",
|
||
"admin_tariff_col_volume_gb": "Volume, GB",
|
||
"admin_tariff_col_price_rub": "Price, ₽",
|
||
"admin_tariff_col_price_stars": "Price, ⭐",
|
||
"admin_tariff_col_price_stars_full": "Price, ⭐ Stars",
|
||
"admin_tariff_col_period_months": "Period, mo.",
|
||
"admin_tariff_col_ref_inviter": "Inviter bonus",
|
||
"admin_tariff_col_ref_referee": "Friend bonus",
|
||
"admin_tariff_col_hwid_count": "+ devices",
|
||
"admin_tariff_label_hwid_count_full": "How many devices does this package add",
|
||
"admin_tariff_label_price_rub": "Price in Rubles",
|
||
"admin_tariff_label_price_stars": "Price in Telegram Stars",
|
||
"admin_tariff_label_ref_inviter": "Inviter bonus, days",
|
||
"admin_tariff_label_ref_referee": "Friend bonus, days",
|
||
"admin_aria_label_main_traffic": "Main traffic usage",
|
||
"admin_aria_label_premium_traffic": "Premium traffic usage",
|
||
"admin_btn_delete": "Delete",
|
||
"admin_promos_empty": "No promo codes found",
|
||
"admin_btn_create": "Create",
|
||
"admin_btn_campaign": "Campaign",
|
||
"admin_btn_tariff": "Tariff",
|
||
"admin_btn_sync": "Synchronize",
|
||
"admin_btn_syncing": "Synchronizing...",
|
||
"admin_btn_enable": "On",
|
||
"admin_btn_disable": "Off",
|
||
"admin_btn_show_more": "Show more",
|
||
"admin_settings_dirty_count": "Changes: {count}",
|
||
"admin_promo_col_bonus": "Bonus",
|
||
"admin_promo_col_activations": "Activations",
|
||
"admin_promo_col_valid_until": "Valid until",
|
||
"admin_promo_create_title": "Create promo code",
|
||
"admin_promo_label_bonus_days": "Bonus (days)",
|
||
"admin_promo_label_max_activations": "Max activations",
|
||
"admin_promo_label_valid_days": "Validity (days)",
|
||
"admin_ad_create_title": "New campaign",
|
||
"admin_ad_label_param": "start parameter",
|
||
"admin_ad_hint_param": "Unique identifier for the referral link",
|
||
"admin_ad_label_cost": "Cost, RUB",
|
||
"admin_ads_col_source": "Source",
|
||
"admin_ads_col_param": "Parameter",
|
||
"admin_ads_col_cost": "Cost",
|
||
"admin_ads_col_registrations": "Registrations",
|
||
"admin_ads_col_conversions": "Conversions",
|
||
"admin_no_data": "No data",
|
||
"admin_pagination_meta": "{current}/{total}",
|
||
"admin_prev_page": "Back",
|
||
"admin_next_page": "Next",
|
||
"admin_settings_hint": "Changes in the admin panel take precedence over .env. The 'Reset' button returns the value from environment variables.",
|
||
"admin_settings_legacy_tariffs_warning_title": "remnawave-tg-shop legacy compatibility",
|
||
"admin_settings_legacy_tariffs_warning_body": "These fields are only for the old mode without a JSON catalog. They do not apply when tariffs are configured in the dedicated Tariffs section.",
|
||
"admin_settings_legacy_tariffs_warning_link": "Open Tariffs",
|
||
"admin_settings_group_platega_common": "Common settings",
|
||
"admin_settings_group_platega_common_hint": "Merchant details, API URL, and return pages shared by all Platega buttons.",
|
||
"admin_settings_group_platega_sbp": "SBP/card button",
|
||
"admin_settings_group_platega_sbp_hint": "Visibility, method ID, and labels for the card or SBP payment button.",
|
||
"admin_settings_group_platega_crypto": "Crypto button",
|
||
"admin_settings_group_platega_crypto_hint": "Visibility, method ID, and labels for the crypto payment button.",
|
||
"admin_settings_group_platega_legacy": "Legacy compatibility",
|
||
"admin_settings_group_platega_legacy_hint": "Fallback method for old Platega callbacks and deployments.",
|
||
"admin_settings_group_legacy_tariff_periods": "Legacy subscription periods",
|
||
"admin_settings_group_legacy_tariff_periods_hint": "Monthly periods and prices for compatibility with old remnawave-tg-shop mode.",
|
||
"admin_settings_group_legacy_tariff_traffic": "Legacy traffic packages",
|
||
"admin_settings_group_legacy_tariff_traffic_hint": "Traffic packages for the old mode without a JSON tariff catalog.",
|
||
"admin_collapse_all": "Collapse all",
|
||
"admin_expand_all": "Expand all",
|
||
"admin_settings_params_count": "{count} parameters",
|
||
"admin_settings_overridden_count": "{count} override",
|
||
"admin_settings_fields_count": "{count} fields",
|
||
"admin_settings_field_log_admin_actions_label": "Log administrator actions",
|
||
"admin_settings_field_log_admin_actions_description": "When disabled, events from users listed in ADMIN_IDS are not stored in message logs.",
|
||
"admin_show": "Show",
|
||
"admin_hide": "Hide",
|
||
"admin_tariffs_stat_total": "Total tariffs",
|
||
"admin_tariffs_stat_default": "Default",
|
||
"admin_tariffs_stat_default_hint": "Used for new subscriptions",
|
||
"admin_tariffs_stat_disabled": "Disabled",
|
||
"admin_tariffs_stat_disabled_hint": "Hidden from showcase",
|
||
"admin_tariffs_catalog_empty": "The catalog is empty. Add your first tariff; a catalog JSON file will be created after saving.",
|
||
"admin_tariffs_trial_title": "Trial access",
|
||
"admin_tariffs_trial_subtitle": "Configure trial duration, traffic limit, and Remnawave squads from the tariff page.",
|
||
"admin_tariffs_trial_enabled": "Trial enabled",
|
||
"admin_tariffs_trial_without_telegram_enabled": "Trial without Telegram",
|
||
"admin_tariffs_trial_days": "Duration, days",
|
||
"admin_tariffs_trial_traffic": "Traffic limit, GB",
|
||
"admin_tariffs_trial_strategy": "Traffic reset strategy",
|
||
"admin_tariffs_trial_squads": "Trial Internal Squads",
|
||
"admin_tariffs_trial_squads_hint": "These squads are applied when trial is activated. Empty value falls back to USER_SQUAD_UUIDS.",
|
||
"admin_tariffs_trial_add_squad": "Add squad from panel",
|
||
"admin_tariffs_trial_group_switch": "Access",
|
||
"admin_tariffs_trial_group_switch_hint": "Turns trial activation on or off for users.",
|
||
"admin_tariffs_trial_group_general": "General settings",
|
||
"admin_tariffs_trial_group_general_hint": "Trial duration and traffic volume granted to the user.",
|
||
"admin_tariffs_trial_group_reset": "Traffic reset",
|
||
"admin_tariffs_trial_group_reset_hint": "Strategy Remnawave uses to refresh the trial traffic limit.",
|
||
"admin_tariffs_trial_group_squads": "Squads",
|
||
"admin_tariffs_trial_group_squads_hint": "Squads assigned to the user when trial access is activated.",
|
||
"admin_tariffs_referral_title": "Referral program",
|
||
"admin_tariffs_referral_subtitle": "Configure welcome bonus, grant rules, and disposable email protection.",
|
||
"admin_tariffs_referral_group_welcome": "Welcome bonus",
|
||
"admin_tariffs_referral_group_welcome_hint": "Days granted to an invited user after registration via referral link.",
|
||
"admin_tariffs_referral_welcome_bonus_days": "Welcome bonus, days",
|
||
"admin_tariffs_referral_without_telegram": "Grant welcome bonus without Telegram",
|
||
"admin_tariffs_referral_group_rules": "Rules and anti-abuse",
|
||
"admin_tariffs_referral_group_rules_hint": "Repeat-bonus limits and disposable email domains for no-Telegram accounts.",
|
||
"admin_tariffs_referral_one_bonus_per_referee": "One bonus per invited user",
|
||
"admin_tariffs_referral_legacy_refs": "Legacy ref links",
|
||
"admin_tariffs_referral_disposable_domains": "Disposable email domains",
|
||
"admin_tariffs_referral_disposable_domains_hint": "One domain per line or comma-separated. Subdomains are treated as matches too.",
|
||
"admin_tariffs_legacy_title": "Legacy tariff compatibility",
|
||
"admin_tariffs_legacy_subtitle": "Old remnawave-tg-shop periods and traffic packages used only when the JSON tariff catalog is not configured.",
|
||
"admin_tariffs_legacy_period": "Period",
|
||
"admin_tariffs_legacy_enabled": "Enabled",
|
||
"admin_tariffs_legacy_ref_inviter": "Inviter bonus",
|
||
"admin_tariffs_legacy_ref_referee": "Friend bonus",
|
||
"admin_tariffs_legacy_stars_traffic_packages": "Traffic packages, Stars",
|
||
"admin_tariffs_legacy_traffic_hint": "Format: 10:199,50:799",
|
||
"admin_tariff_tab_general": "General",
|
||
"admin_tariff_tab_pricing": "Prices",
|
||
"admin_tariff_tab_topup": "Top-ups",
|
||
"admin_tariff_tab_premium": "Premium",
|
||
"admin_tariff_tab_hwid": "Devices",
|
||
"admin_payment_rub": "Ruble payments",
|
||
"admin_payment_stars": "Telegram Stars payments",
|
||
"admin_appearance_theme_accent": "Accent",
|
||
"admin_settings_icon_empty": "Default icon",
|
||
"admin_settings_icon_default_value": "Default: {icon}",
|
||
"admin_settings_icon_picker_title": "Choose icon",
|
||
"admin_settings_icon_current": "Current icon",
|
||
"admin_settings_icon_use_default": "Use default",
|
||
"admin_search": "Search",
|
||
"admin_clear": "Clear",
|
||
"admin_save": "Save",
|
||
"admin_saving": "Saving...",
|
||
"admin_tariff_placeholder_name_en": "Standard",
|
||
"admin_tariff_placeholder_desc_en": "Base server pool",
|
||
"admin_tariff_placeholder_premium_name_en": "Premium servers",
|
||
"admin_tariff_label_premium_squads": "Premium Internal Squads",
|
||
"admin_themes_catalog_title": "Web App themes",
|
||
"admin_themes_catalog_sub": "Select the current theme from a card; edit appearance through files in the theme folder",
|
||
"admin_themes_use_primary_accent": "Use primary accent color",
|
||
"admin_themes_use_in_admin": "Use in admin panel",
|
||
"admin_themes_catalog_empty": "The catalog is empty. Add a theme folder to data/themes and refresh.",
|
||
"admin_themes_saved": "Themes saved",
|
||
"admin_themes_save_failed": "Failed to save themes",
|
||
"appearance_logo_uploaded_pending": "Logo uploaded and applied.",
|
||
"appearance_favicon_uploaded_pending": "Favicon uploaded and applied.",
|
||
"admin_no_description": "No description",
|
||
"admin_tariff_model_traffic": "Traffic",
|
||
"admin_tariff_model_periods": "Periods",
|
||
"admin_tariff_devices": "Devices",
|
||
"admin_btn_configure": "Configure",
|
||
"admin_btn_set_default": "Set Default",
|
||
"admin_btn_delete_tariff": "Delete Tariff",
|
||
"admin_months_short": "mo.",
|
||
"admin_at": "for",
|
||
"admin_tariff_traffic_packages": "Traffic packages",
|
||
"admin_btn_create_tariff": "Create Tariff",
|
||
"admin_enabled": "Enabled",
|
||
"admin_disabled": "Disabled",
|
||
"admin_broadcast_title": "Broadcast",
|
||
"admin_broadcast_subtitle": "Delivery via message queue",
|
||
"admin_broadcast_label_audience": "Audience",
|
||
"admin_broadcast_label_text": "Message Text",
|
||
"admin_broadcast_hint_text": "Telegram HTML formatting supported",
|
||
"admin_btn_queue": "Queue Message",
|
||
"admin_btn_sending": "Sending...",
|
||
"admin_broadcast_stat_queued": "Queued",
|
||
"admin_broadcast_stat_failed": "Failed",
|
||
"admin_broadcast_started": "Broadcast started",
|
||
"admin_broadcast_failed": "Broadcast failed",
|
||
"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_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_panel_api_url_label": "Remnawave API URL",
|
||
"admin_settings_field_panel_api_url_description": "For example, https://panel.example.com/api.",
|
||
"admin_settings_field_panel_api_key_label": "Remnawave API key",
|
||
"admin_settings_field_panel_api_key_description": "Secret API key for the panel.",
|
||
"admin_settings_field_panel_api_total_timeout_seconds_label": "Remnawave API total timeout",
|
||
"admin_settings_field_panel_api_total_timeout_seconds_description": "Maximum total time for one Remnawave API request, in seconds.",
|
||
"admin_settings_field_panel_api_connect_timeout_seconds_label": "Remnawave API connect timeout",
|
||
"admin_settings_field_panel_api_connect_timeout_seconds_description": "Maximum time to get or open a Remnawave API connection, in seconds.",
|
||
"admin_settings_field_panel_api_sock_connect_timeout_seconds_label": "Remnawave API TCP/TLS timeout",
|
||
"admin_settings_field_panel_api_sock_connect_timeout_seconds_description": "Maximum TCP/TLS connection time for Remnawave API, in seconds.",
|
||
"admin_settings_field_panel_api_sock_read_timeout_seconds_label": "Remnawave API read timeout",
|
||
"admin_settings_field_panel_api_sock_read_timeout_seconds_description": "Maximum time to wait for response data from Remnawave API, in seconds.",
|
||
"admin_settings_field_panel_webhook_secret_label": "Remnawave webhook secret",
|
||
"admin_settings_field_panel_webhook_secret_description": "Set the secret in Remnawave Panel and paste the same value here to verify incoming panel webhooks.",
|
||
"admin_settings_field_user_squad_uuids_label": "Default Internal Squads",
|
||
"admin_settings_field_user_squad_uuids_description": "Comma-separated UUIDs for the legacy mode without a JSON tariff catalog.",
|
||
"admin_settings_field_user_external_squad_uuid_label": "Default External Squad",
|
||
"admin_settings_field_user_external_squad_uuid_description": "Optional External Squad UUID for new users.",
|
||
"admin_settings_field_webapp_title_label": "Web App title",
|
||
"admin_settings_field_subscription_mini_app_url_label": "Public Mini App URL",
|
||
"admin_settings_field_subscription_mini_app_url_description": "For example, https://app.example.com/.",
|
||
"admin_settings_field_webapp_primary_color_label": "WebApp Primary Color",
|
||
"admin_settings_field_webapp_logo_url_label": "WebApp Logo URL",
|
||
"admin_settings_field_webapp_favicon_use_custom_label": "Use separate favicon",
|
||
"admin_settings_field_webapp_favicon_url_label": "Separate favicon URL",
|
||
"admin_settings_field_webapp_logo_favicon_url_label": "Favicon from logo",
|
||
"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_subscription_purchase_description_enabled_label": "Show subscription description",
|
||
"admin_settings_field_subscription_purchase_description_enabled_description": "Shows this text before the user chooses a purchase or renewal period.",
|
||
"admin_settings_field_subscription_purchase_description_ru_label": "Subscription description (RU)",
|
||
"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",
|
||
"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_lava_enabled_label": "Enabled",
|
||
"admin_settings_field_lava_shop_id_label": "Shop ID",
|
||
"admin_settings_field_lava_secret_key_label": "Secret key",
|
||
"admin_settings_field_lava_secret_key_description": "Signs outgoing API requests (HMAC-SHA256 in the Signature header).",
|
||
"admin_settings_field_lava_webhook_secret_label": "Webhook secret",
|
||
"admin_settings_field_lava_webhook_secret_description": "The shop's additional key used to verify webhook signatures. Leave empty to reuse the secret key.",
|
||
"admin_settings_field_lava_base_url_label": "Base URL",
|
||
"admin_settings_field_lava_return_url_label": "Return URL",
|
||
"admin_settings_field_lava_lifetime_minutes_label": "Payment link lifetime (minutes)",
|
||
"admin_settings_field_lava_lifetime_minutes_description": "1..7200; leave empty for the LAVA default.",
|
||
"admin_settings_field_lava_include_services_label": "Payment services filter",
|
||
"admin_settings_field_lava_include_services_description": "Comma-separated LAVA pay services shown on the payment page (e.g. card,sbp). Empty shows everything enabled for the shop.",
|
||
"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_wata_enabled_label": "Enabled",
|
||
"admin_settings_field_wata_api_token_label": "API token",
|
||
"admin_settings_field_wata_base_url_label": "Base URL",
|
||
"admin_settings_field_wata_return_url_label": "Return URL",
|
||
"admin_settings_field_wata_failed_url_label": "Failed URL",
|
||
"admin_settings_field_wata_link_ttl_minutes_label": "Payment link lifetime (minutes)",
|
||
"admin_settings_field_wata_link_ttl_minutes_description": "15..43200; default 15 minutes. Wata requires more than 10 minutes and allows up to 30 days.",
|
||
"admin_settings_field_wata_webhook_verify_signature_label": "Verify webhook signature",
|
||
"admin_settings_field_wata_public_key_label": "Webhook public key",
|
||
"admin_settings_field_wata_public_key_description": "Optional. If empty, the backend fetches it from Wata.",
|
||
"admin_settings_field_wata_trusted_ips_label": "Trusted IPs",
|
||
"admin_settings_field_wata_trusted_ips_description": "Comma-separated IP addresses accepted for Wata webhooks.",
|
||
"admin_settings_field_heleket_enabled_label": "Enabled",
|
||
"admin_settings_field_heleket_merchant_id_label": "Merchant ID",
|
||
"admin_settings_field_heleket_api_key_label": "Payment API key",
|
||
"admin_settings_field_heleket_base_url_label": "Base URL",
|
||
"admin_settings_field_heleket_currency_label": "Invoice currency",
|
||
"admin_settings_field_heleket_currency_description": "Fiat or crypto code (RUB, USD, USDT).",
|
||
"admin_settings_field_heleket_to_currency_label": "Target crypto",
|
||
"admin_settings_field_heleket_to_currency_description": "Optional target cryptocurrency for conversion.",
|
||
"admin_settings_field_heleket_network_label": "Blockchain network",
|
||
"admin_settings_field_heleket_network_description": "Optional blockchain network code (tron, bsc, eth).",
|
||
"admin_settings_field_heleket_return_url_label": "Return URL",
|
||
"admin_settings_field_heleket_success_url_label": "Success URL",
|
||
"admin_settings_field_heleket_lifetime_seconds_label": "Invoice lifetime (seconds)",
|
||
"admin_settings_field_heleket_lifetime_seconds_description": "300..43200; Heleket defaults to 3600.",
|
||
"admin_settings_field_heleket_verify_webhook_signature_label": "Verify webhook signature",
|
||
"admin_settings_field_heleket_trusted_ips_label": "Trusted IPs",
|
||
"admin_settings_field_heleket_trusted_ips_description": "Comma-separated IP addresses accepted for Heleket webhooks.",
|
||
"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_trial_without_telegram_enabled_label": "Trial Without Telegram",
|
||
"admin_settings_field_trial_without_telegram_enabled_description": "If disabled, email-only users must link Telegram before activating a trial. Disposable email domains always require Telegram.",
|
||
"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_referral_welcome_bonus_without_telegram_enabled_label": "Referral Welcome Bonus Without Telegram",
|
||
"admin_settings_field_referral_welcome_bonus_without_telegram_enabled_description": "If disabled, email-only users must link Telegram before receiving the referral welcome bonus. Disposable email domains always require Telegram.",
|
||
"admin_settings_field_legacy_refs_label": "Legacy Refs",
|
||
"admin_settings_field_disposable_email_domains_label": "Disposable Email Domains",
|
||
"admin_settings_field_disposable_email_domains_description": "Comma-separated domains. Users without Telegram using these emails cannot claim trial or referral welcome bonus.",
|
||
"admin_settings_field_disposable_email_domains_placeholder": "mailinator.com,temp-mail.org,yopmail.com",
|
||
"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_email_notifications_enabled_label": "Subscription email notifications",
|
||
"admin_settings_field_subscription_email_notifications_enabled_description": "When enabled, subscription lifecycle notifications are mirrored to linked user email addresses.",
|
||
"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_subscription_notify_hours_before_label": "Subscription Notify Hours 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_support_label": "Log Support",
|
||
"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_log_support_thread_id_label": "Support thread ID",
|
||
"admin_settings_field_log_support_thread_id_description": "Log chat thread for support ticket notifications.",
|
||
"admin_settings_field_support_tickets_enabled_label": "Support tickets enabled",
|
||
"admin_settings_field_support_tickets_enabled_description": "Enable the support tickets section in the user account and allow users to create tickets.",
|
||
"admin_settings_field_support_admin_email_notifications_enabled_label": "Admin email notifications",
|
||
"admin_settings_field_support_admin_email_notifications_enabled_description": "When disabled, new tickets and user replies are sent only to Telegram and the log chat.",
|
||
"admin_settings_field_support_admin_notification_cooldown_seconds_label": "Telegram notification cooldown",
|
||
"admin_settings_field_support_admin_notification_cooldown_seconds_description": "Minimum seconds between repeated Telegram/log notifications for the same unread ticket.",
|
||
"admin_settings_field_support_admin_email_cooldown_seconds_label": "Email notification cooldown",
|
||
"admin_settings_field_support_admin_email_cooldown_seconds_description": "Minimum seconds between repeated email notifications for the same unread ticket.",
|
||
"admin_settings_field_support_ticket_max_body_length_label": "Max message length",
|
||
"admin_settings_field_support_ticket_max_body_length_description": "Maximum number of characters in a ticket message.",
|
||
"admin_settings_field_support_ticket_max_subject_length_label": "Max subject length",
|
||
"admin_settings_field_support_ticket_max_subject_length_description": "Maximum number of characters in a ticket subject.",
|
||
"admin_settings_field_support_ticket_rate_limit_per_hour_label": "Ticket limit per hour",
|
||
"admin_settings_field_support_ticket_rate_limit_per_hour_description": "How many new tickets a user can create per hour. 0 means unlimited.",
|
||
"admin_settings_field_backup_enabled_label": "Backups enabled",
|
||
"admin_settings_field_backup_enabled_description": "The worker periodically builds a ZIP archive and sends it to Telegram.",
|
||
"admin_settings_field_backup_chat_id_label": "Backup chat ID",
|
||
"admin_settings_field_backup_chat_id_description": "Where ZIP archives are sent. Falls back to LOG_CHAT_ID when empty.",
|
||
"admin_settings_field_backup_thread_id_label": "Backup thread ID",
|
||
"admin_settings_field_backup_thread_id_description": "Optional topic/thread ID. Falls back to LOG_THREAD_ID when empty.",
|
||
"admin_settings_field_backup_interval_seconds_label": "Backup period (sec.)",
|
||
"admin_settings_field_backup_interval_seconds_description": "Default is 3600: run on the hour boundary (12:00, 13:00, etc.).",
|
||
"admin_settings_field_backup_local_retention_label": "Archives to keep",
|
||
"admin_settings_field_backup_local_retention_description": "How many latest ZIP archives to keep in data/backups on the server.",
|
||
"admin_settings_field_backup_compose_enabled_label": "Include compose folder",
|
||
"admin_settings_field_backup_compose_enabled_description": "Adds a /app/compose-source snapshot. If the folder is not mounted, the DB backup is still created.",
|
||
"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",
|
||
"wa_auth_checking_password": "Checking password...",
|
||
"wa_auth_password_required": "Enter your password",
|
||
"wa_auth_password_login_failed": "Could not sign in with this email and password. You can use an email code instead.",
|
||
"wa_password_placeholder": "Password",
|
||
"wa_login_password_submit": "Sign in",
|
||
"wa_login_use_password": "Use password",
|
||
"wa_login_use_email_code": "Use email code",
|
||
"wa_settings_set_password_action": "Set password",
|
||
"wa_settings_change_password_action": "Change password",
|
||
"wa_password_modal_title": "Email password",
|
||
"wa_password_modal_desc": "Enter the new password twice. Then we will send a code to your linked email.",
|
||
"wa_password_modal_code_desc": "Enter the email code to confirm the password.",
|
||
"wa_password_new_placeholder": "New password",
|
||
"wa_password_confirm_placeholder": "Repeat password",
|
||
"wa_password_send_code_action": "Get code",
|
||
"wa_password_confirm_action": "Save password",
|
||
"wa_password_too_short": "Password must be at least 8 characters",
|
||
"wa_password_too_long": "Password must be at most 128 characters",
|
||
"wa_password_mismatch": "Passwords do not match",
|
||
"wa_password_code_send_failed": "Could not send the code",
|
||
"wa_password_set_failed": "Could not save password",
|
||
"wa_password_set_success": "Password saved",
|
||
"wa_nav_support": "Support",
|
||
"wa_support_title": "Support",
|
||
"wa_support_subtitle": "Tickets and replies from the team",
|
||
"wa_support_new_ticket": "New request",
|
||
"wa_support_contact_support": "Contact support",
|
||
"wa_support_subject": "Subject",
|
||
"wa_support_subject_placeholder": "Briefly describe the issue",
|
||
"wa_support_category": "Category",
|
||
"wa_support_priority": "Priority",
|
||
"wa_support_message": "Message",
|
||
"wa_support_message_placeholder": "Tell us what happened. More details help us respond faster.",
|
||
"wa_support_create": "Create ticket",
|
||
"wa_support_creating": "Creating...",
|
||
"wa_support_empty": "No tickets yet",
|
||
"wa_support_no_open_tickets": "No open requests",
|
||
"wa_support_empty_hint": "Create a new request if you need help with billing, connection, or your account.",
|
||
"wa_support_not_found": "Ticket not found",
|
||
"wa_support_send": "Send",
|
||
"wa_support_reply_placeholder": "Write a reply",
|
||
"wa_support_closed_hint": "This ticket is closed",
|
||
"wa_support_create_failed": "Could not create ticket",
|
||
"wa_support_send_failed": "Could not send reply",
|
||
"wa_support_filter_all": "All",
|
||
"wa_support_filter_active": "Active",
|
||
"wa_support_filter_label": "Ticket filter",
|
||
"wa_support_ticket_number": "Ticket #{id}",
|
||
"wa_support_no_messages": "No messages yet",
|
||
"wa_support_role_user": "You",
|
||
"wa_support_role_admin": "Support",
|
||
"wa_support_role_system": "System",
|
||
"wa_support_internal_note": "Internal note",
|
||
"wa_support_open_ticket": "Open ticket",
|
||
"wa_support_open_ticket_hint": "Open the ticket in Mini App.",
|
||
"wa_support_category_billing": "Billing",
|
||
"wa_support_category_technical": "Technical",
|
||
"wa_support_category_account": "Account",
|
||
"wa_support_category_other": "Other",
|
||
"wa_support_priority_low": "Low",
|
||
"wa_support_priority_normal": "Normal",
|
||
"wa_support_priority_high": "High",
|
||
"wa_support_priority_urgent": "Urgent",
|
||
"wa_support_status_open": "Open",
|
||
"wa_support_status_awaiting_user": "Awaiting user",
|
||
"wa_support_status_awaiting_admin": "Awaiting admin",
|
||
"wa_support_status_resolved": "Resolved",
|
||
"wa_support_status_closed": "Closed",
|
||
"admin_nav_support": "Support",
|
||
"admin_section_support_title": "Support",
|
||
"admin_section_support_subtitle": "Ticket inbox and user replies",
|
||
"admin_support_select_ticket": "Select a ticket",
|
||
"admin_support_reply_placeholder": "Reply",
|
||
"admin_support_filter_closed": "Closed",
|
||
"admin_support_filter_all_priorities": "Any priority",
|
||
"admin_support_filter_all_categories": "All categories",
|
||
"admin_support_role_admin": "Admin",
|
||
"admin_support_open_user": "User card",
|
||
"admin_support_tariff": "Tariff",
|
||
"admin_support_remaining": "Remaining",
|
||
"admin_support_unread": "Unread",
|
||
"admin_support_summary": "Support summary",
|
||
"admin_support_ticket_dialog": "Support conversation",
|
||
"admin_support_sort_importance_desc": "Most important",
|
||
"admin_sort_updated_desc": "Newest activity",
|
||
"admin_sort_updated_asc": "Oldest activity",
|
||
"admin_sort_created_desc": "Newest created",
|
||
"admin_sort_created_asc": "Oldest created",
|
||
"wa_install_title": "Install and configure",
|
||
"wa_install_subtitle": "Choose your platform and app.",
|
||
"wa_install_platform": "Platform",
|
||
"wa_install_app": "App",
|
||
"wa_install_loading": "Loading instructions...",
|
||
"wa_install_unavailable": "Instructions are unavailable.",
|
||
"wa_install_featured": "Recommended",
|
||
"wa_install_subscription_link": "Subscription link",
|
||
"wa_install_subscription_link_hint": "Scan the QR code or copy the link.",
|
||
"wa_install_qr_alt": "Subscription QR code",
|
||
"wa_install_copy_subscription_link": "Copy link",
|
||
"wa_install_share": "Share",
|
||
"wa_install_share_copied": "Install guide link copied",
|
||
"wa_app_launch_title": "Opening app",
|
||
"wa_app_launch_opening_hint": "Opening the app on this device...",
|
||
"wa_app_launch_hint": "If the app did not open automatically, tap the button below.",
|
||
"wa_app_launch_button": "Open app",
|
||
"wa_app_launch_retry_button": "Open again",
|
||
"wa_app_launch_done_title": "Settings added",
|
||
"wa_app_launch_done_hint": "If the app opened, you can close this window.",
|
||
"wa_app_launch_close_button": "Close window",
|
||
"wa_app_launch_unavailable_title": "App link unavailable",
|
||
"wa_app_launch_unavailable_hint": "Return to Telegram and try again.",
|
||
"admin_settings_section_subscription_guides": "Install guides",
|
||
"admin_settings_field_subscription_guides_enabled_label": "Embedded install guides",
|
||
"admin_settings_field_subscription_guides_enabled_description": "Open install instructions inside the Web App instead of an external connect page.",
|
||
"admin_settings_field_subscription_guides_bot_menu_enabled_label": "Open install guides from bot",
|
||
"admin_settings_field_subscription_guides_bot_menu_enabled_description": "Use the Telegram Mini App install screen for bot connect buttons and show public install guide links.",
|
||
"admin_settings_field_subscription_page_config_panel_enabled_label": "Use Remnawave Panel config",
|
||
"admin_settings_field_subscription_page_config_panel_enabled_description": "Fetch Subscription Page config from Remnawave Panel by the user's subscription short UUID.",
|
||
"admin_settings_field_subscription_page_config_json_override_enabled_label": "Enable admin JSON override",
|
||
"admin_settings_field_subscription_page_config_json_override_enabled_description": "Use the JSON field below instead of Remnawave Panel config. Disabled by default.",
|
||
"admin_settings_field_subscription_page_config_path_label": "Subscription Page config path",
|
||
"admin_settings_field_subscription_page_config_path_description": "Fallback path to a Remnawave Subscription Page v1 JSON config file.",
|
||
"admin_settings_field_subscription_page_config_path_placeholder": "data/subpage-config/multiapp.json",
|
||
"admin_settings_field_subscription_page_config_json_label": "Subscription Page config JSON",
|
||
"admin_settings_field_subscription_page_config_json_description": "Optional admin JSON override. It is applied only when the JSON override switch is enabled.",
|
||
"admin_settings_field_subscription_page_config_json_placeholder": "{\n \"version\": \"1\"\n}",
|
||
"admin_settings_json_upload": "Load .json",
|
||
"admin_nav_translations": "Translations",
|
||
"admin_section_translations_title": "Translations",
|
||
"admin_section_translations_subtitle": "Runtime localization string overrides from DB and data/locales-overrides.json",
|
||
"admin_translations_saved": "Translations saved",
|
||
"admin_translations_validation_errors": "Errors: {errors}",
|
||
"admin_translations_save_error": "Could not save translations: {error}",
|
||
"admin_translations_base_value": "Base text",
|
||
"admin_translations_search_placeholder": "Search keys and text",
|
||
"admin_translations_hint": "Overrides are stored in DB and mirrored to {path}.",
|
||
"admin_translations_keys_count": "Keys: {count}",
|
||
"admin_translations_no_matches": "No matching strings",
|
||
"admin_translations_group_admin": "Admin panel",
|
||
"admin_translations_group_admin_hint": "Navigation, tables, forms, dialogs, and admin-only labels.",
|
||
"admin_translations_group_admin_navigation": "Admin navigation and shared UI",
|
||
"admin_translations_group_admin_navigation_hint": "Sidebar, section headers, toolbar actions, filters, and shared controls.",
|
||
"admin_translations_group_admin_dashboard": "Admin dashboard and stats",
|
||
"admin_translations_group_admin_dashboard_hint": "Dashboard cards, revenue charts, panel sync status, and monitoring copy.",
|
||
"admin_translations_group_admin_users": "Admin users",
|
||
"admin_translations_group_admin_users_hint": "User lists, user cards, bans, grants, premium overrides, and direct messages.",
|
||
"admin_translations_group_admin_payments": "Admin payments",
|
||
"admin_translations_group_admin_payments_hint": "Payment tables, payment details, exports, provider labels, and payment stats.",
|
||
"admin_translations_group_admin_promos_marketing": "Admin promos, ads, and broadcasts",
|
||
"admin_translations_group_admin_promos_marketing_hint": "Promo management, ad campaigns, marketing tools, and broadcast workflows.",
|
||
"admin_translations_group_admin_tariffs": "Admin tariffs",
|
||
"admin_translations_group_admin_tariffs_hint": "Tariff catalog, tariff dialogs, legacy tariff rows, and trial tariff widgets.",
|
||
"admin_translations_group_admin_support": "Admin support inbox",
|
||
"admin_translations_group_admin_support_hint": "Support ticket inbox, ticket filters, admin replies, and support statuses.",
|
||
"admin_translations_group_admin_appearance": "Admin appearance",
|
||
"admin_translations_group_admin_appearance_hint": "Theme catalog, branding, logo, favicon, and public page links.",
|
||
"admin_translations_group_admin_settings_payments": "Admin payment settings",
|
||
"admin_translations_group_admin_settings_payments_hint": "Payment method toggles, prices, provider credentials, and webhook settings.",
|
||
"admin_translations_group_admin_settings_subscriptions": "Admin subscription settings",
|
||
"admin_translations_group_admin_settings_subscriptions_hint": "Panel connection, default squads, trials, referrals, device limits, and guides.",
|
||
"admin_translations_group_admin_settings_notifications": "Admin notifications and logs",
|
||
"admin_translations_group_admin_settings_notifications_hint": "Logging, required channel, subscription notifications, and support limits.",
|
||
"admin_translations_group_admin_settings": "Admin settings",
|
||
"admin_translations_group_admin_settings_hint": "Settings screen groups, subsections, helper text, and uncategorized settings.",
|
||
"admin_translations_group_admin_translations": "Admin translations",
|
||
"admin_translations_group_admin_translations_hint": "Translation override screen, language controls, and locale group labels.",
|
||
"admin_translations_group_admin_logs": "Admin logs and exports",
|
||
"admin_translations_group_admin_logs_hint": "Activity logs, log exports, CSV headers, and event detail labels.",
|
||
"admin_translations_group_admin_misc": "Admin miscellaneous",
|
||
"admin_translations_group_admin_misc_hint": "Older bot-admin labels and admin-only strings that do not fit another section.",
|
||
"admin_translations_group_webapp": "Mini App",
|
||
"admin_translations_group_webapp_hint": "User-facing Mini App screens, navigation, settings, and toasts.",
|
||
"admin_translations_group_bot_menu": "Telegram bot",
|
||
"admin_translations_group_bot_menu_hint": "Start menu, inline buttons, language selector, and bot-only flows.",
|
||
"admin_translations_group_subscriptions": "Subscriptions and devices",
|
||
"admin_translations_group_subscriptions_hint": "Subscription status, install guides, traffic packages, trials, and devices.",
|
||
"admin_translations_group_payments": "Payments",
|
||
"admin_translations_group_payments_hint": "Payment provider flows, invoices, payment methods, and checkout messages.",
|
||
"admin_translations_group_support": "Support",
|
||
"admin_translations_group_support_hint": "Support links, ticket inbox copy, ticket statuses, and notifications.",
|
||
"admin_translations_group_referrals_promos": "Referrals and promos",
|
||
"admin_translations_group_referrals_promos_hint": "Referral program, invite copy, promo codes, and bonuses.",
|
||
"admin_translations_group_auth_security": "Auth and security",
|
||
"admin_translations_group_auth_security_hint": "Login, email verification, account linking, and security messages.",
|
||
"admin_translations_group_emails": "Emails",
|
||
"admin_translations_group_emails_hint": "Transactional emails sent to users: login codes, payments, account merges, and reminders.",
|
||
"admin_translations_group_notifications_sync": "Notifications and sync",
|
||
"admin_translations_group_notifications_sync_hint": "Admin notifications, panel sync, logs, and background status messages.",
|
||
"admin_translations_group_common": "Common",
|
||
"admin_translations_group_common_hint": "Shared buttons, statuses, validation errors, and uncategorized strings.",
|
||
"admin_translations_file_write_warning": "Translations saved in DB, but JSON file was not updated",
|
||
"admin_add": "Add",
|
||
"admin_translations_fallback_value": "Fallback",
|
||
"admin_translations_languages_title": "Languages",
|
||
"admin_translations_languages_hint": "Add override-only languages without adding base locale files.",
|
||
"admin_translations_language_placeholder": "de, uk, pt-BR",
|
||
"admin_translations_language_custom": "Custom",
|
||
"admin_translations_language_invalid": "Invalid language code",
|
||
"admin_translations_language_exists": "{code} already exists",
|
||
"admin_translations_audience_all": "All",
|
||
"admin_translations_audience_user": "User-visible",
|
||
"admin_translations_audience_internal": "Admin/internal",
|
||
"admin_translations_audience_user_hint": "Mini App, bot, payment, subscription, support, and auth copy.",
|
||
"admin_translations_audience_internal_hint": "Admin panel, logs, sync statuses, and service notifications.",
|
||
"admin_actions": "Actions",
|
||
"admin_ad_created": "Campaign created",
|
||
"admin_ad_deleted": "Campaign deleted",
|
||
"admin_appearance_brand_sub": "Upload a logo as a file or from a URL",
|
||
"admin_appearance_brand_title": "Logo",
|
||
"admin_appearance_favicon_upload_failed": "Failed to upload favicon",
|
||
"admin_appearance_favicon_upload_file": "Upload favicon",
|
||
"admin_appearance_favicon_upload_url": "From URL",
|
||
"admin_appearance_favicon_uploaded_pending": "Favicon uploaded and applied.",
|
||
"admin_appearance_logo_upload_failed": "Failed to upload logo",
|
||
"admin_appearance_logo_upload_file": "Upload file",
|
||
"admin_appearance_logo_upload_url": "From URL",
|
||
"admin_appearance_logo_uploaded_pending": "Logo uploaded and applied.",
|
||
"admin_appearance_preview_theme": "Preview",
|
||
"admin_appearance_theme_accent_empty": "Not set",
|
||
"admin_appearance_theme_accent_placeholder": "Not set",
|
||
"admin_appearance_theme_home_logo_scale": "Home and login logo",
|
||
"admin_appearance_theme_home_logo_scale_desktop": "Desktop logo scale",
|
||
"admin_appearance_theme_home_logo_scale_mobile": "Mobile logo scale",
|
||
"admin_appearance_themes_sub": "Global theme, accent color, and preview",
|
||
"admin_appearance_themes_title": "Themes",
|
||
"admin_appearance_use_custom_favicon": "Use a separate favicon",
|
||
"admin_backups_create": "Create backup",
|
||
"admin_backups_create_done": "Backup created",
|
||
"admin_backups_create_failed": "Failed to create backup",
|
||
"admin_backups_creating": "Creating...",
|
||
"admin_backups_pagination_meta": "{from}-{to} / {total}",
|
||
"admin_btn_add_squad": "Add squad",
|
||
"admin_btn_ban": "Block user",
|
||
"admin_btn_cancel": "Cancel",
|
||
"admin_btn_confirm_delete": "Confirm deletion",
|
||
"admin_btn_confirm_send": "Confirm send",
|
||
"admin_btn_delete_account": "Delete account",
|
||
"admin_btn_preview_tg": "Preview in Telegram",
|
||
"admin_btn_save_tariff": "Save tariff",
|
||
"admin_btn_send_msg": "Send message",
|
||
"admin_btn_unban": "Unblock user",
|
||
"admin_days_short": "d",
|
||
"admin_load_failed": "Failed to load data",
|
||
"admin_loading_squads": "Loading list from panel...",
|
||
"admin_message_preview_failed": "Failed to send preview",
|
||
"admin_message_preview_sent": "Preview sent to Telegram",
|
||
"admin_nav_appearance": "Appearance",
|
||
"admin_nav_title": "Admin panel",
|
||
"admin_no": "No",
|
||
"admin_pagination_next": "Next",
|
||
"admin_pagination_prev": "Back",
|
||
"admin_premium_override_invalid_bonus": "Invalid GB value",
|
||
"admin_regular_override_invalid_bonus": "Invalid main traffic GB value",
|
||
"admin_regular_override_saved": "Main traffic override saved",
|
||
"admin_section_appearance_subtitle": "Logo, themes, and Mini App accent colors",
|
||
"admin_section_appearance_title": "Appearance",
|
||
"admin_select": "Select",
|
||
"admin_send": "Send",
|
||
"admin_settings_saved": "Settings saved",
|
||
"admin_status_banned": "Banned",
|
||
"admin_status_subscription": "Subscription",
|
||
"admin_support_send_failed": "Send failed",
|
||
"admin_tariff_btn_package_rub": "Package ₽",
|
||
"admin_tariff_btn_package_stars": "Package ⭐",
|
||
"admin_tariff_btn_period": "Period",
|
||
"admin_tariff_create_subtitle": "The catalog will be saved to JSON after confirmation",
|
||
"admin_tariff_create_title": "New tariff",
|
||
"admin_tariff_currency_supported": "Available",
|
||
"admin_tariff_currency_unsupported": "Blocked",
|
||
"admin_tariff_default_currency": "Payment currency",
|
||
"admin_tariff_default_updated": "Default tariff updated",
|
||
"admin_tariff_delete_subtitle": "Tariff {key} will disappear from the sales catalog.",
|
||
"admin_tariff_delete_title": "Delete tariff?",
|
||
"admin_tariff_deleted": "Tariff deleted",
|
||
"admin_tariff_edit_title": "Tariff settings",
|
||
"admin_tariff_enabled_hint": "A disabled tariff is hidden from the bot/Mini App, but active subscriptions on it keep working",
|
||
"admin_tariff_error_delete_last_enabled": "Cannot delete the last enabled tariff",
|
||
"admin_tariff_error_key_exists": "A tariff with this key already exists",
|
||
"admin_tariff_error_key_required": "Enter a tariff key",
|
||
"admin_tariff_error_min_enabled": "At least one tariff must be enabled",
|
||
"admin_tariff_hidden": "Tariff is hidden from users",
|
||
"admin_tariff_hint_conversion": "This rate converts the remaining subscription period to gigabytes when a user switches from Period to Traffic",
|
||
"admin_tariff_hint_hwid": "How many devices can use the subscription at the same time. Empty means use the .env value; 0 means unlimited",
|
||
"admin_tariff_hint_key": "Latin characters, no spaces. Used in payments and subscriptions; changing it after publication is not recommended",
|
||
"admin_tariff_hint_premium_name_en": "Optional for the English interface.",
|
||
"admin_tariff_hint_premium_name_ru": "This text replaces \"Premium servers\" in the account, top-ups, and limit cards.",
|
||
"admin_tariff_hint_premium_squads": "Remnawave squads available only to owners of this tariff. Traffic is counted by their accessible nodes",
|
||
"admin_tariff_hint_premium_traffic_limit": "How many GB through premium squads are included each month. 0 or empty means there is no separate premium limit",
|
||
"admin_tariff_hint_squads": "Remnawave squads this tariff connects the user to. Select one or more",
|
||
"admin_tariff_hint_traffic_limit": "How many GB are included every month. 0 means unlimited traffic. Extra packages can be sold on the Top-ups tab",
|
||
"admin_tariff_hwid_packages_subtitle": "Extends the limit from the General tab. Each row is a \"+N devices for N currency units\" package",
|
||
"admin_tariff_hwid_packages_title": "Extra device packages (HWID)",
|
||
"admin_tariff_label_conversion": "Conversion rate, ₽ per 1 GB",
|
||
"admin_tariff_label_desc_en": "Description - EN",
|
||
"admin_tariff_label_desc_ru": "Description - RU",
|
||
"admin_tariff_label_hwid": "Device limit (HWID)",
|
||
"admin_tariff_label_key": "Tariff key",
|
||
"admin_tariff_label_model": "Billing model",
|
||
"admin_tariff_label_name_en": "Name - EN",
|
||
"admin_tariff_label_name_ru": "Name - RU",
|
||
"admin_tariff_label_premium_name_en": "Premium section name, EN",
|
||
"admin_tariff_label_premium_name_ru": "Premium section name, RU",
|
||
"admin_tariff_label_premium_traffic_limit": "Monthly premium traffic limit, GB",
|
||
"admin_tariff_label_squads": "Base Internal Squads",
|
||
"admin_tariff_label_traffic_limit": "Monthly traffic limit, GB",
|
||
"admin_tariff_model_period_desc": "the user buys a fixed period (1/3/12 months, etc.)",
|
||
"admin_tariff_model_period_label": "Period",
|
||
"admin_tariff_model_traffic_desc": "the user buys gigabyte packages at a fixed price per GB",
|
||
"admin_tariff_model_traffic_label": "Traffic",
|
||
"admin_tariff_placeholder_desc_ru": "Base server pool",
|
||
"admin_tariff_placeholder_name_ru": "Standard",
|
||
"admin_tariff_placeholder_premium_name_ru": "Premium servers",
|
||
"admin_tariff_premium_head": "Premium access and a separate traffic counter",
|
||
"admin_tariff_premium_subhead": "Premium squads give the user access to faster/premium nodes; their traffic is counted separately from main traffic so it can be limited or sold separately",
|
||
"admin_tariff_premium_topup_subtitle": "Packages that extend the monthly premium limit when the user runs out",
|
||
"admin_tariff_premium_topup_title": "Premium traffic top-up",
|
||
"admin_tariff_provider_any_currency": "Any",
|
||
"admin_tariff_provider_not_declared": "Not declared",
|
||
"admin_tariff_pricing_empty": "Add at least one period so the tariff appears in the storefront.",
|
||
"admin_tariff_pricing_period_subtitle": "Each row is a separate storefront option: how many months the user pays for and how much it costs. Drag rows by the handle to set the period order in the bot and the web app",
|
||
"admin_tariff_pricing_period_title": "Subscription periods and prices",
|
||
"admin_tariff_period_reorder": "Drag to reorder",
|
||
"admin_tariff_package_reorder": "Drag to reorder",
|
||
"admin_tariff_pricing_traffic_subtitle": "Base storefront for the traffic model. Each row is an \"N gigabytes for N currency units\" package. Drag rows by the handle to set the package order in the bot and the web app",
|
||
"admin_tariff_pricing_traffic_title": "Traffic packages",
|
||
"admin_tariff_saved": "Tariff saved",
|
||
"admin_tariff_status_updated": "Tariff status updated",
|
||
"admin_tariff_topup_subtitle": "When a user runs out of the monthly limit, they can buy an extra package without changing the subscription term",
|
||
"admin_tariff_topup_title": "Traffic top-up over the monthly limit",
|
||
"admin_tariff_topup_traffic_hint": "For the traffic model, separate top-ups are not needed: packages configured on the Prices tab are the top-ups users can buy again as they run out.",
|
||
"admin_tariff_visible": "Tariff is visible in the storefront",
|
||
"admin_tariffs_catalog_subtitle": "Periods, prices, traffic, and user access.",
|
||
"admin_tariffs_currency_current": "Current currency",
|
||
"admin_tariffs_currency_subtitle": "Tariff prices and payment providers are checked against this currency.",
|
||
"admin_tariffs_currency_title": "Catalog currency",
|
||
"admin_tariffs_provider_available_count": "Available: {count}",
|
||
"admin_tariffs_provider_blocked_count": "Unsupported: {count}",
|
||
"admin_tariffs_provider_empty": "Provider data has not been loaded yet.",
|
||
"admin_tariffs_provider_enabled_count": "Enabled: {count}",
|
||
"admin_tariffs_provider_subtitle": "Shows which providers can accept the current catalog currency.",
|
||
"admin_tariffs_provider_title": "Payment providers",
|
||
"admin_tariffs_save_failed": "Failed to save tariffs",
|
||
"admin_tariffs_saved": "Tariffs saved",
|
||
"admin_tariffs_title": "Tariff catalog",
|
||
"admin_user_label_ref_bot": "Referral link (bot)",
|
||
"admin_user_label_ref_web": "Referral link (web)",
|
||
"admin_user_override_unlimited_short": "Unlimited",
|
||
"admin_user_premium_override_bonus": "Extra premium traffic, GB",
|
||
"admin_user_premium_override_bonus_hint": "",
|
||
"admin_user_premium_override_card_hint": "Unlimited access and extra volume for premium squads on top of the tariff.",
|
||
"admin_user_premium_override_card_title": "Premium traffic",
|
||
"admin_user_premium_override_save": "Save",
|
||
"admin_user_premium_override_status_bonus": "Premium now: +{gb} GB",
|
||
"admin_user_premium_override_status_none": "Premium override is not set",
|
||
"admin_user_premium_override_status_unlimited": "Current: unlimited",
|
||
"admin_user_premium_unlimited_hint": "Unlimited (admin override)",
|
||
"admin_user_premium_unlimited_value": "∞ (used {used})",
|
||
"admin_user_regular_override_bonus": "Extra main traffic, GB",
|
||
"admin_user_regular_override_bonus_hint": "",
|
||
"admin_user_regular_override_card_hint": "Unlimited access and a permanent bonus to the main traffic limit.",
|
||
"admin_user_regular_override_card_title": "Main traffic",
|
||
"admin_user_regular_override_save": "Save",
|
||
"admin_user_regular_override_status_bonus": "Main now: +{gb} GB",
|
||
"admin_user_regular_override_status_none": "Main traffic bonus is not set",
|
||
"admin_user_regular_override_status_unlimited": "Current: unlimited",
|
||
"admin_user_traffic_grant_gb": "GB to grant",
|
||
"admin_user_traffic_grant_hint": "Adds GB to the user balance like a top-up, but without payment. The limit and squads update in the panel immediately.",
|
||
"admin_user_traffic_grant_kind": "Traffic type",
|
||
"admin_user_traffic_grant_kind_premium": "Premium",
|
||
"admin_user_traffic_grant_kind_regular": "Regular",
|
||
"admin_user_traffic_grant_submit": "Grant",
|
||
"admin_user_traffic_grant_title": "Grant traffic",
|
||
"admin_yes": "Yes",
|
||
"wa_payment_success": "Payment successful",
|
||
"wa_settings_admin_panel": "Admin panel",
|
||
"wa_settings_admin_panel_hint": "Manage the app"
|
||
}
|