From b53a54a237b3b87d517c0e7abd5b34272c896364 Mon Sep 17 00:00:00 2001 From: Egor Date: Thu, 25 Sep 2025 13:07:03 +0300 Subject: [PATCH] feat: add toggle for promo group addon discounts --- app/database/crud/promo_group.py | 5 + app/database/crud/subscription.py | 22 +- app/database/models.py | 1 + app/database/universal_migration.py | 51 ++ app/handlers/admin/promo_groups.py | 164 +++++ app/handlers/admin/users.py | 18 +- app/localization/locales/en.json | 619 ++++++++-------- app/localization/locales/ru.json | 437 +++++------ app/states.py | 2 + locales/en.json | 1055 ++++++++++++++------------- locales/ru.json | 1055 ++++++++++++++------------- 11 files changed, 1858 insertions(+), 1571 deletions(-) diff --git a/app/database/crud/promo_group.py b/app/database/crud/promo_group.py index 3bc093f2..9b927f01 100644 --- a/app/database/crud/promo_group.py +++ b/app/database/crud/promo_group.py @@ -60,6 +60,7 @@ async def create_promo_group( device_discount_percent: int, period_discounts: Optional[Dict[int, int]] = None, auto_assign_total_spent_kopeks: Optional[int] = None, + addon_discounts_enabled: bool = True, ) -> PromoGroup: normalized_period_discounts = _normalize_period_discounts(period_discounts) @@ -77,6 +78,7 @@ async def create_promo_group( period_discounts=normalized_period_discounts or None, auto_assign_total_spent_kopeks=auto_assign_total_spent_kopeks, is_default=False, + addon_discounts_enabled=addon_discounts_enabled, ) db.add(promo_group) @@ -106,6 +108,7 @@ async def update_promo_group( device_discount_percent: Optional[int] = None, period_discounts: Optional[Dict[int, int]] = None, auto_assign_total_spent_kopeks: Optional[int] = None, + addon_discounts_enabled: Optional[bool] = None, ) -> PromoGroup: if name is not None: group.name = name.strip() @@ -120,6 +123,8 @@ async def update_promo_group( group.period_discounts = normalized_period_discounts or None if auto_assign_total_spent_kopeks is not None: group.auto_assign_total_spent_kopeks = max(0, auto_assign_total_spent_kopeks) + if addon_discounts_enabled is not None: + group.addon_discounts_enabled = bool(addon_discounts_enabled) await db.commit() await db.refresh(group) diff --git a/app/database/crud/subscription.py b/app/database/crud/subscription.py index 91b79375..06385da8 100644 --- a/app/database/crud/subscription.py +++ b/app/database/crud/subscription.py @@ -504,17 +504,26 @@ def _get_discount_percent( category: str, *, period_days: Optional[int] = None, + for_addon: bool = False, ) -> int: + effective_group = promo_group or getattr(user, "promo_group", None) + + percent = 0 if user is not None: try: - return user.get_promo_discount(category, period_days) + percent = user.get_promo_discount(category, period_days) except AttributeError: - pass + percent = 0 - if promo_group is not None: - return promo_group.get_discount_percent(category, period_days) + if percent == 0 and promo_group is not None: + percent = promo_group.get_discount_percent(category, period_days) - return 0 + if for_addon and effective_group is not None and not getattr( + effective_group, "addon_discounts_enabled", True + ): + return 0 + + return percent async def calculate_subscription_total_cost( @@ -852,6 +861,7 @@ async def calculate_addon_cost_for_remaining_period( promo_group, "traffic", period_days=period_hint_days, + for_addon=True, ) traffic_discount_per_month = traffic_price_per_month * traffic_discount_percent // 100 discounted_traffic_per_month = traffic_price_per_month - traffic_discount_per_month @@ -873,6 +883,7 @@ async def calculate_addon_cost_for_remaining_period( promo_group, "devices", period_days=period_hint_days, + for_addon=True, ) devices_discount_per_month = devices_price_per_month * devices_discount_percent // 100 discounted_devices_per_month = devices_price_per_month - devices_discount_per_month @@ -902,6 +913,7 @@ async def calculate_addon_cost_for_remaining_period( promo_group, "servers", period_days=period_hint_days, + for_addon=True, ) server_discount_per_month = server_price_per_month * servers_discount_percent // 100 discounted_server_per_month = server_price_per_month - server_discount_per_month diff --git a/app/database/models.py b/app/database/models.py index 0a3ad865..d33a9347 100644 --- a/app/database/models.py +++ b/app/database/models.py @@ -291,6 +291,7 @@ class PromoGroup(Base): traffic_discount_percent = Column(Integer, nullable=False, default=0) device_discount_percent = Column(Integer, nullable=False, default=0) period_discounts = Column(JSON, nullable=True, default=dict) + addon_discounts_enabled = Column(Boolean, nullable=False, default=True) auto_assign_total_spent_kopeks = Column(Integer, nullable=True, default=None) is_default = Column(Boolean, nullable=False, default=False) created_at = Column(DateTime, default=func.now()) diff --git a/app/database/universal_migration.py b/app/database/universal_migration.py index b123c750..c6171c72 100644 --- a/app/database/universal_migration.py +++ b/app/database/universal_migration.py @@ -931,6 +931,54 @@ async def ensure_promo_groups_setup(): "Добавлена колонка promo_groups.auto_assign_total_spent_kopeks" ) + addon_discounts_column_exists = await check_column_exists( + "promo_groups", "addon_discounts_enabled" + ) + + if not addon_discounts_column_exists: + if db_type == "sqlite": + await conn.execute( + text( + "ALTER TABLE promo_groups ADD COLUMN addon_discounts_enabled BOOLEAN NOT NULL DEFAULT 1" + ) + ) + await conn.execute( + text( + "UPDATE promo_groups SET addon_discounts_enabled = 1 WHERE addon_discounts_enabled IS NULL" + ) + ) + elif db_type == "postgresql": + await conn.execute( + text( + "ALTER TABLE promo_groups ADD COLUMN addon_discounts_enabled BOOLEAN NOT NULL DEFAULT TRUE" + ) + ) + await conn.execute( + text( + "UPDATE promo_groups SET addon_discounts_enabled = TRUE WHERE addon_discounts_enabled IS NULL" + ) + ) + elif db_type == "mysql": + await conn.execute( + text( + "ALTER TABLE promo_groups ADD COLUMN addon_discounts_enabled TINYINT(1) NOT NULL DEFAULT 1" + ) + ) + await conn.execute( + text( + "UPDATE promo_groups SET addon_discounts_enabled = 1 WHERE addon_discounts_enabled IS NULL" + ) + ) + else: + logger.error( + f"Неподдерживаемый тип БД для promo_groups.addon_discounts_enabled: {db_type}" + ) + return False + + logger.info( + "Добавлена колонка promo_groups.addon_discounts_enabled" + ) + column_exists = await check_column_exists("users", "promo_group_id") if not column_exists: @@ -1994,6 +2042,7 @@ async def check_migration_status(): "users_promo_group_column": False, "promo_groups_period_discounts_column": False, "promo_groups_auto_assign_column": False, + "promo_groups_addon_discounts_column": False, "users_auto_promo_group_assigned_column": False, "subscription_crypto_link_column": False, } @@ -2011,6 +2060,7 @@ async def check_migration_status(): status["users_promo_group_column"] = await check_column_exists('users', 'promo_group_id') status["promo_groups_period_discounts_column"] = await check_column_exists('promo_groups', 'period_discounts') status["promo_groups_auto_assign_column"] = await check_column_exists('promo_groups', 'auto_assign_total_spent_kopeks') + status["promo_groups_addon_discounts_column"] = await check_column_exists('promo_groups', 'addon_discounts_enabled') status["users_auto_promo_group_assigned_column"] = await check_column_exists('users', 'auto_promo_group_assigned') status["subscription_crypto_link_column"] = await check_column_exists('subscriptions', 'subscription_crypto_link') @@ -2048,6 +2098,7 @@ async def check_migration_status(): "users_promo_group_column": "Колонка promo_group_id у пользователей", "promo_groups_period_discounts_column": "Колонка period_discounts у промо-групп", "promo_groups_auto_assign_column": "Колонка auto_assign_total_spent_kopeks у промо-групп", + "promo_groups_addon_discounts_column": "Колонка addon_discounts_enabled у промо-групп", "users_auto_promo_group_assigned_column": "Флаг автоназначения промогруппы у пользователей", "subscription_crypto_link_column": "Колонка subscription_crypto_link в subscriptions", } diff --git a/app/handlers/admin/promo_groups.py b/app/handlers/admin/promo_groups.py index 917f673f..c8138a39 100644 --- a/app/handlers/admin/promo_groups.py +++ b/app/handlers/admin/promo_groups.py @@ -39,6 +39,31 @@ def _format_discount_line(texts, group) -> str: ) +def _format_addon_status_value(texts, enabled: bool) -> str: + key = ( + "ADMIN_PROMO_GROUP_ADDON_DISCOUNT_ENABLED_VALUE" + if enabled + else "ADMIN_PROMO_GROUP_ADDON_DISCOUNT_DISABLED_VALUE" + ) + default_text = "включены" if enabled else "отключены" + return texts.t(key, default_text) + + +def _format_addon_discount_line(texts, group) -> str: + enabled = getattr(group, "addon_discounts_enabled", True) + key = ( + "ADMIN_PROMO_GROUP_ADDON_DISCOUNTS_ENABLED" + if enabled + else "ADMIN_PROMO_GROUP_ADDON_DISCOUNTS_DISABLED" + ) + default_text = ( + "Скидки на докупку доп. услуг: включены" + if enabled + else "Скидки на докупку доп. услуг: отключены" + ) + return texts.t(key, default_text) + + def _normalize_periods_dict(raw: Optional[Dict]) -> Dict[int, int]: if not raw or not isinstance(raw, dict): return {} @@ -140,6 +165,17 @@ def _parse_period_discounts_input(value: str) -> Dict[int, int]: return discounts +def _parse_boolean_input(value: str) -> bool: + cleaned = (value or "").strip().lower() + + if cleaned in {"1", "true", "yes", "y", "да", "д", "on", "вкл", "+"}: + return True + if cleaned in {"0", "false", "no", "n", "нет", "н", "off", "выкл", "-"}: + return False + + raise ValueError("Invalid boolean input") + + async def _prompt_for_period_discounts( message: types.Message, state: FSMContext, @@ -244,6 +280,27 @@ async def _prompt_for_auto_assign_threshold( await message.answer(prompt_text) +async def _prompt_for_addon_discount_choice( + message: types.Message, + state: FSMContext, + prompt_key: str, + default_text: str, + *, + current_value: Optional[str] = None, +): + data = await state.get_data() + texts = get_texts(data.get("language", "ru")) + prompt_text = texts.t(prompt_key, default_text) + + if current_value is not None: + try: + prompt_text = prompt_text.format(current=current_value) + except KeyError: + pass + + await message.answer(prompt_text) + + def _build_edit_menu_content( texts, group: PromoGroup, @@ -257,6 +314,7 @@ def _build_edit_menu_content( lines = [ header, _format_discount_line(texts, group), + _format_addon_discount_line(texts, group), _format_auto_assign_line(texts, group), ] @@ -318,6 +376,15 @@ def _build_edit_menu_content( callback_data=f"promo_group_edit_field_{group.id}_periods", ) ], + [ + types.InlineKeyboardButton( + text=texts.t( + "ADMIN_PROMO_GROUP_EDIT_FIELD_ADDON_DISCOUNTS", + "🛒 Скидки на доп. услуги", + ), + callback_data=f"promo_group_edit_field_{group.id}_addon", + ) + ], [ types.InlineKeyboardButton( text=texts.t( @@ -399,6 +466,7 @@ async def show_promo_groups_menu( group_lines = [ f"{'⭐' if group.is_default else '🎯'} {group.name}{default_suffix}", _format_discount_line(texts, group), + _format_addon_discount_line(texts, group), _format_auto_assign_line(texts, group), texts.t( "ADMIN_PROMO_GROUPS_MEMBERS_COUNT", @@ -474,6 +542,7 @@ async def show_promo_group_details( "💳 Промогруппа: {name}", ).format(name=group.name), _format_discount_line(texts, group), + _format_addon_discount_line(texts, group), _format_auto_assign_line(texts, group), texts.t( "ADMIN_PROMO_GROUP_DETAILS_MEMBERS", @@ -675,6 +744,39 @@ async def process_create_group_period_discounts( return await state.update_data(new_group_period_discounts=period_discounts) + await state.set_state(AdminStates.creating_promo_group_addon_discount) + + await _prompt_for_addon_discount_choice( + message, + state, + "ADMIN_PROMO_GROUP_CREATE_ADDON_DISCOUNT_PROMPT", + "Включать скидки на докупку доп. услуг при действующих скидках? (да/нет)", + ) + + +@admin_required +@error_handler +async def process_create_group_addon_discount( + message: types.Message, + state: FSMContext, + db_user, + db: AsyncSession, +): + data = await state.get_data() + texts = get_texts(data.get("language", db_user.language)) + + try: + addon_enabled = _parse_boolean_input(message.text) + except ValueError: + await message.answer( + texts.t( + "ADMIN_PROMO_GROUP_INVALID_ADDON_DISCOUNT", + "Введите «да» или «нет».", + ) + ) + return + + await state.update_data(new_group_addon_discounts_enabled=addon_enabled) await state.set_state(AdminStates.creating_promo_group_auto_assign) await _prompt_for_auto_assign_threshold( @@ -716,6 +818,9 @@ async def process_create_group_auto_assign( device_discount_percent=data["new_group_devices"], period_discounts=data.get("new_group_period_discounts"), auto_assign_total_spent_kopeks=auto_assign_kopeks, + addon_discounts_enabled=data.get( + "new_group_addon_discounts_enabled", True + ), ) except Exception as e: logger.error(f"Не удалось создать промогруппу: {e}") @@ -826,6 +931,13 @@ async def prompt_edit_promo_group_field( "ADMIN_PROMO_GROUP_EDIT_PERIOD_PROMPT", "Введите новые скидки на периоды (текущие: {current}). Отправьте 0, если без скидок.", ).format(current=_format_period_discounts_value(current_discounts)) + elif field == "addon": + await state.set_state(AdminStates.editing_promo_group_addon_discount) + current_value = _format_addon_status_value(texts, getattr(group, "addon_discounts_enabled", True)) + prompt = texts.t( + "ADMIN_PROMO_GROUP_EDIT_ADDON_DISCOUNT_PROMPT", + "Включать скидки на докупку доп. услуг? Текущее значение: {current}.", + ).format(current=current_value) elif field == "auto": await state.set_state(AdminStates.editing_promo_group_auto_assign) prompt = texts.t( @@ -1019,6 +1131,50 @@ async def process_edit_group_period_discounts( ) +@admin_required +@error_handler +async def process_edit_group_addon_discount( + message: types.Message, + state: FSMContext, + db_user, + db: AsyncSession, +): + data = await state.get_data() + texts = get_texts(data.get("language", db_user.language)) + + try: + addon_enabled = _parse_boolean_input(message.text) + except ValueError: + await message.answer( + texts.t( + "ADMIN_PROMO_GROUP_INVALID_ADDON_DISCOUNT", + "Введите «да» или «нет».", + ) + ) + return + + group = await get_promo_group_by_id(db, data.get("edit_group_id")) + if not group: + await message.answer("❌ Промогруппа не найдена") + await state.clear() + return + + group = await update_promo_group( + db, + group, + addon_discounts_enabled=addon_enabled, + ) + await state.set_state(AdminStates.editing_promo_group_menu) + + await _send_edit_menu_after_update( + message, + texts, + group, + data.get("language", db_user.language), + texts.t("ADMIN_PROMO_GROUP_UPDATED", "Промогруппа «{name}» обновлена.").format(name=group.name), + ) + + @admin_required @error_handler async def process_edit_group_auto_assign( @@ -1235,6 +1391,10 @@ def register_handlers(dp: Dispatcher): process_create_group_period_discounts, AdminStates.creating_promo_group_period_discount, ) + dp.message.register( + process_create_group_addon_discount, + AdminStates.creating_promo_group_addon_discount, + ) dp.message.register( process_create_group_auto_assign, AdminStates.creating_promo_group_auto_assign, @@ -1257,6 +1417,10 @@ def register_handlers(dp: Dispatcher): process_edit_group_period_discounts, AdminStates.editing_promo_group_period_discount, ) + dp.message.register( + process_edit_group_addon_discount, + AdminStates.editing_promo_group_addon_discount, + ) dp.message.register( process_edit_group_auto_assign, AdminStates.editing_promo_group_auto_assign, diff --git a/app/handlers/admin/users.py b/app/handlers/admin/users.py index 45fe983f..b84b392d 100644 --- a/app/handlers/admin/users.py +++ b/app/handlers/admin/users.py @@ -835,6 +835,7 @@ async def show_user_management( • Скидка на сервера: {promo_group.server_discount_percent}% • Скидка на трафик: {promo_group.traffic_discount_percent}% • Скидка на устройства: {promo_group.device_discount_percent}% +• Скидки на доп. услуги при докупке: {"включены" if getattr(promo_group, "addon_discounts_enabled", True) else "отключены"} """ else: text += "\nПромогруппа: Не назначена" @@ -863,21 +864,36 @@ async def _render_user_promo_group( if current_group: current_line = texts.ADMIN_USER_PROMO_GROUP_CURRENT.format(name=current_group.name) + addon_status = ( + texts.t("ADMIN_PROMO_GROUP_ADDON_DISCOUNT_ENABLED_VALUE", "включены") + if getattr(current_group, "addon_discounts_enabled", True) + else texts.t("ADMIN_PROMO_GROUP_ADDON_DISCOUNT_DISABLED_VALUE", "отключены") + ) discount_line = texts.ADMIN_USER_PROMO_GROUP_DISCOUNTS.format( servers=current_group.server_discount_percent, traffic=current_group.traffic_discount_percent, devices=current_group.device_discount_percent, + addons=addon_status, ) + addon_line = texts.t( + "ADMIN_USER_PROMO_GROUP_ADDON_DISCOUNT_LINE", + "Скидки на доп. услуги при докупке: {status}", + ).format(status=addon_status) current_group_id = current_group.id else: current_line = texts.ADMIN_USER_PROMO_GROUP_CURRENT_NONE discount_line = texts.ADMIN_USER_PROMO_GROUP_DISCOUNTS_NONE + addon_line = texts.t( + "ADMIN_USER_PROMO_GROUP_ADDON_DISCOUNT_NONE", + "Скидки на доп. услуги при докупке: —", + ) current_group_id = None text = ( f"{texts.ADMIN_USER_PROMO_GROUP_TITLE}\n\n" f"{current_line}\n" - f"{discount_line}\n\n" + f"{discount_line}\n" + f"{addon_line}\n\n" f"{texts.ADMIN_USER_PROMO_GROUP_SELECT}" ) diff --git a/app/localization/locales/en.json b/app/localization/locales/en.json index 98b41a5b..6977ac1b 100644 --- a/app/localization/locales/en.json +++ b/app/localization/locales/en.json @@ -1,14 +1,99 @@ { + "ACCESS_DENIED": "❌ Access denied", + "ADDON_INSUFFICIENT_FUNDS_MESSAGE": "⚠️ Insufficient funds\n\nService price: {required}\nBalance: {balance}\nMissing: {missing}\n\nChoose a top-up method. The amount will be filled in automatically.", "ADD_COUNTRIES_BUTTON": "🌐 Add countries", - "ADMIN_MAIN_MENU": "🏠 Main menu", "ADMIN_CAMPAIGNS": "📣 Promotional campaigns", + "ADMIN_MAIN_MENU": "🏠 Main menu", + "ADMIN_MESSAGES": "📨 Broadcasts", + "ADMIN_MONITORING": "🔍 Monitoring", + "ADMIN_PANEL": "\n⚙️ Administration panel\n\nSelect a section to manage:\n", + "ADMIN_PROMOCODES": "🎫 Promo codes", + "ADMIN_PROMO_GROUPS": "💳 Promo groups", + "ADMIN_PROMO_GROUPS_DEFAULT_LABEL": " (default)", + "ADMIN_PROMO_GROUPS_DISCOUNTS": "Discounts — servers: {servers}%, traffic: {traffic}%, devices: {devices}%", + "ADMIN_PROMO_GROUPS_EMPTY": "No promo groups found.", + "ADMIN_PROMO_GROUPS_MEMBERS_COUNT": "Members: {count}", + "ADMIN_PROMO_GROUPS_SUMMARY": "Groups total: {count}\nMembers total: {members}", + "ADMIN_PROMO_GROUPS_TITLE": "💳 Promo groups", + "ADMIN_PROMO_GROUP_ADDON_DISCOUNTS_DISABLED": "Add-on purchase discounts: disabled", + "ADMIN_PROMO_GROUP_ADDON_DISCOUNTS_ENABLED": "Add-on purchase discounts: enabled", + "ADMIN_PROMO_GROUP_ADDON_DISCOUNT_DISABLED_VALUE": "disabled", + "ADMIN_PROMO_GROUP_ADDON_DISCOUNT_ENABLED_VALUE": "enabled", + "ADMIN_PROMO_GROUP_CREATED": "Promo group “{name}” created.", + "ADMIN_PROMO_GROUP_CREATED_BACK_BUTTON": "↩️ Back to promo groups", + "ADMIN_PROMO_GROUP_CREATE_ADDON_DISCOUNT_PROMPT": "Enable discounts for add-on purchases when base discounts are set? (yes/no)", + "ADMIN_PROMO_GROUP_CREATE_DEVICES_PROMPT": "Enter device discount (0-100):", + "ADMIN_PROMO_GROUP_CREATE_NAME_PROMPT": "Enter a name for the new promo group:", + "ADMIN_PROMO_GROUP_CREATE_SERVERS_PROMPT": "Enter server discount (0-100):", + "ADMIN_PROMO_GROUP_CREATE_TRAFFIC_PROMPT": "Enter traffic discount (0-100):", + "ADMIN_PROMO_GROUP_DELETED": "Promo group “{name}” deleted.", + "ADMIN_PROMO_GROUP_DELETE_BUTTON": "🗑️ Delete", + "ADMIN_PROMO_GROUP_DELETE_CONFIRM": "Delete promo group “{name}”? All users will be moved to the default group.", + "ADMIN_PROMO_GROUP_DELETE_FORBIDDEN": "The default promo group cannot be deleted.", + "ADMIN_PROMO_GROUP_DETAILS_DEFAULT": "This is the default group.", + "ADMIN_PROMO_GROUP_DETAILS_MEMBERS": "Members: {count}", + "ADMIN_PROMO_GROUP_DETAILS_TITLE": "💳 Promo group: {name}", + "ADMIN_PROMO_GROUP_EDIT_ADDON_DISCOUNT_PROMPT": "Enable discounts for add-on purchases? Current value: {current}.", + "ADMIN_PROMO_GROUP_EDIT_BUTTON": "✏️ Edit", + "ADMIN_PROMO_GROUP_EDIT_DEVICES_PROMPT": "Enter new device discount (0-100):", + "ADMIN_PROMO_GROUP_EDIT_FIELD_ADDON_DISCOUNTS": "🛒 Add-on purchase discounts", + "ADMIN_PROMO_GROUP_EDIT_NAME_PROMPT": "Enter a new name (current: {name}):", + "ADMIN_PROMO_GROUP_EDIT_SERVERS_PROMPT": "Enter new server discount (0-100):", + "ADMIN_PROMO_GROUP_EDIT_TRAFFIC_PROMPT": "Enter new traffic discount (0-100):", + "ADMIN_PROMO_GROUP_INVALID_ADDON_DISCOUNT": "Please enter 'yes' or 'no'.", + "ADMIN_PROMO_GROUP_INVALID_NAME": "Name cannot be empty.", + "ADMIN_PROMO_GROUP_INVALID_PERCENT": "Enter a number from 0 to 100.", + "ADMIN_PROMO_GROUP_MEMBERS_BUTTON": "👥 Members", + "ADMIN_PROMO_GROUP_MEMBERS_EMPTY": "This group has no members yet.", + "ADMIN_PROMO_GROUP_MEMBERS_TITLE": "👥 Members of {name}", + "ADMIN_PROMO_GROUP_UPDATED": "Promo group “{name}” updated.", + "ADMIN_REFERRALS": "🤝 Referral program", + "ADMIN_REMNAWAVE": "🖥️ Remnawave", + "ADMIN_RULES": "📋 Rules", + "ADMIN_STATISTICS": "📊 Statistics", + "ADMIN_SUBSCRIPTIONS": "📱 Subscriptions", + "ADMIN_USERS": "👥 Users", + "ADMIN_USER_PROMO_GROUP_ADDON_DISCOUNT_LINE": "Add-on purchase discounts: {status}", + "ADMIN_USER_PROMO_GROUP_ADDON_DISCOUNT_NONE": "Add-on purchase discounts: —", + "ADMIN_USER_PROMO_GROUP_ALREADY": "ℹ️ The user is already in this promo group.", + "ADMIN_USER_PROMO_GROUP_BACK": "⬅️ Back to user", + "ADMIN_USER_PROMO_GROUP_BUTTON": "👥 Promo group", + "ADMIN_USER_PROMO_GROUP_CURRENT": "Current group: {name}", + "ADMIN_USER_PROMO_GROUP_CURRENT_NONE": "Current group: not assigned", + "ADMIN_USER_PROMO_GROUP_DISCOUNTS": "Discounts — servers: {servers}%, traffic: {traffic}%, devices: {devices}%, add-ons: {addons}", + "ADMIN_USER_PROMO_GROUP_DISCOUNTS_NONE": "No discounts configured.", + "ADMIN_USER_PROMO_GROUP_ERROR": "❌ Failed to update the user's promo group.", + "ADMIN_USER_PROMO_GROUP_SELECT": "Select a promo group to assign:", + "ADMIN_USER_PROMO_GROUP_TITLE": "👥 User promo group", + "ADMIN_USER_PROMO_GROUP_UPDATED": "✅ User promo group updated: “{name}”", + "ALREADY_REGISTERED_REFERRAL": "ℹ️ You are already registered. A referral link cannot be applied.", "AUTOPAY_BUTTON": "💳 Auto payment", + "AUTOPAY_DISABLED_TEXT": "Disabled — don't forget to renew manually!", + "AUTOPAY_ENABLED_TEXT": "Enabled — the subscription will renew automatically", + "AUTOPAY_FAILED": "\n❌ Autopay failed\n\nWe couldn't charge the renewal payment.\nBalance available: {balance}\nRequired: {required}\n\nPlease top up your balance and renew manually.\n", "AUTOPAY_SET_DAYS_BUTTON": "⚙️ Configure days", + "AUTOPAY_SUCCESS": "\n✅ Autopay completed\n\nYour subscription was automatically renewed for {days} days.\nCharged from balance: {amount}\n", "BACK": "⬅️ Back", + "BACK_TO_MAIN_MENU_BUTTON": "⬅️ Back to main menu", "BACK_TO_SUBSCRIPTION": "⬅️ Back to subscription", + "BALANCE_BUTTON": "💰 Balance: {balance}", "BALANCE_BUTTON_DEFAULT": "💰 Balance: {balance}", + "BALANCE_BUTTON_ZERO": "💰 Balance: 0 ₽", + "BALANCE_HISTORY": "📊 Transaction history", + "BALANCE_INFO": "\n💰 Balance: {balance}\n\nChoose an action:\n", + "BALANCE_SUPPORT_REQUEST": "🛠️ Request via support", + "BALANCE_TOP_UP": "💳 Top up", + "BUY_SUBSCRIPTION_START": "\n💎 Subscription setup\n\nLet's configure a plan that fits you.\n\nFirst, choose the subscription period:\n", + "CAMPAIGN_BONUS_BALANCE": "🎉 You received {amount} for registering via the \"{name}\" campaign!", + "CAMPAIGN_BONUS_SUBSCRIPTION": "🎉 You’ve been granted a {days}-day subscription (traffic: {traffic}, devices: {devices}) from the \"{name}\" campaign!", + "CAMPAIGN_EXISTING_USER": "ℹ️ This promo link is available only to new users.", "CANCEL": "❌ Cancel", "CHANGE_DEVICES_BUTTON": "📱 Change devices", + "CHANGE_DEVICES_CONFIRM": "\n📱 Confirm change\n\nCurrent amount: {current_devices} devices\nNew amount: {new_devices} devices\n\nAction: {action}\n💰 {cost}\n\nApply this change?\n", + "CHANGE_DEVICES_INFO": "\n📱 Adjust device limit\n\nCurrent limit: {current_devices} devices\n\nChoose the new number of devices:\n\n💡 Important:\n• Increasing — extra charge proportional to the remaining time\n• Decreasing — funds are not refunded\n", + "CHANGE_DEVICES_SUCCESS_DECREASE": "\n✅ Device limit decreased!\n\n📱 Was: {old_count} → Now: {new_count}\nℹ️ Payments are not refunded\n", + "CHANGE_DEVICES_SUCCESS_INCREASE": "\n✅ Device limit increased!\n\n📱 Was: {old_count} → Now: {new_count}\n💰 Charged: {amount}\n", + "CHANGE_DEVICES_TITLE": "📱 Change device limit", "CHANNEL_CHECK_BUTTON": "✅ I have joined", "CHANNEL_REQUIRED_TEXT": "🔒 Please join the announcement channel to access the bot, then press the button below.", "CHANNEL_SUBSCRIBE_BUTTON": "🔗 Subscribe", @@ -19,20 +104,17 @@ "CONFIRM": "✅ Confirm", "CONFIRM_CHANGE_BUTTON": "✅ Confirm change", "CONNECT_BUTTON": "🔗 Connect", - "HAPP_DOWNLOAD_BUTTON": "⬇️ Download Happ", - "HAPP_DOWNLOAD_PROMPT": "📥 Download Happ\nChoose your device:", - "HAPP_PLATFORM_IOS": "🍎 iOS", - "HAPP_PLATFORM_ANDROID": "🤖 Android", - "HAPP_PLATFORM_MACOS": "🖥️ Mac OS", - "HAPP_PLATFORM_WINDOWS": "💻 Windows", - "HAPP_PLATFORM_PC": "💻 PC", - "HAPP_DOWNLOAD_LINK_MESSAGE": "⬇️ Download Happ for {platform}:", - "HAPP_DOWNLOAD_LINK_NOT_SET": "❌ Download link for this device is not configured", - "HAPP_DOWNLOAD_OPEN_LINK": "🔗 Open link", + "CONTACT_SUPPORT": "💬 Contact support", "CONTINUE": "➡️ Continue", "CONTINUE_BUTTON": "➡️ Continue", "COPY_SUBSCRIPTION_LINK": "📋 Copy subscription link", + "CREATE_INVITE": "📝 Create invite", "CREATE_INVITE_BUTTON": "📝 Create invite", + "CUSTOM_MINIAPP_URL_NOT_SET": "⚠ Custom mini-app link is not configured", + "DEVICES_INSUFFICIENT_BALANCE": "⚠️ Insufficient balance!\nRequired: {required} (for {months} mo)\nYou have: {balance}", + "DEVICES_LIMIT_EXCEEDED": "⚠️ Maximum device limit exceeded ({limit})", + "DEVICES_MINIMUM_LIMIT": "⚠️ Minimum number of devices: {limit}", + "DEVICES_NO_CHANGE": "ℹ️ Device limit was not changed", "DEVICE_CONNECTION_HELP": "❓ How to reconnect a device?", "DEVICE_GUIDE_ANDROID": "🤖 Android", "DEVICE_GUIDE_ANDROID_TV": "📺 Android TV", @@ -42,26 +124,47 @@ "DISABLE_BUTTON": "❌ Disable", "ENABLE_BUTTON": "✅ Enable", "ERROR": "❌ An error occurred", - "ERROR_TRY_AGAIN": "❌ An error occurred. Please try again.", "ERROR_RULES_RETRY": "An error occurred. Please try accepting the rules again:", + "ERROR_TRY_AGAIN": "❌ An error occurred. Please try again.", "GO_TO_BALANCE_TOP_UP": "💳 Go to balance top up", - "RETURN_TO_SUBSCRIPTION_CHECKOUT": "⬅️ Return to subscription checkout", + "HAPP_DOWNLOAD_BUTTON": "⬇️ Download Happ", + "HAPP_DOWNLOAD_LINK_MESSAGE": "⬇️ Download Happ for {platform}:", + "HAPP_DOWNLOAD_LINK_NOT_SET": "❌ Download link for this device is not configured", + "HAPP_DOWNLOAD_OPEN_LINK": "🔗 Open link", + "HAPP_DOWNLOAD_PROMPT": "📥 Download Happ\nChoose your device:", + "HAPP_PLATFORM_ANDROID": "🤖 Android", + "HAPP_PLATFORM_IOS": "🍎 iOS", + "HAPP_PLATFORM_MACOS": "🖥️ Mac OS", + "HAPP_PLATFORM_PC": "💻 PC", + "HAPP_PLATFORM_WINDOWS": "💻 Windows", "INSUFFICIENT_BALANCE": "❌ Insufficient balance.\n\nTop up {amount} and try again.", - "ADDON_INSUFFICIENT_FUNDS_MESSAGE": "⚠️ Insufficient funds\n\nService price: {required}\nBalance: {balance}\nMissing: {missing}\n\nChoose a top-up method. The amount will be filled in automatically.", + "INVALID_AMOUNT": "❌ Invalid amount", "LANGUAGE_SELECTED": "🌐 Interface language set: English", "LOADING": "⏳ Loading...", + "MAINTENANCE_MODE_ACTIVE": "\n🔧 Maintenance in progress!\n\nThe service is temporarily unavailable while we improve performance.\n\n⏰ Estimated completion time: unknown\n🔄 Please try again later\n\nWe apologize for the inconvenience.\n", + "MAINTENANCE_MODE_API_ERROR": "\n🔧 Maintenance in progress!\n\nThe service is temporarily unavailable due to connection issues with the servers.\n\n⏰ We're working on it. Please try again in a few minutes.\n\n🔄 Last check: {last_check}\n", "MAIN_MENU": "👤 {user_name}\n\n📱 Subscription: {subscription_status}\n\nChoose an option:\n", "MAIN_MENU_ACTION_PROMPT": "Choose an option:", "MAIN_MENU_BUTTON": "🏠 Main menu", "MANAGE_DEVICES_BUTTON": "🔧 Manage devices", + "MENU_ADMIN": "⚙️ Admin panel", "MENU_BALANCE": "💰 Balance", + "MENU_BUY_SUBSCRIPTION": "💎 Buy subscription", + "MENU_EXTEND_SUBSCRIPTION": "⏰ Extend subscription", + "MENU_LANGUAGE": "🌐 Language", + "MENU_PROMOCODE": "🎫 Promo code", + "MENU_REFERRALS": "🤝 Referral program", + "MENU_RULES": "📋 Service rules", + "MENU_SERVER_STATUS": "📊 Server status", "MENU_SUBSCRIPTION": "📱 Subscription", + "MENU_SUPPORT": "🛠️ Support", "MENU_TRIAL": "🎁 Trial subscription", "MY_BALANCE_BUTTON": "💰 My balance", "MY_SUBSCRIPTION_BUTTON": "📱 My subscription", "NO": "❌ No", "NO_SERVERS_AVAILABLE": "❌ No servers available", "NO_TRAFFIC_PACKAGES": "❌ No packages available", + "OPERATION_CANCELLED": "❌ Operation cancelled", "OTHER_APPS_BUTTON": "📋 Other apps", "PAGINATION_NEXT": "➡️", "PAGINATION_PREV": "⬅️", @@ -69,33 +172,215 @@ "PAYMENT_CARD_TRIBUTE": "💳 Bank card (Tribute)", "PAYMENT_CARD_YOOKASSA": "💳 Bank card (YooKassa)", "PAYMENT_CRYPTOBOT": "🪙 Cryptocurrency (CryptoBot)", + "PAYMENT_METHODS_FOOTER": "Choose a top-up method:", + "PAYMENT_METHODS_ONLY_SUPPORT": "💳 Balance top-up methods\n\n⚠️ Automated payment methods are temporarily unavailable.\nContact support to top up your balance.\n\nChoose a top-up method:", + "PAYMENT_METHODS_PROMPT": "Choose the payment method that suits you:", + "PAYMENT_METHODS_TITLE": "💳 Balance top-up methods", + "PAYMENT_METHODS_UNAVAILABLE_ALERT": "⚠️ Automated payment methods are temporarily unavailable. Contact support to top up your balance.", + "PAYMENT_METHOD_CRYPTOBOT_DESCRIPTION": "via CryptoBot", + "PAYMENT_METHOD_CRYPTOBOT_NAME": "🪙 Cryptocurrency", + "PAYMENT_METHOD_STARS_DESCRIPTION": "fast and convenient", + "PAYMENT_METHOD_STARS_NAME": "⭐ Telegram Stars", + "PAYMENT_METHOD_SUPPORT_DESCRIPTION": "other options", + "PAYMENT_METHOD_SUPPORT_NAME": "🛠️ Support team", + "PAYMENT_METHOD_TRIBUTE_DESCRIPTION": "via Tribute", + "PAYMENT_METHOD_TRIBUTE_NAME": "💳 Bank card", + "PAYMENT_METHOD_YOOKASSA_DESCRIPTION": "via YooKassa", + "PAYMENT_METHOD_YOOKASSA_NAME": "💳 Bank card", "PAYMENT_SBP_YOOKASSA": "🏦 Pay via SBP (YooKassa)", "PAYMENT_TELEGRAM_STARS": "⭐ Telegram Stars", "PAYMENT_VIA_SUPPORT": "🛠️ Via support", "PAY_NOW_BUTTON": "💳 Pay", "PAY_WITH_COINS_BUTTON": "🪙 Pay", "PENDING_CANCEL_BUTTON": "⌛ Cancel", + "PERIOD_14_DAYS": "📅 14 days - {settings.format_price(settings.PRICE_14_DAYS)}", + "PERIOD_180_DAYS": "📅 180 days - {settings.format_price(settings.PRICE_180_DAYS)}", + "PERIOD_30_DAYS": "📅 30 days - {settings.format_price(settings.PRICE_30_DAYS)}", + "PERIOD_360_DAYS": "📅 360 days - {settings.format_price(settings.PRICE_360_DAYS)}", + "PERIOD_60_DAYS": "📅 60 days - {settings.format_price(settings.PRICE_60_DAYS)}", + "PERIOD_90_DAYS": "📅 90 days - {settings.format_price(settings.PRICE_90_DAYS)}", "POST_REGISTRATION_TRIAL_BUTTON": "🚀 Activate free trial 🚀", + "PROMOCODE_EMPTY_INPUT": "❌ Please enter a valid promo code", + "PROMOCODE_ENTER": "🎫 Enter promo code", + "PROMOCODE_EXPIRED": "❌ Promo code has expired", + "PROMOCODE_INVALID": "❌ Invalid promo code", + "PROMOCODE_SUCCESS": "🎉 Promo code applied!", + "PROMOCODE_USED": "ℹ️ Promo code has already been used", + "PROMO_GROUP_DISCOUNTS_HEADER": "🎁 Your promo group discounts", + "PROMO_GROUP_DISCOUNT_DEVICES": "📱 Extra devices: {percent}%", + "PROMO_GROUP_DISCOUNT_SERVERS": "🌍 Servers: {percent}%", + "PROMO_GROUP_DISCOUNT_TRAFFIC": "📊 Traffic: {percent}%", + "PROMO_GROUP_PERIOD_DISCOUNTS_HEADER": "⏳ Long-term period discounts:", + "PROMO_GROUP_PERIOD_DISCOUNT_ITEM": "{period} — {percent}%", "REFERRAL_ANALYTICS_BUTTON": "📊 Analytics", + "REFERRAL_ANALYTICS_EARNINGS_HEADER": "💰 Earnings by period:", + "REFERRAL_ANALYTICS_EARNINGS_MONTH": "• Month: {amount}", + "REFERRAL_ANALYTICS_EARNINGS_QUARTER": "• Quarter: {amount}", + "REFERRAL_ANALYTICS_EARNINGS_TODAY": "• Today: {amount}", + "REFERRAL_ANALYTICS_EARNINGS_WEEK": "• Week: {amount}", + "REFERRAL_ANALYTICS_FOOTER": "📈 Keep growing your referral network!", + "REFERRAL_ANALYTICS_TITLE": "📊 Referral analytics", + "REFERRAL_ANALYTICS_TOP_ITEM": "{index}. {name}: {amount} ({count} rewards)", + "REFERRAL_ANALYTICS_TOP_TITLE": "🏆 Top {count} referrals:", "REFERRAL_CODE_ACCEPTED": "✅ Referral code accepted!", + "REFERRAL_CODE_APPLIED": "🎁 Referral code applied! You will receive a bonus after the first purchase.", "REFERRAL_CODE_INVALID": "❌ Invalid referral code", "REFERRAL_CODE_INVALID_HELP": "❌ Invalid referral code.\n\n💡 If you have a referral code, please double-check the spelling.\n⏭️ To continue without a referral code, use the /start command.", "REFERRAL_CODE_QUESTION": "\n🤝 Do you have a friend's referral code?\n\nIf you have a promo code or referral link, enter it now to receive a bonus!\n\nSend the code or tap \"Skip\":\n", "REFERRAL_CODE_SKIP": "⏭️ Skip", - "ALREADY_REGISTERED_REFERRAL": "ℹ️ You are already registered. A referral link cannot be applied.", + "REFERRAL_CODE_TITLE": "🆔 Your code: {code}", + "REFERRAL_EARNINGS_BY_TYPE_HEADER": "📈 Earnings by type:", + "REFERRAL_EARNINGS_FIRST_TOPUPS": "• Bonuses for first top-ups: {count} ({amount})", + "REFERRAL_EARNINGS_PURCHASES": "• Purchase commissions: {count} ({amount})", + "REFERRAL_EARNINGS_TOPUPS": "• Top-up commissions: {count} ({amount})", + "REFERRAL_EARNING_REASON_COMMISSION_PURCHASE": "💰 Purchase commission", + "REFERRAL_EARNING_REASON_COMMISSION_TOPUP": "💰 Top-up commission", + "REFERRAL_EARNING_REASON_FIRST_TOPUP": "🎉 First top-up", + "REFERRAL_INFO": "\n🤝 Referral program\n\n👥 Invited: {referrals_count} friends\n💰 Earned: {earned_amount}\n\n🔗 Your referral link:\n{referral_link}\n\n🎫 Your promo code:\n{referral_code}\n\n💰 Terms:\n• Per friend: {registration_bonus}\n• Top-up commission: {commission_percent}%\n", + "REFERRAL_INVITE_BONUS": "💎 On your first top-up from {minimum} you get {bonus} as a bonus!", + "REFERRAL_INVITE_CREATED_INSTRUCTION": "Tap the “📤 Share” button to send the invite to any chat or copy the text below:", + "REFERRAL_INVITE_CREATED_TITLE": "📝 Invitation created!", + "REFERRAL_INVITE_FEATURE_FAST": "🚀 Fast connection", + "REFERRAL_INVITE_FEATURE_SECURE": "🔒 Reliable protection", + "REFERRAL_INVITE_FEATURE_SERVERS": "🌍 Servers worldwide", + "REFERRAL_INVITE_FOOTER": "📢 Invite friends and earn!", + "REFERRAL_INVITE_LINK_PROMPT": "👇 Follow the link:", + "REFERRAL_INVITE_MESSAGE": "\n🎯 Invitation to the VPN service\n\nHi! I invite you to an excellent VPN service!\n\n🎁 Use my link to get a bonus: {bonus}\n\n🔗 Join: {link}\n🎫 Or use promo code: {code}\n\n💪 Fast, reliable, affordable!\n", + "REFERRAL_INVITE_TITLE": "🎉 Join the VPN service!", + "REFERRAL_LINK_CAPTION": "🔗 Your referral link:\n{link}", + "REFERRAL_LINK_TITLE": "🔗 Your referral link:", "REFERRAL_LIST_BUTTON": "👥 Referral list", + "REFERRAL_LIST_EMPTY": "📋 You have no referrals yet.\n\nShare your referral link to start earning!", + "REFERRAL_LIST_HEADER": "👥 Your referrals (page {current}/{total})", + "REFERRAL_LIST_ITEM_ACTIVITY": " 🕐 Activity: {days} days ago", + "REFERRAL_LIST_ITEM_ACTIVITY_LONG_AGO": " 🕐 Activity: long ago", + "REFERRAL_LIST_ITEM_EARNED": " 💎 Earned from them: {amount}", + "REFERRAL_LIST_ITEM_HEADER": "{index}. {status} {name}", + "REFERRAL_LIST_ITEM_REGISTERED": " 📅 Registered: {days} days ago", + "REFERRAL_LIST_ITEM_TOPUPS": " {emoji} Top-ups: {count}", + "REFERRAL_LIST_NEXT_PAGE": "Next ➡️", + "REFERRAL_LIST_PREV_PAGE": "⬅️ Back", + "REFERRAL_PROGRAM_TITLE": "👥 Referral program", + "REFERRAL_RECENT_EARNINGS_HEADER": "💰 Latest rewards:", + "REFERRAL_RECENT_EARNINGS_ITEM": "• {reason}: {amount} from {referral_name}", + "REFERRAL_REWARDS_HEADER": "🎁 How rewards work:", + "REFERRAL_REWARD_COMMISSION": "• Commission from each referral top-up: {percent}%", + "REFERRAL_REWARD_INVITER": "• You receive on the referral's first top-up: {bonus}", + "REFERRAL_REWARD_NEW_USER": "• New user receives: {bonus} on the first top-up from {minimum}", + "REFERRAL_SHARE_BUTTON": "📤 Share", + "REFERRAL_STATS_ACTIVE": "• Active referrals: {count}", + "REFERRAL_STATS_CONVERSION": "• Conversion: {rate}%", + "REFERRAL_STATS_FIRST_TOPUPS": "• Made first top-up: {count}", + "REFERRAL_STATS_HEADER": "📊 Your statistics:", + "REFERRAL_STATS_INVITED": "• Invited users: {count}", + "REFERRAL_STATS_MONTH_EARNED": "• Earned last month: {amount}", + "REFERRAL_STATS_TOTAL_EARNED": "• Earned in total: {amount}", + "REGISTRATION_COMPLETING": "✅ Completing registration...", "RESET_ALL_DEVICES_BUTTON": "🔄 Reset all devices", "RESET_DEVICE_CONFIRM_BUTTON": "✅ Reset this device", "RESET_TRAFFIC_BUTTON": "🔄 Reset traffic", - "RULES_HEADER": "📋 Service Rules", + "RETURN_TO_SUBSCRIPTION_CHECKOUT": "⬅️ Return to subscription checkout", + "RULES_ACCEPT": "✅ I accept the rules", "RULES_ACCEPTED_PROCESSING": "✅ Rules accepted! Completing registration...", + "RULES_DECLINE": "❌ I do not accept", + "RULES_HEADER": "📋 Service Rules", + "RULES_REQUIRED": "❗️ You must accept the rules to use the service!", "RULES_TEXT_DEFAULT": "📋 Service Usage Rules\n\n1. Do not use the service for illegal activity\n2. Avoid sharing pirated or malicious content\n3. Spam and phishing are prohibited\n4. Using the service for DDoS attacks is forbidden\n5. One account is intended for one person\n6. Refunds are provided only in exceptional cases\n7. The administration may block accounts that violate the rules\n\nBy using the service you agree to follow these rules.", + "SELECT_COUNTRIES": "Select countries:", + "SELECT_DEVICES": "Number of devices:", + "SELECT_PERIOD": "Choose period:", + "SELECT_TRAFFIC": "Choose traffic package:", "SEND_CONTACT_BUTTON": "📱 Share contact", "SEND_LOCATION_BUTTON": "📍 Share location", + "SERVER_STATUS_AVAILABLE": "✅ Online", + "SERVER_STATUS_ERROR_SHORT": "Failed to fetch data", + "SERVER_STATUS_LATENCY": "{latency} ms", + "SERVER_STATUS_LATENCY_UNKNOWN": "no data", + "SERVER_STATUS_NEXT_PAGE": "Next ➡️", + "SERVER_STATUS_NOT_CONFIGURED": "Feature is not available.", + "SERVER_STATUS_NO_SERVERS": "No server data available.", + "SERVER_STATUS_OFFLINE": "no response", + "SERVER_STATUS_PAGINATION": "Page {current} of {total}", + "SERVER_STATUS_PREV_PAGE": "⬅️ Back", + "SERVER_STATUS_REFRESH": "🔄 Refresh", + "SERVER_STATUS_SUMMARY": "Total servers: {total} (online: {online}, offline: {offline})", + "SERVER_STATUS_TITLE": "📊 Server status", + "SERVER_STATUS_UNAVAILABLE": "❌ Offline", + "SERVER_STATUS_UPDATED_AT": "⏱ Updated at: {time}", "SHOW_QR_BUTTON": "📱 Show QR code", "SHOW_SUBSCRIPTION_LINK": "📋 Show subscription link", "SKIP_BUTTON": "Skip ➡️", + "STARS_PAYMENT_ENROLLMENT_ERROR": "❌ Failed to credit funds. Please contact support; the payment will be verified manually.", + "STARS_PAYMENT_PROCESSING_ERROR": "❌ Technical error processing the payment. Please contact support for assistance.", + "STARS_PAYMENT_SUCCESS": "🎉 Payment processed successfully!\n\n⭐ Stars spent: {stars_spent}\n💰 Added to balance: {amount} ₽\n🆔 Transaction ID: {transaction_id}...\n\nThank you for topping up! 🚀", + "STARS_PAYMENT_USER_NOT_FOUND": "❌ Error: user not found. Please contact support.", + "STARS_PRECHECK_INVALID_PAYLOAD": "Payment validation error. Please try again.", + "STARS_PRECHECK_TECHNICAL_ERROR": "Technical error. Please try again later.", + "STARS_PRECHECK_USER_NOT_FOUND": "User not found. Please contact support.", + "SUBSCRIPTION_ACTIVE": "✅ Active", + "SUBSCRIPTION_ADDITIONAL_STEP_TITLE": "{title}:", + "SUBSCRIPTION_APPS_PROMPT": "Choose an app to connect:", + "SUBSCRIPTION_APPS_TITLE": "📱 Apps for {device_name}", + "SUBSCRIPTION_APP_NOT_FOUND": "❌ App not found", + "SUBSCRIPTION_CONNECTED_DEVICES_FOOTER": "", + "SUBSCRIPTION_CONNECTED_DEVICES_TITLE": "
📱 Connected devices:\n", + "SUBSCRIPTION_CONNECT_CUSTOM_MESSAGE": "🚀 Connect subscription\n\n📱 Tap the button below to open the app:", + "SUBSCRIPTION_CONNECT_DEVICE_MESSAGE": "📱 Connect subscription\n\n🔗 Subscription link:\n{subscription_url}\n\n💡 Choose your device to get detailed setup instructions:", + "SUBSCRIPTION_CONNECT_LINK_MESSAGE": "🚀 Connect subscription\n\n🔗 Tap the button below to open the subscription link:", + "SUBSCRIPTION_CONNECT_LINK_PROMPT": "📱 Copy the link and add it to your VPN app", + "SUBSCRIPTION_CONNECT_LINK_SECTION": "🔗 Connection link:\n{subscription_url}", + "SUBSCRIPTION_CONNECT_MINIAPP_MESSAGE": "📱 Connect subscription\n\n🚀 Tap the button below to open the subscription in the Telegram mini app:", + "SUBSCRIPTION_DEVICE_APPS_NOT_FOUND": "❌ No apps found for this device", + "SUBSCRIPTION_DEVICE_FEATURED_APP": "📋 Recommended app: {app_name}", + "SUBSCRIPTION_DEVICE_GUIDE_TITLE": "📱 Setup for {device_name}", + "SUBSCRIPTION_DEVICE_HOW_TO_STEP1": "1. Install the app from the link above", + "SUBSCRIPTION_DEVICE_HOW_TO_STEP2": "2. Copy the subscription link (tap on it)", + "SUBSCRIPTION_DEVICE_HOW_TO_STEP3": "3. Open the app and paste the link", + "SUBSCRIPTION_DEVICE_HOW_TO_STEP4": "4. Connect to a server", + "SUBSCRIPTION_DEVICE_HOW_TO_TITLE": "💡 How to connect:", + "SUBSCRIPTION_DEVICE_LINK_TITLE": "🔗 Subscription link:", + "SUBSCRIPTION_DEVICE_STEP_ADD_TITLE": "Step 2 - Add subscription:", + "SUBSCRIPTION_DEVICE_STEP_CONNECT_TITLE": "Step 3 - Connect:", + "SUBSCRIPTION_DEVICE_STEP_INSTALL_TITLE": "Step 1 - Install:", + "SUBSCRIPTION_EXPIRED": "\n❌ Subscription expired\n\nYour subscription has ended. Renew it to restore access.\n", + "SUBSCRIPTION_EXPIRING": "\n⚠️ Subscription expiring!\n\nYour subscription expires in {days} days.\n\nRenew it now so you don't lose access.\n", + "SUBSCRIPTION_EXPIRING_PAID": "\n⚠️ Subscription expires in {days_text}!\n\nYour paid subscription ends on {end_date}.\n\n💳 Autopay: {autopay_status}\n\n{action_text}\n", + "SUBSCRIPTION_IMPORT_INSTRUCTION_PROMPT": "📱 Tap the button below to get setup instructions for your device", + "SUBSCRIPTION_IMPORT_LINK_SECTION": "🔗 Your import link for the VPN app:\n{subscription_url}", + "SUBSCRIPTION_INFO": "\n📱 Subscription details\n\n📊 Status: {status}\n🎭 Type: {type}\n📅 Valid until: {end_date}\n⏰ Days left: {days_left}\n\n📈 Traffic: {traffic_used} / {traffic_limit}\n🌍 Servers: {countries_count} countries\n📱 Devices: {devices_used} / {devices_limit}\n\n💳 Autopay: {autopay_status}\n", + "SUBSCRIPTION_LINK_GENERATING_NOTICE": "{purchase_text}\n\nThe link is being generated, open the 'My subscription' section in a few seconds.", + "SUBSCRIPTION_LINK_HINT": "💡 If the link didn't copy, select it manually and copy.", + "SUBSCRIPTION_LINK_STEP1": "1. Tap the link above to copy it", + "SUBSCRIPTION_LINK_STEP2": "2. Open your VPN app", + "SUBSCRIPTION_LINK_STEP3": "3. Find the 'Add subscription' or 'Import' option", + "SUBSCRIPTION_LINK_STEP4": "4. Paste the copied link", + "SUBSCRIPTION_LINK_UNAVAILABLE": "❌ Subscription link is unavailable", + "SUBSCRIPTION_LINK_USAGE_TITLE": "📱 How to use:", + "SUBSCRIPTION_NONE": "❌ No active subscription", + "SUBSCRIPTION_NOT_FOUND": "❌ Subscription not found", + "SUBSCRIPTION_NO_ACTIVE_LINK": "⚠ You don't have an active subscription or the link is still being generated", + "SUBSCRIPTION_NO_SERVERS": "No servers", + "SUBSCRIPTION_OVERVIEW_TEMPLATE": "👤 {full_name}\n💰 Balance: {balance}\n📱 Subscription: {status_emoji} {status_display}{warning}\n\n📱 Subscription details\n🎭 Type: {subscription_type}\n📅 Valid until: {end_date}\n⏰ Time left: {time_left}\n📈 Traffic: {traffic}\n🌍 Servers: {servers}\n📱 Devices: {devices_used} / {device_limit}", + "SUBSCRIPTION_PURCHASED": "🎉 Subscription purchased successfully!", "SUBSCRIPTION_SETTINGS_BUTTON": "⚙️ Subscription settings", + "SUBSCRIPTION_SPECIFIC_APP_TITLE": "📱 {app_name} - {device_name}", + "SUBSCRIPTION_STATUS_ACTIVE": "Active", + "SUBSCRIPTION_STATUS_EXPIRED": "Expired", + "SUBSCRIPTION_STATUS_TRIAL": "Trial", + "SUBSCRIPTION_STATUS_UNKNOWN": "Unknown", + "SUBSCRIPTION_SUMMARY": "\n📋 Final configuration\n\n📅 Period: {period} days\n📈 Traffic: {traffic}\n🌍 Countries: {countries}\n📱 Devices: {devices}\n\n💰 Total: {total_price}\n\nConfirm the purchase?\n", + "SUBSCRIPTION_TIME_LEFT_DAYS": "{days} days", + "SUBSCRIPTION_TIME_LEFT_EXPIRED": "expired", + "SUBSCRIPTION_TIME_LEFT_HOURS": "{hours} hr", + "SUBSCRIPTION_TIME_LEFT_MINUTES": "{minutes} min", + "SUBSCRIPTION_TRAFFIC_LIMITED": "{used} / {limit} GB", + "SUBSCRIPTION_TRAFFIC_UNLIMITED": "∞ (unlimited) | Used: {used} GB", + "SUBSCRIPTION_TRIAL": "🧪 Trial subscription", + "SUBSCRIPTION_TYPE_PAID": "Paid", + "SUBSCRIPTION_TYPE_TRIAL": "Trial", + "SUBSCRIPTION_WARNING_MINUTES": "\n🔴 expires in a few minutes!", + "SUBSCRIPTION_WARNING_TODAY": "\n⚠️ expires today!", + "SUBSCRIPTION_WARNING_TOMORROW": "\n⚠️ expires tomorrow!", "SUB_STATUS_ACTIVE_FEW_DAYS": "💎 Active\n⚠️ expires in {days} days", "SUB_STATUS_ACTIVE_LONG": "💎 Active\n📅 until {end_date} ({days} days)", "SUB_STATUS_ACTIVE_TODAY": "💎 Active\n⚠️ expires today!", @@ -105,314 +390,38 @@ "SUB_STATUS_TRIAL_ACTIVE": "🎁 Trial subscription\n📅 until {end_date} ({days} days)", "SUB_STATUS_TRIAL_TODAY": "🎁 Trial subscription\n⚠️ expires today!", "SUB_STATUS_TRIAL_TOMORROW": "🎁 Trial subscription\n⚠️ expires tomorrow!", - "SUBSCRIPTION_ACTIVE": "✅ Active", "SUCCESS": "✅ Success", - "REGISTRATION_COMPLETING": "✅ Completing registration...", - "SWITCH_TRAFFIC_BUTTON": "🔄 Switch traffic", - "TOPUP_BALANCE_BUTTON": "💳 Top up balance", - "TRAFFIC_PACKAGES_NOT_CONFIGURED": "⚠️ Traffic packages are not configured", - "TRIAL_ACTIVATE_BUTTON": "🎁 Activate", - "PROMOCODE_EMPTY_INPUT": "❌ Please enter a valid promo code", - "STARS_PAYMENT_ENROLLMENT_ERROR": "❌ Failed to credit funds. Please contact support; the payment will be verified manually.", - "STARS_PAYMENT_PROCESSING_ERROR": "❌ Technical error processing the payment. Please contact support for assistance.", - "STARS_PAYMENT_SUCCESS": "🎉 Payment processed successfully!\n\n⭐ Stars spent: {stars_spent}\n💰 Added to balance: {amount} ₽\n🆔 Transaction ID: {transaction_id}...\n\nThank you for topping up! 🚀", - "STARS_PAYMENT_USER_NOT_FOUND": "❌ Error: user not found. Please contact support.", - "STARS_PRECHECK_INVALID_PAYLOAD": "Payment validation error. Please try again.", - "STARS_PRECHECK_TECHNICAL_ERROR": "Technical error. Please try again later.", - "STARS_PRECHECK_USER_NOT_FOUND": "User not found. Please contact support.", - "UNKNOWN_CALLBACK_ALERT": "❓ Unknown action. Please try again.", - "UNKNOWN_COMMAND_MESSAGE": "❓ I didn't understand that command. Use the menu buttons.", - "WELCOME": "\n🎉 Welcome to VPN Service!\n\nOur service provides fast and secure internet access without restrictions.\n\n🔐 Advantages:\n• High connection speed\n• Servers in different countries \n• Reliable data protection\n• 24/7 support\n\nTo get started, select interface language:\n", - "WELCOME_FALLBACK": "Welcome, {user_name}!", - "YES": "✅ Yes", - "ACCESS_DENIED": "❌ Access denied", - "ADMIN_MESSAGES": "📨 Broadcasts", - "ADMIN_MONITORING": "🔍 Monitoring", - "ADMIN_PANEL": "\n⚙️ Administration panel\n\nSelect a section to manage:\n", - "ADMIN_PROMOCODES": "🎫 Promo codes", - "ADMIN_REFERRALS": "🤝 Referral program", - "ADMIN_REMNAWAVE": "🖥️ Remnawave", - "ADMIN_RULES": "📋 Rules", - "ADMIN_STATISTICS": "📊 Statistics", - "ADMIN_PROMO_GROUPS": "💳 Promo groups", - "ADMIN_PROMO_GROUPS_TITLE": "💳 Promo groups", - "ADMIN_PROMO_GROUPS_SUMMARY": "Groups total: {count}\nMembers total: {members}", - "ADMIN_PROMO_GROUPS_DISCOUNTS": "Discounts — servers: {servers}%, traffic: {traffic}%, devices: {devices}%", - "ADMIN_PROMO_GROUPS_DEFAULT_LABEL": " (default)", - "ADMIN_PROMO_GROUPS_MEMBERS_COUNT": "Members: {count}", - "ADMIN_PROMO_GROUPS_EMPTY": "No promo groups found.", - "ADMIN_USER_PROMO_GROUP_BUTTON": "👥 Promo group", - "ADMIN_USER_PROMO_GROUP_TITLE": "👥 User promo group", - "ADMIN_USER_PROMO_GROUP_CURRENT": "Current group: {name}", - "ADMIN_USER_PROMO_GROUP_CURRENT_NONE": "Current group: not assigned", - "ADMIN_USER_PROMO_GROUP_DISCOUNTS": "Discounts — servers: {servers}%, traffic: {traffic}%, devices: {devices}%", - "ADMIN_USER_PROMO_GROUP_DISCOUNTS_NONE": "No discounts configured.", - "ADMIN_USER_PROMO_GROUP_SELECT": "Select a promo group to assign:", - "ADMIN_USER_PROMO_GROUP_UPDATED": "✅ User promo group updated: “{name}”", - "ADMIN_USER_PROMO_GROUP_ALREADY": "ℹ️ The user is already in this promo group.", - "ADMIN_USER_PROMO_GROUP_ERROR": "❌ Failed to update the user's promo group.", - "ADMIN_USER_PROMO_GROUP_BACK": "⬅️ Back to user", - "ADMIN_PROMO_GROUP_DETAILS_TITLE": "💳 Promo group: {name}", - "ADMIN_PROMO_GROUP_DETAILS_MEMBERS": "Members: {count}", - "ADMIN_PROMO_GROUP_DETAILS_DEFAULT": "This is the default group.", - "ADMIN_PROMO_GROUP_MEMBERS_BUTTON": "👥 Members", - "ADMIN_PROMO_GROUP_EDIT_BUTTON": "✏️ Edit", - "ADMIN_PROMO_GROUP_DELETE_BUTTON": "🗑️ Delete", - "ADMIN_PROMO_GROUP_CREATE_NAME_PROMPT": "Enter a name for the new promo group:", - "ADMIN_PROMO_GROUP_INVALID_NAME": "Name cannot be empty.", - "ADMIN_PROMO_GROUP_CREATE_TRAFFIC_PROMPT": "Enter traffic discount (0-100):", - "ADMIN_PROMO_GROUP_CREATE_SERVERS_PROMPT": "Enter server discount (0-100):", - "ADMIN_PROMO_GROUP_CREATE_DEVICES_PROMPT": "Enter device discount (0-100):", - "ADMIN_PROMO_GROUP_INVALID_PERCENT": "Enter a number from 0 to 100.", - "ADMIN_PROMO_GROUP_CREATED": "Promo group “{name}” created.", - "ADMIN_PROMO_GROUP_CREATED_BACK_BUTTON": "↩️ Back to promo groups", - "ADMIN_PROMO_GROUP_EDIT_NAME_PROMPT": "Enter a new name (current: {name}):", - "ADMIN_PROMO_GROUP_EDIT_TRAFFIC_PROMPT": "Enter new traffic discount (0-100):", - "ADMIN_PROMO_GROUP_EDIT_SERVERS_PROMPT": "Enter new server discount (0-100):", - "ADMIN_PROMO_GROUP_EDIT_DEVICES_PROMPT": "Enter new device discount (0-100):", - "ADMIN_PROMO_GROUP_UPDATED": "Promo group “{name}” updated.", - "ADMIN_PROMO_GROUP_MEMBERS_TITLE": "👥 Members of {name}", - "ADMIN_PROMO_GROUP_MEMBERS_EMPTY": "This group has no members yet.", - "ADMIN_PROMO_GROUP_DELETE_FORBIDDEN": "The default promo group cannot be deleted.", - "ADMIN_PROMO_GROUP_DELETE_CONFIRM": "Delete promo group “{name}”? All users will be moved to the default group.", - "ADMIN_PROMO_GROUP_DELETED": "Promo group “{name}” deleted.", - "ADMIN_SUBSCRIPTIONS": "📱 Subscriptions", - "ADMIN_USERS": "👥 Users", - "AUTOPAY_DISABLED_TEXT": "Disabled — don't forget to renew manually!", - "AUTOPAY_ENABLED_TEXT": "Enabled — the subscription will renew automatically", - "AUTOPAY_FAILED": "\n❌ Autopay failed\n\nWe couldn't charge the renewal payment.\nBalance available: {balance}\nRequired: {required}\n\nPlease top up your balance and renew manually.\n", - "AUTOPAY_SUCCESS": "\n✅ Autopay completed\n\nYour subscription was automatically renewed for {days} days.\nCharged from balance: {amount}\n", - "BALANCE_BUTTON": "💰 Balance: {balance}", - "BALANCE_BUTTON_ZERO": "💰 Balance: 0 ₽", - "BALANCE_HISTORY": "📊 Transaction history", - "BALANCE_INFO": "\n💰 Balance: {balance}\n\nChoose an action:\n", - "BALANCE_SUPPORT_REQUEST": "🛠️ Request via support", - "BALANCE_TOP_UP": "💳 Top up", - "CAMPAIGN_EXISTING_USER": "ℹ️ This promo link is available only to new users.", - "CAMPAIGN_BONUS_BALANCE": "🎉 You received {amount} for registering via the \"{name}\" campaign!", - "CAMPAIGN_BONUS_SUBSCRIPTION": "🎉 You’ve been granted a {days}-day subscription (traffic: {traffic}, devices: {devices}) from the \"{name}\" campaign!", - "BUY_SUBSCRIPTION_START": "\n💎 Subscription setup\n\nLet's configure a plan that fits you.\n\nFirst, choose the subscription period:\n", - "PROMO_GROUP_DISCOUNTS_HEADER": "🎁 Your promo group discounts", - "PROMO_GROUP_DISCOUNT_SERVERS": "🌍 Servers: {percent}%", - "PROMO_GROUP_DISCOUNT_TRAFFIC": "📊 Traffic: {percent}%", - "PROMO_GROUP_DISCOUNT_DEVICES": "📱 Extra devices: {percent}%", - "PROMO_GROUP_PERIOD_DISCOUNTS_HEADER": "⏳ Long-term period discounts:", - "PROMO_GROUP_PERIOD_DISCOUNT_ITEM": "{period} — {percent}%", - "CHANGE_DEVICES_CONFIRM": "\n📱 Confirm change\n\nCurrent amount: {current_devices} devices\nNew amount: {new_devices} devices\n\nAction: {action}\n💰 {cost}\n\nApply this change?\n", - "CHANGE_DEVICES_INFO": "\n📱 Adjust device limit\n\nCurrent limit: {current_devices} devices\n\nChoose the new number of devices:\n\n💡 Important:\n• Increasing — extra charge proportional to the remaining time\n• Decreasing — funds are not refunded\n", - "CHANGE_DEVICES_SUCCESS_DECREASE": "\n✅ Device limit decreased!\n\n📱 Was: {old_count} → Now: {new_count}\nℹ️ Payments are not refunded\n", - "CHANGE_DEVICES_SUCCESS_INCREASE": "\n✅ Device limit increased!\n\n📱 Was: {old_count} → Now: {new_count}\n💰 Charged: {amount}\n", - "CHANGE_DEVICES_TITLE": "📱 Change device limit", - "CONTACT_SUPPORT": "💬 Contact support", - "CREATE_INVITE": "📝 Create invite", - "DEVICES_INSUFFICIENT_BALANCE": "⚠️ Insufficient balance!\nRequired: {required} (for {months} mo)\nYou have: {balance}", - "DEVICES_LIMIT_EXCEEDED": "⚠️ Maximum device limit exceeded ({limit})", - "DEVICES_MINIMUM_LIMIT": "⚠️ Minimum number of devices: {limit}", - "DEVICES_NO_CHANGE": "ℹ️ Device limit was not changed", - "INVALID_AMOUNT": "❌ Invalid amount", - "MAINTENANCE_MODE_ACTIVE": "\n🔧 Maintenance in progress!\n\nThe service is temporarily unavailable while we improve performance.\n\n⏰ Estimated completion time: unknown\n🔄 Please try again later\n\nWe apologize for the inconvenience.\n", - "MAINTENANCE_MODE_API_ERROR": "\n🔧 Maintenance in progress!\n\nThe service is temporarily unavailable due to connection issues with the servers.\n\n⏰ We're working on it. Please try again in a few minutes.\n\n🔄 Last check: {last_check}\n", - "MENU_ADMIN": "⚙️ Admin panel", - "MENU_BUY_SUBSCRIPTION": "💎 Buy subscription", - "MENU_EXTEND_SUBSCRIPTION": "⏰ Extend subscription", - "MENU_PROMOCODE": "🎫 Promo code", - "MENU_REFERRALS": "🤝 Referral program", - "MENU_RULES": "📋 Service rules", - "MENU_SERVER_STATUS": "📊 Server status", - "MENU_SUPPORT": "🛠️ Support", - "OPERATION_CANCELLED": "❌ Operation cancelled", - "PERIOD_14_DAYS": "📅 14 days - {settings.format_price(settings.PRICE_14_DAYS)}", - "PERIOD_30_DAYS": "📅 30 days - {settings.format_price(settings.PRICE_30_DAYS)}", - "PERIOD_60_DAYS": "📅 60 days - {settings.format_price(settings.PRICE_60_DAYS)}", - "PERIOD_90_DAYS": "📅 90 days - {settings.format_price(settings.PRICE_90_DAYS)}", - "PERIOD_180_DAYS": "📅 180 days - {settings.format_price(settings.PRICE_180_DAYS)}", - "PERIOD_360_DAYS": "📅 360 days - {settings.format_price(settings.PRICE_360_DAYS)}", - "PROMOCODE_ENTER": "🎫 Enter promo code", - "PROMOCODE_EXPIRED": "❌ Promo code has expired", - "PROMOCODE_INVALID": "❌ Invalid promo code", - "PROMOCODE_SUCCESS": "🎉 Promo code applied!", - "PROMOCODE_USED": "ℹ️ Promo code has already been used", - "REFERRAL_CODE_APPLIED": "🎁 Referral code applied! You will receive a bonus after the first purchase.", - "REFERRAL_INFO": "\n🤝 Referral program\n\n👥 Invited: {referrals_count} friends\n💰 Earned: {earned_amount}\n\n🔗 Your referral link:\n{referral_link}\n\n🎫 Your promo code:\n{referral_code}\n\n💰 Terms:\n• Per friend: {registration_bonus}\n• Top-up commission: {commission_percent}%\n", - "REFERRAL_INVITE_MESSAGE": "\n🎯 Invitation to the VPN service\n\nHi! I invite you to an excellent VPN service!\n\n🎁 Use my link to get a bonus: {bonus}\n\n🔗 Join: {link}\n🎫 Or use promo code: {code}\n\n💪 Fast, reliable, affordable!\n", - "RULES_ACCEPT": "✅ I accept the rules", - "RULES_DECLINE": "❌ I do not accept", - "RULES_REQUIRED": "❗️ You must accept the rules to use the service!", - "SELECT_COUNTRIES": "Select countries:", - "SELECT_DEVICES": "Number of devices:", - "SELECT_PERIOD": "Choose period:", - "SELECT_TRAFFIC": "Choose traffic package:", - "SUBSCRIPTION_EXPIRED": "\n❌ Subscription expired\n\nYour subscription has ended. Renew it to restore access.\n", - "SUBSCRIPTION_EXPIRING": "\n⚠️ Subscription expiring!\n\nYour subscription expires in {days} days.\n\nRenew it now so you don't lose access.\n", - "SUBSCRIPTION_EXPIRING_PAID": "\n⚠️ Subscription expires in {days_text}!\n\nYour paid subscription ends on {end_date}.\n\n💳 Autopay: {autopay_status}\n\n{action_text}\n", - "SUBSCRIPTION_INFO": "\n📱 Subscription details\n\n📊 Status: {status}\n🎭 Type: {type}\n📅 Valid until: {end_date}\n⏰ Days left: {days_left}\n\n📈 Traffic: {traffic_used} / {traffic_limit}\n🌍 Servers: {countries_count} countries\n📱 Devices: {devices_used} / {devices_limit}\n\n💳 Autopay: {autopay_status}\n", - "SUBSCRIPTION_NONE": "❌ No active subscription", - "SUBSCRIPTION_NOT_FOUND": "❌ Subscription not found", - "SUBSCRIPTION_PURCHASED": "🎉 Subscription purchased successfully!", - "SUBSCRIPTION_SUMMARY": "\n📋 Final configuration\n\n📅 Period: {period} days\n📈 Traffic: {traffic}\n🌍 Countries: {countries}\n📱 Devices: {devices}\n\n💰 Total: {total_price}\n\nConfirm the purchase?\n", - "SUBSCRIPTION_TRIAL": "🧪 Trial subscription", "SUPPORT_INFO": "\n🛠️ Technical support\n\nFor any questions contact our support:\n\n👤 {settings.SUPPORT_USERNAME}\n\nWe can help with:\n• Connection setup\n• Troubleshooting issues\n• Payment questions\n• Other requests\n\n⏰ Response time: usually within 1-2 hours\n", - "SERVER_STATUS_AVAILABLE": "✅ Online", - "SERVER_STATUS_ERROR_SHORT": "Failed to fetch data", - "SERVER_STATUS_LATENCY": "{latency} ms", - "SERVER_STATUS_LATENCY_UNKNOWN": "no data", - "SERVER_STATUS_NEXT_PAGE": "Next ➡️", - "SERVER_STATUS_NO_SERVERS": "No server data available.", - "SERVER_STATUS_NOT_CONFIGURED": "Feature is not available.", - "SERVER_STATUS_OFFLINE": "no response", - "SERVER_STATUS_PAGINATION": "Page {current} of {total}", - "SERVER_STATUS_PREV_PAGE": "⬅️ Back", - "SERVER_STATUS_REFRESH": "🔄 Refresh", - "SERVER_STATUS_SUMMARY": "Total servers: {total} (online: {online}, offline: {offline})", - "SERVER_STATUS_TITLE": "📊 Server status", - "SERVER_STATUS_UPDATED_AT": "⏱ Updated at: {time}", - "SERVER_STATUS_UNAVAILABLE": "❌ Offline", + "SWITCH_TRAFFIC_BUTTON": "🔄 Switch traffic", "SWITCH_TRAFFIC_CONFIRM": "\n🔄 Confirm traffic change\n\nCurrent limit: {current_traffic}\nNew limit: {new_traffic}\n\nAction: {action}\n💰 {cost}\n\nApply this change?\n", "SWITCH_TRAFFIC_INFO": "\n🔄 Switch traffic limit\n\nCurrent limit: {current_traffic}\nChoose the new traffic amount:\n\n💡 Important:\n• Increasing — you pay the difference proportionally to the remaining time\n• Decreasing — payments are not refunded\n• The used traffic counter is NOT reset\n", "SWITCH_TRAFFIC_SUCCESS_DECREASE": "\n✅ Traffic limit decreased!\n\n📊 Was: {old_traffic} → Now: {new_traffic}\nℹ️ Payments are not refunded\n", "SWITCH_TRAFFIC_SUCCESS_INCREASE": "\n✅ Traffic limit increased!\n\n📊 Was: {old_traffic} → Now: {new_traffic}\n💰 Charged: {amount}\n", "SWITCH_TRAFFIC_TITLE": "🔄 Switch traffic limit", + "TOPUP_BALANCE_BUTTON": "💳 Top up balance", "TOP_UP_AMOUNT": "💳 Enter top-up amount (in rubles):", "TOP_UP_METHODS": "\n💳 Select a payment method\n\nAmount: {amount}\n", "TOP_UP_STARS": "⭐ Telegram Stars", "TOP_UP_TRIBUTE": "💎 Bank card", - "TRAFFIC_5GB": "📊 5 GB - {settings.format_price(settings.PRICE_TRAFFIC_5GB)}", + "TRAFFIC_100GB": "📊 100 GB - {settings.format_price(settings.PRICE_TRAFFIC_100GB)}", "TRAFFIC_10GB": "📊 10 GB - {settings.format_price(settings.PRICE_TRAFFIC_10GB)}", + "TRAFFIC_250GB": "📊 250 GB - {settings.format_price(settings.PRICE_TRAFFIC_250GB)}", "TRAFFIC_25GB": "📊 25 GB - {settings.format_price(settings.PRICE_TRAFFIC_25GB)}", "TRAFFIC_50GB": "📊 50 GB - {settings.format_price(settings.PRICE_TRAFFIC_50GB)}", - "TRAFFIC_100GB": "📊 100 GB - {settings.format_price(settings.PRICE_TRAFFIC_100GB)}", - "TRAFFIC_250GB": "📊 250 GB - {settings.format_price(settings.PRICE_TRAFFIC_250GB)}", - "TRAFFIC_UNLIMITED": "📊 Unlimited - {settings.format_price(settings.PRICE_TRAFFIC_UNLIMITED)}", + "TRAFFIC_5GB": "📊 5 GB - {settings.format_price(settings.PRICE_TRAFFIC_5GB)}", "TRAFFIC_INSUFFICIENT_BALANCE": "⚠️ Insufficient balance!\nRequired: {required} (for {months} mo)\nYou have: {balance}", "TRAFFIC_NO_CHANGE": "ℹ️ Traffic limit was not changed", + "TRAFFIC_PACKAGES_NOT_CONFIGURED": "⚠️ Traffic packages are not configured", + "TRAFFIC_UNLIMITED": "📊 Unlimited - {settings.format_price(settings.PRICE_TRAFFIC_UNLIMITED)}", "TRIAL_ACTIVATED": "🎉 Trial subscription activated!", + "TRIAL_ACTIVATE_BUTTON": "🎁 Activate", "TRIAL_ALREADY_USED": "❌ The trial subscription has already been used", "TRIAL_AVAILABLE": "\n🎁 Trial subscription\n\nYou can get a free trial plan:\n\n⏰ Duration: {days} days\n📈 Traffic: {traffic} GB\n📱 Devices: {devices} pcs\n🌍 Server: {server_name}\n\nActivate the trial subscription?\n", "TRIAL_ENDING_SOON": "\n🎁 The trial subscription is ending soon!\n\nYour trial expires in a few hours.\n\n💎 Don't want to lose VPN access?\nSwitch to the full subscription!\n\n🔥 Special offer:\n• 30 days for {price}\n• Unlimited traffic\n• All servers available\n• Speeds up to 1 Gbit/s\n\n⚡️ Activate before the trial ends!\n", + "UNKNOWN_CALLBACK_ALERT": "❓ Unknown action. Please try again.", + "UNKNOWN_COMMAND_MESSAGE": "❓ I didn't understand that command. Use the menu buttons.", "USER_NOT_FOUND": "❌ User not found", - "MENU_LANGUAGE": "🌐 Language", - "SUBSCRIPTION_STATUS_EXPIRED": "Expired", - "SUBSCRIPTION_STATUS_TRIAL": "Trial", - "SUBSCRIPTION_STATUS_ACTIVE": "Active", - "SUBSCRIPTION_STATUS_UNKNOWN": "Unknown", - "SUBSCRIPTION_TIME_LEFT_EXPIRED": "expired", - "SUBSCRIPTION_TIME_LEFT_DAYS": "{days} days", - "SUBSCRIPTION_TIME_LEFT_HOURS": "{hours} hr", - "SUBSCRIPTION_TIME_LEFT_MINUTES": "{minutes} min", - "SUBSCRIPTION_WARNING_TOMORROW": "\n⚠️ expires tomorrow!", - "SUBSCRIPTION_WARNING_TODAY": "\n⚠️ expires today!", - "SUBSCRIPTION_WARNING_MINUTES": "\n🔴 expires in a few minutes!", - "SUBSCRIPTION_TYPE_TRIAL": "Trial", - "SUBSCRIPTION_TYPE_PAID": "Paid", - "SUBSCRIPTION_TRAFFIC_UNLIMITED": "∞ (unlimited) | Used: {used} GB", - "SUBSCRIPTION_TRAFFIC_LIMITED": "{used} / {limit} GB", - "SUBSCRIPTION_NO_SERVERS": "No servers", - "SUBSCRIPTION_OVERVIEW_TEMPLATE": "👤 {full_name}\n💰 Balance: {balance}\n📱 Subscription: {status_emoji} {status_display}{warning}\n\n📱 Subscription details\n🎭 Type: {subscription_type}\n📅 Valid until: {end_date}\n⏰ Time left: {time_left}\n📈 Traffic: {traffic}\n🌍 Servers: {servers}\n📱 Devices: {devices_used} / {device_limit}", - "SUBSCRIPTION_CONNECTED_DEVICES_TITLE": "
📱 Connected devices:\n", - "SUBSCRIPTION_CONNECTED_DEVICES_FOOTER": "
", - "SUBSCRIPTION_CONNECT_LINK_SECTION": "🔗 Connection link:\n{subscription_url}", - "SUBSCRIPTION_CONNECT_LINK_PROMPT": "📱 Copy the link and add it to your VPN app", - "SUBSCRIPTION_IMPORT_LINK_SECTION": "🔗 Your import link for the VPN app:\n{subscription_url}", - "SUBSCRIPTION_IMPORT_INSTRUCTION_PROMPT": "📱 Tap the button below to get setup instructions for your device", - "BACK_TO_MAIN_MENU_BUTTON": "⬅️ Back to main menu", - "CUSTOM_MINIAPP_URL_NOT_SET": "⚠ Custom mini-app link is not configured", - "SUBSCRIPTION_LINK_GENERATING_NOTICE": "{purchase_text}\n\nThe link is being generated, open the 'My subscription' section in a few seconds.", - "SUBSCRIPTION_NO_ACTIVE_LINK": "⚠ You don't have an active subscription or the link is still being generated", - "SUBSCRIPTION_CONNECT_MINIAPP_MESSAGE": "📱 Connect subscription\n\n🚀 Tap the button below to open the subscription in the Telegram mini app:", - "SUBSCRIPTION_CONNECT_CUSTOM_MESSAGE": "🚀 Connect subscription\n\n📱 Tap the button below to open the app:", - "SUBSCRIPTION_CONNECT_LINK_MESSAGE": "🚀 Connect subscription\n\n🔗 Tap the button below to open the subscription link:", - "SUBSCRIPTION_CONNECT_DEVICE_MESSAGE": "📱 Connect subscription\n\n🔗 Subscription link:\n{subscription_url}\n\n💡 Choose your device to get detailed setup instructions:", - "SUBSCRIPTION_LINK_UNAVAILABLE": "❌ Subscription link is unavailable", - "SUBSCRIPTION_DEVICE_APPS_NOT_FOUND": "❌ No apps found for this device", - "SUBSCRIPTION_DEVICE_GUIDE_TITLE": "📱 Setup for {device_name}", - "SUBSCRIPTION_DEVICE_LINK_TITLE": "🔗 Subscription link:", - "SUBSCRIPTION_DEVICE_FEATURED_APP": "📋 Recommended app: {app_name}", - "SUBSCRIPTION_DEVICE_STEP_INSTALL_TITLE": "Step 1 - Install:", - "SUBSCRIPTION_DEVICE_STEP_ADD_TITLE": "Step 2 - Add subscription:", - "SUBSCRIPTION_DEVICE_STEP_CONNECT_TITLE": "Step 3 - Connect:", - "SUBSCRIPTION_DEVICE_HOW_TO_TITLE": "💡 How to connect:", - "SUBSCRIPTION_DEVICE_HOW_TO_STEP1": "1. Install the app from the link above", - "SUBSCRIPTION_DEVICE_HOW_TO_STEP2": "2. Copy the subscription link (tap on it)", - "SUBSCRIPTION_DEVICE_HOW_TO_STEP3": "3. Open the app and paste the link", - "SUBSCRIPTION_DEVICE_HOW_TO_STEP4": "4. Connect to a server", - "SUBSCRIPTION_APPS_TITLE": "📱 Apps for {device_name}", - "SUBSCRIPTION_APPS_PROMPT": "Choose an app to connect:", - "SUBSCRIPTION_APP_NOT_FOUND": "❌ App not found", - "SUBSCRIPTION_SPECIFIC_APP_TITLE": "📱 {app_name} - {device_name}", - "SUBSCRIPTION_ADDITIONAL_STEP_TITLE": "{title}:", - "SUBSCRIPTION_LINK_USAGE_TITLE": "📱 How to use:", - "SUBSCRIPTION_LINK_STEP1": "1. Tap the link above to copy it", - "SUBSCRIPTION_LINK_STEP2": "2. Open your VPN app", - "SUBSCRIPTION_LINK_STEP3": "3. Find the 'Add subscription' or 'Import' option", - "SUBSCRIPTION_LINK_STEP4": "4. Paste the copied link", - "SUBSCRIPTION_LINK_HINT": "💡 If the link didn't copy, select it manually and copy.", - "REFERRAL_PROGRAM_TITLE": "👥 Referral program", - "REFERRAL_STATS_HEADER": "📊 Your statistics:", - "REFERRAL_STATS_INVITED": "• Invited users: {count}", - "REFERRAL_STATS_FIRST_TOPUPS": "• Made first top-up: {count}", - "REFERRAL_STATS_ACTIVE": "• Active referrals: {count}", - "REFERRAL_STATS_CONVERSION": "• Conversion: {rate}%", - "REFERRAL_STATS_TOTAL_EARNED": "• Earned in total: {amount}", - "REFERRAL_STATS_MONTH_EARNED": "• Earned last month: {amount}", - "REFERRAL_REWARDS_HEADER": "🎁 How rewards work:", - "REFERRAL_REWARD_NEW_USER": "• New user receives: {bonus} on the first top-up from {minimum}", - "REFERRAL_REWARD_INVITER": "• You receive on the referral's first top-up: {bonus}", - "REFERRAL_REWARD_COMMISSION": "• Commission from each referral top-up: {percent}%", - "REFERRAL_LINK_TITLE": "🔗 Your referral link:", - "REFERRAL_CODE_TITLE": "🆔 Your code: {code}", - "REFERRAL_RECENT_EARNINGS_HEADER": "💰 Latest rewards:", - "REFERRAL_EARNING_REASON_FIRST_TOPUP": "🎉 First top-up", - "REFERRAL_EARNING_REASON_COMMISSION_TOPUP": "💰 Top-up commission", - "REFERRAL_EARNING_REASON_COMMISSION_PURCHASE": "💰 Purchase commission", - "REFERRAL_RECENT_EARNINGS_ITEM": "• {reason}: {amount} from {referral_name}", - "REFERRAL_EARNINGS_BY_TYPE_HEADER": "📈 Earnings by type:", - "REFERRAL_EARNINGS_FIRST_TOPUPS": "• Bonuses for first top-ups: {count} ({amount})", - "REFERRAL_EARNINGS_TOPUPS": "• Top-up commissions: {count} ({amount})", - "REFERRAL_EARNINGS_PURCHASES": "• Purchase commissions: {count} ({amount})", - "REFERRAL_INVITE_FOOTER": "📢 Invite friends and earn!", - "REFERRAL_LINK_CAPTION": "🔗 Your referral link:\n{link}", - "REFERRAL_LIST_EMPTY": "📋 You have no referrals yet.\n\nShare your referral link to start earning!", - "REFERRAL_LIST_HEADER": "👥 Your referrals (page {current}/{total})", - "REFERRAL_LIST_ITEM_HEADER": "{index}. {status} {name}", - "REFERRAL_LIST_ITEM_TOPUPS": " {emoji} Top-ups: {count}", - "REFERRAL_LIST_ITEM_EARNED": " 💎 Earned from them: {amount}", - "REFERRAL_LIST_ITEM_REGISTERED": " 📅 Registered: {days} days ago", - "REFERRAL_LIST_ITEM_ACTIVITY": " 🕐 Activity: {days} days ago", - "REFERRAL_LIST_ITEM_ACTIVITY_LONG_AGO": " 🕐 Activity: long ago", - "REFERRAL_LIST_PREV_PAGE": "⬅️ Back", - "REFERRAL_LIST_NEXT_PAGE": "Next ➡️", - "REFERRAL_ANALYTICS_TITLE": "📊 Referral analytics", - "REFERRAL_ANALYTICS_EARNINGS_HEADER": "💰 Earnings by period:", - "REFERRAL_ANALYTICS_EARNINGS_TODAY": "• Today: {amount}", - "REFERRAL_ANALYTICS_EARNINGS_WEEK": "• Week: {amount}", - "REFERRAL_ANALYTICS_EARNINGS_MONTH": "• Month: {amount}", - "REFERRAL_ANALYTICS_EARNINGS_QUARTER": "• Quarter: {amount}", - "REFERRAL_ANALYTICS_TOP_TITLE": "🏆 Top {count} referrals:", - "REFERRAL_ANALYTICS_TOP_ITEM": "{index}. {name}: {amount} ({count} rewards)", - "REFERRAL_ANALYTICS_FOOTER": "📈 Keep growing your referral network!", - "REFERRAL_INVITE_TITLE": "🎉 Join the VPN service!", - "REFERRAL_INVITE_BONUS": "💎 On your first top-up from {minimum} you get {bonus} as a bonus!", - "REFERRAL_INVITE_FEATURE_FAST": "🚀 Fast connection", - "REFERRAL_INVITE_FEATURE_SERVERS": "🌍 Servers worldwide", - "REFERRAL_INVITE_FEATURE_SECURE": "🔒 Reliable protection", - "REFERRAL_INVITE_LINK_PROMPT": "👇 Follow the link:", - "REFERRAL_SHARE_BUTTON": "📤 Share", - "REFERRAL_INVITE_CREATED_TITLE": "📝 Invitation created!", - "REFERRAL_INVITE_CREATED_INSTRUCTION": "Tap the “📤 Share” button to send the invite to any chat or copy the text below:", - "PAYMENT_METHODS_ONLY_SUPPORT": "💳 Balance top-up methods\n\n⚠️ Automated payment methods are temporarily unavailable.\nContact support to top up your balance.\n\nChoose a top-up method:", - "PAYMENT_METHODS_TITLE": "💳 Balance top-up methods", - "PAYMENT_METHODS_PROMPT": "Choose the payment method that suits you:", - "PAYMENT_METHODS_FOOTER": "Choose a top-up method:", - "PAYMENT_METHOD_STARS_NAME": "⭐ Telegram Stars", - "PAYMENT_METHOD_STARS_DESCRIPTION": "fast and convenient", - "PAYMENT_METHOD_YOOKASSA_NAME": "💳 Bank card", - "PAYMENT_METHOD_YOOKASSA_DESCRIPTION": "via YooKassa", - "PAYMENT_METHOD_TRIBUTE_NAME": "💳 Bank card", - "PAYMENT_METHOD_TRIBUTE_DESCRIPTION": "via Tribute", - "PAYMENT_METHOD_CRYPTOBOT_NAME": "🪙 Cryptocurrency", - "PAYMENT_METHOD_CRYPTOBOT_DESCRIPTION": "via CryptoBot", - "PAYMENT_METHOD_SUPPORT_NAME": "🛠️ Support team", - "PAYMENT_METHOD_SUPPORT_DESCRIPTION": "other options", - "PAYMENT_METHODS_UNAVAILABLE_ALERT": "⚠️ Automated payment methods are temporarily unavailable. Contact support to top up your balance." - + "WELCOME": "\n🎉 Welcome to VPN Service!\n\nOur service provides fast and secure internet access without restrictions.\n\n🔐 Advantages:\n• High connection speed\n• Servers in different countries \n• Reliable data protection\n• 24/7 support\n\nTo get started, select interface language:\n", + "WELCOME_FALLBACK": "Welcome, {user_name}!", + "YES": "✅ Yes" } diff --git a/app/localization/locales/ru.json b/app/localization/locales/ru.json index 831a55d1..a099b22a 100644 --- a/app/localization/locales/ru.json +++ b/app/localization/locales/ru.json @@ -1,62 +1,74 @@ { "ACCESS_DENIED": "❌ Доступ запрещен", + "ADDON_INSUFFICIENT_FUNDS_MESSAGE": "⚠️ Недостаточно средств\n\nСтоимость услуги: {required}\nНа балансе: {balance}\nНе хватает: {missing}\n\nВыберите способ пополнения. Сумма подставится автоматически.", "ADD_COUNTRIES_BUTTON": "🌐 Добавить страны", - "ADMIN_MAIN_MENU": "🏠 Главное меню", "ADMIN_CAMPAIGNS": "📣 Рекламные кампании", + "ADMIN_MAIN_MENU": "🏠 Главное меню", "ADMIN_MESSAGES": "📨 Рассылки", "ADMIN_MONITORING": "🔍 Мониторинг", "ADMIN_PANEL": "\n⚙️ Административная панель\n\nВыберите раздел для управления:\n", "ADMIN_PROMOCODES": "🎫 Промокоды", + "ADMIN_PROMO_GROUPS": "💳 Промогруппы", + "ADMIN_PROMO_GROUPS_DEFAULT_LABEL": " (базовая)", + "ADMIN_PROMO_GROUPS_DISCOUNTS": "Скидки — серверы: {servers}%, трафик: {traffic}%, устройства: {devices}%", + "ADMIN_PROMO_GROUPS_EMPTY": "Промогруппы не найдены.", + "ADMIN_PROMO_GROUPS_MEMBERS_COUNT": "Участников: {count}", + "ADMIN_PROMO_GROUPS_SUMMARY": "Всего групп: {count}\nВсего участников: {members}", + "ADMIN_PROMO_GROUPS_TITLE": "💳 Промогруппы", + "ADMIN_PROMO_GROUP_ADDON_DISCOUNTS_DISABLED": "Скидки на докупку доп. услуг: отключены", + "ADMIN_PROMO_GROUP_ADDON_DISCOUNTS_ENABLED": "Скидки на докупку доп. услуг: включены", + "ADMIN_PROMO_GROUP_ADDON_DISCOUNT_DISABLED_VALUE": "отключены", + "ADMIN_PROMO_GROUP_ADDON_DISCOUNT_ENABLED_VALUE": "включены", + "ADMIN_PROMO_GROUP_CREATED": "Промогруппа «{name}» создана.", + "ADMIN_PROMO_GROUP_CREATED_BACK_BUTTON": "↩️ К промогруппам", + "ADMIN_PROMO_GROUP_CREATE_ADDON_DISCOUNT_PROMPT": "Включать скидки на докупку доп. услуг при действующих скидках? (да/нет)", + "ADMIN_PROMO_GROUP_CREATE_DEVICES_PROMPT": "Введите скидку на устройства (0-100):", + "ADMIN_PROMO_GROUP_CREATE_NAME_PROMPT": "Введите название новой промогруппы:", + "ADMIN_PROMO_GROUP_CREATE_SERVERS_PROMPT": "Введите скидку на серверы (0-100):", + "ADMIN_PROMO_GROUP_CREATE_TRAFFIC_PROMPT": "Введите скидку на трафик (0-100):", + "ADMIN_PROMO_GROUP_DELETED": "Промогруппа «{name}» удалена.", + "ADMIN_PROMO_GROUP_DELETE_BUTTON": "🗑️ Удалить", + "ADMIN_PROMO_GROUP_DELETE_CONFIRM": "Удалить промогруппу «{name}»? Все пользователи будут переведены в базовую группу.", + "ADMIN_PROMO_GROUP_DELETE_FORBIDDEN": "Базовую промогруппу нельзя удалить.", + "ADMIN_PROMO_GROUP_DETAILS_DEFAULT": "Это базовая группа.", + "ADMIN_PROMO_GROUP_DETAILS_MEMBERS": "Участников: {count}", + "ADMIN_PROMO_GROUP_DETAILS_TITLE": "💳 Промогруппа: {name}", + "ADMIN_PROMO_GROUP_EDIT_ADDON_DISCOUNT_PROMPT": "Включать скидки на докупку доп. услуг? Текущее значение: {current}.", + "ADMIN_PROMO_GROUP_EDIT_BUTTON": "✏️ Изменить", + "ADMIN_PROMO_GROUP_EDIT_DEVICES_PROMPT": "Введите новую скидку на устройства (0-100):", + "ADMIN_PROMO_GROUP_EDIT_FIELD_ADDON_DISCOUNTS": "🛒 Скидки на доп. услуги", + "ADMIN_PROMO_GROUP_EDIT_NAME_PROMPT": "Введите новое название промогруппы (текущее: {name}):", + "ADMIN_PROMO_GROUP_EDIT_SERVERS_PROMPT": "Введите новую скидку на серверы (0-100):", + "ADMIN_PROMO_GROUP_EDIT_TRAFFIC_PROMPT": "Введите новую скидку на трафик (0-100):", + "ADMIN_PROMO_GROUP_INVALID_ADDON_DISCOUNT": "Введите «да» или «нет».", + "ADMIN_PROMO_GROUP_INVALID_NAME": "Название не может быть пустым.", + "ADMIN_PROMO_GROUP_INVALID_PERCENT": "Введите число от 0 до 100.", + "ADMIN_PROMO_GROUP_MEMBERS_BUTTON": "👥 Участники", + "ADMIN_PROMO_GROUP_MEMBERS_EMPTY": "В этой группе пока нет участников.", + "ADMIN_PROMO_GROUP_MEMBERS_TITLE": "👥 Участники группы {name}", + "ADMIN_PROMO_GROUP_UPDATED": "Промогруппа «{name}» обновлена.", "ADMIN_REFERRALS": "🤝 Партнерка", "ADMIN_REMNAWAVE": "🖥️ Remnawave", "ADMIN_RULES": "📋 Правила", "ADMIN_STATISTICS": "📊 Статистика", - "ADMIN_PROMO_GROUPS": "💳 Промогруппы", - "ADMIN_PROMO_GROUPS_TITLE": "💳 Промогруппы", - "ADMIN_PROMO_GROUPS_SUMMARY": "Всего групп: {count}\nВсего участников: {members}", - "ADMIN_PROMO_GROUPS_DISCOUNTS": "Скидки — серверы: {servers}%, трафик: {traffic}%, устройства: {devices}%", - "ADMIN_PROMO_GROUPS_DEFAULT_LABEL": " (базовая)", - "ADMIN_PROMO_GROUPS_MEMBERS_COUNT": "Участников: {count}", - "ADMIN_PROMO_GROUPS_EMPTY": "Промогруппы не найдены.", + "ADMIN_SUBSCRIPTIONS": "📱 Подписки", + "ADMIN_TICKETS_TITLE_CLOSED": "🎫 Закрытые тикеты поддержки:", + "ADMIN_TICKETS_TITLE_OPEN": "🎫 Открытые тикеты поддержки:", + "ADMIN_USERS": "👥 Пользователи", + "ADMIN_USER_PROMO_GROUP_ADDON_DISCOUNT_LINE": "Скидки на доп. услуги при докупке: {status}", + "ADMIN_USER_PROMO_GROUP_ADDON_DISCOUNT_NONE": "Скидки на доп. услуги при докупке: —", + "ADMIN_USER_PROMO_GROUP_ALREADY": "ℹ️ Пользователь уже состоит в этой промогруппе.", + "ADMIN_USER_PROMO_GROUP_BACK": "⬅️ К пользователю", "ADMIN_USER_PROMO_GROUP_BUTTON": "👥 Промогруппа", - "ADMIN_USER_PROMO_GROUP_TITLE": "👥 Промогруппа пользователя", "ADMIN_USER_PROMO_GROUP_CURRENT": "Текущая группа: {name}", "ADMIN_USER_PROMO_GROUP_CURRENT_NONE": "Текущая группа: не назначена", - "ADMIN_USER_PROMO_GROUP_DISCOUNTS": "Скидки — серверы: {servers}%, трафик: {traffic}%, устройства: {devices}%", + "ADMIN_USER_PROMO_GROUP_DISCOUNTS": "Скидки — серверы: {servers}%, трафик: {traffic}%, устройства: {devices}%, докупка: {addons}", "ADMIN_USER_PROMO_GROUP_DISCOUNTS_NONE": "Скидки не заданы.", - "ADMIN_USER_PROMO_GROUP_SELECT": "Выберите промогруппу для назначения:", - "ADMIN_USER_PROMO_GROUP_UPDATED": "✅ Промогруппа пользователя обновлена: «{name}»", - "ADMIN_USER_PROMO_GROUP_ALREADY": "ℹ️ Пользователь уже состоит в этой промогруппе.", "ADMIN_USER_PROMO_GROUP_ERROR": "❌ Не удалось обновить промогруппу пользователя.", - "ADMIN_USER_PROMO_GROUP_BACK": "⬅️ К пользователю", - "ADMIN_PROMO_GROUP_DETAILS_TITLE": "💳 Промогруппа: {name}", - "ADMIN_PROMO_GROUP_DETAILS_MEMBERS": "Участников: {count}", - "ADMIN_PROMO_GROUP_DETAILS_DEFAULT": "Это базовая группа.", - "ADMIN_PROMO_GROUP_MEMBERS_BUTTON": "👥 Участники", - "ADMIN_PROMO_GROUP_EDIT_BUTTON": "✏️ Изменить", - "ADMIN_PROMO_GROUP_DELETE_BUTTON": "🗑️ Удалить", - "ADMIN_PROMO_GROUP_CREATE_NAME_PROMPT": "Введите название новой промогруппы:", - "ADMIN_PROMO_GROUP_INVALID_NAME": "Название не может быть пустым.", - "ADMIN_PROMO_GROUP_CREATE_TRAFFIC_PROMPT": "Введите скидку на трафик (0-100):", - "ADMIN_PROMO_GROUP_CREATE_SERVERS_PROMPT": "Введите скидку на серверы (0-100):", - "ADMIN_PROMO_GROUP_CREATE_DEVICES_PROMPT": "Введите скидку на устройства (0-100):", - "ADMIN_PROMO_GROUP_INVALID_PERCENT": "Введите число от 0 до 100.", - "ADMIN_PROMO_GROUP_CREATED": "Промогруппа «{name}» создана.", - "ADMIN_PROMO_GROUP_CREATED_BACK_BUTTON": "↩️ К промогруппам", - "ADMIN_PROMO_GROUP_EDIT_NAME_PROMPT": "Введите новое название промогруппы (текущее: {name}):", - "ADMIN_PROMO_GROUP_EDIT_TRAFFIC_PROMPT": "Введите новую скидку на трафик (0-100):", - "ADMIN_PROMO_GROUP_EDIT_SERVERS_PROMPT": "Введите новую скидку на серверы (0-100):", - "ADMIN_PROMO_GROUP_EDIT_DEVICES_PROMPT": "Введите новую скидку на устройства (0-100):", - "ADMIN_PROMO_GROUP_UPDATED": "Промогруппа «{name}» обновлена.", - "ADMIN_PROMO_GROUP_MEMBERS_TITLE": "👥 Участники группы {name}", - "ADMIN_PROMO_GROUP_MEMBERS_EMPTY": "В этой группе пока нет участников.", - "ADMIN_PROMO_GROUP_DELETE_FORBIDDEN": "Базовую промогруппу нельзя удалить.", - "ADMIN_PROMO_GROUP_DELETE_CONFIRM": "Удалить промогруппу «{name}»? Все пользователи будут переведены в базовую группу.", - "ADMIN_PROMO_GROUP_DELETED": "Промогруппа «{name}» удалена.", - "ADMIN_SUBSCRIPTIONS": "📱 Подписки", - "ADMIN_USERS": "👥 Пользователи", - "ADMIN_TICKETS_TITLE_OPEN": "🎫 Открытые тикеты поддержки:", - "ADMIN_TICKETS_TITLE_CLOSED": "🎫 Закрытые тикеты поддержки:", + "ADMIN_USER_PROMO_GROUP_SELECT": "Выберите промогруппу для назначения:", + "ADMIN_USER_PROMO_GROUP_TITLE": "👥 Промогруппа пользователя", + "ADMIN_USER_PROMO_GROUP_UPDATED": "✅ Промогруппа пользователя обновлена: «{name}»", + "ALREADY_REGISTERED_REFERRAL": "ℹ️ Вы уже зарегистрированы в системе. Реферальная ссылка не может быть применена.", "AUTOPAY_BUTTON": "💳 Автоплатёж", "AUTOPAY_DISABLED_TEXT": "Отключен - не забудьте продлить вручную!", "AUTOPAY_ENABLED_TEXT": "Включен - подписка продлится автоматически", @@ -64,6 +76,7 @@ "AUTOPAY_SET_DAYS_BUTTON": "⚙️ Настроить дни", "AUTOPAY_SUCCESS": "\n✅ Автоплатеж выполнен\n\nВаша подписка автоматически продлена на {days} дней.\nСписано с баланса: {amount}\n", "BACK": "⬅️ Назад", + "BACK_TO_MAIN_MENU_BUTTON": "⬅️ В главное меню", "BACK_TO_SUBSCRIPTION": "⬅️ К подписке", "BALANCE_BUTTON": "💰 Баланс: {balance}", "BALANCE_BUTTON_DEFAULT": "💰 Баланс: {balance}", @@ -72,16 +85,10 @@ "BALANCE_INFO": "\n💰 Баланс: {balance}\n\nВыберите действие:\n", "BALANCE_SUPPORT_REQUEST": "🛠️ Запрос через поддержку", "BALANCE_TOP_UP": "💳 Пополнить", - "CAMPAIGN_EXISTING_USER": "ℹ️ Эта рекламная ссылка доступна только новым пользователям.", + "BUY_SUBSCRIPTION_START": "\n💎 Настройка подписки\n\nДавайте настроим вашу подписку под ваши потребности.\n\nСначала выберите период подписки:\n", "CAMPAIGN_BONUS_BALANCE": "🎉 Вы получили {amount} за регистрацию по кампании «{name}»!", "CAMPAIGN_BONUS_SUBSCRIPTION": "🎉 Вам выдана подписка на {days} д. (трафик: {traffic}, устройств: {devices}) по кампании «{name}»!", - "BUY_SUBSCRIPTION_START": "\n💎 Настройка подписки\n\nДавайте настроим вашу подписку под ваши потребности.\n\nСначала выберите период подписки:\n", - "PROMO_GROUP_DISCOUNTS_HEADER": "🎁 Скидки вашей промогруппы", - "PROMO_GROUP_DISCOUNT_SERVERS": "🌍 Серверы: {percent}%", - "PROMO_GROUP_DISCOUNT_TRAFFIC": "📊 Трафик: {percent}%", - "PROMO_GROUP_DISCOUNT_DEVICES": "📱 Доп. устройства: {percent}%", - "PROMO_GROUP_PERIOD_DISCOUNTS_HEADER": "⏳ Скидки за длительный период:", - "PROMO_GROUP_PERIOD_DISCOUNT_ITEM": "{period} — {percent}%", + "CAMPAIGN_EXISTING_USER": "ℹ️ Эта рекламная ссылка доступна только новым пользователям.", "CANCEL": "❌ Отмена", "CHANGE_DEVICES_BUTTON": "📱 Изменить устройства", "CHANGE_DEVICES_CONFIRM": "\n 📱 Подтверждение изменения\n\n Текущее количество: {current_devices} устройств\n Новое количество: {new_devices} устройств\n\n Действие: {action}\n 💰 {cost}\n\n Подтвердить изменение?\n ", @@ -99,22 +106,13 @@ "CONFIRM": "✅ Подтвердить", "CONFIRM_CHANGE_BUTTON": "✅ Подтвердить изменение", "CONNECT_BUTTON": "🔗 Подключиться", - "HAPP_DOWNLOAD_BUTTON": "⬇️ Скачать Happ", - "HAPP_DOWNLOAD_PROMPT": "📥 Скачать Happ\nВыберите ваше устройство:", - "HAPP_PLATFORM_IOS": "🍎 iOS", - "HAPP_PLATFORM_ANDROID": "🤖 Android", - "HAPP_PLATFORM_MACOS": "🖥️ Mac OS", - "HAPP_PLATFORM_WINDOWS": "💻 Windows", - "HAPP_PLATFORM_PC": "💻 ПК", - "HAPP_DOWNLOAD_LINK_MESSAGE": "⬇️ Скачайте Happ для {platform}:", - "HAPP_DOWNLOAD_LINK_NOT_SET": "❌ Ссылка для этого устройства не настроена", - "HAPP_DOWNLOAD_OPEN_LINK": "🔗 Открыть ссылку", "CONTACT_SUPPORT": "💬 Написать в поддержку", "CONTINUE": "➡️ Продолжить", "CONTINUE_BUTTON": "✅ Продолжить", "COPY_SUBSCRIPTION_LINK": "📋 Скопировать ссылку подписки", "CREATE_INVITE": "📝 Создать приглашение", "CREATE_INVITE_BUTTON": "📝 Создать приглашение", + "CUSTOM_MINIAPP_URL_NOT_SET": "⚠ Кастомная ссылка для мини-приложения не настроена", "DEVICES_INSUFFICIENT_BALANCE": "⚠️ Недостаточно средств!\nТребуется: {required} (за {months} мес)\nУ вас: {balance}", "DEVICES_LIMIT_EXCEEDED": "⚠️ Превышен максимальный лимит устройств ({limit})", "DEVICES_MINIMUM_LIMIT": "⚠️ Минимальное количество устройств: {limit}", @@ -128,12 +126,20 @@ "DISABLE_BUTTON": "❌ Выключить", "ENABLE_BUTTON": "✅ Включить", "ERROR": "❌ Произошла ошибка", - "ERROR_TRY_AGAIN": "❌ Произошла ошибка. Попробуйте еще раз.", "ERROR_RULES_RETRY": "Произошла ошибка. Попробуйте принять правила еще раз:", + "ERROR_TRY_AGAIN": "❌ Произошла ошибка. Попробуйте еще раз.", "GO_TO_BALANCE_TOP_UP": "💳 Перейти к пополнению баланса", - "RETURN_TO_SUBSCRIPTION_CHECKOUT": "⬅️ Вернуться к оформлению подписки", + "HAPP_DOWNLOAD_BUTTON": "⬇️ Скачать Happ", + "HAPP_DOWNLOAD_LINK_MESSAGE": "⬇️ Скачайте Happ для {platform}:", + "HAPP_DOWNLOAD_LINK_NOT_SET": "❌ Ссылка для этого устройства не настроена", + "HAPP_DOWNLOAD_OPEN_LINK": "🔗 Открыть ссылку", + "HAPP_DOWNLOAD_PROMPT": "📥 Скачать Happ\nВыберите ваше устройство:", + "HAPP_PLATFORM_ANDROID": "🤖 Android", + "HAPP_PLATFORM_IOS": "🍎 iOS", + "HAPP_PLATFORM_MACOS": "🖥️ Mac OS", + "HAPP_PLATFORM_PC": "💻 ПК", + "HAPP_PLATFORM_WINDOWS": "💻 Windows", "INSUFFICIENT_BALANCE": "❌ Недостаточно средств на балансе. \n \n Пополните баланс на {amount} и попробуйте снова.\n ", - "ADDON_INSUFFICIENT_FUNDS_MESSAGE": "⚠️ Недостаточно средств\n\nСтоимость услуги: {required}\nНа балансе: {balance}\nНе хватает: {missing}\n\nВыберите способ пополнения. Сумма подставится автоматически.", "INVALID_AMOUNT": "❌ Неверная сумма", "LANGUAGE_SELECTED": "🌐 Язык интерфейса установлен: Русский", "LOADING": "⏳ Загрузка...", @@ -168,6 +174,21 @@ "PAYMENT_CARD_TRIBUTE": "💳 Банковская карта (Tribute)", "PAYMENT_CARD_YOOKASSA": "💳 Банковская карта (YooKassa)", "PAYMENT_CRYPTOBOT": "🪙 Криптовалюта (CryptoBot)", + "PAYMENT_METHODS_FOOTER": "Выберите способ пополнения:", + "PAYMENT_METHODS_ONLY_SUPPORT": "💳 Способы пополнения баланса\n\n⚠️ В данный момент автоматические способы оплаты временно недоступны.\nОбратитесь в техподдержку для пополнения баланса.\n\nВыберите способ пополнения:", + "PAYMENT_METHODS_PROMPT": "Выберите удобный для вас способ оплаты:", + "PAYMENT_METHODS_TITLE": "💳 Способы пополнения баланса", + "PAYMENT_METHODS_UNAVAILABLE_ALERT": "⚠️ В данный момент автоматические способы оплаты временно недоступны. Для пополнения баланса обратитесь в техподдержку.", + "PAYMENT_METHOD_CRYPTOBOT_DESCRIPTION": "через CryptoBot", + "PAYMENT_METHOD_CRYPTOBOT_NAME": "🪙 Криптовалюта", + "PAYMENT_METHOD_STARS_DESCRIPTION": "быстро и удобно", + "PAYMENT_METHOD_STARS_NAME": "⭐ Telegram Stars", + "PAYMENT_METHOD_SUPPORT_DESCRIPTION": "другие способы", + "PAYMENT_METHOD_SUPPORT_NAME": "🛠️ Через поддержку", + "PAYMENT_METHOD_TRIBUTE_DESCRIPTION": "через Tribute", + "PAYMENT_METHOD_TRIBUTE_NAME": "💳 Банковская карта", + "PAYMENT_METHOD_YOOKASSA_DESCRIPTION": "через YooKassa", + "PAYMENT_METHOD_YOOKASSA_NAME": "💳 Банковская карта", "PAYMENT_SBP_YOOKASSA": "🏬 Оплатить по СБП (YooKassa)", "PAYMENT_TELEGRAM_STARS": "⭐ Telegram Stars", "PAYMENT_VIA_SUPPORT": "🛠️ Через поддержку", @@ -181,26 +202,86 @@ "PERIOD_60_DAYS": "📅 60 дней - {settings.format_price(settings.PRICE_60_DAYS)}", "PERIOD_90_DAYS": "📅 90 дней - {settings.format_price(settings.PRICE_90_DAYS)}", "POST_REGISTRATION_TRIAL_BUTTON": "🚀 Подключиться бесплатно 🚀", - "PROMOCODE_ENTER": "🎫 Введите промокод:", "PROMOCODE_EMPTY_INPUT": "❌ Введите корректный промокод", + "PROMOCODE_ENTER": "🎫 Введите промокод:", "PROMOCODE_EXPIRED": "❌ Промокод истек", "PROMOCODE_INVALID": "❌ Неверный промокод", "PROMOCODE_SUCCESS": "🎉 Промокод активирован! {description}", "PROMOCODE_USED": "❌ Промокод уже использован", + "PROMO_GROUP_DISCOUNTS_HEADER": "🎁 Скидки вашей промогруппы", + "PROMO_GROUP_DISCOUNT_DEVICES": "📱 Доп. устройства: {percent}%", + "PROMO_GROUP_DISCOUNT_SERVERS": "🌍 Серверы: {percent}%", + "PROMO_GROUP_DISCOUNT_TRAFFIC": "📊 Трафик: {percent}%", + "PROMO_GROUP_PERIOD_DISCOUNTS_HEADER": "⏳ Скидки за длительный период:", + "PROMO_GROUP_PERIOD_DISCOUNT_ITEM": "{period} — {percent}%", "REFERRAL_ANALYTICS_BUTTON": "📊 Аналитика", - "REFERRAL_CODE_APPLIED": "🎁 Реферальный код применен! Вы получите бонус после первой покупки.", + "REFERRAL_ANALYTICS_EARNINGS_HEADER": "💰 Доходы по периодам:", + "REFERRAL_ANALYTICS_EARNINGS_MONTH": "• За месяц: {amount}", + "REFERRAL_ANALYTICS_EARNINGS_QUARTER": "• За квартал: {amount}", + "REFERRAL_ANALYTICS_EARNINGS_TODAY": "• Сегодня: {amount}", + "REFERRAL_ANALYTICS_EARNINGS_WEEK": "• За неделю: {amount}", + "REFERRAL_ANALYTICS_FOOTER": "📈 Продолжайте развивать свою реферальную сеть!", + "REFERRAL_ANALYTICS_TITLE": "📊 Аналитика рефералов", + "REFERRAL_ANALYTICS_TOP_ITEM": "{index}. {name}: {amount} ({count} начислений)", + "REFERRAL_ANALYTICS_TOP_TITLE": "🏆 Топ-{count} рефералов:", "REFERRAL_CODE_ACCEPTED": "✅ Реферальный код принят!", + "REFERRAL_CODE_APPLIED": "🎁 Реферальный код применен! Вы получите бонус после первой покупки.", "REFERRAL_CODE_INVALID": "❌ Неверный реферальный код", "REFERRAL_CODE_INVALID_HELP": "❌ Неверный реферальный код.\n\n💡 Если у вас есть реферальный код, убедитесь что он введен правильно.\n⏭️ Для продолжения регистрации без реферального кода используйте команду /start", "REFERRAL_CODE_QUESTION": "\n🤝 У вас есть реферальный код от друга?\n\nЕсли у вас есть промокод или реферальная ссылка от друга, введите её сейчас, чтобы получить бонус!\n\nВведите код или нажмите \"Пропустить\":\n", "REFERRAL_CODE_SKIP": "⏭️ Пропустить", - "ALREADY_REGISTERED_REFERRAL": "ℹ️ Вы уже зарегистрированы в системе. Реферальная ссылка не может быть применена.", + "REFERRAL_CODE_TITLE": "🆔 Ваш код: {code}", + "REFERRAL_EARNINGS_BY_TYPE_HEADER": "📈 Доходы по типам:", + "REFERRAL_EARNINGS_FIRST_TOPUPS": "• Бонусы за первые пополнения: {count} ({amount})", + "REFERRAL_EARNINGS_PURCHASES": "• Комиссии с покупок: {count} ({amount})", + "REFERRAL_EARNINGS_TOPUPS": "• Комиссии с пополнений: {count} ({amount})", + "REFERRAL_EARNING_REASON_COMMISSION_PURCHASE": "💰 Комиссия с покупки", + "REFERRAL_EARNING_REASON_COMMISSION_TOPUP": "💰 Комиссия с пополнения", + "REFERRAL_EARNING_REASON_FIRST_TOPUP": "🎉 Первое пополнение", "REFERRAL_INFO": "\n🤝 Реферальная программа\n\n👥 Приглашено: {referrals_count} друзей\n💰 Заработано: {earned_amount}\n\n🔗 Ваша реферальная ссылка:\n{referral_link}\n\n🎫 Ваш промокод:\n{referral_code}\n\n💰 Условия:\n• За каждого друга: {registration_bonus}\n• Процент с пополнений: {commission_percent}%\n", + "REFERRAL_INVITE_BONUS": "💎 При первом пополнении от {minimum} ты получишь {bonus} бонусом на баланс!", + "REFERRAL_INVITE_CREATED_INSTRUCTION": "Нажмите кнопку «📤 Поделиться» чтобы отправить приглашение в любой чат, или скопируйте текст ниже:", + "REFERRAL_INVITE_CREATED_TITLE": "📝 Приглашение создано!", + "REFERRAL_INVITE_FEATURE_FAST": "🚀 Быстрое подключение", + "REFERRAL_INVITE_FEATURE_SECURE": "🔒 Надежная защита", + "REFERRAL_INVITE_FEATURE_SERVERS": "🌍 Серверы по всему миру", + "REFERRAL_INVITE_FOOTER": "📢 Приглашайте друзей и зарабатывайте!", + "REFERRAL_INVITE_LINK_PROMPT": "👇 Переходи по ссылке:", "REFERRAL_INVITE_MESSAGE": "\n🎯 Приглашение в VPN сервис\n\nПривет! Приглашаю тебя в отличный VPN сервис!\n\n🎁 По моей ссылке ты получишь бонус: {bonus}\n\n🔗 Переходи: {link}\n🎫 Или используй промокод: {code}\n\n💪 Быстро, надежно, недорого!\n", + "REFERRAL_INVITE_TITLE": "🎉 Присоединяйся к VPN сервису!", + "REFERRAL_LINK_CAPTION": "🔗 Ваша реферальная ссылка:\n{link}", + "REFERRAL_LINK_TITLE": "🔗 Ваша реферальная ссылка:", "REFERRAL_LIST_BUTTON": "👥 Список рефералов", + "REFERRAL_LIST_EMPTY": "📋 У вас пока нет рефералов.\n\nПоделитесь своей реферальной ссылкой, чтобы начать зарабатывать!", + "REFERRAL_LIST_HEADER": "👥 Ваши рефералы (стр. {current}/{total})", + "REFERRAL_LIST_ITEM_ACTIVITY": " 🕐 Активность: {days} дн. назад", + "REFERRAL_LIST_ITEM_ACTIVITY_LONG_AGO": " 🕐 Активность: давно", + "REFERRAL_LIST_ITEM_EARNED": " 💎 Заработано с него: {amount}", + "REFERRAL_LIST_ITEM_HEADER": "{index}. {status} {name}", + "REFERRAL_LIST_ITEM_REGISTERED": " 📅 Регистрация: {days} дн. назад", + "REFERRAL_LIST_ITEM_TOPUPS": " {emoji} Пополнений: {count}", + "REFERRAL_LIST_NEXT_PAGE": "Вперед ➡️", + "REFERRAL_LIST_PREV_PAGE": "⬅️ Назад", + "REFERRAL_PROGRAM_TITLE": "👥 Реферальная программа", + "REFERRAL_RECENT_EARNINGS_HEADER": "💰 Последние начисления:", + "REFERRAL_RECENT_EARNINGS_ITEM": "• {reason}: {amount} от {referral_name}", + "REFERRAL_REWARDS_HEADER": "🎁 Как работают награды:", + "REFERRAL_REWARD_COMMISSION": "• Комиссия с каждого пополнения реферала: {percent}%", + "REFERRAL_REWARD_INVITER": "• Вы получаете при первом пополнении реферала: {bonus}", + "REFERRAL_REWARD_NEW_USER": "• Новый пользователь получает: {bonus} при первом пополнении от {minimum}", + "REFERRAL_SHARE_BUTTON": "📤 Поделиться", + "REFERRAL_STATS_ACTIVE": "• Активных рефералов: {count}", + "REFERRAL_STATS_CONVERSION": "• Конверсия: {rate}%", + "REFERRAL_STATS_FIRST_TOPUPS": "• Сделали первое пополнение: {count}", + "REFERRAL_STATS_HEADER": "📊 Ваша статистика:", + "REFERRAL_STATS_INVITED": "• Приглашено пользователей: {count}", + "REFERRAL_STATS_MONTH_EARNED": "• За последний месяц: {amount}", + "REFERRAL_STATS_TOTAL_EARNED": "• Заработано всего: {amount}", + "REGISTRATION_COMPLETING": "✅ Завершаем регистрацию...", "RESET_ALL_DEVICES_BUTTON": "🔄 Сбросить все устройства", "RESET_DEVICE_CONFIRM_BUTTON": "✅ Да, сбросить это устройство", "RESET_TRAFFIC_BUTTON": "🔄 Сбросить трафик", + "RETURN_TO_SUBSCRIPTION_CHECKOUT": "⬅️ Вернуться к оформлению подписки", "RULES_ACCEPT": "✅ Принимаю правила", "RULES_ACCEPTED_PROCESSING": "✅ Правила приняты! Завершаем регистрацию...", "RULES_DECLINE": "❌ Не принимаю", @@ -213,20 +294,95 @@ "SELECT_TRAFFIC": "Выберите пакет трафика:", "SEND_CONTACT_BUTTON": "📱 Отправить контакт", "SEND_LOCATION_BUTTON": "📍 Отправить геолокацию", + "SERVER_STATUS_AVAILABLE": "✅ Доступны", + "SERVER_STATUS_ERROR_SHORT": "Не удалось получить данные", + "SERVER_STATUS_LATENCY": "{latency} мс", + "SERVER_STATUS_LATENCY_UNKNOWN": "нет данных", + "SERVER_STATUS_NEXT_PAGE": "Вперед ➡️", + "SERVER_STATUS_NOT_CONFIGURED": "Функция недоступна.", + "SERVER_STATUS_NO_SERVERS": "Нет данных о серверах.", + "SERVER_STATUS_OFFLINE": "нет ответа", + "SERVER_STATUS_PAGINATION": "Страница {current} из {total}", + "SERVER_STATUS_PREV_PAGE": "⬅️ Назад", + "SERVER_STATUS_REFRESH": "🔄 Обновить", + "SERVER_STATUS_SUMMARY": "Всего серверов: {total} (в сети: {online}, вне сети: {offline})", + "SERVER_STATUS_TITLE": "📊 Статус серверов", + "SERVER_STATUS_UNAVAILABLE": "❌ Недоступны", + "SERVER_STATUS_UPDATED_AT": "⏱ Обновлено: {time}", "SHOW_QR_BUTTON": "📱 Показать QR код", "SHOW_SUBSCRIPTION_LINK": "📋 Показать ссылку подписки", "SKIP_BUTTON": "⏭️ Пропустить", + "STARS_PAYMENT_ENROLLMENT_ERROR": "❌ Произошла ошибка при зачислении средств. Обратитесь в поддержку, платеж будет проверен вручную.", + "STARS_PAYMENT_PROCESSING_ERROR": "❌ Техническая ошибка при обработке платежа. Обратитесь в поддержку для решения проблемы.", + "STARS_PAYMENT_SUCCESS": "🎉 Платеж успешно обработан!\n\n⭐ Потрачено звезд: {stars_spent}\n💰 Зачислено на баланс: {amount} ₽\n🆔 ID транзакции: {transaction_id}...\n\nСпасибо за пополнение! 🚀", + "STARS_PAYMENT_USER_NOT_FOUND": "❌ Ошибка: пользователь не найден. Обратитесь в поддержку.", + "STARS_PRECHECK_INVALID_PAYLOAD": "Ошибка валидации платежа. Попробуйте еще раз.", + "STARS_PRECHECK_TECHNICAL_ERROR": "Техническая ошибка. Попробуйте позже.", + "STARS_PRECHECK_USER_NOT_FOUND": "Пользователь не найден. Обратитесь в поддержку.", "SUBSCRIPTION_ACTIVE": "✅ Активна", + "SUBSCRIPTION_ADDITIONAL_STEP_TITLE": "{title}:", + "SUBSCRIPTION_APPS_PROMPT": "Выберите приложение для подключения:", + "SUBSCRIPTION_APPS_TITLE": "📱 Приложения для {device_name}", + "SUBSCRIPTION_APP_NOT_FOUND": "❌ Приложение не найдено", + "SUBSCRIPTION_CONNECTED_DEVICES_FOOTER": "
", + "SUBSCRIPTION_CONNECTED_DEVICES_TITLE": "
📱 Подключенные устройства:\n", + "SUBSCRIPTION_CONNECT_CUSTOM_MESSAGE": "🚀 Подключить подписку\n\n📱 Нажмите кнопку ниже, чтобы открыть приложение:", + "SUBSCRIPTION_CONNECT_DEVICE_MESSAGE": "📱 Подключить подписку\n\n🔗 Ссылка подписки:\n{subscription_url}\n\n💡 Выберите ваше устройство для получения подробной инструкции по настройке:", + "SUBSCRIPTION_CONNECT_LINK_MESSAGE": "🚀 Подключить подписку\n\n🔗 Нажмите кнопку ниже, чтобы открыть ссылку подписки:", + "SUBSCRIPTION_CONNECT_LINK_PROMPT": "📱 Скопируйте ссылку и добавьте в ваше VPN приложение", + "SUBSCRIPTION_CONNECT_LINK_SECTION": "🔗 Ссылка для подключения:\n{subscription_url}", + "SUBSCRIPTION_CONNECT_MINIAPP_MESSAGE": "📱 Подключить подписку\n\n🚀 Нажмите кнопку ниже, чтобы открыть подписку в мини-приложении Telegram:", + "SUBSCRIPTION_DEVICE_APPS_NOT_FOUND": "❌ Приложения для этого устройства не найдены", + "SUBSCRIPTION_DEVICE_FEATURED_APP": "📋 Рекомендуемое приложение: {app_name}", + "SUBSCRIPTION_DEVICE_GUIDE_TITLE": "📱 Настройка для {device_name}", + "SUBSCRIPTION_DEVICE_HOW_TO_STEP1": "1. Установите приложение по ссылке выше", + "SUBSCRIPTION_DEVICE_HOW_TO_STEP2": "2. Скопируйте ссылку подписки (нажмите на неё)", + "SUBSCRIPTION_DEVICE_HOW_TO_STEP3": "3. Откройте приложение и вставьте ссылку", + "SUBSCRIPTION_DEVICE_HOW_TO_STEP4": "4. Подключитесь к серверу", + "SUBSCRIPTION_DEVICE_HOW_TO_TITLE": "💡 Как подключить:", + "SUBSCRIPTION_DEVICE_LINK_TITLE": "🔗 Ссылка подписки:", + "SUBSCRIPTION_DEVICE_STEP_ADD_TITLE": "Шаг 2 - Добавление подписки:", + "SUBSCRIPTION_DEVICE_STEP_CONNECT_TITLE": "Шаг 3 - Подключение:", + "SUBSCRIPTION_DEVICE_STEP_INSTALL_TITLE": "Шаг 1 - Установка:", "SUBSCRIPTION_EXPIRED": "\n❌ Подписка истекла\n\nВаша подписка истекла. Для восстановления доступа продлите подписку.\n", "SUBSCRIPTION_EXPIRING": "\n⚠️ Подписка истекает!\n\nВаша подписка истекает через {days} дней.\n\nНе забудьте продлить подписку, чтобы не потерять доступ к серверам.\n", "SUBSCRIPTION_EXPIRING_PAID": "\n⚠️ Подписка истекает через {days_text}!\n\nВаша платная подписка истекает {end_date}.\n\n💳 Автоплатеж: {autopay_status}\n\n{action_text}\n", + "SUBSCRIPTION_IMPORT_INSTRUCTION_PROMPT": "📱 Нажмите кнопку ниже, чтобы получить инструкцию по настройке VPN на вашем устройстве", + "SUBSCRIPTION_IMPORT_LINK_SECTION": "🔗 Ваша ссылка для импорта в VPN приложение:\n{subscription_url}", "SUBSCRIPTION_INFO": "\n📱 Информация о подписке\n\n📊 Статус: {status}\n🎭 Тип: {type}\n📅 Действует до: {end_date}\n⏰ Осталось дней: {days_left}\n\n📈 Трафик: {traffic_used} / {traffic_limit}\n🌍 Серверы: {countries_count} стран\n📱 Устройства: {devices_used} / {devices_limit}\n\n💳 Автоплатеж: {autopay_status}\n", + "SUBSCRIPTION_LINK_GENERATING_NOTICE": "{purchase_text}\n\nСсылка генерируется, перейдите в раздел 'Моя подписка' через несколько секунд.", + "SUBSCRIPTION_LINK_HINT": "💡 Если ссылка не скопировалась, выделите её вручную и скопируйте.", + "SUBSCRIPTION_LINK_STEP1": "1. Нажмите на ссылку выше чтобы её скопировать", + "SUBSCRIPTION_LINK_STEP2": "2. Откройте ваше VPN приложение", + "SUBSCRIPTION_LINK_STEP3": "3. Найдите функцию \"Добавить подписку\" или \"Import\"", + "SUBSCRIPTION_LINK_STEP4": "4. Вставьте скопированную ссылку", + "SUBSCRIPTION_LINK_UNAVAILABLE": "❌ Ссылка подписки недоступна", + "SUBSCRIPTION_LINK_USAGE_TITLE": "📱 Как использовать:", "SUBSCRIPTION_NONE": "❌ Нет активной подписки", "SUBSCRIPTION_NOT_FOUND": "❌ Подписка не найдена", + "SUBSCRIPTION_NO_ACTIVE_LINK": "⚠ У вас нет активной подписки или ссылка еще генерируется", + "SUBSCRIPTION_NO_SERVERS": "Нет серверов", + "SUBSCRIPTION_OVERVIEW_TEMPLATE": "👤 {full_name}\n💰 Баланс: {balance}\n📱 Подписка: {status_emoji} {status_display}{warning}\n\n📱 Информация о подписке\n🎭 Тип: {subscription_type}\n📅 Действует до: {end_date}\n⏰ Осталось: {time_left}\n📈 Трафик: {traffic}\n🌍 Серверы: {servers}\n📱 Устройства: {devices_used} / {device_limit}", "SUBSCRIPTION_PURCHASED": "🎉 Подписка успешно приобретена!", "SUBSCRIPTION_SETTINGS_BUTTON": "⚙️ Настройки подписки", + "SUBSCRIPTION_SPECIFIC_APP_TITLE": "📱 {app_name} - {device_name}", + "SUBSCRIPTION_STATUS_ACTIVE": "Активна", + "SUBSCRIPTION_STATUS_EXPIRED": "Истекла", + "SUBSCRIPTION_STATUS_TRIAL": "Тестовая", + "SUBSCRIPTION_STATUS_UNKNOWN": "Неизвестно", "SUBSCRIPTION_SUMMARY": "\n📋 Итоговая конфигурация\n\n📅 Период: {period} дней\n📈 Трафик: {traffic}\n🌍 Страны: {countries}\n📱 Устройства: {devices}\n\n💰 Итого к оплате: {total_price}\n\nПодтвердить покупку?\n", + "SUBSCRIPTION_TIME_LEFT_DAYS": "{days} дн.", + "SUBSCRIPTION_TIME_LEFT_EXPIRED": "истёк", + "SUBSCRIPTION_TIME_LEFT_HOURS": "{hours} ч.", + "SUBSCRIPTION_TIME_LEFT_MINUTES": "{minutes} мин.", + "SUBSCRIPTION_TRAFFIC_LIMITED": "{used} / {limit} ГБ", + "SUBSCRIPTION_TRAFFIC_UNLIMITED": "∞ (безлимит) | Использовано: {used} ГБ", "SUBSCRIPTION_TRIAL": "🧪 Тестовая подписка", + "SUBSCRIPTION_TYPE_PAID": "Платная", + "SUBSCRIPTION_TYPE_TRIAL": "Триал", + "SUBSCRIPTION_WARNING_MINUTES": "\n🔴 истекает через несколько минут!", + "SUBSCRIPTION_WARNING_TODAY": "\n⚠️ истекает сегодня!", + "SUBSCRIPTION_WARNING_TOMORROW": "\n⚠️ истекает завтра!", "SUB_STATUS_ACTIVE_FEW_DAYS": "💎 Активна\n⚠️ истекает через {days} дн.", "SUB_STATUS_ACTIVE_LONG": "💎 Активна\n📅 до {end_date} ({days} дн.)", "SUB_STATUS_ACTIVE_TODAY": "💎 Активна\n⚠️ истекает сегодня!", @@ -237,23 +393,7 @@ "SUB_STATUS_TRIAL_TODAY": "🎁 Тестовая подписка\n⚠️ истекает сегодня!", "SUB_STATUS_TRIAL_TOMORROW": "🎁 Тестовая подписка\n⚠️ истекает завтра!", "SUCCESS": "✅ Успешно", - "REGISTRATION_COMPLETING": "✅ Завершаем регистрацию...", "SUPPORT_INFO": "\n🛠️ Техническая поддержка\n\nПо всем вопросам обращайтесь к нашей поддержке:\n\n👤 {settings.SUPPORT_USERNAME}\n\nМы поможем с:\n• Настройкой подключения\n• Решением технических проблем \n• Вопросами по оплате\n• Другими вопросами\n\n⏰ Время ответа: обычно в течение 1-2 часов\n", - "SERVER_STATUS_AVAILABLE": "✅ Доступны", - "SERVER_STATUS_ERROR_SHORT": "Не удалось получить данные", - "SERVER_STATUS_LATENCY": "{latency} мс", - "SERVER_STATUS_LATENCY_UNKNOWN": "нет данных", - "SERVER_STATUS_NEXT_PAGE": "Вперед ➡️", - "SERVER_STATUS_NO_SERVERS": "Нет данных о серверах.", - "SERVER_STATUS_NOT_CONFIGURED": "Функция недоступна.", - "SERVER_STATUS_OFFLINE": "нет ответа", - "SERVER_STATUS_PAGINATION": "Страница {current} из {total}", - "SERVER_STATUS_PREV_PAGE": "⬅️ Назад", - "SERVER_STATUS_REFRESH": "🔄 Обновить", - "SERVER_STATUS_SUMMARY": "Всего серверов: {total} (в сети: {online}, вне сети: {offline})", - "SERVER_STATUS_TITLE": "📊 Статус серверов", - "SERVER_STATUS_UPDATED_AT": "⏱ Обновлено: {time}", - "SERVER_STATUS_UNAVAILABLE": "❌ Недоступны", "SWITCH_TRAFFIC_BUTTON": "🔄 Переключить трафик", "SWITCH_TRAFFIC_CONFIRM": "\n🔄 Подтверждение переключения трафика\n\nТекущий лимит: {current_traffic}\nНовый лимит: {new_traffic}\n\nДействие: {action}\n💰 {cost}\n\nПодтвердить переключение?\n", "SWITCH_TRAFFIC_INFO": "\n🔄 Переключение лимита трафика\n\nТекущий лимит: {current_traffic}\nВыберите новый лимит трафика:\n\n💡 Важно:\n• При увеличении - доплата за разницу пропорционально оставшемуся времени\n• При уменьшении - возврат средств не производится\n• Счетчик использованного трафика НЕ сбрасывается\n", @@ -264,13 +404,6 @@ "TOP_UP_AMOUNT": "💳 Введите сумму для пополнения (в рублях):", "TOP_UP_METHODS": "\n💳 Выберите способ оплаты\n\nСумма: {amount}\n", "TOP_UP_STARS": "⭐ Telegram Stars", - "STARS_PAYMENT_ENROLLMENT_ERROR": "❌ Произошла ошибка при зачислении средств. Обратитесь в поддержку, платеж будет проверен вручную.", - "STARS_PAYMENT_PROCESSING_ERROR": "❌ Техническая ошибка при обработке платежа. Обратитесь в поддержку для решения проблемы.", - "STARS_PAYMENT_SUCCESS": "🎉 Платеж успешно обработан!\n\n⭐ Потрачено звезд: {stars_spent}\n💰 Зачислено на баланс: {amount} ₽\n🆔 ID транзакции: {transaction_id}...\n\nСпасибо за пополнение! 🚀", - "STARS_PAYMENT_USER_NOT_FOUND": "❌ Ошибка: пользователь не найден. Обратитесь в поддержку.", - "STARS_PRECHECK_INVALID_PAYLOAD": "Ошибка валидации платежа. Попробуйте еще раз.", - "STARS_PRECHECK_TECHNICAL_ERROR": "Техническая ошибка. Попробуйте позже.", - "STARS_PRECHECK_USER_NOT_FOUND": "Пользователь не найден. Обратитесь в поддержку.", "TOP_UP_TRIBUTE": "💎 Банковская карта", "TRAFFIC_100GB": "📊 100 ГБ - {settings.format_price(settings.PRICE_TRAFFIC_100GB)}", "TRAFFIC_10GB": "📊 10 ГБ - {settings.format_price(settings.PRICE_TRAFFIC_10GB)}", @@ -292,129 +425,5 @@ "USER_NOT_FOUND": "❌ Пользователь не найден", "WELCOME": "\n🎉 Добро пожаловать в VPN сервис!\n\nНаш сервис предоставляет быстрый и безопасный доступ к интернету без ограничений.\n\n🔐 Преимущества:\n• Высокая скорость подключения\n• Серверы в разных странах\n• Надежная защита данных\n• Круглосуточная поддержка\n\nДля начала работы выберите язык интерфейса:\n", "WELCOME_FALLBACK": "Добро пожаловать, {user_name}!", - "YES": "✅ Да", - "SUBSCRIPTION_STATUS_EXPIRED": "Истекла", - "SUBSCRIPTION_STATUS_TRIAL": "Тестовая", - "SUBSCRIPTION_STATUS_ACTIVE": "Активна", - "SUBSCRIPTION_STATUS_UNKNOWN": "Неизвестно", - "SUBSCRIPTION_TIME_LEFT_EXPIRED": "истёк", - "SUBSCRIPTION_TIME_LEFT_DAYS": "{days} дн.", - "SUBSCRIPTION_TIME_LEFT_HOURS": "{hours} ч.", - "SUBSCRIPTION_TIME_LEFT_MINUTES": "{minutes} мин.", - "SUBSCRIPTION_WARNING_TOMORROW": "\n⚠️ истекает завтра!", - "SUBSCRIPTION_WARNING_TODAY": "\n⚠️ истекает сегодня!", - "SUBSCRIPTION_WARNING_MINUTES": "\n🔴 истекает через несколько минут!", - "SUBSCRIPTION_TYPE_TRIAL": "Триал", - "SUBSCRIPTION_TYPE_PAID": "Платная", - "SUBSCRIPTION_TRAFFIC_UNLIMITED": "∞ (безлимит) | Использовано: {used} ГБ", - "SUBSCRIPTION_TRAFFIC_LIMITED": "{used} / {limit} ГБ", - "SUBSCRIPTION_NO_SERVERS": "Нет серверов", - "SUBSCRIPTION_OVERVIEW_TEMPLATE": "👤 {full_name}\n💰 Баланс: {balance}\n📱 Подписка: {status_emoji} {status_display}{warning}\n\n📱 Информация о подписке\n🎭 Тип: {subscription_type}\n📅 Действует до: {end_date}\n⏰ Осталось: {time_left}\n📈 Трафик: {traffic}\n🌍 Серверы: {servers}\n📱 Устройства: {devices_used} / {device_limit}", - "SUBSCRIPTION_CONNECTED_DEVICES_TITLE": "
📱 Подключенные устройства:\n", - "SUBSCRIPTION_CONNECTED_DEVICES_FOOTER": "
", - "SUBSCRIPTION_CONNECT_LINK_SECTION": "🔗 Ссылка для подключения:\n{subscription_url}", - "SUBSCRIPTION_CONNECT_LINK_PROMPT": "📱 Скопируйте ссылку и добавьте в ваше VPN приложение", - "SUBSCRIPTION_IMPORT_LINK_SECTION": "🔗 Ваша ссылка для импорта в VPN приложение:\n{subscription_url}", - "SUBSCRIPTION_IMPORT_INSTRUCTION_PROMPT": "📱 Нажмите кнопку ниже, чтобы получить инструкцию по настройке VPN на вашем устройстве", - "BACK_TO_MAIN_MENU_BUTTON": "⬅️ В главное меню", - "CUSTOM_MINIAPP_URL_NOT_SET": "⚠ Кастомная ссылка для мини-приложения не настроена", - "SUBSCRIPTION_LINK_GENERATING_NOTICE": "{purchase_text}\n\nСсылка генерируется, перейдите в раздел 'Моя подписка' через несколько секунд.", - "SUBSCRIPTION_NO_ACTIVE_LINK": "⚠ У вас нет активной подписки или ссылка еще генерируется", - "SUBSCRIPTION_CONNECT_MINIAPP_MESSAGE": "📱 Подключить подписку\n\n🚀 Нажмите кнопку ниже, чтобы открыть подписку в мини-приложении Telegram:", - "SUBSCRIPTION_CONNECT_CUSTOM_MESSAGE": "🚀 Подключить подписку\n\n📱 Нажмите кнопку ниже, чтобы открыть приложение:", - "SUBSCRIPTION_CONNECT_LINK_MESSAGE": "🚀 Подключить подписку\n\n🔗 Нажмите кнопку ниже, чтобы открыть ссылку подписки:", - "SUBSCRIPTION_CONNECT_DEVICE_MESSAGE": "📱 Подключить подписку\n\n🔗 Ссылка подписки:\n{subscription_url}\n\n💡 Выберите ваше устройство для получения подробной инструкции по настройке:", - "SUBSCRIPTION_LINK_UNAVAILABLE": "❌ Ссылка подписки недоступна", - "SUBSCRIPTION_DEVICE_APPS_NOT_FOUND": "❌ Приложения для этого устройства не найдены", - "SUBSCRIPTION_DEVICE_GUIDE_TITLE": "📱 Настройка для {device_name}", - "SUBSCRIPTION_DEVICE_LINK_TITLE": "🔗 Ссылка подписки:", - "SUBSCRIPTION_DEVICE_FEATURED_APP": "📋 Рекомендуемое приложение: {app_name}", - "SUBSCRIPTION_DEVICE_STEP_INSTALL_TITLE": "Шаг 1 - Установка:", - "SUBSCRIPTION_DEVICE_STEP_ADD_TITLE": "Шаг 2 - Добавление подписки:", - "SUBSCRIPTION_DEVICE_STEP_CONNECT_TITLE": "Шаг 3 - Подключение:", - "SUBSCRIPTION_DEVICE_HOW_TO_TITLE": "💡 Как подключить:", - "SUBSCRIPTION_DEVICE_HOW_TO_STEP1": "1. Установите приложение по ссылке выше", - "SUBSCRIPTION_DEVICE_HOW_TO_STEP2": "2. Скопируйте ссылку подписки (нажмите на неё)", - "SUBSCRIPTION_DEVICE_HOW_TO_STEP3": "3. Откройте приложение и вставьте ссылку", - "SUBSCRIPTION_DEVICE_HOW_TO_STEP4": "4. Подключитесь к серверу", - "SUBSCRIPTION_APPS_TITLE": "📱 Приложения для {device_name}", - "SUBSCRIPTION_APPS_PROMPT": "Выберите приложение для подключения:", - "SUBSCRIPTION_APP_NOT_FOUND": "❌ Приложение не найдено", - "SUBSCRIPTION_SPECIFIC_APP_TITLE": "📱 {app_name} - {device_name}", - "SUBSCRIPTION_ADDITIONAL_STEP_TITLE": "{title}:", - "SUBSCRIPTION_LINK_USAGE_TITLE": "📱 Как использовать:", - "SUBSCRIPTION_LINK_STEP1": "1. Нажмите на ссылку выше чтобы её скопировать", - "SUBSCRIPTION_LINK_STEP2": "2. Откройте ваше VPN приложение", - "SUBSCRIPTION_LINK_STEP3": "3. Найдите функцию \"Добавить подписку\" или \"Import\"", - "SUBSCRIPTION_LINK_STEP4": "4. Вставьте скопированную ссылку", - "SUBSCRIPTION_LINK_HINT": "💡 Если ссылка не скопировалась, выделите её вручную и скопируйте.", - "REFERRAL_PROGRAM_TITLE": "👥 Реферальная программа", - "REFERRAL_STATS_HEADER": "📊 Ваша статистика:", - "REFERRAL_STATS_INVITED": "• Приглашено пользователей: {count}", - "REFERRAL_STATS_FIRST_TOPUPS": "• Сделали первое пополнение: {count}", - "REFERRAL_STATS_ACTIVE": "• Активных рефералов: {count}", - "REFERRAL_STATS_CONVERSION": "• Конверсия: {rate}%", - "REFERRAL_STATS_TOTAL_EARNED": "• Заработано всего: {amount}", - "REFERRAL_STATS_MONTH_EARNED": "• За последний месяц: {amount}", - "REFERRAL_REWARDS_HEADER": "🎁 Как работают награды:", - "REFERRAL_REWARD_NEW_USER": "• Новый пользователь получает: {bonus} при первом пополнении от {minimum}", - "REFERRAL_REWARD_INVITER": "• Вы получаете при первом пополнении реферала: {bonus}", - "REFERRAL_REWARD_COMMISSION": "• Комиссия с каждого пополнения реферала: {percent}%", - "REFERRAL_LINK_TITLE": "🔗 Ваша реферальная ссылка:", - "REFERRAL_CODE_TITLE": "🆔 Ваш код: {code}", - "REFERRAL_RECENT_EARNINGS_HEADER": "💰 Последние начисления:", - "REFERRAL_EARNING_REASON_FIRST_TOPUP": "🎉 Первое пополнение", - "REFERRAL_EARNING_REASON_COMMISSION_TOPUP": "💰 Комиссия с пополнения", - "REFERRAL_EARNING_REASON_COMMISSION_PURCHASE": "💰 Комиссия с покупки", - "REFERRAL_RECENT_EARNINGS_ITEM": "• {reason}: {amount} от {referral_name}", - "REFERRAL_EARNINGS_BY_TYPE_HEADER": "📈 Доходы по типам:", - "REFERRAL_EARNINGS_FIRST_TOPUPS": "• Бонусы за первые пополнения: {count} ({amount})", - "REFERRAL_EARNINGS_TOPUPS": "• Комиссии с пополнений: {count} ({amount})", - "REFERRAL_EARNINGS_PURCHASES": "• Комиссии с покупок: {count} ({amount})", - "REFERRAL_INVITE_FOOTER": "📢 Приглашайте друзей и зарабатывайте!", - "REFERRAL_LINK_CAPTION": "🔗 Ваша реферальная ссылка:\n{link}", - "REFERRAL_LIST_EMPTY": "📋 У вас пока нет рефералов.\n\nПоделитесь своей реферальной ссылкой, чтобы начать зарабатывать!", - "REFERRAL_LIST_HEADER": "👥 Ваши рефералы (стр. {current}/{total})", - "REFERRAL_LIST_ITEM_HEADER": "{index}. {status} {name}", - "REFERRAL_LIST_ITEM_TOPUPS": " {emoji} Пополнений: {count}", - "REFERRAL_LIST_ITEM_EARNED": " 💎 Заработано с него: {amount}", - "REFERRAL_LIST_ITEM_REGISTERED": " 📅 Регистрация: {days} дн. назад", - "REFERRAL_LIST_ITEM_ACTIVITY": " 🕐 Активность: {days} дн. назад", - "REFERRAL_LIST_ITEM_ACTIVITY_LONG_AGO": " 🕐 Активность: давно", - "REFERRAL_LIST_PREV_PAGE": "⬅️ Назад", - "REFERRAL_LIST_NEXT_PAGE": "Вперед ➡️", - "REFERRAL_ANALYTICS_TITLE": "📊 Аналитика рефералов", - "REFERRAL_ANALYTICS_EARNINGS_HEADER": "💰 Доходы по периодам:", - "REFERRAL_ANALYTICS_EARNINGS_TODAY": "• Сегодня: {amount}", - "REFERRAL_ANALYTICS_EARNINGS_WEEK": "• За неделю: {amount}", - "REFERRAL_ANALYTICS_EARNINGS_MONTH": "• За месяц: {amount}", - "REFERRAL_ANALYTICS_EARNINGS_QUARTER": "• За квартал: {amount}", - "REFERRAL_ANALYTICS_TOP_TITLE": "🏆 Топ-{count} рефералов:", - "REFERRAL_ANALYTICS_TOP_ITEM": "{index}. {name}: {amount} ({count} начислений)", - "REFERRAL_ANALYTICS_FOOTER": "📈 Продолжайте развивать свою реферальную сеть!", - "REFERRAL_INVITE_TITLE": "🎉 Присоединяйся к VPN сервису!", - "REFERRAL_INVITE_BONUS": "💎 При первом пополнении от {minimum} ты получишь {bonus} бонусом на баланс!", - "REFERRAL_INVITE_FEATURE_FAST": "🚀 Быстрое подключение", - "REFERRAL_INVITE_FEATURE_SERVERS": "🌍 Серверы по всему миру", - "REFERRAL_INVITE_FEATURE_SECURE": "🔒 Надежная защита", - "REFERRAL_INVITE_LINK_PROMPT": "👇 Переходи по ссылке:", - "REFERRAL_SHARE_BUTTON": "📤 Поделиться", - "REFERRAL_INVITE_CREATED_TITLE": "📝 Приглашение создано!", - "REFERRAL_INVITE_CREATED_INSTRUCTION": "Нажмите кнопку «📤 Поделиться» чтобы отправить приглашение в любой чат, или скопируйте текст ниже:", - "PAYMENT_METHODS_ONLY_SUPPORT": "💳 Способы пополнения баланса\n\n⚠️ В данный момент автоматические способы оплаты временно недоступны.\nОбратитесь в техподдержку для пополнения баланса.\n\nВыберите способ пополнения:", - "PAYMENT_METHODS_TITLE": "💳 Способы пополнения баланса", - "PAYMENT_METHODS_PROMPT": "Выберите удобный для вас способ оплаты:", - "PAYMENT_METHODS_FOOTER": "Выберите способ пополнения:", - "PAYMENT_METHOD_STARS_NAME": "⭐ Telegram Stars", - "PAYMENT_METHOD_STARS_DESCRIPTION": "быстро и удобно", - "PAYMENT_METHOD_YOOKASSA_NAME": "💳 Банковская карта", - "PAYMENT_METHOD_YOOKASSA_DESCRIPTION": "через YooKassa", - "PAYMENT_METHOD_TRIBUTE_NAME": "💳 Банковская карта", - "PAYMENT_METHOD_TRIBUTE_DESCRIPTION": "через Tribute", - "PAYMENT_METHOD_CRYPTOBOT_NAME": "🪙 Криптовалюта", - "PAYMENT_METHOD_CRYPTOBOT_DESCRIPTION": "через CryptoBot", - "PAYMENT_METHOD_SUPPORT_NAME": "🛠️ Через поддержку", - "PAYMENT_METHOD_SUPPORT_DESCRIPTION": "другие способы", - "PAYMENT_METHODS_UNAVAILABLE_ALERT": "⚠️ В данный момент автоматические способы оплаты временно недоступны. Для пополнения баланса обратитесь в техподдержку." - + "YES": "✅ Да" } diff --git a/app/states.py b/app/states.py index f824f9a5..6bf45cf3 100644 --- a/app/states.py +++ b/app/states.py @@ -69,6 +69,7 @@ class AdminStates(StatesGroup): creating_promo_group_server_discount = State() creating_promo_group_device_discount = State() creating_promo_group_period_discount = State() + creating_promo_group_addon_discount = State() creating_promo_group_auto_assign = State() editing_promo_group_menu = State() @@ -77,6 +78,7 @@ class AdminStates(StatesGroup): editing_promo_group_server_discount = State() editing_promo_group_device_discount = State() editing_promo_group_period_discount = State() + editing_promo_group_addon_discount = State() editing_promo_group_auto_assign = State() editing_squad_price = State() diff --git a/locales/en.json b/locales/en.json index f217ed28..7b9d8a81 100644 --- a/locales/en.json +++ b/locales/en.json @@ -1,525 +1,534 @@ { - "ADD_COUNTRIES_BUTTON": "🌐 Add countries", - "ADMIN_MAIN_MENU": "🏠 Main menu", - "ADMIN_CAMPAIGNS": "📣 Promotional campaigns", - "ADMIN_REPORTS": "📊 Reports", - "AUTOPAY_BUTTON": "💳 Auto payment", - "AUTOPAY_SET_DAYS_BUTTON": "⚙️ Configure days", - "BACK": "⬅️ Back", - "BACK_TO_SUBSCRIPTION": "⬅️ Back to subscription", - "BALANCE_BUTTON_DEFAULT": "💰 Balance: {balance}", - "CANCEL": "❌ Cancel", - "CHANGE_DEVICES_BUTTON": "📱 Change devices", - "CHANNEL_CHECK_BUTTON": "✅ I have joined", - "CHANNEL_REQUIRED_TEXT": "🔒 Please join the announcement channel to access the bot, then press the button below.", - "CHANNEL_SUBSCRIBE_BUTTON": "🔗 Subscribe", - "CHANNEL_SUBSCRIBE_REQUIRED_ALERT": "❌ You haven't joined the channel!", - "CHANNEL_SUBSCRIBE_THANKS": "✅ Thanks for subscribing", - "CHECK_STATUS_BUTTON": "📊 Check status", - "CHOOSE_ANOTHER_DEVICE": "📱 Choose another device", - "CONFIRM": "✅ Confirm", - "CONFIRM_CHANGE_BUTTON": "✅ Confirm change", - "CONNECT_BUTTON": "🔗 Connect", - "HAPP_DOWNLOAD_BUTTON": "⬇️ Download Happ", - "HAPP_DOWNLOAD_PROMPT": "📥 Download Happ\nChoose your device:", - "HAPP_PLATFORM_IOS": "🍎 iOS", - "HAPP_PLATFORM_ANDROID": "🤖 Android", - "HAPP_PLATFORM_MACOS": "🖥️ Mac OS", - "HAPP_PLATFORM_WINDOWS": "💻 Windows", - "HAPP_PLATFORM_PC": "💻 PC", - "HAPP_DOWNLOAD_LINK_MESSAGE": "⬇️ Download Happ for {platform}:", - "HAPP_DOWNLOAD_LINK_NOT_SET": "❌ Download link for this device is not configured", - "HAPP_DOWNLOAD_OPEN_LINK": "🔗 Open link", - "CONTINUE": "➡️ Continue", - "CONTINUE_BUTTON": "➡️ Continue", - "COPY_SUBSCRIPTION_LINK": "📋 Copy subscription link", - "CREATE_INVITE_BUTTON": "📝 Create invite", - "DEVICE_CONNECTION_HELP": "❓ How to reconnect a device?", - "DEVICE_GUIDE_ANDROID": "🤖 Android", - "DEVICE_GUIDE_ANDROID_TV": "📺 Android TV", - "DEVICE_GUIDE_IOS": "📱 iOS (iPhone/iPad)", - "DEVICE_GUIDE_MAC": "🎯 macOS", - "DEVICE_GUIDE_WINDOWS": "💻 Windows", - "DISABLE_BUTTON": "❌ Disable", - "ENABLE_BUTTON": "✅ Enable", - "ERROR": "❌ An error occurred", - "ERROR_TRY_AGAIN": "❌ An error occurred. Please try again.", - "ERROR_RULES_RETRY": "An error occurred. Please try accepting the rules again:", - "GO_TO_BALANCE_TOP_UP": "💳 Go to balance top up", - "RETURN_TO_SUBSCRIPTION_CHECKOUT": "⬅️ Return to subscription checkout", - "INSUFFICIENT_BALANCE": "❌ Insufficient balance.\n\nTop up {amount} and try again.", - "ADDON_INSUFFICIENT_FUNDS_MESSAGE": "⚠️ Insufficient funds\n\nService price: {required}\nBalance: {balance}\nMissing: {missing}\n\nChoose a top-up method. The amount will be filled in automatically.", - "LANGUAGE_SELECTED": "🌐 Interface language set: English", - "LOADING": "⏳ Loading...", - "MAIN_MENU": "👤 {user_name}\n\n📱 Subscription: {subscription_status}\n\nChoose an option:\n", - "MAIN_MENU_ACTION_PROMPT": "Choose an option:", - "MAIN_MENU_BUTTON": "🏠 Main menu", - "MANAGE_DEVICES_BUTTON": "🔧 Manage devices", - "MENU_BALANCE": "💰 Balance", - "MENU_SUBSCRIPTION": "📱 Subscription", - "MENU_TRIAL": "🎁 Trial subscription", - "MY_BALANCE_BUTTON": "💰 My balance", - "MY_SUBSCRIPTION_BUTTON": "📱 My subscription", - "NO": "❌ No", - "NO_SERVERS_AVAILABLE": "❌ No servers available", - "NO_TRAFFIC_PACKAGES": "❌ No packages available", - "OTHER_APPS_BUTTON": "📋 Other apps", - "PAGINATION_NEXT": "➡️", - "PAGINATION_PREV": "⬅️", - "PAYMENTS_TEMPORARILY_UNAVAILABLE": "⚠️ Payment methods are temporarily unavailable", - "PAYMENT_CARD_TRIBUTE": "💳 Bank card (Tribute)", - "PAYMENT_CARD_MULENPAY": "💳 Bank card (Mulen Pay)", - "PAYMENT_CARD_PAL24": "💳 Bank card (PayPalych)", - "PAYMENT_CARD_YOOKASSA": "💳 Bank card (YooKassa)", - "PAYMENT_CRYPTOBOT": "🪙 Cryptocurrency (CryptoBot)", - "PAYMENT_SBP_YOOKASSA": "🏦 Pay via SBP (YooKassa)", - "PAYMENT_TELEGRAM_STARS": "⭐ Telegram Stars", - "PAYMENT_VIA_SUPPORT": "🛠️ Via support", - "PAY_NOW_BUTTON": "💳 Pay", - "PAY_WITH_COINS_BUTTON": "🪙 Pay", - "MULENPAY_TOPUP_PROMPT": "💳 Mulen Pay payment\n\nEnter an amount between 100 and 100,000 ₽.\nThe payment is processed by the secure Mulen Pay platform.", - "MULENPAY_PAYMENT_ERROR": "❌ Failed to create Mulen Pay payment. Please try again later or contact support.", - "MULENPAY_PAY_BUTTON": "💳 Pay with Mulen Pay", - "MULENPAY_PAYMENT_INSTRUCTIONS": "💳 Mulen Pay payment\n\n💰 Amount: {amount}\n🆔 Payment ID: {payment_id}\n\n📱 How to pay:\n1. Press ‘Pay with Mulen Pay’\n2. Follow the instructions on the payment page\n3. Confirm the transfer\n4. Funds will be credited automatically\n\n❓ Need help? Contact {support}", - "PAL24_TOPUP_PROMPT": "💳 PayPalych payment\n\nEnter an amount between 100 and 1,000,000 ₽.\nThe payment is processed by the secure PayPalych platform.", - "PAL24_PAYMENT_ERROR": "❌ Failed to create a PayPalych payment. Please try again later or contact support.", - "PAL24_PAY_BUTTON": "💳 Pay with PayPalych", - "PAL24_PAYMENT_INSTRUCTIONS": "💳 PayPalych payment\n\n💰 Amount: {amount}\n🆔 Invoice ID: {bill_id}\n\n📱 How to pay:\n1. Press ‘Pay with PayPalych’\n2. Follow the system prompts\n3. Confirm the transfer\n4. Funds will be credited automatically\n\n❓ Need help? Contact {support}", - "PENDING_CANCEL_BUTTON": "⌛ Cancel", - "POST_REGISTRATION_TRIAL_BUTTON": "🚀 Activate free trial 🚀", - "REFERRAL_ANALYTICS_BUTTON": "📊 Analytics", - "REFERRAL_CODE_ACCEPTED": "✅ Referral code accepted!", - "REFERRAL_CODE_INVALID": "❌ Invalid referral code", - "REFERRAL_CODE_INVALID_HELP": "❌ Invalid referral code.\n\n💡 If you have a referral code, please double-check the spelling.\n⏭️ To continue without a referral code, use the /start command.", - "REFERRAL_CODE_QUESTION": "\n🤝 Do you have a friend's referral code?\n\nIf you have a promo code or referral link, enter it now to receive a bonus!\n\nSend the code or tap \"Skip\":\n", - "REFERRAL_CODE_SKIP": "⏭️ Skip", - "ALREADY_REGISTERED_REFERRAL": "ℹ️ You are already registered. A referral link cannot be applied.", - "REFERRAL_LIST_BUTTON": "👥 Referral list", - "RESET_ALL_DEVICES_BUTTON": "🔄 Reset all devices", - "RESET_DEVICE_CONFIRM_BUTTON": "✅ Reset this device", - "RESET_TRAFFIC_BUTTON": "🔄 Reset traffic", - "RULES_HEADER": "📋 Service Rules", - "RULES_ACCEPTED_PROCESSING": "✅ Rules accepted! Completing registration...", - "RULES_TEXT_DEFAULT": "📋 Service Usage Rules\n\n1. Do not use the service for illegal activity\n2. Avoid sharing pirated or malicious content\n3. Spam and phishing are prohibited\n4. Using the service for DDoS attacks is forbidden\n5. One account is intended for one person\n6. Refunds are provided only in exceptional cases\n7. The administration may block accounts that violate the rules\n\nBy using the service you agree to follow these rules.", - "SEND_CONTACT_BUTTON": "📱 Share contact", - "SEND_LOCATION_BUTTON": "📍 Share location", - "SHOW_QR_BUTTON": "📱 Show QR code", - "SHOW_SUBSCRIPTION_LINK": "📋 Show subscription link", - "SKIP_BUTTON": "Skip ➡️", - "SUBSCRIPTION_SETTINGS_BUTTON": "⚙️ Subscription settings", - "SUB_STATUS_ACTIVE_FEW_DAYS": "💎 Active\n⚠️ expires in {days} days", - "SUB_STATUS_ACTIVE_LONG": "💎 Active\n📅 until {end_date} ({days} days)", - "SUB_STATUS_ACTIVE_TODAY": "💎 Active\n⚠️ expires today!", - "SUB_STATUS_ACTIVE_TOMORROW": "💎 Active\n⚠️ expires tomorrow!", - "SUB_STATUS_EXPIRED": "🔴 Expired\n📅 {end_date}", - "SUB_STATUS_NONE": "❌ Not available", - "SUB_STATUS_TRIAL_ACTIVE": "🎁 Trial subscription\n📅 until {end_date} ({days} days)", - "SUB_STATUS_TRIAL_TODAY": "🎁 Trial subscription\n⚠️ expires today!", - "SUB_STATUS_TRIAL_TOMORROW": "🎁 Trial subscription\n⚠️ expires tomorrow!", - "SUBSCRIPTION_ACTIVE": "✅ Active", - "SUBSCRIPTION_EXTEND": "💎 Extend subscription", - "SUCCESS": "✅ Success", - "REGISTRATION_COMPLETING": "✅ Completing registration...", - "SWITCH_TRAFFIC_BUTTON": "🔄 Switch traffic", - "TOPUP_BALANCE_BUTTON": "💳 Top up balance", - "TRAFFIC_PACKAGES_NOT_CONFIGURED": "⚠️ Traffic packages are not configured", - "TRIAL_ACTIVATE_BUTTON": "🎁 Activate", - "PROMOCODE_EMPTY_INPUT": "❌ Please enter a valid promo code", - "STARS_PAYMENT_ENROLLMENT_ERROR": "❌ Failed to credit funds. Please contact support; the payment will be verified manually.", - "STARS_PAYMENT_PROCESSING_ERROR": "❌ Technical error processing the payment. Please contact support for assistance.", - "STARS_PAYMENT_SUCCESS": "🎉 Payment processed successfully!\n\n⭐ Stars spent: {stars_spent}\n💰 Added to balance: {amount} ₽\n🆔 Transaction ID: {transaction_id}...\n\nThank you for topping up! 🚀", - "STARS_PAYMENT_USER_NOT_FOUND": "❌ Error: user not found. Please contact support.", - "STARS_PRECHECK_INVALID_PAYLOAD": "Payment validation error. Please try again.", - "STARS_PRECHECK_TECHNICAL_ERROR": "Technical error. Please try again later.", - "STARS_PRECHECK_USER_NOT_FOUND": "User not found. Please contact support.", - "UNKNOWN_CALLBACK_ALERT": "❓ Unknown action. Please try again.", - "UNKNOWN_COMMAND_MESSAGE": "❓ I didn't understand that command. Use the menu buttons.", - "WELCOME": "\n🎉 Welcome to VPN Service!\n\nOur service provides fast and secure internet access without restrictions.\n\n🔐 Advantages:\n• High connection speed\n• Servers in different countries \n• Reliable data protection\n• 24/7 support\n\nTo get started, select interface language:\n", - "WELCOME_FALLBACK": "Welcome, {user_name}!", - "YES": "✅ Yes", - "ACCESS_DENIED": "❌ Access denied", - "ADMIN_MESSAGES": "📨 Broadcasts", - "ADMIN_MONITORING": "🔍 Monitoring", - "ADMIN_MONITORING_SETTINGS": "⚙️ Monitoring settings", - "ADMIN_PANEL": "\n⚙️ Administration panel\n\nSelect a section to manage:\n", - "ADMIN_PROMOCODES": "🎫 Promo codes", - "ADMIN_REFERRALS": "🤝 Referral program", - "ADMIN_REMNAWAVE": "🖥️ Remnawave", - "ADMIN_RULES": "📋 Rules", - "ADMIN_STATISTICS": "📊 Statistics", - "ADMIN_PROMO_GROUPS": "💳 Promo groups", - "ADMIN_PROMO_GROUPS_TITLE": "💳 Promo groups", - "ADMIN_PROMO_GROUPS_SUMMARY": "Groups total: {count}\nMembers total: {members}", - "ADMIN_PROMO_GROUPS_DISCOUNTS": "Discounts — servers: {servers}%, traffic: {traffic}%, devices: {devices}%", - "ADMIN_PROMO_GROUP_PERIOD_DISCOUNTS_HEADER": "⏳ Period discounts:", - "ADMIN_PROMO_GROUPS_DEFAULT_LABEL": " (default)", - "ADMIN_PROMO_GROUPS_MEMBERS_COUNT": "Members: {count}", - "ADMIN_PROMO_GROUPS_EMPTY": "No promo groups found.", - "CREATE_TICKET_BUTTON": "🎫 Create ticket", - "MY_TICKETS_BUTTON": "📋 My tickets", - "CONTACT_SUPPORT_BUTTON": "💬 Contact support", - "SUPPORT_BUTTON": "🆘 Support", - "TICKET_PRIORITY_SELECT": "Select ticket priority:", - "TICKET_PRIORITY_LOW": "🟢 Low", - "TICKET_PRIORITY_NORMAL": "🟡 Normal", - "TICKET_PRIORITY_HIGH": "🟠 High", - "TICKET_PRIORITY_URGENT": "🔴 Urgent", - "CANCEL_TICKET_CREATION": "❌ Cancel ticket creation", - "TICKET_TITLE_INPUT": "Enter ticket title:", - "TICKET_TITLE_TOO_SHORT": "Title must contain at least 5 characters. Try again:", - "TICKET_TITLE_TOO_LONG": "Title is too long. Maximum 255 characters. Try again:", - "TICKET_MESSAGE_INPUT": "Now describe your problem or question:", - "TICKET_MESSAGE_TOO_SHORT": "Message must contain at least 10 characters. Try again:", - "TICKET_CREATED_SUCCESS": "✅ Ticket #{ticket_id} created successfully!\n\nTitle: {title}\n\nWe will respond to you soon.", - "VIEW_TICKET": "👁️ View ticket", - "BACK_TO_MENU": "🏠 Back to menu", - "TICKET_CREATION_ERROR": "❌ An error occurred while creating the ticket. Please try again later.", - "NO_TICKETS": "You don't have any tickets yet.", - "MY_TICKETS_TITLE": "📋 Your tickets:", - "TICKET_STATUS_OPEN": "Open", - "TICKET_STATUS_ANSWERED": "Answered", - "TICKET_STATUS_CLOSED": "Closed", - "TICKET_STATUS_PENDING": "Pending", - "REPLY_TO_TICKET": "💬 Reply", - "CLOSE_TICKET": "🔒 Close ticket", - "CANCEL_REPLY": "❌ Cancel reply", - "TICKET_REPLY_INPUT": "Enter your reply:", - "TICKET_REPLY_TOO_SHORT": "Reply must contain at least 5 characters. Try again:", - "TICKET_REPLY_SENT": "✅ Your reply has been sent!", - "TICKET_REPLY_ERROR": "❌ An error occurred while sending the reply. Please try again later.", - "TICKET_CLOSED": "✅ Ticket closed.", - "TICKET_CLOSE_ERROR": "❌ Error closing ticket.", - "TICKET_NOT_FOUND": "Ticket not found.", - "TICKET_CREATION_CANCELLED": "Ticket creation cancelled.", - "BACK_TO_SUPPORT": "⬅️ Back to support", - "TICKET_REPLY_CANCELLED": "Reply cancelled.", - "BACK_TO_TICKETS": "⬅️ Back to tickets", - "NO_TICKETS_ADMIN": "No tickets to display.", - "ADMIN_TICKETS_TITLE": "🎫 All support tickets:", - "ADMIN_TICKET_REPLY_INPUT": "Enter support reply:", - - "ADMIN_TICKET_REPLY_SENT": "✅ Reply sent!", - "TICKET_MARKED_ANSWERED": "✅ Ticket marked as answered.", - "TICKET_UPDATE_ERROR": "❌ Error updating ticket.", - "MARK_AS_ANSWERED": "✅ Mark as answered", - "TICKET_REPLY_NOTIFICATION": "🎫 Reply received for ticket #{ticket_id}\n\n{reply_preview}\n\nClick the button below to go to the ticket:", - "CLOSE_NOTIFICATION": "❌ Close notification", - "REPORT_CLOSE": "❌ Close", - "REPORT_CLOSED": "✅ Report closed.", - "REPORT_CLOSE_ERROR": "❌ Failed to close the report.", - "NOTIFICATION_CLOSED": "Notification closed.", - "UNBLOCK": "✅ Unblock", - "BLOCK_FOREVER": "🚫 Block permanently", - "BLOCK_BY_TIME": "⏳ Temporary block", - "ENTER_BLOCK_MINUTES": "Enter the number of minutes to block the user (e.g., 15):", - "TICKET_ATTACHMENTS": "📎 Attachments", - "OPEN_TICKETS": "🔴 Open", - "CLOSED_TICKETS": "🟢 Closed", - "OPEN_TICKETS_HEADER": "🔴 Open tickets", - "CLOSED_TICKETS_HEADER": "🟢 Closed tickets", - "SENDING_ATTACHMENTS": "📎 Sending attachments...", - "NO_ATTACHMENTS": "No attachments.", - "ATTACHMENTS_SENT": "✅ Attachments sent.", - "DELETE_MESSAGE": "🗑 Delete", - "ADMIN_USER_PROMO_GROUP_BUTTON": "👥 Promo group", - "ADMIN_USER_PROMO_GROUP_TITLE": "👥 User promo group", - "ADMIN_USER_PROMO_GROUP_CURRENT": "Current group: {name}", - "ADMIN_USER_PROMO_GROUP_CURRENT_NONE": "Current group: not assigned", - "ADMIN_USER_PROMO_GROUP_DISCOUNTS": "Discounts — servers: {servers}%, traffic: {traffic}%, devices: {devices}%", - "ADMIN_USER_PROMO_GROUP_DISCOUNTS_NONE": "No discounts configured.", - "ADMIN_USER_PROMO_GROUP_SELECT": "Select a promo group to assign:", - "ADMIN_USER_PROMO_GROUP_UPDATED": "✅ User promo group updated: “{name}”", - "ADMIN_USER_PROMO_GROUP_ALREADY": "ℹ️ The user is already in this promo group.", - "ADMIN_USER_PROMO_GROUP_ERROR": "❌ Failed to update the user's promo group.", - "ADMIN_USER_PROMO_GROUP_BACK": "⬅️ Back to user", - "ADMIN_PROMO_GROUP_DETAILS_TITLE": "💳 Promo group: {name}", - "ADMIN_PROMO_GROUP_DETAILS_MEMBERS": "Members: {count}", - "ADMIN_PROMO_GROUP_DETAILS_DEFAULT": "This is the default group.", - "ADMIN_PROMO_GROUP_MEMBERS_BUTTON": "👥 Members", - "ADMIN_PROMO_GROUP_EDIT_BUTTON": "✏️ Edit", - "ADMIN_PROMO_GROUP_DELETE_BUTTON": "🗑️ Delete", - "ADMIN_PROMO_GROUP_CREATE_NAME_PROMPT": "Enter a name for the new promo group:", - "ADMIN_PROMO_GROUP_INVALID_NAME": "Name cannot be empty.", - "ADMIN_PROMO_GROUP_CREATE_TRAFFIC_PROMPT": "Enter traffic discount (0-100):", - "ADMIN_PROMO_GROUP_CREATE_SERVERS_PROMPT": "Enter server discount (0-100):", - "ADMIN_PROMO_GROUP_CREATE_DEVICES_PROMPT": "Enter device discount (0-100):", - "ADMIN_PROMO_GROUP_CREATE_PERIOD_PROMPT": "Enter subscription period discounts (e.g. 30:10, 90:15). Send 0 if none.", - "ADMIN_PROMO_GROUP_INVALID_PERCENT": "Enter a number from 0 to 100.", - "ADMIN_PROMO_GROUP_INVALID_PERIOD_DISCOUNTS": "Enter period:discount pairs separated by commas, e.g. 30:10, 90:15, or 0.", - "ADMIN_PROMO_GROUP_CREATED": "Promo group “{name}” created.", - "ADMIN_PROMO_GROUP_CREATED_BACK_BUTTON": "↩️ Back to promo groups", - "ADMIN_PROMO_GROUP_EDIT_NAME_PROMPT": "Enter a new name (current: {name}):", - "ADMIN_PROMO_GROUP_EDIT_TRAFFIC_PROMPT": "Enter new traffic discount (0-100). Current value: {current}.", - "ADMIN_PROMO_GROUP_EDIT_SERVERS_PROMPT": "Enter new server discount (0-100). Current value: {current}.", - "ADMIN_PROMO_GROUP_EDIT_DEVICES_PROMPT": "Enter new device discount (0-100). Current value: {current}.", - "ADMIN_PROMO_GROUP_EDIT_PERIOD_PROMPT": "Enter new period discounts (current: {current}). Send 0 if none.", - "ADMIN_PROMO_GROUP_UPDATED": "Promo group “{name}” updated.", - "ADMIN_PROMO_GROUP_AUTO_ASSIGN_DISABLED": "Auto assignment by total spending: disabled", - "ADMIN_PROMO_GROUP_AUTO_ASSIGN_LINE": "Auto assignment by total spending from {amount} ₽", - "ADMIN_PROMO_GROUP_EDIT_MENU_TITLE": "✏️ Promo group settings “{name}”", - "ADMIN_PROMO_GROUP_EDIT_MENU_HINT": "Select a parameter to change:", - "ADMIN_PROMO_GROUP_EDIT_FIELD_NAME": "✏️ Rename", - "ADMIN_PROMO_GROUP_EDIT_FIELD_TRAFFIC": "🌐 Traffic discount", - "ADMIN_PROMO_GROUP_EDIT_FIELD_SERVERS": "🖥 Server discount", - "ADMIN_PROMO_GROUP_EDIT_FIELD_DEVICES": "📱 Device discount", - "ADMIN_PROMO_GROUP_EDIT_FIELD_PERIODS": "⏳ Period discounts", - "ADMIN_PROMO_GROUP_EDIT_FIELD_AUTO_ASSIGN": "🤖 Auto assignment by spending", - "ADMIN_PROMO_GROUP_CREATE_AUTO_ASSIGN_PROMPT": "Enter total spending (in ₽) required for automatic assignment. Send 0 to disable.", - "ADMIN_PROMO_GROUP_INVALID_AUTO_ASSIGN": "Enter a non-negative amount in rubles or 0 to disable.", - "ADMIN_PROMO_GROUP_EDIT_AUTO_ASSIGN_PROMPT": "Enter total spending (in ₽) for auto assignment. Current value: {current}.", - "ADMIN_PROMO_GROUP_MEMBERS_TITLE": "👥 Members of {name}", - "ADMIN_PROMO_GROUP_MEMBERS_EMPTY": "This group has no members yet.", - "ADMIN_PROMO_GROUP_DELETE_FORBIDDEN": "The default promo group cannot be deleted.", - "ADMIN_PROMO_GROUP_DELETE_CONFIRM": "Delete promo group “{name}”? All users will be moved to the default group.", - "ADMIN_PROMO_GROUP_DELETED": "Promo group “{name}” deleted.", - "ADMIN_SUBSCRIPTIONS": "📱 Subscriptions", - "ADMIN_USERS": "👥 Users", - "AUTOPAY_DISABLED_TEXT": "Disabled — don't forget to renew manually!", - "AUTOPAY_ENABLED_TEXT": "Enabled — the subscription will renew automatically", - "AUTOPAY_FAILED": "\n❌ Autopay failed\n\nWe couldn't charge the renewal payment.\nBalance available: {balance}\nRequired: {required}\n\nPlease top up your balance and renew manually.\n", - "AUTOPAY_SUCCESS": "\n✅ Autopay completed\n\nYour subscription was automatically renewed for {days} days.\nCharged from balance: {amount}\n", - "BALANCE_BUTTON": "💰 Balance: {balance}", - "BALANCE_BUTTON_ZERO": "💰 Balance: 0 ₽", - "BALANCE_HISTORY": "📊 Transaction history", - "BALANCE_INFO": "\n💰 Balance: {balance}\n\nChoose an action:\n", - "BALANCE_SUPPORT_REQUEST": "🛠️ Request via support", - "BALANCE_TOP_UP": "💳 Top up", - "BALANCE_TOPUP": "💳 Top up balance", - "CAMPAIGN_EXISTING_USER": "ℹ️ This promo link is available only to new users.", - "CAMPAIGN_BONUS_BALANCE": "🎉 You received {amount} for registering via the \"{name}\" campaign!", - "CAMPAIGN_BONUS_SUBSCRIPTION": "🎉 You’ve been granted a {days}-day subscription (traffic: {traffic}, devices: {devices}) from the \"{name}\" campaign!", - "BUY_SUBSCRIPTION_START": "\n💎 Subscription setup\n\nLet's configure a plan that fits you.\n\nFirst, choose the subscription period:\n", - "PROMO_GROUP_DISCOUNTS_HEADER": "🎁 Your promo group discounts", - "PROMO_GROUP_DISCOUNT_SERVERS": "🌍 Servers: {percent}%", - "PROMO_GROUP_DISCOUNT_TRAFFIC": "📊 Traffic: {percent}%", - "PROMO_GROUP_DISCOUNT_DEVICES": "📱 Extra devices: {percent}%", - "PROMO_GROUP_PERIOD_DISCOUNTS_HEADER": "⏳ Long-term period discounts:", - "PROMO_GROUP_PERIOD_DISCOUNT_ITEM": "{period} — {percent}%", - "CHANGE_DEVICES_CONFIRM": "\n📱 Confirm change\n\nCurrent amount: {current_devices} devices\nNew amount: {new_devices} devices\n\nAction: {action}\n💰 {cost}\n\nApply this change?\n", - "CHANGE_DEVICES_INFO": "\n📱 Adjust device limit\n\nCurrent limit: {current_devices} devices\n\nChoose the new number of devices:\n\n💡 Important:\n• Increasing — extra charge proportional to the remaining time\n• Decreasing — funds are not refunded\n", - "CHANGE_DEVICES_SUCCESS_DECREASE": "\n✅ Device limit decreased!\n\n📱 Was: {old_count} → Now: {new_count}\nℹ️ Payments are not refunded\n", - "CHANGE_DEVICES_SUCCESS_INCREASE": "\n✅ Device limit increased!\n\n📱 Was: {old_count} → Now: {new_count}\n💰 Charged: {amount}\n", - "CHANGE_DEVICES_TITLE": "📱 Change device limit", - "CONTACT_SUPPORT": "💬 Contact support", - "CREATE_INVITE": "📝 Create invite", - "DEVICES_INSUFFICIENT_BALANCE": "⚠️ Insufficient balance!\nRequired: {required} (for {months} mo)\nYou have: {balance}", - "DEVICES_LIMIT_EXCEEDED": "⚠️ Maximum device limit exceeded ({limit})", - "DEVICES_MINIMUM_LIMIT": "⚠️ Minimum number of devices: {limit}", - "DEVICES_NO_CHANGE": "ℹ️ Device limit was not changed", - "INVALID_AMOUNT": "❌ Invalid amount", - "MAINTENANCE_MODE_ACTIVE": "\n🔧 Maintenance in progress!\n\nThe service is temporarily unavailable while we improve performance.\n\n⏰ Estimated completion time: unknown\n🔄 Please try again later\n\nWe apologize for the inconvenience.\n", - "MAINTENANCE_MODE_API_ERROR": "\n🔧 Maintenance in progress!\n\nThe service is temporarily unavailable due to connection issues with the servers.\n\n⏰ We're working on it. Please try again in a few minutes.\n\n🔄 Last check: {last_check}\n", - "MENU_ADMIN": "⚙️ Admin panel", - "MENU_BUY_SUBSCRIPTION": "💎 Buy subscription", - "MENU_EXTEND_SUBSCRIPTION": "⏰ Extend subscription", - "MENU_PROMOCODE": "🎫 Promo code", - "MENU_REFERRALS": "🤝 Referral program", - "MENU_RULES": "📋 Service rules", - "MENU_SUPPORT": "🛠️ Support", - "OPERATION_CANCELLED": "❌ Operation cancelled", - "PERIOD_14_DAYS": "📅 14 days - {settings.format_price(settings.PRICE_14_DAYS)}", - "PERIOD_30_DAYS": "📅 30 days - {settings.format_price(settings.PRICE_30_DAYS)}", - "PERIOD_60_DAYS": "📅 60 days - {settings.format_price(settings.PRICE_60_DAYS)}", - "PERIOD_90_DAYS": "📅 90 days - {settings.format_price(settings.PRICE_90_DAYS)}", - "PERIOD_180_DAYS": "📅 180 days - {settings.format_price(settings.PRICE_180_DAYS)}", - "PERIOD_360_DAYS": "📅 360 days - {settings.format_price(settings.PRICE_360_DAYS)}", - "PROMOCODE_ENTER": "🎫 Enter promo code", - "PROMOCODE_EXPIRED": "❌ Promo code has expired", - "PROMOCODE_INVALID": "❌ Invalid promo code", - "PROMOCODE_SUCCESS": "🎉 Promo code applied!", - "PROMOCODE_USED": "ℹ️ Promo code has already been used", - "REFERRAL_CODE_APPLIED": "🎁 Referral code applied! You will receive a bonus after the first purchase.", - "REFERRAL_INFO": "\n🤝 Referral program\n\n👥 Invited: {referrals_count} friends\n💰 Earned: {earned_amount}\n\n🔗 Your referral link:\n{referral_link}\n\n🎫 Your promo code:\n{referral_code}\n\n💰 Terms:\n• Per friend: {registration_bonus}\n• Top-up commission: {commission_percent}%\n", - "REFERRAL_INVITE_MESSAGE": "\n🎯 Invitation to the VPN service\n\nHi! I invite you to an excellent VPN service!\n\n🎁 Use my link to get a bonus: {bonus}\n\n🔗 Join: {link}\n🎫 Or use promo code: {code}\n\n💪 Fast, reliable, affordable!\n", - "RULES_ACCEPT": "✅ I accept the rules", - "RULES_DECLINE": "❌ I do not accept", - "RULES_REQUIRED": "❗️ You must accept the rules to use the service!", - "SELECT_COUNTRIES": "Select countries:", - "SELECT_DEVICES": "Number of devices:", - "SELECT_PERIOD": "Choose period:", - "SELECT_TRAFFIC": "Choose traffic package:", - "SUBSCRIPTION_EXPIRED": "\n❌ Subscription expired\n\nYour subscription has ended. Renew it to restore access.\n", - "SUBSCRIPTION_EXPIRING": "\n⚠️ Subscription expiring!\n\nYour subscription expires in {days} days.\n\nRenew it now so you don't lose access.\n", - "SUBSCRIPTION_EXPIRING_PAID": "\n⚠️ Subscription expires in {days_text}!\n\nYour paid subscription ends on {end_date}.\n\n💳 Autopay: {autopay_status}\n\n{action_text}\n", - "SUBSCRIPTION_INFO": "\n📱 Subscription details\n\n📊 Status: {status}\n🎭 Type: {type}\n📅 Valid until: {end_date}\n⏰ Days left: {days_left}\n\n📈 Traffic: {traffic_used} / {traffic_limit}\n🌍 Servers: {countries_count} countries\n📱 Devices: {devices_used} / {devices_limit}\n\n💳 Autopay: {autopay_status}\n", - "SUBSCRIPTION_NONE": "❌ No active subscription", - "SUBSCRIPTION_NOT_FOUND": "❌ Subscription not found", - "SUBSCRIPTION_PURCHASED": "🎉 Subscription purchased successfully!", - "SUBSCRIPTION_SUMMARY": "\n📋 Final configuration\n\n📅 Period: {period} days\n📈 Traffic: {traffic}\n🌍 Countries: {countries}\n📱 Devices: {devices}\n\n💰 Total: {total_price}\n\nConfirm the purchase?\n", - "SUBSCRIPTION_TRIAL": "🧪 Trial subscription", - "SUPPORT_INFO": "\n🛠️ Technical support\n\nFor any questions contact our support:\n\n👤 {settings.SUPPORT_USERNAME}\n\nWe can help with:\n• Connection setup\n• Troubleshooting issues\n• Payment questions\n• Other requests\n\n⏰ Response time: usually within 1-2 hours\n", - "SWITCH_TRAFFIC_CONFIRM": "\n🔄 Confirm traffic change\n\nCurrent limit: {current_traffic}\nNew limit: {new_traffic}\n\nAction: {action}\n💰 {cost}\n\nApply this change?\n", - "SWITCH_TRAFFIC_INFO": "\n🔄 Switch traffic limit\n\nCurrent limit: {current_traffic}\nChoose the new traffic amount:\n\n💡 Important:\n• Increasing — you pay the difference proportionally to the remaining time\n• Decreasing — payments are not refunded\n• The used traffic counter is NOT reset\n", - "SWITCH_TRAFFIC_SUCCESS_DECREASE": "\n✅ Traffic limit decreased!\n\n📊 Was: {old_traffic} → Now: {new_traffic}\nℹ️ Payments are not refunded\n", - "SWITCH_TRAFFIC_SUCCESS_INCREASE": "\n✅ Traffic limit increased!\n\n📊 Was: {old_traffic} → Now: {new_traffic}\n💰 Charged: {amount}\n", - "SWITCH_TRAFFIC_TITLE": "🔄 Switch traffic limit", - "TOP_UP_AMOUNT": "💳 Enter top-up amount (in rubles):", - "TOP_UP_METHODS": "\n💳 Select a payment method\n\nAmount: {amount}\n", - "TOP_UP_STARS": "⭐ Telegram Stars", - "TOP_UP_TRIBUTE": "💎 Bank card", - "TRAFFIC_5GB": "📊 5 GB - {settings.format_price(settings.PRICE_TRAFFIC_5GB)}", - "TRAFFIC_10GB": "📊 10 GB - {settings.format_price(settings.PRICE_TRAFFIC_10GB)}", - "TRAFFIC_25GB": "📊 25 GB - {settings.format_price(settings.PRICE_TRAFFIC_25GB)}", - "TRAFFIC_50GB": "📊 50 GB - {settings.format_price(settings.PRICE_TRAFFIC_50GB)}", - "TRAFFIC_100GB": "📊 100 GB - {settings.format_price(settings.PRICE_TRAFFIC_100GB)}", - "TRAFFIC_250GB": "📊 250 GB - {settings.format_price(settings.PRICE_TRAFFIC_250GB)}", - "TRAFFIC_UNLIMITED": "📊 Unlimited - {settings.format_price(settings.PRICE_TRAFFIC_UNLIMITED)}", - "TRAFFIC_INSUFFICIENT_BALANCE": "⚠️ Insufficient balance!\nRequired: {required} (for {months} mo)\nYou have: {balance}", - "TRAFFIC_NO_CHANGE": "ℹ️ Traffic limit was not changed", - "TRIAL_ACTIVATED": "🎉 Trial subscription activated!", - "TRIAL_ALREADY_USED": "❌ The trial subscription has already been used", - "TRIAL_AVAILABLE": "\n🎁 Trial subscription\n\nYou can get a free trial plan:\n\n⏰ Duration: {days} days\n📈 Traffic: {traffic} GB\n📱 Devices: {devices} pcs\n🌍 Server: {server_name}\n\nActivate the trial subscription?\n", - "TRIAL_ENDING_SOON": "\n🎁 The trial subscription is ending soon!\n\nYour trial expires in a few hours.\n\n💎 Don't want to lose VPN access?\nSwitch to the full subscription!\n\n🔥 Special offer:\n• 30 days for {price}\n• Unlimited traffic\n• All servers available\n• Speeds up to 1 Gbit/s\n\n⚡️ Activate before the trial ends!\n", - "USER_NOT_FOUND": "❌ User not found", - "MENU_LANGUAGE": "🌐 Language", - "SUBSCRIPTION_STATUS_EXPIRED": "Expired", - "SUBSCRIPTION_STATUS_TRIAL": "Trial", - "SUBSCRIPTION_STATUS_ACTIVE": "Active", - "SUBSCRIPTION_STATUS_UNKNOWN": "Unknown", - "SUBSCRIPTION_TIME_LEFT_EXPIRED": "expired", - "SUBSCRIPTION_TIME_LEFT_DAYS": "{days} days", - "SUBSCRIPTION_TIME_LEFT_HOURS": "{hours} hr", - "SUBSCRIPTION_TIME_LEFT_MINUTES": "{minutes} min", - "SUBSCRIPTION_WARNING_TOMORROW": "\n⚠️ expires tomorrow!", - "SUBSCRIPTION_WARNING_TODAY": "\n⚠️ expires today!", - "SUBSCRIPTION_WARNING_MINUTES": "\n🔴 expires in a few minutes!", - "SUBSCRIPTION_TYPE_TRIAL": "Trial", - "SUBSCRIPTION_TYPE_PAID": "Paid", - "SUBSCRIPTION_TRAFFIC_UNLIMITED": "∞ (unlimited) | Used: {used} GB", - "SUBSCRIPTION_TRAFFIC_LIMITED": "{used} / {limit} GB", - "SUBSCRIPTION_NO_SERVERS": "No servers", - "SUBSCRIPTION_OVERVIEW_TEMPLATE": "👤 {full_name}\n💰 Balance: {balance}\n📱 Subscription: {status_emoji} {status_display}{warning}\n\n📱 Subscription details\n🎭 Type: {subscription_type}\n📅 Valid until: {end_date}\n⏰ Time left: {time_left}\n📈 Traffic: {traffic}\n🌍 Servers: {servers}\n📱 Devices: {devices_used} / {device_limit}", - "SUBSCRIPTION_CONNECTED_DEVICES_TITLE": "
📱 Connected devices:\n", - "SUBSCRIPTION_CONNECTED_DEVICES_FOOTER": "
", - "SUBSCRIPTION_CONNECT_LINK_SECTION": "🔗 Connection link:\n{subscription_url}", - "SUBSCRIPTION_CONNECT_LINK_PROMPT": "📱 Copy the link and add it to your VPN app", - "SUBSCRIPTION_IMPORT_LINK_SECTION": "🔗 Your import link for the VPN app:\n{subscription_url}", - "SUBSCRIPTION_IMPORT_INSTRUCTION_PROMPT": "📱 Tap the button below to get setup instructions for your device", - "SUBSCRIPTION_HAPP_LINK_PROMPT": "🔒 Subscription link is ready. Tap the \"Connect\" button below to open it in Happ.", - "BACK_TO_MAIN_MENU_BUTTON": "⬅️ Back to main menu", - "CUSTOM_MINIAPP_URL_NOT_SET": "⚠ Custom mini-app link is not configured", - "SUBSCRIPTION_LINK_GENERATING_NOTICE": "{purchase_text}\n\nThe link is being generated, open the 'My subscription' section in a few seconds.", - "SUBSCRIPTION_NO_ACTIVE_LINK": "⚠ You don't have an active subscription or the link is still being generated", - "SUBSCRIPTION_CONNECT_MINIAPP_MESSAGE": "📱 Connect subscription\n\n🚀 Tap the button below to open the subscription in the Telegram mini app:", - "SUBSCRIPTION_CONNECT_CUSTOM_MESSAGE": "🚀 Connect subscription\n\n📱 Tap the button below to open the app:", - "SUBSCRIPTION_CONNECT_LINK_MESSAGE": "🚀 Connect subscription\n\n🔗 Tap the button below to open the subscription link:", - "SUBSCRIPTION_CONNECT_DEVICE_MESSAGE": "📱 Connect subscription\n\n🔗 Subscription link:\n{subscription_url}\n\n💡 Choose your device to get detailed setup instructions:", - "SUBSCRIPTION_LINK_UNAVAILABLE": "❌ Subscription link is unavailable", - "SUBSCRIPTION_DEVICE_APPS_NOT_FOUND": "❌ No apps found for this device", - "SUBSCRIPTION_DEVICE_GUIDE_TITLE": "📱 Setup for {device_name}", - "SUBSCRIPTION_HAPP_OPEN_TITLE": "🔗 Connect via Happ", - "SUBSCRIPTION_HAPP_OPEN_LINK": "🔓 Open link in Happ", - "SUBSCRIPTION_HAPP_OPEN_HINT": "💡 If the link doesn't open automatically, copy it manually: {subscription_link}", - "SUBSCRIPTION_HAPP_OPEN_BUTTON_HINT": "▶️ Tap the \"Connect\" button below to open Happ and add the subscription automatically.", - "SUBSCRIPTION_DEVICE_LINK_TITLE": "🔗 Subscription link:", - "SUBSCRIPTION_DEVICE_FEATURED_APP": "📋 Recommended app: {app_name}", - "SUBSCRIPTION_DEVICE_STEP_INSTALL_TITLE": "Step 1 - Install:", - "SUBSCRIPTION_DEVICE_STEP_ADD_TITLE": "Step 2 - Add subscription:", - "SUBSCRIPTION_DEVICE_STEP_CONNECT_TITLE": "Step 3 - Connect:", - "SUBSCRIPTION_DEVICE_HOW_TO_TITLE": "💡 How to connect:", - "SUBSCRIPTION_DEVICE_HOW_TO_STEP1": "1. Install the app from the link above", - "SUBSCRIPTION_DEVICE_HOW_TO_STEP2": "2. Copy the subscription link (tap on it)", - "SUBSCRIPTION_DEVICE_HOW_TO_STEP3": "3. Open the app and paste the link", - "SUBSCRIPTION_DEVICE_HOW_TO_STEP4": "4. Connect to a server", - "SUBSCRIPTION_APPS_TITLE": "📱 Apps for {device_name}", - "SUBSCRIPTION_APPS_PROMPT": "Choose an app to connect:", - "SUBSCRIPTION_APP_NOT_FOUND": "❌ App not found", - "SUBSCRIPTION_SPECIFIC_APP_TITLE": "📱 {app_name} - {device_name}", - "SUBSCRIPTION_ADDITIONAL_STEP_TITLE": "{title}:", - "SUBSCRIPTION_LINK_USAGE_TITLE": "📱 How to use:", - "SUBSCRIPTION_LINK_STEP1": "1. Tap the link above to copy it", - "SUBSCRIPTION_LINK_STEP2": "2. Open your VPN app", - "SUBSCRIPTION_LINK_STEP3": "3. Find the 'Add subscription' or 'Import' option", - "SUBSCRIPTION_LINK_STEP4": "4. Paste the copied link", - "SUBSCRIPTION_LINK_HINT": "💡 If the link didn't copy, select it manually and copy.", - "REFERRAL_PROGRAM_TITLE": "👥 Referral program", - "REFERRAL_STATS_HEADER": "📊 Your statistics:", - "REFERRAL_STATS_INVITED": "• Invited users: {count}", - "REFERRAL_STATS_FIRST_TOPUPS": "• Made first top-up: {count}", - "REFERRAL_STATS_ACTIVE": "• Active referrals: {count}", - "REFERRAL_STATS_CONVERSION": "• Conversion: {rate}%", - "REFERRAL_STATS_TOTAL_EARNED": "• Earned in total: {amount}", - "REFERRAL_STATS_MONTH_EARNED": "• Earned last month: {amount}", - "REFERRAL_REWARDS_HEADER": "🎁 How rewards work:", - "REFERRAL_REWARD_NEW_USER": "• New user receives: {bonus} on the first top-up from {minimum}", - "REFERRAL_REWARD_INVITER": "• You receive on the referral's first top-up: {bonus}", - "REFERRAL_REWARD_COMMISSION": "• Commission from each referral top-up: {percent}%", - "REFERRAL_LINK_TITLE": "🔗 Your referral link:", - "REFERRAL_CODE_TITLE": "🆔 Your code: {code}", - "REFERRAL_RECENT_EARNINGS_HEADER": "💰 Latest rewards:", - "REFERRAL_EARNING_REASON_FIRST_TOPUP": "🎉 First top-up", - "REFERRAL_EARNING_REASON_COMMISSION_TOPUP": "💰 Top-up commission", - "REFERRAL_EARNING_REASON_COMMISSION_PURCHASE": "💰 Purchase commission", - "REFERRAL_RECENT_EARNINGS_ITEM": "• {reason}: {amount} from {referral_name}", - "REFERRAL_EARNINGS_BY_TYPE_HEADER": "📈 Earnings by type:", - "REFERRAL_EARNINGS_FIRST_TOPUPS": "• Bonuses for first top-ups: {count} ({amount})", - "REFERRAL_EARNINGS_TOPUPS": "• Top-up commissions: {count} ({amount})", - "REFERRAL_EARNINGS_PURCHASES": "• Purchase commissions: {count} ({amount})", - "REFERRAL_INVITE_FOOTER": "📢 Invite friends and earn!", - "REFERRAL_LINK_CAPTION": "🔗 Your referral link:\n{link}", - "REFERRAL_LIST_EMPTY": "📋 You have no referrals yet.\n\nShare your referral link to start earning!", - "REFERRAL_LIST_HEADER": "👥 Your referrals (page {current}/{total})", - "REFERRAL_LIST_ITEM_HEADER": "{index}. {status} {name}", - "REFERRAL_LIST_ITEM_TOPUPS": " {emoji} Top-ups: {count}", - "REFERRAL_LIST_ITEM_EARNED": " 💎 Earned from them: {amount}", - "REFERRAL_LIST_ITEM_REGISTERED": " 📅 Registered: {days} days ago", - "REFERRAL_LIST_ITEM_ACTIVITY": " 🕐 Activity: {days} days ago", - "REFERRAL_LIST_ITEM_ACTIVITY_LONG_AGO": " 🕐 Activity: long ago", - "REFERRAL_LIST_PREV_PAGE": "⬅️ Back", - "REFERRAL_LIST_NEXT_PAGE": "Next ➡️", - "REFERRAL_ANALYTICS_TITLE": "📊 Referral analytics", - "REFERRAL_ANALYTICS_EARNINGS_HEADER": "💰 Earnings by period:", - "REFERRAL_ANALYTICS_EARNINGS_TODAY": "• Today: {amount}", - "REFERRAL_ANALYTICS_EARNINGS_WEEK": "• Week: {amount}", - "REFERRAL_ANALYTICS_EARNINGS_MONTH": "• Month: {amount}", - "REFERRAL_ANALYTICS_EARNINGS_QUARTER": "• Quarter: {amount}", - "REFERRAL_ANALYTICS_TOP_TITLE": "🏆 Top {count} referrals:", - "REFERRAL_ANALYTICS_TOP_ITEM": "{index}. {name}: {amount} ({count} rewards)", - "REFERRAL_ANALYTICS_FOOTER": "📈 Keep growing your referral network!", - "REFERRAL_INVITE_TITLE": "🎉 Join the VPN service!", - "REFERRAL_INVITE_BONUS": "💎 On your first top-up from {minimum} you get {bonus} as a bonus!", - "REFERRAL_INVITE_FEATURE_FAST": "🚀 Fast connection", - "REFERRAL_INVITE_FEATURE_SERVERS": "🌍 Servers worldwide", - "REFERRAL_INVITE_FEATURE_SECURE": "🔒 Reliable protection", - "REFERRAL_INVITE_LINK_PROMPT": "👇 Follow the link:", - "REFERRAL_SHARE_BUTTON": "📤 Share", - "REFERRAL_INVITE_CREATED_TITLE": "📝 Invitation created!", - "REFERRAL_INVITE_CREATED_INSTRUCTION": "Tap the “📤 Share” button to send the invite to any chat or copy the text below:", - "PAYMENT_METHODS_ONLY_SUPPORT": "💳 Balance top-up methods\n\n⚠️ Automated payment methods are temporarily unavailable.\nContact support to top up your balance.\n\nChoose a top-up method:", - "PAYMENT_METHODS_TITLE": "💳 Balance top-up methods", - "PAYMENT_METHODS_PROMPT": "Choose the payment method that suits you:", - "PAYMENT_METHODS_FOOTER": "Choose a top-up method:", - "PAYMENT_METHOD_STARS_NAME": "⭐ Telegram Stars", - "PAYMENT_METHOD_STARS_DESCRIPTION": "fast and convenient", - "PAYMENT_METHOD_YOOKASSA_NAME": "💳 Bank card", - "PAYMENT_METHOD_YOOKASSA_DESCRIPTION": "via YooKassa", - "PAYMENT_METHOD_TRIBUTE_NAME": "💳 Bank card", - "PAYMENT_METHOD_TRIBUTE_DESCRIPTION": "via Tribute", - "PAYMENT_METHOD_MULENPAY_NAME": "💳 Bank card (Mulen Pay)", - "PAYMENT_METHOD_MULENPAY_DESCRIPTION": "via Mulen Pay", - "PAYMENT_METHOD_PAL24_NAME": "💳 Bank card (PayPalych)", - "PAYMENT_METHOD_PAL24_DESCRIPTION": "via PayPalych", - "PAYMENT_METHOD_CRYPTOBOT_NAME": "🪙 Cryptocurrency", - "PAYMENT_METHOD_CRYPTOBOT_DESCRIPTION": "via CryptoBot", - "PAYMENT_METHOD_SUPPORT_NAME": "🛠️ Support team", - "PAYMENT_METHOD_SUPPORT_DESCRIPTION": "other options", - "PAYMENT_METHODS_UNAVAILABLE_ALERT": "⚠️ Automated payment methods are temporarily unavailable. Contact support to top up your balance.", - "TRIAL_INACTIVE_1H": "⏳ An hour has passed and we haven't seen any traffic yet\n\nOpen the connection guide and follow the steps. We're always ready to help!", - "TRIAL_INACTIVE_24H": "⏳ A full day passed without activity\n\nWe still don't see traffic from your test subscription. Use the guide or message support and we'll help you connect!", - "SUBSCRIPTION_EXPIRED_1D": "⛔ Your subscription expired\n\nAccess was disabled on {end_date}. Renew to return to the service.\n\n💎 Renewal price: {price}", - "SUBSCRIPTION_EXPIRED_SECOND_WAVE": "🔥 {percent}% discount on renewal\n\nTap “Get discount” and we'll add {bonus} to your balance. The offer is valid until {expires_at}.", - "SUBSCRIPTION_EXPIRED_THIRD_WAVE": "🎁 Personal {percent}% discount\n\nIt's been {trigger_days} days without a subscription. Come back — tap “Get discount” and {bonus} will be credited. Offer valid until {expires_at}.", - "DISCOUNT_CLAIM_SUCCESS": "🎉 Discount of {percent}% activated! {amount} credited to your balance.", - "DISCOUNT_CLAIM_ALREADY": "ℹ️ This discount has already been activated.", - "DISCOUNT_CLAIM_EXPIRED": "⚠️ The offer has expired.", - "DISCOUNT_CLAIM_NOT_FOUND": "❌ Offer not found.", - "DISCOUNT_CLAIM_ERROR": "❌ Failed to credit the discount. Please try again later.", - "DISCOUNT_BONUS_DESCRIPTION": "Renewal discount bonus", - "NOTIFICATION_VALUE_INVALID": "❌ Invalid value, please enter a number.", - "NOTIFICATION_VALUE_UPDATED": "✅ Settings updated.", - "NOTIFY_PROMPT_SECOND_PERCENT": "Enter a new discount percentage for the 2-3 day reminder (0-100):", - "NOTIFY_PROMPT_SECOND_HOURS": "Enter the number of hours the discount is active (1-168):", - "NOTIFY_PROMPT_THIRD_PERCENT": "Enter a new discount percentage for the late offer (0-100):", - "NOTIFY_PROMPT_THIRD_HOURS": "Enter the number of hours the late discount is active (1-168):", - "NOTIFY_PROMPT_THIRD_DAYS": "After how many days without a subscription should we send the offer? (minimum 2):" + "ACCESS_DENIED": "❌ Access denied", + "ADDON_INSUFFICIENT_FUNDS_MESSAGE": "⚠️ Insufficient funds\n\nService price: {required}\nBalance: {balance}\nMissing: {missing}\n\nChoose a top-up method. The amount will be filled in automatically.", + "ADD_COUNTRIES_BUTTON": "🌐 Add countries", + "ADMIN_CAMPAIGNS": "📣 Promotional campaigns", + "ADMIN_MAIN_MENU": "🏠 Main menu", + "ADMIN_MESSAGES": "📨 Broadcasts", + "ADMIN_MONITORING": "🔍 Monitoring", + "ADMIN_MONITORING_SETTINGS": "⚙️ Monitoring settings", + "ADMIN_PANEL": "\n⚙️ Administration panel\n\nSelect a section to manage:\n", + "ADMIN_PROMOCODES": "🎫 Promo codes", + "ADMIN_PROMO_GROUPS": "💳 Promo groups", + "ADMIN_PROMO_GROUPS_DEFAULT_LABEL": " (default)", + "ADMIN_PROMO_GROUPS_DISCOUNTS": "Discounts — servers: {servers}%, traffic: {traffic}%, devices: {devices}%", + "ADMIN_PROMO_GROUPS_EMPTY": "No promo groups found.", + "ADMIN_PROMO_GROUPS_MEMBERS_COUNT": "Members: {count}", + "ADMIN_PROMO_GROUPS_SUMMARY": "Groups total: {count}\nMembers total: {members}", + "ADMIN_PROMO_GROUPS_TITLE": "💳 Promo groups", + "ADMIN_PROMO_GROUP_ADDON_DISCOUNTS_DISABLED": "Add-on purchase discounts: disabled", + "ADMIN_PROMO_GROUP_ADDON_DISCOUNTS_ENABLED": "Add-on purchase discounts: enabled", + "ADMIN_PROMO_GROUP_ADDON_DISCOUNT_DISABLED_VALUE": "disabled", + "ADMIN_PROMO_GROUP_ADDON_DISCOUNT_ENABLED_VALUE": "enabled", + "ADMIN_PROMO_GROUP_AUTO_ASSIGN_DISABLED": "Auto assignment by total spending: disabled", + "ADMIN_PROMO_GROUP_AUTO_ASSIGN_LINE": "Auto assignment by total spending from {amount} ₽", + "ADMIN_PROMO_GROUP_CREATED": "Promo group “{name}” created.", + "ADMIN_PROMO_GROUP_CREATED_BACK_BUTTON": "↩️ Back to promo groups", + "ADMIN_PROMO_GROUP_CREATE_ADDON_DISCOUNT_PROMPT": "Enable discounts for add-on purchases when base discounts are set? (yes/no)", + "ADMIN_PROMO_GROUP_CREATE_AUTO_ASSIGN_PROMPT": "Enter total spending (in ₽) required for automatic assignment. Send 0 to disable.", + "ADMIN_PROMO_GROUP_CREATE_DEVICES_PROMPT": "Enter device discount (0-100):", + "ADMIN_PROMO_GROUP_CREATE_NAME_PROMPT": "Enter a name for the new promo group:", + "ADMIN_PROMO_GROUP_CREATE_PERIOD_PROMPT": "Enter subscription period discounts (e.g. 30:10, 90:15). Send 0 if none.", + "ADMIN_PROMO_GROUP_CREATE_SERVERS_PROMPT": "Enter server discount (0-100):", + "ADMIN_PROMO_GROUP_CREATE_TRAFFIC_PROMPT": "Enter traffic discount (0-100):", + "ADMIN_PROMO_GROUP_DELETED": "Promo group “{name}” deleted.", + "ADMIN_PROMO_GROUP_DELETE_BUTTON": "🗑️ Delete", + "ADMIN_PROMO_GROUP_DELETE_CONFIRM": "Delete promo group “{name}”? All users will be moved to the default group.", + "ADMIN_PROMO_GROUP_DELETE_FORBIDDEN": "The default promo group cannot be deleted.", + "ADMIN_PROMO_GROUP_DETAILS_DEFAULT": "This is the default group.", + "ADMIN_PROMO_GROUP_DETAILS_MEMBERS": "Members: {count}", + "ADMIN_PROMO_GROUP_DETAILS_TITLE": "💳 Promo group: {name}", + "ADMIN_PROMO_GROUP_EDIT_ADDON_DISCOUNT_PROMPT": "Enable discounts for add-on purchases? Current value: {current}.", + "ADMIN_PROMO_GROUP_EDIT_AUTO_ASSIGN_PROMPT": "Enter total spending (in ₽) for auto assignment. Current value: {current}.", + "ADMIN_PROMO_GROUP_EDIT_BUTTON": "✏️ Edit", + "ADMIN_PROMO_GROUP_EDIT_DEVICES_PROMPT": "Enter new device discount (0-100). Current value: {current}.", + "ADMIN_PROMO_GROUP_EDIT_FIELD_ADDON_DISCOUNTS": "🛒 Add-on purchase discounts", + "ADMIN_PROMO_GROUP_EDIT_FIELD_AUTO_ASSIGN": "🤖 Auto assignment by spending", + "ADMIN_PROMO_GROUP_EDIT_FIELD_DEVICES": "📱 Device discount", + "ADMIN_PROMO_GROUP_EDIT_FIELD_NAME": "✏️ Rename", + "ADMIN_PROMO_GROUP_EDIT_FIELD_PERIODS": "⏳ Period discounts", + "ADMIN_PROMO_GROUP_EDIT_FIELD_SERVERS": "🖥 Server discount", + "ADMIN_PROMO_GROUP_EDIT_FIELD_TRAFFIC": "🌐 Traffic discount", + "ADMIN_PROMO_GROUP_EDIT_MENU_HINT": "Select a parameter to change:", + "ADMIN_PROMO_GROUP_EDIT_MENU_TITLE": "✏️ Promo group settings “{name}”", + "ADMIN_PROMO_GROUP_EDIT_NAME_PROMPT": "Enter a new name (current: {name}):", + "ADMIN_PROMO_GROUP_EDIT_PERIOD_PROMPT": "Enter new period discounts (current: {current}). Send 0 if none.", + "ADMIN_PROMO_GROUP_EDIT_SERVERS_PROMPT": "Enter new server discount (0-100). Current value: {current}.", + "ADMIN_PROMO_GROUP_EDIT_TRAFFIC_PROMPT": "Enter new traffic discount (0-100). Current value: {current}.", + "ADMIN_PROMO_GROUP_INVALID_ADDON_DISCOUNT": "Please enter 'yes' or 'no'.", + "ADMIN_PROMO_GROUP_INVALID_AUTO_ASSIGN": "Enter a non-negative amount in rubles or 0 to disable.", + "ADMIN_PROMO_GROUP_INVALID_NAME": "Name cannot be empty.", + "ADMIN_PROMO_GROUP_INVALID_PERCENT": "Enter a number from 0 to 100.", + "ADMIN_PROMO_GROUP_INVALID_PERIOD_DISCOUNTS": "Enter period:discount pairs separated by commas, e.g. 30:10, 90:15, or 0.", + "ADMIN_PROMO_GROUP_MEMBERS_BUTTON": "👥 Members", + "ADMIN_PROMO_GROUP_MEMBERS_EMPTY": "This group has no members yet.", + "ADMIN_PROMO_GROUP_MEMBERS_TITLE": "👥 Members of {name}", + "ADMIN_PROMO_GROUP_PERIOD_DISCOUNTS_HEADER": "⏳ Period discounts:", + "ADMIN_PROMO_GROUP_UPDATED": "Promo group “{name}” updated.", + "ADMIN_REFERRALS": "🤝 Referral program", + "ADMIN_REMNAWAVE": "🖥️ Remnawave", + "ADMIN_REPORTS": "📊 Reports", + "ADMIN_RULES": "📋 Rules", + "ADMIN_STATISTICS": "📊 Statistics", + "ADMIN_SUBSCRIPTIONS": "📱 Subscriptions", + "ADMIN_TICKETS_TITLE": "🎫 All support tickets:", + "ADMIN_TICKET_REPLY_INPUT": "Enter support reply:", + "ADMIN_TICKET_REPLY_SENT": "✅ Reply sent!", + "ADMIN_USERS": "👥 Users", + "ADMIN_USER_PROMO_GROUP_ADDON_DISCOUNT_LINE": "Add-on purchase discounts: {status}", + "ADMIN_USER_PROMO_GROUP_ADDON_DISCOUNT_NONE": "Add-on purchase discounts: —", + "ADMIN_USER_PROMO_GROUP_ALREADY": "ℹ️ The user is already in this promo group.", + "ADMIN_USER_PROMO_GROUP_BACK": "⬅️ Back to user", + "ADMIN_USER_PROMO_GROUP_BUTTON": "👥 Promo group", + "ADMIN_USER_PROMO_GROUP_CURRENT": "Current group: {name}", + "ADMIN_USER_PROMO_GROUP_CURRENT_NONE": "Current group: not assigned", + "ADMIN_USER_PROMO_GROUP_DISCOUNTS": "Discounts — servers: {servers}%, traffic: {traffic}%, devices: {devices}%, add-ons: {addons}", + "ADMIN_USER_PROMO_GROUP_DISCOUNTS_NONE": "No discounts configured.", + "ADMIN_USER_PROMO_GROUP_ERROR": "❌ Failed to update the user's promo group.", + "ADMIN_USER_PROMO_GROUP_SELECT": "Select a promo group to assign:", + "ADMIN_USER_PROMO_GROUP_TITLE": "👥 User promo group", + "ADMIN_USER_PROMO_GROUP_UPDATED": "✅ User promo group updated: “{name}”", + "ALREADY_REGISTERED_REFERRAL": "ℹ️ You are already registered. A referral link cannot be applied.", + "ATTACHMENTS_SENT": "✅ Attachments sent.", + "AUTOPAY_BUTTON": "💳 Auto payment", + "AUTOPAY_DISABLED_TEXT": "Disabled — don't forget to renew manually!", + "AUTOPAY_ENABLED_TEXT": "Enabled — the subscription will renew automatically", + "AUTOPAY_FAILED": "\n❌ Autopay failed\n\nWe couldn't charge the renewal payment.\nBalance available: {balance}\nRequired: {required}\n\nPlease top up your balance and renew manually.\n", + "AUTOPAY_SET_DAYS_BUTTON": "⚙️ Configure days", + "AUTOPAY_SUCCESS": "\n✅ Autopay completed\n\nYour subscription was automatically renewed for {days} days.\nCharged from balance: {amount}\n", + "BACK": "⬅️ Back", + "BACK_TO_MAIN_MENU_BUTTON": "⬅️ Back to main menu", + "BACK_TO_MENU": "🏠 Back to menu", + "BACK_TO_SUBSCRIPTION": "⬅️ Back to subscription", + "BACK_TO_SUPPORT": "⬅️ Back to support", + "BACK_TO_TICKETS": "⬅️ Back to tickets", + "BALANCE_BUTTON": "💰 Balance: {balance}", + "BALANCE_BUTTON_DEFAULT": "💰 Balance: {balance}", + "BALANCE_BUTTON_ZERO": "💰 Balance: 0 ₽", + "BALANCE_HISTORY": "📊 Transaction history", + "BALANCE_INFO": "\n💰 Balance: {balance}\n\nChoose an action:\n", + "BALANCE_SUPPORT_REQUEST": "🛠️ Request via support", + "BALANCE_TOPUP": "💳 Top up balance", + "BALANCE_TOP_UP": "💳 Top up", + "BLOCK_BY_TIME": "⏳ Temporary block", + "BLOCK_FOREVER": "🚫 Block permanently", + "BUY_SUBSCRIPTION_START": "\n💎 Subscription setup\n\nLet's configure a plan that fits you.\n\nFirst, choose the subscription period:\n", + "CAMPAIGN_BONUS_BALANCE": "🎉 You received {amount} for registering via the \"{name}\" campaign!", + "CAMPAIGN_BONUS_SUBSCRIPTION": "🎉 You’ve been granted a {days}-day subscription (traffic: {traffic}, devices: {devices}) from the \"{name}\" campaign!", + "CAMPAIGN_EXISTING_USER": "ℹ️ This promo link is available only to new users.", + "CANCEL": "❌ Cancel", + "CANCEL_REPLY": "❌ Cancel reply", + "CANCEL_TICKET_CREATION": "❌ Cancel ticket creation", + "CHANGE_DEVICES_BUTTON": "📱 Change devices", + "CHANGE_DEVICES_CONFIRM": "\n📱 Confirm change\n\nCurrent amount: {current_devices} devices\nNew amount: {new_devices} devices\n\nAction: {action}\n💰 {cost}\n\nApply this change?\n", + "CHANGE_DEVICES_INFO": "\n📱 Adjust device limit\n\nCurrent limit: {current_devices} devices\n\nChoose the new number of devices:\n\n💡 Important:\n• Increasing — extra charge proportional to the remaining time\n• Decreasing — funds are not refunded\n", + "CHANGE_DEVICES_SUCCESS_DECREASE": "\n✅ Device limit decreased!\n\n📱 Was: {old_count} → Now: {new_count}\nℹ️ Payments are not refunded\n", + "CHANGE_DEVICES_SUCCESS_INCREASE": "\n✅ Device limit increased!\n\n📱 Was: {old_count} → Now: {new_count}\n💰 Charged: {amount}\n", + "CHANGE_DEVICES_TITLE": "📱 Change device limit", + "CHANNEL_CHECK_BUTTON": "✅ I have joined", + "CHANNEL_REQUIRED_TEXT": "🔒 Please join the announcement channel to access the bot, then press the button below.", + "CHANNEL_SUBSCRIBE_BUTTON": "🔗 Subscribe", + "CHANNEL_SUBSCRIBE_REQUIRED_ALERT": "❌ You haven't joined the channel!", + "CHANNEL_SUBSCRIBE_THANKS": "✅ Thanks for subscribing", + "CHECK_STATUS_BUTTON": "📊 Check status", + "CHOOSE_ANOTHER_DEVICE": "📱 Choose another device", + "CLOSED_TICKETS": "🟢 Closed", + "CLOSED_TICKETS_HEADER": "🟢 Closed tickets", + "CLOSE_NOTIFICATION": "❌ Close notification", + "CLOSE_TICKET": "🔒 Close ticket", + "CONFIRM": "✅ Confirm", + "CONFIRM_CHANGE_BUTTON": "✅ Confirm change", + "CONNECT_BUTTON": "🔗 Connect", + "CONTACT_SUPPORT": "💬 Contact support", + "CONTACT_SUPPORT_BUTTON": "💬 Contact support", + "CONTINUE": "➡️ Continue", + "CONTINUE_BUTTON": "➡️ Continue", + "COPY_SUBSCRIPTION_LINK": "📋 Copy subscription link", + "CREATE_INVITE": "📝 Create invite", + "CREATE_INVITE_BUTTON": "📝 Create invite", + "CREATE_TICKET_BUTTON": "🎫 Create ticket", + "CUSTOM_MINIAPP_URL_NOT_SET": "⚠ Custom mini-app link is not configured", + "DELETE_MESSAGE": "🗑 Delete", + "DEVICES_INSUFFICIENT_BALANCE": "⚠️ Insufficient balance!\nRequired: {required} (for {months} mo)\nYou have: {balance}", + "DEVICES_LIMIT_EXCEEDED": "⚠️ Maximum device limit exceeded ({limit})", + "DEVICES_MINIMUM_LIMIT": "⚠️ Minimum number of devices: {limit}", + "DEVICES_NO_CHANGE": "ℹ️ Device limit was not changed", + "DEVICE_CONNECTION_HELP": "❓ How to reconnect a device?", + "DEVICE_GUIDE_ANDROID": "🤖 Android", + "DEVICE_GUIDE_ANDROID_TV": "📺 Android TV", + "DEVICE_GUIDE_IOS": "📱 iOS (iPhone/iPad)", + "DEVICE_GUIDE_MAC": "🎯 macOS", + "DEVICE_GUIDE_WINDOWS": "💻 Windows", + "DISABLE_BUTTON": "❌ Disable", + "DISCOUNT_BONUS_DESCRIPTION": "Renewal discount bonus", + "DISCOUNT_CLAIM_ALREADY": "ℹ️ This discount has already been activated.", + "DISCOUNT_CLAIM_ERROR": "❌ Failed to credit the discount. Please try again later.", + "DISCOUNT_CLAIM_EXPIRED": "⚠️ The offer has expired.", + "DISCOUNT_CLAIM_NOT_FOUND": "❌ Offer not found.", + "DISCOUNT_CLAIM_SUCCESS": "🎉 Discount of {percent}% activated! {amount} credited to your balance.", + "ENABLE_BUTTON": "✅ Enable", + "ENTER_BLOCK_MINUTES": "Enter the number of minutes to block the user (e.g., 15):", + "ERROR": "❌ An error occurred", + "ERROR_RULES_RETRY": "An error occurred. Please try accepting the rules again:", + "ERROR_TRY_AGAIN": "❌ An error occurred. Please try again.", + "GO_TO_BALANCE_TOP_UP": "💳 Go to balance top up", + "HAPP_DOWNLOAD_BUTTON": "⬇️ Download Happ", + "HAPP_DOWNLOAD_LINK_MESSAGE": "⬇️ Download Happ for {platform}:", + "HAPP_DOWNLOAD_LINK_NOT_SET": "❌ Download link for this device is not configured", + "HAPP_DOWNLOAD_OPEN_LINK": "🔗 Open link", + "HAPP_DOWNLOAD_PROMPT": "📥 Download Happ\nChoose your device:", + "HAPP_PLATFORM_ANDROID": "🤖 Android", + "HAPP_PLATFORM_IOS": "🍎 iOS", + "HAPP_PLATFORM_MACOS": "🖥️ Mac OS", + "HAPP_PLATFORM_PC": "💻 PC", + "HAPP_PLATFORM_WINDOWS": "💻 Windows", + "INSUFFICIENT_BALANCE": "❌ Insufficient balance.\n\nTop up {amount} and try again.", + "INVALID_AMOUNT": "❌ Invalid amount", + "LANGUAGE_SELECTED": "🌐 Interface language set: English", + "LOADING": "⏳ Loading...", + "MAINTENANCE_MODE_ACTIVE": "\n🔧 Maintenance in progress!\n\nThe service is temporarily unavailable while we improve performance.\n\n⏰ Estimated completion time: unknown\n🔄 Please try again later\n\nWe apologize for the inconvenience.\n", + "MAINTENANCE_MODE_API_ERROR": "\n🔧 Maintenance in progress!\n\nThe service is temporarily unavailable due to connection issues with the servers.\n\n⏰ We're working on it. Please try again in a few minutes.\n\n🔄 Last check: {last_check}\n", + "MAIN_MENU": "👤 {user_name}\n\n📱 Subscription: {subscription_status}\n\nChoose an option:\n", + "MAIN_MENU_ACTION_PROMPT": "Choose an option:", + "MAIN_MENU_BUTTON": "🏠 Main menu", + "MANAGE_DEVICES_BUTTON": "🔧 Manage devices", + "MARK_AS_ANSWERED": "✅ Mark as answered", + "MENU_ADMIN": "⚙️ Admin panel", + "MENU_BALANCE": "💰 Balance", + "MENU_BUY_SUBSCRIPTION": "💎 Buy subscription", + "MENU_EXTEND_SUBSCRIPTION": "⏰ Extend subscription", + "MENU_LANGUAGE": "🌐 Language", + "MENU_PROMOCODE": "🎫 Promo code", + "MENU_REFERRALS": "🤝 Referral program", + "MENU_RULES": "📋 Service rules", + "MENU_SUBSCRIPTION": "📱 Subscription", + "MENU_SUPPORT": "🛠️ Support", + "MENU_TRIAL": "🎁 Trial subscription", + "MULENPAY_PAYMENT_ERROR": "❌ Failed to create Mulen Pay payment. Please try again later or contact support.", + "MULENPAY_PAYMENT_INSTRUCTIONS": "💳 Mulen Pay payment\n\n💰 Amount: {amount}\n🆔 Payment ID: {payment_id}\n\n📱 How to pay:\n1. Press ‘Pay with Mulen Pay’\n2. Follow the instructions on the payment page\n3. Confirm the transfer\n4. Funds will be credited automatically\n\n❓ Need help? Contact {support}", + "MULENPAY_PAY_BUTTON": "💳 Pay with Mulen Pay", + "MULENPAY_TOPUP_PROMPT": "💳 Mulen Pay payment\n\nEnter an amount between 100 and 100,000 ₽.\nThe payment is processed by the secure Mulen Pay platform.", + "MY_BALANCE_BUTTON": "💰 My balance", + "MY_SUBSCRIPTION_BUTTON": "📱 My subscription", + "MY_TICKETS_BUTTON": "📋 My tickets", + "MY_TICKETS_TITLE": "📋 Your tickets:", + "NO": "❌ No", + "NOTIFICATION_CLOSED": "Notification closed.", + "NOTIFICATION_VALUE_INVALID": "❌ Invalid value, please enter a number.", + "NOTIFICATION_VALUE_UPDATED": "✅ Settings updated.", + "NOTIFY_PROMPT_SECOND_HOURS": "Enter the number of hours the discount is active (1-168):", + "NOTIFY_PROMPT_SECOND_PERCENT": "Enter a new discount percentage for the 2-3 day reminder (0-100):", + "NOTIFY_PROMPT_THIRD_DAYS": "After how many days without a subscription should we send the offer? (minimum 2):", + "NOTIFY_PROMPT_THIRD_HOURS": "Enter the number of hours the late discount is active (1-168):", + "NOTIFY_PROMPT_THIRD_PERCENT": "Enter a new discount percentage for the late offer (0-100):", + "NO_ATTACHMENTS": "No attachments.", + "NO_SERVERS_AVAILABLE": "❌ No servers available", + "NO_TICKETS": "You don't have any tickets yet.", + "NO_TICKETS_ADMIN": "No tickets to display.", + "NO_TRAFFIC_PACKAGES": "❌ No packages available", + "OPEN_TICKETS": "🔴 Open", + "OPEN_TICKETS_HEADER": "🔴 Open tickets", + "OPERATION_CANCELLED": "❌ Operation cancelled", + "OTHER_APPS_BUTTON": "📋 Other apps", + "PAGINATION_NEXT": "➡️", + "PAGINATION_PREV": "⬅️", + "PAL24_PAYMENT_ERROR": "❌ Failed to create a PayPalych payment. Please try again later or contact support.", + "PAL24_PAYMENT_INSTRUCTIONS": "💳 PayPalych payment\n\n💰 Amount: {amount}\n🆔 Invoice ID: {bill_id}\n\n📱 How to pay:\n1. Press ‘Pay with PayPalych’\n2. Follow the system prompts\n3. Confirm the transfer\n4. Funds will be credited automatically\n\n❓ Need help? Contact {support}", + "PAL24_PAY_BUTTON": "💳 Pay with PayPalych", + "PAL24_TOPUP_PROMPT": "💳 PayPalych payment\n\nEnter an amount between 100 and 1,000,000 ₽.\nThe payment is processed by the secure PayPalych platform.", + "PAYMENTS_TEMPORARILY_UNAVAILABLE": "⚠️ Payment methods are temporarily unavailable", + "PAYMENT_CARD_MULENPAY": "💳 Bank card (Mulen Pay)", + "PAYMENT_CARD_PAL24": "💳 Bank card (PayPalych)", + "PAYMENT_CARD_TRIBUTE": "💳 Bank card (Tribute)", + "PAYMENT_CARD_YOOKASSA": "💳 Bank card (YooKassa)", + "PAYMENT_CRYPTOBOT": "🪙 Cryptocurrency (CryptoBot)", + "PAYMENT_METHODS_FOOTER": "Choose a top-up method:", + "PAYMENT_METHODS_ONLY_SUPPORT": "💳 Balance top-up methods\n\n⚠️ Automated payment methods are temporarily unavailable.\nContact support to top up your balance.\n\nChoose a top-up method:", + "PAYMENT_METHODS_PROMPT": "Choose the payment method that suits you:", + "PAYMENT_METHODS_TITLE": "💳 Balance top-up methods", + "PAYMENT_METHODS_UNAVAILABLE_ALERT": "⚠️ Automated payment methods are temporarily unavailable. Contact support to top up your balance.", + "PAYMENT_METHOD_CRYPTOBOT_DESCRIPTION": "via CryptoBot", + "PAYMENT_METHOD_CRYPTOBOT_NAME": "🪙 Cryptocurrency", + "PAYMENT_METHOD_MULENPAY_DESCRIPTION": "via Mulen Pay", + "PAYMENT_METHOD_MULENPAY_NAME": "💳 Bank card (Mulen Pay)", + "PAYMENT_METHOD_PAL24_DESCRIPTION": "via PayPalych", + "PAYMENT_METHOD_PAL24_NAME": "💳 Bank card (PayPalych)", + "PAYMENT_METHOD_STARS_DESCRIPTION": "fast and convenient", + "PAYMENT_METHOD_STARS_NAME": "⭐ Telegram Stars", + "PAYMENT_METHOD_SUPPORT_DESCRIPTION": "other options", + "PAYMENT_METHOD_SUPPORT_NAME": "🛠️ Support team", + "PAYMENT_METHOD_TRIBUTE_DESCRIPTION": "via Tribute", + "PAYMENT_METHOD_TRIBUTE_NAME": "💳 Bank card", + "PAYMENT_METHOD_YOOKASSA_DESCRIPTION": "via YooKassa", + "PAYMENT_METHOD_YOOKASSA_NAME": "💳 Bank card", + "PAYMENT_SBP_YOOKASSA": "🏦 Pay via SBP (YooKassa)", + "PAYMENT_TELEGRAM_STARS": "⭐ Telegram Stars", + "PAYMENT_VIA_SUPPORT": "🛠️ Via support", + "PAY_NOW_BUTTON": "💳 Pay", + "PAY_WITH_COINS_BUTTON": "🪙 Pay", + "PENDING_CANCEL_BUTTON": "⌛ Cancel", + "PERIOD_14_DAYS": "📅 14 days - {settings.format_price(settings.PRICE_14_DAYS)}", + "PERIOD_180_DAYS": "📅 180 days - {settings.format_price(settings.PRICE_180_DAYS)}", + "PERIOD_30_DAYS": "📅 30 days - {settings.format_price(settings.PRICE_30_DAYS)}", + "PERIOD_360_DAYS": "📅 360 days - {settings.format_price(settings.PRICE_360_DAYS)}", + "PERIOD_60_DAYS": "📅 60 days - {settings.format_price(settings.PRICE_60_DAYS)}", + "PERIOD_90_DAYS": "📅 90 days - {settings.format_price(settings.PRICE_90_DAYS)}", + "POST_REGISTRATION_TRIAL_BUTTON": "🚀 Activate free trial 🚀", + "PROMOCODE_EMPTY_INPUT": "❌ Please enter a valid promo code", + "PROMOCODE_ENTER": "🎫 Enter promo code", + "PROMOCODE_EXPIRED": "❌ Promo code has expired", + "PROMOCODE_INVALID": "❌ Invalid promo code", + "PROMOCODE_SUCCESS": "🎉 Promo code applied!", + "PROMOCODE_USED": "ℹ️ Promo code has already been used", + "PROMO_GROUP_DISCOUNTS_HEADER": "🎁 Your promo group discounts", + "PROMO_GROUP_DISCOUNT_DEVICES": "📱 Extra devices: {percent}%", + "PROMO_GROUP_DISCOUNT_SERVERS": "🌍 Servers: {percent}%", + "PROMO_GROUP_DISCOUNT_TRAFFIC": "📊 Traffic: {percent}%", + "PROMO_GROUP_PERIOD_DISCOUNTS_HEADER": "⏳ Long-term period discounts:", + "PROMO_GROUP_PERIOD_DISCOUNT_ITEM": "{period} — {percent}%", + "REFERRAL_ANALYTICS_BUTTON": "📊 Analytics", + "REFERRAL_ANALYTICS_EARNINGS_HEADER": "💰 Earnings by period:", + "REFERRAL_ANALYTICS_EARNINGS_MONTH": "• Month: {amount}", + "REFERRAL_ANALYTICS_EARNINGS_QUARTER": "• Quarter: {amount}", + "REFERRAL_ANALYTICS_EARNINGS_TODAY": "• Today: {amount}", + "REFERRAL_ANALYTICS_EARNINGS_WEEK": "• Week: {amount}", + "REFERRAL_ANALYTICS_FOOTER": "📈 Keep growing your referral network!", + "REFERRAL_ANALYTICS_TITLE": "📊 Referral analytics", + "REFERRAL_ANALYTICS_TOP_ITEM": "{index}. {name}: {amount} ({count} rewards)", + "REFERRAL_ANALYTICS_TOP_TITLE": "🏆 Top {count} referrals:", + "REFERRAL_CODE_ACCEPTED": "✅ Referral code accepted!", + "REFERRAL_CODE_APPLIED": "🎁 Referral code applied! You will receive a bonus after the first purchase.", + "REFERRAL_CODE_INVALID": "❌ Invalid referral code", + "REFERRAL_CODE_INVALID_HELP": "❌ Invalid referral code.\n\n💡 If you have a referral code, please double-check the spelling.\n⏭️ To continue without a referral code, use the /start command.", + "REFERRAL_CODE_QUESTION": "\n🤝 Do you have a friend's referral code?\n\nIf you have a promo code or referral link, enter it now to receive a bonus!\n\nSend the code or tap \"Skip\":\n", + "REFERRAL_CODE_SKIP": "⏭️ Skip", + "REFERRAL_CODE_TITLE": "🆔 Your code: {code}", + "REFERRAL_EARNINGS_BY_TYPE_HEADER": "📈 Earnings by type:", + "REFERRAL_EARNINGS_FIRST_TOPUPS": "• Bonuses for first top-ups: {count} ({amount})", + "REFERRAL_EARNINGS_PURCHASES": "• Purchase commissions: {count} ({amount})", + "REFERRAL_EARNINGS_TOPUPS": "• Top-up commissions: {count} ({amount})", + "REFERRAL_EARNING_REASON_COMMISSION_PURCHASE": "💰 Purchase commission", + "REFERRAL_EARNING_REASON_COMMISSION_TOPUP": "💰 Top-up commission", + "REFERRAL_EARNING_REASON_FIRST_TOPUP": "🎉 First top-up", + "REFERRAL_INFO": "\n🤝 Referral program\n\n👥 Invited: {referrals_count} friends\n💰 Earned: {earned_amount}\n\n🔗 Your referral link:\n{referral_link}\n\n🎫 Your promo code:\n{referral_code}\n\n💰 Terms:\n• Per friend: {registration_bonus}\n• Top-up commission: {commission_percent}%\n", + "REFERRAL_INVITE_BONUS": "💎 On your first top-up from {minimum} you get {bonus} as a bonus!", + "REFERRAL_INVITE_CREATED_INSTRUCTION": "Tap the “📤 Share” button to send the invite to any chat or copy the text below:", + "REFERRAL_INVITE_CREATED_TITLE": "📝 Invitation created!", + "REFERRAL_INVITE_FEATURE_FAST": "🚀 Fast connection", + "REFERRAL_INVITE_FEATURE_SECURE": "🔒 Reliable protection", + "REFERRAL_INVITE_FEATURE_SERVERS": "🌍 Servers worldwide", + "REFERRAL_INVITE_FOOTER": "📢 Invite friends and earn!", + "REFERRAL_INVITE_LINK_PROMPT": "👇 Follow the link:", + "REFERRAL_INVITE_MESSAGE": "\n🎯 Invitation to the VPN service\n\nHi! I invite you to an excellent VPN service!\n\n🎁 Use my link to get a bonus: {bonus}\n\n🔗 Join: {link}\n🎫 Or use promo code: {code}\n\n💪 Fast, reliable, affordable!\n", + "REFERRAL_INVITE_TITLE": "🎉 Join the VPN service!", + "REFERRAL_LINK_CAPTION": "🔗 Your referral link:\n{link}", + "REFERRAL_LINK_TITLE": "🔗 Your referral link:", + "REFERRAL_LIST_BUTTON": "👥 Referral list", + "REFERRAL_LIST_EMPTY": "📋 You have no referrals yet.\n\nShare your referral link to start earning!", + "REFERRAL_LIST_HEADER": "👥 Your referrals (page {current}/{total})", + "REFERRAL_LIST_ITEM_ACTIVITY": " 🕐 Activity: {days} days ago", + "REFERRAL_LIST_ITEM_ACTIVITY_LONG_AGO": " 🕐 Activity: long ago", + "REFERRAL_LIST_ITEM_EARNED": " 💎 Earned from them: {amount}", + "REFERRAL_LIST_ITEM_HEADER": "{index}. {status} {name}", + "REFERRAL_LIST_ITEM_REGISTERED": " 📅 Registered: {days} days ago", + "REFERRAL_LIST_ITEM_TOPUPS": " {emoji} Top-ups: {count}", + "REFERRAL_LIST_NEXT_PAGE": "Next ➡️", + "REFERRAL_LIST_PREV_PAGE": "⬅️ Back", + "REFERRAL_PROGRAM_TITLE": "👥 Referral program", + "REFERRAL_RECENT_EARNINGS_HEADER": "💰 Latest rewards:", + "REFERRAL_RECENT_EARNINGS_ITEM": "• {reason}: {amount} from {referral_name}", + "REFERRAL_REWARDS_HEADER": "🎁 How rewards work:", + "REFERRAL_REWARD_COMMISSION": "• Commission from each referral top-up: {percent}%", + "REFERRAL_REWARD_INVITER": "• You receive on the referral's first top-up: {bonus}", + "REFERRAL_REWARD_NEW_USER": "• New user receives: {bonus} on the first top-up from {minimum}", + "REFERRAL_SHARE_BUTTON": "📤 Share", + "REFERRAL_STATS_ACTIVE": "• Active referrals: {count}", + "REFERRAL_STATS_CONVERSION": "• Conversion: {rate}%", + "REFERRAL_STATS_FIRST_TOPUPS": "• Made first top-up: {count}", + "REFERRAL_STATS_HEADER": "📊 Your statistics:", + "REFERRAL_STATS_INVITED": "• Invited users: {count}", + "REFERRAL_STATS_MONTH_EARNED": "• Earned last month: {amount}", + "REFERRAL_STATS_TOTAL_EARNED": "• Earned in total: {amount}", + "REGISTRATION_COMPLETING": "✅ Completing registration...", + "REPLY_TO_TICKET": "💬 Reply", + "REPORT_CLOSE": "❌ Close", + "REPORT_CLOSED": "✅ Report closed.", + "REPORT_CLOSE_ERROR": "❌ Failed to close the report.", + "RESET_ALL_DEVICES_BUTTON": "🔄 Reset all devices", + "RESET_DEVICE_CONFIRM_BUTTON": "✅ Reset this device", + "RESET_TRAFFIC_BUTTON": "🔄 Reset traffic", + "RETURN_TO_SUBSCRIPTION_CHECKOUT": "⬅️ Return to subscription checkout", + "RULES_ACCEPT": "✅ I accept the rules", + "RULES_ACCEPTED_PROCESSING": "✅ Rules accepted! Completing registration...", + "RULES_DECLINE": "❌ I do not accept", + "RULES_HEADER": "📋 Service Rules", + "RULES_REQUIRED": "❗️ You must accept the rules to use the service!", + "RULES_TEXT_DEFAULT": "📋 Service Usage Rules\n\n1. Do not use the service for illegal activity\n2. Avoid sharing pirated or malicious content\n3. Spam and phishing are prohibited\n4. Using the service for DDoS attacks is forbidden\n5. One account is intended for one person\n6. Refunds are provided only in exceptional cases\n7. The administration may block accounts that violate the rules\n\nBy using the service you agree to follow these rules.", + "SELECT_COUNTRIES": "Select countries:", + "SELECT_DEVICES": "Number of devices:", + "SELECT_PERIOD": "Choose period:", + "SELECT_TRAFFIC": "Choose traffic package:", + "SENDING_ATTACHMENTS": "📎 Sending attachments...", + "SEND_CONTACT_BUTTON": "📱 Share contact", + "SEND_LOCATION_BUTTON": "📍 Share location", + "SHOW_QR_BUTTON": "📱 Show QR code", + "SHOW_SUBSCRIPTION_LINK": "📋 Show subscription link", + "SKIP_BUTTON": "Skip ➡️", + "STARS_PAYMENT_ENROLLMENT_ERROR": "❌ Failed to credit funds. Please contact support; the payment will be verified manually.", + "STARS_PAYMENT_PROCESSING_ERROR": "❌ Technical error processing the payment. Please contact support for assistance.", + "STARS_PAYMENT_SUCCESS": "🎉 Payment processed successfully!\n\n⭐ Stars spent: {stars_spent}\n💰 Added to balance: {amount} ₽\n🆔 Transaction ID: {transaction_id}...\n\nThank you for topping up! 🚀", + "STARS_PAYMENT_USER_NOT_FOUND": "❌ Error: user not found. Please contact support.", + "STARS_PRECHECK_INVALID_PAYLOAD": "Payment validation error. Please try again.", + "STARS_PRECHECK_TECHNICAL_ERROR": "Technical error. Please try again later.", + "STARS_PRECHECK_USER_NOT_FOUND": "User not found. Please contact support.", + "SUBSCRIPTION_ACTIVE": "✅ Active", + "SUBSCRIPTION_ADDITIONAL_STEP_TITLE": "{title}:", + "SUBSCRIPTION_APPS_PROMPT": "Choose an app to connect:", + "SUBSCRIPTION_APPS_TITLE": "📱 Apps for {device_name}", + "SUBSCRIPTION_APP_NOT_FOUND": "❌ App not found", + "SUBSCRIPTION_CONNECTED_DEVICES_FOOTER": "
", + "SUBSCRIPTION_CONNECTED_DEVICES_TITLE": "
📱 Connected devices:\n", + "SUBSCRIPTION_CONNECT_CUSTOM_MESSAGE": "🚀 Connect subscription\n\n📱 Tap the button below to open the app:", + "SUBSCRIPTION_CONNECT_DEVICE_MESSAGE": "📱 Connect subscription\n\n🔗 Subscription link:\n{subscription_url}\n\n💡 Choose your device to get detailed setup instructions:", + "SUBSCRIPTION_CONNECT_LINK_MESSAGE": "🚀 Connect subscription\n\n🔗 Tap the button below to open the subscription link:", + "SUBSCRIPTION_CONNECT_LINK_PROMPT": "📱 Copy the link and add it to your VPN app", + "SUBSCRIPTION_CONNECT_LINK_SECTION": "🔗 Connection link:\n{subscription_url}", + "SUBSCRIPTION_CONNECT_MINIAPP_MESSAGE": "📱 Connect subscription\n\n🚀 Tap the button below to open the subscription in the Telegram mini app:", + "SUBSCRIPTION_DEVICE_APPS_NOT_FOUND": "❌ No apps found for this device", + "SUBSCRIPTION_DEVICE_FEATURED_APP": "📋 Recommended app: {app_name}", + "SUBSCRIPTION_DEVICE_GUIDE_TITLE": "📱 Setup for {device_name}", + "SUBSCRIPTION_DEVICE_HOW_TO_STEP1": "1. Install the app from the link above", + "SUBSCRIPTION_DEVICE_HOW_TO_STEP2": "2. Copy the subscription link (tap on it)", + "SUBSCRIPTION_DEVICE_HOW_TO_STEP3": "3. Open the app and paste the link", + "SUBSCRIPTION_DEVICE_HOW_TO_STEP4": "4. Connect to a server", + "SUBSCRIPTION_DEVICE_HOW_TO_TITLE": "💡 How to connect:", + "SUBSCRIPTION_DEVICE_LINK_TITLE": "🔗 Subscription link:", + "SUBSCRIPTION_DEVICE_STEP_ADD_TITLE": "Step 2 - Add subscription:", + "SUBSCRIPTION_DEVICE_STEP_CONNECT_TITLE": "Step 3 - Connect:", + "SUBSCRIPTION_DEVICE_STEP_INSTALL_TITLE": "Step 1 - Install:", + "SUBSCRIPTION_EXPIRED": "\n❌ Subscription expired\n\nYour subscription has ended. Renew it to restore access.\n", + "SUBSCRIPTION_EXPIRED_1D": "⛔ Your subscription expired\n\nAccess was disabled on {end_date}. Renew to return to the service.\n\n💎 Renewal price: {price}", + "SUBSCRIPTION_EXPIRED_SECOND_WAVE": "🔥 {percent}% discount on renewal\n\nTap “Get discount” and we'll add {bonus} to your balance. The offer is valid until {expires_at}.", + "SUBSCRIPTION_EXPIRED_THIRD_WAVE": "🎁 Personal {percent}% discount\n\nIt's been {trigger_days} days without a subscription. Come back — tap “Get discount” and {bonus} will be credited. Offer valid until {expires_at}.", + "SUBSCRIPTION_EXPIRING": "\n⚠️ Subscription expiring!\n\nYour subscription expires in {days} days.\n\nRenew it now so you don't lose access.\n", + "SUBSCRIPTION_EXPIRING_PAID": "\n⚠️ Subscription expires in {days_text}!\n\nYour paid subscription ends on {end_date}.\n\n💳 Autopay: {autopay_status}\n\n{action_text}\n", + "SUBSCRIPTION_EXTEND": "💎 Extend subscription", + "SUBSCRIPTION_HAPP_LINK_PROMPT": "🔒 Subscription link is ready. Tap the \"Connect\" button below to open it in Happ.", + "SUBSCRIPTION_HAPP_OPEN_BUTTON_HINT": "▶️ Tap the \"Connect\" button below to open Happ and add the subscription automatically.", + "SUBSCRIPTION_HAPP_OPEN_HINT": "💡 If the link doesn't open automatically, copy it manually: {subscription_link}", + "SUBSCRIPTION_HAPP_OPEN_LINK": "🔓 Open link in Happ", + "SUBSCRIPTION_HAPP_OPEN_TITLE": "🔗 Connect via Happ", + "SUBSCRIPTION_IMPORT_INSTRUCTION_PROMPT": "📱 Tap the button below to get setup instructions for your device", + "SUBSCRIPTION_IMPORT_LINK_SECTION": "🔗 Your import link for the VPN app:\n{subscription_url}", + "SUBSCRIPTION_INFO": "\n📱 Subscription details\n\n📊 Status: {status}\n🎭 Type: {type}\n📅 Valid until: {end_date}\n⏰ Days left: {days_left}\n\n📈 Traffic: {traffic_used} / {traffic_limit}\n🌍 Servers: {countries_count} countries\n📱 Devices: {devices_used} / {devices_limit}\n\n💳 Autopay: {autopay_status}\n", + "SUBSCRIPTION_LINK_GENERATING_NOTICE": "{purchase_text}\n\nThe link is being generated, open the 'My subscription' section in a few seconds.", + "SUBSCRIPTION_LINK_HINT": "💡 If the link didn't copy, select it manually and copy.", + "SUBSCRIPTION_LINK_STEP1": "1. Tap the link above to copy it", + "SUBSCRIPTION_LINK_STEP2": "2. Open your VPN app", + "SUBSCRIPTION_LINK_STEP3": "3. Find the 'Add subscription' or 'Import' option", + "SUBSCRIPTION_LINK_STEP4": "4. Paste the copied link", + "SUBSCRIPTION_LINK_UNAVAILABLE": "❌ Subscription link is unavailable", + "SUBSCRIPTION_LINK_USAGE_TITLE": "📱 How to use:", + "SUBSCRIPTION_NONE": "❌ No active subscription", + "SUBSCRIPTION_NOT_FOUND": "❌ Subscription not found", + "SUBSCRIPTION_NO_ACTIVE_LINK": "⚠ You don't have an active subscription or the link is still being generated", + "SUBSCRIPTION_NO_SERVERS": "No servers", + "SUBSCRIPTION_OVERVIEW_TEMPLATE": "👤 {full_name}\n💰 Balance: {balance}\n📱 Subscription: {status_emoji} {status_display}{warning}\n\n📱 Subscription details\n🎭 Type: {subscription_type}\n📅 Valid until: {end_date}\n⏰ Time left: {time_left}\n📈 Traffic: {traffic}\n🌍 Servers: {servers}\n📱 Devices: {devices_used} / {device_limit}", + "SUBSCRIPTION_PURCHASED": "🎉 Subscription purchased successfully!", + "SUBSCRIPTION_SETTINGS_BUTTON": "⚙️ Subscription settings", + "SUBSCRIPTION_SPECIFIC_APP_TITLE": "📱 {app_name} - {device_name}", + "SUBSCRIPTION_STATUS_ACTIVE": "Active", + "SUBSCRIPTION_STATUS_EXPIRED": "Expired", + "SUBSCRIPTION_STATUS_TRIAL": "Trial", + "SUBSCRIPTION_STATUS_UNKNOWN": "Unknown", + "SUBSCRIPTION_SUMMARY": "\n📋 Final configuration\n\n📅 Period: {period} days\n📈 Traffic: {traffic}\n🌍 Countries: {countries}\n📱 Devices: {devices}\n\n💰 Total: {total_price}\n\nConfirm the purchase?\n", + "SUBSCRIPTION_TIME_LEFT_DAYS": "{days} days", + "SUBSCRIPTION_TIME_LEFT_EXPIRED": "expired", + "SUBSCRIPTION_TIME_LEFT_HOURS": "{hours} hr", + "SUBSCRIPTION_TIME_LEFT_MINUTES": "{minutes} min", + "SUBSCRIPTION_TRAFFIC_LIMITED": "{used} / {limit} GB", + "SUBSCRIPTION_TRAFFIC_UNLIMITED": "∞ (unlimited) | Used: {used} GB", + "SUBSCRIPTION_TRIAL": "🧪 Trial subscription", + "SUBSCRIPTION_TYPE_PAID": "Paid", + "SUBSCRIPTION_TYPE_TRIAL": "Trial", + "SUBSCRIPTION_WARNING_MINUTES": "\n🔴 expires in a few minutes!", + "SUBSCRIPTION_WARNING_TODAY": "\n⚠️ expires today!", + "SUBSCRIPTION_WARNING_TOMORROW": "\n⚠️ expires tomorrow!", + "SUB_STATUS_ACTIVE_FEW_DAYS": "💎 Active\n⚠️ expires in {days} days", + "SUB_STATUS_ACTIVE_LONG": "💎 Active\n📅 until {end_date} ({days} days)", + "SUB_STATUS_ACTIVE_TODAY": "💎 Active\n⚠️ expires today!", + "SUB_STATUS_ACTIVE_TOMORROW": "💎 Active\n⚠️ expires tomorrow!", + "SUB_STATUS_EXPIRED": "🔴 Expired\n📅 {end_date}", + "SUB_STATUS_NONE": "❌ Not available", + "SUB_STATUS_TRIAL_ACTIVE": "🎁 Trial subscription\n📅 until {end_date} ({days} days)", + "SUB_STATUS_TRIAL_TODAY": "🎁 Trial subscription\n⚠️ expires today!", + "SUB_STATUS_TRIAL_TOMORROW": "🎁 Trial subscription\n⚠️ expires tomorrow!", + "SUCCESS": "✅ Success", + "SUPPORT_BUTTON": "🆘 Support", + "SUPPORT_INFO": "\n🛠️ Technical support\n\nFor any questions contact our support:\n\n👤 {settings.SUPPORT_USERNAME}\n\nWe can help with:\n• Connection setup\n• Troubleshooting issues\n• Payment questions\n• Other requests\n\n⏰ Response time: usually within 1-2 hours\n", + "SWITCH_TRAFFIC_BUTTON": "🔄 Switch traffic", + "SWITCH_TRAFFIC_CONFIRM": "\n🔄 Confirm traffic change\n\nCurrent limit: {current_traffic}\nNew limit: {new_traffic}\n\nAction: {action}\n💰 {cost}\n\nApply this change?\n", + "SWITCH_TRAFFIC_INFO": "\n🔄 Switch traffic limit\n\nCurrent limit: {current_traffic}\nChoose the new traffic amount:\n\n💡 Important:\n• Increasing — you pay the difference proportionally to the remaining time\n• Decreasing — payments are not refunded\n• The used traffic counter is NOT reset\n", + "SWITCH_TRAFFIC_SUCCESS_DECREASE": "\n✅ Traffic limit decreased!\n\n📊 Was: {old_traffic} → Now: {new_traffic}\nℹ️ Payments are not refunded\n", + "SWITCH_TRAFFIC_SUCCESS_INCREASE": "\n✅ Traffic limit increased!\n\n📊 Was: {old_traffic} → Now: {new_traffic}\n💰 Charged: {amount}\n", + "SWITCH_TRAFFIC_TITLE": "🔄 Switch traffic limit", + "TICKET_ATTACHMENTS": "📎 Attachments", + "TICKET_CLOSED": "✅ Ticket closed.", + "TICKET_CLOSE_ERROR": "❌ Error closing ticket.", + "TICKET_CREATED_SUCCESS": "✅ Ticket #{ticket_id} created successfully!\n\nTitle: {title}\n\nWe will respond to you soon.", + "TICKET_CREATION_CANCELLED": "Ticket creation cancelled.", + "TICKET_CREATION_ERROR": "❌ An error occurred while creating the ticket. Please try again later.", + "TICKET_MARKED_ANSWERED": "✅ Ticket marked as answered.", + "TICKET_MESSAGE_INPUT": "Now describe your problem or question:", + "TICKET_MESSAGE_TOO_SHORT": "Message must contain at least 10 characters. Try again:", + "TICKET_NOT_FOUND": "Ticket not found.", + "TICKET_PRIORITY_HIGH": "🟠 High", + "TICKET_PRIORITY_LOW": "🟢 Low", + "TICKET_PRIORITY_NORMAL": "🟡 Normal", + "TICKET_PRIORITY_SELECT": "Select ticket priority:", + "TICKET_PRIORITY_URGENT": "🔴 Urgent", + "TICKET_REPLY_CANCELLED": "Reply cancelled.", + "TICKET_REPLY_ERROR": "❌ An error occurred while sending the reply. Please try again later.", + "TICKET_REPLY_INPUT": "Enter your reply:", + "TICKET_REPLY_NOTIFICATION": "🎫 Reply received for ticket #{ticket_id}\n\n{reply_preview}\n\nClick the button below to go to the ticket:", + "TICKET_REPLY_SENT": "✅ Your reply has been sent!", + "TICKET_REPLY_TOO_SHORT": "Reply must contain at least 5 characters. Try again:", + "TICKET_STATUS_ANSWERED": "Answered", + "TICKET_STATUS_CLOSED": "Closed", + "TICKET_STATUS_OPEN": "Open", + "TICKET_STATUS_PENDING": "Pending", + "TICKET_TITLE_INPUT": "Enter ticket title:", + "TICKET_TITLE_TOO_LONG": "Title is too long. Maximum 255 characters. Try again:", + "TICKET_TITLE_TOO_SHORT": "Title must contain at least 5 characters. Try again:", + "TICKET_UPDATE_ERROR": "❌ Error updating ticket.", + "TOPUP_BALANCE_BUTTON": "💳 Top up balance", + "TOP_UP_AMOUNT": "💳 Enter top-up amount (in rubles):", + "TOP_UP_METHODS": "\n💳 Select a payment method\n\nAmount: {amount}\n", + "TOP_UP_STARS": "⭐ Telegram Stars", + "TOP_UP_TRIBUTE": "💎 Bank card", + "TRAFFIC_100GB": "📊 100 GB - {settings.format_price(settings.PRICE_TRAFFIC_100GB)}", + "TRAFFIC_10GB": "📊 10 GB - {settings.format_price(settings.PRICE_TRAFFIC_10GB)}", + "TRAFFIC_250GB": "📊 250 GB - {settings.format_price(settings.PRICE_TRAFFIC_250GB)}", + "TRAFFIC_25GB": "📊 25 GB - {settings.format_price(settings.PRICE_TRAFFIC_25GB)}", + "TRAFFIC_50GB": "📊 50 GB - {settings.format_price(settings.PRICE_TRAFFIC_50GB)}", + "TRAFFIC_5GB": "📊 5 GB - {settings.format_price(settings.PRICE_TRAFFIC_5GB)}", + "TRAFFIC_INSUFFICIENT_BALANCE": "⚠️ Insufficient balance!\nRequired: {required} (for {months} mo)\nYou have: {balance}", + "TRAFFIC_NO_CHANGE": "ℹ️ Traffic limit was not changed", + "TRAFFIC_PACKAGES_NOT_CONFIGURED": "⚠️ Traffic packages are not configured", + "TRAFFIC_UNLIMITED": "📊 Unlimited - {settings.format_price(settings.PRICE_TRAFFIC_UNLIMITED)}", + "TRIAL_ACTIVATED": "🎉 Trial subscription activated!", + "TRIAL_ACTIVATE_BUTTON": "🎁 Activate", + "TRIAL_ALREADY_USED": "❌ The trial subscription has already been used", + "TRIAL_AVAILABLE": "\n🎁 Trial subscription\n\nYou can get a free trial plan:\n\n⏰ Duration: {days} days\n📈 Traffic: {traffic} GB\n📱 Devices: {devices} pcs\n🌍 Server: {server_name}\n\nActivate the trial subscription?\n", + "TRIAL_ENDING_SOON": "\n🎁 The trial subscription is ending soon!\n\nYour trial expires in a few hours.\n\n💎 Don't want to lose VPN access?\nSwitch to the full subscription!\n\n🔥 Special offer:\n• 30 days for {price}\n• Unlimited traffic\n• All servers available\n• Speeds up to 1 Gbit/s\n\n⚡️ Activate before the trial ends!\n", + "TRIAL_INACTIVE_1H": "⏳ An hour has passed and we haven't seen any traffic yet\n\nOpen the connection guide and follow the steps. We're always ready to help!", + "TRIAL_INACTIVE_24H": "⏳ A full day passed without activity\n\nWe still don't see traffic from your test subscription. Use the guide or message support and we'll help you connect!", + "UNBLOCK": "✅ Unblock", + "UNKNOWN_CALLBACK_ALERT": "❓ Unknown action. Please try again.", + "UNKNOWN_COMMAND_MESSAGE": "❓ I didn't understand that command. Use the menu buttons.", + "USER_NOT_FOUND": "❌ User not found", + "VIEW_TICKET": "👁️ View ticket", + "WELCOME": "\n🎉 Welcome to VPN Service!\n\nOur service provides fast and secure internet access without restrictions.\n\n🔐 Advantages:\n• High connection speed\n• Servers in different countries \n• Reliable data protection\n• 24/7 support\n\nTo get started, select interface language:\n", + "WELCOME_FALLBACK": "Welcome, {user_name}!", + "YES": "✅ Yes" } diff --git a/locales/ru.json b/locales/ru.json index 2524c1d4..8532957c 100644 --- a/locales/ru.json +++ b/locales/ru.json @@ -1,525 +1,534 @@ { - "ACCESS_DENIED": "❌ Доступ запрещен", - "ADD_COUNTRIES_BUTTON": "🌐 Добавить страны", - "ADMIN_MAIN_MENU": "🏠 Главное меню", - "ADMIN_CAMPAIGNS": "📣 Рекламные кампании", - "ADMIN_MESSAGES": "📨 Рассылки", - "ADMIN_MONITORING": "🔍 Мониторинг", - "ADMIN_MONITORING_SETTINGS": "⚙️ Настройки мониторинга", - "ADMIN_REPORTS": "📊 Отчеты", - "ADMIN_PANEL": "\n⚙️ Административная панель\n\nВыберите раздел для управления:\n", - "ADMIN_PROMOCODES": "🎫 Промокоды", - "ADMIN_REFERRALS": "🤝 Партнерка", - "ADMIN_REMNAWAVE": "🖥️ Remnawave", - "ADMIN_RULES": "📋 Правила", - "ADMIN_STATISTICS": "📊 Статистика", - "ADMIN_PROMO_GROUPS": "💳 Промогруппы", - "ADMIN_PROMO_GROUPS_TITLE": "💳 Промогруппы", - "ADMIN_PROMO_GROUPS_SUMMARY": "Всего групп: {count}\nВсего участников: {members}", - "ADMIN_PROMO_GROUPS_DISCOUNTS": "Скидки — серверы: {servers}%, трафик: {traffic}%, устройства: {devices}%", - "ADMIN_PROMO_GROUP_PERIOD_DISCOUNTS_HEADER": "⏳ Скидки по периодам:", - "ADMIN_PROMO_GROUPS_DEFAULT_LABEL": " (базовая)", - "ADMIN_PROMO_GROUPS_MEMBERS_COUNT": "Участников: {count}", - "ADMIN_PROMO_GROUPS_EMPTY": "Промогруппы не найдены.", - "CREATE_TICKET_BUTTON": "🎫 Создать тикет", - "MY_TICKETS_BUTTON": "📋 Мои тикеты", - "CONTACT_SUPPORT_BUTTON": "💬 Связаться с поддержкой", - "SUPPORT_BUTTON": "🆘 Поддержка", - "TICKET_PRIORITY_SELECT": "Выберите приоритет тикета:", - "TICKET_PRIORITY_LOW": "🟢 Низкий", - "TICKET_PRIORITY_NORMAL": "🟡 Обычный", - "TICKET_PRIORITY_HIGH": "🟠 Высокий", - "TICKET_PRIORITY_URGENT": "🔴 Срочный", - "CANCEL_TICKET_CREATION": "❌ Отменить создание тикета", - "TICKET_TITLE_INPUT": "Введите заголовок тикета:", - "TICKET_TITLE_TOO_SHORT": "Заголовок должен содержать минимум 5 символов. Попробуйте еще раз:", - "TICKET_TITLE_TOO_LONG": "Заголовок слишком длинный. Максимум 255 символов. Попробуйте еще раз:", - "TICKET_MESSAGE_INPUT": "Опишите проблему (до 500 символов) или отправьте фото c подписью:", - "TICKET_MESSAGE_TOO_SHORT": "Сообщение должно содержать минимум 10 символов. Попробуйте еще раз:", - "TICKET_CREATED_SUCCESS": "✅ Тикет #{ticket_id} успешно создан!\n\nЗаголовок: {title}\n\nМы ответим вам в ближайшее время.", - "VIEW_TICKET": "👁️ Посмотреть тикет", - "BACK_TO_MENU": "🏠 В главное меню", - "TICKET_CREATION_ERROR": "❌ Произошла ошибка при создании тикета. Попробуйте позже.", - "NO_TICKETS": "У вас пока нет тикетов.", - "MY_TICKETS_TITLE": "📋 Ваши тикеты:", - "TICKET_STATUS_OPEN": "Открыт", - "TICKET_STATUS_ANSWERED": "Отвечен", - "TICKET_STATUS_CLOSED": "Закрыт", - "TICKET_STATUS_PENDING": "В ожидании", - "REPLY_TO_TICKET": "💬 Ответить", - "CLOSE_TICKET": "🔒 Закрыть тикет", - "CANCEL_REPLY": "❌ Отменить ответ", - "TICKET_REPLY_INPUT": "Введите ваш ответ:", - "TICKET_REPLY_TOO_SHORT": "Ответ должен содержать минимум 5 символов. Попробуйте еще раз:", - "TICKET_REPLY_SENT": "✅ Ваш ответ отправлен!", - "TICKET_REPLY_ERROR": "❌ Произошла ошибка при отправке ответа. Попробуйте позже.", - "TICKET_CLOSED": "✅ Тикет закрыт.", - "TICKET_CLOSE_ERROR": "❌ Ошибка при закрытии тикета.", - "TICKET_NOT_FOUND": "Тикет не найден.", - "TICKET_CREATION_CANCELLED": "Создание тикета отменено.", - "BACK_TO_SUPPORT": "⬅️ К поддержке", - "TICKET_REPLY_CANCELLED": "Ответ отменен.", - "BACK_TO_TICKETS": "⬅️ К тикетам", - "NO_TICKETS_ADMIN": "Нет тикетов для отображения.", - "ADMIN_TICKETS_TITLE": "🎫 Все тикеты поддержки:", - "ADMIN_TICKET_REPLY_INPUT": "Введите ответ от поддержки:", - - "ADMIN_TICKET_REPLY_SENT": "✅ Ответ отправлен!", - "TICKET_MARKED_ANSWERED": "✅ Тикет отмечен как отвеченный.", - "TICKET_UPDATE_ERROR": "❌ Ошибка при обновлении тикета.", - "MARK_AS_ANSWERED": "✅ Отметить как отвеченный", - "TICKET_REPLY_NOTIFICATION": "🎫 Получен ответ по тикету #{ticket_id}\n\n{reply_preview}\n\nНажмите кнопку ниже, чтобы перейти к тикету:", - "CLOSE_NOTIFICATION": "❌ Закрыть уведомление", - "REPORT_CLOSE": "❌ Закрыть", - "REPORT_CLOSED": "✅ Отчет закрыт.", - "REPORT_CLOSE_ERROR": "❌ Не удалось закрыть отчет.", - "NOTIFICATION_CLOSED": "Уведомление закрыто.", - "UNBLOCK": "✅ Разблокировать", - "BLOCK_FOREVER": "🚫 Заблокировать", - "BLOCK_BY_TIME": "⏳ Блокировка по времени", - "ENTER_BLOCK_MINUTES": "Введите количество минут для блокировки пользователя (например, 15):", - "TICKET_ATTACHMENTS": "📎 Вложения", - "OPEN_TICKETS": "🔴 Открытые", - "CLOSED_TICKETS": "🟢 Закрытые", - "CLOSED_TICKETS_HEADER": "🟢 Закрытые тикеты", - "OPEN_TICKETS_HEADER": "🔴 Открытые тикеты", - "SENDING_ATTACHMENTS": "📎 Отправляю вложения...", - "NO_ATTACHMENTS": "Вложений нет.", - "ATTACHMENTS_SENT": "✅ Вложения отправлены.", - "DELETE_MESSAGE": "🗑 Удалить", - "ADMIN_USER_PROMO_GROUP_BUTTON": "👥 Промогруппа", - "ADMIN_USER_PROMO_GROUP_TITLE": "👥 Промогруппа пользователя", - "ADMIN_USER_PROMO_GROUP_CURRENT": "Текущая группа: {name}", - "ADMIN_USER_PROMO_GROUP_CURRENT_NONE": "Текущая группа: не назначена", - "ADMIN_USER_PROMO_GROUP_DISCOUNTS": "Скидки — серверы: {servers}%, трафик: {traffic}%, устройства: {devices}%", - "ADMIN_USER_PROMO_GROUP_DISCOUNTS_NONE": "Скидки не заданы.", - "ADMIN_USER_PROMO_GROUP_SELECT": "Выберите промогруппу для назначения:", - "ADMIN_USER_PROMO_GROUP_UPDATED": "✅ Промогруппа пользователя обновлена: «{name}»", - "ADMIN_USER_PROMO_GROUP_ALREADY": "ℹ️ Пользователь уже состоит в этой промогруппе.", - "ADMIN_USER_PROMO_GROUP_ERROR": "❌ Не удалось обновить промогруппу пользователя.", - "ADMIN_USER_PROMO_GROUP_BACK": "⬅️ К пользователю", - "ADMIN_PROMO_GROUP_DETAILS_TITLE": "💳 Промогруппа: {name}", - "ADMIN_PROMO_GROUP_DETAILS_MEMBERS": "Участников: {count}", - "ADMIN_PROMO_GROUP_DETAILS_DEFAULT": "Это базовая группа.", - "ADMIN_PROMO_GROUP_MEMBERS_BUTTON": "👥 Участники", - "ADMIN_PROMO_GROUP_EDIT_BUTTON": "✏️ Изменить", - "ADMIN_PROMO_GROUP_DELETE_BUTTON": "🗑️ Удалить", - "ADMIN_PROMO_GROUP_CREATE_NAME_PROMPT": "Введите название новой промогруппы:", - "ADMIN_PROMO_GROUP_INVALID_NAME": "Название не может быть пустым.", - "ADMIN_PROMO_GROUP_CREATE_TRAFFIC_PROMPT": "Введите скидку на трафик (0-100):", - "ADMIN_PROMO_GROUP_CREATE_SERVERS_PROMPT": "Введите скидку на серверы (0-100):", - "ADMIN_PROMO_GROUP_CREATE_DEVICES_PROMPT": "Введите скидку на устройства (0-100):", - "ADMIN_PROMO_GROUP_CREATE_PERIOD_PROMPT": "Введите скидки на периоды подписки (например, 30:10, 90:15). Отправьте 0, если без скидок.", - "ADMIN_PROMO_GROUP_INVALID_PERCENT": "Введите число от 0 до 100.", - "ADMIN_PROMO_GROUP_INVALID_PERIOD_DISCOUNTS": "Введите пары период:скидка через запятую, например 30:10, 90:15, или 0.", - "ADMIN_PROMO_GROUP_CREATED": "Промогруппа «{name}» создана.", - "ADMIN_PROMO_GROUP_CREATED_BACK_BUTTON": "↩️ К промогруппам", - "ADMIN_PROMO_GROUP_EDIT_NAME_PROMPT": "Введите новое название промогруппы (текущее: {name}):", - "ADMIN_PROMO_GROUP_EDIT_TRAFFIC_PROMPT": "Введите новую скидку на трафик (0-100). Текущее значение: {current}.", - "ADMIN_PROMO_GROUP_EDIT_SERVERS_PROMPT": "Введите новую скидку на серверы (0-100). Текущее значение: {current}.", - "ADMIN_PROMO_GROUP_EDIT_DEVICES_PROMPT": "Введите новую скидку на устройства (0-100). Текущее значение: {current}.", - "ADMIN_PROMO_GROUP_EDIT_PERIOD_PROMPT": "Введите новые скидки на периоды (текущие: {current}). Отправьте 0, если без скидок.", - "ADMIN_PROMO_GROUP_UPDATED": "Промогруппа «{name}» обновлена.", - "ADMIN_PROMO_GROUP_AUTO_ASSIGN_DISABLED": "Автовыдача по суммарным тратам: отключена", - "ADMIN_PROMO_GROUP_AUTO_ASSIGN_LINE": "Автовыдача по суммарным тратам: от {amount} ₽", - "ADMIN_PROMO_GROUP_EDIT_MENU_TITLE": "✏️ Настройки промогруппы «{name}»", - "ADMIN_PROMO_GROUP_EDIT_MENU_HINT": "Выберите параметр для изменения:", - "ADMIN_PROMO_GROUP_EDIT_FIELD_NAME": "✏️ Изменить название", - "ADMIN_PROMO_GROUP_EDIT_FIELD_TRAFFIC": "🌐 Скидка на трафик", - "ADMIN_PROMO_GROUP_EDIT_FIELD_SERVERS": "🖥 Скидка на серверы", - "ADMIN_PROMO_GROUP_EDIT_FIELD_DEVICES": "📱 Скидка на устройства", - "ADMIN_PROMO_GROUP_EDIT_FIELD_PERIODS": "⏳ Скидки по периодам", - "ADMIN_PROMO_GROUP_EDIT_FIELD_AUTO_ASSIGN": "🤖 Автовыдача по тратам", - "ADMIN_PROMO_GROUP_CREATE_AUTO_ASSIGN_PROMPT": "Введите сумму общих трат (в ₽) для автоматической выдачи этой группы. Отправьте 0, чтобы отключить.", - "ADMIN_PROMO_GROUP_INVALID_AUTO_ASSIGN": "Введите неотрицательное число в рублях или 0 для отключения.", - "ADMIN_PROMO_GROUP_EDIT_AUTO_ASSIGN_PROMPT": "Введите сумму общих трат (в ₽) для автовыдачи. Текущее значение: {current}.", - "ADMIN_PROMO_GROUP_MEMBERS_TITLE": "👥 Участники группы {name}", - "ADMIN_PROMO_GROUP_MEMBERS_EMPTY": "В этой группе пока нет участников.", - "ADMIN_PROMO_GROUP_DELETE_FORBIDDEN": "Базовую промогруппу нельзя удалить.", - "ADMIN_PROMO_GROUP_DELETE_CONFIRM": "Удалить промогруппу «{name}»? Все пользователи будут переведены в базовую группу.", - "ADMIN_PROMO_GROUP_DELETED": "Промогруппа «{name}» удалена.", - "ADMIN_SUBSCRIPTIONS": "📱 Подписки", - "ADMIN_USERS": "👥 Пользователи", - "AUTOPAY_BUTTON": "💳 Автоплатёж", - "AUTOPAY_DISABLED_TEXT": "Отключен - не забудьте продлить вручную!", - "AUTOPAY_ENABLED_TEXT": "Включен - подписка продлится автоматически", - "AUTOPAY_FAILED": "\n❌ Ошибка автоплатежа\n\nНе удалось списать средства для продления подписки.\nНедостаточно средств на балансе: {balance}\nТребуется: {required}\n\nПополните баланс и продлите подписку вручную.\n", - "AUTOPAY_SET_DAYS_BUTTON": "⚙️ Настроить дни", - "AUTOPAY_SUCCESS": "\n✅ Автоплатеж выполнен\n\nВаша подписка автоматически продлена на {days} дней.\nСписано с баланса: {amount}\n", - "BACK": "⬅️ Назад", - "BACK_TO_SUBSCRIPTION": "⬅️ К подписке", - "BALANCE_BUTTON": "💰 Баланс: {balance}", - "BALANCE_BUTTON_DEFAULT": "💰 Баланс: {balance}", - "BALANCE_BUTTON_ZERO": "💰 Баланс: 0 ₽", - "BALANCE_HISTORY": "📊 История операций", - "BALANCE_INFO": "\n💰 Баланс: {balance}\n\nВыберите действие:\n", - "BALANCE_SUPPORT_REQUEST": "🛠️ Запрос через поддержку", - "BALANCE_TOP_UP": "💳 Пополнить", - "BALANCE_TOPUP": "💳 Пополнить баланс", - "CAMPAIGN_EXISTING_USER": "ℹ️ Эта рекламная ссылка доступна только новым пользователям.", - "CAMPAIGN_BONUS_BALANCE": "🎉 Вы получили {amount} за регистрацию по кампании «{name}»!", - "CAMPAIGN_BONUS_SUBSCRIPTION": "🎉 Вам выдана подписка на {days} д. (трафик: {traffic}, устройств: {devices}) по кампании «{name}»!", - "BUY_SUBSCRIPTION_START": "\n💎 Настройка подписки\n\nДавайте настроим вашу подписку под ваши потребности.\n\nСначала выберите период подписки:\n", - "PROMO_GROUP_DISCOUNTS_HEADER": "🎁 Скидки вашей промогруппы", - "PROMO_GROUP_DISCOUNT_SERVERS": "🌍 Серверы: {percent}%", - "PROMO_GROUP_DISCOUNT_TRAFFIC": "📊 Трафик: {percent}%", - "PROMO_GROUP_DISCOUNT_DEVICES": "📱 Доп. устройства: {percent}%", - "PROMO_GROUP_PERIOD_DISCOUNTS_HEADER": "⏳ Скидки за длительный период:", - "PROMO_GROUP_PERIOD_DISCOUNT_ITEM": "{period} — {percent}%", - "CANCEL": "❌ Отмена", - "CHANGE_DEVICES_BUTTON": "📱 Изменить устройства", - "CHANGE_DEVICES_CONFIRM": "\n 📱 Подтверждение изменения\n\n Текущее количество: {current_devices} устройств\n Новое количество: {new_devices} устройств\n\n Действие: {action}\n 💰 {cost}\n\n Подтвердить изменение?\n ", - "CHANGE_DEVICES_INFO": "\n 📱 Изменение количества устройств\n\n Текущий лимит: {current_devices} устройств\n\n Выберите новое количество устройств:\n\n 💡 Важно:\n • При увеличении - доплата пропорционально оставшемуся времени\n • При уменьшении - возврат средств не производится\n ", - "CHANGE_DEVICES_SUCCESS_DECREASE": "\n ✅ Количество устройств уменьшено!\n\n 📱 Было: {old_count} → Стало: {new_count}\n ℹ️ Возврат средств не производится\n ", - "CHANGE_DEVICES_SUCCESS_INCREASE": "\n ✅ Количество устройств увеличено!\n\n 📱 Было: {old_count} → Стало: {new_count}\n 💰 Списано: {amount}\n ", - "CHANGE_DEVICES_TITLE": "📱 Изменение количества устройств", - "CHANNEL_CHECK_BUTTON": "✅ Я подписался", - "CHANNEL_REQUIRED_TEXT": "🔒 Для использования бота подпишитесь на новостной канал, а затем нажмите кнопку ниже.", - "CHANNEL_SUBSCRIBE_BUTTON": "🔗 Подписаться", - "CHANNEL_SUBSCRIBE_REQUIRED_ALERT": "❌ Вы не подписались на канал!", - "CHANNEL_SUBSCRIBE_THANKS": "✅ Спасибо за подписку", - "CHECK_STATUS_BUTTON": "📊 Проверить статус", - "CHOOSE_ANOTHER_DEVICE": "📱 Выбрать другое устройство", - "CONFIRM": "✅ Подтвердить", - "CONFIRM_CHANGE_BUTTON": "✅ Подтвердить изменение", - "CONNECT_BUTTON": "🔗 Подключиться", - "HAPP_DOWNLOAD_BUTTON": "⬇️ Скачать Happ", - "HAPP_DOWNLOAD_PROMPT": "📥 Скачать Happ\nВыберите ваше устройство:", - "HAPP_PLATFORM_IOS": "🍎 iOS", - "HAPP_PLATFORM_ANDROID": "🤖 Android", - "HAPP_PLATFORM_MACOS": "🖥️ Mac OS", - "HAPP_PLATFORM_WINDOWS": "💻 Windows", - "HAPP_PLATFORM_PC": "💻 ПК", - "HAPP_DOWNLOAD_LINK_MESSAGE": "⬇️ Скачайте Happ для {platform}:", - "HAPP_DOWNLOAD_LINK_NOT_SET": "❌ Ссылка для этого устройства не настроена", - "HAPP_DOWNLOAD_OPEN_LINK": "🔗 Открыть ссылку", - "CONTACT_SUPPORT": "💬 Написать в поддержку", - "CONTINUE": "➡️ Продолжить", - "CONTINUE_BUTTON": "✅ Продолжить", - "COPY_SUBSCRIPTION_LINK": "📋 Скопировать ссылку подписки", - "CREATE_INVITE": "📝 Создать приглашение", - "CREATE_INVITE_BUTTON": "📝 Создать приглашение", - "DEVICES_INSUFFICIENT_BALANCE": "⚠️ Недостаточно средств!\nТребуется: {required} (за {months} мес)\nУ вас: {balance}", - "DEVICES_LIMIT_EXCEEDED": "⚠️ Превышен максимальный лимит устройств ({limit})", - "DEVICES_MINIMUM_LIMIT": "⚠️ Минимальное количество устройств: {limit}", - "DEVICES_NO_CHANGE": "ℹ️ Количество устройств не изменилось", - "DEVICE_CONNECTION_HELP": "❓ Как подключить устройство заново?", - "DEVICE_GUIDE_ANDROID": "🤖 Android", - "DEVICE_GUIDE_ANDROID_TV": "📺 Android TV", - "DEVICE_GUIDE_IOS": "📱 iOS (iPhone/iPad)", - "DEVICE_GUIDE_MAC": "🎯 macOS", - "DEVICE_GUIDE_WINDOWS": "💻 Windows", - "DISABLE_BUTTON": "❌ Выключить", - "ENABLE_BUTTON": "✅ Включить", - "ERROR": "❌ Произошла ошибка", - "ERROR_TRY_AGAIN": "❌ Произошла ошибка. Попробуйте еще раз.", - "ERROR_RULES_RETRY": "Произошла ошибка. Попробуйте принять правила еще раз:", - "GO_TO_BALANCE_TOP_UP": "💳 Перейти к пополнению баланса", - "RETURN_TO_SUBSCRIPTION_CHECKOUT": "⬅️ Вернуться к оформлению подписки", - "INSUFFICIENT_BALANCE": "❌ Недостаточно средств на балансе. \n \n Пополните баланс на {amount} и попробуйте снова.\n ", - "ADDON_INSUFFICIENT_FUNDS_MESSAGE": "⚠️ Недостаточно средств\n\nСтоимость услуги: {required}\nНа балансе: {balance}\nНе хватает: {missing}\n\nВыберите способ пополнения. Сумма подставится автоматически.", - "INVALID_AMOUNT": "❌ Неверная сумма", - "LANGUAGE_SELECTED": "🌐 Язык интерфейса установлен: Русский", - "LOADING": "⏳ Загрузка...", - "MAINTENANCE_MODE_ACTIVE": "\n🔧 Технические работы!\n\nСервис временно недоступен. Ведутся технические работы по улучшению качества обслуживания.\n\n⏰ Ориентировочное время завершения: неизвестно\n🔄 Попробуйте позже\n\nПриносим извинения за временные неудобства.\n", - "MAINTENANCE_MODE_API_ERROR": "\n🔧 Технические работы!\n\nСервис временно недоступен из-за проблем с подключением к серверам.\n\n⏰ Мы работаем над восстановлением. Попробуйте через несколько минут.\n\n🔄 Последняя проверка: {last_check}\n", - "MAIN_MENU": "👤 {user_name}\n \n📱 Подписка: {subscription_status}\n\nВыберите действие:\n", - "MAIN_MENU_ACTION_PROMPT": "Выберите действие:", - "MAIN_MENU_BUTTON": "🏠 Главное меню", - "MANAGE_DEVICES_BUTTON": "🔧 Управление устройствами", - "MENU_ADMIN": "⚙️ Админ-панель", - "MENU_BALANCE": "💰 Баланс", - "MENU_BUY_SUBSCRIPTION": "💎 Купить подписку", - "MENU_EXTEND_SUBSCRIPTION": "⏰ Продлить подписку", - "MENU_LANGUAGE": "🌐 Язык", - "MENU_PROMOCODE": "🎫 Промокод", - "MENU_REFERRALS": "🤝 Партнерка", - "MENU_RULES": "📋 Правила сервиса", - "MENU_SUBSCRIPTION": "📱 Подписка", - "MENU_SUPPORT": "🛠️ Техподдержка", - "MENU_TRIAL": "🧪 Тестовая подписка", - "MY_BALANCE_BUTTON": "💰 Мой баланс", - "MY_SUBSCRIPTION_BUTTON": "📱 Моя подписка", - "NO": "❌ Нет", - "NO_SERVERS_AVAILABLE": "❌ Нет доступных серверов", - "NO_TRAFFIC_PACKAGES": "❌ Нет доступных пакетов", - "OPERATION_CANCELLED": "❌ Операция отменена", - "OTHER_APPS_BUTTON": "📋 Другие приложения", - "PAGINATION_NEXT": "➡️", - "PAGINATION_PREV": "⬅️", - "PAYMENTS_TEMPORARILY_UNAVAILABLE": "⚠️ Способы оплаты временно недоступны", - "PAYMENT_CARD_TRIBUTE": "💳 Банковская карта (Tribute)", - "PAYMENT_CARD_MULENPAY": "💳 Банковская карта (Mulen Pay)", - "PAYMENT_CARD_PAL24": "💳 Банковская карта (PayPalych)", - "PAYMENT_CARD_YOOKASSA": "💳 Банковская карта (YooKassa)", - "PAYMENT_CRYPTOBOT": "🪙 Криптовалюта (CryptoBot)", - "PAYMENT_SBP_YOOKASSA": "🏬 Оплатить по СБП (YooKassa)", - "PAYMENT_TELEGRAM_STARS": "⭐ Telegram Stars", - "PAYMENT_VIA_SUPPORT": "🛠️ Через поддержку", - "PAY_NOW_BUTTON": "💳 Оплатить", - "PAY_WITH_COINS_BUTTON": "🪙 Оплатить", - "MULENPAY_TOPUP_PROMPT": "💳 Оплата через Mulen Pay\n\nВведите сумму для пополнения от 100 до 100 000 ₽.\nОплата происходит через защищенную платформу Mulen Pay.", - "MULENPAY_PAYMENT_ERROR": "❌ Ошибка создания платежа Mulen Pay. Попробуйте позже или обратитесь в поддержку.", - "MULENPAY_PAY_BUTTON": "💳 Оплатить через Mulen Pay", - "MULENPAY_PAYMENT_INSTRUCTIONS": "💳 Оплата через Mulen Pay\n\n💰 Сумма: {amount}\n🆔 ID платежа: {payment_id}\n\n📱 Инструкция:\n1. Нажмите кнопку ‘Оплатить через Mulen Pay’\n2. Следуйте подсказкам платежной системы\n3. Подтвердите перевод\n4. Средства зачислятся автоматически\n\n❓ Если возникнут проблемы, обратитесь в {support}", - "PAL24_TOPUP_PROMPT": "💳 Оплата через PayPalych\n\nВведите сумму для пополнения от 100 до 1 000 000 ₽.\nОплата проходит через защищенную платформу PayPalych.", - "PAL24_PAYMENT_ERROR": "❌ Ошибка создания платежа PayPalych. Попробуйте позже или обратитесь в поддержку.", - "PAL24_PAY_BUTTON": "💳 Оплатить через PayPalych", - "PAL24_PAYMENT_INSTRUCTIONS": "💳 Оплата через PayPalych\n\n💰 Сумма: {amount}\n🆔 ID счета: {bill_id}\n\n📱 Инструкция:\n1. Нажмите кнопку ‘Оплатить через PayPalych’\n2. Следуйте подсказкам платежной системы\n3. Подтвердите перевод\n4. Средства зачислятся автоматически\n\n❓ Если возникнут проблемы, обратитесь в {support}", - "PENDING_CANCEL_BUTTON": "⌛ Отмена", - "PERIOD_14_DAYS": "📅 14 дней - {settings.format_price(settings.PRICE_14_DAYS)}", - "PERIOD_180_DAYS": "📅 180 дней - {settings.format_price(settings.PRICE_180_DAYS)}", - "PERIOD_30_DAYS": "📅 30 дней - {settings.format_price(settings.PRICE_30_DAYS)}", - "PERIOD_360_DAYS": "📅 360 дней - {settings.format_price(settings.PRICE_360_DAYS)}", - "PERIOD_60_DAYS": "📅 60 дней - {settings.format_price(settings.PRICE_60_DAYS)}", - "PERIOD_90_DAYS": "📅 90 дней - {settings.format_price(settings.PRICE_90_DAYS)}", - "POST_REGISTRATION_TRIAL_BUTTON": "🚀 Подключиться бесплатно 🚀", - "PROMOCODE_ENTER": "🎫 Введите промокод:", - "PROMOCODE_EMPTY_INPUT": "❌ Введите корректный промокод", - "PROMOCODE_EXPIRED": "❌ Промокод истек", - "PROMOCODE_INVALID": "❌ Неверный промокод", - "PROMOCODE_SUCCESS": "🎉 Промокод активирован! {description}", - "PROMOCODE_USED": "❌ Промокод уже использован", - "REFERRAL_ANALYTICS_BUTTON": "📊 Аналитика", - "REFERRAL_CODE_APPLIED": "🎁 Реферальный код применен! Вы получите бонус после первой покупки.", - "REFERRAL_CODE_ACCEPTED": "✅ Реферальный код принят!", - "REFERRAL_CODE_INVALID": "❌ Неверный реферальный код", - "REFERRAL_CODE_INVALID_HELP": "❌ Неверный реферальный код.\n\n💡 Если у вас есть реферальный код, убедитесь что он введен правильно.\n⏭️ Для продолжения регистрации без реферального кода используйте команду /start", - "REFERRAL_CODE_QUESTION": "\n🤝 У вас есть реферальный код от друга?\n\nЕсли у вас есть промокод или реферальная ссылка от друга, введите её сейчас, чтобы получить бонус!\n\nВведите код или нажмите \"Пропустить\":\n", - "REFERRAL_CODE_SKIP": "⏭️ Пропустить", - "ALREADY_REGISTERED_REFERRAL": "ℹ️ Вы уже зарегистрированы в системе. Реферальная ссылка не может быть применена.", - "REFERRAL_INFO": "\n🤝 Реферальная программа\n\n👥 Приглашено: {referrals_count} друзей\n💰 Заработано: {earned_amount}\n\n🔗 Ваша реферальная ссылка:\n{referral_link}\n\n🎫 Ваш промокод:\n{referral_code}\n\n💰 Условия:\n• За каждого друга: {registration_bonus}\n• Процент с пополнений: {commission_percent}%\n", - "REFERRAL_INVITE_MESSAGE": "\n🎯 Приглашение в VPN сервис\n\nПривет! Приглашаю тебя в отличный VPN сервис!\n\n🎁 По моей ссылке ты получишь бонус: {bonus}\n\n🔗 Переходи: {link}\n🎫 Или используй промокод: {code}\n\n💪 Быстро, надежно, недорого!\n", - "REFERRAL_LIST_BUTTON": "👥 Список рефералов", - "RESET_ALL_DEVICES_BUTTON": "🔄 Сбросить все устройства", - "RESET_DEVICE_CONFIRM_BUTTON": "✅ Да, сбросить это устройство", - "RESET_TRAFFIC_BUTTON": "🔄 Сбросить трафик", - "RULES_ACCEPT": "✅ Принимаю правила", - "RULES_ACCEPTED_PROCESSING": "✅ Правила приняты! Завершаем регистрацию...", - "RULES_DECLINE": "❌ Не принимаю", - "RULES_HEADER": "📋 Правила сервиса", - "RULES_REQUIRED": "❗️ Для использования сервиса необходимо принять правила!", - "RULES_TEXT_DEFAULT": "📋 Правила использования сервиса\n\n1. Запрещено использовать сервис для противоправной деятельности\n2. Не распространяйте пиратский или вредоносный контент\n3. Запрещены спам и фишинг\n4. Нельзя использовать сервис для DDoS-атак\n5. Один аккаунт предназначен для одного пользователя\n6. Возвраты возможны только в исключительных случаях\n7. Администрация может заблокировать аккаунт при нарушении правил\n\nИспользуя сервис, вы подтверждаете согласие с этими правилами.", - "SELECT_COUNTRIES": "Выберите страны:", - "SELECT_DEVICES": "Количество устройств:", - "SELECT_PERIOD": "Выберите период:", - "SELECT_TRAFFIC": "Выберите пакет трафика:", - "SEND_CONTACT_BUTTON": "📱 Отправить контакт", - "SEND_LOCATION_BUTTON": "📍 Отправить геолокацию", - "SHOW_QR_BUTTON": "📱 Показать QR код", - "SHOW_SUBSCRIPTION_LINK": "📋 Показать ссылку подписки", - "SKIP_BUTTON": "⏭️ Пропустить", - "SUBSCRIPTION_ACTIVE": "✅ Активна", - "SUBSCRIPTION_EXTEND": "💎 Продлить подписку", - "SUBSCRIPTION_EXPIRED": "\n❌ Подписка истекла\n\nВаша подписка истекла. Для восстановления доступа продлите подписку.\n", - "SUBSCRIPTION_EXPIRING": "\n⚠️ Подписка истекает!\n\nВаша подписка истекает через {days} дней.\n\nНе забудьте продлить подписку, чтобы не потерять доступ к серверам.\n", - "SUBSCRIPTION_EXPIRING_PAID": "\n⚠️ Подписка истекает через {days_text}!\n\nВаша платная подписка истекает {end_date}.\n\n💳 Автоплатеж: {autopay_status}\n\n{action_text}\n", - "SUBSCRIPTION_INFO": "\n📱 Информация о подписке\n\n📊 Статус: {status}\n🎭 Тип: {type}\n📅 Действует до: {end_date}\n⏰ Осталось дней: {days_left}\n\n📈 Трафик: {traffic_used} / {traffic_limit}\n🌍 Серверы: {countries_count} стран\n📱 Устройства: {devices_used} / {devices_limit}\n\n💳 Автоплатеж: {autopay_status}\n", - "SUBSCRIPTION_NONE": "❌ Нет активной подписки", - "SUBSCRIPTION_NOT_FOUND": "❌ Подписка не найдена", - "SUBSCRIPTION_PURCHASED": "🎉 Подписка успешно приобретена!", - "SUBSCRIPTION_SETTINGS_BUTTON": "⚙️ Настройки подписки", - "SUBSCRIPTION_SUMMARY": "\n📋 Итоговая конфигурация\n\n📅 Период: {period} дней\n📈 Трафик: {traffic}\n🌍 Страны: {countries}\n📱 Устройства: {devices}\n\n💰 Итого к оплате: {total_price}\n\nПодтвердить покупку?\n", - "SUBSCRIPTION_TRIAL": "🧪 Тестовая подписка", - "SUB_STATUS_ACTIVE_FEW_DAYS": "💎 Активна\n⚠️ истекает через {days} дн.", - "SUB_STATUS_ACTIVE_LONG": "💎 Активна\n📅 до {end_date} ({days} дн.)", - "SUB_STATUS_ACTIVE_TODAY": "💎 Активна\n⚠️ истекает сегодня!", - "SUB_STATUS_ACTIVE_TOMORROW": "💎 Активна\n⚠️ истекает завтра!", - "SUB_STATUS_EXPIRED": "🔴 Истекла\n📅 {end_date}", - "SUB_STATUS_NONE": "❌ Отсутствует", - "SUB_STATUS_TRIAL_ACTIVE": "🎁 Тестовая подписка\n📅 до {end_date} ({days} дн.)", - "SUB_STATUS_TRIAL_TODAY": "🎁 Тестовая подписка\n⚠️ истекает сегодня!", - "SUB_STATUS_TRIAL_TOMORROW": "🎁 Тестовая подписка\n⚠️ истекает завтра!", - "SUCCESS": "✅ Успешно", - "REGISTRATION_COMPLETING": "✅ Завершаем регистрацию...", - "SUPPORT_INFO": "\n🛠️ Техническая поддержка\n\nПо всем вопросам обращайтесь к нашей поддержке:\n\n👤 {settings.SUPPORT_USERNAME}\n\nМы поможем с:\n• Настройкой подключения\n• Решением технических проблем \n• Вопросами по оплате\n• Другими вопросами\n\n⏰ Время ответа: обычно в течение 1-2 часов\n", - "SWITCH_TRAFFIC_BUTTON": "🔄 Переключить трафик", - "SWITCH_TRAFFIC_CONFIRM": "\n🔄 Подтверждение переключения трафика\n\nТекущий лимит: {current_traffic}\nНовый лимит: {new_traffic}\n\nДействие: {action}\n💰 {cost}\n\nПодтвердить переключение?\n", - "SWITCH_TRAFFIC_INFO": "\n🔄 Переключение лимита трафика\n\nТекущий лимит: {current_traffic}\nВыберите новый лимит трафика:\n\n💡 Важно:\n• При увеличении - доплата за разницу пропорционально оставшемуся времени\n• При уменьшении - возврат средств не производится\n• Счетчик использованного трафика НЕ сбрасывается\n", - "SWITCH_TRAFFIC_SUCCESS_DECREASE": "\n✅ Лимит трафика уменьшен!\n\n📊 Было: {old_traffic} → Стало: {new_traffic}\nℹ️ Возврат средств не производится\n", - "SWITCH_TRAFFIC_SUCCESS_INCREASE": "\n✅ Лимит трафика увеличен!\n\n📊 Было: {old_traffic} → Стало: {new_traffic}\n💰 Списано: {amount}\n", - "SWITCH_TRAFFIC_TITLE": "🔄 Переключение лимита трафика", - "TOPUP_BALANCE_BUTTON": "💳 Попол\\у043Dить баланс", - "TOP_UP_AMOUNT": "💳 Введите сумму для пополнения (в рублях):", - "TOP_UP_METHODS": "\n💳 Выберите способ оплаты\n\nСумма: {amount}\n", - "TOP_UP_STARS": "⭐ Telegram Stars", - "STARS_PAYMENT_ENROLLMENT_ERROR": "❌ Произошла ошибка при зачислении средств. Обратитесь в поддержку, платеж будет проверен вручную.", - "STARS_PAYMENT_PROCESSING_ERROR": "❌ Техническая ошибка при обработке платежа. Обратитесь в поддержку для решения проблемы.", - "STARS_PAYMENT_SUCCESS": "🎉 Платеж успешно обработан!\n\n⭐ Потрачено звезд: {stars_spent}\n💰 Зачислено на баланс: {amount} ₽\n🆔 ID транзакции: {transaction_id}...\n\nСпасибо за пополнение! 🚀", - "STARS_PAYMENT_USER_NOT_FOUND": "❌ Ошибка: пользователь не найден. Обратитесь в поддержку.", - "STARS_PRECHECK_INVALID_PAYLOAD": "Ошибка валидации платежа. Попробуйте еще раз.", - "STARS_PRECHECK_TECHNICAL_ERROR": "Техническая ошибка. Попробуйте позже.", - "STARS_PRECHECK_USER_NOT_FOUND": "Пользователь не найден. Обратитесь в поддержку.", - "TOP_UP_TRIBUTE": "💎 Банковская карта", - "TRAFFIC_100GB": "📊 100 ГБ - {settings.format_price(settings.PRICE_TRAFFIC_100GB)}", - "TRAFFIC_10GB": "📊 10 ГБ - {settings.format_price(settings.PRICE_TRAFFIC_10GB)}", - "TRAFFIC_250GB": "📊 250 ГБ - {settings.format_price(settings.PRICE_TRAFFIC_250GB)}", - "TRAFFIC_25GB": "📊 25 ГБ - {settings.format_price(settings.PRICE_TRAFFIC_25GB)}", - "TRAFFIC_50GB": "📊 50 ГБ - {settings.format_price(settings.PRICE_TRAFFIC_50GB)}", - "TRAFFIC_5GB": "📊 5 ГБ - {settings.format_price(settings.PRICE_TRAFFIC_5GB)}", - "TRAFFIC_INSUFFICIENT_BALANCE": "⚠️ Недостаточно средств!\nТребуется: {required} (за {months} мес)\nУ вас: {balance}", - "TRAFFIC_NO_CHANGE": "ℹ️ Лимит трафика не изменился", - "TRAFFIC_PACKAGES_NOT_CONFIGURED": "⚠️ Пакеты трафика не настроены", - "TRAFFIC_UNLIMITED": "📊 Безлимит - {settings.format_price(settings.PRICE_TRAFFIC_UNLIMITED)}", - "TRIAL_ACTIVATED": "🎉 Тестовая подписка активирована!", - "TRIAL_ACTIVATE_BUTTON": "🎁 Активировать", - "TRIAL_ALREADY_USED": "❌ Тестовая подписка уже была использована", - "TRIAL_AVAILABLE": "\n🎁 Тестовая подписка\n\nВы можете получить бесплатную тестовую подписку:\n\n⏰ Период: {days} дней\n📈 Трафик: {traffic} ГБ\n📱 Устройства: {devices} шт.\n🌍 Сервер: {server_name}\n\nАктивировать тестовую подписку?\n", - "TRIAL_ENDING_SOON": "\n🎁 Тестовая подписка скоро закончится!\n\nВаша тестовая подписка истекает через несколько часов.\n\n💎 Не хотите остаться без VPN?\nПереходите на полную подписку!\n\n🔥 Специальное предложение:\n• 30 дней всего за {price}\n• Безлимитный трафик \n• Все серверы доступны\n• Скорость до 1ГБит/сек\n\n⚡️ Успейте оформить до окончания тестового периода!\n", - "UNKNOWN_CALLBACK_ALERT": "❓ Неизвестная команда. Попробуйте ещё раз.", - "UNKNOWN_COMMAND_MESSAGE": "❓ Не понимаю эту команду. Используйте кнопки меню.", - "USER_NOT_FOUND": "❌ Пользователь не найден", - "WELCOME": "\n🎉 Добро пожаловать в VPN сервис!\n\nНаш сервис предоставляет быстрый и безопасный доступ к интернету без ограничений.\n\n🔐 Преимущества:\n• Высокая скорость подключения\n• Серверы в разных странах\n• Надежная защита данных\n• Круглосуточная поддержка\n\nДля начала работы выберите язык интерфейса:\n", - "WELCOME_FALLBACK": "Добро пожаловать, {user_name}!", - "YES": "✅ Да", - "SUBSCRIPTION_STATUS_EXPIRED": "Истекла", - "SUBSCRIPTION_STATUS_TRIAL": "Тестовая", - "SUBSCRIPTION_STATUS_ACTIVE": "Активна", - "SUBSCRIPTION_STATUS_UNKNOWN": "Неизвестно", - "SUBSCRIPTION_TIME_LEFT_EXPIRED": "истёк", - "SUBSCRIPTION_TIME_LEFT_DAYS": "{days} дн.", - "SUBSCRIPTION_TIME_LEFT_HOURS": "{hours} ч.", - "SUBSCRIPTION_TIME_LEFT_MINUTES": "{minutes} мин.", - "SUBSCRIPTION_WARNING_TOMORROW": "\n⚠️ истекает завтра!", - "SUBSCRIPTION_WARNING_TODAY": "\n⚠️ истекает сегодня!", - "SUBSCRIPTION_WARNING_MINUTES": "\n🔴 истекает через несколько минут!", - "SUBSCRIPTION_TYPE_TRIAL": "Триал", - "SUBSCRIPTION_TYPE_PAID": "Платная", - "SUBSCRIPTION_TRAFFIC_UNLIMITED": "∞ (безлимит) | Использовано: {used} ГБ", - "SUBSCRIPTION_TRAFFIC_LIMITED": "{used} / {limit} ГБ", - "SUBSCRIPTION_NO_SERVERS": "Нет серверов", - "SUBSCRIPTION_OVERVIEW_TEMPLATE": "👤 {full_name}\n💰 Баланс: {balance}\n📱 Подписка: {status_emoji} {status_display}{warning}\n\n📱 Информация о подписке\n🎭 Тип: {subscription_type}\n📅 Действует до: {end_date}\n⏰ Осталось: {time_left}\n📈 Трафик: {traffic}\n🌍 Серверы: {servers}\n📱 Устройства: {devices_used} / {device_limit}", - "SUBSCRIPTION_CONNECTED_DEVICES_TITLE": "
📱 Подключенные устройства:\n", - "SUBSCRIPTION_CONNECTED_DEVICES_FOOTER": "
", - "SUBSCRIPTION_CONNECT_LINK_SECTION": "🔗 Ссылка для подключения:\n{subscription_url}", - "SUBSCRIPTION_CONNECT_LINK_PROMPT": "📱 Скопируйте ссылку и добавьте в ваше VPN приложение", - "SUBSCRIPTION_IMPORT_LINK_SECTION": "🔗 Ваша ссылка для импорта в VPN приложение:\n{subscription_url}", - "SUBSCRIPTION_IMPORT_INSTRUCTION_PROMPT": "📱 Нажмите кнопку ниже, чтобы получить инструкцию по настройке VPN на вашем устройстве", - "SUBSCRIPTION_HAPP_LINK_PROMPT": "🔒 Ссылка на подписку создана. Нажмите кнопку \"Подключиться\" ниже, чтобы открыть её в Happ.", - "BACK_TO_MAIN_MENU_BUTTON": "⬅️ В главное меню", - "CUSTOM_MINIAPP_URL_NOT_SET": "⚠ Кастомная ссылка для мини-приложения не настроена", - "SUBSCRIPTION_LINK_GENERATING_NOTICE": "{purchase_text}\n\nСсылка генерируется, перейдите в раздел 'Моя подписка' через несколько секунд.", - "SUBSCRIPTION_NO_ACTIVE_LINK": "⚠ У вас нет активной подписки или ссылка еще генерируется", - "SUBSCRIPTION_CONNECT_MINIAPP_MESSAGE": "📱 Подключить подписку\n\n🚀 Нажмите кнопку ниже, чтобы открыть подписку в мини-приложении Telegram:", - "SUBSCRIPTION_CONNECT_CUSTOM_MESSAGE": "🚀 Подключить подписку\n\n📱 Нажмите кнопку ниже, чтобы открыть приложение:", - "SUBSCRIPTION_CONNECT_LINK_MESSAGE": "🚀 Подключить подписку\n\n🔗 Нажмите кнопку ниже, чтобы открыть ссылку подписки:", - "SUBSCRIPTION_CONNECT_DEVICE_MESSAGE": "📱 Подключить подписку\n\n🔗 Ссылка подписки:\n{subscription_url}\n\n💡 Выберите ваше устройство для получения подробной инструкции по настройке:", - "SUBSCRIPTION_LINK_UNAVAILABLE": "❌ Ссылка подписки недоступна", - "SUBSCRIPTION_DEVICE_APPS_NOT_FOUND": "❌ Приложения для этого устройства не найдены", - "SUBSCRIPTION_DEVICE_GUIDE_TITLE": "📱 Настройка для {device_name}", - "SUBSCRIPTION_HAPP_OPEN_TITLE": "🔗 Подключение через Happ", - "SUBSCRIPTION_HAPP_OPEN_LINK": "🔓 Открыть ссылку в Happ", - "SUBSCRIPTION_HAPP_OPEN_HINT": "💡 Если ссылка не открывается автоматически, скопируйте её вручную: {subscription_link}", - "SUBSCRIPTION_HAPP_OPEN_BUTTON_HINT": "▶️ Нажмите кнопку \"Подключиться\" ниже, чтобы открыть Happ и добавить подписку автоматически.", - "SUBSCRIPTION_DEVICE_LINK_TITLE": "🔗 Ссылка подписки:", - "SUBSCRIPTION_DEVICE_FEATURED_APP": "📋 Рекомендуемое приложение: {app_name}", - "SUBSCRIPTION_DEVICE_STEP_INSTALL_TITLE": "Шаг 1 - Установка:", - "SUBSCRIPTION_DEVICE_STEP_ADD_TITLE": "Шаг 2 - Добавление подписки:", - "SUBSCRIPTION_DEVICE_STEP_CONNECT_TITLE": "Шаг 3 - Подключение:", - "SUBSCRIPTION_DEVICE_HOW_TO_TITLE": "💡 Как подключить:", - "SUBSCRIPTION_DEVICE_HOW_TO_STEP1": "1. Установите приложение по ссылке выше", - "SUBSCRIPTION_DEVICE_HOW_TO_STEP2": "2. Скопируйте ссылку подписки (нажмите на неё)", - "SUBSCRIPTION_DEVICE_HOW_TO_STEP3": "3. Откройте приложение и вставьте ссылку", - "SUBSCRIPTION_DEVICE_HOW_TO_STEP4": "4. Подключитесь к серверу", - "SUBSCRIPTION_APPS_TITLE": "📱 Приложения для {device_name}", - "SUBSCRIPTION_APPS_PROMPT": "Выберите приложение для подключения:", - "SUBSCRIPTION_APP_NOT_FOUND": "❌ Приложение не найдено", - "SUBSCRIPTION_SPECIFIC_APP_TITLE": "📱 {app_name} - {device_name}", - "SUBSCRIPTION_ADDITIONAL_STEP_TITLE": "{title}:", - "SUBSCRIPTION_LINK_USAGE_TITLE": "📱 Как использовать:", - "SUBSCRIPTION_LINK_STEP1": "1. Нажмите на ссылку выше чтобы её скопировать", - "SUBSCRIPTION_LINK_STEP2": "2. Откройте ваше VPN приложение", - "SUBSCRIPTION_LINK_STEP3": "3. Найдите функцию \"Добавить подписку\" или \"Import\"", - "SUBSCRIPTION_LINK_STEP4": "4. Вставьте скопированную ссылку", - "SUBSCRIPTION_LINK_HINT": "💡 Если ссылка не скопировалась, выделите её вручную и скопируйте.", - "REFERRAL_PROGRAM_TITLE": "👥 Реферальная программа", - "REFERRAL_STATS_HEADER": "📊 Ваша статистика:", - "REFERRAL_STATS_INVITED": "• Приглашено пользователей: {count}", - "REFERRAL_STATS_FIRST_TOPUPS": "• Сделали первое пополнение: {count}", - "REFERRAL_STATS_ACTIVE": "• Активных рефералов: {count}", - "REFERRAL_STATS_CONVERSION": "• Конверсия: {rate}%", - "REFERRAL_STATS_TOTAL_EARNED": "• Заработано всего: {amount}", - "REFERRAL_STATS_MONTH_EARNED": "• За последний месяц: {amount}", - "REFERRAL_REWARDS_HEADER": "🎁 Как работают награды:", - "REFERRAL_REWARD_NEW_USER": "• Новый пользователь получает: {bonus} при первом пополнении от {minimum}", - "REFERRAL_REWARD_INVITER": "• Вы получаете при первом пополнении реферала: {bonus}", - "REFERRAL_REWARD_COMMISSION": "• Комиссия с каждого пополнения реферала: {percent}%", - "REFERRAL_LINK_TITLE": "🔗 Ваша реферальная ссылка:", - "REFERRAL_CODE_TITLE": "🆔 Ваш код: {code}", - "REFERRAL_RECENT_EARNINGS_HEADER": "💰 Последние начисления:", - "REFERRAL_EARNING_REASON_FIRST_TOPUP": "🎉 Первое пополнение", - "REFERRAL_EARNING_REASON_COMMISSION_TOPUP": "💰 Комиссия с пополнения", - "REFERRAL_EARNING_REASON_COMMISSION_PURCHASE": "💰 Комиссия с покупки", - "REFERRAL_RECENT_EARNINGS_ITEM": "• {reason}: {amount} от {referral_name}", - "REFERRAL_EARNINGS_BY_TYPE_HEADER": "📈 Доходы по типам:", - "REFERRAL_EARNINGS_FIRST_TOPUPS": "• Бонусы за первые пополнения: {count} ({amount})", - "REFERRAL_EARNINGS_TOPUPS": "• Комиссии с пополнений: {count} ({amount})", - "REFERRAL_EARNINGS_PURCHASES": "• Комиссии с покупок: {count} ({amount})", - "REFERRAL_INVITE_FOOTER": "📢 Приглашайте друзей и зарабатывайте!", - "REFERRAL_LINK_CAPTION": "🔗 Ваша реферальная ссылка:\n{link}", - "REFERRAL_LIST_EMPTY": "📋 У вас пока нет рефералов.\n\nПоделитесь своей реферальной ссылкой, чтобы начать зарабатывать!", - "REFERRAL_LIST_HEADER": "👥 Ваши рефералы (стр. {current}/{total})", - "REFERRAL_LIST_ITEM_HEADER": "{index}. {status} {name}", - "REFERRAL_LIST_ITEM_TOPUPS": " {emoji} Пополнений: {count}", - "REFERRAL_LIST_ITEM_EARNED": " 💎 Заработано с него: {amount}", - "REFERRAL_LIST_ITEM_REGISTERED": " 📅 Регистрация: {days} дн. назад", - "REFERRAL_LIST_ITEM_ACTIVITY": " 🕐 Активность: {days} дн. назад", - "REFERRAL_LIST_ITEM_ACTIVITY_LONG_AGO": " 🕐 Активность: давно", - "REFERRAL_LIST_PREV_PAGE": "⬅️ Назад", - "REFERRAL_LIST_NEXT_PAGE": "Вперед ➡️", - "REFERRAL_ANALYTICS_TITLE": "📊 Аналитика рефералов", - "REFERRAL_ANALYTICS_EARNINGS_HEADER": "💰 Доходы по периодам:", - "REFERRAL_ANALYTICS_EARNINGS_TODAY": "• Сегодня: {amount}", - "REFERRAL_ANALYTICS_EARNINGS_WEEK": "• За неделю: {amount}", - "REFERRAL_ANALYTICS_EARNINGS_MONTH": "• За месяц: {amount}", - "REFERRAL_ANALYTICS_EARNINGS_QUARTER": "• За квартал: {amount}", - "REFERRAL_ANALYTICS_TOP_TITLE": "🏆 Топ-{count} рефералов:", - "REFERRAL_ANALYTICS_TOP_ITEM": "{index}. {name}: {amount} ({count} начислений)", - "REFERRAL_ANALYTICS_FOOTER": "📈 Продолжайте развивать свою реферальную сеть!", - "REFERRAL_INVITE_TITLE": "🎉 Присоединяйся к VPN сервису!", - "REFERRAL_INVITE_BONUS": "💎 При первом пополнении от {minimum} ты получишь {bonus} бонусом на баланс!", - "REFERRAL_INVITE_FEATURE_FAST": "🚀 Быстрое подключение", - "REFERRAL_INVITE_FEATURE_SERVERS": "🌍 Серверы по всему миру", - "REFERRAL_INVITE_FEATURE_SECURE": "🔒 Надежная защита", - "REFERRAL_INVITE_LINK_PROMPT": "👇 Переходи по ссылке:", - "REFERRAL_SHARE_BUTTON": "📤 Поделиться", - "REFERRAL_INVITE_CREATED_TITLE": "📝 Приглашение создано!", - "REFERRAL_INVITE_CREATED_INSTRUCTION": "Нажмите кнопку «📤 Поделиться» чтобы отправить приглашение в любой чат, или скопируйте текст ниже:", - "PAYMENT_METHODS_ONLY_SUPPORT": "💳 Способы пополнения баланса\n\n⚠️ В данный момент автоматические способы оплаты временно недоступны.\nОбратитесь в техподдержку для пополнения баланса.\n\nВыберите способ пополнения:", - "PAYMENT_METHODS_TITLE": "💳 Способы пополнения баланса", - "PAYMENT_METHODS_PROMPT": "Выберите удобный для вас способ оплаты:", - "PAYMENT_METHODS_FOOTER": "Выберите способ пополнения:", - "PAYMENT_METHOD_STARS_NAME": "⭐ Telegram Stars", - "PAYMENT_METHOD_STARS_DESCRIPTION": "быстро и удобно", - "PAYMENT_METHOD_YOOKASSA_NAME": "💳 Банковская карта", - "PAYMENT_METHOD_YOOKASSA_DESCRIPTION": "через YooKassa", - "PAYMENT_METHOD_TRIBUTE_NAME": "💳 Банковская карта", - "PAYMENT_METHOD_TRIBUTE_DESCRIPTION": "через Tribute", - "PAYMENT_METHOD_MULENPAY_NAME": "💳 Банковская карта (Mulen Pay)", - "PAYMENT_METHOD_MULENPAY_DESCRIPTION": "через Mulen Pay", - "PAYMENT_METHOD_PAL24_NAME": "💳 Банковская карта (PayPalych)", - "PAYMENT_METHOD_PAL24_DESCRIPTION": "через PayPalych", - "PAYMENT_METHOD_CRYPTOBOT_NAME": "🪙 Криптовалюта", - "PAYMENT_METHOD_CRYPTOBOT_DESCRIPTION": "через CryptoBot", - "PAYMENT_METHOD_SUPPORT_NAME": "🛠️ Через поддержку", - "PAYMENT_METHOD_SUPPORT_DESCRIPTION": "другие способы", - "PAYMENT_METHODS_UNAVAILABLE_ALERT": "⚠️ В данный момент автоматические способы оплаты временно недоступны. Для пополнения баланса обратитесь в техподдержку.", - "TRIAL_INACTIVE_1H": "⏳ Прошёл час, а подключение не выполнено\n\nЕсли возникли сложности — откройте инструкцию и следуйте шагам. Мы всегда готовы помочь!", - "TRIAL_INACTIVE_24H": "⏳ Прошли сутки с начала теста\n\nМы не видим трафика по вашей подписке. Загляните в инструкцию или напишите в поддержку — поможем подключиться!", - "SUBSCRIPTION_EXPIRED_1D": "⛔ Подписка закончилась\n\nДоступ был отключён {end_date}. Продлите подписку, чтобы вернуть полный доступ.\n\n💎 Стоимость продления: {price}", - "SUBSCRIPTION_EXPIRED_SECOND_WAVE": "🔥 Скидка {percent}% на продление\n\nНажмите «Получить скидку», и мы начислим {bonus} на ваш баланс. Предложение действительно до {expires_at}.", - "SUBSCRIPTION_EXPIRED_THIRD_WAVE": "🎁 Индивидуальная скидка {percent}%\n\nПрошло {trigger_days} дней без подписки. Вернитесь — нажмите «Получить скидку», и {bonus} поступит на баланс. Предложение действительно до {expires_at}.", - "DISCOUNT_CLAIM_SUCCESS": "🎉 Скидка {percent}% активирована! На баланс начислено {amount}.", - "DISCOUNT_CLAIM_ALREADY": "ℹ️ Скидка уже была активирована ранее.", - "DISCOUNT_CLAIM_EXPIRED": "⚠️ Время действия предложения истекло.", - "DISCOUNT_CLAIM_NOT_FOUND": "❌ Предложение не найдено.", - "DISCOUNT_CLAIM_ERROR": "❌ Не удалось начислить скидку. Попробуйте позже.", - "DISCOUNT_BONUS_DESCRIPTION": "Скидка за продление подписки", - "NOTIFICATION_VALUE_INVALID": "❌ Некорректное значение, укажите число.", - "NOTIFICATION_VALUE_UPDATED": "✅ Настройки обновлены.", - "NOTIFY_PROMPT_SECOND_PERCENT": "Введите новый процент скидки для уведомления через 2-3 дня (0-100):", - "NOTIFY_PROMPT_SECOND_HOURS": "Введите количество часов действия скидки (1-168):", - "NOTIFY_PROMPT_THIRD_PERCENT": "Введите новый процент скидки для позднего предложения (0-100):", - "NOTIFY_PROMPT_THIRD_HOURS": "Введите количество часов действия скидки (1-168):", - "NOTIFY_PROMPT_THIRD_DAYS": "Через сколько дней после истечения отправлять предложение? (минимум 2):" + "ACCESS_DENIED": "❌ Доступ запрещен", + "ADDON_INSUFFICIENT_FUNDS_MESSAGE": "⚠️ Недостаточно средств\n\nСтоимость услуги: {required}\nНа балансе: {balance}\nНе хватает: {missing}\n\nВыберите способ пополнения. Сумма подставится автоматически.", + "ADD_COUNTRIES_BUTTON": "🌐 Добавить страны", + "ADMIN_CAMPAIGNS": "📣 Рекламные кампании", + "ADMIN_MAIN_MENU": "🏠 Главное меню", + "ADMIN_MESSAGES": "📨 Рассылки", + "ADMIN_MONITORING": "🔍 Мониторинг", + "ADMIN_MONITORING_SETTINGS": "⚙️ Настройки мониторинга", + "ADMIN_PANEL": "\n⚙️ Административная панель\n\nВыберите раздел для управления:\n", + "ADMIN_PROMOCODES": "🎫 Промокоды", + "ADMIN_PROMO_GROUPS": "💳 Промогруппы", + "ADMIN_PROMO_GROUPS_DEFAULT_LABEL": " (базовая)", + "ADMIN_PROMO_GROUPS_DISCOUNTS": "Скидки — серверы: {servers}%, трафик: {traffic}%, устройства: {devices}%", + "ADMIN_PROMO_GROUPS_EMPTY": "Промогруппы не найдены.", + "ADMIN_PROMO_GROUPS_MEMBERS_COUNT": "Участников: {count}", + "ADMIN_PROMO_GROUPS_SUMMARY": "Всего групп: {count}\nВсего участников: {members}", + "ADMIN_PROMO_GROUPS_TITLE": "💳 Промогруппы", + "ADMIN_PROMO_GROUP_ADDON_DISCOUNTS_DISABLED": "Скидки на докупку доп. услуг: отключены", + "ADMIN_PROMO_GROUP_ADDON_DISCOUNTS_ENABLED": "Скидки на докупку доп. услуг: включены", + "ADMIN_PROMO_GROUP_ADDON_DISCOUNT_DISABLED_VALUE": "отключены", + "ADMIN_PROMO_GROUP_ADDON_DISCOUNT_ENABLED_VALUE": "включены", + "ADMIN_PROMO_GROUP_AUTO_ASSIGN_DISABLED": "Автовыдача по суммарным тратам: отключена", + "ADMIN_PROMO_GROUP_AUTO_ASSIGN_LINE": "Автовыдача по суммарным тратам: от {amount} ₽", + "ADMIN_PROMO_GROUP_CREATED": "Промогруппа «{name}» создана.", + "ADMIN_PROMO_GROUP_CREATED_BACK_BUTTON": "↩️ К промогруппам", + "ADMIN_PROMO_GROUP_CREATE_ADDON_DISCOUNT_PROMPT": "Включать скидки на докупку доп. услуг при действующих скидках? (да/нет)", + "ADMIN_PROMO_GROUP_CREATE_AUTO_ASSIGN_PROMPT": "Введите сумму общих трат (в ₽) для автоматической выдачи этой группы. Отправьте 0, чтобы отключить.", + "ADMIN_PROMO_GROUP_CREATE_DEVICES_PROMPT": "Введите скидку на устройства (0-100):", + "ADMIN_PROMO_GROUP_CREATE_NAME_PROMPT": "Введите название новой промогруппы:", + "ADMIN_PROMO_GROUP_CREATE_PERIOD_PROMPT": "Введите скидки на периоды подписки (например, 30:10, 90:15). Отправьте 0, если без скидок.", + "ADMIN_PROMO_GROUP_CREATE_SERVERS_PROMPT": "Введите скидку на серверы (0-100):", + "ADMIN_PROMO_GROUP_CREATE_TRAFFIC_PROMPT": "Введите скидку на трафик (0-100):", + "ADMIN_PROMO_GROUP_DELETED": "Промогруппа «{name}» удалена.", + "ADMIN_PROMO_GROUP_DELETE_BUTTON": "🗑️ Удалить", + "ADMIN_PROMO_GROUP_DELETE_CONFIRM": "Удалить промогруппу «{name}»? Все пользователи будут переведены в базовую группу.", + "ADMIN_PROMO_GROUP_DELETE_FORBIDDEN": "Базовую промогруппу нельзя удалить.", + "ADMIN_PROMO_GROUP_DETAILS_DEFAULT": "Это базовая группа.", + "ADMIN_PROMO_GROUP_DETAILS_MEMBERS": "Участников: {count}", + "ADMIN_PROMO_GROUP_DETAILS_TITLE": "💳 Промогруппа: {name}", + "ADMIN_PROMO_GROUP_EDIT_ADDON_DISCOUNT_PROMPT": "Включать скидки на докупку доп. услуг? Текущее значение: {current}.", + "ADMIN_PROMO_GROUP_EDIT_AUTO_ASSIGN_PROMPT": "Введите сумму общих трат (в ₽) для автовыдачи. Текущее значение: {current}.", + "ADMIN_PROMO_GROUP_EDIT_BUTTON": "✏️ Изменить", + "ADMIN_PROMO_GROUP_EDIT_DEVICES_PROMPT": "Введите новую скидку на устройства (0-100). Текущее значение: {current}.", + "ADMIN_PROMO_GROUP_EDIT_FIELD_ADDON_DISCOUNTS": "🛒 Скидки на доп. услуги", + "ADMIN_PROMO_GROUP_EDIT_FIELD_AUTO_ASSIGN": "🤖 Автовыдача по тратам", + "ADMIN_PROMO_GROUP_EDIT_FIELD_DEVICES": "📱 Скидка на устройства", + "ADMIN_PROMO_GROUP_EDIT_FIELD_NAME": "✏️ Изменить название", + "ADMIN_PROMO_GROUP_EDIT_FIELD_PERIODS": "⏳ Скидки по периодам", + "ADMIN_PROMO_GROUP_EDIT_FIELD_SERVERS": "🖥 Скидка на серверы", + "ADMIN_PROMO_GROUP_EDIT_FIELD_TRAFFIC": "🌐 Скидка на трафик", + "ADMIN_PROMO_GROUP_EDIT_MENU_HINT": "Выберите параметр для изменения:", + "ADMIN_PROMO_GROUP_EDIT_MENU_TITLE": "✏️ Настройки промогруппы «{name}»", + "ADMIN_PROMO_GROUP_EDIT_NAME_PROMPT": "Введите новое название промогруппы (текущее: {name}):", + "ADMIN_PROMO_GROUP_EDIT_PERIOD_PROMPT": "Введите новые скидки на периоды (текущие: {current}). Отправьте 0, если без скидок.", + "ADMIN_PROMO_GROUP_EDIT_SERVERS_PROMPT": "Введите новую скидку на серверы (0-100). Текущее значение: {current}.", + "ADMIN_PROMO_GROUP_EDIT_TRAFFIC_PROMPT": "Введите новую скидку на трафик (0-100). Текущее значение: {current}.", + "ADMIN_PROMO_GROUP_INVALID_ADDON_DISCOUNT": "Введите «да» или «нет».", + "ADMIN_PROMO_GROUP_INVALID_AUTO_ASSIGN": "Введите неотрицательное число в рублях или 0 для отключения.", + "ADMIN_PROMO_GROUP_INVALID_NAME": "Название не может быть пустым.", + "ADMIN_PROMO_GROUP_INVALID_PERCENT": "Введите число от 0 до 100.", + "ADMIN_PROMO_GROUP_INVALID_PERIOD_DISCOUNTS": "Введите пары период:скидка через запятую, например 30:10, 90:15, или 0.", + "ADMIN_PROMO_GROUP_MEMBERS_BUTTON": "👥 Участники", + "ADMIN_PROMO_GROUP_MEMBERS_EMPTY": "В этой группе пока нет участников.", + "ADMIN_PROMO_GROUP_MEMBERS_TITLE": "👥 Участники группы {name}", + "ADMIN_PROMO_GROUP_PERIOD_DISCOUNTS_HEADER": "⏳ Скидки по периодам:", + "ADMIN_PROMO_GROUP_UPDATED": "Промогруппа «{name}» обновлена.", + "ADMIN_REFERRALS": "🤝 Партнерка", + "ADMIN_REMNAWAVE": "🖥️ Remnawave", + "ADMIN_REPORTS": "📊 Отчеты", + "ADMIN_RULES": "📋 Правила", + "ADMIN_STATISTICS": "📊 Статистика", + "ADMIN_SUBSCRIPTIONS": "📱 Подписки", + "ADMIN_TICKETS_TITLE": "🎫 Все тикеты поддержки:", + "ADMIN_TICKET_REPLY_INPUT": "Введите ответ от поддержки:", + "ADMIN_TICKET_REPLY_SENT": "✅ Ответ отправлен!", + "ADMIN_USERS": "👥 Пользователи", + "ADMIN_USER_PROMO_GROUP_ADDON_DISCOUNT_LINE": "Скидки на доп. услуги при докупке: {status}", + "ADMIN_USER_PROMO_GROUP_ADDON_DISCOUNT_NONE": "Скидки на доп. услуги при докупке: —", + "ADMIN_USER_PROMO_GROUP_ALREADY": "ℹ️ Пользователь уже состоит в этой промогруппе.", + "ADMIN_USER_PROMO_GROUP_BACK": "⬅️ К пользователю", + "ADMIN_USER_PROMO_GROUP_BUTTON": "👥 Промогруппа", + "ADMIN_USER_PROMO_GROUP_CURRENT": "Текущая группа: {name}", + "ADMIN_USER_PROMO_GROUP_CURRENT_NONE": "Текущая группа: не назначена", + "ADMIN_USER_PROMO_GROUP_DISCOUNTS": "Скидки — серверы: {servers}%, трафик: {traffic}%, устройства: {devices}%, докупка: {addons}", + "ADMIN_USER_PROMO_GROUP_DISCOUNTS_NONE": "Скидки не заданы.", + "ADMIN_USER_PROMO_GROUP_ERROR": "❌ Не удалось обновить промогруппу пользователя.", + "ADMIN_USER_PROMO_GROUP_SELECT": "Выберите промогруппу для назначения:", + "ADMIN_USER_PROMO_GROUP_TITLE": "👥 Промогруппа пользователя", + "ADMIN_USER_PROMO_GROUP_UPDATED": "✅ Промогруппа пользователя обновлена: «{name}»", + "ALREADY_REGISTERED_REFERRAL": "ℹ️ Вы уже зарегистрированы в системе. Реферальная ссылка не может быть применена.", + "ATTACHMENTS_SENT": "✅ Вложения отправлены.", + "AUTOPAY_BUTTON": "💳 Автоплатёж", + "AUTOPAY_DISABLED_TEXT": "Отключен - не забудьте продлить вручную!", + "AUTOPAY_ENABLED_TEXT": "Включен - подписка продлится автоматически", + "AUTOPAY_FAILED": "\n❌ Ошибка автоплатежа\n\nНе удалось списать средства для продления подписки.\nНедостаточно средств на балансе: {balance}\nТребуется: {required}\n\nПополните баланс и продлите подписку вручную.\n", + "AUTOPAY_SET_DAYS_BUTTON": "⚙️ Настроить дни", + "AUTOPAY_SUCCESS": "\n✅ Автоплатеж выполнен\n\nВаша подписка автоматически продлена на {days} дней.\nСписано с баланса: {amount}\n", + "BACK": "⬅️ Назад", + "BACK_TO_MAIN_MENU_BUTTON": "⬅️ В главное меню", + "BACK_TO_MENU": "🏠 В главное меню", + "BACK_TO_SUBSCRIPTION": "⬅️ К подписке", + "BACK_TO_SUPPORT": "⬅️ К поддержке", + "BACK_TO_TICKETS": "⬅️ К тикетам", + "BALANCE_BUTTON": "💰 Баланс: {balance}", + "BALANCE_BUTTON_DEFAULT": "💰 Баланс: {balance}", + "BALANCE_BUTTON_ZERO": "💰 Баланс: 0 ₽", + "BALANCE_HISTORY": "📊 История операций", + "BALANCE_INFO": "\n💰 Баланс: {balance}\n\nВыберите действие:\n", + "BALANCE_SUPPORT_REQUEST": "🛠️ Запрос через поддержку", + "BALANCE_TOPUP": "💳 Пополнить баланс", + "BALANCE_TOP_UP": "💳 Пополнить", + "BLOCK_BY_TIME": "⏳ Блокировка по времени", + "BLOCK_FOREVER": "🚫 Заблокировать", + "BUY_SUBSCRIPTION_START": "\n💎 Настройка подписки\n\nДавайте настроим вашу подписку под ваши потребности.\n\nСначала выберите период подписки:\n", + "CAMPAIGN_BONUS_BALANCE": "🎉 Вы получили {amount} за регистрацию по кампании «{name}»!", + "CAMPAIGN_BONUS_SUBSCRIPTION": "🎉 Вам выдана подписка на {days} д. (трафик: {traffic}, устройств: {devices}) по кампании «{name}»!", + "CAMPAIGN_EXISTING_USER": "ℹ️ Эта рекламная ссылка доступна только новым пользователям.", + "CANCEL": "❌ Отмена", + "CANCEL_REPLY": "❌ Отменить ответ", + "CANCEL_TICKET_CREATION": "❌ Отменить создание тикета", + "CHANGE_DEVICES_BUTTON": "📱 Изменить устройства", + "CHANGE_DEVICES_CONFIRM": "\n 📱 Подтверждение изменения\n\n Текущее количество: {current_devices} устройств\n Новое количество: {new_devices} устройств\n\n Действие: {action}\n 💰 {cost}\n\n Подтвердить изменение?\n ", + "CHANGE_DEVICES_INFO": "\n 📱 Изменение количества устройств\n\n Текущий лимит: {current_devices} устройств\n\n Выберите новое количество устройств:\n\n 💡 Важно:\n • При увеличении - доплата пропорционально оставшемуся времени\n • При уменьшении - возврат средств не производится\n ", + "CHANGE_DEVICES_SUCCESS_DECREASE": "\n ✅ Количество устройств уменьшено!\n\n 📱 Было: {old_count} → Стало: {new_count}\n ℹ️ Возврат средств не производится\n ", + "CHANGE_DEVICES_SUCCESS_INCREASE": "\n ✅ Количество устройств увеличено!\n\n 📱 Было: {old_count} → Стало: {new_count}\n 💰 Списано: {amount}\n ", + "CHANGE_DEVICES_TITLE": "📱 Изменение количества устройств", + "CHANNEL_CHECK_BUTTON": "✅ Я подписался", + "CHANNEL_REQUIRED_TEXT": "🔒 Для использования бота подпишитесь на новостной канал, а затем нажмите кнопку ниже.", + "CHANNEL_SUBSCRIBE_BUTTON": "🔗 Подписаться", + "CHANNEL_SUBSCRIBE_REQUIRED_ALERT": "❌ Вы не подписались на канал!", + "CHANNEL_SUBSCRIBE_THANKS": "✅ Спасибо за подписку", + "CHECK_STATUS_BUTTON": "📊 Проверить статус", + "CHOOSE_ANOTHER_DEVICE": "📱 Выбрать другое устройство", + "CLOSED_TICKETS": "🟢 Закрытые", + "CLOSED_TICKETS_HEADER": "🟢 Закрытые тикеты", + "CLOSE_NOTIFICATION": "❌ Закрыть уведомление", + "CLOSE_TICKET": "🔒 Закрыть тикет", + "CONFIRM": "✅ Подтвердить", + "CONFIRM_CHANGE_BUTTON": "✅ Подтвердить изменение", + "CONNECT_BUTTON": "🔗 Подключиться", + "CONTACT_SUPPORT": "💬 Написать в поддержку", + "CONTACT_SUPPORT_BUTTON": "💬 Связаться с поддержкой", + "CONTINUE": "➡️ Продолжить", + "CONTINUE_BUTTON": "✅ Продолжить", + "COPY_SUBSCRIPTION_LINK": "📋 Скопировать ссылку подписки", + "CREATE_INVITE": "📝 Создать приглашение", + "CREATE_INVITE_BUTTON": "📝 Создать приглашение", + "CREATE_TICKET_BUTTON": "🎫 Создать тикет", + "CUSTOM_MINIAPP_URL_NOT_SET": "⚠ Кастомная ссылка для мини-приложения не настроена", + "DELETE_MESSAGE": "🗑 Удалить", + "DEVICES_INSUFFICIENT_BALANCE": "⚠️ Недостаточно средств!\nТребуется: {required} (за {months} мес)\nУ вас: {balance}", + "DEVICES_LIMIT_EXCEEDED": "⚠️ Превышен максимальный лимит устройств ({limit})", + "DEVICES_MINIMUM_LIMIT": "⚠️ Минимальное количество устройств: {limit}", + "DEVICES_NO_CHANGE": "ℹ️ Количество устройств не изменилось", + "DEVICE_CONNECTION_HELP": "❓ Как подключить устройство заново?", + "DEVICE_GUIDE_ANDROID": "🤖 Android", + "DEVICE_GUIDE_ANDROID_TV": "📺 Android TV", + "DEVICE_GUIDE_IOS": "📱 iOS (iPhone/iPad)", + "DEVICE_GUIDE_MAC": "🎯 macOS", + "DEVICE_GUIDE_WINDOWS": "💻 Windows", + "DISABLE_BUTTON": "❌ Выключить", + "DISCOUNT_BONUS_DESCRIPTION": "Скидка за продление подписки", + "DISCOUNT_CLAIM_ALREADY": "ℹ️ Скидка уже была активирована ранее.", + "DISCOUNT_CLAIM_ERROR": "❌ Не удалось начислить скидку. Попробуйте позже.", + "DISCOUNT_CLAIM_EXPIRED": "⚠️ Время действия предложения истекло.", + "DISCOUNT_CLAIM_NOT_FOUND": "❌ Предложение не найдено.", + "DISCOUNT_CLAIM_SUCCESS": "🎉 Скидка {percent}% активирована! На баланс начислено {amount}.", + "ENABLE_BUTTON": "✅ Включить", + "ENTER_BLOCK_MINUTES": "Введите количество минут для блокировки пользователя (например, 15):", + "ERROR": "❌ Произошла ошибка", + "ERROR_RULES_RETRY": "Произошла ошибка. Попробуйте принять правила еще раз:", + "ERROR_TRY_AGAIN": "❌ Произошла ошибка. Попробуйте еще раз.", + "GO_TO_BALANCE_TOP_UP": "💳 Перейти к пополнению баланса", + "HAPP_DOWNLOAD_BUTTON": "⬇️ Скачать Happ", + "HAPP_DOWNLOAD_LINK_MESSAGE": "⬇️ Скачайте Happ для {platform}:", + "HAPP_DOWNLOAD_LINK_NOT_SET": "❌ Ссылка для этого устройства не настроена", + "HAPP_DOWNLOAD_OPEN_LINK": "🔗 Открыть ссылку", + "HAPP_DOWNLOAD_PROMPT": "📥 Скачать Happ\nВыберите ваше устройство:", + "HAPP_PLATFORM_ANDROID": "🤖 Android", + "HAPP_PLATFORM_IOS": "🍎 iOS", + "HAPP_PLATFORM_MACOS": "🖥️ Mac OS", + "HAPP_PLATFORM_PC": "💻 ПК", + "HAPP_PLATFORM_WINDOWS": "💻 Windows", + "INSUFFICIENT_BALANCE": "❌ Недостаточно средств на балансе. \n \n Пополните баланс на {amount} и попробуйте снова.\n ", + "INVALID_AMOUNT": "❌ Неверная сумма", + "LANGUAGE_SELECTED": "🌐 Язык интерфейса установлен: Русский", + "LOADING": "⏳ Загрузка...", + "MAINTENANCE_MODE_ACTIVE": "\n🔧 Технические работы!\n\nСервис временно недоступен. Ведутся технические работы по улучшению качества обслуживания.\n\n⏰ Ориентировочное время завершения: неизвестно\n🔄 Попробуйте позже\n\nПриносим извинения за временные неудобства.\n", + "MAINTENANCE_MODE_API_ERROR": "\n🔧 Технические работы!\n\nСервис временно недоступен из-за проблем с подключением к серверам.\n\n⏰ Мы работаем над восстановлением. Попробуйте через несколько минут.\n\n🔄 Последняя проверка: {last_check}\n", + "MAIN_MENU": "👤 {user_name}\n \n📱 Подписка: {subscription_status}\n\nВыберите действие:\n", + "MAIN_MENU_ACTION_PROMPT": "Выберите действие:", + "MAIN_MENU_BUTTON": "🏠 Главное меню", + "MANAGE_DEVICES_BUTTON": "🔧 Управление устройствами", + "MARK_AS_ANSWERED": "✅ Отметить как отвеченный", + "MENU_ADMIN": "⚙️ Админ-панель", + "MENU_BALANCE": "💰 Баланс", + "MENU_BUY_SUBSCRIPTION": "💎 Купить подписку", + "MENU_EXTEND_SUBSCRIPTION": "⏰ Продлить подписку", + "MENU_LANGUAGE": "🌐 Язык", + "MENU_PROMOCODE": "🎫 Промокод", + "MENU_REFERRALS": "🤝 Партнерка", + "MENU_RULES": "📋 Правила сервиса", + "MENU_SUBSCRIPTION": "📱 Подписка", + "MENU_SUPPORT": "🛠️ Техподдержка", + "MENU_TRIAL": "🧪 Тестовая подписка", + "MULENPAY_PAYMENT_ERROR": "❌ Ошибка создания платежа Mulen Pay. Попробуйте позже или обратитесь в поддержку.", + "MULENPAY_PAYMENT_INSTRUCTIONS": "💳 Оплата через Mulen Pay\n\n💰 Сумма: {amount}\n🆔 ID платежа: {payment_id}\n\n📱 Инструкция:\n1. Нажмите кнопку ‘Оплатить через Mulen Pay’\n2. Следуйте подсказкам платежной системы\n3. Подтвердите перевод\n4. Средства зачислятся автоматически\n\n❓ Если возникнут проблемы, обратитесь в {support}", + "MULENPAY_PAY_BUTTON": "💳 Оплатить через Mulen Pay", + "MULENPAY_TOPUP_PROMPT": "💳 Оплата через Mulen Pay\n\nВведите сумму для пополнения от 100 до 100 000 ₽.\nОплата происходит через защищенную платформу Mulen Pay.", + "MY_BALANCE_BUTTON": "💰 Мой баланс", + "MY_SUBSCRIPTION_BUTTON": "📱 Моя подписка", + "MY_TICKETS_BUTTON": "📋 Мои тикеты", + "MY_TICKETS_TITLE": "📋 Ваши тикеты:", + "NO": "❌ Нет", + "NOTIFICATION_CLOSED": "Уведомление закрыто.", + "NOTIFICATION_VALUE_INVALID": "❌ Некорректное значение, укажите число.", + "NOTIFICATION_VALUE_UPDATED": "✅ Настройки обновлены.", + "NOTIFY_PROMPT_SECOND_HOURS": "Введите количество часов действия скидки (1-168):", + "NOTIFY_PROMPT_SECOND_PERCENT": "Введите новый процент скидки для уведомления через 2-3 дня (0-100):", + "NOTIFY_PROMPT_THIRD_DAYS": "Через сколько дней после истечения отправлять предложение? (минимум 2):", + "NOTIFY_PROMPT_THIRD_HOURS": "Введите количество часов действия скидки (1-168):", + "NOTIFY_PROMPT_THIRD_PERCENT": "Введите новый процент скидки для позднего предложения (0-100):", + "NO_ATTACHMENTS": "Вложений нет.", + "NO_SERVERS_AVAILABLE": "❌ Нет доступных серверов", + "NO_TICKETS": "У вас пока нет тикетов.", + "NO_TICKETS_ADMIN": "Нет тикетов для отображения.", + "NO_TRAFFIC_PACKAGES": "❌ Нет доступных пакетов", + "OPEN_TICKETS": "🔴 Открытые", + "OPEN_TICKETS_HEADER": "🔴 Открытые тикеты", + "OPERATION_CANCELLED": "❌ Операция отменена", + "OTHER_APPS_BUTTON": "📋 Другие приложения", + "PAGINATION_NEXT": "➡️", + "PAGINATION_PREV": "⬅️", + "PAL24_PAYMENT_ERROR": "❌ Ошибка создания платежа PayPalych. Попробуйте позже или обратитесь в поддержку.", + "PAL24_PAYMENT_INSTRUCTIONS": "💳 Оплата через PayPalych\n\n💰 Сумма: {amount}\n🆔 ID счета: {bill_id}\n\n📱 Инструкция:\n1. Нажмите кнопку ‘Оплатить через PayPalych’\n2. Следуйте подсказкам платежной системы\n3. Подтвердите перевод\n4. Средства зачислятся автоматически\n\n❓ Если возникнут проблемы, обратитесь в {support}", + "PAL24_PAY_BUTTON": "💳 Оплатить через PayPalych", + "PAL24_TOPUP_PROMPT": "💳 Оплата через PayPalych\n\nВведите сумму для пополнения от 100 до 1 000 000 ₽.\nОплата проходит через защищенную платформу PayPalych.", + "PAYMENTS_TEMPORARILY_UNAVAILABLE": "⚠️ Способы оплаты временно недоступны", + "PAYMENT_CARD_MULENPAY": "💳 Банковская карта (Mulen Pay)", + "PAYMENT_CARD_PAL24": "💳 Банковская карта (PayPalych)", + "PAYMENT_CARD_TRIBUTE": "💳 Банковская карта (Tribute)", + "PAYMENT_CARD_YOOKASSA": "💳 Банковская карта (YooKassa)", + "PAYMENT_CRYPTOBOT": "🪙 Криптовалюта (CryptoBot)", + "PAYMENT_METHODS_FOOTER": "Выберите способ пополнения:", + "PAYMENT_METHODS_ONLY_SUPPORT": "💳 Способы пополнения баланса\n\n⚠️ В данный момент автоматические способы оплаты временно недоступны.\nОбратитесь в техподдержку для пополнения баланса.\n\nВыберите способ пополнения:", + "PAYMENT_METHODS_PROMPT": "Выберите удобный для вас способ оплаты:", + "PAYMENT_METHODS_TITLE": "💳 Способы пополнения баланса", + "PAYMENT_METHODS_UNAVAILABLE_ALERT": "⚠️ В данный момент автоматические способы оплаты временно недоступны. Для пополнения баланса обратитесь в техподдержку.", + "PAYMENT_METHOD_CRYPTOBOT_DESCRIPTION": "через CryptoBot", + "PAYMENT_METHOD_CRYPTOBOT_NAME": "🪙 Криптовалюта", + "PAYMENT_METHOD_MULENPAY_DESCRIPTION": "через Mulen Pay", + "PAYMENT_METHOD_MULENPAY_NAME": "💳 Банковская карта (Mulen Pay)", + "PAYMENT_METHOD_PAL24_DESCRIPTION": "через PayPalych", + "PAYMENT_METHOD_PAL24_NAME": "💳 Банковская карта (PayPalych)", + "PAYMENT_METHOD_STARS_DESCRIPTION": "быстро и удобно", + "PAYMENT_METHOD_STARS_NAME": "⭐ Telegram Stars", + "PAYMENT_METHOD_SUPPORT_DESCRIPTION": "другие способы", + "PAYMENT_METHOD_SUPPORT_NAME": "🛠️ Через поддержку", + "PAYMENT_METHOD_TRIBUTE_DESCRIPTION": "через Tribute", + "PAYMENT_METHOD_TRIBUTE_NAME": "💳 Банковская карта", + "PAYMENT_METHOD_YOOKASSA_DESCRIPTION": "через YooKassa", + "PAYMENT_METHOD_YOOKASSA_NAME": "💳 Банковская карта", + "PAYMENT_SBP_YOOKASSA": "🏬 Оплатить по СБП (YooKassa)", + "PAYMENT_TELEGRAM_STARS": "⭐ Telegram Stars", + "PAYMENT_VIA_SUPPORT": "🛠️ Через поддержку", + "PAY_NOW_BUTTON": "💳 Оплатить", + "PAY_WITH_COINS_BUTTON": "🪙 Оплатить", + "PENDING_CANCEL_BUTTON": "⌛ Отмена", + "PERIOD_14_DAYS": "📅 14 дней - {settings.format_price(settings.PRICE_14_DAYS)}", + "PERIOD_180_DAYS": "📅 180 дней - {settings.format_price(settings.PRICE_180_DAYS)}", + "PERIOD_30_DAYS": "📅 30 дней - {settings.format_price(settings.PRICE_30_DAYS)}", + "PERIOD_360_DAYS": "📅 360 дней - {settings.format_price(settings.PRICE_360_DAYS)}", + "PERIOD_60_DAYS": "📅 60 дней - {settings.format_price(settings.PRICE_60_DAYS)}", + "PERIOD_90_DAYS": "📅 90 дней - {settings.format_price(settings.PRICE_90_DAYS)}", + "POST_REGISTRATION_TRIAL_BUTTON": "🚀 Подключиться бесплатно 🚀", + "PROMOCODE_EMPTY_INPUT": "❌ Введите корректный промокод", + "PROMOCODE_ENTER": "🎫 Введите промокод:", + "PROMOCODE_EXPIRED": "❌ Промокод истек", + "PROMOCODE_INVALID": "❌ Неверный промокод", + "PROMOCODE_SUCCESS": "🎉 Промокод активирован! {description}", + "PROMOCODE_USED": "❌ Промокод уже использован", + "PROMO_GROUP_DISCOUNTS_HEADER": "🎁 Скидки вашей промогруппы", + "PROMO_GROUP_DISCOUNT_DEVICES": "📱 Доп. устройства: {percent}%", + "PROMO_GROUP_DISCOUNT_SERVERS": "🌍 Серверы: {percent}%", + "PROMO_GROUP_DISCOUNT_TRAFFIC": "📊 Трафик: {percent}%", + "PROMO_GROUP_PERIOD_DISCOUNTS_HEADER": "⏳ Скидки за длительный период:", + "PROMO_GROUP_PERIOD_DISCOUNT_ITEM": "{period} — {percent}%", + "REFERRAL_ANALYTICS_BUTTON": "📊 Аналитика", + "REFERRAL_ANALYTICS_EARNINGS_HEADER": "💰 Доходы по периодам:", + "REFERRAL_ANALYTICS_EARNINGS_MONTH": "• За месяц: {amount}", + "REFERRAL_ANALYTICS_EARNINGS_QUARTER": "• За квартал: {amount}", + "REFERRAL_ANALYTICS_EARNINGS_TODAY": "• Сегодня: {amount}", + "REFERRAL_ANALYTICS_EARNINGS_WEEK": "• За неделю: {amount}", + "REFERRAL_ANALYTICS_FOOTER": "📈 Продолжайте развивать свою реферальную сеть!", + "REFERRAL_ANALYTICS_TITLE": "📊 Аналитика рефералов", + "REFERRAL_ANALYTICS_TOP_ITEM": "{index}. {name}: {amount} ({count} начислений)", + "REFERRAL_ANALYTICS_TOP_TITLE": "🏆 Топ-{count} рефералов:", + "REFERRAL_CODE_ACCEPTED": "✅ Реферальный код принят!", + "REFERRAL_CODE_APPLIED": "🎁 Реферальный код применен! Вы получите бонус после первой покупки.", + "REFERRAL_CODE_INVALID": "❌ Неверный реферальный код", + "REFERRAL_CODE_INVALID_HELP": "❌ Неверный реферальный код.\n\n💡 Если у вас есть реферальный код, убедитесь что он введен правильно.\n⏭️ Для продолжения регистрации без реферального кода используйте команду /start", + "REFERRAL_CODE_QUESTION": "\n🤝 У вас есть реферальный код от друга?\n\nЕсли у вас есть промокод или реферальная ссылка от друга, введите её сейчас, чтобы получить бонус!\n\nВведите код или нажмите \"Пропустить\":\n", + "REFERRAL_CODE_SKIP": "⏭️ Пропустить", + "REFERRAL_CODE_TITLE": "🆔 Ваш код: {code}", + "REFERRAL_EARNINGS_BY_TYPE_HEADER": "📈 Доходы по типам:", + "REFERRAL_EARNINGS_FIRST_TOPUPS": "• Бонусы за первые пополнения: {count} ({amount})", + "REFERRAL_EARNINGS_PURCHASES": "• Комиссии с покупок: {count} ({amount})", + "REFERRAL_EARNINGS_TOPUPS": "• Комиссии с пополнений: {count} ({amount})", + "REFERRAL_EARNING_REASON_COMMISSION_PURCHASE": "💰 Комиссия с покупки", + "REFERRAL_EARNING_REASON_COMMISSION_TOPUP": "💰 Комиссия с пополнения", + "REFERRAL_EARNING_REASON_FIRST_TOPUP": "🎉 Первое пополнение", + "REFERRAL_INFO": "\n🤝 Реферальная программа\n\n👥 Приглашено: {referrals_count} друзей\n💰 Заработано: {earned_amount}\n\n🔗 Ваша реферальная ссылка:\n{referral_link}\n\n🎫 Ваш промокод:\n{referral_code}\n\n💰 Условия:\n• За каждого друга: {registration_bonus}\n• Процент с пополнений: {commission_percent}%\n", + "REFERRAL_INVITE_BONUS": "💎 При первом пополнении от {minimum} ты получишь {bonus} бонусом на баланс!", + "REFERRAL_INVITE_CREATED_INSTRUCTION": "Нажмите кнопку «📤 Поделиться» чтобы отправить приглашение в любой чат, или скопируйте текст ниже:", + "REFERRAL_INVITE_CREATED_TITLE": "📝 Приглашение создано!", + "REFERRAL_INVITE_FEATURE_FAST": "🚀 Быстрое подключение", + "REFERRAL_INVITE_FEATURE_SECURE": "🔒 Надежная защита", + "REFERRAL_INVITE_FEATURE_SERVERS": "🌍 Серверы по всему миру", + "REFERRAL_INVITE_FOOTER": "📢 Приглашайте друзей и зарабатывайте!", + "REFERRAL_INVITE_LINK_PROMPT": "👇 Переходи по ссылке:", + "REFERRAL_INVITE_MESSAGE": "\n🎯 Приглашение в VPN сервис\n\nПривет! Приглашаю тебя в отличный VPN сервис!\n\n🎁 По моей ссылке ты получишь бонус: {bonus}\n\n🔗 Переходи: {link}\n🎫 Или используй промокод: {code}\n\n💪 Быстро, надежно, недорого!\n", + "REFERRAL_INVITE_TITLE": "🎉 Присоединяйся к VPN сервису!", + "REFERRAL_LINK_CAPTION": "🔗 Ваша реферальная ссылка:\n{link}", + "REFERRAL_LINK_TITLE": "🔗 Ваша реферальная ссылка:", + "REFERRAL_LIST_BUTTON": "👥 Список рефералов", + "REFERRAL_LIST_EMPTY": "📋 У вас пока нет рефералов.\n\nПоделитесь своей реферальной ссылкой, чтобы начать зарабатывать!", + "REFERRAL_LIST_HEADER": "👥 Ваши рефералы (стр. {current}/{total})", + "REFERRAL_LIST_ITEM_ACTIVITY": " 🕐 Активность: {days} дн. назад", + "REFERRAL_LIST_ITEM_ACTIVITY_LONG_AGO": " 🕐 Активность: давно", + "REFERRAL_LIST_ITEM_EARNED": " 💎 Заработано с него: {amount}", + "REFERRAL_LIST_ITEM_HEADER": "{index}. {status} {name}", + "REFERRAL_LIST_ITEM_REGISTERED": " 📅 Регистрация: {days} дн. назад", + "REFERRAL_LIST_ITEM_TOPUPS": " {emoji} Пополнений: {count}", + "REFERRAL_LIST_NEXT_PAGE": "Вперед ➡️", + "REFERRAL_LIST_PREV_PAGE": "⬅️ Назад", + "REFERRAL_PROGRAM_TITLE": "👥 Реферальная программа", + "REFERRAL_RECENT_EARNINGS_HEADER": "💰 Последние начисления:", + "REFERRAL_RECENT_EARNINGS_ITEM": "• {reason}: {amount} от {referral_name}", + "REFERRAL_REWARDS_HEADER": "🎁 Как работают награды:", + "REFERRAL_REWARD_COMMISSION": "• Комиссия с каждого пополнения реферала: {percent}%", + "REFERRAL_REWARD_INVITER": "• Вы получаете при первом пополнении реферала: {bonus}", + "REFERRAL_REWARD_NEW_USER": "• Новый пользователь получает: {bonus} при первом пополнении от {minimum}", + "REFERRAL_SHARE_BUTTON": "📤 Поделиться", + "REFERRAL_STATS_ACTIVE": "• Активных рефералов: {count}", + "REFERRAL_STATS_CONVERSION": "• Конверсия: {rate}%", + "REFERRAL_STATS_FIRST_TOPUPS": "• Сделали первое пополнение: {count}", + "REFERRAL_STATS_HEADER": "📊 Ваша статистика:", + "REFERRAL_STATS_INVITED": "• Приглашено пользователей: {count}", + "REFERRAL_STATS_MONTH_EARNED": "• За последний месяц: {amount}", + "REFERRAL_STATS_TOTAL_EARNED": "• Заработано всего: {amount}", + "REGISTRATION_COMPLETING": "✅ Завершаем регистрацию...", + "REPLY_TO_TICKET": "💬 Ответить", + "REPORT_CLOSE": "❌ Закрыть", + "REPORT_CLOSED": "✅ Отчет закрыт.", + "REPORT_CLOSE_ERROR": "❌ Не удалось закрыть отчет.", + "RESET_ALL_DEVICES_BUTTON": "🔄 Сбросить все устройства", + "RESET_DEVICE_CONFIRM_BUTTON": "✅ Да, сбросить это устройство", + "RESET_TRAFFIC_BUTTON": "🔄 Сбросить трафик", + "RETURN_TO_SUBSCRIPTION_CHECKOUT": "⬅️ Вернуться к оформлению подписки", + "RULES_ACCEPT": "✅ Принимаю правила", + "RULES_ACCEPTED_PROCESSING": "✅ Правила приняты! Завершаем регистрацию...", + "RULES_DECLINE": "❌ Не принимаю", + "RULES_HEADER": "📋 Правила сервиса", + "RULES_REQUIRED": "❗️ Для использования сервиса необходимо принять правила!", + "RULES_TEXT_DEFAULT": "📋 Правила использования сервиса\n\n1. Запрещено использовать сервис для противоправной деятельности\n2. Не распространяйте пиратский или вредоносный контент\n3. Запрещены спам и фишинг\n4. Нельзя использовать сервис для DDoS-атак\n5. Один аккаунт предназначен для одного пользователя\n6. Возвраты возможны только в исключительных случаях\n7. Администрация может заблокировать аккаунт при нарушении правил\n\nИспользуя сервис, вы подтверждаете согласие с этими правилами.", + "SELECT_COUNTRIES": "Выберите страны:", + "SELECT_DEVICES": "Количество устройств:", + "SELECT_PERIOD": "Выберите период:", + "SELECT_TRAFFIC": "Выберите пакет трафика:", + "SENDING_ATTACHMENTS": "📎 Отправляю вложения...", + "SEND_CONTACT_BUTTON": "📱 Отправить контакт", + "SEND_LOCATION_BUTTON": "📍 Отправить геолокацию", + "SHOW_QR_BUTTON": "📱 Показать QR код", + "SHOW_SUBSCRIPTION_LINK": "📋 Показать ссылку подписки", + "SKIP_BUTTON": "⏭️ Пропустить", + "STARS_PAYMENT_ENROLLMENT_ERROR": "❌ Произошла ошибка при зачислении средств. Обратитесь в поддержку, платеж будет проверен вручную.", + "STARS_PAYMENT_PROCESSING_ERROR": "❌ Техническая ошибка при обработке платежа. Обратитесь в поддержку для решения проблемы.", + "STARS_PAYMENT_SUCCESS": "🎉 Платеж успешно обработан!\n\n⭐ Потрачено звезд: {stars_spent}\n💰 Зачислено на баланс: {amount} ₽\n🆔 ID транзакции: {transaction_id}...\n\nСпасибо за пополнение! 🚀", + "STARS_PAYMENT_USER_NOT_FOUND": "❌ Ошибка: пользователь не найден. Обратитесь в поддержку.", + "STARS_PRECHECK_INVALID_PAYLOAD": "Ошибка валидации платежа. Попробуйте еще раз.", + "STARS_PRECHECK_TECHNICAL_ERROR": "Техническая ошибка. Попробуйте позже.", + "STARS_PRECHECK_USER_NOT_FOUND": "Пользователь не найден. Обратитесь в поддержку.", + "SUBSCRIPTION_ACTIVE": "✅ Активна", + "SUBSCRIPTION_ADDITIONAL_STEP_TITLE": "{title}:", + "SUBSCRIPTION_APPS_PROMPT": "Выберите приложение для подключения:", + "SUBSCRIPTION_APPS_TITLE": "📱 Приложения для {device_name}", + "SUBSCRIPTION_APP_NOT_FOUND": "❌ Приложение не найдено", + "SUBSCRIPTION_CONNECTED_DEVICES_FOOTER": "
", + "SUBSCRIPTION_CONNECTED_DEVICES_TITLE": "
📱 Подключенные устройства:\n", + "SUBSCRIPTION_CONNECT_CUSTOM_MESSAGE": "🚀 Подключить подписку\n\n📱 Нажмите кнопку ниже, чтобы открыть приложение:", + "SUBSCRIPTION_CONNECT_DEVICE_MESSAGE": "📱 Подключить подписку\n\n🔗 Ссылка подписки:\n{subscription_url}\n\n💡 Выберите ваше устройство для получения подробной инструкции по настройке:", + "SUBSCRIPTION_CONNECT_LINK_MESSAGE": "🚀 Подключить подписку\n\n🔗 Нажмите кнопку ниже, чтобы открыть ссылку подписки:", + "SUBSCRIPTION_CONNECT_LINK_PROMPT": "📱 Скопируйте ссылку и добавьте в ваше VPN приложение", + "SUBSCRIPTION_CONNECT_LINK_SECTION": "🔗 Ссылка для подключения:\n{subscription_url}", + "SUBSCRIPTION_CONNECT_MINIAPP_MESSAGE": "📱 Подключить подписку\n\n🚀 Нажмите кнопку ниже, чтобы открыть подписку в мини-приложении Telegram:", + "SUBSCRIPTION_DEVICE_APPS_NOT_FOUND": "❌ Приложения для этого устройства не найдены", + "SUBSCRIPTION_DEVICE_FEATURED_APP": "📋 Рекомендуемое приложение: {app_name}", + "SUBSCRIPTION_DEVICE_GUIDE_TITLE": "📱 Настройка для {device_name}", + "SUBSCRIPTION_DEVICE_HOW_TO_STEP1": "1. Установите приложение по ссылке выше", + "SUBSCRIPTION_DEVICE_HOW_TO_STEP2": "2. Скопируйте ссылку подписки (нажмите на неё)", + "SUBSCRIPTION_DEVICE_HOW_TO_STEP3": "3. Откройте приложение и вставьте ссылку", + "SUBSCRIPTION_DEVICE_HOW_TO_STEP4": "4. Подключитесь к серверу", + "SUBSCRIPTION_DEVICE_HOW_TO_TITLE": "💡 Как подключить:", + "SUBSCRIPTION_DEVICE_LINK_TITLE": "🔗 Ссылка подписки:", + "SUBSCRIPTION_DEVICE_STEP_ADD_TITLE": "Шаг 2 - Добавление подписки:", + "SUBSCRIPTION_DEVICE_STEP_CONNECT_TITLE": "Шаг 3 - Подключение:", + "SUBSCRIPTION_DEVICE_STEP_INSTALL_TITLE": "Шаг 1 - Установка:", + "SUBSCRIPTION_EXPIRED": "\n❌ Подписка истекла\n\nВаша подписка истекла. Для восстановления доступа продлите подписку.\n", + "SUBSCRIPTION_EXPIRED_1D": "⛔ Подписка закончилась\n\nДоступ был отключён {end_date}. Продлите подписку, чтобы вернуть полный доступ.\n\n💎 Стоимость продления: {price}", + "SUBSCRIPTION_EXPIRED_SECOND_WAVE": "🔥 Скидка {percent}% на продление\n\nНажмите «Получить скидку», и мы начислим {bonus} на ваш баланс. Предложение действительно до {expires_at}.", + "SUBSCRIPTION_EXPIRED_THIRD_WAVE": "🎁 Индивидуальная скидка {percent}%\n\nПрошло {trigger_days} дней без подписки. Вернитесь — нажмите «Получить скидку», и {bonus} поступит на баланс. Предложение действительно до {expires_at}.", + "SUBSCRIPTION_EXPIRING": "\n⚠️ Подписка истекает!\n\nВаша подписка истекает через {days} дней.\n\nНе забудьте продлить подписку, чтобы не потерять доступ к серверам.\n", + "SUBSCRIPTION_EXPIRING_PAID": "\n⚠️ Подписка истекает через {days_text}!\n\nВаша платная подписка истекает {end_date}.\n\n💳 Автоплатеж: {autopay_status}\n\n{action_text}\n", + "SUBSCRIPTION_EXTEND": "💎 Продлить подписку", + "SUBSCRIPTION_HAPP_LINK_PROMPT": "🔒 Ссылка на подписку создана. Нажмите кнопку \"Подключиться\" ниже, чтобы открыть её в Happ.", + "SUBSCRIPTION_HAPP_OPEN_BUTTON_HINT": "▶️ Нажмите кнопку \"Подключиться\" ниже, чтобы открыть Happ и добавить подписку автоматически.", + "SUBSCRIPTION_HAPP_OPEN_HINT": "💡 Если ссылка не открывается автоматически, скопируйте её вручную: {subscription_link}", + "SUBSCRIPTION_HAPP_OPEN_LINK": "🔓 Открыть ссылку в Happ", + "SUBSCRIPTION_HAPP_OPEN_TITLE": "🔗 Подключение через Happ", + "SUBSCRIPTION_IMPORT_INSTRUCTION_PROMPT": "📱 Нажмите кнопку ниже, чтобы получить инструкцию по настройке VPN на вашем устройстве", + "SUBSCRIPTION_IMPORT_LINK_SECTION": "🔗 Ваша ссылка для импорта в VPN приложение:\n{subscription_url}", + "SUBSCRIPTION_INFO": "\n📱 Информация о подписке\n\n📊 Статус: {status}\n🎭 Тип: {type}\n📅 Действует до: {end_date}\n⏰ Осталось дней: {days_left}\n\n📈 Трафик: {traffic_used} / {traffic_limit}\n🌍 Серверы: {countries_count} стран\n📱 Устройства: {devices_used} / {devices_limit}\n\n💳 Автоплатеж: {autopay_status}\n", + "SUBSCRIPTION_LINK_GENERATING_NOTICE": "{purchase_text}\n\nСсылка генерируется, перейдите в раздел 'Моя подписка' через несколько секунд.", + "SUBSCRIPTION_LINK_HINT": "💡 Если ссылка не скопировалась, выделите её вручную и скопируйте.", + "SUBSCRIPTION_LINK_STEP1": "1. Нажмите на ссылку выше чтобы её скопировать", + "SUBSCRIPTION_LINK_STEP2": "2. Откройте ваше VPN приложение", + "SUBSCRIPTION_LINK_STEP3": "3. Найдите функцию \"Добавить подписку\" или \"Import\"", + "SUBSCRIPTION_LINK_STEP4": "4. Вставьте скопированную ссылку", + "SUBSCRIPTION_LINK_UNAVAILABLE": "❌ Ссылка подписки недоступна", + "SUBSCRIPTION_LINK_USAGE_TITLE": "📱 Как использовать:", + "SUBSCRIPTION_NONE": "❌ Нет активной подписки", + "SUBSCRIPTION_NOT_FOUND": "❌ Подписка не найдена", + "SUBSCRIPTION_NO_ACTIVE_LINK": "⚠ У вас нет активной подписки или ссылка еще генерируется", + "SUBSCRIPTION_NO_SERVERS": "Нет серверов", + "SUBSCRIPTION_OVERVIEW_TEMPLATE": "👤 {full_name}\n💰 Баланс: {balance}\n📱 Подписка: {status_emoji} {status_display}{warning}\n\n📱 Информация о подписке\n🎭 Тип: {subscription_type}\n📅 Действует до: {end_date}\n⏰ Осталось: {time_left}\n📈 Трафик: {traffic}\n🌍 Серверы: {servers}\n📱 Устройства: {devices_used} / {device_limit}", + "SUBSCRIPTION_PURCHASED": "🎉 Подписка успешно приобретена!", + "SUBSCRIPTION_SETTINGS_BUTTON": "⚙️ Настройки подписки", + "SUBSCRIPTION_SPECIFIC_APP_TITLE": "📱 {app_name} - {device_name}", + "SUBSCRIPTION_STATUS_ACTIVE": "Активна", + "SUBSCRIPTION_STATUS_EXPIRED": "Истекла", + "SUBSCRIPTION_STATUS_TRIAL": "Тестовая", + "SUBSCRIPTION_STATUS_UNKNOWN": "Неизвестно", + "SUBSCRIPTION_SUMMARY": "\n📋 Итоговая конфигурация\n\n📅 Период: {period} дней\n📈 Трафик: {traffic}\n🌍 Страны: {countries}\n📱 Устройства: {devices}\n\n💰 Итого к оплате: {total_price}\n\nПодтвердить покупку?\n", + "SUBSCRIPTION_TIME_LEFT_DAYS": "{days} дн.", + "SUBSCRIPTION_TIME_LEFT_EXPIRED": "истёк", + "SUBSCRIPTION_TIME_LEFT_HOURS": "{hours} ч.", + "SUBSCRIPTION_TIME_LEFT_MINUTES": "{minutes} мин.", + "SUBSCRIPTION_TRAFFIC_LIMITED": "{used} / {limit} ГБ", + "SUBSCRIPTION_TRAFFIC_UNLIMITED": "∞ (безлимит) | Использовано: {used} ГБ", + "SUBSCRIPTION_TRIAL": "🧪 Тестовая подписка", + "SUBSCRIPTION_TYPE_PAID": "Платная", + "SUBSCRIPTION_TYPE_TRIAL": "Триал", + "SUBSCRIPTION_WARNING_MINUTES": "\n🔴 истекает через несколько минут!", + "SUBSCRIPTION_WARNING_TODAY": "\n⚠️ истекает сегодня!", + "SUBSCRIPTION_WARNING_TOMORROW": "\n⚠️ истекает завтра!", + "SUB_STATUS_ACTIVE_FEW_DAYS": "💎 Активна\n⚠️ истекает через {days} дн.", + "SUB_STATUS_ACTIVE_LONG": "💎 Активна\n📅 до {end_date} ({days} дн.)", + "SUB_STATUS_ACTIVE_TODAY": "💎 Активна\n⚠️ истекает сегодня!", + "SUB_STATUS_ACTIVE_TOMORROW": "💎 Активна\n⚠️ истекает завтра!", + "SUB_STATUS_EXPIRED": "🔴 Истекла\n📅 {end_date}", + "SUB_STATUS_NONE": "❌ Отсутствует", + "SUB_STATUS_TRIAL_ACTIVE": "🎁 Тестовая подписка\n📅 до {end_date} ({days} дн.)", + "SUB_STATUS_TRIAL_TODAY": "🎁 Тестовая подписка\n⚠️ истекает сегодня!", + "SUB_STATUS_TRIAL_TOMORROW": "🎁 Тестовая подписка\n⚠️ истекает завтра!", + "SUCCESS": "✅ Успешно", + "SUPPORT_BUTTON": "🆘 Поддержка", + "SUPPORT_INFO": "\n🛠️ Техническая поддержка\n\nПо всем вопросам обращайтесь к нашей поддержке:\n\n👤 {settings.SUPPORT_USERNAME}\n\nМы поможем с:\n• Настройкой подключения\n• Решением технических проблем \n• Вопросами по оплате\n• Другими вопросами\n\n⏰ Время ответа: обычно в течение 1-2 часов\n", + "SWITCH_TRAFFIC_BUTTON": "🔄 Переключить трафик", + "SWITCH_TRAFFIC_CONFIRM": "\n🔄 Подтверждение переключения трафика\n\nТекущий лимит: {current_traffic}\nНовый лимит: {new_traffic}\n\nДействие: {action}\n💰 {cost}\n\nПодтвердить переключение?\n", + "SWITCH_TRAFFIC_INFO": "\n🔄 Переключение лимита трафика\n\nТекущий лимит: {current_traffic}\nВыберите новый лимит трафика:\n\n💡 Важно:\n• При увеличении - доплата за разницу пропорционально оставшемуся времени\n• При уменьшении - возврат средств не производится\n• Счетчик использованного трафика НЕ сбрасывается\n", + "SWITCH_TRAFFIC_SUCCESS_DECREASE": "\n✅ Лимит трафика уменьшен!\n\n📊 Было: {old_traffic} → Стало: {new_traffic}\nℹ️ Возврат средств не производится\n", + "SWITCH_TRAFFIC_SUCCESS_INCREASE": "\n✅ Лимит трафика увеличен!\n\n📊 Было: {old_traffic} → Стало: {new_traffic}\n💰 Списано: {amount}\n", + "SWITCH_TRAFFIC_TITLE": "🔄 Переключение лимита трафика", + "TICKET_ATTACHMENTS": "📎 Вложения", + "TICKET_CLOSED": "✅ Тикет закрыт.", + "TICKET_CLOSE_ERROR": "❌ Ошибка при закрытии тикета.", + "TICKET_CREATED_SUCCESS": "✅ Тикет #{ticket_id} успешно создан!\n\nЗаголовок: {title}\n\nМы ответим вам в ближайшее время.", + "TICKET_CREATION_CANCELLED": "Создание тикета отменено.", + "TICKET_CREATION_ERROR": "❌ Произошла ошибка при создании тикета. Попробуйте позже.", + "TICKET_MARKED_ANSWERED": "✅ Тикет отмечен как отвеченный.", + "TICKET_MESSAGE_INPUT": "Опишите проблему (до 500 символов) или отправьте фото c подписью:", + "TICKET_MESSAGE_TOO_SHORT": "Сообщение должно содержать минимум 10 символов. Попробуйте еще раз:", + "TICKET_NOT_FOUND": "Тикет не найден.", + "TICKET_PRIORITY_HIGH": "🟠 Высокий", + "TICKET_PRIORITY_LOW": "🟢 Низкий", + "TICKET_PRIORITY_NORMAL": "🟡 Обычный", + "TICKET_PRIORITY_SELECT": "Выберите приоритет тикета:", + "TICKET_PRIORITY_URGENT": "🔴 Срочный", + "TICKET_REPLY_CANCELLED": "Ответ отменен.", + "TICKET_REPLY_ERROR": "❌ Произошла ошибка при отправке ответа. Попробуйте позже.", + "TICKET_REPLY_INPUT": "Введите ваш ответ:", + "TICKET_REPLY_NOTIFICATION": "🎫 Получен ответ по тикету #{ticket_id}\n\n{reply_preview}\n\nНажмите кнопку ниже, чтобы перейти к тикету:", + "TICKET_REPLY_SENT": "✅ Ваш ответ отправлен!", + "TICKET_REPLY_TOO_SHORT": "Ответ должен содержать минимум 5 символов. Попробуйте еще раз:", + "TICKET_STATUS_ANSWERED": "Отвечен", + "TICKET_STATUS_CLOSED": "Закрыт", + "TICKET_STATUS_OPEN": "Открыт", + "TICKET_STATUS_PENDING": "В ожидании", + "TICKET_TITLE_INPUT": "Введите заголовок тикета:", + "TICKET_TITLE_TOO_LONG": "Заголовок слишком длинный. Максимум 255 символов. Попробуйте еще раз:", + "TICKET_TITLE_TOO_SHORT": "Заголовок должен содержать минимум 5 символов. Попробуйте еще раз:", + "TICKET_UPDATE_ERROR": "❌ Ошибка при обновлении тикета.", + "TOPUP_BALANCE_BUTTON": "💳 Попол\\у043Dить баланс", + "TOP_UP_AMOUNT": "💳 Введите сумму для пополнения (в рублях):", + "TOP_UP_METHODS": "\n💳 Выберите способ оплаты\n\nСумма: {amount}\n", + "TOP_UP_STARS": "⭐ Telegram Stars", + "TOP_UP_TRIBUTE": "💎 Банковская карта", + "TRAFFIC_100GB": "📊 100 ГБ - {settings.format_price(settings.PRICE_TRAFFIC_100GB)}", + "TRAFFIC_10GB": "📊 10 ГБ - {settings.format_price(settings.PRICE_TRAFFIC_10GB)}", + "TRAFFIC_250GB": "📊 250 ГБ - {settings.format_price(settings.PRICE_TRAFFIC_250GB)}", + "TRAFFIC_25GB": "📊 25 ГБ - {settings.format_price(settings.PRICE_TRAFFIC_25GB)}", + "TRAFFIC_50GB": "📊 50 ГБ - {settings.format_price(settings.PRICE_TRAFFIC_50GB)}", + "TRAFFIC_5GB": "📊 5 ГБ - {settings.format_price(settings.PRICE_TRAFFIC_5GB)}", + "TRAFFIC_INSUFFICIENT_BALANCE": "⚠️ Недостаточно средств!\nТребуется: {required} (за {months} мес)\nУ вас: {balance}", + "TRAFFIC_NO_CHANGE": "ℹ️ Лимит трафика не изменился", + "TRAFFIC_PACKAGES_NOT_CONFIGURED": "⚠️ Пакеты трафика не настроены", + "TRAFFIC_UNLIMITED": "📊 Безлимит - {settings.format_price(settings.PRICE_TRAFFIC_UNLIMITED)}", + "TRIAL_ACTIVATED": "🎉 Тестовая подписка активирована!", + "TRIAL_ACTIVATE_BUTTON": "🎁 Активировать", + "TRIAL_ALREADY_USED": "❌ Тестовая подписка уже была использована", + "TRIAL_AVAILABLE": "\n🎁 Тестовая подписка\n\nВы можете получить бесплатную тестовую подписку:\n\n⏰ Период: {days} дней\n📈 Трафик: {traffic} ГБ\n📱 Устройства: {devices} шт.\n🌍 Сервер: {server_name}\n\nАктивировать тестовую подписку?\n", + "TRIAL_ENDING_SOON": "\n🎁 Тестовая подписка скоро закончится!\n\nВаша тестовая подписка истекает через несколько часов.\n\n💎 Не хотите остаться без VPN?\nПереходите на полную подписку!\n\n🔥 Специальное предложение:\n• 30 дней всего за {price}\n• Безлимитный трафик \n• Все серверы доступны\n• Скорость до 1ГБит/сек\n\n⚡️ Успейте оформить до окончания тестового периода!\n", + "TRIAL_INACTIVE_1H": "⏳ Прошёл час, а подключение не выполнено\n\nЕсли возникли сложности — откройте инструкцию и следуйте шагам. Мы всегда готовы помочь!", + "TRIAL_INACTIVE_24H": "⏳ Прошли сутки с начала теста\n\nМы не видим трафика по вашей подписке. Загляните в инструкцию или напишите в поддержку — поможем подключиться!", + "UNBLOCK": "✅ Разблокировать", + "UNKNOWN_CALLBACK_ALERT": "❓ Неизвестная команда. Попробуйте ещё раз.", + "UNKNOWN_COMMAND_MESSAGE": "❓ Не понимаю эту команду. Используйте кнопки меню.", + "USER_NOT_FOUND": "❌ Пользователь не найден", + "VIEW_TICKET": "👁️ Посмотреть тикет", + "WELCOME": "\n🎉 Добро пожаловать в VPN сервис!\n\nНаш сервис предоставляет быстрый и безопасный доступ к интернету без ограничений.\n\n🔐 Преимущества:\n• Высокая скорость подключения\n• Серверы в разных странах\n• Надежная защита данных\n• Круглосуточная поддержка\n\nДля начала работы выберите язык интерфейса:\n", + "WELCOME_FALLBACK": "Добро пожаловать, {user_name}!", + "YES": "✅ Да" }