fix(i18n): backfill 120 missing keys + close 2 typo regressions from purchase refactor

Surface: users (and especially Серёжа в bugs topic) were seeing raw i18n keys
like `subscription.promoGroup.title` rendered as literal text on the renewal
screen. Audit found 118 keys referenced in code that were absent from all 4
locale files, plus 140 keys missing only in zh/fa (silently falling back to
Russian for those users).

Root causes:
- cf52999 (extract TariffPickerGrid) introduced `subscription.promoGroup.title`
  that never existed — should have been `subscription.promoGroup.yourGroup`.
- Subscription.tsx used `subscription.autopay.title` (object path) while
  SubscriptionListCard.tsx used `subscription.autopay` (leaf) — i18next can't
  hold both shapes for the same key.
- Many user-flow keys (subscription.notFound, subscriptions.empty, common.ok,
  successNotification.*, etc.) were never added when their components landed.
- Historical drift had ~140 keys in ru/en that never got zh/fa translations.

Fix:
- Rename TariffPickerGrid usage `promoGroup.title` → `promoGroup.yourGroup`.
- Rename Subscription.tsx usage `autopay.title` → `autopay`.
- Add 116 brand-new keys across ru/en/zh/fa (464 entries).
- Add 8 partially-missing keys (en+ru gaps) for landing periods, dashboard
  campaign/referrer stats, and promo offer failure counts.
- Translate 280 entries to close the zh/fa drift.

Final state: 0 keys missing in any of the 4 locale files for any code-referenced
translation key. Build + tsc green.
This commit is contained in:
c0mrade
2026-05-28 18:47:58 +03:00
parent 574da67ca0
commit e1f401c333
6 changed files with 1026 additions and 182 deletions

View File

@@ -74,7 +74,7 @@ export function TariffPickerGrid({
</div> </div>
<div> <div>
<div className="text-sm font-medium text-success-400"> <div className="text-sm font-medium text-success-400">
{t('subscription.promoGroup.title', { {t('subscription.promoGroup.yourGroup', {
name: tariffs.find((tariff) => tariff.promo_group_name)?.promo_group_name, name: tariffs.find((tariff) => tariff.promo_group_name)?.promo_group_name,
})} })}
</div> </div>

View File

@@ -26,11 +26,19 @@
"all": "All", "all": "All",
"units": { "units": {
"gb": "GB", "gb": "GB",
"perGb": "/GB" "perGb": "/GB",
"days": "days",
"mo": "mo"
}, },
"retry": "Retry", "retry": "Retry",
"saving": "Saving...", "saving": "Saving...",
"understand": "Got it" "understand": "Got it",
"balance": "Balance",
"copied": "Copied",
"no_results": "No results",
"ok": "OK",
"processing": "Processing…",
"rangeTo": "to"
}, },
"nav": { "nav": {
"dashboard": "Dashboard", "dashboard": "Dashboard",
@@ -45,7 +53,8 @@
"info": "Info", "info": "Info",
"wheel": "Fortune Wheel", "wheel": "Fortune Wheel",
"menu": "Menu", "menu": "Menu",
"gift": "Gift" "gift": "Gift",
"navigation": "Navigation"
}, },
"notifications": { "notifications": {
"ticketNotifications": "Ticket Notifications", "ticketNotifications": "Ticket Notifications",
@@ -148,7 +157,17 @@
"tariff": "Tariff", "tariff": "Tariff",
"validUntil": "Valid until", "validUntil": "Valid until",
"goToSubscription": "Go to Subscription", "goToSubscription": "Go to Subscription",
"goToBalance": "Go to Balance" "goToBalance": "Go to Balance",
"devicesAdded": "+{{count}} devices",
"devicesPurchased": {
"title": "Devices added"
},
"totalDevices": "Total devices: {{count}}",
"totalTraffic": "Total traffic: {{value}}",
"trafficAdded": "+{{value}} traffic",
"trafficPurchased": {
"title": "Traffic added"
}
}, },
"auth": { "auth": {
"login": "Login", "login": "Login",
@@ -290,7 +309,10 @@
"subscription": "Subscription", "subscription": "Subscription",
"referrals": "Referrals", "referrals": "Referrals",
"earnings": "Earnings" "earnings": "Earnings"
} },
"manageAll": "Manage all",
"showAll": "Show all",
"subscriptions": "Subscriptions"
}, },
"subscription": { "subscription": {
"title": "Subscription", "title": "Subscription",
@@ -346,7 +368,8 @@
"cta": { "cta": {
"expiredHint": "Choose a plan and pay", "expiredHint": "Choose a plan and pay",
"trialHint": "More traffic and devices", "trialHint": "More traffic and devices",
"activeHint": "Renewal and plan change" "activeHint": "Renewal and plan change",
"renewHint": "Subscription expired — renew to continue using"
}, },
"connectionInfo": "Connection Info", "connectionInfo": "Connection Info",
"copyLink": "Copy Link", "copyLink": "Copy Link",
@@ -458,7 +481,8 @@
"goToApps": "Go to Apps settings", "goToApps": "Go to Apps settings",
"qrTitle": "Subscription QR Code", "qrTitle": "Subscription QR Code",
"qrScanHint": "Scan to connect", "qrScanHint": "Scan to connect",
"qrButton": "QR Code" "qrButton": "QR Code",
"openQr": "Open QR code"
}, },
"myDevices": "My Devices", "myDevices": "My Devices",
"noDevices": "No connected devices", "noDevices": "No connected devices",
@@ -561,7 +585,14 @@
"buyTrafficGb": "Buy {{gb}} GB", "buyTrafficGb": "Buy {{gb}} GB",
"buyUnlimited": "Buy Unlimited", "buyUnlimited": "Buy Unlimited",
"manageServers": "Squad management", "manageServers": "Squad management",
"manageServersTitle": "Squad management" "manageServersTitle": "Squad management",
"connectedDevices": "Connected devices",
"currentDeviceLimit": "Current device limit",
"decrementDevices": "Decrease devices",
"disconnectDevicesFirst": "Disconnect extra devices first",
"incrementDevices": "Add devices",
"minDeviceLimit": "Minimum device limit",
"newDeviceLimit": "New device limit"
}, },
"serverManagement": { "serverManagement": {
"statusLegend": "✅ — connected • — will be added (paid) • — will be disconnected", "statusLegend": "✅ — connected • — will be added (paid) • — will be disconnected",
@@ -620,7 +651,27 @@
"stopScan": "Close camera", "stopScan": "Close camera",
"noCamera": "Camera access denied", "noCamera": "Camera access denied",
"codeFound": "Code found" "codeFound": "Code found"
} },
"allTariffsPurchased": "All tariffs already purchased",
"autopay": "Auto-renew",
"backToList": "Back to subscriptions",
"confirmDelete": "Delete subscription?",
"dailyAutoCharge": "Daily auto-charge",
"defaultName": "Subscription",
"delete": "Delete",
"deleteTitle": "Delete subscription",
"get_config": "Get config",
"loadError": "Failed to load subscription",
"newTariff": "New tariff",
"noOptionsAvailable": "No options available",
"noRenewalOptions": "No renewal options",
"notFound": "Subscription not found",
"notFoundDesc": "It may have been deleted or not yet activated",
"servers": "Servers",
"statusActive": "Active",
"statusExpired": "Expired",
"statusLimited": "Limited",
"statusTrial": "Trial"
}, },
"balance": { "balance": {
"title": "Balance", "title": "Balance",
@@ -738,7 +789,9 @@
"already_used_by_user": "You have already used this promo code", "already_used_by_user": "You have already used this promo code",
"user_not_found": "User not found", "user_not_found": "User not found",
"server_error": "Server error" "server_error": "Server error"
} },
"daysLeft": "Days left: {{count}}",
"selectSubscription": "Select a subscription"
}, },
"minAmountError": "Minimum amount: {{amount}} ₽", "minAmountError": "Minimum amount: {{amount}} ₽",
"maxAmountError": "Maximum amount: {{amount}} ₽", "maxAmountError": "Maximum amount: {{amount}} ₽",
@@ -798,7 +851,8 @@
"timeoutDesc": "Payment processing is taking longer than usual. You can try checking the status again.", "timeoutDesc": "Payment processing is taking longer than usual. You can try checking the status again.",
"goToBalance": "Go to Balance", "goToBalance": "Go to Balance",
"tryAgain": "Try Again" "tryAgain": "Try Again"
} },
"top_up": "Top up balance"
}, },
"referral": { "referral": {
"title": "Referral Program", "title": "Referral Program",
@@ -984,7 +1038,8 @@
"useExternalLink": "Please use the external link to get support", "useExternalLink": "Please use the external link to get support",
"openSupport": "Open Support", "openSupport": "Open Support",
"contactSupport": "Please contact {{username}} for support", "contactSupport": "Please contact {{username}} for support",
"contactUs": "Contact Support" "contactUs": "Contact Support",
"create_ticket": "Create ticket"
}, },
"wheel": { "wheel": {
"title": "Fortune Wheel", "title": "Fortune Wheel",
@@ -1017,7 +1072,8 @@
"insufficientBalance": "Insufficient balance", "insufficientBalance": "Insufficient balance",
"topUpRequired": "Top up your balance to pay for spin", "topUpRequired": "Top up your balance to pay for spin",
"starsNotAvailable": "Stars payment not available. Open the app via Telegram.", "starsNotAvailable": "Stars payment not available. Open the app via Telegram.",
"noSubscription": "An active subscription is required to spin the wheel. Activate your subscription first." "noSubscription": "An active subscription is required to spin the wheel. Activate your subscription first.",
"selectSubscription": "Select a subscription first"
}, },
"payWithStars": "Pay with Stars", "payWithStars": "Pay with Stars",
"payWithDays": "Pay with days", "payWithDays": "Pay with days",
@@ -1036,7 +1092,8 @@
"title": "Try your luck!", "title": "Try your luck!",
"description": "Spin the wheel and win prizes: subscription days, balance, traffic and more!", "description": "Spin the wheel and win prizes: subscription days, balance, traffic and more!",
"button": "Go to wheel" "button": "Go to wheel"
} },
"selectSubscription": "Select subscription"
}, },
"admin": { "admin": {
"backgrounds": { "backgrounds": {
@@ -1544,7 +1601,8 @@
"promoGroupsShort": "groups", "promoGroupsShort": "groups",
"noPromoGroups": "No promo groups", "noPromoGroups": "No promo groups",
"cancelButton": "Cancel", "cancelButton": "Cancel",
"saveButton": "Save" "saveButton": "Save",
"notFound": "Payment method not found"
}, },
"remnawave": { "remnawave": {
"title": "RemnaWave", "title": "RemnaWave",
@@ -1611,7 +1669,8 @@
"offline": "Offline", "offline": "Offline",
"disabled": "Disabled", "disabled": "Disabled",
"users": "Users" "users": "Users"
} },
"usersOnlineCount": "{{count}} online"
}, },
"squads": { "squads": {
"synced": "Synced", "synced": "Synced",
@@ -1642,7 +1701,9 @@
"localSettings": "Local Settings", "localSettings": "Local Settings",
"trialEligible": "Trial Eligible", "trialEligible": "Trial Eligible",
"price": "Price", "price": "Price",
"users": "Users" "users": "Users",
"inboundsCount": "{{count}} inbounds",
"membersCount": "{{count}} members"
}, },
"sync": { "sync": {
"autoSync": "Auto Sync", "autoSync": "Auto Sync",
@@ -1820,7 +1881,12 @@
"btnConnect": "Connect", "btnConnect": "Connect",
"btnSubscription": "Subscription", "btnSubscription": "Subscription",
"btnSupport": "Support", "btnSupport": "Support",
"btnHome": "Home" "btnHome": "Home",
"category": "Category",
"categoryNews": "News",
"categoryPromo": "Promo",
"categorySystem": "System",
"stopping": "Stopping…"
}, },
"pinnedMessages": { "pinnedMessages": {
"title": "Pinned Messages", "title": "Pinned Messages",
@@ -2310,7 +2376,10 @@
"remnaWaveSettings": "RemnaWave Settings", "remnaWaveSettings": "RemnaWave Settings",
"remnaWaveConfigUuid": "Config UUID", "remnaWaveConfigUuid": "Config UUID",
"remnaWaveConfigUuidHint": "UUID of subscription page config from RemnaWave panel", "remnaWaveConfigUuidHint": "UUID of subscription page config from RemnaWave panel",
"availableConfigs": "Available configs" "availableConfigs": "Available configs",
"noConfigs": "No configs",
"remnaWaveConnected": "RemnaWave connected",
"remnaWaveDisconnected": "RemnaWave disconnected"
}, },
"tickets": { "tickets": {
"title": "Ticket Management", "title": "Ticket Management",
@@ -2361,7 +2430,13 @@
"userNotificationsEnabled": "User Notifications", "userNotificationsEnabled": "User Notifications",
"userNotificationsEnabledDesc": "Send notifications to users about admin replies", "userNotificationsEnabledDesc": "Send notifications to users about admin replies",
"adminNotificationsEnabled": "Admin Notifications", "adminNotificationsEnabled": "Admin Notifications",
"adminNotificationsEnabledDesc": "Send notifications to admins about new tickets and replies" "adminNotificationsEnabledDesc": "Send notifications to admins about new tickets and replies",
"replyFailed": "Failed to send reply",
"validation": {
"checkIntervalRange": "Check interval must be between 1 and 1440 minutes",
"reminderCooldownRange": "Reminder cooldown must be between 0 and 1440 minutes",
"slaMinutesRange": "SLA must be between 1 and 10080 minutes"
}
}, },
"tariffs": { "tariffs": {
"title": "Tariff Management", "title": "Tariff Management",
@@ -2588,7 +2663,8 @@
"deactivate": "Deactivate", "deactivate": "Deactivate",
"activate": "Activate", "activate": "Activate",
"edit": "Edit", "edit": "Edit",
"delete": "Delete" "delete": "Delete",
"registrations": "Registrations"
}, },
"modal": { "modal": {
"editTitle": "Edit Campaign", "editTitle": "Edit Campaign",
@@ -2658,7 +2734,9 @@
"totalSpending": "Subscription Spending", "totalSpending": "Subscription Spending",
"periodComparison": "Period comparison", "periodComparison": "Period comparison",
"vsLastWeek": "vs last week", "vsLastWeek": "vs last week",
"topRegistrations": "Top registrations" "topRegistrations": "Top registrations",
"subscriptionsIssued": "Subscriptions issued",
"tariffsIssued": "Tariffs issued"
}, },
"users": { "users": {
"title": "Campaign Users", "title": "Campaign Users",
@@ -2682,7 +2760,10 @@
"delete": "Delete" "delete": "Delete"
}, },
"loadError": "Failed to load campaign", "loadError": "Failed to load campaign",
"updateError": "Failed to save changes" "updateError": "Failed to save changes",
"validation": {
"nameRequired": "Name is required"
}
}, },
"withdrawals": { "withdrawals": {
"title": "Withdrawals", "title": "Withdrawals",
@@ -2853,7 +2934,10 @@
"createTitle": "Create Campaign", "createTitle": "Create Campaign",
"createSubtitle": "Campaign will be auto-assigned to the partner", "createSubtitle": "Campaign will be auto-assigned to the partner",
"autoAssignNote": "Campaign will be automatically assigned to partner {{name}}", "autoAssignNote": "Campaign will be automatically assigned to partner {{name}}",
"createAndAssign": "Create & Assign" "createAndAssign": "Create & Assign",
"earnings": "Earnings",
"referrals": "Referrals",
"registrations": "Registrations"
}, },
"dangerZone": { "dangerZone": {
"title": "Danger Zone", "title": "Danger Zone",
@@ -2928,7 +3012,10 @@
"firstPurchaseOnly": "First purchase only", "firstPurchaseOnly": "First purchase only",
"cancel": "Cancel", "cancel": "Cancel",
"saving": "Saving...", "saving": "Saving...",
"save": "Save" "save": "Save",
"defaultTrialTariff": "Default trial tariff",
"selectTariff": "Select tariff",
"tariff": "Tariff"
}, },
"stats": { "stats": {
"title": "Promo code statistics", "title": "Promo code statistics",
@@ -2958,7 +3045,8 @@
"totalPromocodes": "Total promo codes", "totalPromocodes": "Total promo codes",
"activeCount": "Active", "activeCount": "Active",
"usagesCount": "Uses", "usagesCount": "Uses",
"exhausted": "Exhausted" "exhausted": "Exhausted",
"hoursValue": "{{count}}h"
}, },
"actions": { "actions": {
"stats": "Statistics", "stats": "Statistics",
@@ -3249,7 +3337,9 @@
"expired": "expired", "expired": "expired",
"daysLeft": "d left", "daysLeft": "d left",
"deviceLimitUpdated": "Device limit updated", "deviceLimitUpdated": "Device limit updated",
"invalidDays": "Please enter a valid number of days (greater than 0)" "invalidDays": "Please enter a valid number of days (greater than 0)",
"backToList": "Back to subscriptions",
"createNew": "Create new"
}, },
"balance": { "balance": {
"current": "Current balance", "current": "Current balance",
@@ -3333,7 +3423,9 @@
"alreadyReferred": "already has referrer", "alreadyReferred": "already has referrer",
"noUsersFound": "No users found" "noUsersFound": "No users found"
} }
} },
"notFound": "User not found",
"purchaseCount": "Purchases: {{count}}"
}, },
"promoOffers": { "promoOffers": {
"title": "Promo Offers", "title": "Promo Offers",
@@ -3342,7 +3434,8 @@
"tabs": { "tabs": {
"templates_one": "Templates ({{count}} template)", "templates_one": "Templates ({{count}} template)",
"templates_other": "Templates ({{count}} templates)", "templates_other": "Templates ({{count}} templates)",
"logs": "Logs" "logs": "Logs",
"templates": "Templates"
}, },
"noData": { "noData": {
"templates": "No templates", "templates": "No templates",
@@ -3372,7 +3465,9 @@
"activeDiscountHours": "Discount validity (hours)", "activeDiscountHours": "Discount validity (hours)",
"discountDurationHint": "How long the discount lasts after activation", "discountDurationHint": "How long the discount lasts after activation",
"templateActive": "Template active", "templateActive": "Template active",
"saving": "Saving..." "saving": "Saving...",
"noServers": "No servers",
"testSquads": "Test squads"
}, },
"send": { "send": {
"title": "Send promo offer", "title": "Send promo offer",
@@ -3398,7 +3493,10 @@
"notificationsSent_other": "Notifications sent: {{count}}", "notificationsSent_other": "Notifications sent: {{count}}",
"notificationsFailed_one": "(failed: {{count}})", "notificationsFailed_one": "(failed: {{count}})",
"notificationsFailed_other": "(failed: {{count}})", "notificationsFailed_other": "(failed: {{count}})",
"sendError": "Failed to send offer" "sendError": "Failed to send offer",
"notificationsSent": "Notifications sent",
"offersCreated": "Offers created",
"notificationsFailed": "(failed: {{count}})"
}, },
"notFound": "Template not found", "notFound": "Template not found",
"noActiveTemplates": "No active templates", "noActiveTemplates": "No active templates",
@@ -3535,7 +3633,8 @@
"selectedPermissions_other": "{{count}} permissions selected", "selectedPermissions_other": "{{count}} permissions selected",
"cancel": "Cancel", "cancel": "Cancel",
"saving": "Saving...", "saving": "Saving...",
"save": "Save" "save": "Save",
"selectedPermissions": "Selected permissions"
}, },
"presets": { "presets": {
"moderator": "Moderator", "moderator": "Moderator",
@@ -3555,7 +3654,9 @@
"updateFailed": "Failed to update role", "updateFailed": "Failed to update role",
"nameRequired": "Role name is required", "nameRequired": "Role name is required",
"deleteFailed": "Failed to delete role" "deleteFailed": "Failed to delete role"
} },
"permissionsCount": "{{count}} permissions",
"usersCount": "{{count}} users"
}, },
"roleAssign": { "roleAssign": {
"title": "Role Assignment", "title": "Role Assignment",
@@ -3608,7 +3709,8 @@
"roleRequired": "Please select a role", "roleRequired": "Please select a role",
"assignFailed": "Failed to assign role", "assignFailed": "Failed to assign role",
"revokeFailed": "Failed to revoke role" "revokeFailed": "Failed to revoke role"
} },
"totalAssignments": "Total assignments: {{count}}"
}, },
"policies": { "policies": {
"title": "Access Policies", "title": "Access Policies",
@@ -3676,7 +3778,8 @@
"day3": "Wed", "day3": "Wed",
"day4": "Thu", "day4": "Thu",
"day5": "Fri", "day5": "Fri",
"day6": "Sat" "day6": "Sat",
"ipCount": "IP count"
}, },
"confirm": { "confirm": {
"title": "Delete policy?", "title": "Delete policy?",
@@ -3762,7 +3865,10 @@
"hoursAgo_one": "{{count}} hr ago", "hoursAgo_one": "{{count}} hr ago",
"hoursAgo_other": "{{count}} hrs ago", "hoursAgo_other": "{{count}} hrs ago",
"daysAgo_one": "{{count}} day ago", "daysAgo_one": "{{count}} day ago",
"daysAgo_other": "{{count}} days ago" "daysAgo_other": "{{count}} days ago",
"daysAgo": "{{count}}d ago",
"hoursAgo": "{{count}}h ago",
"minutesAgo": "{{count}}m ago"
}, },
"pagination": { "pagination": {
"pageSize": "Per page:", "pageSize": "Per page:",
@@ -3775,7 +3881,8 @@
"errors": { "errors": {
"loadFailed": "Failed to load audit log", "loadFailed": "Failed to load audit log",
"retry": "Try again" "retry": "Try again"
} },
"totalEntries": "Total entries: {{count}}"
}, },
"landings": { "landings": {
"title": "Landing Pages", "title": "Landing Pages",
@@ -3869,7 +3976,8 @@
"funnel": "Funnel", "funnel": "Funnel",
"loadError": "Failed to load statistics", "loadError": "Failed to load statistics",
"noPurchases": "No purchases", "noPurchases": "No purchases",
"paid": "paid" "paid": "paid",
"dailyPurchases": "Purchases per day"
}, },
"purchases": { "purchases": {
"title": "Purchases", "title": "Purchases",
@@ -3895,7 +4003,16 @@
"page": "Page {{current}} of {{total}}", "page": "Page {{current}} of {{total}}",
"prev": "Previous", "prev": "Previous",
"next": "Next" "next": "Next"
} },
"methodCurrency": "Currency",
"methodDescPlaceholder": "Short description shown to the user",
"methodDescription": "Method description",
"methodDisplayName": "Display name",
"methodIconUrl": "Icon URL",
"methodMaxAmount": "Maximum amount",
"methodMinAmount": "Minimum amount",
"methodReturnUrl": "Return URL",
"stickyPayButton": "Sticky pay button"
}, },
"infoPages": { "infoPages": {
"title": "Information Pages", "title": "Information Pages",
@@ -4007,7 +4124,8 @@
"disable": "Disable", "disable": "Disable",
"hide": "Hide ({{count}})", "hide": "Hide ({{count}})",
"showMore_one": "Show {{count}} more node", "showMore_one": "Show {{count}} more node",
"showMore_other": "Show {{count}} more nodes" "showMore_other": "Show {{count}} more nodes",
"showMore": "Show more"
}, },
"topReferrers": { "topReferrers": {
"title": "Top referrers", "title": "Top referrers",
@@ -4457,7 +4575,8 @@
"yandex": "Yandex", "yandex": "Yandex",
"discord": "Discord", "discord": "Discord",
"vk": "VK" "vk": "VK"
} },
"backToAccounts": "Back to accounts"
} }
}, },
"theme": { "theme": {
@@ -4611,7 +4730,8 @@
"warning": "A cancelled promo code cannot be reused. The discount will stop working immediately.", "warning": "A cancelled promo code cannot be reused. The discount will stop working immediately.",
"confirm": "Cancel discount", "confirm": "Cancel discount",
"deactivating": "Cancelling...", "deactivating": "Cancelling...",
"error": "Failed to cancel promo code. Please try again later." "error": "Failed to cancel promo code. Please try again later.",
"success": "Offer deactivated"
} }
}, },
"telegramRedirect": { "telegramRedirect": {
@@ -4788,7 +4908,9 @@
"nDays_one": "{{count}} day", "nDays_one": "{{count}} day",
"nDays_other": "{{count}} days", "nDays_other": "{{count}} days",
"nMonths_one": "{{count}} month", "nMonths_one": "{{count}} month",
"nMonths_other": "{{count}} months" "nMonths_other": "{{count}} months",
"nDays": "{{count}} days",
"nMonths": "{{count}} months"
} }
}, },
"gift": { "gift": {
@@ -4966,5 +5088,12 @@
"linkUrlPrompt": "URL:" "linkUrlPrompt": "URL:"
} }
} }
},
"subscriptions": {
"buy": "Buy subscription",
"buyAnother": "Buy another subscription",
"empty": "You have no subscriptions yet",
"emptyDesc": "Choose a tariff to get started",
"title": "My subscriptions"
} }
} }

