feat: add tariff identification to all notifications for multi-tariff mode

When MULTI_TARIFF_ENABLED=true users can have multiple subscriptions,
so notifications must identify which tariff they relate to.

- Webhook notifications: _notify_user auto-injects tariff_label from
  subscription.tariff.name into all 16 webhook notification strings
- Monitoring service: tariff labels in expired, expiring, trial ending,
  follow-up waves, autopay success/failed notifications
- Daily subscription: tariff in insufficient balance notification
- Recurrent payments: tariff in card autopay success/failed
- Auto-purchase: tariff in all 4 auto-purchase notification paths,
  with pre-captured names to avoid MissingGreenlet after db.commit()
- Channel checker: plural form for multi-subscription deactivation
- Payment providers: tariff in YooKassa and Stars activation messages
- Admin: tariff in bulk expiry reminder
- Localization: {tariff_label} in 20 notification keys across all 5
  locales (ru, en, ua, zh, fa) + _MULTI channel keys
- Fix: selectinload(Subscription.tariff) in trial expiring query
- Fix: capture tariff_name before expire_subscription to prevent
  MissingGreenlet from db.refresh() expiring ORM relationships
This commit is contained in:
Fringg
2026-03-28 19:12:34 +03:00
parent 565c08366b
commit 7dd67e36b3
14 changed files with 307 additions and 146 deletions
+24 -22
View File
@@ -1437,11 +1437,11 @@
"SUBSCRIPTION_DEVICE_STEP_CONNECT_TITLE": "<b>Step 3 - Connect:</b>",
"SUBSCRIPTION_DEVICE_STEP_INSTALL_TITLE": "<b>Step 1 - Install:</b>",
"SUBSCRIPTION_EXPIRED": "\n❌ <b>Subscription expired</b>\n\nYour subscription has ended. Renew it to restore access.\n",
"SUBSCRIPTION_EXPIRED_1D": "⛔ <b>Your subscription expired</b>\n\nAccess was disabled on {end_date}. Renew to return to the service.\n\n💎 Renewal price: {price}",
"SUBSCRIPTION_EXPIRED_SECOND_WAVE": "🔥 <b>{percent}% discount on renewal</b>\n\nActivate the offer to get an additional discount. It stacks with your promo group and is valid until {expires_at}.",
"SUBSCRIPTION_EXPIRED_THIRD_WAVE": "🎁 <b>Personal {percent}% discount</b>\n\nIt's been {trigger_days} days without a subscription. Come back and activate the extra discount — it stacks with your promo group and is valid until {expires_at}.",
"SUBSCRIPTION_EXPIRED_1D": "⛔ <b>Your subscription{tariff_label} expired</b>\n\nAccess was disabled on {end_date}. Renew to return to the service.\n\n💎 Renewal price: {price}",
"SUBSCRIPTION_EXPIRED_SECOND_WAVE": "🔥 <b>{percent}% discount on renewal{tariff_label}</b>\n\nActivate the offer to get an additional discount. It stacks with your promo group and is valid until {expires_at}.",
"SUBSCRIPTION_EXPIRED_THIRD_WAVE": "🎁 <b>Personal {percent}% discount{tariff_label}</b>\n\nIt's been {trigger_days} days without a subscription. Come back and activate the extra discount — it stacks with your promo group and is valid until {expires_at}.",
"SUBSCRIPTION_EXPIRING": "\n⚠️ <b>Subscription expiring!</b>\n\nYour subscription expires in {days} days.\n\nRenew it now so you don't lose access.\n",
"SUBSCRIPTION_EXPIRING_PAID": "\n⚠️ <b>Subscription expires in {days_text}!</b>\n\nYour paid subscription ends on {end_date}.\n\n💳 <b>Autopay:</b> {autopay_status}\n\n{action_text}\n",
"SUBSCRIPTION_EXPIRING_PAID": "\n⚠️ <b>Subscription{tariff_label} expires in {days_text}!</b>\n\nYour paid subscription ends on {end_date}.\n\n💳 <b>Autopay:</b> {autopay_status}\n\n{action_text}\n",
"SUBSCRIPTION_EXTEND": "💎 Extend",
"SUBSCRIPTION_HAPP_CRYPTOLINK_BLOCK": "<blockquote expandable><code>{crypto_link}</code></blockquote>",
"SUBSCRIPTION_HAPP_LINK_PROMPT": "🔒 Subscription link is ready. Tap the \"Connect\" button below to open it in Happ.",
@@ -1467,12 +1467,14 @@
"SUBSCRIPTION_NO_SERVERS": "No servers",
"SUBSCRIPTION_OVERVIEW_TEMPLATE": "👤 {full_name}\n💰 Balance: {balance}\n📱 Subscription: {status_emoji} {status_display}{warning}{tariff_info_block}\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_DAILY_OVERVIEW_TEMPLATE": "👤 {full_name}\n💰 Balance: {balance}\n📱 Subscription: {status_emoji} {status_display}{warning}{tariff_info_block}\n\n📱 Subscription details\n🎭 Type: {subscription_type}\n📈 Traffic: {traffic}\n🌍 Servers: {servers}\n📱 Devices: {devices_used} / {device_limit}",
"SUBSCRIPTION_DEACTIVATED_CHANNEL_UNSUBSCRIBE": "Your subscription has been paused because you left a required channel.\n\nSubscribe to all channels to restore VPN access.",
"SUBSCRIPTION_DEACTIVATED_CHANNEL_UNSUBSCRIBE": "🚫 Your subscription has been paused because you left a required channel.\n\nSubscribe to all channels to restore VPN access.",
"SUBSCRIPTION_DEACTIVATED_CHANNEL_UNSUBSCRIBE_MULTI": "🚫 Your subscriptions have been paused because you left a required channel.\n\nSubscribe to all channels to restore VPN access.",
"SUBSCRIPTION_PROMO_DISCOUNT_HINT": "⚡ Extra {percent}% discount is active and will apply automatically. It stacks with other discounts.",
"SUBSCRIPTION_PROMO_DISCOUNT_NOTE": "⚡ Extra discount {percent}%: -{amount}",
"SUBSCRIPTION_PROMO_DISCOUNT_TIMER": "⏳ Discount active for {time_left}\n<code>{bar}</code>",
"SUBSCRIPTION_PURCHASED": "🎉 Subscription purchased successfully!",
"SUBSCRIPTION_REACTIVATED_CHANNEL_SUBSCRIBE": "Your subscription has been restored!\n\nThank you for subscribing to the channels. VPN is active again.",
"SUBSCRIPTION_REACTIVATED_CHANNEL_SUBSCRIBE": "Your subscription has been restored!\n\nThank you for subscribing to the channels. VPN is active again.",
"SUBSCRIPTION_REACTIVATED_CHANNEL_SUBSCRIBE_MULTI": "✅ Your subscriptions have been restored!\n\nThank you for subscribing to the channels. VPN is active again.",
"SUBSCRIPTION_SETTINGS_BUTTON": "⚙️ Settings",
"SUBSCRIPTION_SETTINGS_OVERVIEW": "⚙️ <b>Subscription settings</b>\n\n📊 <b>Current parameters:</b>\n🌐 Countries: {countries_count}\n📈 Traffic: {traffic_used} / {traffic_limit}\n📱 Devices: {devices_used} / {devices_limit}\n\nChoose what you want to change:",
"SUBSCRIPTION_SETTINGS_PAID_ONLY": "⚠️ Settings are available only for paid subscriptions",
@@ -1736,22 +1738,22 @@
"DAILY_SUBSCRIPTION_PAUSED": "⏸️ Subscription paused",
"DAILY_SUBSCRIPTION_RESUMED": "▶️ Subscription resumed!",
"DAILY_SUBSCRIPTION_RESUMED_AFTER_TOPUP": "✅ <b>Subscription resumed!</b>\n\nYour daily plan «{tariff_name}» has been resumed after balance top-up.\n\n💳 Charged: {amount}\n💰 Remaining: {balance}",
"WEBHOOK_SUB_EXPIRED": "❌ <b>Subscription expired</b>\n\nYour subscription has ended. Renew to restore VPN access.",
"WEBHOOK_SUB_DISABLED": "🚫 <b>Subscription disabled</b>\n\nYour subscription has been disabled by the administrator.",
"WEBHOOK_SUB_ENABLED": "✅ <b>Subscription activated</b>\n\nYour subscription is active again. Enjoy!",
"WEBHOOK_SUB_LIMITED": "⚠️ <b>Traffic limit reached</b>\n\nYou have used all available traffic. Purchase additional traffic or wait for a reset.",
"WEBHOOK_SUB_TRAFFIC_RESET": "🔄 <b>Traffic reset</b>\n\nYour traffic has been reset. Full limit is available again.",
"WEBHOOK_SUB_DELETED": "🗑️ <b>Subscription deleted</b>\n\nYour subscription was deleted from the panel.",
"WEBHOOK_SUB_REVOKED": "🔑 <b>Subscription key updated</b>\n\nYour connection credentials have been updated. Use the new link to connect.",
"WEBHOOK_SUB_EXPIRES_72H": "⏳ <b>Subscription expires in 3 days</b>\n\nDon't forget to renew your subscription to keep VPN access.",
"WEBHOOK_SUB_EXPIRES_48H": "⏳ <b>Subscription expires in 2 days</b>\n\nRenew your subscription in advance to maintain VPN access.",
"WEBHOOK_SUB_EXPIRES_24H": "🔴 <b>Subscription expires tomorrow!</b>\n\nLess than 24 hours left. Renew your subscription now.",
"WEBHOOK_SUB_EXPIRED_24H_AGO": "💤 <b>Subscription expired yesterday</b>\n\nYour subscription has ended. Renew now to restore VPN access.",
"WEBHOOK_SUB_FIRST_CONNECTED": "🎉 <b>First connection!</b>\n\nYou connected to the VPN for the first time. Welcome!",
"WEBHOOK_SUB_BANDWIDTH_THRESHOLD": "📊 <b>{percent}% traffic used</b>\n\nYou have used a significant portion of your traffic. Monitor your usage.",
"WEBHOOK_SUB_EXPIRED": "❌ <b>Subscription{tariff_label} expired</b>\n\nYour subscription has ended. Renew to restore VPN access.",
"WEBHOOK_SUB_DISABLED": "🚫 <b>Subscription{tariff_label} disabled</b>\n\nYour subscription has been disabled by the administrator.",
"WEBHOOK_SUB_ENABLED": "✅ <b>Subscription{tariff_label} activated</b>\n\nYour subscription is active again. Enjoy!",
"WEBHOOK_SUB_LIMITED": "⚠️ <b>Traffic limit reached</b>\n\nYou have used all available traffic for your subscription{tariff_label}. Purchase additional traffic or wait for a reset.",
"WEBHOOK_SUB_TRAFFIC_RESET": "🔄 <b>Traffic reset</b>\n\nTraffic for your subscription{tariff_label} has been reset. Full limit is available again.",
"WEBHOOK_SUB_DELETED": "🗑️ <b>Subscription{tariff_label} deleted</b>\n\nYour subscription was deleted from the panel.",
"WEBHOOK_SUB_REVOKED": "🔑 <b>Subscription{tariff_label} key updated</b>\n\nYour connection credentials have been updated. Use the new link to connect.",
"WEBHOOK_SUB_EXPIRES_72H": "⏳ <b>Subscription{tariff_label} expires in 3 days</b>\n\nDon't forget to renew your subscription to keep VPN access.",
"WEBHOOK_SUB_EXPIRES_48H": "⏳ <b>Subscription{tariff_label} expires in 2 days</b>\n\nRenew your subscription in advance to maintain VPN access.",
"WEBHOOK_SUB_EXPIRES_24H": "🔴 <b>Subscription{tariff_label} expires tomorrow!</b>\n\nLess than 24 hours left. Renew your subscription now.",
"WEBHOOK_SUB_EXPIRED_24H_AGO": "💤 <b>Subscription{tariff_label} expired yesterday</b>\n\nYour subscription has ended. Renew now to restore VPN access.",
"WEBHOOK_SUB_FIRST_CONNECTED": "🎉 <b>First connection!</b>\n\nYou connected to the VPN{tariff_label} for the first time. Welcome!",
"WEBHOOK_SUB_BANDWIDTH_THRESHOLD": "📊 <b>{percent}% traffic used</b>\n\nYou have used a significant portion of traffic for your subscription{tariff_label}. Monitor your usage.",
"WEBHOOK_RENEW_BUTTON": "🔄 Renew subscription",
"WEBHOOK_USER_NOT_CONNECTED": "📡 <b>Not connected yet</b>\n\nYour subscription is active but no VPN connection has been made. Connect to start using the service.",
"WEBHOOK_DEVICE_ADDED": "📱 <b>New device</b>\n\nA new device has been added to your subscription: <code>{device}</code>",
"WEBHOOK_DEVICE_DELETED": "📱 <b>Device removed</b>\n\nA device has been removed from your subscription: <code>{device}</code>",
"WEBHOOK_USER_NOT_CONNECTED": "📡 <b>Not connected yet</b>\n\nYour subscription{tariff_label} is active but no VPN connection has been made. Connect to start using the service.",
"WEBHOOK_DEVICE_ADDED": "📱 <b>New device</b>\n\nA new device has been added to your subscription{tariff_label}: <code>{device}</code>",
"WEBHOOK_DEVICE_DELETED": "📱 <b>Device removed</b>\n\nA device has been removed from your subscription{tariff_label}: <code>{device}</code>",
"WEBHOOK_CLOSE_BUTTON": "✖️ Close"
}
+24 -22
View File
@@ -1458,11 +1458,11 @@
"SUBSCRIPTION_DEVICE_STEP_CONNECT_TITLE": "<b>مرحله ۳ - اتصال:</b>",
"SUBSCRIPTION_DEVICE_STEP_INSTALL_TITLE": "<b>مرحله ۱ - نصب:</b>",
"SUBSCRIPTION_EXPIRED": "❌ <b>اشتراک منقضی شده</b>\n\nبرای ادامه تمدید کنید.",
"SUBSCRIPTION_EXPIRED_1D": "اشتراک دیروز منقضی شد. تمدید کنید!",
"SUBSCRIPTION_EXPIRED_SECOND_WAVE": "🔥 <b>تخفیف {percent}% برای تمدید</b>\n\nپیشنهاد را فعال کنید تا تخفیف اضافی بگیرید. با گروه تخفیف جمع شده و تا {expires_at} اعتبار دارد.",
"SUBSCRIPTION_EXPIRED_THIRD_WAVE": "🎁 <b>تخفیف اختصاصی {percent}%</b>\n\n{trigger_days} روز بدون اشتراک گذشته. برگردید و تخفیف اضافی فعال کنید — با گروه تخفیف جمع شده و تا {expires_at} اعتبار دارد.",
"SUBSCRIPTION_EXPIRED_1D": "⛔ <b>اشتراک{tariff_label} منقضی شد</b>\n\nدسترسی در {end_date} قطع شده است. برای بازگشت به سرویس اشتراک را تمدید کنید.\n\n💎 هزینه تمدید: {price}",
"SUBSCRIPTION_EXPIRED_SECOND_WAVE": "🔥 <b>تخفیف {percent}% برای تمدید{tariff_label}</b>\n\nپیشنهاد را فعال کنید تا تخفیف اضافی بگیرید. با گروه تخفیف جمع شده و تا {expires_at} اعتبار دارد.",
"SUBSCRIPTION_EXPIRED_THIRD_WAVE": "🎁 <b>تخفیف اختصاصی {percent}%{tariff_label}</b>\n\n{trigger_days} روز بدون اشتراک گذشته. برگردید و تخفیف اضافی فعال کنید — با گروه تخفیف جمع شده و تا {expires_at} اعتبار دارد.",
"SUBSCRIPTION_EXPIRING": "⏰ اشتراک به‌زودی منقضی می‌شود!",
"SUBSCRIPTION_EXPIRING_PAID": "\n⚠️ <b>اشتراک تا {days_text} دیگر منقضی می‌شود!</b>\n\nاشتراک پولی شما در تاریخ {end_date} منقضی می‌شود.\n\n💳 <b>پرداخت خودکار:</b> {autopay_status}\n\n{action_text}\n",
"SUBSCRIPTION_EXPIRING_PAID": "\n⚠️ <b>اشتراک{tariff_label} تا {days_text} دیگر منقضی می‌شود!</b>\n\nاشتراک پولی شما در تاریخ {end_date} منقضی می‌شود.\n\n💳 <b>پرداخت خودکار:</b> {autopay_status}\n\n{action_text}\n",
"SUBSCRIPTION_EXTEND": "🔄 تمدید اشتراک",
"SUBSCRIPTION_HAPP_CRYPTOLINK_BLOCK": "<blockquote expandable><code>{crypto_link}</code></blockquote>",
"SUBSCRIPTION_HAPP_LINK_PROMPT": "🔒 لینک اشتراک ایجاد شد. دکمه «اتصال» بزنید تا در Happ باز شود.",
@@ -1488,12 +1488,14 @@
"SUBSCRIPTION_NO_SERVERS": "❌ سروری در دسترس نیست",
"SUBSCRIPTION_OVERVIEW_TEMPLATE": "📱 <b>اشتراک شما</b>\n\n📊 وضعیت: {status}\n📅 اعتبار: {expiry}\n📈 ترافیک: {traffic}\n📱 دستگاه‌ها: {devices}\n🌍 سرورها: {servers}",
"SUBSCRIPTION_DAILY_OVERVIEW_TEMPLATE": "👤 {full_name}\n💰 موجودی: {balance}\n📱 اشتراک: {status_emoji} {status_display}{warning}{tariff_info_block}\n\n📱 اطلاعات اشتراک\n🎭 نوع: {subscription_type}\n📈 ترافیک: {traffic}\n🌍 سرورها: {servers}\n📱 دستگاه‌ها: {devices}\n🌍 کشورها: {countries}",
"SUBSCRIPTION_DEACTIVATED_CHANNEL_UNSUBSCRIBE": "اشتراک شما متوقف شده است زیرا از کانال اجباری خارج شدید.\n\nبرای بازیابی دسترسی VPN در همه کانال‌ها عضو شوید.",
"SUBSCRIPTION_DEACTIVATED_CHANNEL_UNSUBSCRIBE": "🚫 اشتراک شما متوقف شده است زیرا از کانال اجباری خارج شدید.\n\nبرای بازیابی دسترسی VPN در همه کانال‌ها عضو شوید.",
"SUBSCRIPTION_DEACTIVATED_CHANNEL_UNSUBSCRIBE_MULTI": "🚫 اشتراک‌های شما متوقف شده‌اند زیرا از کانال اجباری خارج شدید.\n\nبرای بازیابی دسترسی VPN در همه کانال‌ها عضو شوید.",
"SUBSCRIPTION_PROMO_DISCOUNT_HINT": "⚡ تخفیف اضافی {percent}% فعال شد.\n\nبا سایر تخفیف‌ها جمع می‌شود!",
"SUBSCRIPTION_PROMO_DISCOUNT_NOTE": "⚡ تخفیف اضافی {percent}%: -{amount}",
"SUBSCRIPTION_PROMO_DISCOUNT_TIMER": "\n⏳ اعتبار تخفیف: {time_left} <code>{bar}</code>",
"SUBSCRIPTION_PURCHASED": "🎉 اشتراک خریداری شد!",
"SUBSCRIPTION_REACTIVATED_CHANNEL_SUBSCRIBE": "اشتراک شما بازیابی شد!\n\nبا تشکر از عضویت در کانال‌ها. VPN دوباره فعال است.",
"SUBSCRIPTION_REACTIVATED_CHANNEL_SUBSCRIBE": "اشتراک شما بازیابی شد!\n\nبا تشکر از عضویت در کانال‌ها. VPN دوباره فعال است.",
"SUBSCRIPTION_REACTIVATED_CHANNEL_SUBSCRIBE_MULTI": "✅ اشتراک‌های شما بازیابی شدند!\n\nبا تشکر از عضویت در کانال‌ها. VPN دوباره فعال است.",
"SUBSCRIPTION_SETTINGS_BUTTON": "⚙️ تنظیمات",
"SUBSCRIPTION_SETTINGS_OVERVIEW": "⚙️ <b>تنظیمات اشتراک</b>",
"SUBSCRIPTION_SETTINGS_PAID_ONLY": "⚠️ تنظیمات فقط برای اشتراک پولی",
@@ -1757,22 +1759,22 @@
"DAILY_SUBSCRIPTION_PAUSED": "⏸️ اشتراک متوقف شد",
"DAILY_SUBSCRIPTION_RESUMED": "▶️ اشتراک از سر گرفته شد!",
"DAILY_SUBSCRIPTION_RESUMED_AFTER_TOPUP": "✅ <b>اشتراک از سر گرفته شد!</b>\n\nتعرفه روزانه «{tariff_name}» پس از شارژ موجودی از سر گرفته شد.\n\n💳 کسر شده: {amount}\n💰 باقی‌مانده: {balance}",
"WEBHOOK_SUB_EXPIRED": "❌ <b>اشتراک منقضی شد</b>\n\nاشتراک شما به پایان رسیده است. برای بازیابی دسترسی VPN تمدید کنید.",
"WEBHOOK_SUB_DISABLED": "🚫 <b>اشتراک غیرفعال شد</b>\n\nاشتراک شما توسط مدیر غیرفعال شده است.",
"WEBHOOK_SUB_ENABLED": "✅ <b>اشتراک فعال شد</b>\n\nاشتراک شما دوباره فعال است. از استفاده لذت ببرید!",
"WEBHOOK_SUB_LIMITED": "⚠️ <b>محدودیت ترافیک</b>\n\nشما تمام ترافیک موجود را مصرف کرده‌اید. ترافیک اضافی بخرید یا منتظر بازنشانی باشید.",
"WEBHOOK_SUB_TRAFFIC_RESET": "🔄 <b>ترافیک بازنشانی شد</b>\n\nترافیک شما بازنشانی شد. محدودیت کامل دوباره در دسترس است.",
"WEBHOOK_SUB_DELETED": "🗑️ <b>اشتراک حذف شد</b>\n\nاشتراک شما از پنل حذف شده است.",
"WEBHOOK_SUB_REVOKED": "🔑 <b>کلید اشتراک به‌روز شد</b>\n\nاطلاعات اتصال شما به‌روز شده است. از لینک جدید برای اتصال استفاده کنید.",
"WEBHOOK_SUB_EXPIRES_72H": "⏳ <b>اشتراک تا ۳ روز دیگر منقضی می‌شود</b>\n\nفراموش نکنید اشتراک خود را تمدید کنید.",
"WEBHOOK_SUB_EXPIRES_48H": "⏳ <b>اشتراک تا ۲ روز دیگر منقضی می‌شود</b>\n\nاشتراک خود را زودتر تمدید کنید تا دسترسی VPN حفظ شود.",
"WEBHOOK_SUB_EXPIRES_24H": "🔴 <b>اشتراک فردا منقضی می‌شود!</b>\n\nکمتر از ۲۴ ساعت باقی مانده. همین الان تمدید کنید.",
"WEBHOOK_SUB_EXPIRED_24H_AGO": "💤 <b>اشتراک دیروز منقضی شد</b>\n\nاشتراک شما به پایان رسیده. همین الان تمدید کنید تا دسترسی VPN بازگردد.",
"WEBHOOK_SUB_FIRST_CONNECTED": "🎉 <b>اولین اتصال!</b>\n\nشما برای اولین بار به VPN متصل شدید. خوش آمدید!",
"WEBHOOK_SUB_BANDWIDTH_THRESHOLD": "📊 <b>{percent}% ترافیک مصرف شد</b>\n\nبخش قابل توجهی از ترافیک خود را مصرف کرده‌اید. مصرف خود را زیر نظر داشته باشید.",
"WEBHOOK_SUB_EXPIRED": "❌ <b>اشتراک{tariff_label} منقضی شد</b>\n\nاشتراک شما به پایان رسیده است. برای بازیابی دسترسی VPN تمدید کنید.",
"WEBHOOK_SUB_DISABLED": "🚫 <b>اشتراک{tariff_label} غیرفعال شد</b>\n\nاشتراک شما توسط مدیر غیرفعال شده است.",
"WEBHOOK_SUB_ENABLED": "✅ <b>اشتراک{tariff_label} فعال شد</b>\n\nاشتراک شما دوباره فعال است. از استفاده لذت ببرید!",
"WEBHOOK_SUB_LIMITED": "⚠️ <b>محدودیت ترافیک</b>\n\nشما تمام ترافیک موجود اشتراک{tariff_label} را مصرف کرده‌اید. ترافیک اضافی بخرید یا منتظر بازنشانی باشید.",
"WEBHOOK_SUB_TRAFFIC_RESET": "🔄 <b>ترافیک بازنشانی شد</b>\n\nترافیک اشتراک{tariff_label} بازنشانی شد. محدودیت کامل دوباره در دسترس است.",
"WEBHOOK_SUB_DELETED": "🗑️ <b>اشتراک{tariff_label} حذف شد</b>\n\nاشتراک شما از پنل حذف شده است.",
"WEBHOOK_SUB_REVOKED": "🔑 <b>کلید اشتراک{tariff_label} به‌روز شد</b>\n\nاطلاعات اتصال شما به‌روز شده است. از لینک جدید برای اتصال استفاده کنید.",
"WEBHOOK_SUB_EXPIRES_72H": "⏳ <b>اشتراک{tariff_label} تا ۳ روز دیگر منقضی می‌شود</b>\n\nفراموش نکنید اشتراک خود را تمدید کنید.",
"WEBHOOK_SUB_EXPIRES_48H": "⏳ <b>اشتراک{tariff_label} تا ۲ روز دیگر منقضی می‌شود</b>\n\nاشتراک خود را زودتر تمدید کنید تا دسترسی VPN حفظ شود.",
"WEBHOOK_SUB_EXPIRES_24H": "🔴 <b>اشتراک{tariff_label} فردا منقضی می‌شود!</b>\n\nکمتر از ۲۴ ساعت باقی مانده. همین الان تمدید کنید.",
"WEBHOOK_SUB_EXPIRED_24H_AGO": "💤 <b>اشتراک{tariff_label} دیروز منقضی شد</b>\n\nاشتراک شما به پایان رسیده. همین الان تمدید کنید تا دسترسی VPN بازگردد.",
"WEBHOOK_SUB_FIRST_CONNECTED": "🎉 <b>اولین اتصال!</b>\n\nشما برای اولین بار به VPN{tariff_label} متصل شدید. خوش آمدید!",
"WEBHOOK_SUB_BANDWIDTH_THRESHOLD": "📊 <b>{percent}% ترافیک مصرف شد</b>\n\nبخش قابل توجهی از ترافیک اشتراک{tariff_label} خود را مصرف کرده‌اید. مصرف خود را زیر نظر داشته باشید.",
"WEBHOOK_RENEW_BUTTON": "🔄 تمدید اشتراک",
"WEBHOOK_USER_NOT_CONNECTED": "📡 <b>هنوز متصل نشده‌اید</b>\n\nاشتراک شما فعال است اما هنوز اتصال VPN برقرار نشده. برای شروع استفاده متصل شوید.",
"WEBHOOK_DEVICE_ADDED": "📱 <b>دستگاه جدید</b>\n\nدستگاه جدیدی به اشتراک شما اضافه شد: <code>{device}</code>",
"WEBHOOK_DEVICE_DELETED": "📱 <b>دستگاه حذف شد</b>\n\nدستگاهی از اشتراک شما حذف شد: <code>{device}</code>",
"WEBHOOK_USER_NOT_CONNECTED": "📡 <b>هنوز متصل نشده‌اید</b>\n\nاشتراک{tariff_label} شما فعال است اما هنوز اتصال VPN برقرار نشده. برای شروع استفاده متصل شوید.",
"WEBHOOK_DEVICE_ADDED": "📱 <b>دستگاه جدید</b>\n\nدستگاه جدیدی به اشتراک{tariff_label} شما اضافه شد: <code>{device}</code>",
"WEBHOOK_DEVICE_DELETED": "📱 <b>دستگاه حذف شد</b>\n\nدستگاهی از اشتراک{tariff_label} شما حذف شد: <code>{device}</code>",
"WEBHOOK_CLOSE_BUTTON": "✖️ بستن"
}
+24 -22
View File
@@ -1458,11 +1458,11 @@
"SUBSCRIPTION_DEVICE_STEP_CONNECT_TITLE": "<b>Шаг 3 - Подключение:</b>",
"SUBSCRIPTION_DEVICE_STEP_INSTALL_TITLE": "<b>Шаг 1 - Установка:</b>",
"SUBSCRIPTION_EXPIRED": "\n❌ <b>Подписка истекла</b>\n\nВаша подписка истекла. Для восстановления доступа продлите подписку.\n",
"SUBSCRIPTION_EXPIRED_1D": "⛔ <b>Подписка закончилась</b>\n\nДоступ был отключён {end_date}. Продлите подписку, чтобы вернуть полный доступ.\n\n💎 Стоимость продления: {price}",
"SUBSCRIPTION_EXPIRED_SECOND_WAVE": "🔥 <b>Скидка {percent}% на продление</b>\n\nАктивируйте предложение, чтобы получить дополнительную скидку. Она суммируется с вашей промогруппой и действует до {expires_at}.",
"SUBSCRIPTION_EXPIRED_THIRD_WAVE": "🎁 <b>Индивидуальная скидка {percent}%</b>\n\nПрошло {trigger_days} дней без подписки. Вернитесь и активируйте дополнительную скидку — она суммируется с промогруппой и действует до {expires_at}.",
"SUBSCRIPTION_EXPIRED_1D": "⛔ <b>Подписка{tariff_label} закончилась</b>\n\nДоступ был отключён {end_date}. Продлите подписку, чтобы вернуть полный доступ.\n\n💎 Стоимость продления: {price}",
"SUBSCRIPTION_EXPIRED_SECOND_WAVE": "🔥 <b>Скидка {percent}% на продление{tariff_label}</b>\n\nАктивируйте предложение, чтобы получить дополнительную скидку. Она суммируется с вашей промогруппой и действует до {expires_at}.",
"SUBSCRIPTION_EXPIRED_THIRD_WAVE": "🎁 <b>Индивидуальная скидка {percent}%{tariff_label}</b>\n\nПрошло {trigger_days} дней без подписки. Вернитесь и активируйте дополнительную скидку — она суммируется с промогруппой и действует до {expires_at}.",
"SUBSCRIPTION_EXPIRING": "\n⚠️ <b>Подписка истекает!</b>\n\nВаша подписка истекает через {days} дней.\n\nНе забудьте продлить подписку, чтобы не потерять доступ к серверам.\n",
"SUBSCRIPTION_EXPIRING_PAID": "\n⚠️ <b>Подписка истекает через {days_text}!</b>\n\nВаша платная подписка истекает {end_date}.\n\n💳 <b>Автоплатеж:</b> {autopay_status}\n\n{action_text}\n",
"SUBSCRIPTION_EXPIRING_PAID": "\n⚠️ <b>Подписка{tariff_label} истекает через {days_text}!</b>\n\nВаша платная подписка истекает {end_date}.\n\n💳 <b>Автоплатеж:</b> {autopay_status}\n\n{action_text}\n",
"SUBSCRIPTION_EXTEND": "💎 Продлить",
"SUBSCRIPTION_HAPP_CRYPTOLINK_BLOCK": "<blockquote expandable><code>{crypto_link}</code></blockquote>",
"SUBSCRIPTION_HAPP_LINK_PROMPT": "🔒 Ссылка на подписку создана. Нажмите кнопку \"Подключиться\" ниже, чтобы открыть её в Happ.",
@@ -1488,12 +1488,14 @@
"SUBSCRIPTION_NO_SERVERS": "Нет серверов",
"SUBSCRIPTION_OVERVIEW_TEMPLATE": "👤 {full_name}\n💰 Баланс: {balance}\n📱 Подписка: {status_emoji} {status_display}{warning}{tariff_info_block}\n\n📱 Информация о подписке\n🎭 Тип: {subscription_type}\n📅 Действует до: {end_date}\n⏰ Осталось: {time_left}\n📈 Трафик: {traffic}\n🌍 Серверы: {servers}\n📱 Устройства: {devices_used} / {device_limit}",
"SUBSCRIPTION_DAILY_OVERVIEW_TEMPLATE": "👤 {full_name}\n💰 Баланс: {balance}\n📱 Подписка: {status_emoji} {status_display}{warning}{tariff_info_block}\n\n📱 Информация о подписке\n🎭 Тип: {subscription_type}\n📈 Трафик: {traffic}\n🌍 Серверы: {servers}\n📱 Устройства: {devices_used} / {device_limit}",
"SUBSCRIPTION_DEACTIVATED_CHANNEL_UNSUBSCRIBE": "Ваша подписка приостановлена, так как вы отписались от обязательного канала.\n\nПодпишитесь на все каналы для восстановления доступа к VPN.",
"SUBSCRIPTION_DEACTIVATED_CHANNEL_UNSUBSCRIBE": "🚫 Ваша подписка приостановлена, так как вы отписались от обязательного канала.\n\nПодпишитесь на все каналы для восстановления доступа к VPN.",
"SUBSCRIPTION_DEACTIVATED_CHANNEL_UNSUBSCRIBE_MULTI": "🚫 Ваши подписки приостановлены, так как вы отписались от обязательного канала.\n\nПодпишитесь на все каналы для восстановления доступа к VPN.",
"SUBSCRIPTION_PROMO_DISCOUNT_HINT": "⚡ Активирована доп. скидка {percent}%. \n\nСуммируется с другими скидками!",
"SUBSCRIPTION_PROMO_DISCOUNT_NOTE": "⚡ Доп. скидка {percent}%: -{amount}",
"SUBSCRIPTION_PROMO_DISCOUNT_TIMER": "⏳ Скидка действует ещё: {time_left}\n<code>{bar}</code>",
"SUBSCRIPTION_PURCHASED": "🎉 Подписка успешно приобретена!",
"SUBSCRIPTION_REACTIVATED_CHANNEL_SUBSCRIBE": "Ваша подписка восстановлена!\n\nСпасибо за подписку на каналы. VPN снова активен.",
"SUBSCRIPTION_REACTIVATED_CHANNEL_SUBSCRIBE": "Ваша подписка восстановлена!\n\nСпасибо за подписку на каналы. VPN снова активен.",
"SUBSCRIPTION_REACTIVATED_CHANNEL_SUBSCRIBE_MULTI": "✅ Ваши подписки восстановлены!\n\nСпасибо за подписку на каналы. VPN снова активен.",
"SUBSCRIPTION_SETTINGS_BUTTON": "⚙️ Настройки",
"SUBSCRIPTION_SETTINGS_OVERVIEW": "⚙️ <b>Настройки подписки</b>\n\n📊 <b>Текущие параметры:</b>\n🌐 Стран: {countries_count}\n📈 Трафик: {traffic_used} / {traffic_limit}\n📱 Устройства: {devices_used} / {devices_limit}\n\nВыберите что хотите изменить:",
"SUBSCRIPTION_SETTINGS_PAID_ONLY": "⚠️ Настройки доступны только для платных подписок",
@@ -1760,22 +1762,22 @@
"DAILY_SUBSCRIPTION_RESUMED": "▶️ Подписка возобновлена!",
"DAILY_SUBSCRIPTION_RESUMED_AFTER_TOPUP": "✅ <b>Подписка возобновлена!</b>\n\nВаш суточный тариф «{tariff_name}» возобновлён после пополнения баланса.\n\n💳 Списано: {amount}\n💰 Остаток: {balance}",
"WEBHOOK_SUB_EXPIRED": "❌ <b>Подписка истекла</b>\n\nВаша подписка завершена. Продлите подписку, чтобы восстановить доступ к VPN.",
"WEBHOOK_SUB_DISABLED": "🚫 <b>Подписка отключена</b>\n\nВаша подписка была отключена администратором.",
"WEBHOOK_SUB_ENABLED": "✅ <b>Подписка активирована</b>\n\nВаша подписка снова активна. Приятного использования!",
"WEBHOOK_SUB_LIMITED": "⚠️ <b>Достигнут лимит трафика</b>\n\nВы исчерпали весь доступный трафик. Докупите трафик или дождитесь сброса.",
"WEBHOOK_SUB_TRAFFIC_RESET": "🔄 <b>Трафик сброшен</b>\n\nВаш трафик обнулён. Лимит снова доступен в полном объёме.",
"WEBHOOK_SUB_DELETED": "🗑️ <b>Подписка удалена</b>\n\nВаша подписка была удалена из панели.",
"WEBHOOK_SUB_REVOKED": "🔑 <b>Ключ подписки обновлён</b>\n\nВаши данные подключения были обновлены. Используйте новую ссылку для подключения.",
"WEBHOOK_SUB_EXPIRES_72H": "⏳ <b>Подписка истекает через 3 дня</b>\n\nНе забудьте продлить подписку, чтобы не потерять доступ.",
"WEBHOOK_SUB_EXPIRES_48H": "⏳ <b>Подписка истекает через 2 дня</b>\n\nПродлите подписку заранее, чтобы сохранить доступ к VPN.",
"WEBHOOK_SUB_EXPIRES_24H": "🔴 <b>Подписка истекает завтра!</b>\n\nОсталось менее 24 часов. Продлите подписку прямо сейчас.",
"WEBHOOK_SUB_EXPIRED_24H_AGO": "💤 <b>Подписка истекла вчера</b>\n\nВаша подписка завершена. Продлите сейчас, чтобы вернуть доступ к VPN.",
"WEBHOOK_SUB_FIRST_CONNECTED": "🎉 <b>Первое подключение!</b>\n\nВы впервые подключились к VPN. Добро пожаловать!",
"WEBHOOK_SUB_BANDWIDTH_THRESHOLD": "📊 <b>Использован {percent}% трафика</b>\n\nВы использовали значительную часть трафика. Следите за расходом.",
"WEBHOOK_SUB_EXPIRED": "❌ <b>Подписка{tariff_label} истекла</b>\n\nВаша подписка завершена. Продлите подписку, чтобы восстановить доступ к VPN.",
"WEBHOOK_SUB_DISABLED": "🚫 <b>Подписка{tariff_label} отключена</b>\n\nВаша подписка была отключена администратором.",
"WEBHOOK_SUB_ENABLED": "✅ <b>Подписка{tariff_label} активирована</b>\n\nВаша подписка снова активна. Приятного использования!",
"WEBHOOK_SUB_LIMITED": "⚠️ <b>Достигнут лимит трафика</b>\n\nВы исчерпали весь доступный трафик по подписке{tariff_label}. Докупите трафик или дождитесь сброса.",
"WEBHOOK_SUB_TRAFFIC_RESET": "🔄 <b>Трафик сброшен</b>\n\nТрафик по подписке{tariff_label} обнулён. Лимит снова доступен в полном объёме.",
"WEBHOOK_SUB_DELETED": "🗑️ <b>Подписка{tariff_label} удалена</b>\n\nВаша подписка была удалена из панели.",
"WEBHOOK_SUB_REVOKED": "🔑 <b>Ключ подписки{tariff_label} обновлён</b>\n\nВаши данные подключения были обновлены. Используйте новую ссылку для подключения.",
"WEBHOOK_SUB_EXPIRES_72H": "⏳ <b>Подписка{tariff_label} истекает через 3 дня</b>\n\nНе забудьте продлить подписку, чтобы не потерять доступ.",
"WEBHOOK_SUB_EXPIRES_48H": "⏳ <b>Подписка{tariff_label} истекает через 2 дня</b>\n\nПродлите подписку заранее, чтобы сохранить доступ к VPN.",
"WEBHOOK_SUB_EXPIRES_24H": "🔴 <b>Подписка{tariff_label} истекает завтра!</b>\n\nОсталось менее 24 часов. Продлите подписку прямо сейчас.",
"WEBHOOK_SUB_EXPIRED_24H_AGO": "💤 <b>Подписка{tariff_label} истекла вчера</b>\n\nВаша подписка завершена. Продлите сейчас, чтобы вернуть доступ к VPN.",
"WEBHOOK_SUB_FIRST_CONNECTED": "🎉 <b>Первое подключение!</b>\n\nВы впервые подключились к VPN{tariff_label}. Добро пожаловать!",
"WEBHOOK_SUB_BANDWIDTH_THRESHOLD": "📊 <b>Использован {percent}% трафика</b>\n\nВы использовали значительную часть трафика по подписке{tariff_label}. Следите за расходом.",
"WEBHOOK_RENEW_BUTTON": "🔄 Продлить подписку",
"WEBHOOK_USER_NOT_CONNECTED": "📡 <b>Вы ещё не подключились</b>\n\nВаша подписка активна, но VPN-соединение не было установлено. Подключитесь, чтобы начать пользоваться.",
"WEBHOOK_DEVICE_ADDED": "📱 <b>Новое устройство</b>\n\nК вашей подписке подключено новое устройство: <code>{device}</code>",
"WEBHOOK_DEVICE_DELETED": "📱 <b>Устройство удалено</b>\n\nУстройство отключено от подписки: <code>{device}</code>",
"WEBHOOK_USER_NOT_CONNECTED": "📡 <b>Вы ещё не подключились</b>\n\nВаша подписка{tariff_label} активна, но VPN-соединение не было установлено. Подключитесь, чтобы начать пользоваться.",
"WEBHOOK_DEVICE_ADDED": "📱 <b>Новое устройство</b>\n\nК подписке{tariff_label} подключено новое устройство: <code>{device}</code>",
"WEBHOOK_DEVICE_DELETED": "📱 <b>Устройство удалено</b>\n\nУстройство отключено от подписки{tariff_label}: <code>{device}</code>",
"WEBHOOK_CLOSE_BUTTON": "✖️ Закрыть"
}
+24 -22
View File
@@ -1368,11 +1368,11 @@
"SUBSCRIPTION_DEVICE_STEP_CONNECT_TITLE": "<b>Крок 3 - Підключення:</b>",
"SUBSCRIPTION_DEVICE_STEP_INSTALL_TITLE": "<b>Крок 1 - Встановлення:</b>",
"SUBSCRIPTION_EXPIRED": "\n❌ <b>Підписка закінчилася</b>\n\nВаша підписка закінчилася. Для відновлення доступу продовжіть підписку.\n",
"SUBSCRIPTION_EXPIRED_1D": "⛔ <b>Підписка закінчилася</b>\n\nДоступ було вимкнено {end_date}. Продовжіть підписку, щоб повернути повний доступ.\n\n💎 Вартість продовження: {price}",
"SUBSCRIPTION_EXPIRED_SECOND_WAVE": "🔥 <b>Знижка {percent}% на продовження</b>\n\nАктивуйте пропозицію, щоб отримати додаткову знижку. Вона сумується з вашою промогрупою та діє до {expires_at}.",
"SUBSCRIPTION_EXPIRED_THIRD_WAVE": "🎁 <b>Індивідуальна знижка {percent}%</b>\n\nМинуло {trigger_days} днів без підписки. Поверніться та активуйте додаткову знижку — вона сумується з промогрупою та діє до {expires_at}.",
"SUBSCRIPTION_EXPIRED_1D": "⛔ <b>Підписка{tariff_label} закінчилася</b>\n\nДоступ було вимкнено {end_date}. Продовжіть підписку, щоб повернути повний доступ.\n\n💎 Вартість продовження: {price}",
"SUBSCRIPTION_EXPIRED_SECOND_WAVE": "🔥 <b>Знижка {percent}% на продовження{tariff_label}</b>\n\nАктивуйте пропозицію, щоб отримати додаткову знижку. Вона сумується з вашою промогрупою та діє до {expires_at}.",
"SUBSCRIPTION_EXPIRED_THIRD_WAVE": "🎁 <b>Індивідуальна знижка {percent}%{tariff_label}</b>\n\nМинуло {trigger_days} днів без підписки. Поверніться та активуйте додаткову знижку — вона сумується з промогрупою та діє до {expires_at}.",
"SUBSCRIPTION_EXPIRING": "\n⚠️ <b>Підписка закінчується!</b>\n\nВаша підписка закінчується через {days} днів.\n\nНе забудьте продовжити підписку, щоб не втратити доступ до серверів.\n",
"SUBSCRIPTION_EXPIRING_PAID": "\n⚠️ <b>Підписка закінчується через {days_text}!</b>\n\nВаша платна підписка закінчується {end_date}.\n\n💳 <b>Автоплатіж:</b> {autopay_status}\n\n{action_text}\n",
"SUBSCRIPTION_EXPIRING_PAID": "\n⚠️ <b>Підписка{tariff_label} закінчується через {days_text}!</b>\n\nВаша платна підписка закінчується {end_date}.\n\n💳 <b>Автоплатіж:</b> {autopay_status}\n\n{action_text}\n",
"SUBSCRIPTION_EXTEND": "💎 Продовжити підписку",
"SUBSCRIPTION_HAPP_CRYPTOLINK_BLOCK": "<blockquote expandable><code>{crypto_link}</code></blockquote>",
"SUBSCRIPTION_HAPP_LINK_PROMPT": "🔒 Посилання на підписку створено. Натисніть кнопку \"Підключитися\" нижче, щоб відкрити її в Happ.",
@@ -1398,12 +1398,14 @@
"SUBSCRIPTION_NO_SERVERS": "Немає серверів",
"SUBSCRIPTION_OVERVIEW_TEMPLATE": "👤 {full_name}\n💰 Баланс: {balance}\n📱 Підписка: {status_emoji} {status_display}{warning}{tariff_info_block}\n\n📱 Інформація про підписку\n🎭 Тип: {subscription_type}\n📅 Діє до: {end_date}\n⏰ Залишилося: {time_left}\n📈 Трафік: {traffic}\n🌍 Сервери: {servers}\n📱 Пристрої: {devices_used} / {device_limit}",
"SUBSCRIPTION_DAILY_OVERVIEW_TEMPLATE": "👤 {full_name}\n💰 Баланс: {balance}\n📱 Підписка: {status_emoji} {status_display}{warning}{tariff_info_block}\n\n📱 Інформація про підписку\n🎭 Тип: {subscription_type}\n📈 Трафік: {traffic}\n🌍 Сервери: {servers}\n📱 Пристрої: {devices_used} / {device_limit}",
"SUBSCRIPTION_DEACTIVATED_CHANNEL_UNSUBSCRIBE": "Вашу підписку призупинено, оскільки ви відписались від обов'язкового каналу.\n\nПідпишіться на всі канали для відновлення доступу до VPN.",
"SUBSCRIPTION_DEACTIVATED_CHANNEL_UNSUBSCRIBE": "🚫 Вашу підписку призупинено, оскільки ви відписались від обов'язкового каналу.\n\nПідпишіться на всі канали для відновлення доступу до VPN.",
"SUBSCRIPTION_DEACTIVATED_CHANNEL_UNSUBSCRIBE_MULTI": "🚫 Ваші підписки призупинено, оскільки ви відписались від обов'язкового каналу.\n\nПідпишіться на всі канали для відновлення доступу до VPN.",
"SUBSCRIPTION_PROMO_DISCOUNT_HINT": "⚡ Активовано дод. знижку {percent}%. \n\nСумується з іншими знижками!",
"SUBSCRIPTION_PROMO_DISCOUNT_NOTE": "⚡ Дод. знижка {percent}%: -{amount}",
"SUBSCRIPTION_PROMO_DISCOUNT_TIMER": "⏳ Знижка діє ще: {time_left}\n<code>{bar}</code>",
"SUBSCRIPTION_PURCHASED": "🎉 Підписку успішно придбано!",
"SUBSCRIPTION_REACTIVATED_CHANNEL_SUBSCRIBE": "Вашу підписку відновлено!\n\nДякуємо за підписку на канали. VPN знову активний.",
"SUBSCRIPTION_REACTIVATED_CHANNEL_SUBSCRIBE": "Вашу підписку відновлено!\n\nДякуємо за підписку на канали. VPN знову активний.",
"SUBSCRIPTION_REACTIVATED_CHANNEL_SUBSCRIBE_MULTI": "✅ Ваші підписки відновлено!\n\nДякуємо за підписку на канали. VPN знову активний.",
"SUBSCRIPTION_SETTINGS_BUTTON": "⚙️ Налаштування підписки",
"SUBSCRIPTION_SETTINGS_OVERVIEW": "⚙️ <b>Налаштування підписки</b>\n\n📊 <b>Поточні параметри:</b>\n🌐 Країн: {countries_count}\n📈 Трафік: {traffic_used} / {traffic_limit}\n📱 Пристрої: {devices_used} / {devices_limit}\n\nОберіть що хочете змінити:",
"SUBSCRIPTION_SETTINGS_PAID_ONLY": "⚠️ Налаштування доступні лише для платних підписок",
@@ -1628,22 +1630,22 @@
"DAILY_SUBSCRIPTION_PAUSED": "⏸️ Підписка призупинена",
"DAILY_SUBSCRIPTION_RESUMED": "▶️ Підписка відновлена!",
"DAILY_SUBSCRIPTION_RESUMED_AFTER_TOPUP": "✅ <b>Підписка відновлена!</b>\n\nВаш добовий тариф «{tariff_name}» відновлено після поповнення балансу.\n\n💳 Списано: {amount}\n💰 Залишок: {balance}",
"WEBHOOK_SUB_EXPIRED": "❌ <b>Підписка закінчилась</b>\n\nВаша підписка завершена. Продовжте підписку, щоб відновити доступ до VPN.",
"WEBHOOK_SUB_DISABLED": "🚫 <b>Підписку вимкнено</b>\n\nВашу підписку було вимкнено адміністратором.",
"WEBHOOK_SUB_ENABLED": "✅ <b>Підписку активовано</b>\n\nВаша підписка знову активна. Приємного використання!",
"WEBHOOK_SUB_LIMITED": "⚠️ <b>Досягнуто ліміт трафіку</b>\n\nВи вичерпали весь доступний трафік. Докупіть трафік або дочекайтесь скидання.",
"WEBHOOK_SUB_TRAFFIC_RESET": "🔄 <b>Трафік скинуто</b>\n\nВаш трафік обнулено. Ліміт знову доступний у повному обсязі.",
"WEBHOOK_SUB_DELETED": "🗑️ <b>Підписку видалено</b>\n\nВашу підписку було видалено з панелі.",
"WEBHOOK_SUB_REVOKED": "🔑 <b>Ключ підписки оновлено</b>\n\nВаші дані підключення були оновлені. Використовуйте нове посилання для підключення.",
"WEBHOOK_SUB_EXPIRES_72H": "⏳ <b>Підписка закінчується через 3 дні</b>\n\nНе забудьте продовжити підписку, щоб не втратити доступ.",
"WEBHOOK_SUB_EXPIRES_48H": "⏳ <b>Підписка закінчується через 2 дні</b>\n\nПродовжте підписку заздалегідь, щоб зберегти доступ до VPN.",
"WEBHOOK_SUB_EXPIRES_24H": "🔴 <b>Підписка закінчується завтра!</b>\n\nЗалишилось менше 24 годин. Продовжте підписку прямо зараз.",
"WEBHOOK_SUB_EXPIRED_24H_AGO": "💤 <b>Підписка закінчилась вчора</b>\n\nВаша підписка завершена. Продовжте зараз, щоб повернути доступ до VPN.",
"WEBHOOK_SUB_FIRST_CONNECTED": "🎉 <b>Перше підключення!</b>\n\nВи вперше підключились до VPN. Ласкаво просимо!",
"WEBHOOK_SUB_BANDWIDTH_THRESHOLD": "📊 <b>Використано {percent}% трафіку</b>\n\nВи використали значну частину трафіку. Слідкуйте за витратою.",
"WEBHOOK_SUB_EXPIRED": "❌ <b>Підписка{tariff_label} закінчилась</b>\n\nВаша підписка завершена. Продовжте підписку, щоб відновити доступ до VPN.",
"WEBHOOK_SUB_DISABLED": "🚫 <b>Підписку{tariff_label} вимкнено</b>\n\nВашу підписку було вимкнено адміністратором.",
"WEBHOOK_SUB_ENABLED": "✅ <b>Підписку{tariff_label} активовано</b>\n\nВаша підписка знову активна. Приємного використання!",
"WEBHOOK_SUB_LIMITED": "⚠️ <b>Досягнуто ліміт трафіку</b>\n\nВи вичерпали весь доступний трафік по підписці{tariff_label}. Докупіть трафік або дочекайтесь скидання.",
"WEBHOOK_SUB_TRAFFIC_RESET": "🔄 <b>Трафік скинуто</b>\n\nТрафік по підписці{tariff_label} обнулено. Ліміт знову доступний у повному обсязі.",
"WEBHOOK_SUB_DELETED": "🗑️ <b>Підписку{tariff_label} видалено</b>\n\nВашу підписку було видалено з панелі.",
"WEBHOOK_SUB_REVOKED": "🔑 <b>Ключ підписки{tariff_label} оновлено</b>\n\nВаші дані підключення були оновлені. Використовуйте нове посилання для підключення.",
"WEBHOOK_SUB_EXPIRES_72H": "⏳ <b>Підписка{tariff_label} закінчується через 3 дні</b>\n\nНе забудьте продовжити підписку, щоб не втратити доступ.",
"WEBHOOK_SUB_EXPIRES_48H": "⏳ <b>Підписка{tariff_label} закінчується через 2 дні</b>\n\nПродовжте підписку заздалегідь, щоб зберегти доступ до VPN.",
"WEBHOOK_SUB_EXPIRES_24H": "🔴 <b>Підписка{tariff_label} закінчується завтра!</b>\n\nЗалишилось менше 24 годин. Продовжте підписку прямо зараз.",
"WEBHOOK_SUB_EXPIRED_24H_AGO": "💤 <b>Підписка{tariff_label} закінчилась вчора</b>\n\nВаша підписка завершена. Продовжте зараз, щоб повернути доступ до VPN.",
"WEBHOOK_SUB_FIRST_CONNECTED": "🎉 <b>Перше підключення!</b>\n\nВи вперше підключились до VPN{tariff_label}. Ласкаво просимо!",
"WEBHOOK_SUB_BANDWIDTH_THRESHOLD": "📊 <b>Використано {percent}% трафіку</b>\n\nВи використали значну частину трафіку по підписці{tariff_label}. Слідкуйте за витратою.",
"WEBHOOK_RENEW_BUTTON": "🔄 Продовжити підписку",
"WEBHOOK_USER_NOT_CONNECTED": "📡 <b>Ви ще не підключились</b>\n\nВаша підписка активна, але VPN-з'єднання не було встановлено. Підключіться, щоб почати користуватися.",
"WEBHOOK_DEVICE_ADDED": "📱 <b>Новий пристрій</b>\n\nДо вашої підписки підключено новий пристрій: <code>{device}</code>",
"WEBHOOK_DEVICE_DELETED": "📱 <b>Пристрій видалено</b>\n\nПристрій відключено від підписки: <code>{device}</code>",
"WEBHOOK_USER_NOT_CONNECTED": "📡 <b>Ви ще не підключились</b>\n\nВаша підписка{tariff_label} активна, але VPN-з'єднання не було встановлено. Підключіться, щоб почати користуватися.",
"WEBHOOK_DEVICE_ADDED": "📱 <b>Новий пристрій</b>\n\nДо підписки{tariff_label} підключено новий пристрій: <code>{device}</code>",
"WEBHOOK_DEVICE_DELETED": "📱 <b>Пристрій видалено</b>\n\nПристрій відключено від підписки{tariff_label}: <code>{device}</code>",
"WEBHOOK_CLOSE_BUTTON": "✖️ Закрити"
}
+24 -22
View File
@@ -1364,11 +1364,11 @@
"SUBSCRIPTION_DEVICE_STEP_CONNECT_TITLE": "<b>步骤3-连接:</b>",
"SUBSCRIPTION_DEVICE_STEP_INSTALL_TITLE": "<b>步骤1-安装:</b>",
"SUBSCRIPTION_EXPIRED": "\n❌<b>订阅已过期</b>\n\n您的订阅已过期。要恢复访问权限,请续订。\n",
"SUBSCRIPTION_EXPIRED_1D": "⛔<b>订阅已结束</b>\n\n访问权限已于{end_date}禁用。请续订以恢复完全访问。\n\n💎续订费用:{price}",
"SUBSCRIPTION_EXPIRED_SECOND_WAVE": "🔥<b>续订{percent}%折扣</b>\n\n激活优惠以获得额外折扣。此折扣可与您的促销组叠加,有效期至{expires_at}。",
"SUBSCRIPTION_EXPIRED_THIRD_WAVE": "🎁<b>个人{percent}%折扣</b>\n\n您已{trigger_days}天没有订阅。回来激活额外折扣—此折扣可与促销组叠加,有效期至{expires_at}。",
"SUBSCRIPTION_EXPIRED_1D": "⛔<b>订阅{tariff_label}已结束</b>\n\n访问权限已于{end_date}禁用。请续订以恢复完全访问。\n\n💎续订费用:{price}",
"SUBSCRIPTION_EXPIRED_SECOND_WAVE": "🔥<b>续订{tariff_label}{percent}%折扣</b>\n\n激活优惠以获得额外折扣。此折扣可与您的促销组叠加,有效期至{expires_at}。",
"SUBSCRIPTION_EXPIRED_THIRD_WAVE": "🎁<b>个人{percent}%折扣{tariff_label}</b>\n\n您已{trigger_days}天没有订阅。回来激活额外折扣—此折扣可与促销组叠加,有效期至{expires_at}。",
"SUBSCRIPTION_EXPIRING": "\n⚠️<b>订阅即将过期!</b>\n\n您的订阅将在{days}天后过期。\n\n别忘记续订,以免失去服务器访问权限。\n",
"SUBSCRIPTION_EXPIRING_PAID": "\n⚠️<b>订阅将在{days_text}后过期!</b>\n\n您的付费订阅将于{end_date}过期。\n\n💳<b>自动支付:</b>{autopay_status}\n\n{action_text}\n",
"SUBSCRIPTION_EXPIRING_PAID": "\n⚠️<b>订阅{tariff_label}将在{days_text}后过期!</b>\n\n您的付费订阅将于{end_date}过期。\n\n💳<b>自动支付:</b>{autopay_status}\n\n{action_text}\n",
"SUBSCRIPTION_EXTEND": "💎延长订阅",
"SUBSCRIPTION_HAPP_CRYPTOLINK_BLOCK": "<blockquoteexpandable><code>{crypto_link}</code></blockquote>",
"SUBSCRIPTION_HAPP_LINK_PROMPT": "🔒订阅链接已创建。点击下方的“连接”按钮以在Happ中打开。",
@@ -1394,12 +1394,14 @@
"SUBSCRIPTION_NO_SERVERS": "没有服务器",
"SUBSCRIPTION_OVERVIEW_TEMPLATE": "👤{full_name}\n💰余额:{balance}\n📱订阅:{status_emoji}{status_display}{warning}{tariff_info_block}\n\n📱订阅信息\n🎭类型:{subscription_type}\n📅有效期至:{end_date}\n⏰剩余时间:{time_left}\n📈流量:{traffic}\n🌍服务器:{servers}\n📱设备:{devices_used}/{device_limit}",
"SUBSCRIPTION_DAILY_OVERVIEW_TEMPLATE": "👤{full_name}\n💰余额:{balance}\n📱订阅:{status_emoji}{status_display}{warning}{tariff_info_block}\n\n📱订阅信息\n🎭类型:{subscription_type}\n📈流量:{traffic}\n🌍服务器:{servers}\n📱设备:{devices_used}/{device_limit}",
"SUBSCRIPTION_DEACTIVATED_CHANNEL_UNSUBSCRIBE": "由于您退出了必需频道,您的订阅已暂停。\n\n请订阅所有频道以恢复VPN访问。",
"SUBSCRIPTION_DEACTIVATED_CHANNEL_UNSUBSCRIBE": "🚫 由于您退出了必需频道,您的订阅已暂停。\n\n请订阅所有频道以恢复VPN访问。",
"SUBSCRIPTION_DEACTIVATED_CHANNEL_UNSUBSCRIBE_MULTI": "🚫 由于您退出了必需频道,您的所有订阅已暂停。\n\n请订阅所有频道以恢复VPN访问。",
"SUBSCRIPTION_PROMO_DISCOUNT_HINT": "⚡已激活额外{percent}%折扣。\n\n可与其他折扣叠加!",
"SUBSCRIPTION_PROMO_DISCOUNT_NOTE": "⚡额外{percent}%折扣:-{amount}",
"SUBSCRIPTION_PROMO_DISCOUNT_TIMER": "⏳折扣剩余时间:{time_left}\n<code>{bar}</code>",
"SUBSCRIPTION_PURCHASED": "🎉订阅已成功购买!",
"SUBSCRIPTION_REACTIVATED_CHANNEL_SUBSCRIBE": "您的订阅已恢复!\n\n感谢您订阅频道。VPN已重新激活。",
"SUBSCRIPTION_REACTIVATED_CHANNEL_SUBSCRIBE": "您的订阅已恢复!\n\n感谢您订阅频道。VPN已重新激活。",
"SUBSCRIPTION_REACTIVATED_CHANNEL_SUBSCRIBE_MULTI": "✅ 您的所有订阅已恢复!\n\n感谢您订阅频道。VPN已重新激活。",
"SUBSCRIPTION_SETTINGS_BUTTON": "⚙️订阅设置",
"SUBSCRIPTION_SETTINGS_OVERVIEW": "⚙️<b>订阅设置</b>\n\n📊<b>当前参数:</b>\n🌐国家:{countries_count}\n📈流量:{traffic_used}/{traffic_limit}\n📱设备:{devices_used}/{devices_limit}\n\n请选择要更改的内容:",
"SUBSCRIPTION_SETTINGS_PAID_ONLY": "⚠️设置仅适用于付费订阅",
@@ -1624,23 +1626,23 @@
"DAILY_SUBSCRIPTION_PAUSED": "⏸️ 订阅已暂停",
"DAILY_SUBSCRIPTION_RESUMED": "▶️ 订阅已恢复!",
"DAILY_SUBSCRIPTION_RESUMED_AFTER_TOPUP": "✅ <b>订阅已恢复!</b>\n\n您的日套餐「{tariff_name}」已在充值后恢复。\n\n💳 扣费:{amount}\n💰 余额:{balance}",
"WEBHOOK_SUB_EXPIRED": "❌ <b>订阅已过期</b>\n\n您的订阅已结束。请续订以恢复VPN访问。",
"WEBHOOK_SUB_DISABLED": "🚫 <b>订阅禁用</b>\n\n您的订阅已被管理员禁用。",
"WEBHOOK_SUB_ENABLED": "✅ <b>订阅已激活</b>\n\n您的订阅已重新激活。祝使用愉快!",
"WEBHOOK_SUB_LIMITED": "⚠️ <b>已达到流量限制</b>\n\n您已用完所有可用流量。请购买额外流量或等待重置。",
"WEBHOOK_SUB_TRAFFIC_RESET": "🔄 <b>流量已重置</b>\n\n的流量已重置。完整限额再次可用。",
"WEBHOOK_SUB_DELETED": "🗑️ <b>订阅已删除</b>\n\n您的订阅已从面板中删除。",
"WEBHOOK_SUB_REVOKED": "🔑 <b>订阅密钥已更新</b>\n\n您的连接凭证已更新。请使用新链接进行连接。",
"WEBHOOK_SUB_EXPIRES_72H": "⏳ <b>订阅将在3天后到期</b>\n\n请记得续订以保持VPN访问。",
"WEBHOOK_SUB_EXPIRES_48H": "⏳ <b>订阅将在2天后到期</b>\n\n请提前续订以保持VPN访问。",
"WEBHOOK_SUB_EXPIRES_24H": "🔴 <b>订阅明天到期!</b>\n\n不到24小时。请立即续订。",
"WEBHOOK_SUB_EXPIRED_24H_AGO": "💤 <b>订阅昨天已过期</b>\n\n您的订阅已结束。请立即续订以恢复VPN访问。",
"WEBHOOK_SUB_FIRST_CONNECTED": "🎉 <b>首次连接!</b>\n\n您首次连接了VPN。欢迎!",
"WEBHOOK_SUB_BANDWIDTH_THRESHOLD": "📊 <b>已使用{percent}%流量</b>\n\n您已使用了大部分流量。请注意使用量。",
"WEBHOOK_SUB_EXPIRED": "❌ <b>订阅{tariff_label}已过期</b>\n\n您的订阅已结束。请续订以恢复VPN访问。",
"WEBHOOK_SUB_DISABLED": "🚫 <b>订阅{tariff_label}已被禁用</b>\n\n您的订阅已被管理员禁用。",
"WEBHOOK_SUB_ENABLED": "✅ <b>订阅{tariff_label}已激活</b>\n\n您的订阅已重新激活。祝使用愉快!",
"WEBHOOK_SUB_LIMITED": "⚠️ <b>已达到流量限制</b>\n\n您已用完订阅{tariff_label}的所有可用流量。请购买额外流量或等待重置。",
"WEBHOOK_SUB_TRAFFIC_RESET": "🔄 <b>流量已重置</b>\n\n订阅{tariff_label}的流量已重置。完整限额再次可用。",
"WEBHOOK_SUB_DELETED": "🗑️ <b>订阅{tariff_label}已删除</b>\n\n您的订阅已从面板中删除。",
"WEBHOOK_SUB_REVOKED": "🔑 <b>订阅{tariff_label}密钥已更新</b>\n\n您的连接凭证已更新。请使用新链接进行连接。",
"WEBHOOK_SUB_EXPIRES_72H": "⏳ <b>订阅{tariff_label}将在3天后到期</b>\n\n请记得续订以保持VPN访问。",
"WEBHOOK_SUB_EXPIRES_48H": "⏳ <b>订阅{tariff_label}将在2天后到期</b>\n\n请提前续订以保持VPN访问。",
"WEBHOOK_SUB_EXPIRES_24H": "🔴 <b>订阅{tariff_label}明天到期!</b>\n\n不到24小时。请立即续订。",
"WEBHOOK_SUB_EXPIRED_24H_AGO": "💤 <b>订阅{tariff_label}昨天已过期</b>\n\n您的订阅已结束。请立即续订以恢复VPN访问。",
"WEBHOOK_SUB_FIRST_CONNECTED": "🎉 <b>首次连接!</b>\n\n您首次连接了VPN{tariff_label}。欢迎!",
"WEBHOOK_SUB_BANDWIDTH_THRESHOLD": "📊 <b>已使用{percent}%流量</b>\n\n您已使用了订阅{tariff_label}的大部分流量。请注意使用量。",
"WEBHOOK_RENEW_BUTTON": "🔄 续订订阅",
"WEBHOOK_USER_NOT_CONNECTED": "📡 <b>尚未连接</b>\n\n您的订阅已激活,但尚未建立VPN连接。请连接以开始使用服务。",
"WEBHOOK_DEVICE_ADDED": "📱 <b>新设备</b>\n\n您的订阅已添加新设备:<code>{device}</code>",
"WEBHOOK_DEVICE_DELETED": "📱 <b>设备已移除</b>\n\n设备已从您的订阅中移除:<code>{device}</code>",
"WEBHOOK_USER_NOT_CONNECTED": "📡 <b>尚未连接</b>\n\n您的订阅{tariff_label}已激活,但尚未建立VPN连接。请连接以开始使用服务。",
"WEBHOOK_DEVICE_ADDED": "📱 <b>新设备</b>\n\n订阅{tariff_label}已添加新设备:<code>{device}</code>",
"WEBHOOK_DEVICE_DELETED": "📱 <b>设备已移除</b>\n\n设备已从订阅{tariff_label}中移除:<code>{device}</code>",
"WEBHOOK_CLOSE_BUTTON": "✖️ 关闭",
"BALANCE_TOPPED_UP_CART_SUFFICIENT": "✅ 余额已充值 {amount}\n\n💰 当前余额:{balance}\n\n🛒 您有一个已保存的购物车,金额为 {cart_total}\n余额足够完成订购。",
"BALANCE_TOPPED_UP_CART_INSUFFICIENT": "✅ 余额已充值 {amount}\n\n💰 当前余额:{balance}\n\n🛒 您有一个已保存的购物车,金额为 {cart_total}\n还差:{missing}"