View File

@@ -23,14 +23,22 @@
"copy": "کپی", "copy": "کپی",
"units": { "units": {
"gb": "GB", "gb": "GB",
"perGb": "/GB" "perGb": "/GB",
"days": "روز",
"mo": "ماه"
}, },
"add": "افزودن", "add": "افزودن",
"refresh": "بازخوانی", "refresh": "بازخوانی",
"retry": "تلاش مجدد", "retry": "تلاش مجدد",
"saving": "در حال ذخیره...", "saving": "در حال ذخیره...",
"understand": "متوجه شدم", "understand": "متوجه شدم",
"collapse": "جمع کردن" "collapse": "جمع کردن",
"balance": "موجودی",
"copied": "کپی شد",
"no_results": "نتیجه‌ای یافت نشد",
"ok": "تأیید",
"processing": "در حال پردازش…",
"rangeTo": "تا"
}, },
"nav": { "nav": {
"dashboard": "داشبورد", "dashboard": "داشبورد",
@@ -45,7 +53,8 @@
"info": "اطلاعات", "info": "اطلاعات",
"wheel": "چرخ شانس", "wheel": "چرخ شانس",
"menu": "منو", "menu": "منو",
"gift": "هدیه" "gift": "هدیه",
"navigation": "ناوبری"
}, },
"notifications": { "notifications": {
"ticketNotifications": "اعلان‌های تیکت", "ticketNotifications": "اعلان‌های تیکت",
@@ -142,7 +151,17 @@
"tariff": "تعرفه", "tariff": "تعرفه",
"validUntil": "معتبر تا", "validUntil": "معتبر تا",
"goToSubscription": "رفتن به اشتراک", "goToSubscription": "رفتن به اشتراک",
"goToBalance": "رفتن به موجودی" "goToBalance": "رفتن به موجودی",
"devicesAdded": "+{{count}} دستگاه",
"devicesPurchased": {
"title": "دستگاه‌ها افزوده شدند"
},
"totalDevices": "مجموع دستگاه‌ها: {{count}}",
"totalTraffic": "مجموع ترافیک: {{value}}",
"trafficAdded": "+{{value}} ترافیک",
"trafficPurchased": {
"title": "ترافیک افزوده شد"
}
}, },
"auth": { "auth": {
"login": "ورود", "login": "ورود",
@@ -243,13 +262,38 @@
"tariffs": "تعرفه‌ها", "tariffs": "تعرفه‌ها",
"traffic": "ترافیک", "traffic": "ترافیک",
"devices": "دستگاه‌ها", "devices": "دستگاه‌ها",
"expiredDate": "منقضی شده" "expiredDate": "منقضی شده",
"activeUntil": "منقضی شده — تا {{date}}"
}, },
"deviceLimitReached": "برای افزودن دستگاه جدید، دستگاه‌های فعلی را قطع کنید", "deviceLimitReached": "برای افزودن دستگاه جدید، دستگاه‌های فعلی را قطع کنید",
"suspended": { "suspended": {
"title": "اشتراک معلق شده", "title": "اشتراک معلق شده",
"resume": "از سرگیری" "resume": "از سرگیری"
} },
"manageAll": "مدیریت همه",
"showAll": "نمایش همه",
"subscriptions": "اشتراک‌ها",
"connectDevice": "اتصال دستگاه",
"devicesConnectedUnlimited": "{{count}} دستگاه متصل",
"devicesOfMax": "{{used}} از {{max}}",
"maxUsage": "حداکثر",
"remaining": "باقی‌مانده",
"stats": {
"balance": "موجودی",
"referrals": "معرفی‌شده‌ها"
},
"tariff": "تعرفه",
"trafficUsageTitle": "مصرف ترافیک",
"trialOffer": {
"freeDesc": "{{days}} روز رایگان آزمایش کنید — بدون پرداخت",
"freeTitle": "دوره آزمایشی رایگان",
"paidDesc": "{{days}} روز آزمایشی فقط با {{price}}",
"paidTitle": "دوره آزمایشی پرداختی"
},
"unlimited": "نامحدود",
"usageLast14Days": "مصرف ۱۴ روز اخیر",
"usedSuffix": "مصرف شده",
"validUntil": "معتبر تا {{date}}"
}, },
"subscription": { "subscription": {
"title": "اشتراک", "title": "اشتراک",
@@ -339,7 +383,10 @@
"devices_other": "{{count}} دستگاه", "devices_other": "{{count}} دستگاه",
"price": "هزینه فعال‌سازی", "price": "هزینه فعال‌سازی",
"activate": "فعال‌سازی دوره آزمایشی", "activate": "فعال‌سازی دوره آزمایشی",
"unavailable": "دوره آزمایشی در دسترس نیست" "unavailable": "دوره آزمایشی در دسترس نیست",
"insufficientBalance": "موجودی برای فعال‌سازی دوره آزمایشی کافی نیست",
"payAndActivate": "پرداخت و فعال‌سازی",
"topUpToActivate": "برای فعال‌سازی دوره آزمایشی موجودی را افزایش دهید"
}, },
"connection": { "connection": {
"title": "اتصال VPN", "title": "اتصال VPN",
@@ -368,7 +415,8 @@
"goToApps": "رفتن به تنظیمات برنامه‌ها", "goToApps": "رفتن به تنظیمات برنامه‌ها",
"qrTitle": "کد QR اشتراک", "qrTitle": "کد QR اشتراک",
"qrScanHint": "برای اتصال با دوربین اسکن کنید", "qrScanHint": "برای اتصال با دوربین اسکن کنید",
"qrButton": "کد QR" "qrButton": "کد QR",
"openQr": "باز کردن کد QR"
}, },
"additionalOptions": { "additionalOptions": {
"title": "گزینه‌های اضافی", "title": "گزینه‌های اضافی",
@@ -387,7 +435,20 @@
"buyTrafficGb": "خرید {{gb}} GB", "buyTrafficGb": "خرید {{gb}} GB",
"buyUnlimited": "خرید نامحدود", "buyUnlimited": "خرید نامحدود",
"manageServers": "مدیریت اسکوادها", "manageServers": "مدیریت اسکوادها",
"manageServersTitle": "مدیریت اسکوادها" "manageServersTitle": "مدیریت اسکوادها",
"connectedDevices": "دستگاه‌های متصل",
"currentDeviceLimit": "محدودیت فعلی دستگاه",
"decrementDevices": "کاهش تعداد دستگاه‌ها",
"disconnectDevicesFirst": "ابتدا دستگاه‌های اضافی را قطع کنید",
"incrementDevices": "افزایش تعداد دستگاه‌ها",
"minDeviceLimit": "حداقل محدودیت دستگاه",
"newDeviceLimit": "محدودیت جدید دستگاه",
"reduce": "کاهش",
"reduceDevices": "کاهش تعداد دستگاه‌ها",
"reduceDevicesDescription": "محدودیت دستگاه‌های خود را تنظیم کنید. در صورت لزوم ابتدا دستگاه‌های اضافه را قطع کنید",
"reduceDevicesTitle": "کاهش تعداد دستگاه‌ها",
"reduceUnavailable": "در حال حاضر کاهش تعداد دستگاه‌ها امکان‌پذیر نیست",
"reducing": "در حال کاهش…"
}, },
"serverManagement": { "serverManagement": {
"statusLegend": "✅ — متصل • — اضافه خواهد شد (پولی) • — قطع خواهد شد", "statusLegend": "✅ — متصل • — اضافه خواهد شد (پولی) • — قطع خواهد شد",
@@ -499,6 +560,46 @@
"stopScan": "بستن دوربین", "stopScan": "بستن دوربین",
"noCamera": "دسترسی به دوربین امکان‌پذیر نیست", "noCamera": "دسترسی به دوربین امکان‌پذیر نیست",
"codeFound": "کد پیدا شد" "codeFound": "کد پیدا شد"
},
"allTariffsPurchased": "همه تعرفه‌ها قبلاً خریداری شده‌اند",
"autopay": "تمدید خودکار",
"backToList": "بازگشت به فهرست اشتراک‌ها",
"confirmDelete": "اشتراک حذف شود؟",
"cta": {
"renewHint": "اشتراک منقضی شده — برای ادامه استفاده تمدید کنید",
"activeHint": "اشتراک فعال است — می‌توانید دستگاه‌ها را متصل کرده و از VPN استفاده کنید",
"expiredHint": "اشتراک منقضی شده — برای ادامه استفاده تمدید کنید",
"trialHint": "شما در دوره آزمایشی هستید — برای دسترسی به همه امکانات به تعرفه پرداختی ارتقا دهید"
},
"dailyAutoCharge": "برداشت خودکار روزانه",
"defaultName": "اشتراک",
"delete": "حذف",
"deleteTitle": "حذف اشتراک",
"get_config": "دریافت پیکربندی",
"loadError": "بارگذاری اشتراک ناموفق بود",
"newTariff": "تعرفه جدید",
"noOptionsAvailable": "گزینه‌ای در دسترس نیست",
"noRenewalOptions": "گزینه‌ای برای تمدید وجود ندارد",
"notFound": "اشتراک یافت نشد",
"notFoundDesc": "ممکن است حذف شده یا هنوز فعال نشده باشد",
"servers": "سرورها",
"statusActive": "فعال",
"statusExpired": "منقضی شده",
"statusLimited": "محدود",
"statusTrial": "آزمایشی",
"daysShort": "روز",
"expiredBanner": {
"selectTariff": "تعرفه را انتخاب کنید",
"title": "اشتراک منقضی شده است"
},
"trialInfo": {
"description": "{{days}} روز سرویس ما را رایگان امتحان کنید",
"remaining": "{{count}} روز باقی‌مانده",
"title": "دوره آزمایشی"
},
"trialUpgrade": {
"description": "برای دسترسی به همه امکانات و ادامه استفاده به اشتراک پرداختی ارتقا دهید",
"title": "ارتقای اشتراک"
} }
}, },
"balance": { "balance": {
@@ -575,7 +676,9 @@
"already_used_by_user": "شما قبلاً از این کد استفاده کرده‌اید", "already_used_by_user": "شما قبلاً از این کد استفاده کرده‌اید",
"user_not_found": "کاربر یافت نشد", "user_not_found": "کاربر یافت نشد",
"server_error": "خطای سرور" "server_error": "خطای سرور"
} },
"daysLeft": "روزهای باقی‌مانده: {{count}}",
"selectSubscription": "اشتراک را انتخاب کنید"
}, },
"minAmountError": "حداقل مبلغ: {{amount}}", "minAmountError": "حداقل مبلغ: {{amount}}",
"maxAmountError": "حداکثر مبلغ: {{amount}}", "maxAmountError": "حداکثر مبلغ: {{amount}}",
@@ -633,7 +736,8 @@
"timeoutDesc": "پردازش پرداخت بیشتر از حد معمول طول می‌کشد. می‌توانید دوباره وضعیت را بررسی کنید.", "timeoutDesc": "پردازش پرداخت بیشتر از حد معمول طول می‌کشد. می‌توانید دوباره وضعیت را بررسی کنید.",
"goToBalance": "مشاهده موجودی", "goToBalance": "مشاهده موجودی",
"tryAgain": "تلاش مجدد" "tryAgain": "تلاش مجدد"
} },
"top_up": "افزایش موجودی"
}, },
"referral": { "referral": {
"title": "برنامه معرفی", "title": "برنامه معرفی",
@@ -817,7 +921,8 @@
"contactUs": "تماس با پشتیبانی", "contactUs": "تماس با پشتیبانی",
"openSupport": "باز کردن پشتیبانی", "openSupport": "باز کردن پشتیبانی",
"ticketsDisabled": "تیکت‌ها غیرفعال است", "ticketsDisabled": "تیکت‌ها غیرفعال است",
"useExternalLink": "لطفاً از لینک خارجی برای دریافت پشتیبانی استفاده کنید" "useExternalLink": "لطفاً از لینک خارجی برای دریافت پشتیبانی استفاده کنید",
"create_ticket": "ایجاد تیکت"
}, },
"wheel": { "wheel": {
"title": "چرخ شانس", "title": "چرخ شانس",
@@ -849,7 +954,8 @@
"insufficientBalance": "موجودی کافی نیست", "insufficientBalance": "موجودی کافی نیست",
"topUpRequired": "برای پرداخت شارژ کنید", "topUpRequired": "برای پرداخت شارژ کنید",
"starsNotAvailable": "پرداخت Stars در دسترس نیست. برنامه را از طریق تلگرام باز کنید.", "starsNotAvailable": "پرداخت Stars در دسترس نیست. برنامه را از طریق تلگرام باز کنید.",
"noSubscription": "برای چرخاندن گردونه نیاز به اشتراک فعال دارید. ابتدا اشتراک خود را فعال کنید." "noSubscription": "برای چرخاندن گردونه نیاز به اشتراک فعال دارید. ابتدا اشتراک خود را فعال کنید.",
"selectSubscription": "ابتدا یک اشتراک انتخاب کنید"
}, },
"payWithStars": "پرداخت {stars} Stars", "payWithStars": "پرداخت {stars} Stars",
"processingPayment": "در حال پردازش...", "processingPayment": "در حال پردازش...",
@@ -868,7 +974,8 @@
"noPrize": "این بار شانس نیاوردید...", "noPrize": "این بار شانس نیاوردید...",
"payWithDays": "پرداخت با روز", "payWithDays": "پرداخت با روز",
"starsPaymentSuccessCheckHistory": "پرداخت موفق! تاریخچه یا تلگرام را بررسی کنید.", "starsPaymentSuccessCheckHistory": "پرداخت موفق! تاریخچه یا تلگرام را بررسی کنید.",
"youWon": "شما برنده شدید" "youWon": "شما برنده شدید",
"selectSubscription": "اشتراک را انتخاب کنید"
}, },
"admin": { "admin": {
"backgrounds": { "backgrounds": {
@@ -1422,7 +1529,32 @@
"customButtonTypeCallback": "Callback", "customButtonTypeCallback": "Callback",
"customButtonTypeUrl": "لینک", "customButtonTypeUrl": "لینک",
"customButtonCallbackPlaceholder": "callback_data (مثلاً back_to_menu)", "customButtonCallbackPlaceholder": "callback_data (مثلاً back_to_menu)",
"customButtonUrlPlaceholder": "https://example.com" "customButtonUrlPlaceholder": "https://example.com",
"category": "دسته‌بندی",
"categoryNews": "اخبار",
"categoryPromo": "تبلیغاتی",
"categorySystem": "سیستمی",
"stopping": "در حال توقف…",
"btnBalance": "افزایش موجودی",
"btnConnect": "اتصال",
"btnHome": "صفحه اصلی",
"btnPartners": "برنامه معرفی",
"btnPromocode": "کد تخفیف",
"btnSubscription": "اشتراک",
"btnSupport": "پشتیبانی",
"emailContent": "محتوای ایمیل",
"emailContentHint": "پشتیبانی از HTML",
"emailContentPlaceholder": "<p>سلام، {{user_name}}!</p>\n<p>پیام شما اینجا...</p>",
"emailSection": "ارسال انبوه ایمیل",
"emailSubject": "موضوع ایمیل",
"emailSubjectPlaceholder": "موضوع ایمیل را وارد کنید...",
"emailVariables": "متغیرهای موجود",
"preview": "پیش‌نمایش",
"previewEmpty": "— خالی —",
"selectChannel": "کانال ارسال",
"selectEmailFilter": "مخاطبان ایمیل را انتخاب کنید",
"selectEmailFilterPlaceholder": "فیلتر را انتخاب کنید...",
"telegramSection": "ارسال انبوه تلگرام"
}, },
"pinnedMessages": { "pinnedMessages": {
"title": "Pinned Messages", "title": "Pinned Messages",
@@ -1723,8 +1855,8 @@
"telegramOidcClientId": "Client ID (شناسه ربات)", "telegramOidcClientId": "Client ID (شناسه ربات)",
"telegramOidcClientSecret": "Client Secret" "telegramOidcClientSecret": "Client Secret"
}, },
"offlineConv": "\u062a\u0628\u062f\u06cc\u0644\u200c\u0647\u0627\u06cc \u0622\u0641\u0644\u0627\u06cc\u0646", "offlineConv": "تبدیل‌های آفلاین",
"apiKey": "\u06a9\u0644\u06cc\u062f API" "apiKey": "کلید API"
}, },
"buttons": { "buttons": {
"color": "رنگ دکمه", "color": "رنگ دکمه",
@@ -1830,7 +1962,10 @@
"remnaWaveConfigUuidHint": "UUID پیکربندی صفحه اشتراک از پنل RemnaWave", "remnaWaveConfigUuidHint": "UUID پیکربندی صفحه اشتراک از پنل RemnaWave",
"remnaWaveMode": "نمایش برنامه‌ها از پنل RemnaWave. حالت فقط خواندنی.", "remnaWaveMode": "نمایش برنامه‌ها از پنل RemnaWave. حالت فقط خواندنی.",
"remnaWaveSettings": "تنظیمات RemnaWave", "remnaWaveSettings": "تنظیمات RemnaWave",
"remnaWaveToggle": "تغییر منبع RemnaWave" "remnaWaveToggle": "تغییر منبع RemnaWave",
"noConfigs": "هیچ تنظیماتی وجود ندارد",
"remnaWaveConnected": "RemnaWave متصل است",
"remnaWaveDisconnected": "RemnaWave قطع است"
}, },
"tickets": { "tickets": {
"title": "مدیریت تیکت‌ها", "title": "مدیریت تیکت‌ها",
@@ -1881,7 +2016,13 @@
"copyTelegramId": "برای کپی شناسه تلگرام کلیک کنید", "copyTelegramId": "برای کپی شناسه تلگرام کلیک کنید",
"viewUser": "کاربر", "viewUser": "کاربر",
"userNotificationsEnabled": "اعلان‌های کاربر", "userNotificationsEnabled": "اعلان‌های کاربر",
"userNotificationsEnabledDesc": "ارسال اعلان به کاربران درباره پاسخ‌های مدیر" "userNotificationsEnabledDesc": "ارسال اعلان به کاربران درباره پاسخ‌های مدیر",
"replyFailed": "ارسال پاسخ ناموفق بود",
"validation": {
"checkIntervalRange": "بازه بررسی باید بین ۱ تا ۱۴۴۰ دقیقه باشد",
"reminderCooldownRange": "زمان تأخیر یادآوری باید بین ۰ تا ۱۴۴۰ دقیقه باشد",
"slaMinutesRange": "SLA باید بین ۱ تا ۱۰۰۸۰ دقیقه باشد"
}
}, },
"tariffs": { "tariffs": {
"title": "مدیریت تعرفه‌ها", "title": "مدیریت تعرفه‌ها",
@@ -2111,7 +2252,8 @@
"promoGroupsShort": "گروه", "promoGroupsShort": "گروه",
"noPromoGroups": "هیچ گروه تبلیغاتی نیست", "noPromoGroups": "هیچ گروه تبلیغاتی نیست",
"cancelButton": "لغو", "cancelButton": "لغو",
"saveButton": "ذخیره" "saveButton": "ذخیره",
"notFound": "روش پرداخت یافت نشد"
}, },
"campaigns": { "campaigns": {
"title": "کمپین‌های تبلیغاتی", "title": "کمپین‌های تبلیغاتی",
@@ -2139,7 +2281,8 @@
"deactivate": "غیرفعال کردن", "deactivate": "غیرفعال کردن",
"activate": "فعال کردن", "activate": "فعال کردن",
"edit": "ویرایش", "edit": "ویرایش",
"delete": "حذف" "delete": "حذف",
"registrations": "ثبت‌نام‌ها"
}, },
"modal": { "modal": {
"editTitle": "ویرایش کمپین", "editTitle": "ویرایش کمپین",
@@ -2207,7 +2350,9 @@
"totalSpending": "هزینه اشتراک", "totalSpending": "هزینه اشتراک",
"periodComparison": "مقایسه دوره‌ها", "periodComparison": "مقایسه دوره‌ها",
"vsLastWeek": "نسبت به هفته قبل", "vsLastWeek": "نسبت به هفته قبل",
"topRegistrations": "بالاترین ثبت‌نام‌ها" "topRegistrations": "بالاترین ثبت‌نام‌ها",
"subscriptionsIssued": "اشتراک‌های صادر شده",
"tariffsIssued": "تعرفه‌های صادر شده"
}, },
"users": { "users": {
"title": "کاربران کمپین", "title": "کاربران کمپین",
@@ -2231,7 +2376,11 @@
"delete": "حذف" "delete": "حذف"
}, },
"loadError": "بارگذاری کمپین ناموفق بود", "loadError": "بارگذاری کمپین ناموفق بود",
"updateError": "ذخیره تغییرات ناموفق بود" "updateError": "ذخیره تغییرات ناموفق بود",
"validation": {
"nameRequired": "نام الزامی است"
},
"loadMore": "بارگذاری بیشتر"
}, },
"withdrawals": { "withdrawals": {
"title": "برداشت‌ها", "title": "برداشت‌ها",
@@ -2338,7 +2487,30 @@
"description": "رد درخواست شراکت از {{name}}", "description": "رد درخواست شراکت از {{name}}",
"commentLabel": "نظر (اختیاری)", "commentLabel": "نظر (اختیاری)",
"commentPlaceholder": "دلیل رد..." "commentPlaceholder": "دلیل رد..."
} },
"settings": "تنظیمات",
"settingsFields": {
"cooldownDays": "فاصله بین برداشت‌ها (روز)",
"cooldownDaysDesc": "چند روز باید بین درخواست‌های برداشت بگذرد",
"minAmount": "حداقل مبلغ برداشت (کوپک)",
"minAmountDesc": "حداقل مبلغ برای درخواست برداشت (۱۰۰ کوپک = ۱ ₽)",
"partnerVisible": "بخش همکاران در کابین قابل مشاهده باشد",
"partnerVisibleDesc": "نمایش/مخفی کردن بخش‌های درخواست همکاری و برداشت برای کاربران",
"programEnabled": "برنامه معرفی فعال است",
"programEnabledDesc": "تمام عملکرد ارجاع را فعال می‌کند",
"requisitesText": "متن اطلاعات حساب",
"requisitesTextDesc": "در فرم درخواست همکاری به کاربر نمایش داده می‌شود",
"requisitesTextPlaceholder": "اطلاعات حساب خود را وارد کنید...",
"withdrawalEnabled": "برداشت مجاز است",
"withdrawalEnabledDesc": "به کاربران اجازه می‌دهد درخواست برداشت بدهند"
},
"settingsLoadError": "بارگذاری تنظیمات همکاری ناموفق بود",
"settingsSection": {
"referralProgram": "برنامه معرفی",
"withdrawalSettings": "تنظیمات برداشت"
},
"settingsSubtitle": "تنظیمات برنامه معرفی و برداشت همکاران",
"settingsUpdateError": "ذخیره تنظیمات همکاری ناموفق بود"
}, },
"partnerDetail": { "partnerDetail": {
"title": "جزئیات شریک", "title": "جزئیات شریک",
@@ -2379,7 +2551,10 @@
"createTitle": "ایجاد کمپین", "createTitle": "ایجاد کمپین",
"createSubtitle": "کمپین به‌طور خودکار به شریک اختصاص می‌یابد", "createSubtitle": "کمپین به‌طور خودکار به شریک اختصاص می‌یابد",
"autoAssignNote": "کمپین به‌طور خودکار به شریک {{name}} اختصاص می‌یابد", "autoAssignNote": "کمپین به‌طور خودکار به شریک {{name}} اختصاص می‌یابد",
"createAndAssign": "ایجاد و اختصاص" "createAndAssign": "ایجاد و اختصاص",
"earnings": "درآمد",
"referrals": "معرفی‌شده‌ها",
"registrations": "ثبت‌نام‌ها"
}, },
"dangerZone": { "dangerZone": {
"title": "منطقه خطر", "title": "منطقه خطر",
@@ -2452,7 +2627,10 @@
"firstPurchaseOnly": "فقط برای اولین خرید", "firstPurchaseOnly": "فقط برای اولین خرید",
"cancel": "لغو", "cancel": "لغو",
"saving": "در حال ذخیره...", "saving": "در حال ذخیره...",
"save": "ذخیره" "save": "ذخیره",
"defaultTrialTariff": "تعرفه پیش‌فرض آزمایشی",
"selectTariff": "تعرفه را انتخاب کنید",
"tariff": "تعرفه"
}, },
"stats": { "stats": {
"title": "آمار کد تخفیف", "title": "آمار کد تخفیف",
@@ -2481,7 +2659,8 @@
"totalPromocodes": "کل کدهای تخفیف", "totalPromocodes": "کل کدهای تخفیف",
"activeCount": "فعال", "activeCount": "فعال",
"usagesCount": "استفاده‌ها", "usagesCount": "استفاده‌ها",
"exhausted": "تمام شده" "exhausted": "تمام شده",
"hoursValue": "{{count}} ساعت"
}, },
"actions": { "actions": {
"stats": "آمار", "stats": "آمار",
@@ -2736,7 +2915,9 @@
"expired": "منقضی شده", "expired": "منقضی شده",
"daysLeft": "روز باقیمانده", "daysLeft": "روز باقیمانده",
"deviceLimitUpdated": "محدودیت دستگاه به‌روز شد", "deviceLimitUpdated": "محدودیت دستگاه به‌روز شد",
"invalidDays": "لطفاً تعداد روز معتبر وارد کنید (بیشتر از ۰)" "invalidDays": "لطفاً تعداد روز معتبر وارد کنید (بیشتر از ۰)",
"backToList": "بازگشت به فهرست اشتراک‌ها",
"createNew": "ایجاد جدید"
}, },
"balance": { "balance": {
"current": "موجودی فعلی", "current": "موجودی فعلی",
@@ -2819,6 +3000,26 @@
"searchPlaceholder": "جستجو بر اساس نام، ایمیل یا شناسه تلگرام...", "searchPlaceholder": "جستجو بر اساس نام، ایمیل یا شناسه تلگرام...",
"alreadyReferred": "قبلاً معرفی شده", "alreadyReferred": "قبلاً معرفی شده",
"noUsersFound": "کاربری یافت نشد" "noUsersFound": "کاربری یافت نشد"
},
"actions": {
"areYouSure": "آیا مطمئنید می‌خواهید ادامه دهید؟",
"title": "عملیات"
},
"noVpnData": "داده‌ای از VPN وجود ندارد"
},
"notFound": "کاربر یافت نشد",
"purchaseCount": "تعداد خرید: {{count}}",
"userActions": {
"delete": "حذف کاربر",
"disable": "غیرفعال‌سازی",
"error": "انجام عملیات ناموفق بود",
"resetSubscription": "بازنشانی اشتراک",
"resetTrial": "بازنشانی دوره آزمایشی",
"success": {
"delete": "کاربر حذف شد",
"disable": "کاربر غیرفعال شد",
"resetSubscription": "اشتراک بازنشانی شد",
"resetTrial": "دوره آزمایشی بازنشانی شد"
} }
} }
}, },
@@ -2828,7 +3029,8 @@
"sendButton": "ارسال", "sendButton": "ارسال",
"tabs": { "tabs": {
"templates_other": "قالب‌ها ({{count}})", "templates_other": "قالب‌ها ({{count}})",
"logs": "گزارش‌ها" "logs": "گزارش‌ها",
"templates": "قالب‌ها"
}, },
"noData": { "noData": {
"templates": "قالبی وجود ندارد", "templates": "قالبی وجود ندارد",
@@ -2858,7 +3060,9 @@
"activeDiscountHours": "اعتبار تخفیف (ساعت)", "activeDiscountHours": "اعتبار تخفیف (ساعت)",
"discountDurationHint": "مدت زمان اعتبار تخفیف پس از فعال‌سازی", "discountDurationHint": "مدت زمان اعتبار تخفیف پس از فعال‌سازی",
"templateActive": "قالب فعال", "templateActive": "قالب فعال",
"saving": "در حال ذخیره..." "saving": "در حال ذخیره...",
"noServers": "هیچ سروری وجود ندارد",
"testSquads": "تیم‌های آزمایشی"
}, },
"send": { "send": {
"title": "ارسال پیشنهاد تبلیغاتی", "title": "ارسال پیشنهاد تبلیغاتی",
@@ -2881,7 +3085,9 @@
"offersCreated_other": "پیشنهادات ایجاد شده: {{count}}", "offersCreated_other": "پیشنهادات ایجاد شده: {{count}}",
"notificationsSent_other": "اعلان‌های ارسال شده: {{count}}", "notificationsSent_other": "اعلان‌های ارسال شده: {{count}}",
"notificationsFailed": "(ناموفق: {{count}})", "notificationsFailed": "(ناموفق: {{count}})",
"sendError": "ارسال پیشنهاد ناموفق بود" "sendError": "ارسال پیشنهاد ناموفق بود",
"notificationsSent": "اعلان‌های ارسال شده",
"offersCreated": "پیشنهادهای ایجاد شده"
}, },
"notFound": "قالب یافت نشد", "notFound": "قالب یافت نشد",
"noActiveTemplates": "قالب فعالی وجود ندارد", "noActiveTemplates": "قالب فعالی وجود ندارد",
@@ -2970,7 +3176,8 @@
"offline": "آفلاین", "offline": "آفلاین",
"disabled": "غیرفعال", "disabled": "غیرفعال",
"users": "کاربران" "users": "کاربران"
} },
"usersOnlineCount": "{{count}} آنلاین"
}, },
"overview": { "overview": {
"bandwidth": "پهنای باند لحظه‌ای", "bandwidth": "پهنای باند لحظه‌ای",
@@ -3021,7 +3228,9 @@
"localSettings": "تنظیمات محلی", "localSettings": "تنظیمات محلی",
"trialEligible": "واجد شرایط آزمایشی", "trialEligible": "واجد شرایط آزمایشی",
"price": "قیمت", "price": "قیمت",
"users": "کاربران" "users": "کاربران",
"inboundsCount": "{{count}} ورودی",
"membersCount": "{{count}} عضو"
}, },
"sync": { "sync": {
"autoSync": "همگام‌سازی خودکار", "autoSync": "همگام‌سازی خودکار",
@@ -3146,7 +3355,8 @@
"selectedPermissions_other": "{{count}} مجوز انتخاب شده", "selectedPermissions_other": "{{count}} مجوز انتخاب شده",
"cancel": "لغو", "cancel": "لغو",
"saving": "در حال ذخیره...", "saving": "در حال ذخیره...",
"save": "ذخیره" "save": "ذخیره",
"selectedPermissions": "مجوزهای انتخاب‌شده"
}, },
"presets": { "presets": {
"moderator": "مدیر محتوا", "moderator": "مدیر محتوا",
@@ -3166,7 +3376,9 @@
"updateFailed": "به‌روزرسانی نقش ناموفق بود", "updateFailed": "به‌روزرسانی نقش ناموفق بود",
"nameRequired": "نام نقش الزامی است", "nameRequired": "نام نقش الزامی است",
"deleteFailed": "حذف نقش ناموفق بود" "deleteFailed": "حذف نقش ناموفق بود"
} },
"permissionsCount": "{{count}} مجوز",
"usersCount": "{{count}} کاربر"
}, },
"roleAssign": { "roleAssign": {
"title": "تخصیص نقش", "title": "تخصیص نقش",
@@ -3218,7 +3430,8 @@
"roleRequired": "لطفاً یک نقش انتخاب کنید", "roleRequired": "لطفاً یک نقش انتخاب کنید",
"assignFailed": "تخصیص نقش ناموفق بود", "assignFailed": "تخصیص نقش ناموفق بود",
"revokeFailed": "لغو نقش ناموفق بود" "revokeFailed": "لغو نقش ناموفق بود"
} },
"totalAssignments": "مجموع انتساب‌ها: {{count}}"
}, },
"policies": { "policies": {
"title": "سیاست‌های دسترسی", "title": "سیاست‌های دسترسی",
@@ -3285,7 +3498,8 @@
"day3": "چهارشنبه", "day3": "چهارشنبه",
"day4": "پنجشنبه", "day4": "پنجشنبه",
"day5": "جمعه", "day5": "جمعه",
"day6": "شنبه" "day6": "شنبه",
"ipCount": "تعداد آی‌پی"
}, },
"confirm": { "confirm": {
"title": "حذف سیاست؟", "title": "حذف سیاست؟",
@@ -3367,7 +3581,10 @@
"justNow": "همین الان", "justNow": "همین الان",
"minutesAgo_other": "{{count}} دقیقه پیش", "minutesAgo_other": "{{count}} دقیقه پیش",
"hoursAgo_other": "{{count}} ساعت پیش", "hoursAgo_other": "{{count}} ساعت پیش",
"daysAgo_other": "{{count}} روز پیش" "daysAgo_other": "{{count}} روز پیش",
"daysAgo": "{{count}} روز پیش",
"hoursAgo": "{{count}} ساعت پیش",
"minutesAgo": "{{count}} دقیقه پیش"
}, },
"pagination": { "pagination": {
"pageSize": "در هر صفحه:", "pageSize": "در هر صفحه:",
@@ -3380,7 +3597,8 @@
"errors": { "errors": {
"loadFailed": "بارگذاری گزارش بازرسی ناموفق بود", "loadFailed": "بارگذاری گزارش بازرسی ناموفق بود",
"retry": "تلاش مجدد" "retry": "تلاش مجدد"
} },
"totalEntries": "مجموع موارد: {{count}}"
}, },
"landings": { "landings": {
"title": "صفحات فرود", "title": "صفحات فرود",
@@ -3474,7 +3692,8 @@
"funnel": "قیف", "funnel": "قیف",
"loadError": "بارگذاری آمار ناموفق بود", "loadError": "بارگذاری آمار ناموفق بود",
"noPurchases": "خریدی وجود ندارد", "noPurchases": "خریدی وجود ندارد",
"paid": "پرداخت شده" "paid": "پرداخت شده",
"dailyPurchases": "خریدهای روزانه"
}, },
"purchases": { "purchases": {
"title": "خریدها", "title": "خریدها",
@@ -3500,7 +3719,16 @@
"page": "صفحه {{current}} از {{total}}", "page": "صفحه {{current}} از {{total}}",
"prev": "قبلی", "prev": "قبلی",
"next": "بعدی" "next": "بعدی"
} },
"methodCurrency": "ارز",
"methodDescPlaceholder": "توضیح کوتاه برای کاربر",
"methodDescription": "توضیحات روش",
"methodDisplayName": "نام نمایشی",
"methodIconUrl": "آدرس نماد",
"methodMaxAmount": "حداکثر مبلغ",
"methodMinAmount": "حداقل مبلغ",
"methodReturnUrl": "آدرس بازگشت",
"stickyPayButton": "دکمه پرداخت ثابت"
}, },
"infoPages": { "infoPages": {
"title": "صفحات اطلاعات", "title": "صفحات اطلاعات",
@@ -3597,7 +3825,9 @@
}, },
"deleteSubscription": { "deleteSubscription": {
"warning": "اشتراک‌های انتخاب شده برای همیشه از ربات و پنل RemnaWave حذف خواهند شد!", "warning": "اشتراک‌های انتخاب شده برای همیشه از ربات و پنل RemnaWave حذف خواهند شد!",
"hint": "کاربران دسترسی VPN اشتراک‌های حذف شده را از دست خواهند داد. این عملیات قابل بازگشت نیست." "hint": "کاربران دسترسی VPN اشتراک‌های حذف شده را از دست خواهند داد. این عملیات قابل بازگشت نیست.",
"activePaidWarning": "{{count}} از {{total}} اشتراک انتخاب‌شده اشتراک‌های فعال پرداختی هستند",
"forceDeleteConfirm": "حذف اشتراک‌های فعال پرداختی را تأیید می‌کنم"
}, },
"deleteUser": { "deleteUser": {
"warning": "کاربران انتخاب شده برای همیشه از ربات حذف خواهند شد! تمام اشتراک‌ها، موجودی و داده‌های آن‌ها از بین خواهد رفت!", "warning": "کاربران انتخاب شده برای همیشه از ربات حذف خواهند شد! تمام اشتراک‌ها، موجودی و داده‌های آن‌ها از بین خواهد رفت!",
@@ -3718,7 +3948,8 @@
"enable": "فعال", "enable": "فعال",
"disable": "غیرفعال", "disable": "غیرفعال",
"hide": "پنهان کردن ({{count}})", "hide": "پنهان کردن ({{count}})",
"showMore_other": "نمایش {{count}} گره بیشتر" "showMore_other": "نمایش {{count}} گره بیشتر",
"showMore": "نمایش بیشتر"
}, },
"revenue": { "revenue": {
"title": "درآمد", "title": "درآمد",
@@ -3782,6 +4013,16 @@
"uptime": "آپتایم", "uptime": "آپتایم",
"users": "کاربران", "users": "کاربران",
"activeSubs": "اشتراک‌ها" "activeSubs": "اشتراک‌ها"
},
"tariffs": {
"activeSubscriptions": "اشتراک‌های فعال",
"purchasedMonth": "فروش ماه",
"purchasedToday": "فروش امروز",
"purchasedWeek": "فروش هفته",
"subtitle": "آمار به تفکیک تعرفه",
"tariffName": "نام تعرفه",
"title": "آمار تعرفه‌ها",
"trialSubscriptions": "اشتراک‌های آزمایشی"
} }
}, },
"profile": { "profile": {
@@ -3879,7 +4120,8 @@
"yandex": "یاندکس", "yandex": "یاندکس",
"discord": "دیسکورد", "discord": "دیسکورد",
"vk": "VK" "vk": "VK"
} },
"backToAccounts": "بازگشت به فهرست حساب‌ها"
} }
}, },
"theme": { "theme": {
@@ -4030,7 +4272,8 @@
"warning": "کد تخفیف لغو شده قابل استفاده مجدد نیست. تخفیف بلافاصله متوقف می‌شود.", "warning": "کد تخفیف لغو شده قابل استفاده مجدد نیست. تخفیف بلافاصله متوقف می‌شود.",
"confirm": "لغو تخفیف", "confirm": "لغو تخفیف",
"deactivating": "در حال لغو...", "deactivating": "در حال لغو...",
"error": "لغو کد تخفیف ناموفق بود. لطفاً بعداً دوباره امتحان کنید." "error": "لغو کد تخفیف ناموفق بود. لطفاً بعداً دوباره امتحان کنید.",
"success": "پیشنهاد غیرفعال شد"
} }
}, },
"telegramRedirect": { "telegramRedirect": {
@@ -4318,6 +4561,12 @@
"d456": "۱ سال و ۳ ماه", "d456": "۱ سال و ۳ ماه",
"nDays": "{{count}} روز", "nDays": "{{count}} روز",
"nMonths": "{{count}} ماه" "nMonths": "{{count}} ماه"
},
"discount": {
"days": "روز",
"hours": "ساعت",
"minutes": "دقیقه",
"seconds": "ثانیه"
} }
}, },
"gift": { "gift": {
@@ -4376,7 +4625,43 @@
}, },
"warning": { "warning": {
"telegram_unresolvable": "نام کاربری تلگرام قابل تأیید نبود. ممکن است گیرنده اعلان هدیه را دریافت نکند." "telegram_unresolvable": "نام کاربری تلگرام قابل تأیید نبود. ممکن است گیرنده اعلان هدیه را دریافت نکند."
} },
"activateButton": "فعال‌سازی",
"activateCodePlaceholder": "کد هدیه را وارد کنید",
"activatedBy": "توسط {{name}} فعال شد",
"activateDescription": "برای فعال‌سازی اشتراک، کد هدیه دریافتی را وارد کنید",
"activatedGiftsTitle": "هدایای فعال‌شده",
"activateError": "فعال‌سازی هدیه ناموفق بود",
"activateSelfError": "نمی‌توانید هدیه خودتان را فعال کنید",
"activateSuccess": "هدیه فعال شد!",
"activateSuccessDesc": "اشتراک به حساب شما افزوده شد",
"activateTitle": "فعال‌سازی هدیه",
"activeGiftsTitle": "هدایای فعال",
"codeLabel": "کد هدیه",
"codeReadyTitle": "کد هدیه شما آماده است",
"copyMessage": "کپی پیام",
"daysShort": "روز",
"deviceCount": "تعداد دستگاه‌ها",
"devicesShort": "دستگاه",
"gbShort": "گیگابایت",
"myGiftsEmpty": "هنوز هدیه‌ای ندارید",
"myGiftsEmptyDesc": "هدایایی که ارسال یا دریافت می‌کنید اینجا نمایش داده می‌شوند",
"pageTitle": "هدایا",
"receivedGiftsTitle": "هدایای دریافت‌شده",
"selectPeriod": "دوره را انتخاب کنید",
"selectTariff": "تعرفه را انتخاب کنید",
"sentTo": "به {{name}} ارسال شد",
"shareGift": "به اشتراک گذاشتن هدیه",
"shareModalActivateVia": "از طریق فعال‌سازی",
"shareModalActivateViaCabinet": "از طریق کابین",
"shareText": "برای شما هدیه‌ای از Bedolaga VPN دارم: {{code}}",
"shareToastCopied": "لینک کپی شد",
"statusActivated": "فعال شده",
"statusAvailable": "قابل فعال‌سازی",
"tabActivate": "فعال‌سازی",
"tabBuy": "خرید",
"tabMyGifts": "هدایای من",
"unlimitedTraffic": "ترافیک نامحدود"
}, },
"news": { "news": {
"title": "اخبار و به‌روزرسانی‌ها", "title": "اخبار و به‌روزرسانی‌ها",
@@ -4437,5 +4722,12 @@
"linkUrlPrompt": "آدرس پیوند:" "linkUrlPrompt": "آدرس پیوند:"
} }
} }
},
"subscriptions": {
"buy": "خرید اشتراک",
"buyAnother": "خرید اشتراک دیگر",
"empty": "هنوز اشتراکی ندارید",
"emptyDesc": "برای شروع تعرفه‌ای انتخاب کنید",
"title": "اشتراک‌های من"
} }
} }

View File

@@ -29,8 +29,16 @@
"understand": "Понятно", "understand": "Понятно",
"units": { "units": {
"gb": "ГБ", "gb": "ГБ",
"perGb": "/ГБ" "perGb": "/ГБ",
} "days": "дн",
"mo": "мес"
},
"balance": "Баланс",
"copied": "Скопировано",
"no_results": "Ничего не найдено",
"ok": "ОК",
"processing": "Обработка…",
"rangeTo": "до"
}, },
"nav": { "nav": {
"dashboard": "Главная", "dashboard": "Главная",
@@ -45,7 +53,8 @@
"info": "Информация", "info": "Информация",
"wheel": "Колесо удачи", "wheel": "Колесо удачи",
"menu": "Меню", "menu": "Меню",
"gift": "Подарить" "gift": "Подарить",
"navigation": "Навигация"
}, },
"notifications": { "notifications": {
"ticketNotifications": "Уведомления о тикетах", "ticketNotifications": "Уведомления о тикетах",
@@ -151,7 +160,17 @@
"tariff": "Тариф", "tariff": "Тариф",
"validUntil": "Действует до", "validUntil": "Действует до",
"goToSubscription": "Перейти к подписке", "goToSubscription": "Перейти к подписке",
"goToBalance": "Перейти к балансу" "goToBalance": "Перейти к балансу",
"devicesAdded": "+{{count}} устройств",
"devicesPurchased": {
"title": "Устройства добавлены"
},
"totalDevices": "Всего устройств: {{count}}",
"totalTraffic": "Всего трафика: {{value}}",
"trafficAdded": "+{{value}} трафика",
"trafficPurchased": {
"title": "Трафик добавлен"
}
}, },
"auth": { "auth": {
"login": "Вход", "login": "Вход",
@@ -303,7 +322,10 @@
"subscription": "Подписка", "subscription": "Подписка",
"referrals": "Рефералы", "referrals": "Рефералы",
"earnings": "Заработок" "earnings": "Заработок"
} },
"manageAll": "Управлять всеми",
"showAll": "Показать все",
"subscriptions": "Подписки"
}, },
"subscription": { "subscription": {
"title": "Подписка", "title": "Подписка",
@@ -365,7 +387,8 @@
"cta": { "cta": {
"expiredHint": "Выберите тариф и оплатите", "expiredHint": "Выберите тариф и оплатите",
"trialHint": "Больше трафика и устройств", "trialHint": "Больше трафика и устройств",
"activeHint": "Продление и смена тарифа" "activeHint": "Продление и смена тарифа",
"renewHint": "Подписка истекла — продлите, чтобы продолжить пользоваться"
}, },
"connectionInfo": "Данные для подключения", "connectionInfo": "Данные для подключения",
"copyLink": "Копировать ссылку", "copyLink": "Копировать ссылку",
@@ -482,7 +505,8 @@
"goToApps": "Перейти к настройке приложений", "goToApps": "Перейти к настройке приложений",
"qrTitle": "QR-код подписки", "qrTitle": "QR-код подписки",
"qrScanHint": "Отсканируйте для подключения", "qrScanHint": "Отсканируйте для подключения",
"qrButton": "QR-код" "qrButton": "QR-код",
"openQr": "Открыть QR-код"
}, },
"myDevices": "Мои устройства", "myDevices": "Мои устройства",
"noDevices": "Нет подключенных устройств", "noDevices": "Нет подключенных устройств",
@@ -590,7 +614,14 @@
"buyTrafficGb": "Купить {{gb}} ГБ", "buyTrafficGb": "Купить {{gb}} ГБ",
"buyUnlimited": "Купить Безлимит", "buyUnlimited": "Купить Безлимит",
"manageServers": "Управление сквадами", "manageServers": "Управление сквадами",
"manageServersTitle": "Управление сквадами" "manageServersTitle": "Управление сквадами",
"connectedDevices": "Подключённые устройства",
"currentDeviceLimit": "Текущий лимит устройств",
"decrementDevices": "Уменьшить кол-во устройств",
"disconnectDevicesFirst": "Сначала отключите лишние устройства",
"incrementDevices": "Увеличить кол-во устройств",
"minDeviceLimit": "Минимальный лимит устройств",
"newDeviceLimit": "Новый лимит устройств"
}, },
"serverManagement": { "serverManagement": {
"statusLegend": "✅ — подключено • — будет добавлено (платно) • — будет отключено", "statusLegend": "✅ — подключено • — будет добавлено (платно) • — будет отключено",
@@ -649,7 +680,27 @@
"stopScan": "Закрыть камеру", "stopScan": "Закрыть камеру",
"noCamera": "Нет доступа к камере", "noCamera": "Нет доступа к камере",
"codeFound": "Код найден" "codeFound": "Код найден"
} },
"allTariffsPurchased": "Все тарифы уже куплены",
"autopay": "Автопродление",
"backToList": "К списку подписок",
"confirmDelete": "Удалить подписку?",
"dailyAutoCharge": "Ежедневное списание",
"defaultName": "Подписка",
"delete": "Удалить",
"deleteTitle": "Удаление подписки",
"get_config": "Получить конфиг",
"loadError": "Не удалось загрузить подписку",
"newTariff": "Новый тариф",
"noOptionsAvailable": "Доступных опций нет",
"noRenewalOptions": "Нет вариантов продления",
"notFound": "Подписка не найдена",
"notFoundDesc": "Возможно, она была удалена или ещё не активирована",
"servers": "Серверы",
"statusActive": "Активна",
"statusExpired": "Истекла",
"statusLimited": "Ограничена",
"statusTrial": "Триал"
}, },
"balance": { "balance": {
"title": "Баланс", "title": "Баланс",
@@ -767,7 +818,9 @@
"already_used_by_user": "Вы уже использовали этот промокод", "already_used_by_user": "Вы уже использовали этот промокод",
"user_not_found": "Пользователь не найден", "user_not_found": "Пользователь не найден",
"server_error": "Ошибка сервера" "server_error": "Ошибка сервера"
} },
"daysLeft": "Осталось дней: {{count}}",
"selectSubscription": "Выберите подписку"
}, },
"minAmountError": "Минимальная сумма: {{amount}} ₽", "minAmountError": "Минимальная сумма: {{amount}} ₽",
"maxAmountError": "Максимальная сумма: {{amount}} ₽", "maxAmountError": "Максимальная сумма: {{amount}} ₽",
@@ -827,7 +880,8 @@
"timeoutDesc": "Обработка платежа занимает больше времени. Вы можете проверить статус ещё раз.", "timeoutDesc": "Обработка платежа занимает больше времени. Вы можете проверить статус ещё раз.",
"goToBalance": "Перейти к балансу", "goToBalance": "Перейти к балансу",
"tryAgain": "Попробовать снова" "tryAgain": "Попробовать снова"
} },
"top_up": "Пополнить баланс"
}, },
"referral": { "referral": {
"title": "Реферальная программа", "title": "Реферальная программа",
@@ -1013,7 +1067,8 @@
"useExternalLink": "Для получения поддержки воспользуйтесь внешней ссылкой", "useExternalLink": "Для получения поддержки воспользуйтесь внешней ссылкой",
"openSupport": "Открыть поддержку", "openSupport": "Открыть поддержку",
"contactSupport": "Для получения поддержки обратитесь к {{username}}", "contactSupport": "Для получения поддержки обратитесь к {{username}}",
"contactUs": "Связаться с поддержкой" "contactUs": "Связаться с поддержкой",
"create_ticket": "Создать тикет"
}, },
"wheel": { "wheel": {
"title": "Колесо удачи", "title": "Колесо удачи",
@@ -1047,7 +1102,8 @@
"insufficientBalance": "Недостаточно средств на балансе", "insufficientBalance": "Недостаточно средств на балансе",
"topUpRequired": "Пополните баланс для оплаты спина", "topUpRequired": "Пополните баланс для оплаты спина",
"starsNotAvailable": "Оплата Stars недоступна. Откройте приложение через Telegram.", "starsNotAvailable": "Оплата Stars недоступна. Откройте приложение через Telegram.",
"noSubscription": "Для вращения колеса необходима активная подписка. Активируйте подписку в разделе «Подписка»." "noSubscription": "Для вращения колеса необходима активная подписка. Активируйте подписку в разделе «Подписка».",
"selectSubscription": "Сначала выберите подписку"
}, },
"payWithStars": "Оплатить Stars", "payWithStars": "Оплатить Stars",
"payWithDays": "Оплатить днями", "payWithDays": "Оплатить днями",
@@ -1066,7 +1122,8 @@
"title": "Испытай удачу!", "title": "Испытай удачу!",
"description": "Крути колесо и выигрывай призы: дни подписки, баланс, трафик и многое другое!", "description": "Крути колесо и выигрывай призы: дни подписки, баланс, трафик и многое другое!",
"button": "Перейти к колесу" "button": "Перейти к колесу"
} },
"selectSubscription": "Выберите подписку"
}, },
"admin": { "admin": {
"backgrounds": { "backgrounds": {
@@ -1566,7 +1623,8 @@
"firstTopupWas": "Было", "firstTopupWas": "Было",
"firstTopupWasNot": "Не было", "firstTopupWasNot": "Не было",
"cancelButton": "Отмена", "cancelButton": "Отмена",
"saveButton": "Сохранить" "saveButton": "Сохранить",
"notFound": "Метод оплаты не найден"
}, },
"remnawave": { "remnawave": {
"title": "RemnaWave", "title": "RemnaWave",
@@ -1634,7 +1692,8 @@
"offline": "Офлайн", "offline": "Офлайн",
"disabled": "Отключены", "disabled": "Отключены",
"users": "Пользователей" "users": "Пользователей"
} },
"usersOnlineCount": "{{count}} онлайн"
}, },
"squads": { "squads": {
"synced": "Синхронизирован", "synced": "Синхронизирован",
@@ -1667,7 +1726,9 @@
"localSettings": "Локальные настройки", "localSettings": "Локальные настройки",
"trialEligible": "Доступен триал", "trialEligible": "Доступен триал",
"price": "Цена", "price": "Цена",
"users": "Пользователей" "users": "Пользователей",
"inboundsCount": "{{count}} входящих",
"membersCount": "{{count}} участников"
}, },
"sync": { "sync": {
"autoSync": "Автосинхронизация", "autoSync": "Автосинхронизация",
@@ -1846,7 +1907,12 @@
"btnConnect": "Подключиться", "btnConnect": "Подключиться",
"btnSubscription": "Подписка", "btnSubscription": "Подписка",
"btnSupport": "Техподдержка", "btnSupport": "Техподдержка",
"btnHome": "На главную" "btnHome": "На главную",
"category": "Категория",
"categoryNews": "Новости",
"categoryPromo": "Промо",
"categorySystem": "Системные",
"stopping": "Останавливается…"
}, },
"pinnedMessages": { "pinnedMessages": {
"title": "Закреплённые сообщения", "title": "Закреплённые сообщения",
@@ -2705,7 +2771,10 @@
"remnaWaveSettings": "Настройки RemnaWave", "remnaWaveSettings": "Настройки RemnaWave",
"remnaWaveConfigUuid": "UUID конфигурации", "remnaWaveConfigUuid": "UUID конфигурации",
"remnaWaveConfigUuidHint": "UUID конфигурации страницы подписки из панели RemnaWave", "remnaWaveConfigUuidHint": "UUID конфигурации страницы подписки из панели RemnaWave",
"availableConfigs": "Доступные конфигурации" "availableConfigs": "Доступные конфигурации",
"noConfigs": "Нет настроенных конфигов",
"remnaWaveConnected": "RemnaWave подключён",
"remnaWaveDisconnected": "RemnaWave отключён"
}, },
"tickets": { "tickets": {
"title": "Управление тикетами", "title": "Управление тикетами",
@@ -2756,7 +2825,13 @@
"userNotificationsEnabled": "Уведомления для пользователей", "userNotificationsEnabled": "Уведомления для пользователей",
"userNotificationsEnabledDesc": "Отправлять уведомления пользователям об ответах админа", "userNotificationsEnabledDesc": "Отправлять уведомления пользователям об ответах админа",
"adminNotificationsEnabled": "Уведомления для админов", "adminNotificationsEnabled": "Уведомления для админов",
"adminNotificationsEnabledDesc": "Отправлять уведомления админам о новых тикетах и ответах" "adminNotificationsEnabledDesc": "Отправлять уведомления админам о новых тикетах и ответах",
"replyFailed": "Не удалось отправить ответ",
"validation": {
"checkIntervalRange": "Интервал проверки должен быть от 1 до 1440 мин",
"reminderCooldownRange": "Кулдаун напоминания должен быть от 0 до 1440 мин",
"slaMinutesRange": "SLA должен быть от 1 до 10080 мин"
}
}, },
"tariffs": { "tariffs": {
"title": "Управление тарифами", "title": "Управление тарифами",
@@ -2987,7 +3062,8 @@
"deactivate": "Деактивировать", "deactivate": "Деактивировать",
"activate": "Активировать", "activate": "Активировать",
"edit": "Редактировать", "edit": "Редактировать",
"delete": "Удалить" "delete": "Удалить",
"registrations": "Регистрации"
}, },
"modal": { "modal": {
"editTitle": "Редактирование кампании", "editTitle": "Редактирование кампании",
@@ -3059,7 +3135,9 @@
"totalSpending": "Расход на подписки", "totalSpending": "Расход на подписки",
"periodComparison": "Сравнение периодов", "periodComparison": "Сравнение периодов",
"vsLastWeek": "vs прошлая неделя", "vsLastWeek": "vs прошлая неделя",
"topRegistrations": "Топ регистрации" "topRegistrations": "Топ регистрации",
"subscriptionsIssued": "Выдано подписок",
"tariffsIssued": "Выдано тарифов"
}, },
"users": { "users": {
"title": "Пользователи кампании", "title": "Пользователи кампании",
@@ -3083,7 +3161,10 @@
"delete": "Удалить" "delete": "Удалить"
}, },
"loadError": "Не удалось загрузить кампанию", "loadError": "Не удалось загрузить кампанию",
"updateError": "Не удалось сохранить изменения" "updateError": "Не удалось сохранить изменения",
"validation": {
"nameRequired": "Название обязательно"
}
}, },
"withdrawals": { "withdrawals": {
"title": "Выводы средств", "title": "Выводы средств",
@@ -3254,7 +3335,10 @@
"createTitle": "Создать кампанию", "createTitle": "Создать кампанию",
"createSubtitle": "Кампания будет автоматически привязана к партнёру", "createSubtitle": "Кампания будет автоматически привязана к партнёру",
"autoAssignNote": "Кампания будет автоматически привязана к партнёру {{name}}", "autoAssignNote": "Кампания будет автоматически привязана к партнёру {{name}}",
"createAndAssign": "Создать и привязать" "createAndAssign": "Создать и привязать",
"earnings": "Доход",
"referrals": "Рефералы",
"registrations": "Регистрации"
}, },
"dangerZone": { "dangerZone": {
"title": "Опасная зона", "title": "Опасная зона",
@@ -3331,7 +3415,10 @@
"firstPurchaseOnly": "Только для первой покупки", "firstPurchaseOnly": "Только для первой покупки",
"cancel": "Отмена", "cancel": "Отмена",
"saving": "Сохранение...", "saving": "Сохранение...",
"save": "Сохранить" "save": "Сохранить",
"defaultTrialTariff": "Тариф триала по умолчанию",
"selectTariff": "Выберите тариф",
"tariff": "Тариф"
}, },
"stats": { "stats": {
"title": "Статистика промокода", "title": "Статистика промокода",
@@ -3362,7 +3449,8 @@
"totalPromocodes": "Всего промокодов", "totalPromocodes": "Всего промокодов",
"activeCount": "Активных", "activeCount": "Активных",
"usagesCount": "Использований", "usagesCount": "Использований",
"exhausted": "Исчерпано" "exhausted": "Исчерпано",
"hoursValue": "{{count}} ч"
}, },
"actions": { "actions": {
"stats": "Статистика", "stats": "Статистика",
@@ -3654,7 +3742,9 @@
"expired": "истёк", "expired": "истёк",
"daysLeft": "дн. осталось", "daysLeft": "дн. осталось",
"deviceLimitUpdated": "Лимит устройств обновлён", "deviceLimitUpdated": "Лимит устройств обновлён",
"invalidDays": "Введите корректное количество дней (больше 0)" "invalidDays": "Введите корректное количество дней (больше 0)",
"backToList": "К списку подписок",
"createNew": "Создать новую"
}, },
"balance": { "balance": {
"current": "Текущий баланс", "current": "Текущий баланс",
@@ -3738,7 +3828,9 @@
"alreadyReferred": "уже чей-то реферал", "alreadyReferred": "уже чей-то реферал",
"noUsersFound": "Пользователи не найдены" "noUsersFound": "Пользователи не найдены"
} }
} },
"notFound": "Пользователь не найден",
"purchaseCount": "Покупок: {{count}}"
}, },
"promoOffers": { "promoOffers": {
"title": "Промопредложения", "title": "Промопредложения",
@@ -3748,7 +3840,8 @@
"templates_one": "Шаблоны ({{count}} шаблон)", "templates_one": "Шаблоны ({{count}} шаблон)",
"templates_few": "Шаблоны ({{count}} шаблона)", "templates_few": "Шаблоны ({{count}} шаблона)",
"templates_many": "Шаблоны ({{count}} шаблонов)", "templates_many": "Шаблоны ({{count}} шаблонов)",
"logs": "Логи" "logs": "Логи",
"templates": "Шаблоны"
}, },
"noData": { "noData": {
"templates": "Нет шаблонов", "templates": "Нет шаблонов",
@@ -3778,7 +3871,9 @@
"activeDiscountHours": "Действие скидки (часы)", "activeDiscountHours": "Действие скидки (часы)",
"discountDurationHint": "Сколько действует скидка после активации", "discountDurationHint": "Сколько действует скидка после активации",
"templateActive": "Шаблон активен", "templateActive": "Шаблон активен",
"saving": "Сохранение..." "saving": "Сохранение...",
"noServers": "Нет серверов",
"testSquads": "Тестовые сквады"
}, },
"send": { "send": {
"title": "Отправка промопредложения", "title": "Отправка промопредложения",
@@ -3807,7 +3902,10 @@
"notificationsFailed_one": "(не доставлено: {{count}})", "notificationsFailed_one": "(не доставлено: {{count}})",
"notificationsFailed_few": "(не доставлено: {{count}})", "notificationsFailed_few": "(не доставлено: {{count}})",
"notificationsFailed_many": "(не доставлено: {{count}})", "notificationsFailed_many": "(не доставлено: {{count}})",
"sendError": "Не удалось отправить предложение" "sendError": "Не удалось отправить предложение",
"notificationsSent": "Отправлено уведомлений",
"offersCreated": "Создано офферов",
"notificationsFailed": "(не отправлено: {{count}})"
}, },
"notFound": "Шаблон не найден", "notFound": "Шаблон не найден",
"noActiveTemplates": "Нет активных шаблонов", "noActiveTemplates": "Нет активных шаблонов",
@@ -4073,7 +4171,8 @@
"selectedPermissions_many": "{{count}} разрешений выбрано", "selectedPermissions_many": "{{count}} разрешений выбрано",
"cancel": "Отмена", "cancel": "Отмена",
"saving": "Сохранение...", "saving": "Сохранение...",
"save": "Сохранить" "save": "Сохранить",
"selectedPermissions": "Выбрано прав"
}, },
"presets": { "presets": {
"moderator": "Модератор", "moderator": "Модератор",
@@ -4093,7 +4192,9 @@
"updateFailed": "Не удалось обновить роль", "updateFailed": "Не удалось обновить роль",
"nameRequired": "Укажите название роли", "nameRequired": "Укажите название роли",
"deleteFailed": "Не удалось удалить роль" "deleteFailed": "Не удалось удалить роль"
} },
"permissionsCount": "{{count}} прав",
"usersCount": "{{count}} пользователей"
}, },
"roleAssign": { "roleAssign": {
"title": "Назначение ролей", "title": "Назначение ролей",
@@ -4147,7 +4248,8 @@
"roleRequired": "Выберите роль", "roleRequired": "Выберите роль",
"assignFailed": "Не удалось назначить роль", "assignFailed": "Не удалось назначить роль",
"revokeFailed": "Не удалось отозвать роль" "revokeFailed": "Не удалось отозвать роль"
} },
"totalAssignments": "Всего назначений: {{count}}"
}, },
"policies": { "policies": {
"title": "Политики доступа", "title": "Политики доступа",
@@ -4216,7 +4318,8 @@
"day3": "Ср", "day3": "Ср",
"day4": "Чт", "day4": "Чт",
"day5": "Пт", "day5": "Пт",
"day6": "Сб" "day6": "Сб",
"ipCount": "Кол-во IP"
}, },
"confirm": { "confirm": {
"title": "Удалить политику?", "title": "Удалить политику?",
@@ -4306,7 +4409,10 @@
"hoursAgo_many": "{{count}} ч назад", "hoursAgo_many": "{{count}} ч назад",
"daysAgo_one": "{{count}} день назад", "daysAgo_one": "{{count}} день назад",
"daysAgo_few": "{{count}} дня назад", "daysAgo_few": "{{count}} дня назад",
"daysAgo_many": "{{count}} дней назад" "daysAgo_many": "{{count}} дней назад",
"daysAgo": "{{count}} дн назад",
"hoursAgo": "{{count}} ч назад",
"minutesAgo": "{{count}} мин назад"
}, },
"pagination": { "pagination": {
"pageSize": "На странице:", "pageSize": "На странице:",
@@ -4319,7 +4425,8 @@
"errors": { "errors": {
"loadFailed": "Не удалось загрузить журнал аудита", "loadFailed": "Не удалось загрузить журнал аудита",
"retry": "Попробовать снова" "retry": "Попробовать снова"
} },
"totalEntries": "Всего записей: {{count}}"
}, },
"landings": { "landings": {
"title": "Лендинги", "title": "Лендинги",
@@ -4413,7 +4520,8 @@
"funnel": "Воронка", "funnel": "Воронка",
"loadError": "Не удалось загрузить статистику", "loadError": "Не удалось загрузить статистику",
"noPurchases": "Нет покупок", "noPurchases": "Нет покупок",
"paid": "оплачено" "paid": "оплачено",
"dailyPurchases": "Покупок в день"
}, },
"purchases": { "purchases": {
"title": "Покупки", "title": "Покупки",
@@ -4439,7 +4547,16 @@
"page": "Стр. {{current}} из {{total}}", "page": "Стр. {{current}} из {{total}}",
"prev": "Назад", "prev": "Назад",
"next": "Далее" "next": "Далее"
} },
"methodCurrency": "Валюта",
"methodDescPlaceholder": "Краткое описание метода для пользователя",
"methodDescription": "Описание метода",
"methodDisplayName": "Отображаемое имя",
"methodIconUrl": "URL иконки",
"methodMaxAmount": "Максимальная сумма",
"methodMinAmount": "Минимальная сумма",
"methodReturnUrl": "URL возврата",
"stickyPayButton": "Закреплённая кнопка оплаты"
}, },
"infoPages": { "infoPages": {
"title": "Информационные страницы", "title": "Информационные страницы",
@@ -4552,7 +4669,8 @@
"hide": "Скрыть ({{count}})", "hide": "Скрыть ({{count}})",
"showMore_one": "Показать еще {{count}} ноду", "showMore_one": "Показать еще {{count}} ноду",
"showMore_few": "Показать еще {{count}} ноды", "showMore_few": "Показать еще {{count}} ноды",
"showMore_many": "Показать еще {{count}} нод" "showMore_many": "Показать еще {{count}} нод",
"showMore": "Показать ещё"
}, },
"revenue": { "revenue": {
"title": "Доходы", "title": "Доходы",
@@ -4597,7 +4715,8 @@
"byEarnings": "По доходу", "byEarnings": "По доходу",
"byInvited": "По пригл.", "byInvited": "По пригл.",
"invites": "пригл.", "invites": "пригл.",
"people": "чел." "people": "чел.",
"stats": "реф., {{count}} приглашений"
}, },
"period": { "period": {
"today": "Сегодня", "today": "Сегодня",
@@ -4609,7 +4728,8 @@
"stats_one": "камп., {{count}} рег.", "stats_one": "камп., {{count}} рег.",
"stats_few": "камп., {{count}} рег.", "stats_few": "камп., {{count}} рег.",
"stats_many": "камп., {{count}} рег.", "stats_many": "камп., {{count}} рег.",
"total": "Всего от РК" "total": "Всего от РК",
"stats": "кампания, {{count}} регистр."
}, },
"recentPayments": { "recentPayments": {
"title": "Последние платежи", "title": "Последние платежи",
@@ -5006,7 +5126,8 @@
"yandex": "Яндекс", "yandex": "Яндекс",
"discord": "Discord", "discord": "Discord",
"vk": "VK" "vk": "VK"
} },
"backToAccounts": "К списку аккаунтов"
} }
}, },
"theme": { "theme": {
@@ -5163,7 +5284,8 @@
"warning": "Отменённый промокод нельзя будет использовать повторно. Скидка перестанет действовать немедленно.", "warning": "Отменённый промокод нельзя будет использовать повторно. Скидка перестанет действовать немедленно.",
"confirm": "Отменить", "confirm": "Отменить",
"deactivating": "Отмена...", "deactivating": "Отмена...",
"error": "Не удалось отменить промокод. Попробуйте позже." "error": "Не удалось отменить промокод. Попробуйте позже.",
"success": "Акция отключена"
} }
}, },
"telegramRedirect": { "telegramRedirect": {
@@ -5342,7 +5464,9 @@
"nDays_many": "{{count}} дней", "nDays_many": "{{count}} дней",
"nMonths_one": "{{count}} месяц", "nMonths_one": "{{count}} месяц",
"nMonths_few": "{{count}} месяца", "nMonths_few": "{{count}} месяца",
"nMonths_many": "{{count}} месяцев" "nMonths_many": "{{count}} месяцев",
"nDays": "{{count}} дн",
"nMonths": "{{count}} мес"
} }
}, },
"gift": { "gift": {
@@ -5525,5 +5649,12 @@
"linkUrlPrompt": "URL ссылки:" "linkUrlPrompt": "URL ссылки:"
} }
} }
},
"subscriptions": {
"buy": "Купить подписку",
"buyAnother": "Купить ещё подписку",
"empty": "У вас пока нет подписок",
"emptyDesc": "Выберите тариф, чтобы начать пользоваться сервисом",
"title": "Мои подписки"
} }
} }

View File

@@ -29,8 +29,16 @@
"collapse": "收起", "collapse": "收起",
"units": { "units": {
"gb": "GB", "gb": "GB",
"perGb": "/GB" "perGb": "/GB",
} "days": "天",
"mo": "月"
},
"balance": "余额",
"copied": "已复制",
"no_results": "无结果",
"ok": "确定",
"processing": "处理中…",
"rangeTo": "至"
}, },
"nav": { "nav": {
"dashboard": "首页", "dashboard": "首页",
@@ -45,7 +53,8 @@
"info": "信息", "info": "信息",
"wheel": "幸运转盘", "wheel": "幸运转盘",
"menu": "菜单", "menu": "菜单",
"gift": "赠送" "gift": "赠送",
"navigation": "导航"
}, },
"notifications": { "notifications": {
"ticketNotifications": "工单通知", "ticketNotifications": "工单通知",
@@ -142,7 +151,17 @@
"tariff": "套餐", "tariff": "套餐",
"validUntil": "有效期至", "validUntil": "有效期至",
"goToSubscription": "查看订阅", "goToSubscription": "查看订阅",
"goToBalance": "查看余额" "goToBalance": "查看余额",
"devicesAdded": "+{{count}} 设备",
"devicesPurchased": {
"title": "设备已添加"
},
"totalDevices": "总设备数:{{count}}",
"totalTraffic": "总流量:{{value}}",
"trafficAdded": "+{{value}} 流量",
"trafficPurchased": {
"title": "流量已添加"
}
}, },
"auth": { "auth": {
"login": "登录", "login": "登录",
@@ -243,13 +262,38 @@
"tariffs": "套餐", "tariffs": "套餐",
"traffic": "流量", "traffic": "流量",
"devices": "设备", "devices": "设备",
"expiredDate": "过期时间" "expiredDate": "过期时间",
"activeUntil": "已过期 — 至 {{date}}"
}, },
"deviceLimitReached": "断开设备以添加新设备", "deviceLimitReached": "断开设备以添加新设备",
"suspended": { "suspended": {
"title": "订阅已暂停", "title": "订阅已暂停",
"resume": "恢复" "resume": "恢复"
} },
"manageAll": "全部管理",
"showAll": "全部显示",
"subscriptions": "订阅",
"connectDevice": "连接设备",
"devicesConnectedUnlimited": "已连接 {{count}} 台设备",
"devicesOfMax": "{{used}} / {{max}}",
"maxUsage": "最大",
"remaining": "剩余",
"stats": {
"balance": "余额",
"referrals": "推荐人"
},
"tariff": "套餐",
"trafficUsageTitle": "流量使用",
"trialOffer": {
"freeDesc": "免费试用 {{days}} 天 — 无需付款",
"freeTitle": "免费试用",
"paidDesc": "{{days}} 天试用,仅需 {{price}}",
"paidTitle": "付费试用"
},
"unlimited": "无限",
"usageLast14Days": "近 14 天使用情况",
"usedSuffix": "已用",
"validUntil": "有效期至 {{date}}"
}, },
"subscription": { "subscription": {
"title": "订阅", "title": "订阅",
@@ -339,7 +383,10 @@
"devices_other": "{{count}} 个设备", "devices_other": "{{count}} 个设备",
"price": "激活费用", "price": "激活费用",
"activate": "激活免费试用", "activate": "激活免费试用",
"unavailable": "试用不可用" "unavailable": "试用不可用",
"insufficientBalance": "余额不足以激活试用",
"payAndActivate": "付费并激活",
"topUpToActivate": "充值以激活试用"
}, },
"connection": { "connection": {
"title": "连接VPN", "title": "连接VPN",
@@ -368,7 +415,8 @@
"goToApps": "前往应用设置", "goToApps": "前往应用设置",
"qrTitle": "订阅二维码", "qrTitle": "订阅二维码",
"qrScanHint": "使用相机扫描以连接", "qrScanHint": "使用相机扫描以连接",
"qrButton": "二维码" "qrButton": "二维码",
"openQr": "打开二维码"
}, },
"additionalOptions": { "additionalOptions": {
"title": "附加选项", "title": "附加选项",
@@ -387,7 +435,20 @@
"buyTrafficGb": "购买 {{gb}} GB", "buyTrafficGb": "购买 {{gb}} GB",
"buyUnlimited": "购买无限流量", "buyUnlimited": "购买无限流量",
"manageServers": "小队管理", "manageServers": "小队管理",
"manageServersTitle": "小队管理" "manageServersTitle": "小队管理",
"connectedDevices": "已连接设备",
"currentDeviceLimit": "当前设备限制",
"decrementDevices": "减少设备数量",
"disconnectDevicesFirst": "请先断开多余的设备",
"incrementDevices": "增加设备数量",
"minDeviceLimit": "最低设备限制",
"newDeviceLimit": "新设备限制",
"reduce": "减少",
"reduceDevices": "减少设备数量",
"reduceDevicesDescription": "调整您的设备限制。如有需要,请先断开多余设备的连接",
"reduceDevicesTitle": "减少设备数量",
"reduceUnavailable": "当前无法减少设备数量",
"reducing": "正在减少…"
}, },
"serverManagement": { "serverManagement": {
"statusLegend": "✅ — 已连接 • — 将添加(付费)• — 将断开", "statusLegend": "✅ — 已连接 • — 将添加(付费)• — 将断开",
@@ -499,6 +560,46 @@
"stopScan": "关闭摄像头", "stopScan": "关闭摄像头",
"noCamera": "无法访问摄像头", "noCamera": "无法访问摄像头",
"codeFound": "找到代码" "codeFound": "找到代码"
},
"allTariffsPurchased": "所有套餐已购买",
"autopay": "自动续订",
"backToList": "返回订阅列表",
"confirmDelete": "删除订阅?",
"cta": {
"renewHint": "订阅已过期 — 续订以继续使用",
"activeHint": "订阅有效 — 您可以连接设备并使用 VPN",
"expiredHint": "订阅已过期 — 续订以继续使用",
"trialHint": "您正在试用中 — 升级到付费套餐以解锁所有功能"
},
"dailyAutoCharge": "每日自动扣费",
"defaultName": "订阅",
"delete": "删除",
"deleteTitle": "删除订阅",
"get_config": "获取配置",
"loadError": "加载订阅失败",
"newTariff": "新套餐",
"noOptionsAvailable": "暂无可用选项",
"noRenewalOptions": "无续订选项",
"notFound": "未找到订阅",
"notFoundDesc": "可能已被删除或尚未激活",
"servers": "服务器",
"statusActive": "已激活",
"statusExpired": "已过期",
"statusLimited": "受限",
"statusTrial": "试用",
"daysShort": "天",
"expiredBanner": {
"selectTariff": "选择套餐",
"title": "订阅已过期"
},
"trialInfo": {
"description": "免费试用我们的服务 {{days}} 天",
"remaining": "剩余 {{count}} 天",
"title": "试用期"
},
"trialUpgrade": {
"description": "升级到付费订阅以解锁所有功能并继续使用",
"title": "升级订阅"
} }
}, },
"balance": { "balance": {
@@ -575,7 +676,9 @@
"already_used_by_user": "您已使用过此优惠码", "already_used_by_user": "您已使用过此优惠码",
"user_not_found": "用户不存在", "user_not_found": "用户不存在",
"server_error": "服务器错误" "server_error": "服务器错误"
} },
"daysLeft": "剩余天数:{{count}}",
"selectSubscription": "选择订阅"
}, },
"minAmountError": "最小金额:{{amount}}", "minAmountError": "最小金额:{{amount}}",
"maxAmountError": "最大金额:{{amount}}", "maxAmountError": "最大金额:{{amount}}",
@@ -633,7 +736,8 @@
"timeoutDesc": "付款处理时间比平时长。您可以再次检查状态。", "timeoutDesc": "付款处理时间比平时长。您可以再次检查状态。",
"goToBalance": "查看余额", "goToBalance": "查看余额",
"tryAgain": "重试" "tryAgain": "重试"
} },
"top_up": "充值"
}, },
"referral": { "referral": {
"title": "推荐计划", "title": "推荐计划",
@@ -817,7 +921,8 @@
"contactUs": "联系支持", "contactUs": "联系支持",
"openSupport": "打开支持", "openSupport": "打开支持",
"ticketsDisabled": "工单已禁用", "ticketsDisabled": "工单已禁用",
"useExternalLink": "请使用外部链接获取支持" "useExternalLink": "请使用外部链接获取支持",
"create_ticket": "创建工单"
}, },
"wheel": { "wheel": {
"title": "幸运转盘", "title": "幸运转盘",
@@ -853,7 +958,8 @@
"insufficientBalance": "余额不足", "insufficientBalance": "余额不足",
"topUpRequired": "请充值以支付抽奖费用", "topUpRequired": "请充值以支付抽奖费用",
"starsNotAvailable": "Stars支付不可用。请通过Telegram打开应用。", "starsNotAvailable": "Stars支付不可用。请通过Telegram打开应用。",
"noSubscription": "需要有效订阅才能转动轮盘。请先激活订阅。" "noSubscription": "需要有效订阅才能转动轮盘。请先激活订阅。",
"selectSubscription": "请先选择订阅"
}, },
"payWithStars": "支付 {stars} Stars", "payWithStars": "支付 {stars} Stars",
"processingPayment": "处理中...", "processingPayment": "处理中...",
@@ -868,7 +974,8 @@
"title": "试试运气!", "title": "试试运气!",
"description": "转动转盘赢取奖品:订阅天数、余额、流量等!", "description": "转动转盘赢取奖品:订阅天数、余额、流量等!",
"button": "前往转盘" "button": "前往转盘"
} },
"selectSubscription": "选择订阅"
}, },
"admin": { "admin": {
"backgrounds": { "backgrounds": {
@@ -1309,7 +1416,8 @@
"promoGroupsShort": "组", "promoGroupsShort": "组",
"noPromoGroups": "没有促销组", "noPromoGroups": "没有促销组",
"cancelButton": "取消", "cancelButton": "取消",
"saveButton": "保存" "saveButton": "保存",
"notFound": "未找到支付方式"
}, },
"emailTemplates": { "emailTemplates": {
"title": "邮件模板", "title": "邮件模板",
@@ -1498,7 +1606,32 @@
"customButtonTypeCallback": "回调", "customButtonTypeCallback": "回调",
"customButtonTypeUrl": "链接", "customButtonTypeUrl": "链接",
"customButtonCallbackPlaceholder": "callback_data例如 back_to_menu", "customButtonCallbackPlaceholder": "callback_data例如 back_to_menu",
"customButtonUrlPlaceholder": "https://example.com" "customButtonUrlPlaceholder": "https://example.com",
"category": "类别",
"categoryNews": "新闻",
"categoryPromo": "促销",
"categorySystem": "系统",
"stopping": "正在停止…",
"btnBalance": "充值",
"btnConnect": "连接",
"btnHome": "主页",
"btnPartners": "推荐计划",
"btnPromocode": "优惠码",
"btnSubscription": "订阅",
"btnSupport": "客服支持",
"emailContent": "邮件内容",
"emailContentHint": "支持 HTML",
"emailContentPlaceholder": "<p>您好,{{user_name}}</p>\n<p>您的消息内容...</p>",
"emailSection": "邮件群发",
"emailSubject": "邮件主题",
"emailSubjectPlaceholder": "请输入邮件主题...",
"emailVariables": "可用变量",
"preview": "预览",
"previewEmpty": "— 空 —",
"selectChannel": "群发渠道",
"selectEmailFilter": "选择邮件受众",
"selectEmailFilterPlaceholder": "选择筛选器...",
"telegramSection": "Telegram 群发"
}, },
"pinnedMessages": { "pinnedMessages": {
"title": "置顶消息", "title": "置顶消息",
@@ -1763,8 +1896,8 @@
"telegramOidcClientId": "Client ID机器人 ID", "telegramOidcClientId": "Client ID机器人 ID",
"telegramOidcClientSecret": "Client Secret" "telegramOidcClientSecret": "Client Secret"
}, },
"offlineConv": "\u79bb\u7ebf\u8f6c\u5316", "offlineConv": "离线转化",
"apiKey": "API \u5bc6\u94a5" "apiKey": "API 密钥"
}, },
"buttons": { "buttons": {
"color": "按钮颜色", "color": "按钮颜色",
@@ -1870,7 +2003,10 @@
"subscription": "订阅", "subscription": "订阅",
"connect": "连接", "connect": "连接",
"additional": "附加" "additional": "附加"
} },
"noConfigs": "未配置任何配置",
"remnaWaveConnected": "RemnaWave 已连接",
"remnaWaveDisconnected": "RemnaWave 未连接"
}, },
"tickets": { "tickets": {
"title": "工单管理", "title": "工单管理",
@@ -1921,7 +2057,13 @@
"copyTelegramId": "点击复制Telegram ID", "copyTelegramId": "点击复制Telegram ID",
"viewUser": "用户", "viewUser": "用户",
"userNotificationsEnabled": "用户通知", "userNotificationsEnabled": "用户通知",
"userNotificationsEnabledDesc": "向用户发送管理员回复通知" "userNotificationsEnabledDesc": "向用户发送管理员回复通知",
"replyFailed": "发送回复失败",
"validation": {
"checkIntervalRange": "检查间隔必须在 1 到 1440 分钟之间",
"reminderCooldownRange": "提醒冷却时间必须在 0 到 1440 分钟之间",
"slaMinutesRange": "SLA 必须在 1 到 10080 分钟之间"
}
}, },
"tariffs": { "tariffs": {
"title": "套餐管理", "title": "套餐管理",
@@ -2138,7 +2280,8 @@
"deactivate": "停用", "deactivate": "停用",
"activate": "启用", "activate": "启用",
"edit": "编辑", "edit": "编辑",
"delete": "删除" "delete": "删除",
"registrations": "注册"
}, },
"modal": { "modal": {
"editTitle": "编辑活动", "editTitle": "编辑活动",
@@ -2206,7 +2349,9 @@
"totalSpending": "订阅支出", "totalSpending": "订阅支出",
"periodComparison": "期间比较", "periodComparison": "期间比较",
"vsLastWeek": "与上周对比", "vsLastWeek": "与上周对比",
"topRegistrations": "热门注册" "topRegistrations": "热门注册",
"subscriptionsIssued": "已发放订阅",
"tariffsIssued": "已发放套餐"
}, },
"users": { "users": {
"title": "活动用户", "title": "活动用户",
@@ -2230,7 +2375,11 @@
"delete": "删除" "delete": "删除"
}, },
"loadError": "加载活动失败", "loadError": "加载活动失败",
"updateError": "保存更改失败" "updateError": "保存更改失败",
"validation": {
"nameRequired": "名称为必填项"
},
"loadMore": "加载更多"
}, },
"withdrawals": { "withdrawals": {
"title": "提现", "title": "提现",
@@ -2337,7 +2486,30 @@
"description": "拒绝来自 {{name}} 的合作伙伴申请", "description": "拒绝来自 {{name}} 的合作伙伴申请",
"commentLabel": "备注(可选)", "commentLabel": "备注(可选)",
"commentPlaceholder": "拒绝原因..." "commentPlaceholder": "拒绝原因..."
} },
"settings": "设置",
"settingsFields": {
"cooldownDays": "提款冷却期(天)",
"cooldownDaysDesc": "两次提款请求之间需间隔多少天",
"minAmount": "最小提款金额(戈比)",
"minAmountDesc": "提款请求的最低金额100 戈比 = 1 ₽)",
"partnerVisible": "在面板中显示推荐部分",
"partnerVisibleDesc": "为用户显示/隐藏合作申请和提款部分",
"programEnabled": "推荐计划已启用",
"programEnabledDesc": "启用整个推荐人功能",
"requisitesText": "收款信息文本",
"requisitesTextDesc": "将在合作申请表单中向用户显示",
"requisitesTextPlaceholder": "请输入您的收款信息...",
"withdrawalEnabled": "允许提款",
"withdrawalEnabledDesc": "允许用户请求提款"
},
"settingsLoadError": "加载推荐设置失败",
"settingsSection": {
"referralProgram": "推荐计划",
"withdrawalSettings": "提款设置"
},
"settingsSubtitle": "推荐计划和合作伙伴提款设置",
"settingsUpdateError": "保存推荐设置失败"
}, },
"partnerDetail": { "partnerDetail": {
"title": "合作伙伴详情", "title": "合作伙伴详情",
@@ -2378,7 +2550,10 @@
"createTitle": "创建活动", "createTitle": "创建活动",
"createSubtitle": "活动将自动分配给合作伙伴", "createSubtitle": "活动将自动分配给合作伙伴",
"autoAssignNote": "活动将自动分配给合作伙伴 {{name}}", "autoAssignNote": "活动将自动分配给合作伙伴 {{name}}",
"createAndAssign": "创建并分配" "createAndAssign": "创建并分配",
"earnings": "收入",
"referrals": "推荐人",
"registrations": "注册"
}, },
"dangerZone": { "dangerZone": {
"title": "危险操作", "title": "危险操作",
@@ -2451,7 +2626,10 @@
"firstPurchaseOnly": "仅限首次购买", "firstPurchaseOnly": "仅限首次购买",
"cancel": "取消", "cancel": "取消",
"saving": "保存中...", "saving": "保存中...",
"save": "保存" "save": "保存",
"defaultTrialTariff": "默认试用套餐",
"selectTariff": "选择套餐",
"tariff": "套餐"
}, },
"stats": { "stats": {
"title": "促销码统计", "title": "促销码统计",
@@ -2480,7 +2658,8 @@
"totalPromocodes": "促销码总数", "totalPromocodes": "促销码总数",
"activeCount": "活跃的", "activeCount": "活跃的",
"usagesCount": "使用次数", "usagesCount": "使用次数",
"exhausted": "已用完" "exhausted": "已用完",
"hoursValue": "{{count}}小时"
}, },
"actions": { "actions": {
"stats": "统计", "stats": "统计",
@@ -2735,7 +2914,9 @@
"expired": "已过期", "expired": "已过期",
"daysLeft": "天剩余", "daysLeft": "天剩余",
"deviceLimitUpdated": "设备限制已更新", "deviceLimitUpdated": "设备限制已更新",
"invalidDays": "请输入有效天数大于0" "invalidDays": "请输入有效天数大于0",
"backToList": "返回订阅列表",
"createNew": "新建"
}, },
"balance": { "balance": {
"current": "当前余额", "current": "当前余额",
@@ -2818,6 +2999,26 @@
"searchPlaceholder": "按名称、邮箱或 Telegram ID 搜索...", "searchPlaceholder": "按名称、邮箱或 Telegram ID 搜索...",
"alreadyReferred": "已有推荐人", "alreadyReferred": "已有推荐人",
"noUsersFound": "未找到用户" "noUsersFound": "未找到用户"
},
"actions": {
"areYouSure": "确定要继续?",
"title": "操作"
},
"noVpnData": "无 VPN 数据"
},
"notFound": "未找到用户",
"purchaseCount": "购买次数:{{count}}",
"userActions": {
"delete": "删除用户",
"disable": "禁用",
"error": "操作失败",
"resetSubscription": "重置订阅",
"resetTrial": "重置试用",
"success": {
"delete": "用户已删除",
"disable": "用户已禁用",
"resetSubscription": "订阅已重置",
"resetTrial": "试用已重置"
} }
} }
}, },
@@ -2827,7 +3028,8 @@
"sendButton": "发送", "sendButton": "发送",
"tabs": { "tabs": {
"templates_other": "模板 ({{count}})", "templates_other": "模板 ({{count}})",
"logs": "日志" "logs": "日志",
"templates": "模板"
}, },
"noData": { "noData": {
"templates": "没有模板", "templates": "没有模板",
@@ -2857,7 +3059,9 @@
"activeDiscountHours": "折扣有效期(小时)", "activeDiscountHours": "折扣有效期(小时)",
"discountDurationHint": "激活后折扣持续多长时间", "discountDurationHint": "激活后折扣持续多长时间",
"templateActive": "模板已激活", "templateActive": "模板已激活",
"saving": "保存中..." "saving": "保存中...",
"noServers": "无服务器",
"testSquads": "测试小队"
}, },
"send": { "send": {
"title": "发送促销优惠", "title": "发送促销优惠",
@@ -2880,7 +3084,9 @@
"offersCreated_other": "已创建优惠: {{count}}", "offersCreated_other": "已创建优惠: {{count}}",
"notificationsSent_other": "已发送通知: {{count}}", "notificationsSent_other": "已发送通知: {{count}}",
"notificationsFailed": "(失败: {{count}}", "notificationsFailed": "(失败: {{count}}",
"sendError": "发送优惠失败" "sendError": "发送优惠失败",
"notificationsSent": "已发送通知",
"offersCreated": "已创建优惠"
}, },
"notFound": "未找到模板", "notFound": "未找到模板",
"noActiveTemplates": "没有活跃的模板", "noActiveTemplates": "没有活跃的模板",
@@ -2978,7 +3184,8 @@
"offline": "离线", "offline": "离线",
"disabled": "已禁用", "disabled": "已禁用",
"users": "用户" "users": "用户"
} },
"usersOnlineCount": "{{count}} 在线"
}, },
"overview": { "overview": {
"bandwidth": "实时带宽", "bandwidth": "实时带宽",
@@ -3029,7 +3236,9 @@
"localSettings": "本地设置", "localSettings": "本地设置",
"trialEligible": "可试用", "trialEligible": "可试用",
"price": "价格", "price": "价格",
"users": "用户" "users": "用户",
"inboundsCount": "{{count}} 入站",
"membersCount": "{{count}} 成员"
}, },
"sync": { "sync": {
"autoSync": "自动同步", "autoSync": "自动同步",
@@ -3145,7 +3354,8 @@
"selectedPermissions_other": "已选择 {{count}} 个权限", "selectedPermissions_other": "已选择 {{count}} 个权限",
"cancel": "取消", "cancel": "取消",
"saving": "保存中...", "saving": "保存中...",
"save": "保存" "save": "保存",
"selectedPermissions": "已选权限"
}, },
"presets": { "presets": {
"moderator": "版主", "moderator": "版主",
@@ -3165,7 +3375,9 @@
"updateFailed": "更新角色失败", "updateFailed": "更新角色失败",
"nameRequired": "请输入角色名称", "nameRequired": "请输入角色名称",
"deleteFailed": "删除角色失败" "deleteFailed": "删除角色失败"
} },
"permissionsCount": "{{count}} 项权限",
"usersCount": "{{count}} 个用户"
}, },
"roleAssign": { "roleAssign": {
"title": "角色分配", "title": "角色分配",
@@ -3217,7 +3429,8 @@
"roleRequired": "请选择角色", "roleRequired": "请选择角色",
"assignFailed": "角色分配失败", "assignFailed": "角色分配失败",
"revokeFailed": "角色撤销失败" "revokeFailed": "角色撤销失败"
} },
"totalAssignments": "总分配数:{{count}}"
}, },
"policies": { "policies": {
"title": "访问策略", "title": "访问策略",
@@ -3284,7 +3497,8 @@
"day3": "三", "day3": "三",
"day4": "四", "day4": "四",
"day5": "五", "day5": "五",
"day6": "六" "day6": "六",
"ipCount": "IP 数量"
}, },
"confirm": { "confirm": {
"title": "删除策略?", "title": "删除策略?",
@@ -3366,7 +3580,10 @@
"justNow": "刚刚", "justNow": "刚刚",
"minutesAgo_other": "{{count}} 分钟前", "minutesAgo_other": "{{count}} 分钟前",
"hoursAgo_other": "{{count}} 小时前", "hoursAgo_other": "{{count}} 小时前",
"daysAgo_other": "{{count}} 天前" "daysAgo_other": "{{count}} 天前",
"daysAgo": "{{count}}天前",
"hoursAgo": "{{count}}小时前",
"minutesAgo": "{{count}}分钟前"
}, },
"pagination": { "pagination": {
"pageSize": "每页:", "pageSize": "每页:",
@@ -3379,7 +3596,8 @@
"errors": { "errors": {
"loadFailed": "加载审计日志失败", "loadFailed": "加载审计日志失败",
"retry": "重试" "retry": "重试"
} },
"totalEntries": "总条目数:{{count}}"
}, },
"landings": { "landings": {
"title": "落地页", "title": "落地页",
@@ -3473,7 +3691,8 @@
"funnel": "漏斗", "funnel": "漏斗",
"loadError": "加载统计失败", "loadError": "加载统计失败",
"noPurchases": "无购买记录", "noPurchases": "无购买记录",
"paid": "已支付" "paid": "已支付",
"dailyPurchases": "每日购买量"
}, },
"purchases": { "purchases": {
"title": "购买记录", "title": "购买记录",
@@ -3499,7 +3718,16 @@
"page": "第 {{current}} 页,共 {{total}} 页", "page": "第 {{current}} 页,共 {{total}} 页",
"prev": "上一页", "prev": "上一页",
"next": "下一页" "next": "下一页"
} },
"methodCurrency": "货币",
"methodDescPlaceholder": "向用户显示的简短说明",
"methodDescription": "方法描述",
"methodDisplayName": "显示名称",
"methodIconUrl": "图标 URL",
"methodMaxAmount": "最大金额",
"methodMinAmount": "最小金额",
"methodReturnUrl": "回调 URL",
"stickyPayButton": "固定支付按钮"
}, },
"infoPages": { "infoPages": {
"title": "信息页面", "title": "信息页面",
@@ -3596,7 +3824,9 @@
}, },
"deleteSubscription": { "deleteSubscription": {
"warning": "选中的订阅将从机器人和RemnaWave面板中永久删除", "warning": "选中的订阅将从机器人和RemnaWave面板中永久删除",
"hint": "用户将失去已删除订阅的VPN访问权限。此操作无法撤销。" "hint": "用户将失去已删除订阅的VPN访问权限。此操作无法撤销。",
"activePaidWarning": "所选订阅中有 {{count}} / {{total}} 是有效的付费订阅",
"forceDeleteConfirm": "我确认删除有效的付费订阅"
}, },
"deleteUser": { "deleteUser": {
"warning": "选中的用户将从机器人中永久删除!他们的所有订阅、余额和数据将丢失!", "warning": "选中的用户将从机器人中永久删除!他们的所有订阅、余额和数据将丢失!",
@@ -3717,7 +3947,8 @@
"enable": "启用", "enable": "启用",
"disable": "禁用", "disable": "禁用",
"hide": "隐藏 ({{count}})", "hide": "隐藏 ({{count}})",
"showMore_other": "显示更多 {{count}} 个节点" "showMore_other": "显示更多 {{count}} 个节点",
"showMore": "显示更多"
}, },
"revenue": { "revenue": {
"title": "收入", "title": "收入",
@@ -3781,6 +4012,16 @@
"uptime": "运行时间", "uptime": "运行时间",
"users": "用户", "users": "用户",
"activeSubs": "订阅" "activeSubs": "订阅"
},
"tariffs": {
"activeSubscriptions": "活跃订阅",
"purchasedMonth": "本月已售出",
"purchasedToday": "今日已售出",
"purchasedWeek": "本周已售出",
"subtitle": "各套餐统计",
"tariffName": "套餐名称",
"title": "套餐统计",
"trialSubscriptions": "试用订阅"
} }
}, },
"profile": { "profile": {
@@ -3878,7 +4119,8 @@
"yandex": "Yandex", "yandex": "Yandex",
"discord": "Discord", "discord": "Discord",
"vk": "VK" "vk": "VK"
} },
"backToAccounts": "返回账户列表"
} }
}, },
"theme": { "theme": {
@@ -4029,7 +4271,8 @@
"warning": "已取消的优惠码无法重新使用。折扣将立即失效。", "warning": "已取消的优惠码无法重新使用。折扣将立即失效。",
"confirm": "取消折扣", "confirm": "取消折扣",
"deactivating": "取消中...", "deactivating": "取消中...",
"error": "取消优惠码失败,请稍后重试。" "error": "取消优惠码失败,请稍后重试。",
"success": "活动已停用"
} }
}, },
"telegramRedirect": { "telegramRedirect": {
@@ -4317,6 +4560,12 @@
"d456": "1年3个月", "d456": "1年3个月",
"nDays": "{{count}}天", "nDays": "{{count}}天",
"nMonths": "{{count}}个月" "nMonths": "{{count}}个月"
},
"discount": {
"days": "天",
"hours": "小时",
"minutes": "分钟",
"seconds": "秒"
} }
}, },
"gift": { "gift": {
@@ -4375,7 +4624,43 @@
}, },
"warning": { "warning": {
"telegram_unresolvable": "无法验证此 Telegram 用户名。收件人可能不会收到礼物通知。" "telegram_unresolvable": "无法验证此 Telegram 用户名。收件人可能不会收到礼物通知。"
} },
"activateButton": "激活",
"activateCodePlaceholder": "输入礼物代码",
"activatedBy": "由 {{name}} 激活",
"activateDescription": "输入您收到的礼物代码以激活订阅",
"activatedGiftsTitle": "已激活的礼物",
"activateError": "激活礼物失败",
"activateSelfError": "您不能激活自己的礼物",
"activateSuccess": "礼物已激活!",
"activateSuccessDesc": "订阅已添加到您的账户",
"activateTitle": "激活礼物",
"activeGiftsTitle": "活跃的礼物",
"codeLabel": "礼物代码",
"codeReadyTitle": "您的礼物代码已就绪",
"copyMessage": "复制消息",
"daysShort": "天",
"deviceCount": "设备数",
"devicesShort": "台",
"gbShort": "GB",
"myGiftsEmpty": "暂无礼物",
"myGiftsEmptyDesc": "您发送或收到的礼物将显示在这里",
"pageTitle": "礼物",
"receivedGiftsTitle": "已收到的礼物",
"selectPeriod": "选择时长",
"selectTariff": "选择套餐",
"sentTo": "已发送给 {{name}}",
"shareGift": "分享礼物",
"shareModalActivateVia": "通过以下方式激活",
"shareModalActivateViaCabinet": "通过个人中心",
"shareText": "我为您准备了一份 Bedolaga VPN 礼物:{{code}}",
"shareToastCopied": "链接已复制",
"statusActivated": "已激活",
"statusAvailable": "可激活",
"tabActivate": "激活",
"tabBuy": "购买",
"tabMyGifts": "我的礼物",
"unlimitedTraffic": "无限流量"
}, },
"news": { "news": {
"title": "新闻与更新", "title": "新闻与更新",
@@ -4436,5 +4721,12 @@
"linkUrlPrompt": "URL" "linkUrlPrompt": "URL"
} }
} }
},
"subscriptions": {
"buy": "购买订阅",
"buyAnother": "再购买一个订阅",
"empty": "您还没有订阅",
"emptyDesc": "选择套餐以开始使用",
"title": "我的订阅"
} }
} }

View File

@@ -1086,7 +1086,7 @@ export default function Subscription() {
disabled={autopayMutation.isPending} disabled={autopayMutation.isPending}
role="switch" role="switch"
aria-checked={subscription.autopay_enabled} aria-checked={subscription.autopay_enabled}
aria-label={t('subscription.autopay.title', 'Auto-payment')} aria-label={t('subscription.autopay', 'Auto-payment')}
className="relative h-7 w-[52px] rounded-full transition-colors duration-300" className="relative h-7 w-[52px] rounded-full transition-colors duration-300"
style={{ style={{
background: subscription.autopay_enabled ? zone.mainHex : g.textGhost, background: subscription.autopay_enabled ? zone.mainHex : g.textGhost,