- {t('promo.discountActive', 'Discount active!')}
+ <>
+ {/* Mobile backdrop */}
+
setIsOpen(false)}
+ />
+
+
+ {/* Header */}
+
+
+
+
-
- -{activeDiscount.discount_percent}%
+
+
+ {t('promo.discountActive')}
+
+
+ -{activeDiscount.discount_percent}%
+
+
+ {/* Content */}
+
+
+ {t('promo.discountDescription')}
+
+
+ {/* Time remaining */}
+ {timeLeft && (
+
+
+ {t('promo.expiresIn')}: {timeLeft}
+
+ )}
+
+ {/* CTA Button */}
+
+
-
- {/* Content */}
-
-
- {t('promo.discountDescription', 'Your personal discount is applied to subscription purchases')}
-
-
- {/* Time remaining */}
- {timeLeft && (
-
-
- {t('promo.expiresIn', 'Expires in')}: {timeLeft}
-
- )}
-
- {/* Source info */}
- {activeDiscount.source && (
-
- {t('promo.source', 'Source')}: {activeDiscount.source}
-
- )}
-
- {/* CTA Button */}
-
-
-
+ >
)}
)
diff --git a/src/locales/en.json b/src/locales/en.json
index f8aeff7..71808f8 100644
--- a/src/locales/en.json
+++ b/src/locales/en.json
@@ -1,989 +1,1003 @@
{
- "common": {
- "loading": "Loading...",
- "error": "Error",
- "success": "Success",
- "save": "Save",
- "cancel": "Cancel",
- "confirm": "Confirm",
- "back": "Back",
- "next": "Next",
- "close": "Close",
- "search": "Search",
- "noData": "No data",
- "actions": "Actions",
- "yes": "Yes",
- "no": "No",
- "or": "or",
- "and": "and",
- "edit": "Edit",
- "delete": "Delete",
- "currency": "$"
- },
- "nav": {
- "dashboard": "Dashboard",
- "subscription": "Subscription",
- "balance": "Balance",
- "referral": "Referrals",
- "support": "Support",
- "profile": "Profile",
- "logout": "Logout",
- "contests": "Contests",
- "polls": "Polls",
- "info": "Info",
- "wheel": "Fortune Wheel"
- },
- "auth": {
- "login": "Login",
- "register": "Register",
- "logout": "Logout",
- "email": "Email",
- "password": "Password",
- "confirmPassword": "Confirm password",
- "forgotPassword": "Forgot password?",
- "resetPassword": "Reset password",
- "loginWithTelegram": "Login with Telegram",
- "loginWithEmail": "Login with Email",
- "noAccount": "Don't have an account?",
- "hasAccount": "Already have an account?",
- "registerHint": "To register with email, first log in via Telegram, then link your email in settings.",
- "telegramRequired": "Telegram authorization required",
- "telegramNotConfigured": "Telegram bot is not configured",
- "authenticating": "Authenticating...",
- "orOpenInApp": "Or open the bot in the app",
- "loginFailed": "Login Failed",
- "tryAgain": "Try Again",
- "welcomeBack": "Welcome back!",
- "loginTitle": "Login to Cabinet",
- "loginSubtitle": "Sign in with Telegram or use your email"
- },
- "emailVerification": {
- "title": "Email Verification",
- "verifying": "Verifying email...",
- "pleaseWait": "Please wait while we verify your email address.",
- "success": "Email Verified!",
- "successMessage": "Your email has been successfully verified. You can now log in with your email and password.",
- "failed": "Verification Failed",
- "goToLogin": "Go to Login"
- },
- "dashboard": {
- "title": "Dashboard",
- "welcome": "Welcome, {{name}}!",
- "yourSubscription": "Your Subscription",
- "quickActions": "Quick Actions",
- "viewSubscription": "Manage Subscription",
- "topUpBalance": "Top Up Balance",
- "inviteFriends": "Invite Friends",
- "getSupport": "Get Support",
- "currentBalance": "Current Balance",
- "activeUntil": "Active until",
- "noActiveSubscription": "No active subscription",
- "devicesUsed": "Devices: {{used}} of {{total}}",
- "trafficUsed": "Traffic: {{used}} of {{total}} GB",
- "unlimitedTraffic": "Unlimited traffic"
- },
- "subscription": {
- "title": "Subscription",
- "currentPlan": "Current Plan",
- "status": "Status",
- "active": "Active",
- "inactive": "Inactive",
- "trialStatus": "Trial",
- "expired": "Expired",
- "expiresAt": "Expires at",
- "daysLeft": "Days left",
- "devices": "Devices",
- "servers": "Servers",
- "traffic": "Traffic",
- "unlimited": "Unlimited",
- "used": "Used",
- "of": "of",
- "renew": "Renew",
- "extend": "Extend Subscription",
- "buyTraffic": "Buy Traffic",
- "buyDevices": "Buy Devices",
- "renewalOptions": "Renewal Options",
- "days": "days",
- "hours": "h",
- "minutes": "m",
- "price": "Price",
- "noSubscription": "You don't have an active subscription",
- "getSubscription": "Get Subscription",
- "connectionInfo": "Connection Info",
- "copyLink": "Copy Link",
- "copied": "Copied!",
- "showQR": "Show QR Code",
- "downloadConfig": "Download Config",
- "trafficUsed": "Traffic used",
- "timeLeft": "Time left",
- "getConfig": "Connect Devices",
- "autoRenewal": "Auto-renewal",
- "daysBeforeExpiry": "days before expiry",
- "selectPeriod": "Select Period",
- "selectTraffic": "Select Traffic",
- "selectServers": "Select Servers",
- "selectDevices": "Devices",
- "perDevice": "/ device",
- "summary": "Summary",
- "total": "Total",
- "purchase": "Purchase",
- "step": "Step {{current}} of {{total}}",
- "stepPeriod": "Period",
- "stepTraffic": "Traffic",
- "stepServers": "Servers",
- "stepDevices": "Devices",
- "stepConfirm": "Confirm",
- "currentTariff": "Current",
- "from": "from",
- "month": "mo",
- "insufficientBalance": "Insufficient balance. Missing {{missing}} ₽",
- "trial": {
- "title": "Free Trial",
- "description": "Try our VPN service for free!",
- "days": "days",
- "devices": "devices",
- "price": "Activation price",
- "activate": "Activate Free Trial",
- "unavailable": "Trial is not available"
- },
- "connection": {
- "title": "Connect VPN",
- "selectDevice": "Select your device",
- "selectApp": "Select app",
- "installApp": "1. Install the app",
- "addSubscription": "2. Add subscription",
- "connectVpn": "3. Connect VPN",
- "addToApp": "Add to {{appName}}",
- "connect": "Connect",
- "noApps": "No apps available for this platform",
- "noSubscription": "You need an active subscription to connect",
- "featured": "Recommended",
- "yourDevice": "Your device",
- "copyLink": "Copy subscription link",
- "copied": "Link copied!",
- "openLink": "Open link"
- },
- "myDevices": "My Devices",
- "noDevices": "No connected devices",
- "deleteDevice": "Delete device",
- "deleteAllDevices": "Delete all",
- "confirmDeleteDevice": "Delete this device?",
- "confirmDeleteAllDevices": "Delete all devices?",
- "deviceDeleted": "Device deleted",
- "allDevicesDeleted": "All devices deleted",
- "platform": "Platform",
- "model": "Model",
- "connectedAt": "Connected",
- "pause": {
- "title": "Subscription Pause",
- "paused": "Paused",
- "active": "Active",
- "pauseBtn": "Pause",
- "resumeBtn": "Resume",
- "pausedMessage": "Subscription paused",
- "resumedMessage": "Subscription resumed",
- "dailyOnly": "Pause is only available for daily tariffs",
- "pausedInfo": "Subscription paused",
- "pausedDescription": "Charges stopped. Subscription will be active until",
- "nextCharge": "Until next charge",
- "willBeCharged": "Will be charged",
- "days_one": "day",
- "days_few": "days",
- "days_many": "days",
- "hours": "h",
- "minutes": "m"
- },
- "dailyPurchase": {
- "costPerDay": "Cost per day",
- "chargedDaily": "Payment is charged daily from balance",
- "canPause": "Can be paused at any time",
- "pausedOnLowBalance": "Subscription will be paused if balance is insufficient",
- "activate": "Activate for {{price}}"
- },
- "switchTariff": {
- "title": "Switch Tariff",
- "preview": "Preview",
- "currentTariff": "Current tariff",
- "newTariff": "New tariff",
- "remainingDays": "Days remaining",
- "upgradeCost": "Upgrade cost",
- "free": "Free",
- "switch": "Switch",
- "switched": "Tariff switched",
- "notEnoughBalance": "Insufficient balance"
- },
- "switchTraffic": {
- "title": "Change Traffic",
- "currentPackage": "Current package",
- "newPackage": "New package",
- "switch": "Change",
- "switched": "Traffic changed"
- },
- "purchasedTraffic": "Purchased Traffic",
- "trafficResetAt": "Reset"
- },
- "balance": {
- "title": "Balance",
- "currentBalance": "Current Balance",
- "topUp": "Top Up",
- "topUpBalance": "Top Up Balance",
- "paymentMethods": "Payment Methods",
- "transactionHistory": "Transaction History",
- "noTransactions": "No transactions",
- "date": "Date",
- "type": "Type",
- "description": "Description",
- "amount": "Amount",
- "deposit": "Deposit",
- "withdrawal": "Withdrawal",
- "subscriptionPayment": "Subscription Payment",
- "referralReward": "Referral Reward",
- "minAmount": "Min.",
- "maxAmount": "Max.",
- "notAvailable": "Not available",
- "useBot": "Please use the Telegram bot to top up your balance.",
- "page": "Page {{current}} of {{total}}",
- "invalidAmount": "Invalid amount",
- "promocode": {
- "title": "Promo Code",
- "placeholder": "Enter promo code",
- "activate": "Activate",
- "activating": "Activating...",
- "success": "Promo code activated successfully!",
- "balanceAdded": "Balance added: {{amount}} ₽",
- "errors": {
- "not_found": "Promo code not found",
- "expired": "Promo code has expired",
- "used": "Promo code has already been used",
- "already_used_by_user": "You have already used this promo code",
- "user_not_found": "User not found",
- "server_error": "Server error"
- }
- },
- "minAmountError": "Minimum amount: {{amount}} ₽",
- "maxAmountError": "Maximum amount: {{amount}} ₽",
- "paymentOption": "Payment option",
- "selectPaymentOption": "Select payment option",
- "paymentMethods": {
- "yookassa": {
- "name": "YooKassa",
- "description": "Pay via YooKassa"
- },
- "cryptobot": {
- "name": "CryptoBot",
- "description": "Pay with cryptocurrency via CryptoBot"
- },
- "telegram_stars": {
- "name": "Telegram Stars",
- "description": "Pay with Telegram Stars"
- },
- "heleket": {
- "name": "Heleket Crypto",
- "description": "Pay with cryptocurrency via Heleket"
- },
- "mulenpay": {
- "name": "MulenPay",
- "description": "Pay via MulenPay"
- },
- "pal24": {
- "name": "PAL24",
- "description": "Pay via PAL24"
- },
- "platega": {
- "name": "Platega",
- "description": "Pay via Platega"
- },
- "wata": {
- "name": "Wata",
- "description": "Pay via Wata"
- },
- "cloudpayments": {
- "name": "CloudPayments",
- "description": "Pay with bank card via CloudPayments"
- },
- "freekassa": {
- "name": "FreeKassa",
- "description": "Pay via FreeKassa"
- }
- },
- "pendingPayments": {
- "title": "Pending Payments",
- "pay": "Pay",
- "checkStatus": "Check Status",
- "checking": "Checking..."
- }
- },
- "referral": {
- "title": "Referral Program",
- "yourLink": "Your Referral Link",
- "copyLink": "Copy Link",
- "copied": "Copied!",
- "shareButton": "Share",
- "shareMessage": "Join me on {{botName}} and earn up to {{percent}}% cashback!",
- "shareHint": "Share this link with friends. When they sign up and make a purchase, you'll earn {{percent}}% commission!",
- "stats": {
- "totalReferrals": "Total Referrals",
- "activeReferrals": "Active",
- "totalEarnings": "Total Earnings",
- "commissionRate": "Commission Rate"
- },
- "terms": {
- "title": "Program Terms",
- "commission": "Commission",
- "minTopup": "Min. Top-up",
- "newUserBonus": "New User Bonus",
- "inviterBonus": "Inviter Bonus"
- },
- "yourReferrals": "Your Referrals",
- "noReferrals": "No referrals yet. Share your link to invite friends!",
- "user": "User",
- "joined": "Joined",
- "hasPaid": "Has Paid",
- "status": {
- "pending": "Pending",
- "paid": "Paid"
- },
- "earningsHistory": "Earnings History",
- "reason": "Reason",
- "reasons": {
- "referral_registration_pending": "Referral Registration",
- "referral_registration": "Referral Registration",
- "referral_first_payment": "Referral First Payment",
- "referral_subscription_renewal": "Referral Subscription Renewal",
- "referral_bonus": "Referral Bonus"
- }
- },
- "support": {
- "title": "Support",
- "newTicket": "New Ticket",
- "yourTickets": "Your Tickets",
- "noTickets": "No tickets yet",
- "createTicket": "Create New Ticket",
- "subject": "Subject",
- "subjectPlaceholder": "Brief description of your issue",
- "message": "Message",
- "messagePlaceholder": "Describe your issue in detail...",
- "send": "Send",
- "sending": "Sending...",
- "creating": "Creating...",
- "reply": "Reply",
- "replyPlaceholder": "Type your reply...",
- "sendReply": "Send Reply",
- "you": "You",
- "supportTeam": "Support",
- "selectTicket": "Select a ticket or create a new one",
- "created": "Created",
- "repliesDisabled": "Replies to this ticket are disabled",
- "status": {
- "open": "Open",
- "answered": "Answered",
- "pending": "Pending",
- "closed": "Closed"
- },
- "attachImage": "Attach image",
- "invalidFileType": "Invalid file type. Use JPEG, PNG, GIF or WebP.",
- "fileTooLarge": "File is too large. Maximum size is 10MB.",
- "uploadFailed": "Failed to upload image",
- "imageLoadFailed": "Failed to load image",
- "ticketsDisabled": "Tickets Disabled",
- "useProfile": "Please go to the bot profile to get support",
- "goToProfile": "Go to Profile",
- "useExternalLink": "Please use the external link to get support",
- "openSupport": "Open Support",
- "contactSupport": "Please contact {{username}} for support",
- "contactUs": "Contact Support"
- },
- "wheel": {
- "title": "Fortune Wheel",
- "disabled": "Fortune Wheel is currently unavailable",
- "spinsRemaining": "Spins remaining today",
- "choosePayment": "Choose payment method",
- "stars": "Stars",
- "telegramStars": "Telegram Stars",
- "days": "days",
- "subscriptionDays": "Subscription days",
- "day": "Day",
- "spin": "SPIN!",
- "spinning": "Spinning...",
- "history": "History",
- "recentSpins": "Recent spins",
- "congratulations": "Congratulations!",
- "noLuck": "No luck!",
- "oops": "Oops!",
- "yourPromoCode": "Your promo code:",
- "close": "Close",
- "errors": {
- "networkError": "A network error occurred",
- "loadFailed": "Failed to load wheel configuration",
- "dailyLimitReached": "Daily spin limit reached",
- "cannotSpin": "Cannot spin right now",
- "insufficientBalance": "Insufficient balance",
- "topUpRequired": "Top up your balance to pay for spin",
- "starsNotAvailable": "Stars payment not available. Open the app via Telegram."
- },
- "payWithStars": "Pay with Stars",
- "payWithDays": "Pay with days",
- "processingPayment": "Processing...",
- "starsPaymentSuccess": "Payment successful! Spin result sent to Telegram.",
- "starsPaymentSuccessCheckHistory": "Payment successful! Check history or Telegram for the result.",
- "starsPaymentFailed": "Payment failed. Please try again.",
- "youWon": "You won",
- "noPrize": "No luck this time...",
- "noHistory": "No spin history yet",
- "banner": {
- "title": "Try your luck!",
- "description": "Spin the wheel and win prizes: subscription days, balance, traffic and more!",
- "button": "Go to wheel"
- }
- },
- "admin": {
- "nav": {
- "title": "Admin",
- "dashboard": "Dashboard",
- "tickets": "Tickets",
- "settings": "Settings",
- "apps": "Apps",
- "wheel": "Wheel",
- "tariffs": "Tariffs",
- "servers": "Servers",
- "broadcasts": "Broadcasts",
- "users": "Users",
- "payments": "Payments",
- "remnawave": "RemnaWave"
- },
- "panel": {
- "title": "Admin Panel",
- "subtitle": "System management",
- "dashboardDesc": "Statistics and system monitoring",
- "ticketsDesc": "Handle user support tickets",
- "settingsDesc": "System settings and parameters",
- "appsDesc": "Manage connection apps",
- "wheelDesc": "Configure fortune wheel and prizes",
- "tariffsDesc": "Manage tariff plans",
- "serversDesc": "Configure VPN servers",
- "broadcastsDesc": "Mass messaging to users",
- "usersDesc": "Manage bot users",
- "paymentsDesc": "Payment verification",
- "remnawaveDesc": "Panel management and statistics"
- },
- "payments": {
- "title": "Payment Verification",
- "description": "Pending payments in the last 24 hours",
- "totalPending": "Total Pending",
- "filterByMethod": "Filter by method",
- "noPayments": "No pending payments",
- "paid": "Paid",
- "user": "User",
- "openLink": "Open Link",
- "checkStatus": "Check Status",
- "checking": "Checking..."
- },
- "remnawave": {
- "title": "RemnaWave",
- "subtitle": "Panel management and statistics",
- "connected": "Connected",
- "disconnected": "Not configured",
- "noData": "Failed to load data",
- "tabs": {
- "overview": "Overview",
- "nodes": "Nodes",
- "squads": "Squads",
- "sync": "Sync"
- },
- "overview": {
- "system": "System",
- "usersOnline": "Online",
- "totalUsers": "Total Users",
- "nodesOnline": "Nodes Online",
- "connections": "Connections",
- "bandwidth": "Realtime Bandwidth",
- "download": "Download",
- "upload": "Upload",
- "total": "Total",
- "server": "Server",
- "cpu": "CPU Cores",
- "memory": "Memory",
- "uptime": "Uptime",
- "traffic": "Traffic Statistics",
- "usersByStatus": "Users by Status"
- },
- "nodes": {
- "online": "Online",
- "offline": "Offline",
- "disabled": "Disabled",
- "noNodes": "No nodes found",
- "restart": "Restart",
- "enable": "Enable",
- "disable": "Disable",
- "restartAll": "Restart All",
- "confirmRestartAll": "Are you sure you want to restart all nodes?"
- },
- "squads": {
- "synced": "Synced",
- "notSynced": "Not synced",
- "noSquads": "No squads found",
- "syncServers": "Sync Servers"
- },
- "sync": {
- "autoSync": "Auto Sync",
- "runNow": "Run Now",
- "manual": "Manual Sync",
- "fromPanel": "Sync from Panel",
- "fromPanelDesc": "Import users from RemnaWave panel to bot database",
- "toPanel": "Sync to Panel",
- "toPanelDesc": "Export users from bot database to RemnaWave panel",
- "subscriptions": "Subscriptions",
- "validate": "Validate",
- "validateDesc": "Check and fix subscription inconsistencies",
- "cleanup": "Cleanup",
- "cleanupDesc": "Remove orphaned subscriptions without users",
- "statuses": "Sync Statuses",
- "statusesDesc": "Synchronize subscription statuses with panel"
- }
- },
- "wheel": {
- "title": "Fortune Wheel Settings",
- "enabled": "Enabled",
- "disabled": "Disabled",
- "tabs": {
- "settings": "Settings",
- "prizes": "Prizes",
- "statistics": "Statistics"
- },
- "settings": {
- "enableWheel": "Enable Wheel",
- "allowSpins": "Allow users to spin the wheel",
- "costInStars": "Cost in Stars",
- "costInDays": "Cost in Days",
- "rtpPercent": "RTP (Return to Player) %",
- "dailyLimit": "Daily Spin Limit (0 = unlimited)",
- "minSubDays": "Min subscription days for day payment",
- "promoPrefix": "Promo code prefix"
- },
- "prizes": {
- "addPrize": "Add Prize",
- "editPrize": "Edit Prize",
- "noPrizes": "No prizes configured. Add some prizes to enable the wheel.",
- "deletePrize": "Delete this prize?",
- "types": {
- "subscription_days": "Subscription Days",
- "balance_bonus": "Balance Bonus",
- "traffic_gb": "Traffic GB",
- "promocode": "Promo Code",
- "nothing": "Nothing (Empty)"
- },
- "fields": {
- "type": "Type",
- "displayName": "Display Name",
- "value": "Value",
- "valueKopeks": "Value in Kopeks (for RTP)",
- "emoji": "Emoji",
- "color": "Color",
- "active": "Active",
- "worth": "Worth"
- },
- "promo": {
- "title": "Promo Code Settings",
- "balanceBonus": "Balance bonus (kopeks)",
- "subscriptionDays": "Subscription days"
- }
- },
- "statistics": {
- "totalSpins": "Total Spins",
- "revenue": "Revenue",
- "payouts": "Payouts",
- "actualRtp": "Actual RTP",
- "targetRtp": "target",
- "prizeDistribution": "Prize Distribution",
- "times": "times",
- "topWins": "Top Wins"
- }
- },
- "broadcasts": {
- "title": "Broadcasts",
- "subtitle": "Mass messaging to users",
- "create": "Create Broadcast",
- "empty": "No broadcasts yet",
- "selectFilter": "Select audience",
- "selectFilterPlaceholder": "Select filter...",
- "recipients": "recip.",
- "messageText": "Message text",
- "messageTextPlaceholder": "Enter broadcast message...",
- "media": "Media file",
- "addMedia": "Add media",
- "uploading": "Uploading...",
- "buttons": "Buttons",
- "willBeSent": "Will be sent to",
- "users": "users",
- "send": "Send",
- "stop": "Stop",
- "progress": "Progress",
- "total": "Total",
- "sent": "Sent",
- "failed": "Failed",
- "filter": "Filter",
- "message": "Message",
- "unknownAdmin": "Unknown admin"
- },
- "settings": {
- "title": "System Settings",
- "allCategories": "All categories",
- "noSettings": "No settings found",
- "modified": "Modified",
- "readOnly": "Read only",
- "reset": "Reset",
- "categoriesCount": "categories",
- "settingsCount": "settings",
- "expandAll": "Expand all",
- "collapseAll": "Collapse all",
- "searchPlaceholder": "Search settings...",
- "searchCategoriesPlaceholder": "Search categories...",
- "noSearchResults": "Nothing found",
- "example": "Example"
- },
- "apps": {
- "title": "App Management",
- "addApp": "Add App",
- "addFirstApp": "Add First App",
- "noApps": "No apps for this platform",
- "createApp": "Create App",
- "editApp": "Edit App",
- "confirmDelete": "Are you sure you want to delete this app?",
- "copyTo": "Copy to...",
- "appId": "App ID",
- "appName": "Name",
- "urlScheme": "URL Scheme",
- "featured": "Featured",
- "base64Encoding": "Base64 Encoding",
- "buttons": "Buttons",
- "button": "Button",
- "addButton": "Add Button",
- "buttonText": "Button Text",
- "installDescription": "Installation Description",
- "subscriptionDescription": "Add Subscription Description",
- "connectDescription": "Connect Description",
- "beforeSubscription": "Before Add Subscription",
- "afterSubscription": "After Add Subscription",
- "stepTitle": "Title",
- "stepDescription": "Description",
- "tabs": {
- "basic": "Basic",
- "installation": "Installation",
- "subscription": "Subscription",
- "connect": "Connect",
- "additional": "Additional"
- },
- "import": "Import",
- "export": "Export",
- "importApps": "Import apps from JSON",
- "exportApps": "Export apps to JSON",
- "importPreview": "Import Preview",
- "confirmImport": "Import Apps",
- "importError": "Invalid JSON file format",
- "importCreateError": "Failed to create some apps",
- "noAppsToImport": "No apps to import",
- "remnaWaveToggle": "Toggle RemnaWave source",
- "refreshRemnaWave": "Refresh from RemnaWave",
- "remnaWaveMode": "Showing apps from RemnaWave panel. Read-only mode.",
- "remnaWaveSettings": "RemnaWave Settings",
- "remnaWaveConfigUuid": "Config UUID",
- "remnaWaveConfigUuidHint": "UUID of subscription page config from RemnaWave panel",
- "availableConfigs": "Available configs"
- },
- "tickets": {
- "title": "Ticket Management",
- "total": "Total",
- "list": "Tickets",
- "noTickets": "No tickets",
- "selectTicket": "Select a ticket from the list",
- "allStatuses": "All statuses",
- "statusOpen": "Open",
- "statusPending": "Pending",
- "statusAnswered": "Answered",
- "statusClosed": "Closed",
- "from": "From",
- "created": "Created",
- "user": "User",
- "you": "You",
- "userLabel": "User",
- "adminLabel": "Admin",
- "replyPlaceholder": "Type your reply...",
- "sendReply": "Send Reply",
- "settings": "Settings",
- "supportMode": "Support mode",
- "supportModeDesc": "Choose how users can contact support",
- "modeBoth": "Tickets and contact",
- "modeTickets": "Tickets only",
- "modeContact": "Contact only",
- "slaSettings": "SLA Settings",
- "slaEnabled": "Enable SLA (response time monitoring)",
- "slaEnabledDesc": "Automatic notifications for overdue tickets",
- "slaMinutes": "Response time (minutes)",
- "slaMinutesDesc": "Maximum time to respond to a ticket (1-1440 minutes)",
- "checkInterval": "Check interval (seconds)",
- "checkIntervalDesc": "How often to check for overdue tickets (30-600 seconds)",
- "reminderCooldown": "Reminder interval (minutes)",
- "reminderCooldownDesc": "Minimum time between reminders (1-120 minutes)",
- "settingsUpdateError": "Error saving settings"
- },
- "tariffs": {
- "title": "Tariff Management",
- "subtitle": "Configure tariff plans",
- "create": "Create Tariff",
- "edit": "Edit Tariff",
- "noTariffs": "No tariffs",
- "name": "Name",
- "namePlaceholder": "Enter tariff name",
- "description": "Description",
- "descriptionPlaceholder": "Enter tariff description",
- "trafficLimit": "Traffic Limit",
- "trafficHint": "0 = unlimited traffic",
- "deviceLimit": "Device Limit",
- "tierLevel": "Tier Level",
- "tierHint": "1-10, affects priority during upgrade",
- "unlimited": "Unlimited",
- "devices": "devices",
- "servers": "servers",
- "subscriptions": "subscriptions",
- "trial": "Trial",
- "inactive": "Inactive",
- "activate": "Activate",
- "deactivate": "Deactivate",
- "toggleTrial": "Toggle Trial",
- "delete": "Delete",
- "confirmDelete": "Delete tariff?",
- "confirmDeleteText": "This action cannot be undone. The tariff will be permanently deleted.",
- "days": "days",
- "tabs": {
- "basic": "Basic",
- "prices": "Prices",
- "servers": "Servers"
- },
- "pricesHint": "Enable required periods and set prices (in rubles)",
- "periodDisabled": "Disabled",
- "serversHint": "Select servers available for this tariff. You can set individual traffic limits for each server.",
- "noServers": "No servers available",
- "serverTrafficLimit": "Traffic limit",
- "useDefault": "default"
- },
- "servers": {
- "title": "Server Management",
- "subtitle": "Configure VPN servers",
- "sync": "Sync",
- "syncing": "Syncing...",
- "syncNow": "Sync now",
- "noServers": "No servers. Sync with RemnaWave.",
- "edit": "Edit Server",
- "originalName": "Original Name",
- "displayName": "Display Name",
- "displayNamePlaceholder": "Enter display name",
- "description": "Description",
- "descriptionPlaceholder": "Enter server description",
- "countryCode": "Country Code",
- "price": "Price",
- "priceHint": "Additional server cost",
- "maxUsers": "Max Users",
- "sortOrder": "Sort Order",
- "unlimited": "Unlimited",
- "stats": "Statistics",
- "currentUsers": "Current Users",
- "activeSubscriptions": "Active Subscriptions",
- "usedByTariffs": "Used by Tariffs",
- "trial": "Trial",
- "unavailable": "Unavailable",
- "full": "Full",
- "enable": "Enable",
- "disable": "Disable",
- "toggleTrial": "Toggle Trial",
- "loadError": "Failed to load server"
- }
- },
- "adminDashboard": {
- "title": "Statistics Dashboard",
- "subtitle": "Real-time system overview",
- "refresh": "Refresh",
- "loadError": "Failed to load statistics",
- "stats": {
- "usersOnline": "Users Online",
- "activeSubscriptions": "Active Subscriptions",
- "incomeToday": "Today's Income",
- "incomeMonth": "Monthly Income",
- "incomeTotal": "Total Income",
- "subscriptionIncome": "Subscription Income",
- "total": "total"
- },
- "nodes": {
- "title": "Nodes",
- "online": "Online",
- "offline": "Offline",
- "disabled": "Disabled",
- "noNodes": "No nodes available",
- "usersOnline": "Online",
- "traffic": "Traffic",
- "enable": "Enable",
- "disable": "Disable"
- },
- "revenue": {
- "title": "Revenue",
- "last7Days": "Last 7 days"
- },
- "subscriptions": {
- "title": "Subscriptions",
- "subtitle": "Subscription statistics",
- "active": "Active",
- "trial": "Trial",
- "paid": "Paid",
- "expired": "Expired",
- "newSubscriptions": "New Subscriptions",
- "today": "Today",
- "week": "Week",
- "month": "Month",
- "conversion": "Trial to Paid Conversion"
- },
- "servers": {
- "title": "Servers",
- "total": "Total Servers",
- "available": "Available",
- "withConnections": "With Connections",
- "revenue": "Revenue"
- },
- "tariffs": {
- "title": "Tariff Statistics",
- "subtitle": "Subscription distribution by tariffs",
- "tariffName": "Tariff",
- "activeSubscriptions": "Active",
- "trialSubscriptions": "Trial",
- "purchasedToday": "Today",
- "purchasedWeek": "Week",
- "purchasedMonth": "Month",
- "noTariffs": "No tariffs"
- }
- },
- "profile": {
- "title": "Profile",
- "accountInfo": "Account Information",
- "telegramId": "Telegram ID",
- "username": "Username",
- "name": "Name",
- "registeredAt": "Registered",
- "emailAuth": "Email Authentication",
- "linkEmailDescription": "Link your email to log in without Telegram. After linking, you'll receive a verification email.",
- "linkEmail": "Link Email",
- "emailRequired": "Email is required",
- "passwordMinLength": "Password must be at least 8 characters",
- "passwordsMismatch": "Passwords do not match",
- "passwordPlaceholder": "Enter password",
- "confirmPasswordPlaceholder": "Confirm password",
- "passwordHint": "Minimum 8 characters",
- "emailSent": "Verification email sent! Please check your inbox.",
- "verified": "Verified",
- "notVerified": "Not verified",
- "verificationRequired": "Please verify your email to use email login.",
- "resendVerification": "Resend Verification Email",
- "verificationResent": "Verification email resent!",
- "canLoginWithEmail": "You can now log in using your email and password.",
- "notifications": {
- "title": "Notification Settings",
- "subscriptionExpiry": "Subscription Expiry",
- "subscriptionExpiryDesc": "Notify about expiring subscription",
- "daysBeforeExpiry": "Days before expiry",
- "trafficWarning": "Traffic Warning",
- "trafficWarningDesc": "Notify when approaching traffic limit",
- "atPercent": "At usage",
- "balanceLow": "Low Balance",
- "balanceLowDesc": "Notify about low balance",
- "threshold": "Threshold",
- "news": "News",
- "newsDesc": "Receive news and service updates",
- "promoOffers": "Promo Offers",
- "promoOffersDesc": "Receive special offers and discounts",
- "unavailable": "Notification settings unavailable"
- }
- },
- "theme": {
- "colors": "Theme Colors",
- "reset": "Reset",
- "accent": "Accent Color",
- "accentDescription": "Main brand color for buttons, links and interactive elements",
- "darkTheme": "Dark Theme",
- "lightTheme": "Light Theme",
- "background": "Background",
- "surface": "Surface",
- "text": "Text",
- "textSecondary": "Secondary Text",
- "statusColors": "Status Colors",
- "success": "Success",
- "warning": "Warning",
- "error": "Error",
- "preview": "Preview",
- "previewButton": "Primary Button",
- "previewSecondary": "Secondary Button",
- "light": "Light Theme",
- "dark": "Dark Theme"
- },
- "languages": {
- "ru": "Русский",
- "en": "English",
- "zh": "中文",
- "fa": "فارسی"
- },
- "contests": {
- "title": "Contests",
- "error": "Failed to load contests",
- "noContests": "No contests available",
- "days": "days",
- "play": "Play",
- "alreadyPlayed": "Already played",
- "enterAnswer": "Enter your answer",
- "submit": "Submit",
- "imHere": "I'm here!"
- },
- "polls": {
- "title": "Polls",
- "error": "Failed to load polls",
- "noPolls": "No polls available",
- "questions": "questions",
- "question": "Question",
- "of": "of",
- "start": "Start",
- "continue": "Continue",
- "completed": "Completed",
- "reward": "$"
- },
- "info": {
- "title": "Information",
- "faq": "FAQ",
- "rules": "Rules",
- "privacy": "Privacy Policy",
- "offer": "Public Offer",
- "noFaq": "No FAQ available",
- "noContent": "No content available",
- "updatedAt": "Updated"
- },
- "onboarding": {
- "skip": "Skip",
- "finish": "Finish",
- "steps": {
- "welcome": {
- "title": "Welcome!",
- "description": "This is your personal cabinet. Here you can manage your subscription, top up balance and connect devices."
- },
- "connectDevices": {
- "title": "Connect Devices",
- "description": "Click this button to get instructions on how to connect VPN on your devices."
- },
- "balance": {
- "title": "Your Balance",
- "description": "Your current balance is displayed here. Click to top it up."
- },
- "subscription": {
- "title": "Subscription Status",
- "description": "Here you can see how many days are left until your subscription expires."
- },
- "quickActions": {
- "title": "Quick Actions",
- "description": "Use these buttons for quick access to main features: top up balance, extend subscription, and invite friends."
- }
- }
- }
+ "common": {
+ "loading": "Loading...",
+ "error": "Error",
+ "success": "Success",
+ "save": "Save",
+ "cancel": "Cancel",
+ "confirm": "Confirm",
+ "back": "Back",
+ "next": "Next",
+ "close": "Close",
+ "search": "Search",
+ "noData": "No data",
+ "actions": "Actions",
+ "yes": "Yes",
+ "no": "No",
+ "or": "or",
+ "and": "and",
+ "edit": "Edit",
+ "delete": "Delete",
+ "currency": "$"
+ },
+ "nav": {
+ "dashboard": "Dashboard",
+ "subscription": "Subscription",
+ "balance": "Balance",
+ "referral": "Referrals",
+ "support": "Support",
+ "profile": "Profile",
+ "logout": "Logout",
+ "contests": "Contests",
+ "polls": "Polls",
+ "info": "Info",
+ "wheel": "Fortune Wheel"
+ },
+ "auth": {
+ "login": "Login",
+ "register": "Register",
+ "logout": "Logout",
+ "email": "Email",
+ "password": "Password",
+ "confirmPassword": "Confirm password",
+ "forgotPassword": "Forgot password?",
+ "resetPassword": "Reset password",
+ "loginWithTelegram": "Login with Telegram",
+ "loginWithEmail": "Login with Email",
+ "noAccount": "Don't have an account?",
+ "hasAccount": "Already have an account?",
+ "registerHint": "To register with email, first log in via Telegram, then link your email in settings.",
+ "telegramRequired": "Telegram authorization required",
+ "telegramNotConfigured": "Telegram bot is not configured",
+ "authenticating": "Authenticating...",
+ "orOpenInApp": "Or open the bot in the app",
+ "loginFailed": "Login Failed",
+ "tryAgain": "Try Again",
+ "welcomeBack": "Welcome back!",
+ "loginTitle": "Login to Cabinet",
+ "loginSubtitle": "Sign in with Telegram or use your email"
+ },
+ "emailVerification": {
+ "title": "Email Verification",
+ "verifying": "Verifying email...",
+ "pleaseWait": "Please wait while we verify your email address.",
+ "success": "Email Verified!",
+ "successMessage": "Your email has been successfully verified. You can now log in with your email and password.",
+ "failed": "Verification Failed",
+ "goToLogin": "Go to Login"
+ },
+ "dashboard": {
+ "title": "Dashboard",
+ "welcome": "Welcome, {{name}}!",
+ "yourSubscription": "Your Subscription",
+ "quickActions": "Quick Actions",
+ "viewSubscription": "Manage Subscription",
+ "topUpBalance": "Top Up Balance",
+ "inviteFriends": "Invite Friends",
+ "getSupport": "Get Support",
+ "currentBalance": "Current Balance",
+ "activeUntil": "Active until",
+ "noActiveSubscription": "No active subscription",
+ "devicesUsed": "Devices: {{used}} of {{total}}",
+ "trafficUsed": "Traffic: {{used}} of {{total}} GB",
+ "unlimitedTraffic": "Unlimited traffic"
+ },
+ "subscription": {
+ "title": "Subscription",
+ "currentPlan": "Current Plan",
+ "status": "Status",
+ "active": "Active",
+ "inactive": "Inactive",
+ "trialStatus": "Trial",
+ "expired": "Expired",
+ "expiresAt": "Expires at",
+ "daysLeft": "Days left",
+ "devices": "Devices",
+ "servers": "Servers",
+ "traffic": "Traffic",
+ "unlimited": "Unlimited",
+ "used": "Used",
+ "of": "of",
+ "renew": "Renew",
+ "extend": "Extend Subscription",
+ "buyTraffic": "Buy Traffic",
+ "buyDevices": "Buy Devices",
+ "renewalOptions": "Renewal Options",
+ "days": "days",
+ "hours": "h",
+ "minutes": "m",
+ "price": "Price",
+ "noSubscription": "You don't have an active subscription",
+ "getSubscription": "Get Subscription",
+ "connectionInfo": "Connection Info",
+ "copyLink": "Copy Link",
+ "copied": "Copied!",
+ "showQR": "Show QR Code",
+ "downloadConfig": "Download Config",
+ "trafficUsed": "Traffic used",
+ "timeLeft": "Time left",
+ "getConfig": "Connect Devices",
+ "autoRenewal": "Auto-renewal",
+ "daysBeforeExpiry": "days before expiry",
+ "selectPeriod": "Select Period",
+ "selectTraffic": "Select Traffic",
+ "selectServers": "Select Servers",
+ "selectDevices": "Devices",
+ "perDevice": "/ device",
+ "summary": "Summary",
+ "total": "Total",
+ "purchase": "Purchase",
+ "step": "Step {{current}} of {{total}}",
+ "stepPeriod": "Period",
+ "stepTraffic": "Traffic",
+ "stepServers": "Servers",
+ "stepDevices": "Devices",
+ "stepConfirm": "Confirm",
+ "currentTariff": "Current",
+ "from": "from",
+ "month": "mo",
+ "insufficientBalance": "Insufficient balance. Missing {{missing}} ₽",
+ "trial": {
+ "title": "Free Trial",
+ "description": "Try our VPN service for free!",
+ "days": "days",
+ "devices": "devices",
+ "price": "Activation price",
+ "activate": "Activate Free Trial",
+ "unavailable": "Trial is not available"
+ },
+ "connection": {
+ "title": "Connect VPN",
+ "selectDevice": "Select your device",
+ "selectApp": "Select app",
+ "installApp": "1. Install the app",
+ "addSubscription": "2. Add subscription",
+ "connectVpn": "3. Connect VPN",
+ "addToApp": "Add to {{appName}}",
+ "connect": "Connect",
+ "noApps": "No apps available for this platform",
+ "noSubscription": "You need an active subscription to connect",
+ "featured": "Recommended",
+ "yourDevice": "Your device",
+ "copyLink": "Copy subscription link",
+ "copied": "Link copied!",
+ "openLink": "Open link"
+ },
+ "myDevices": "My Devices",
+ "noDevices": "No connected devices",
+ "deleteDevice": "Delete device",
+ "deleteAllDevices": "Delete all",
+ "confirmDeleteDevice": "Delete this device?",
+ "confirmDeleteAllDevices": "Delete all devices?",
+ "deviceDeleted": "Device deleted",
+ "allDevicesDeleted": "All devices deleted",
+ "platform": "Platform",
+ "model": "Model",
+ "connectedAt": "Connected",
+ "pause": {
+ "title": "Subscription Pause",
+ "paused": "Paused",
+ "active": "Active",
+ "pauseBtn": "Pause",
+ "resumeBtn": "Resume",
+ "pausedMessage": "Subscription paused",
+ "resumedMessage": "Subscription resumed",
+ "dailyOnly": "Pause is only available for daily tariffs",
+ "pausedInfo": "Subscription paused",
+ "pausedDescription": "Charges stopped. Subscription will be active until",
+ "nextCharge": "Until next charge",
+ "willBeCharged": "Will be charged",
+ "days_one": "day",
+ "days_few": "days",
+ "days_many": "days",
+ "hours": "h",
+ "minutes": "m"
+ },
+ "dailyPurchase": {
+ "costPerDay": "Cost per day",
+ "chargedDaily": "Payment is charged daily from balance",
+ "canPause": "Can be paused at any time",
+ "pausedOnLowBalance": "Subscription will be paused if balance is insufficient",
+ "activate": "Activate for {{price}}"
+ },
+ "switchTariff": {
+ "title": "Switch Tariff",
+ "preview": "Preview",
+ "currentTariff": "Current tariff",
+ "newTariff": "New tariff",
+ "remainingDays": "Days remaining",
+ "upgradeCost": "Upgrade cost",
+ "free": "Free",
+ "switch": "Switch",
+ "switched": "Tariff switched",
+ "notEnoughBalance": "Insufficient balance"
+ },
+ "switchTraffic": {
+ "title": "Change Traffic",
+ "currentPackage": "Current package",
+ "newPackage": "New package",
+ "switch": "Change",
+ "switched": "Traffic changed"
+ },
+ "purchasedTraffic": "Purchased Traffic",
+ "trafficResetAt": "Reset"
+ },
+ "balance": {
+ "title": "Balance",
+ "currentBalance": "Current Balance",
+ "topUp": "Top Up",
+ "topUpBalance": "Top Up Balance",
+ "paymentMethods": "Payment Methods",
+ "transactionHistory": "Transaction History",
+ "noTransactions": "No transactions",
+ "date": "Date",
+ "type": "Type",
+ "description": "Description",
+ "amount": "Amount",
+ "deposit": "Deposit",
+ "withdrawal": "Withdrawal",
+ "subscriptionPayment": "Subscription Payment",
+ "referralReward": "Referral Reward",
+ "minAmount": "Min.",
+ "maxAmount": "Max.",
+ "notAvailable": "Not available",
+ "useBot": "Please use the Telegram bot to top up your balance.",
+ "page": "Page {{current}} of {{total}}",
+ "invalidAmount": "Invalid amount",
+ "promocode": {
+ "title": "Promo Code",
+ "placeholder": "Enter promo code",
+ "activate": "Activate",
+ "activating": "Activating...",
+ "success": "Promo code activated successfully!",
+ "balanceAdded": "Balance added: {{amount}} ₽",
+ "errors": {
+ "not_found": "Promo code not found",
+ "expired": "Promo code has expired",
+ "used": "Promo code has already been used",
+ "already_used_by_user": "You have already used this promo code",
+ "user_not_found": "User not found",
+ "server_error": "Server error"
+ }
+ },
+ "minAmountError": "Minimum amount: {{amount}} ₽",
+ "maxAmountError": "Maximum amount: {{amount}} ₽",
+ "paymentOption": "Payment option",
+ "selectPaymentOption": "Select payment option",
+ "paymentMethods": {
+ "yookassa": {
+ "name": "YooKassa",
+ "description": "Pay via YooKassa"
+ },
+ "cryptobot": {
+ "name": "CryptoBot",
+ "description": "Pay with cryptocurrency via CryptoBot"
+ },
+ "telegram_stars": {
+ "name": "Telegram Stars",
+ "description": "Pay with Telegram Stars"
+ },
+ "heleket": {
+ "name": "Heleket Crypto",
+ "description": "Pay with cryptocurrency via Heleket"
+ },
+ "mulenpay": {
+ "name": "MulenPay",
+ "description": "Pay via MulenPay"
+ },
+ "pal24": {
+ "name": "PAL24",
+ "description": "Pay via PAL24"
+ },
+ "platega": {
+ "name": "Platega",
+ "description": "Pay via Platega"
+ },
+ "wata": {
+ "name": "Wata",
+ "description": "Pay via Wata"
+ },
+ "cloudpayments": {
+ "name": "CloudPayments",
+ "description": "Pay with bank card via CloudPayments"
+ },
+ "freekassa": {
+ "name": "FreeKassa",
+ "description": "Pay via FreeKassa"
+ }
+ },
+ "pendingPayments": {
+ "title": "Pending Payments",
+ "pay": "Pay",
+ "checkStatus": "Check Status",
+ "checking": "Checking..."
+ }
+ },
+ "referral": {
+ "title": "Referral Program",
+ "yourLink": "Your Referral Link",
+ "copyLink": "Copy Link",
+ "copied": "Copied!",
+ "shareButton": "Share",
+ "shareMessage": "Join me on and earn up to {{percent}}% cashback!",
+ "shareHint": "Share this link with friends. When they sign up and make a purchase, you'll earn {{percent}}% commission!",
+ "stats": {
+ "totalReferrals": "Total Referrals",
+ "activeReferrals": "Active",
+ "totalEarnings": "Total Earnings",
+ "commissionRate": "Commission Rate"
+ },
+ "terms": {
+ "title": "Program Terms",
+ "commission": "Commission",
+ "minTopup": "Min. Top-up",
+ "newUserBonus": "New User Bonus",
+ "inviterBonus": "Inviter Bonus"
+ },
+ "yourReferrals": "Your Referrals",
+ "noReferrals": "No referrals yet. Share your link to invite friends!",
+ "user": "User",
+ "joined": "Joined",
+ "hasPaid": "Has Paid",
+ "status": {
+ "pending": "Pending",
+ "paid": "Paid"
+ },
+ "earningsHistory": "Earnings History",
+ "reason": "Reason",
+ "reasons": {
+ "referral_registration_pending": "Referral Registration",
+ "referral_registration": "Referral Registration",
+ "referral_first_payment": "Referral First Payment",
+ "referral_subscription_renewal": "Referral Subscription Renewal",
+ "referral_bonus": "Referral Bonus"
+ }
+ },
+ "support": {
+ "title": "Support",
+ "newTicket": "New Ticket",
+ "yourTickets": "Your Tickets",
+ "noTickets": "No tickets yet",
+ "createTicket": "Create New Ticket",
+ "subject": "Subject",
+ "subjectPlaceholder": "Brief description of your issue",
+ "message": "Message",
+ "messagePlaceholder": "Describe your issue in detail...",
+ "send": "Send",
+ "sending": "Sending...",
+ "creating": "Creating...",
+ "reply": "Reply",
+ "replyPlaceholder": "Type your reply...",
+ "sendReply": "Send Reply",
+ "you": "You",
+ "supportTeam": "Support",
+ "selectTicket": "Select a ticket or create a new one",
+ "created": "Created",
+ "repliesDisabled": "Replies to this ticket are disabled",
+ "status": {
+ "open": "Open",
+ "answered": "Answered",
+ "pending": "Pending",
+ "closed": "Closed"
+ },
+ "attachImage": "Attach image",
+ "invalidFileType": "Invalid file type. Use JPEG, PNG, GIF or WebP.",
+ "fileTooLarge": "File is too large. Maximum size is 10MB.",
+ "uploadFailed": "Failed to upload image",
+ "imageLoadFailed": "Failed to load image",
+ "ticketsDisabled": "Tickets Disabled",
+ "useProfile": "Please go to the bot profile to get support",
+ "goToProfile": "Go to Profile",
+ "useExternalLink": "Please use the external link to get support",
+ "openSupport": "Open Support",
+ "contactSupport": "Please contact {{username}} for support",
+ "contactUs": "Contact Support"
+ },
+ "wheel": {
+ "title": "Fortune Wheel",
+ "disabled": "Fortune Wheel is currently unavailable",
+ "spinsRemaining": "Spins remaining today",
+ "choosePayment": "Choose payment method",
+ "stars": "Stars",
+ "telegramStars": "Telegram Stars",
+ "days": "days",
+ "subscriptionDays": "Subscription days",
+ "day": "Day",
+ "spin": "SPIN!",
+ "spinning": "Spinning...",
+ "history": "History",
+ "recentSpins": "Recent spins",
+ "congratulations": "Congratulations!",
+ "noLuck": "No luck!",
+ "oops": "Oops!",
+ "yourPromoCode": "Your promo code:",
+ "close": "Close",
+ "errors": {
+ "networkError": "A network error occurred",
+ "loadFailed": "Failed to load wheel configuration",
+ "dailyLimitReached": "Daily spin limit reached",
+ "cannotSpin": "Cannot spin right now",
+ "insufficientBalance": "Insufficient balance",
+ "topUpRequired": "Top up your balance to pay for spin",
+ "starsNotAvailable": "Stars payment not available. Open the app via Telegram."
+ },
+ "payWithStars": "Pay with Stars",
+ "payWithDays": "Pay with days",
+ "processingPayment": "Processing...",
+ "starsPaymentSuccess": "Payment successful! Spin result sent to Telegram.",
+ "starsPaymentSuccessCheckHistory": "Payment successful! Check history or Telegram for the result.",
+ "starsPaymentFailed": "Payment failed. Please try again.",
+ "youWon": "You won",
+ "noPrize": "No luck this time...",
+ "noHistory": "No spin history yet",
+ "banner": {
+ "title": "Try your luck!",
+ "description": "Spin the wheel and win prizes: subscription days, balance, traffic and more!",
+ "button": "Go to wheel"
+ }
+ },
+ "admin": {
+ "nav": {
+ "title": "Admin",
+ "dashboard": "Dashboard",
+ "tickets": "Tickets",
+ "settings": "Settings",
+ "apps": "Apps",
+ "wheel": "Wheel",
+ "tariffs": "Tariffs",
+ "servers": "Servers",
+ "broadcasts": "Broadcasts",
+ "users": "Users",
+ "payments": "Payments",
+ "remnawave": "RemnaWave"
+ },
+ "panel": {
+ "title": "Admin Panel",
+ "subtitle": "System management",
+ "dashboardDesc": "Statistics and system monitoring",
+ "ticketsDesc": "Handle user support tickets",
+ "settingsDesc": "System settings and parameters",
+ "appsDesc": "Manage connection apps",
+ "wheelDesc": "Configure fortune wheel and prizes",
+ "tariffsDesc": "Manage tariff plans",
+ "serversDesc": "Configure VPN servers",
+ "broadcastsDesc": "Mass messaging to users",
+ "usersDesc": "Manage bot users",
+ "paymentsDesc": "Payment verification",
+ "remnawaveDesc": "Panel management and statistics"
+ },
+ "payments": {
+ "title": "Payment Verification",
+ "description": "Pending payments in the last 24 hours",
+ "totalPending": "Total Pending",
+ "filterByMethod": "Filter by method",
+ "noPayments": "No pending payments",
+ "paid": "Paid",
+ "user": "User",
+ "openLink": "Open Link",
+ "checkStatus": "Check Status",
+ "checking": "Checking..."
+ },
+ "remnawave": {
+ "title": "RemnaWave",
+ "subtitle": "Panel management and statistics",
+ "connected": "Connected",
+ "disconnected": "Not configured",
+ "noData": "Failed to load data",
+ "tabs": {
+ "overview": "Overview",
+ "nodes": "Nodes",
+ "squads": "Squads",
+ "sync": "Sync"
+ },
+ "overview": {
+ "system": "System",
+ "usersOnline": "Online",
+ "totalUsers": "Total Users",
+ "nodesOnline": "Nodes Online",
+ "connections": "Connections",
+ "bandwidth": "Realtime Bandwidth",
+ "download": "Download",
+ "upload": "Upload",
+ "total": "Total",
+ "server": "Server",
+ "cpu": "CPU Cores",
+ "memory": "Memory",
+ "uptime": "Uptime",
+ "traffic": "Traffic Statistics",
+ "usersByStatus": "Users by Status"
+ },
+ "nodes": {
+ "online": "Online",
+ "offline": "Offline",
+ "disabled": "Disabled",
+ "noNodes": "No nodes found",
+ "restart": "Restart",
+ "enable": "Enable",
+ "disable": "Disable",
+ "restartAll": "Restart All",
+ "confirmRestartAll": "Are you sure you want to restart all nodes?"
+ },
+ "squads": {
+ "synced": "Synced",
+ "notSynced": "Not synced",
+ "noSquads": "No squads found",
+ "syncServers": "Sync Servers"
+ },
+ "sync": {
+ "autoSync": "Auto Sync",
+ "runNow": "Run Now",
+ "manual": "Manual Sync",
+ "fromPanel": "Sync from Panel",
+ "fromPanelDesc": "Import users from RemnaWave panel to bot database",
+ "toPanel": "Sync to Panel",
+ "toPanelDesc": "Export users from bot database to RemnaWave panel",
+ "subscriptions": "Subscriptions",
+ "validate": "Validate",
+ "validateDesc": "Check and fix subscription inconsistencies",
+ "cleanup": "Cleanup",
+ "cleanupDesc": "Remove orphaned subscriptions without users",
+ "statuses": "Sync Statuses",
+ "statusesDesc": "Synchronize subscription statuses with panel"
+ }
+ },
+ "wheel": {
+ "title": "Fortune Wheel Settings",
+ "enabled": "Enabled",
+ "disabled": "Disabled",
+ "tabs": {
+ "settings": "Settings",
+ "prizes": "Prizes",
+ "statistics": "Statistics"
+ },
+ "settings": {
+ "enableWheel": "Enable Wheel",
+ "allowSpins": "Allow users to spin the wheel",
+ "costInStars": "Cost in Stars",
+ "costInDays": "Cost in Days",
+ "rtpPercent": "RTP (Return to Player) %",
+ "dailyLimit": "Daily Spin Limit (0 = unlimited)",
+ "minSubDays": "Min subscription days for day payment",
+ "promoPrefix": "Promo code prefix"
+ },
+ "prizes": {
+ "addPrize": "Add Prize",
+ "editPrize": "Edit Prize",
+ "noPrizes": "No prizes configured. Add some prizes to enable the wheel.",
+ "deletePrize": "Delete this prize?",
+ "types": {
+ "subscription_days": "Subscription Days",
+ "balance_bonus": "Balance Bonus",
+ "traffic_gb": "Traffic GB",
+ "promocode": "Promo Code",
+ "nothing": "Nothing (Empty)"
+ },
+ "fields": {
+ "type": "Type",
+ "displayName": "Display Name",
+ "value": "Value",
+ "valueKopeks": "Value in Kopeks (for RTP)",
+ "emoji": "Emoji",
+ "color": "Color",
+ "active": "Active",
+ "worth": "Worth"
+ },
+ "promo": {
+ "title": "Promo Code Settings",
+ "balanceBonus": "Balance bonus (kopeks)",
+ "subscriptionDays": "Subscription days"
+ }
+ },
+ "statistics": {
+ "totalSpins": "Total Spins",
+ "revenue": "Revenue",
+ "payouts": "Payouts",
+ "actualRtp": "Actual RTP",
+ "targetRtp": "target",
+ "prizeDistribution": "Prize Distribution",
+ "times": "times",
+ "topWins": "Top Wins"
+ }
+ },
+ "broadcasts": {
+ "title": "Broadcasts",
+ "subtitle": "Mass messaging to users",
+ "create": "Create Broadcast",
+ "empty": "No broadcasts yet",
+ "selectFilter": "Select audience",
+ "selectFilterPlaceholder": "Select filter...",
+ "recipients": "recip.",
+ "messageText": "Message text",
+ "messageTextPlaceholder": "Enter broadcast message...",
+ "media": "Media file",
+ "addMedia": "Add media",
+ "uploading": "Uploading...",
+ "buttons": "Buttons",
+ "willBeSent": "Will be sent to",
+ "users": "users",
+ "send": "Send",
+ "stop": "Stop",
+ "progress": "Progress",
+ "total": "Total",
+ "sent": "Sent",
+ "failed": "Failed",
+ "filter": "Filter",
+ "message": "Message",
+ "unknownAdmin": "Unknown admin"
+ },
+ "settings": {
+ "title": "System Settings",
+ "allCategories": "All categories",
+ "noSettings": "No settings found",
+ "modified": "Modified",
+ "readOnly": "Read only",
+ "reset": "Reset",
+ "categoriesCount": "categories",
+ "settingsCount": "settings",
+ "expandAll": "Expand all",
+ "collapseAll": "Collapse all",
+ "searchPlaceholder": "Search settings...",
+ "searchCategoriesPlaceholder": "Search categories...",
+ "noSearchResults": "Nothing found",
+ "example": "Example"
+ },
+ "apps": {
+ "title": "App Management",
+ "addApp": "Add App",
+ "addFirstApp": "Add First App",
+ "noApps": "No apps for this platform",
+ "createApp": "Create App",
+ "editApp": "Edit App",
+ "confirmDelete": "Are you sure you want to delete this app?",
+ "copyTo": "Copy to...",
+ "appId": "App ID",
+ "appName": "Name",
+ "urlScheme": "URL Scheme",
+ "featured": "Featured",
+ "base64Encoding": "Base64 Encoding",
+ "buttons": "Buttons",
+ "button": "Button",
+ "addButton": "Add Button",
+ "buttonText": "Button Text",
+ "installDescription": "Installation Description",
+ "subscriptionDescription": "Add Subscription Description",
+ "connectDescription": "Connect Description",
+ "beforeSubscription": "Before Add Subscription",
+ "afterSubscription": "After Add Subscription",
+ "stepTitle": "Title",
+ "stepDescription": "Description",
+ "tabs": {
+ "basic": "Basic",
+ "installation": "Installation",
+ "subscription": "Subscription",
+ "connect": "Connect",
+ "additional": "Additional"
+ },
+ "import": "Import",
+ "export": "Export",
+ "importApps": "Import apps from JSON",
+ "exportApps": "Export apps to JSON",
+ "importPreview": "Import Preview",
+ "confirmImport": "Import Apps",
+ "importError": "Invalid JSON file format",
+ "importCreateError": "Failed to create some apps",
+ "noAppsToImport": "No apps to import",
+ "remnaWaveToggle": "Toggle RemnaWave source",
+ "refreshRemnaWave": "Refresh from RemnaWave",
+ "remnaWaveMode": "Showing apps from RemnaWave panel. Read-only mode.",
+ "remnaWaveSettings": "RemnaWave Settings",
+ "remnaWaveConfigUuid": "Config UUID",
+ "remnaWaveConfigUuidHint": "UUID of subscription page config from RemnaWave panel",
+ "availableConfigs": "Available configs"
+ },
+ "tickets": {
+ "title": "Ticket Management",
+ "total": "Total",
+ "list": "Tickets",
+ "noTickets": "No tickets",
+ "selectTicket": "Select a ticket from the list",
+ "allStatuses": "All statuses",
+ "statusOpen": "Open",
+ "statusPending": "Pending",
+ "statusAnswered": "Answered",
+ "statusClosed": "Closed",
+ "from": "From",
+ "created": "Created",
+ "user": "User",
+ "you": "You",
+ "userLabel": "User",
+ "adminLabel": "Admin",
+ "replyPlaceholder": "Type your reply...",
+ "sendReply": "Send Reply",
+ "settings": "Settings",
+ "supportMode": "Support mode",
+ "supportModeDesc": "Choose how users can contact support",
+ "modeBoth": "Tickets and contact",
+ "modeTickets": "Tickets only",
+ "modeContact": "Contact only",
+ "slaSettings": "SLA Settings",
+ "slaEnabled": "Enable SLA (response time monitoring)",
+ "slaEnabledDesc": "Automatic notifications for overdue tickets",
+ "slaMinutes": "Response time (minutes)",
+ "slaMinutesDesc": "Maximum time to respond to a ticket (1-1440 minutes)",
+ "checkInterval": "Check interval (seconds)",
+ "checkIntervalDesc": "How often to check for overdue tickets (30-600 seconds)",
+ "reminderCooldown": "Reminder interval (minutes)",
+ "reminderCooldownDesc": "Minimum time between reminders (1-120 minutes)",
+ "settingsUpdateError": "Error saving settings"
+ },
+ "tariffs": {
+ "title": "Tariff Management",
+ "subtitle": "Configure tariff plans",
+ "create": "Create Tariff",
+ "edit": "Edit Tariff",
+ "noTariffs": "No tariffs",
+ "name": "Name",
+ "namePlaceholder": "Enter tariff name",
+ "description": "Description",
+ "descriptionPlaceholder": "Enter tariff description",
+ "trafficLimit": "Traffic Limit",
+ "trafficHint": "0 = unlimited traffic",
+ "deviceLimit": "Device Limit",
+ "tierLevel": "Tier Level",
+ "tierHint": "1-10, affects priority during upgrade",
+ "unlimited": "Unlimited",
+ "devices": "devices",
+ "servers": "servers",
+ "subscriptions": "subscriptions",
+ "trial": "Trial",
+ "inactive": "Inactive",
+ "activate": "Activate",
+ "deactivate": "Deactivate",
+ "toggleTrial": "Toggle Trial",
+ "delete": "Delete",
+ "confirmDelete": "Delete tariff?",
+ "confirmDeleteText": "This action cannot be undone. The tariff will be permanently deleted.",
+ "days": "days",
+ "tabs": {
+ "basic": "Basic",
+ "prices": "Prices",
+ "servers": "Servers"
+ },
+ "pricesHint": "Enable required periods and set prices (in rubles)",
+ "periodDisabled": "Disabled",
+ "serversHint": "Select servers available for this tariff. You can set individual traffic limits for each server.",
+ "noServers": "No servers available",
+ "serverTrafficLimit": "Traffic limit",
+ "useDefault": "default"
+ },
+ "servers": {
+ "title": "Server Management",
+ "subtitle": "Configure VPN servers",
+ "sync": "Sync",
+ "syncing": "Syncing...",
+ "syncNow": "Sync now",
+ "noServers": "No servers. Sync with RemnaWave.",
+ "edit": "Edit Server",
+ "originalName": "Original Name",
+ "displayName": "Display Name",
+ "displayNamePlaceholder": "Enter display name",
+ "description": "Description",
+ "descriptionPlaceholder": "Enter server description",
+ "countryCode": "Country Code",
+ "price": "Price",
+ "priceHint": "Additional server cost",
+ "maxUsers": "Max Users",
+ "sortOrder": "Sort Order",
+ "unlimited": "Unlimited",
+ "stats": "Statistics",
+ "currentUsers": "Current Users",
+ "activeSubscriptions": "Active Subscriptions",
+ "usedByTariffs": "Used by Tariffs",
+ "trial": "Trial",
+ "unavailable": "Unavailable",
+ "full": "Full",
+ "enable": "Enable",
+ "disable": "Disable",
+ "toggleTrial": "Toggle Trial",
+ "loadError": "Failed to load server"
+ }
+ },
+ "adminDashboard": {
+ "title": "Statistics Dashboard",
+ "subtitle": "Real-time system overview",
+ "refresh": "Refresh",
+ "loadError": "Failed to load statistics",
+ "stats": {
+ "usersOnline": "Users Online",
+ "activeSubscriptions": "Active Subscriptions",
+ "incomeToday": "Today's Income",
+ "incomeMonth": "Monthly Income",
+ "incomeTotal": "Total Income",
+ "subscriptionIncome": "Subscription Income",
+ "total": "total"
+ },
+ "nodes": {
+ "title": "Nodes",
+ "online": "Online",
+ "offline": "Offline",
+ "disabled": "Disabled",
+ "noNodes": "No nodes available",
+ "usersOnline": "Online",
+ "traffic": "Traffic",
+ "enable": "Enable",
+ "disable": "Disable"
+ },
+ "revenue": {
+ "title": "Revenue",
+ "last7Days": "Last 7 days"
+ },
+ "subscriptions": {
+ "title": "Subscriptions",
+ "subtitle": "Subscription statistics",
+ "active": "Active",
+ "trial": "Trial",
+ "paid": "Paid",
+ "expired": "Expired",
+ "newSubscriptions": "New Subscriptions",
+ "today": "Today",
+ "week": "Week",
+ "month": "Month",
+ "conversion": "Trial to Paid Conversion"
+ },
+ "servers": {
+ "title": "Servers",
+ "total": "Total Servers",
+ "available": "Available",
+ "withConnections": "With Connections",
+ "revenue": "Revenue"
+ },
+ "tariffs": {
+ "title": "Tariff Statistics",
+ "subtitle": "Subscription distribution by tariffs",
+ "tariffName": "Tariff",
+ "activeSubscriptions": "Active",
+ "trialSubscriptions": "Trial",
+ "purchasedToday": "Today",
+ "purchasedWeek": "Week",
+ "purchasedMonth": "Month",
+ "noTariffs": "No tariffs"
+ }
+ },
+ "profile": {
+ "title": "Profile",
+ "accountInfo": "Account Information",
+ "telegramId": "Telegram ID",
+ "username": "Username",
+ "name": "Name",
+ "registeredAt": "Registered",
+ "emailAuth": "Email Authentication",
+ "linkEmailDescription": "Link your email to log in without Telegram. After linking, you'll receive a verification email.",
+ "linkEmail": "Link Email",
+ "emailRequired": "Email is required",
+ "passwordMinLength": "Password must be at least 8 characters",
+ "passwordsMismatch": "Passwords do not match",
+ "passwordPlaceholder": "Enter password",
+ "confirmPasswordPlaceholder": "Confirm password",
+ "passwordHint": "Minimum 8 characters",
+ "emailSent": "Verification email sent! Please check your inbox.",
+ "verified": "Verified",
+ "notVerified": "Not verified",
+ "verificationRequired": "Please verify your email to use email login.",
+ "resendVerification": "Resend Verification Email",
+ "verificationResent": "Verification email resent!",
+ "canLoginWithEmail": "You can now log in using your email and password.",
+ "notifications": {
+ "title": "Notification Settings",
+ "subscriptionExpiry": "Subscription Expiry",
+ "subscriptionExpiryDesc": "Notify about expiring subscription",
+ "daysBeforeExpiry": "Days before expiry",
+ "trafficWarning": "Traffic Warning",
+ "trafficWarningDesc": "Notify when approaching traffic limit",
+ "atPercent": "At usage",
+ "balanceLow": "Low Balance",
+ "balanceLowDesc": "Notify about low balance",
+ "threshold": "Threshold",
+ "news": "News",
+ "newsDesc": "Receive news and service updates",
+ "promoOffers": "Promo Offers",
+ "promoOffersDesc": "Receive special offers and discounts",
+ "unavailable": "Notification settings unavailable"
+ }
+ },
+ "theme": {
+ "colors": "Theme Colors",
+ "reset": "Reset",
+ "accent": "Accent Color",
+ "accentDescription": "Main brand color for buttons, links and interactive elements",
+ "darkTheme": "Dark Theme",
+ "lightTheme": "Light Theme",
+ "background": "Background",
+ "surface": "Surface",
+ "text": "Text",
+ "textSecondary": "Secondary Text",
+ "statusColors": "Status Colors",
+ "success": "Success",
+ "warning": "Warning",
+ "error": "Error",
+ "preview": "Preview",
+ "previewButton": "Primary Button",
+ "previewSecondary": "Secondary Button",
+ "light": "Light Theme",
+ "dark": "Dark Theme"
+ },
+ "languages": {
+ "ru": "Русский",
+ "en": "English",
+ "zh": "中文",
+ "fa": "فارسی"
+ },
+ "contests": {
+ "title": "Contests",
+ "error": "Failed to load contests",
+ "noContests": "No contests available",
+ "days": "days",
+ "play": "Play",
+ "alreadyPlayed": "Already played",
+ "enterAnswer": "Enter your answer",
+ "submit": "Submit",
+ "imHere": "I'm here!"
+ },
+ "polls": {
+ "title": "Polls",
+ "error": "Failed to load polls",
+ "noPolls": "No polls available",
+ "questions": "questions",
+ "question": "Question",
+ "of": "of",
+ "start": "Start",
+ "continue": "Continue",
+ "completed": "Completed",
+ "reward": "$"
+ },
+ "info": {
+ "title": "Information",
+ "faq": "FAQ",
+ "rules": "Rules",
+ "privacy": "Privacy Policy",
+ "offer": "Public Offer",
+ "noFaq": "No FAQ available",
+ "noContent": "No content available",
+ "updatedAt": "Updated"
+ },
+ "onboarding": {
+ "skip": "Skip",
+ "finish": "Finish",
+ "steps": {
+ "welcome": {
+ "title": "Welcome!",
+ "description": "This is your personal cabinet. Here you can manage your subscription, top up balance and connect devices."
+ },
+ "connectDevices": {
+ "title": "Connect Devices",
+ "description": "Click this button to get instructions on how to connect VPN on your devices."
+ },
+ "balance": {
+ "title": "Your Balance",
+ "description": "Your current balance is displayed here. Click to top it up."
+ },
+ "subscription": {
+ "title": "Subscription Status",
+ "description": "Here you can see how many days are left until your subscription expires."
+ },
+ "quickActions": {
+ "title": "Quick Actions",
+ "description": "Use these buttons for quick access to main features: top up balance, extend subscription, and invite friends."
+ }
+ }
+ },
+ "promo": {
+ "activeDiscount": "Active discount",
+ "discountActive": "Discount active!",
+ "discountDescription": "Your personal discount is applied to subscription purchases",
+ "expiresIn": "Expires in",
+ "source": "Source",
+ "useNow": "Use discount now",
+ "discountApplied": "Discount applied",
+ "time": {
+ "days": "d",
+ "hours": "h",
+ "minutes": "m"
+ }
+ }
}
diff --git a/src/locales/fa.json b/src/locales/fa.json
index 78c9181..d0b5598 100644
--- a/src/locales/fa.json
+++ b/src/locales/fa.json
@@ -1,766 +1,780 @@
{
- "common": {
- "loading": "در حال بارگذاری...",
- "error": "خطا",
- "success": "موفق",
- "save": "ذخیره",
- "cancel": "لغو",
- "confirm": "تایید",
- "back": "بازگشت",
- "next": "بعدی",
- "close": "بستن",
- "search": "جستجو",
- "noData": "دادهای موجود نیست",
- "actions": "عملیات",
- "yes": "بله",
- "no": "خیر",
- "or": "یا",
- "and": "و",
- "edit": "ویرایش",
- "delete": "حذف",
- "currency": "تومان"
- },
- "nav": {
- "dashboard": "داشبورد",
- "subscription": "اشتراک",
- "balance": "موجودی",
- "referral": "معرفی",
- "support": "پشتیبانی",
- "profile": "پروفایل",
- "logout": "خروج",
- "contests": "مسابقات",
- "polls": "نظرسنجی",
- "info": "اطلاعات",
- "wheel": "چرخ شانس"
- },
- "auth": {
- "login": "ورود",
- "register": "ثبت نام",
- "logout": "خروج",
- "email": "ایمیل",
- "password": "رمز عبور",
- "confirmPassword": "تایید رمز عبور",
- "forgotPassword": "رمز عبور را فراموش کردید؟",
- "resetPassword": "بازنشانی رمز عبور",
- "loginWithTelegram": "ورود با تلگرام",
- "loginWithEmail": "ورود با ایمیل",
- "noAccount": "حساب کاربری ندارید؟",
- "hasAccount": "قبلاً حساب دارید؟",
- "registerHint": "برای ثبت نام با ایمیل، ابتدا با تلگرام وارد شوید، سپس ایمیل خود را در تنظیمات متصل کنید.",
- "telegramRequired": "نیاز به تایید تلگرام",
- "telegramNotConfigured": "ربات تلگرام پیکربندی نشده",
- "authenticating": "در حال تایید هویت...",
- "orOpenInApp": "یا ربات را در برنامه باز کنید",
- "loginFailed": "ورود ناموفق",
- "tryAgain": "تلاش مجدد",
- "welcomeBack": "خوش آمدید!",
- "loginTitle": "ورود به کابین",
- "loginSubtitle": "با تلگرام یا ایمیل وارد شوید"
- },
- "emailVerification": {
- "title": "تایید ایمیل",
- "verifying": "در حال تایید ایمیل...",
- "pleaseWait": "لطفاً صبر کنید تا ایمیل شما تایید شود.",
- "success": "ایمیل تایید شد!",
- "successMessage": "ایمیل شما با موفقیت تایید شد. اکنون میتوانید با ایمیل و رمز عبور وارد شوید.",
- "failed": "تایید ناموفق",
- "goToLogin": "رفتن به صفحه ورود"
- },
- "dashboard": {
- "title": "داشبورد",
- "welcome": "خوش آمدید، {{name}}!",
- "yourSubscription": "اشتراک شما",
- "quickActions": "دسترسی سریع",
- "viewSubscription": "مدیریت اشتراک",
- "topUpBalance": "شارژ موجودی",
- "inviteFriends": "دعوت دوستان",
- "getSupport": "دریافت پشتیبانی",
- "currentBalance": "موجودی فعلی",
- "activeUntil": "فعال تا",
- "noActiveSubscription": "اشتراک فعال ندارید",
- "devicesUsed": "دستگاهها: {{used}} از {{total}}",
- "trafficUsed": "ترافیک: {{used}} از {{total}} گیگ",
- "unlimitedTraffic": "ترافیک نامحدود"
- },
- "subscription": {
- "title": "اشتراک",
- "currentPlan": "پلن فعلی",
- "status": "وضعیت",
- "active": "فعال",
- "inactive": "غیرفعال",
- "trialStatus": "دوره آزمایشی",
- "expired": "منقضی شده",
- "expiresAt": "تاریخ انقضا",
- "daysLeft": "روز باقیمانده",
- "devices": "دستگاهها",
- "servers": "سرورها",
- "traffic": "ترافیک",
- "unlimited": "نامحدود",
- "used": "استفاده شده",
- "of": "از",
- "renew": "تمدید",
- "extend": "تمدید اشتراک",
- "buyTraffic": "خرید ترافیک",
- "buyDevices": "خرید دستگاه",
- "renewalOptions": "گزینههای تمدید",
- "days": "روز",
- "hours": "ساعت",
- "minutes": "دقیقه",
- "price": "قیمت",
- "noSubscription": "اشتراک فعال ندارید",
- "getSubscription": "خرید اشتراک",
- "connectionInfo": "اطلاعات اتصال",
- "copyLink": "کپی لینک",
- "copied": "کپی شد!",
- "showQR": "نمایش QR کد",
- "downloadConfig": "دانلود تنظیمات",
- "trafficUsed": "ترافیک استفاده شده",
- "timeLeft": "زمان باقیمانده",
- "getConfig": "اتصال دستگاهها",
- "autoRenewal": "تمدید خودکار",
- "daysBeforeExpiry": "روز قبل از انقضا",
- "selectPeriod": "انتخاب دوره",
- "selectTraffic": "انتخاب ترافیک",
- "selectServers": "انتخاب سرورها",
- "selectDevices": "انتخاب دستگاهها",
- "perDevice": "/ دستگاه",
- "summary": "خلاصه",
- "total": "جمع کل",
- "purchase": "خرید",
- "step": "مرحله {{current}} از {{total}}",
- "stepPeriod": "دوره",
- "stepTraffic": "ترافیک",
- "stepServers": "سرورها",
- "stepDevices": "دستگاهها",
- "stepConfirm": "تایید",
- "trial": {
- "title": "دوره آزمایشی رایگان",
- "description": "سرویس VPN ما را رایگان امتحان کنید!",
- "days": "روز",
- "devices": "دستگاه",
- "price": "هزینه فعالسازی",
- "activate": "فعالسازی دوره آزمایشی",
- "unavailable": "دوره آزمایشی در دسترس نیست"
- },
- "connection": {
- "title": "اتصال VPN",
- "selectDevice": "دستگاه خود را انتخاب کنید",
- "selectApp": "برنامه را انتخاب کنید",
- "installApp": "۱. نصب برنامه",
- "addSubscription": "۲. افزودن اشتراک",
- "connectVpn": "۳. اتصال VPN",
- "addToApp": "افزودن به {{appName}}",
- "connect": "اتصال",
- "noApps": "برنامهای برای این پلتفرم موجود نیست",
- "noSubscription": "برای اتصال نیاز به اشتراک فعال دارید",
- "featured": "پیشنهادی",
- "yourDevice": "دستگاه شما",
- "copyLink": "کپی لینک اشتراک",
- "copied": "لینک کپی شد!",
- "openLink": "باز کردن لینک"
- }
- },
- "balance": {
- "title": "موجودی",
- "currentBalance": "موجودی فعلی",
- "topUp": "شارژ",
- "topUpBalance": "شارژ موجودی",
- "paymentMethods": {
- "yookassa": {
- "name": "YooKassa",
- "description": "پرداخت از طریق YooKassa"
- },
- "cryptobot": {
- "name": "CryptoBot",
- "description": "پرداخت با ارز دیجیتال"
- },
- "telegram_stars": {
- "name": "Telegram Stars",
- "description": "پرداخت با Telegram Stars"
- }
- },
- "transactionHistory": "تاریخچه تراکنشها",
- "noTransactions": "تراکنشی موجود نیست",
- "date": "تاریخ",
- "type": "نوع",
- "description": "توضیحات",
- "amount": "مبلغ",
- "deposit": "واریز",
- "withdrawal": "برداشت",
- "subscriptionPayment": "پرداخت اشتراک",
- "referralReward": "پاداش معرفی",
- "minAmount": "حداقل",
- "maxAmount": "حداکثر",
- "notAvailable": "در دسترس نیست",
- "useBot": "لطفاً برای شارژ از ربات تلگرام استفاده کنید.",
- "page": "صفحه {{current}} از {{total}}",
- "invalidAmount": "مبلغ نامعتبر",
- "promocode": {
- "title": "کد تخفیف",
- "placeholder": "کد تخفیف را وارد کنید",
- "activate": "فعالسازی",
- "activating": "در حال فعالسازی...",
- "success": "کد تخفیف با موفقیت فعال شد!",
- "balanceAdded": "موجودی اضافه شده: {{amount}}",
- "errors": {
- "not_found": "کد تخفیف یافت نشد",
- "expired": "کد تخفیف منقضی شده",
- "used": "کد تخفیف قبلاً استفاده شده",
- "already_used_by_user": "شما قبلاً از این کد استفاده کردهاید",
- "user_not_found": "کاربر یافت نشد",
- "server_error": "خطای سرور"
- }
- },
- "minAmountError": "حداقل مبلغ: {{amount}}",
- "maxAmountError": "حداکثر مبلغ: {{amount}}"
- },
- "referral": {
- "title": "برنامه معرفی",
- "yourLink": "لینک معرفی شما",
- "copyLink": "کپی لینک",
- "copied": "کپی شد!",
- "shareButton": "اشتراکگذاری",
- "shareMessage": "از طریق لینک من به {{botName}} بپیوند و تا {{percent}}٪ پاداش بگیر!",
- "shareHint": "این لینک را با دوستان به اشتراک بگذارید. وقتی ثبت نام کنند و خرید کنند، {{percent}}% کمیسیون دریافت میکنید!",
- "stats": {
- "totalReferrals": "کل معرفیها",
- "activeReferrals": "فعال",
- "totalEarnings": "کل درآمد",
- "commissionRate": "نرخ کمیسیون"
- },
- "terms": {
- "title": "شرایط برنامه",
- "commission": "کمیسیون",
- "minTopup": "حداقل شارژ",
- "newUserBonus": "جایزه کاربر جدید",
- "inviterBonus": "جایزه معرف"
- },
- "yourReferrals": "معرفیهای شما",
- "noReferrals": "هنوز معرفی ندارید. لینک را به اشتراک بگذارید!",
- "user": "کاربر",
- "joined": "تاریخ عضویت",
- "hasPaid": "پرداخت کرده",
- "earningsHistory": "تاریخچه درآمد",
- "reason": "دلیل",
- "status": {
- "pending": "در انتظار",
- "paid": "پرداخت شده"
- },
- "reasons": {
- "referral_registration_pending": "ثبتنام کاربر معرفیشده",
- "referral_registration": "ثبتنام کاربر معرفیشده",
- "referral_first_payment": "اولین پرداخت کاربر معرفیشده",
- "referral_subscription_renewal": "تمدید اشتراک کاربر معرفیشده",
- "referral_bonus": "پاداش کاربر معرفیشده"
- }
- },
- "support": {
- "title": "پشتیبانی",
- "newTicket": "تیکت جدید",
- "yourTickets": "تیکتهای شما",
- "noTickets": "تیکتی موجود نیست",
- "createTicket": "ایجاد تیکت",
- "subject": "موضوع",
- "subjectPlaceholder": "مشکل را به طور خلاصه توضیح دهید",
- "message": "پیام",
- "messagePlaceholder": "مشکل خود را به طور کامل توضیح دهید...",
- "send": "ارسال",
- "sending": "در حال ارسال...",
- "creating": "در حال ایجاد...",
- "reply": "پاسخ",
- "replyPlaceholder": "پاسخ خود را بنویسید...",
- "sendReply": "ارسال پاسخ",
- "you": "شما",
- "supportTeam": "پشتیبانی",
- "selectTicket": "یک تیکت انتخاب کنید یا جدید ایجاد کنید",
- "created": "ایجاد شده",
- "repliesDisabled": "پاسخگویی به این تیکت غیرفعال است",
- "status": {
- "open": "باز",
- "answered": "پاسخ داده شده",
- "pending": "در انتظار",
- "closed": "بسته"
- },
- "attachImage": "پیوست تصویر",
- "invalidFileType": "نوع فایل نامعتبر. از JPEG، PNG، GIF یا WebP استفاده کنید.",
- "fileTooLarge": "فایل خیلی بزرگ است. حداکثر 10MB.",
- "uploadFailed": "آپلود تصویر ناموفق",
- "imageLoadFailed": "بارگذاری تصویر ناموفق"
- },
- "wheel": {
- "title": "چرخ شانس",
- "disabled": "چرخ شانس فعلاً در دسترس نیست",
- "spinsRemaining": "تعداد چرخش باقیمانده امروز",
- "choosePayment": "روش پرداخت را انتخاب کنید",
- "stars": "Stars",
- "telegramStars": "Telegram Stars",
- "days": "روز",
- "subscriptionDays": "روز اشتراک",
- "day": "روز",
- "spin": "بچرخان!",
- "spinning": "در حال چرخش...",
- "history": "تاریخچه",
- "recentSpins": "چرخشهای اخیر",
- "congratulations": "تبریک!",
- "noLuck": "شانس نیاوردید!",
- "oops": "اوه!",
- "yourPromoCode": "کد تخفیف شما:",
- "close": "بستن",
- "errors": {
- "networkError": "خطای شبکه رخ داد",
- "loadFailed": "بارگذاری تنظیمات چرخ ناموفق",
- "dailyLimitReached": "به محدودیت روزانه رسیدید",
- "cannotSpin": "فعلاً امکان چرخش نیست",
- "insufficientBalance": "موجودی کافی نیست",
- "topUpRequired": "برای پرداخت شارژ کنید"
- },
- "payWithStars": "پرداخت {stars} Stars",
- "processingPayment": "در حال پردازش...",
- "starsPaymentSuccess": "پرداخت موفق! نتیجه به تلگرام ارسال شد.",
- "starsPaymentFailed": "پرداخت ناموفق. دوباره تلاش کنید.",
- "noHistory": "هنوز تاریخچهای نیست",
- "banner": {
- "title": "شانس خود را امتحان کنید!",
- "description": "چرخ را بچرخانید و جایزه ببرید: روز اشتراک، موجودی، ترافیک و بیشتر!",
- "button": "برو به چرخ"
- }
- },
- "admin": {
- "nav": {
- "title": "مدیریت",
- "dashboard": "آمار",
- "tickets": "تیکتها",
- "settings": "تنظیمات",
- "apps": "برنامهها",
- "wheel": "چرخ",
- "tariffs": "تعرفهها",
- "servers": "سرورها",
- "broadcasts": "پیامرسانی"
- },
- "panel": {
- "title": "پنل مدیریت",
- "subtitle": "مدیریت سیستم",
- "dashboardDesc": "آمار و مانیتورینگ سیستم",
- "ticketsDesc": "مدیریت تیکتهای کاربران",
- "settingsDesc": "تنظیمات و پارامترهای سیستم",
- "appsDesc": "مدیریت برنامههای اتصال",
- "wheelDesc": "تنظیم چرخ شانس و جوایز",
- "tariffsDesc": "مدیریت طرحهای تعرفه",
- "serversDesc": "تنظیم سرورهای VPN",
- "broadcastsDesc": "ارسال پیام گروهی به کاربران"
- },
- "wheel": {
- "title": "تنظیمات چرخ شانس",
- "enabled": "فعال",
- "disabled": "غیرفعال",
- "tabs": {
- "settings": "تنظیمات",
- "prizes": "جوایز",
- "statistics": "آمار"
- },
- "settings": {
- "enableWheel": "فعالسازی چرخ",
- "allowSpins": "اجازه چرخش به کاربران",
- "costInStars": "هزینه Stars",
- "costInDays": "هزینه روز",
- "rtpPercent": "درصد RTP",
- "dailyLimit": "محدودیت روزانه (0 = نامحدود)",
- "minSubDays": "حداقل روز اشتراک برای پرداخت روزانه",
- "promoPrefix": "پیشوند کد تخفیف"
- },
- "prizes": {
- "addPrize": "افزودن جایزه",
- "editPrize": "ویرایش جایزه",
- "noPrizes": "جایزهای تنظیم نشده. برای فعالسازی چرخ جایزه اضافه کنید.",
- "deletePrize": "این جایزه حذف شود؟",
- "types": {
- "subscription_days": "روز اشتراک",
- "balance_bonus": "جایزه موجودی",
- "traffic_gb": "ترافیک GB",
- "promocode": "کد تخفیف",
- "nothing": "هیچی"
- },
- "fields": {
- "type": "نوع",
- "displayName": "نام نمایشی",
- "value": "مقدار",
- "valueKopeks": "ارزش (کوپک، برای RTP)",
- "emoji": "ایموجی",
- "color": "رنگ",
- "active": "فعال",
- "worth": "ارزش"
- },
- "promo": {
- "title": "تنظیمات کد تخفیف",
- "balanceBonus": "جایزه موجودی (کوپک)",
- "subscriptionDays": "روز اشتراک"
- }
- },
- "statistics": {
- "totalSpins": "کل چرخشها",
- "revenue": "درآمد",
- "payouts": "پرداختها",
- "actualRtp": "RTP واقعی",
- "targetRtp": "هدف",
- "prizeDistribution": "توزیع جوایز",
- "times": "بار",
- "topWins": "برترین برندهها"
- }
- },
- "broadcasts": {
- "title": "پیامرسانی",
- "subtitle": "ارسال پیام گروهی به کاربران",
- "create": "ایجاد پیام",
- "empty": "هنوز پیامی ارسال نشده",
- "selectFilter": "انتخاب مخاطبین",
- "selectFilterPlaceholder": "انتخاب فیلتر...",
- "recipients": "نفر",
- "messageText": "متن پیام",
- "messageTextPlaceholder": "متن پیام را وارد کنید...",
- "media": "فایل رسانه",
- "addMedia": "افزودن رسانه",
- "uploading": "در حال آپلود...",
- "buttons": "دکمهها",
- "willBeSent": "ارسال میشود به",
- "users": "کاربر",
- "send": "ارسال",
- "stop": "توقف",
- "progress": "پیشرفت",
- "total": "کل",
- "sent": "ارسال شده",
- "failed": "ناموفق",
- "filter": "فیلتر",
- "message": "پیام",
- "unknownAdmin": "مدیر ناشناس"
- },
- "settings": {
- "title": "تنظیمات سیستم",
- "allCategories": "همه دستهها",
- "noSettings": "تنظیماتی یافت نشد",
- "modified": "تغییر یافته",
- "readOnly": "فقط خواندنی",
- "reset": "بازنشانی",
- "categoriesCount": "دسته",
- "settingsCount": "تنظیم",
- "expandAll": "باز کردن همه",
- "collapseAll": "بستن همه",
- "searchPlaceholder": "جستجوی تنظیمات...",
- "searchCategoriesPlaceholder": "جستجوی دستهها...",
- "noSearchResults": "چیزی یافت نشد",
- "example": "مثال"
- },
- "apps": {
- "title": "مدیریت برنامهها",
- "addApp": "افزودن برنامه",
- "addFirstApp": "افزودن اولین برنامه",
- "noApps": "برنامهای برای این پلتفرم نیست",
- "createApp": "ایجاد برنامه",
- "editApp": "ویرایش برنامه",
- "confirmDelete": "آیا مطمئن هستید که میخواهید این برنامه را حذف کنید؟",
- "copyTo": "کپی به...",
- "appId": "شناسه برنامه",
- "appName": "نام",
- "urlScheme": "URL Scheme",
- "featured": "ویژه",
- "base64Encoding": "کدگذاری Base64",
- "buttons": "دکمهها",
- "button": "دکمه",
- "addButton": "افزودن دکمه",
- "buttonText": "متن دکمه",
- "installDescription": "توضیحات نصب",
- "subscriptionDescription": "توضیحات افزودن اشتراک",
- "connectDescription": "توضیحات اتصال",
- "beforeSubscription": "قبل از افزودن اشتراک",
- "afterSubscription": "بعد از افزودن اشتراک",
- "stepTitle": "عنوان",
- "stepDescription": "توضیحات",
- "tabs": {
- "basic": "اصلی",
- "installation": "نصب",
- "subscription": "اشتراک",
- "connect": "اتصال",
- "additional": "اضافی"
- }
- },
- "tickets": {
- "title": "مدیریت تیکتها",
- "total": "کل",
- "list": "تیکتها",
- "noTickets": "تیکتی نیست",
- "selectTicket": "یک تیکت از لیست انتخاب کنید",
- "allStatuses": "همه وضعیتها",
- "statusOpen": "باز",
- "statusPending": "در انتظار",
- "statusAnswered": "پاسخ داده شده",
- "statusClosed": "بسته",
- "from": "از",
- "created": "ایجاد شده",
- "user": "کاربر",
- "you": "شما",
- "userLabel": "کاربر",
- "adminLabel": "مدیر",
- "replyPlaceholder": "پاسخ خود را بنویسید...",
- "sendReply": "ارسال پاسخ",
- "settings": "تنظیمات",
- "supportMode": "حالت پشتیبانی",
- "supportModeDesc": "انتخاب کنید کاربران چگونه میتوانند با پشتیبانی تماس بگیرند",
- "modeBoth": "تیکت و تماس",
- "modeTickets": "فقط تیکت",
- "modeContact": "فقط تماس",
- "slaSettings": "تنظیمات SLA",
- "slaEnabled": "فعال کردن SLA (نظارت بر زمان پاسخ)",
- "slaEnabledDesc": "اعلانهای خودکار برای تیکتهای معوقه",
- "slaMinutes": "زمان پاسخ (دقیقه)",
- "slaMinutesDesc": "حداکثر زمان برای پاسخ به تیکت (1-1440 دقیقه)",
- "checkInterval": "فاصله بررسی (ثانیه)",
- "checkIntervalDesc": "چند وقت یکبار تیکتهای معوقه را بررسی کنیم (30-600 ثانیه)",
- "reminderCooldown": "فاصله یادآوری (دقیقه)",
- "reminderCooldownDesc": "حداقل زمان بین یادآوریها (1-120 دقیقه)",
- "settingsUpdateError": "خطا در ذخیره تنظیمات"
- },
- "tariffs": {
- "title": "مدیریت تعرفهها",
- "subtitle": "پیکربندی پلنهای تعرفه",
- "create": "ایجاد تعرفه",
- "edit": "ویرایش تعرفه",
- "noTariffs": "تعرفهای نیست",
- "name": "نام",
- "namePlaceholder": "نام تعرفه را وارد کنید",
- "description": "توضیحات",
- "descriptionPlaceholder": "توضیحات تعرفه را وارد کنید",
- "trafficLimit": "محدودیت ترافیک",
- "trafficHint": "0 = ترافیک نامحدود",
- "deviceLimit": "محدودیت دستگاه",
- "tierLevel": "سطح تعرفه",
- "tierHint": "1-10، روی اولویت ارتقا تأثیر میگذارد",
- "unlimited": "نامحدود",
- "devices": "دستگاه",
- "servers": "سرور",
- "subscriptions": "اشتراک",
- "trial": "آزمایشی",
- "inactive": "غیرفعال",
- "activate": "فعالسازی",
- "deactivate": "غیرفعالسازی",
- "toggleTrial": "تغییر آزمایشی",
- "delete": "حذف",
- "confirmDelete": "تعرفه حذف شود؟",
- "confirmDeleteText": "این عمل قابل بازگشت نیست. تعرفه برای همیشه حذف میشود.",
- "days": "روز",
- "tabs": {
- "basic": "اصلی",
- "prices": "قیمتها",
- "servers": "سرورها"
- },
- "pricesHint": "قیمت هر دوره را تنظیم کنید",
- "serversHint": "سرورهای موجود برای این تعرفه را انتخاب کنید",
- "noServers": "سرور موجود نیست"
- },
- "servers": {
- "title": "مدیریت سرورها",
- "subtitle": "پیکربندی سرورهای VPN",
- "sync": "همگامسازی",
- "syncing": "در حال همگامسازی...",
- "syncNow": "همگامسازی الان",
- "noServers": "سروری نیست. با RemnaWave همگامسازی کنید.",
- "edit": "ویرایش سرور",
- "originalName": "نام اصلی",
- "displayName": "نام نمایشی",
- "displayNamePlaceholder": "نام نمایشی را وارد کنید",
- "description": "توضیحات",
- "descriptionPlaceholder": "توضیحات سرور را وارد کنید",
- "countryCode": "کد کشور",
- "price": "قیمت",
- "priceHint": "هزینه اضافی سرور",
- "maxUsers": "حداکثر کاربران",
- "sortOrder": "ترتیب",
- "unlimited": "نامحدود",
- "stats": "آمار",
- "currentUsers": "کاربران فعلی",
- "activeSubscriptions": "اشتراکهای فعال",
- "usedByTariffs": "استفاده شده توسط تعرفهها",
- "trial": "آزمایشی",
- "unavailable": "در دسترس نیست",
- "full": "پر",
- "enable": "فعال",
- "disable": "غیرفعال",
- "toggleTrial": "تغییر آزمایشی"
- }
- },
- "adminDashboard": {
- "title": "پنل آمار",
- "subtitle": "نمای کلی سیستم در لحظه",
- "refresh": "بروزرسانی",
- "loadError": "بارگیری آمار ناموفق بود",
- "stats": {
- "usersOnline": "کاربران آنلاین",
- "activeSubscriptions": "اشتراکهای فعال",
- "incomeToday": "درآمد امروز",
- "incomeMonth": "درآمد ماهانه",
- "incomeTotal": "کل درآمد",
- "subscriptionIncome": "درآمد اشتراک",
- "total": "کل"
- },
- "nodes": {
- "title": "نودها",
- "online": "آنلاین",
- "offline": "آفلاین",
- "disabled": "غیرفعال",
- "noNodes": "نود موجود نیست",
- "usersOnline": "آنلاین",
- "traffic": "ترافیک",
- "enable": "فعال",
- "disable": "غیرفعال"
- },
- "revenue": {
- "title": "درآمد",
- "last7Days": "۷ روز اخیر"
- },
- "subscriptions": {
- "title": "اشتراکها",
- "subtitle": "آمار اشتراک",
- "active": "فعال",
- "trial": "آزمایشی",
- "paid": "پرداخت شده",
- "expired": "منقضی شده",
- "newSubscriptions": "اشتراکهای جدید",
- "today": "امروز",
- "week": "هفته",
- "month": "ماه",
- "conversion": "تبدیل آزمایشی به پولی"
- },
- "servers": {
- "title": "سرورها",
- "total": "کل سرورها",
- "available": "در دسترس",
- "withConnections": "با اتصال",
- "revenue": "درآمد"
- }
- },
- "profile": {
- "title": "پروفایل",
- "accountInfo": "اطلاعات حساب",
- "telegramId": "شناسه تلگرام",
- "username": "نام کاربری",
- "name": "نام",
- "registeredAt": "تاریخ ثبت نام",
- "emailAuth": "احراز هویت ایمیل",
- "linkEmailDescription": "ایمیل خود را متصل کنید تا بدون تلگرام وارد شوید. پس از اتصال، ایمیل تایید دریافت خواهید کرد.",
- "linkEmail": "اتصال ایمیل",
- "emailRequired": "ایمیل الزامی است",
- "passwordMinLength": "رمز عبور باید حداقل 8 کاراکتر باشد",
- "passwordsMismatch": "رمزهای عبور مطابقت ندارند",
- "passwordPlaceholder": "رمز عبور را وارد کنید",
- "confirmPasswordPlaceholder": "رمز عبور را تایید کنید",
- "passwordHint": "حداقل 8 کاراکتر",
- "emailSent": "ایمیل تایید ارسال شد! صندوق خود را بررسی کنید.",
- "verified": "تایید شده",
- "notVerified": "تایید نشده",
- "verificationRequired": "لطفاً ایمیل خود را تایید کنید تا از ورود با ایمیل استفاده کنید.",
- "resendVerification": "ارسال مجدد ایمیل تایید",
- "verificationResent": "ایمیل تایید مجدداً ارسال شد!",
- "canLoginWithEmail": "اکنون میتوانید با ایمیل و رمز عبور وارد شوید.",
- "notifications": {
- "title": "تنظیمات اعلان",
- "subscriptionExpiry": "انقضای اشتراک",
- "subscriptionExpiryDesc": "اعلان قبل از انقضای اشتراک",
- "daysBeforeExpiry": "روز قبل از انقضا",
- "trafficWarning": "هشدار ترافیک",
- "trafficWarningDesc": "اعلان نزدیک شدن به محدودیت ترافیک",
- "atPercent": "در درصد",
- "balanceLow": "موجودی کم",
- "balanceLowDesc": "اعلان موجودی کم",
- "threshold": "آستانه",
- "news": "اخبار",
- "newsDesc": "دریافت اخبار و بهروزرسانیها",
- "promoOffers": "پیشنهادات تبلیغاتی",
- "promoOffersDesc": "دریافت پیشنهادات ویژه و تخفیفها",
- "unavailable": "تنظیمات اعلان در دسترس نیست"
- }
- },
- "theme": {
- "colors": "رنگهای تم",
- "reset": "بازنشانی",
- "accent": "رنگ تأکیدی",
- "accentDescription": "رنگ اصلی برند برای دکمهها، لینکها و عناصر تعاملی",
- "darkTheme": "تم تیره",
- "lightTheme": "تم روشن",
- "background": "پسزمینه",
- "surface": "سطح",
- "text": "متن",
- "textSecondary": "متن ثانویه",
- "statusColors": "رنگهای وضعیت",
- "success": "موفقیت",
- "warning": "هشدار",
- "error": "خطا",
- "preview": "پیشنمایش",
- "previewButton": "دکمه اصلی",
- "previewSecondary": "دکمه ثانویه",
- "light": "تم روشن",
- "dark": "تم تیره"
- },
- "languages": {
- "ru": "Русский",
- "en": "English",
- "zh": "中文",
- "fa": "فارسی"
- },
- "contests": {
- "title": "مسابقات",
- "error": "بارگذاری مسابقات ناموفق",
- "noContests": "مسابقهای موجود نیست",
- "days": "روز",
- "play": "شرکت",
- "alreadyPlayed": "قبلاً شرکت کردید",
- "enterAnswer": "پاسخ خود را وارد کنید",
- "submit": "ارسال",
- "imHere": "من اینجام!"
- },
- "polls": {
- "title": "نظرسنجیها",
- "error": "بارگذاری نظرسنجیها ناموفق",
- "noPolls": "نظرسنجی موجود نیست",
- "questions": "سوال",
- "question": "سوال",
- "of": "از",
- "start": "شروع",
- "continue": "ادامه",
- "completed": "تکمیل شده",
- "reward": "تومان"
- },
- "info": {
- "title": "اطلاعات",
- "faq": "سوالات متداول",
- "rules": "قوانین",
- "privacy": "حریم خصوصی",
- "offer": "شرایط خدمات",
- "noFaq": "سوال متداولی موجود نیست",
- "noContent": "محتوایی موجود نیست",
- "updatedAt": "بهروزرسانی"
- },
- "onboarding": {
- "skip": "رد کردن",
- "finish": "پایان",
- "steps": {
- "welcome": {
- "title": "خوش آمدید!",
- "description": "این کابین شخصی شماست. اینجا میتوانید اشتراک خود را مدیریت کنید، موجودی شارژ کنید و دستگاهها را متصل کنید."
- },
- "connectDevices": {
- "title": "اتصال دستگاهها",
- "description": "این دکمه را بزنید تا راهنمای اتصال VPN روی دستگاههایتان را دریافت کنید."
- },
- "balance": {
- "title": "موجودی شما",
- "description": "موجودی فعلی شما اینجا نمایش داده میشود. برای شارژ کلیک کنید."
- },
- "subscription": {
- "title": "وضعیت اشتراک",
- "description": "اینجا میتوانید روزهای باقیمانده تا انقضای اشتراک را ببینید."
- },
- "quickActions": {
- "title": "دسترسی سریع",
- "description": "از این دکمهها برای دسترسی سریع به امکانات اصلی استفاده کنید: شارژ موجودی، تمدید اشتراک و دعوت دوستان."
- }
- }
- }
-}
+ "common": {
+ "loading": "در حال بارگذاری...",
+ "error": "خطا",
+ "success": "موفق",
+ "save": "ذخیره",
+ "cancel": "لغو",
+ "confirm": "تایید",
+ "back": "بازگشت",
+ "next": "بعدی",
+ "close": "بستن",
+ "search": "جستجو",
+ "noData": "دادهای موجود نیست",
+ "actions": "عملیات",
+ "yes": "بله",
+ "no": "خیر",
+ "or": "یا",
+ "and": "و",
+ "edit": "ویرایش",
+ "delete": "حذف",
+ "currency": "تومان"
+ },
+ "nav": {
+ "dashboard": "داشبورد",
+ "subscription": "اشتراک",
+ "balance": "موجودی",
+ "referral": "معرفی",
+ "support": "پشتیبانی",
+ "profile": "پروفایل",
+ "logout": "خروج",
+ "contests": "مسابقات",
+ "polls": "نظرسنجی",
+ "info": "اطلاعات",
+ "wheel": "چرخ شانس"
+ },
+ "auth": {
+ "login": "ورود",
+ "register": "ثبت نام",
+ "logout": "خروج",
+ "email": "ایمیل",
+ "password": "رمز عبور",
+ "confirmPassword": "تایید رمز عبور",
+ "forgotPassword": "رمز عبور را فراموش کردید؟",
+ "resetPassword": "بازنشانی رمز عبور",
+ "loginWithTelegram": "ورود با تلگرام",
+ "loginWithEmail": "ورود با ایمیل",
+ "noAccount": "حساب کاربری ندارید؟",
+ "hasAccount": "قبلاً حساب دارید؟",
+ "registerHint": "برای ثبت نام با ایمیل، ابتدا با تلگرام وارد شوید، سپس ایمیل خود را در تنظیمات متصل کنید.",
+ "telegramRequired": "نیاز به تایید تلگرام",
+ "telegramNotConfigured": "ربات تلگرام پیکربندی نشده",
+ "authenticating": "در حال تایید هویت...",
+ "orOpenInApp": "یا ربات را در برنامه باز کنید",
+ "loginFailed": "ورود ناموفق",
+ "tryAgain": "تلاش مجدد",
+ "welcomeBack": "خوش آمدید!",
+ "loginTitle": "ورود به کابین",
+ "loginSubtitle": "با تلگرام یا ایمیل وارد شوید"
+ },
+ "emailVerification": {
+ "title": "تایید ایمیل",
+ "verifying": "در حال تایید ایمیل...",
+ "pleaseWait": "لطفاً صبر کنید تا ایمیل شما تایید شود.",
+ "success": "ایمیل تایید شد!",
+ "successMessage": "ایمیل شما با موفقیت تایید شد. اکنون میتوانید با ایمیل و رمز عبور وارد شوید.",
+ "failed": "تایید ناموفق",
+ "goToLogin": "رفتن به صفحه ورود"
+ },
+ "dashboard": {
+ "title": "داشبورد",
+ "welcome": "خوش آمدید، {{name}}!",
+ "yourSubscription": "اشتراک شما",
+ "quickActions": "دسترسی سریع",
+ "viewSubscription": "مدیریت اشتراک",
+ "topUpBalance": "شارژ موجودی",
+ "inviteFriends": "دعوت دوستان",
+ "getSupport": "دریافت پشتیبانی",
+ "currentBalance": "موجودی فعلی",
+ "activeUntil": "فعال تا",
+ "noActiveSubscription": "اشتراک فعال ندارید",
+ "devicesUsed": "دستگاهها: {{used}} از {{total}}",
+ "trafficUsed": "ترافیک: {{used}} از {{total}} گیگ",
+ "unlimitedTraffic": "ترافیک نامحدود"
+ },
+ "subscription": {
+ "title": "اشتراک",
+ "currentPlan": "پلن فعلی",
+ "status": "وضعیت",
+ "active": "فعال",
+ "inactive": "غیرفعال",
+ "trialStatus": "دوره آزمایشی",
+ "expired": "منقضی شده",
+ "expiresAt": "تاریخ انقضا",
+ "daysLeft": "روز باقیمانده",
+ "devices": "دستگاهها",
+ "servers": "سرورها",
+ "traffic": "ترافیک",
+ "unlimited": "نامحدود",
+ "used": "استفاده شده",
+ "of": "از",
+ "renew": "تمدید",
+ "extend": "تمدید اشتراک",
+ "buyTraffic": "خرید ترافیک",
+ "buyDevices": "خرید دستگاه",
+ "renewalOptions": "گزینههای تمدید",
+ "days": "روز",
+ "hours": "ساعت",
+ "minutes": "دقیقه",
+ "price": "قیمت",
+ "noSubscription": "اشتراک فعال ندارید",
+ "getSubscription": "خرید اشتراک",
+ "connectionInfo": "اطلاعات اتصال",
+ "copyLink": "کپی لینک",
+ "copied": "کپی شد!",
+ "showQR": "نمایش QR کد",
+ "downloadConfig": "دانلود تنظیمات",
+ "trafficUsed": "ترافیک استفاده شده",
+ "timeLeft": "زمان باقیمانده",
+ "getConfig": "اتصال دستگاهها",
+ "autoRenewal": "تمدید خودکار",
+ "daysBeforeExpiry": "روز قبل از انقضا",
+ "selectPeriod": "انتخاب دوره",
+ "selectTraffic": "انتخاب ترافیک",
+ "selectServers": "انتخاب سرورها",
+ "selectDevices": "انتخاب دستگاهها",
+ "perDevice": "/ دستگاه",
+ "summary": "خلاصه",
+ "total": "جمع کل",
+ "purchase": "خرید",
+ "step": "مرحله {{current}} از {{total}}",
+ "stepPeriod": "دوره",
+ "stepTraffic": "ترافیک",
+ "stepServers": "سرورها",
+ "stepDevices": "دستگاهها",
+ "stepConfirm": "تایید",
+ "trial": {
+ "title": "دوره آزمایشی رایگان",
+ "description": "سرویس VPN ما را رایگان امتحان کنید!",
+ "days": "روز",
+ "devices": "دستگاه",
+ "price": "هزینه فعالسازی",
+ "activate": "فعالسازی دوره آزمایشی",
+ "unavailable": "دوره آزمایشی در دسترس نیست"
+ },
+ "connection": {
+ "title": "اتصال VPN",
+ "selectDevice": "دستگاه خود را انتخاب کنید",
+ "selectApp": "برنامه را انتخاب کنید",
+ "installApp": "۱. نصب برنامه",
+ "addSubscription": "۲. افزودن اشتراک",
+ "connectVpn": "۳. اتصال VPN",
+ "addToApp": "افزودن به {{appName}}",
+ "connect": "اتصال",
+ "noApps": "برنامهای برای این پلتفرم موجود نیست",
+ "noSubscription": "برای اتصال نیاز به اشتراک فعال دارید",
+ "featured": "پیشنهادی",
+ "yourDevice": "دستگاه شما",
+ "copyLink": "کپی لینک اشتراک",
+ "copied": "لینک کپی شد!",
+ "openLink": "باز کردن لینک"
+ }
+ },
+ "balance": {
+ "title": "موجودی",
+ "currentBalance": "موجودی فعلی",
+ "topUp": "شارژ",
+ "topUpBalance": "شارژ موجودی",
+ "paymentMethods": {
+ "yookassa": {
+ "name": "YooKassa",
+ "description": "پرداخت از طریق YooKassa"
+ },
+ "cryptobot": {
+ "name": "CryptoBot",
+ "description": "پرداخت با ارز دیجیتال"
+ },
+ "telegram_stars": {
+ "name": "Telegram Stars",
+ "description": "پرداخت با Telegram Stars"
+ }
+ },
+ "transactionHistory": "تاریخچه تراکنشها",
+ "noTransactions": "تراکنشی موجود نیست",
+ "date": "تاریخ",
+ "type": "نوع",
+ "description": "توضیحات",
+ "amount": "مبلغ",
+ "deposit": "واریز",
+ "withdrawal": "برداشت",
+ "subscriptionPayment": "پرداخت اشتراک",
+ "referralReward": "پاداش معرفی",
+ "minAmount": "حداقل",
+ "maxAmount": "حداکثر",
+ "notAvailable": "در دسترس نیست",
+ "useBot": "لطفاً برای شارژ از ربات تلگرام استفاده کنید.",
+ "page": "صفحه {{current}} از {{total}}",
+ "invalidAmount": "مبلغ نامعتبر",
+ "promocode": {
+ "title": "کد تخفیف",
+ "placeholder": "کد تخفیف را وارد کنید",
+ "activate": "فعالسازی",
+ "activating": "در حال فعالسازی...",
+ "success": "کد تخفیف با موفقیت فعال شد!",
+ "balanceAdded": "موجودی اضافه شده: {{amount}}",
+ "errors": {
+ "not_found": "کد تخفیف یافت نشد",
+ "expired": "کد تخفیف منقضی شده",
+ "used": "کد تخفیف قبلاً استفاده شده",
+ "already_used_by_user": "شما قبلاً از این کد استفاده کردهاید",
+ "user_not_found": "کاربر یافت نشد",
+ "server_error": "خطای سرور"
+ }
+ },
+ "minAmountError": "حداقل مبلغ: {{amount}}",
+ "maxAmountError": "حداکثر مبلغ: {{amount}}"
+ },
+ "referral": {
+ "title": "برنامه معرفی",
+ "yourLink": "لینک معرفی شما",
+ "copyLink": "کپی لینک",
+ "copied": "کپی شد!",
+ "shareButton": "اشتراکگذاری",
+ "shareMessage": "از طریق لینک من به Cabinet بپیوند و تا {{percent}}٪ پاداش بگیر!",
+ "shareHint": "این لینک را با دوستان به اشتراک بگذارید. وقتی ثبت نام کنند و خرید کنند، {{percent}}% کمیسیون دریافت میکنید!",
+ "stats": {
+ "totalReferrals": "کل معرفیها",
+ "activeReferrals": "فعال",
+ "totalEarnings": "کل درآمد",
+ "commissionRate": "نرخ کمیسیون"
+ },
+ "terms": {
+ "title": "شرایط برنامه",
+ "commission": "کمیسیون",
+ "minTopup": "حداقل شارژ",
+ "newUserBonus": "جایزه کاربر جدید",
+ "inviterBonus": "جایزه معرف"
+ },
+ "yourReferrals": "معرفیهای شما",
+ "noReferrals": "هنوز معرفی ندارید. لینک را به اشتراک بگذارید!",
+ "user": "کاربر",
+ "joined": "تاریخ عضویت",
+ "hasPaid": "پرداخت کرده",
+ "earningsHistory": "تاریخچه درآمد",
+ "reason": "دلیل",
+ "status": {
+ "pending": "در انتظار",
+ "paid": "پرداخت شده"
+ },
+ "reasons": {
+ "referral_registration_pending": "ثبتنام کاربر معرفیشده",
+ "referral_registration": "ثبتنام کاربر معرفیشده",
+ "referral_first_payment": "اولین پرداخت کاربر معرفیشده",
+ "referral_subscription_renewal": "تمدید اشتراک کاربر معرفیشده",
+ "referral_bonus": "پاداش کاربر معرفیشده"
+ }
+ },
+ "support": {
+ "title": "پشتیبانی",
+ "newTicket": "تیکت جدید",
+ "yourTickets": "تیکتهای شما",
+ "noTickets": "تیکتی موجود نیست",
+ "createTicket": "ایجاد تیکت",
+ "subject": "موضوع",
+ "subjectPlaceholder": "مشکل را به طور خلاصه توضیح دهید",
+ "message": "پیام",
+ "messagePlaceholder": "مشکل خود را به طور کامل توضیح دهید...",
+ "send": "ارسال",
+ "sending": "در حال ارسال...",
+ "creating": "در حال ایجاد...",
+ "reply": "پاسخ",
+ "replyPlaceholder": "پاسخ خود را بنویسید...",
+ "sendReply": "ارسال پاسخ",
+ "you": "شما",
+ "supportTeam": "پشتیبانی",
+ "selectTicket": "یک تیکت انتخاب کنید یا جدید ایجاد کنید",
+ "created": "ایجاد شده",
+ "repliesDisabled": "پاسخگویی به این تیکت غیرفعال است",
+ "status": {
+ "open": "باز",
+ "answered": "پاسخ داده شده",
+ "pending": "در انتظار",
+ "closed": "بسته"
+ },
+ "attachImage": "پیوست تصویر",
+ "invalidFileType": "نوع فایل نامعتبر. از JPEG، PNG، GIF یا WebP استفاده کنید.",
+ "fileTooLarge": "فایل خیلی بزرگ است. حداکثر 10MB.",
+ "uploadFailed": "آپلود تصویر ناموفق",
+ "imageLoadFailed": "بارگذاری تصویر ناموفق"
+ },
+ "wheel": {
+ "title": "چرخ شانس",
+ "disabled": "چرخ شانس فعلاً در دسترس نیست",
+ "spinsRemaining": "تعداد چرخش باقیمانده امروز",
+ "choosePayment": "روش پرداخت را انتخاب کنید",
+ "stars": "Stars",
+ "telegramStars": "Telegram Stars",
+ "days": "روز",
+ "subscriptionDays": "روز اشتراک",
+ "day": "روز",
+ "spin": "بچرخان!",
+ "spinning": "در حال چرخش...",
+ "history": "تاریخچه",
+ "recentSpins": "چرخشهای اخیر",
+ "congratulations": "تبریک!",
+ "noLuck": "شانس نیاوردید!",
+ "oops": "اوه!",
+ "yourPromoCode": "کد تخفیف شما:",
+ "close": "بستن",
+ "errors": {
+ "networkError": "خطای شبکه رخ داد",
+ "loadFailed": "بارگذاری تنظیمات چرخ ناموفق",
+ "dailyLimitReached": "به محدودیت روزانه رسیدید",
+ "cannotSpin": "فعلاً امکان چرخش نیست",
+ "insufficientBalance": "موجودی کافی نیست",
+ "topUpRequired": "برای پرداخت شارژ کنید"
+ },
+ "payWithStars": "پرداخت {stars} Stars",
+ "processingPayment": "در حال پردازش...",
+ "starsPaymentSuccess": "پرداخت موفق! نتیجه به تلگرام ارسال شد.",
+ "starsPaymentFailed": "پرداخت ناموفق. دوباره تلاش کنید.",
+ "noHistory": "هنوز تاریخچهای نیست",
+ "banner": {
+ "title": "شانس خود را امتحان کنید!",
+ "description": "چرخ را بچرخانید و جایزه ببرید: روز اشتراک، موجودی، ترافیک و بیشتر!",
+ "button": "برو به چرخ"
+ }
+ },
+ "admin": {
+ "nav": {
+ "title": "مدیریت",
+ "dashboard": "آمار",
+ "tickets": "تیکتها",
+ "settings": "تنظیمات",
+ "apps": "برنامهها",
+ "wheel": "چرخ",
+ "tariffs": "تعرفهها",
+ "servers": "سرورها",
+ "broadcasts": "پیامرسانی"
+ },
+ "panel": {
+ "title": "پنل مدیریت",
+ "subtitle": "مدیریت سیستم",
+ "dashboardDesc": "آمار و مانیتورینگ سیستم",
+ "ticketsDesc": "مدیریت تیکتهای کاربران",
+ "settingsDesc": "تنظیمات و پارامترهای سیستم",
+ "appsDesc": "مدیریت برنامههای اتصال",
+ "wheelDesc": "تنظیم چرخ شانس و جوایز",
+ "tariffsDesc": "مدیریت طرحهای تعرفه",
+ "serversDesc": "تنظیم سرورهای VPN",
+ "broadcastsDesc": "ارسال پیام گروهی به کاربران"
+ },
+ "wheel": {
+ "title": "تنظیمات چرخ شانس",
+ "enabled": "فعال",
+ "disabled": "غیرفعال",
+ "tabs": {
+ "settings": "تنظیمات",
+ "prizes": "جوایز",
+ "statistics": "آمار"
+ },
+ "settings": {
+ "enableWheel": "فعالسازی چرخ",
+ "allowSpins": "اجازه چرخش به کاربران",
+ "costInStars": "هزینه Stars",
+ "costInDays": "هزینه روز",
+ "rtpPercent": "درصد RTP",
+ "dailyLimit": "محدودیت روزانه (0 = نامحدود)",
+ "minSubDays": "حداقل روز اشتراک برای پرداخت روزانه",
+ "promoPrefix": "پیشوند کد تخفیف"
+ },
+ "prizes": {
+ "addPrize": "افزودن جایزه",
+ "editPrize": "ویرایش جایزه",
+ "noPrizes": "جایزهای تنظیم نشده. برای فعالسازی چرخ جایزه اضافه کنید.",
+ "deletePrize": "این جایزه حذف شود؟",
+ "types": {
+ "subscription_days": "روز اشتراک",
+ "balance_bonus": "جایزه موجودی",
+ "traffic_gb": "ترافیک GB",
+ "promocode": "کد تخفیف",
+ "nothing": "هیچی"
+ },
+ "fields": {
+ "type": "نوع",
+ "displayName": "نام نمایشی",
+ "value": "مقدار",
+ "valueKopeks": "ارزش (کوپک، برای RTP)",
+ "emoji": "ایموجی",
+ "color": "رنگ",
+ "active": "فعال",
+ "worth": "ارزش"
+ },
+ "promo": {
+ "title": "تنظیمات کد تخفیف",
+ "balanceBonus": "جایزه موجودی (کوپک)",
+ "subscriptionDays": "روز اشتراک"
+ }
+ },
+ "statistics": {
+ "totalSpins": "کل چرخشها",
+ "revenue": "درآمد",
+ "payouts": "پرداختها",
+ "actualRtp": "RTP واقعی",
+ "targetRtp": "هدف",
+ "prizeDistribution": "توزیع جوایز",
+ "times": "بار",
+ "topWins": "برترین برندهها"
+ }
+ },
+ "broadcasts": {
+ "title": "پیامرسانی",
+ "subtitle": "ارسال پیام گروهی به کاربران",
+ "create": "ایجاد پیام",
+ "empty": "هنوز پیامی ارسال نشده",
+ "selectFilter": "انتخاب مخاطبین",
+ "selectFilterPlaceholder": "انتخاب فیلتر...",
+ "recipients": "نفر",
+ "messageText": "متن پیام",
+ "messageTextPlaceholder": "متن پیام را وارد کنید...",
+ "media": "فایل رسانه",
+ "addMedia": "افزودن رسانه",
+ "uploading": "در حال آپلود...",
+ "buttons": "دکمهها",
+ "willBeSent": "ارسال میشود به",
+ "users": "کاربر",
+ "send": "ارسال",
+ "stop": "توقف",
+ "progress": "پیشرفت",
+ "total": "کل",
+ "sent": "ارسال شده",
+ "failed": "ناموفق",
+ "filter": "فیلتر",
+ "message": "پیام",
+ "unknownAdmin": "مدیر ناشناس"
+ },
+ "settings": {
+ "title": "تنظیمات سیستم",
+ "allCategories": "همه دستهها",
+ "noSettings": "تنظیماتی یافت نشد",
+ "modified": "تغییر یافته",
+ "readOnly": "فقط خواندنی",
+ "reset": "بازنشانی",
+ "categoriesCount": "دسته",
+ "settingsCount": "تنظیم",
+ "expandAll": "باز کردن همه",
+ "collapseAll": "بستن همه",
+ "searchPlaceholder": "جستجوی تنظیمات...",
+ "searchCategoriesPlaceholder": "جستجوی دستهها...",
+ "noSearchResults": "چیزی یافت نشد",
+ "example": "مثال"
+ },
+ "apps": {
+ "title": "مدیریت برنامهها",
+ "addApp": "افزودن برنامه",
+ "addFirstApp": "افزودن اولین برنامه",
+ "noApps": "برنامهای برای این پلتفرم نیست",
+ "createApp": "ایجاد برنامه",
+ "editApp": "ویرایش برنامه",
+ "confirmDelete": "آیا مطمئن هستید که میخواهید این برنامه را حذف کنید؟",
+ "copyTo": "کپی به...",
+ "appId": "شناسه برنامه",
+ "appName": "نام",
+ "urlScheme": "URL Scheme",
+ "featured": "ویژه",
+ "base64Encoding": "کدگذاری Base64",
+ "buttons": "دکمهها",
+ "button": "دکمه",
+ "addButton": "افزودن دکمه",
+ "buttonText": "متن دکمه",
+ "installDescription": "توضیحات نصب",
+ "subscriptionDescription": "توضیحات افزودن اشتراک",
+ "connectDescription": "توضیحات اتصال",
+ "beforeSubscription": "قبل از افزودن اشتراک",
+ "afterSubscription": "بعد از افزودن اشتراک",
+ "stepTitle": "عنوان",
+ "stepDescription": "توضیحات",
+ "tabs": {
+ "basic": "اصلی",
+ "installation": "نصب",
+ "subscription": "اشتراک",
+ "connect": "اتصال",
+ "additional": "اضافی"
+ }
+ },
+ "tickets": {
+ "title": "مدیریت تیکتها",
+ "total": "کل",
+ "list": "تیکتها",
+ "noTickets": "تیکتی نیست",
+ "selectTicket": "یک تیکت از لیست انتخاب کنید",
+ "allStatuses": "همه وضعیتها",
+ "statusOpen": "باز",
+ "statusPending": "در انتظار",
+ "statusAnswered": "پاسخ داده شده",
+ "statusClosed": "بسته",
+ "from": "از",
+ "created": "ایجاد شده",
+ "user": "کاربر",
+ "you": "شما",
+ "userLabel": "کاربر",
+ "adminLabel": "مدیر",
+ "replyPlaceholder": "پاسخ خود را بنویسید...",
+ "sendReply": "ارسال پاسخ",
+ "settings": "تنظیمات",
+ "supportMode": "حالت پشتیبانی",
+ "supportModeDesc": "انتخاب کنید کاربران چگونه میتوانند با پشتیبانی تماس بگیرند",
+ "modeBoth": "تیکت و تماس",
+ "modeTickets": "فقط تیکت",
+ "modeContact": "فقط تماس",
+ "slaSettings": "تنظیمات SLA",
+ "slaEnabled": "فعال کردن SLA (نظارت بر زمان پاسخ)",
+ "slaEnabledDesc": "اعلانهای خودکار برای تیکتهای معوقه",
+ "slaMinutes": "زمان پاسخ (دقیقه)",
+ "slaMinutesDesc": "حداکثر زمان برای پاسخ به تیکت (1-1440 دقیقه)",
+ "checkInterval": "فاصله بررسی (ثانیه)",
+ "checkIntervalDesc": "چند وقت یکبار تیکتهای معوقه را بررسی کنیم (30-600 ثانیه)",
+ "reminderCooldown": "فاصله یادآوری (دقیقه)",
+ "reminderCooldownDesc": "حداقل زمان بین یادآوریها (1-120 دقیقه)",
+ "settingsUpdateError": "خطا در ذخیره تنظیمات"
+ },
+ "tariffs": {
+ "title": "مدیریت تعرفهها",
+ "subtitle": "پیکربندی پلنهای تعرفه",
+ "create": "ایجاد تعرفه",
+ "edit": "ویرایش تعرفه",
+ "noTariffs": "تعرفهای نیست",
+ "name": "نام",
+ "namePlaceholder": "نام تعرفه را وارد کنید",
+ "description": "توضیحات",
+ "descriptionPlaceholder": "توضیحات تعرفه را وارد کنید",
+ "trafficLimit": "محدودیت ترافیک",
+ "trafficHint": "0 = ترافیک نامحدود",
+ "deviceLimit": "محدودیت دستگاه",
+ "tierLevel": "سطح تعرفه",
+ "tierHint": "1-10، روی اولویت ارتقا تأثیر میگذارد",
+ "unlimited": "نامحدود",
+ "devices": "دستگاه",
+ "servers": "سرور",
+ "subscriptions": "اشتراک",
+ "trial": "آزمایشی",
+ "inactive": "غیرفعال",
+ "activate": "فعالسازی",
+ "deactivate": "غیرفعالسازی",
+ "toggleTrial": "تغییر آزمایشی",
+ "delete": "حذف",
+ "confirmDelete": "تعرفه حذف شود؟",
+ "confirmDeleteText": "این عمل قابل بازگشت نیست. تعرفه برای همیشه حذف میشود.",
+ "days": "روز",
+ "tabs": {
+ "basic": "اصلی",
+ "prices": "قیمتها",
+ "servers": "سرورها"
+ },
+ "pricesHint": "قیمت هر دوره را تنظیم کنید",
+ "serversHint": "سرورهای موجود برای این تعرفه را انتخاب کنید",
+ "noServers": "سرور موجود نیست"
+ },
+ "servers": {
+ "title": "مدیریت سرورها",
+ "subtitle": "پیکربندی سرورهای VPN",
+ "sync": "همگامسازی",
+ "syncing": "در حال همگامسازی...",
+ "syncNow": "همگامسازی الان",
+ "noServers": "سروری نیست. با RemnaWave همگامسازی کنید.",
+ "edit": "ویرایش سرور",
+ "originalName": "نام اصلی",
+ "displayName": "نام نمایشی",
+ "displayNamePlaceholder": "نام نمایشی را وارد کنید",
+ "description": "توضیحات",
+ "descriptionPlaceholder": "توضیحات سرور را وارد کنید",
+ "countryCode": "کد کشور",
+ "price": "قیمت",
+ "priceHint": "هزینه اضافی سرور",
+ "maxUsers": "حداکثر کاربران",
+ "sortOrder": "ترتیب",
+ "unlimited": "نامحدود",
+ "stats": "آمار",
+ "currentUsers": "کاربران فعلی",
+ "activeSubscriptions": "اشتراکهای فعال",
+ "usedByTariffs": "استفاده شده توسط تعرفهها",
+ "trial": "آزمایشی",
+ "unavailable": "در دسترس نیست",
+ "full": "پر",
+ "enable": "فعال",
+ "disable": "غیرفعال",
+ "toggleTrial": "تغییر آزمایشی"
+ }
+ },
+ "adminDashboard": {
+ "title": "پنل آمار",
+ "subtitle": "نمای کلی سیستم در لحظه",
+ "refresh": "بروزرسانی",
+ "loadError": "بارگیری آمار ناموفق بود",
+ "stats": {
+ "usersOnline": "کاربران آنلاین",
+ "activeSubscriptions": "اشتراکهای فعال",
+ "incomeToday": "درآمد امروز",
+ "incomeMonth": "درآمد ماهانه",
+ "incomeTotal": "کل درآمد",
+ "subscriptionIncome": "درآمد اشتراک",
+ "total": "کل"
+ },
+ "nodes": {
+ "title": "نودها",
+ "online": "آنلاین",
+ "offline": "آفلاین",
+ "disabled": "غیرفعال",
+ "noNodes": "نود موجود نیست",
+ "usersOnline": "آنلاین",
+ "traffic": "ترافیک",
+ "enable": "فعال",
+ "disable": "غیرفعال"
+ },
+ "revenue": {
+ "title": "درآمد",
+ "last7Days": "۷ روز اخیر"
+ },
+ "subscriptions": {
+ "title": "اشتراکها",
+ "subtitle": "آمار اشتراک",
+ "active": "فعال",
+ "trial": "آزمایشی",
+ "paid": "پرداخت شده",
+ "expired": "منقضی شده",
+ "newSubscriptions": "اشتراکهای جدید",
+ "today": "امروز",
+ "week": "هفته",
+ "month": "ماه",
+ "conversion": "تبدیل آزمایشی به پولی"
+ },
+ "servers": {
+ "title": "سرورها",
+ "total": "کل سرورها",
+ "available": "در دسترس",
+ "withConnections": "با اتصال",
+ "revenue": "درآمد"
+ }
+ },
+ "profile": {
+ "title": "پروفایل",
+ "accountInfo": "اطلاعات حساب",
+ "telegramId": "شناسه تلگرام",
+ "username": "نام کاربری",
+ "name": "نام",
+ "registeredAt": "تاریخ ثبت نام",
+ "emailAuth": "احراز هویت ایمیل",
+ "linkEmailDescription": "ایمیل خود را متصل کنید تا بدون تلگرام وارد شوید. پس از اتصال، ایمیل تایید دریافت خواهید کرد.",
+ "linkEmail": "اتصال ایمیل",
+ "emailRequired": "ایمیل الزامی است",
+ "passwordMinLength": "رمز عبور باید حداقل 8 کاراکتر باشد",
+ "passwordsMismatch": "رمزهای عبور مطابقت ندارند",
+ "passwordPlaceholder": "رمز عبور را وارد کنید",
+ "confirmPasswordPlaceholder": "رمز عبور را تایید کنید",
+ "passwordHint": "حداقل 8 کاراکتر",
+ "emailSent": "ایمیل تایید ارسال شد! صندوق خود را بررسی کنید.",
+ "verified": "تایید شده",
+ "notVerified": "تایید نشده",
+ "verificationRequired": "لطفاً ایمیل خود را تایید کنید تا از ورود با ایمیل استفاده کنید.",
+ "resendVerification": "ارسال مجدد ایمیل تایید",
+ "verificationResent": "ایمیل تایید مجدداً ارسال شد!",
+ "canLoginWithEmail": "اکنون میتوانید با ایمیل و رمز عبور وارد شوید.",
+ "notifications": {
+ "title": "تنظیمات اعلان",
+ "subscriptionExpiry": "انقضای اشتراک",
+ "subscriptionExpiryDesc": "اعلان قبل از انقضای اشتراک",
+ "daysBeforeExpiry": "روز قبل از انقضا",
+ "trafficWarning": "هشدار ترافیک",
+ "trafficWarningDesc": "اعلان نزدیک شدن به محدودیت ترافیک",
+ "atPercent": "در درصد",
+ "balanceLow": "موجودی کم",
+ "balanceLowDesc": "اعلان موجودی کم",
+ "threshold": "آستانه",
+ "news": "اخبار",
+ "newsDesc": "دریافت اخبار و بهروزرسانیها",
+ "promoOffers": "پیشنهادات تبلیغاتی",
+ "promoOffersDesc": "دریافت پیشنهادات ویژه و تخفیفها",
+ "unavailable": "تنظیمات اعلان در دسترس نیست"
+ }
+ },
+ "theme": {
+ "colors": "رنگهای تم",
+ "reset": "بازنشانی",
+ "accent": "رنگ تأکیدی",
+ "accentDescription": "رنگ اصلی برند برای دکمهها، لینکها و عناصر تعاملی",
+ "darkTheme": "تم تیره",
+ "lightTheme": "تم روشن",
+ "background": "پسزمینه",
+ "surface": "سطح",
+ "text": "متن",
+ "textSecondary": "متن ثانویه",
+ "statusColors": "رنگهای وضعیت",
+ "success": "موفقیت",
+ "warning": "هشدار",
+ "error": "خطا",
+ "preview": "پیشنمایش",
+ "previewButton": "دکمه اصلی",
+ "previewSecondary": "دکمه ثانویه",
+ "light": "تم روشن",
+ "dark": "تم تیره"
+ },
+ "languages": {
+ "ru": "Русский",
+ "en": "English",
+ "zh": "中文",
+ "fa": "فارسی"
+ },
+ "contests": {
+ "title": "مسابقات",
+ "error": "بارگذاری مسابقات ناموفق",
+ "noContests": "مسابقهای موجود نیست",
+ "days": "روز",
+ "play": "شرکت",
+ "alreadyPlayed": "قبلاً شرکت کردید",
+ "enterAnswer": "پاسخ خود را وارد کنید",
+ "submit": "ارسال",
+ "imHere": "من اینجام!"
+ },
+ "polls": {
+ "title": "نظرسنجیها",
+ "error": "بارگذاری نظرسنجیها ناموفق",
+ "noPolls": "نظرسنجی موجود نیست",
+ "questions": "سوال",
+ "question": "سوال",
+ "of": "از",
+ "start": "شروع",
+ "continue": "ادامه",
+ "completed": "تکمیل شده",
+ "reward": "تومان"
+ },
+ "info": {
+ "title": "اطلاعات",
+ "faq": "سوالات متداول",
+ "rules": "قوانین",
+ "privacy": "حریم خصوصی",
+ "offer": "شرایط خدمات",
+ "noFaq": "سوال متداولی موجود نیست",
+ "noContent": "محتوایی موجود نیست",
+ "updatedAt": "بهروزرسانی"
+ },
+ "onboarding": {
+ "skip": "رد کردن",
+ "finish": "پایان",
+ "steps": {
+ "welcome": {
+ "title": "خوش آمدید!",
+ "description": "این کابین شخصی شماست. اینجا میتوانید اشتراک خود را مدیریت کنید، موجودی شارژ کنید و دستگاهها را متصل کنید."
+ },
+ "connectDevices": {
+ "title": "اتصال دستگاهها",
+ "description": "این دکمه را بزنید تا راهنمای اتصال VPN روی دستگاههایتان را دریافت کنید."
+ },
+ "balance": {
+ "title": "موجودی شما",
+ "description": "موجودی فعلی شما اینجا نمایش داده میشود. برای شارژ کلیک کنید."
+ },
+ "subscription": {
+ "title": "وضعیت اشتراک",
+ "description": "اینجا میتوانید روزهای باقیمانده تا انقضای اشتراک را ببینید."
+ },
+ "quickActions": {
+ "title": "دسترسی سریع",
+ "description": "از این دکمهها برای دسترسی سریع به امکانات اصلی استفاده کنید: شارژ موجودی، تمدید اشتراک و دعوت دوستان."
+ }
+ }
+ },
+ "promo": {
+ "activeDiscount": "تخفیف فعال",
+ "discountActive": "تخفیف فعال است!",
+ "discountDescription": "تخفیف شخصی شما برای خرید اشتراک اعمال میشود",
+ "expiresIn": "منقضی میشود در",
+ "source": "منبع",
+ "useNow": "همین الان استفاده کن",
+ "discountApplied": "تخفیف اعمال شد",
+ "time": {
+ "days": "روز",
+ "hours": "ساعت",
+ "minutes": "دقیقه"
+ }
+ }
+}
\ No newline at end of file
diff --git a/src/locales/ru.json b/src/locales/ru.json
index 52333ed..339bffb 100644
--- a/src/locales/ru.json
+++ b/src/locales/ru.json
@@ -1,1147 +1,1161 @@
{
- "common": {
- "loading": "Загрузка...",
- "error": "Ошибка",
- "success": "Успешно",
- "save": "Сохранить",
- "cancel": "Отмена",
- "confirm": "Подтвердить",
- "back": "Назад",
- "next": "Далее",
- "close": "Закрыть",
- "search": "Поиск",
- "noData": "Нет данных",
- "actions": "Действия",
- "yes": "Да",
- "no": "Нет",
- "or": "или",
- "and": "и",
- "edit": "Редактировать",
- "delete": "Удалить",
- "currency": "₽"
- },
- "nav": {
- "dashboard": "Главная",
- "subscription": "Подписка",
- "balance": "Баланс",
- "referral": "Рефералы",
- "support": "Поддержка",
- "profile": "Профиль",
- "logout": "Выйти",
- "contests": "Конкурсы",
- "polls": "Опросы",
- "info": "Информация",
- "wheel": "Колесо удачи"
- },
- "auth": {
- "login": "Вход",
- "register": "Регистрация",
- "logout": "Выход",
- "email": "Email",
- "password": "Пароль",
- "confirmPassword": "Подтвердите пароль",
- "forgotPassword": "Забыли пароль?",
- "resetPassword": "Сбросить пароль",
- "loginWithTelegram": "Войти через Telegram",
- "loginWithEmail": "Войти по Email",
- "noAccount": "Нет аккаунта?",
- "hasAccount": "Уже есть аккаунт?",
- "registerHint": "Для регистрации по email сначала авторизуйтесь через Telegram, затем привяжите email в настройках.",
- "telegramRequired": "Требуется авторизация через Telegram",
- "telegramNotConfigured": "Telegram бот не настроен",
- "authenticating": "Авторизация...",
- "orOpenInApp": "Или откройте бота в приложении",
- "loginFailed": "Ошибка входа",
- "tryAgain": "Попробовать снова",
- "welcomeBack": "Добро пожаловать!",
- "loginTitle": "Вход в личный кабинет",
- "loginSubtitle": "Войдите через Telegram или используйте email"
- },
- "emailVerification": {
- "title": "Подтверждение email",
- "verifying": "Проверяем email...",
- "pleaseWait": "Пожалуйста, подождите пока мы проверяем ваш email.",
- "success": "Email подтверждён!",
- "successMessage": "Ваш email успешно подтверждён. Теперь вы можете входить с помощью email и пароля.",
- "failed": "Ошибка подтверждения",
- "goToLogin": "Перейти к входу"
- },
- "dashboard": {
- "title": "Личный кабинет",
- "welcome": "Добро пожаловать, {{name}}!",
- "yourSubscription": "Ваша подписка",
- "quickActions": "Быстрые действия",
- "viewSubscription": "Управление подпиской",
- "topUpBalance": "Пополнить баланс",
- "inviteFriends": "Пригласить друзей",
- "getSupport": "Получить поддержку",
- "currentBalance": "Текущий баланс",
- "activeUntil": "Активна до",
- "noActiveSubscription": "Нет активной подписки",
- "devicesUsed": "Устройств: {{used}} из {{total}}",
- "trafficUsed": "Трафик: {{used}} из {{total}} ГБ",
- "unlimitedTraffic": "Безлимитный трафик"
- },
- "subscription": {
- "title": "Подписка",
- "currentPlan": "Текущий тариф",
- "status": "Статус",
- "active": "Активна",
- "inactive": "Неактивна",
- "trialStatus": "Пробный период",
- "expired": "Истекла",
- "expiresAt": "Действует до",
- "daysLeft": "Осталось дней",
- "devices": "Устройства",
- "servers": "Серверы",
- "traffic": "Трафик",
- "unlimited": "Безлимит",
- "used": "Использовано",
- "of": "из",
- "renew": "Продлить",
- "extend": "Продлить подписку",
- "buyTraffic": "Докупить трафик",
- "buyDevices": "Докупить устройства",
- "renewalOptions": "Варианты продления",
- "days": "дней",
- "hours": "ч",
- "minutes": "м",
- "price": "Цена",
- "noSubscription": "У вас нет активной подписки",
- "getSubscription": "Оформить подписку",
- "connectionInfo": "Данные для подключения",
- "copyLink": "Копировать ссылку",
- "copied": "Скопировано!",
- "showQR": "Показать QR-код",
- "downloadConfig": "Скачать конфиг",
- "trafficUsed": "Использовано трафика",
- "timeLeft": "Осталось времени",
- "getConfig": "Подключить устройства",
- "autoRenewal": "Автопродление",
- "daysBeforeExpiry": "дней до окончания",
- "selectPeriod": "Выберите период",
- "selectTraffic": "Выберите трафик",
- "selectServers": "Выберите серверы",
- "selectDevices": "Устройства",
- "perDevice": "/ устройство",
- "summary": "Итого",
- "total": "К оплате",
- "purchase": "Купить",
- "step": "Шаг {{current}} из {{total}}",
- "stepPeriod": "Период",
- "stepTraffic": "Трафик",
- "stepServers": "Серверы",
- "stepDevices": "Устройства",
- "stepConfirm": "Подтверждение",
- "currentTariff": "Текущий",
- "from": "от",
- "month": "мес",
- "insufficientBalance": "Недостаточно средств. Не хватает {{missing}} ₽",
- "trial": {
- "title": "Бесплатный пробный период",
- "description": "Попробуйте наш VPN сервис бесплатно!",
- "days": "дней",
- "devices": "устройств",
- "price": "Стоимость активации",
- "activate": "Активировать пробный период",
- "unavailable": "Пробный период недоступен"
- },
- "connection": {
- "title": "Подключить VPN",
- "selectDevice": "Выберите устройство",
- "selectApp": "Выберите приложение",
- "installApp": "1. Установите приложение",
- "addSubscription": "2. Добавьте подписку",
- "connectVpn": "3. Подключитесь к VPN",
- "addToApp": "Добавить в {{appName}}",
- "connect": "Подключить",
- "noApps": "Нет приложений для этой платформы",
- "noSubscription": "Для подключения нужна активная подписка",
- "featured": "Рекомендуем",
- "yourDevice": "Ваше устройство",
- "copyLink": "Скопировать ссылку",
- "copied": "Ссылка скопирована!",
- "openLink": "Открыть ссылку"
- },
- "myDevices": "Мои устройства",
- "noDevices": "Нет подключенных устройств",
- "deleteDevice": "Удалить устройство",
- "deleteAllDevices": "Удалить все",
- "confirmDeleteDevice": "Удалить это устройство?",
- "confirmDeleteAllDevices": "Удалить все устройства?",
- "deviceDeleted": "Устройство удалено",
- "allDevicesDeleted": "Все устройства удалены",
- "platform": "Платформа",
- "model": "Модель",
- "connectedAt": "Подключено",
- "pause": {
- "title": "Пауза подписки",
- "paused": "На паузе",
- "active": "Активна",
- "pauseBtn": "Приостановить",
- "resumeBtn": "Возобновить",
- "pausedMessage": "Подписка приостановлена",
- "resumedMessage": "Подписка возобновлена",
- "dailyOnly": "Пауза доступна только для суточных тарифов",
- "pausedInfo": "Подписка приостановлена",
- "pausedDescription": "Списания остановлены. Подписка будет действовать до",
- "nextCharge": "До следующего списания",
- "willBeCharged": "Будет списано",
- "days_one": "день",
- "days_few": "дня",
- "days_many": "дней",
- "hours": "ч",
- "minutes": "м"
- },
- "dailyPurchase": {
- "costPerDay": "Стоимость в день",
- "chargedDaily": "Оплата списывается ежедневно с баланса",
- "canPause": "Можно приостановить в любой момент",
- "pausedOnLowBalance": "При недостатке баланса подписка будет приостановлена",
- "activate": "Активировать за {{price}}"
- },
- "switchTariff": {
- "title": "Сменить тариф",
- "preview": "Предпросмотр",
- "currentTariff": "Текущий тариф",
- "newTariff": "Новый тариф",
- "remainingDays": "Осталось дней",
- "upgradeCost": "Доплата",
- "free": "Бесплатно",
- "switch": "Перейти",
- "switched": "Тариф изменён",
- "notEnoughBalance": "Недостаточно средств"
- },
- "switchTraffic": {
- "title": "Изменить трафик",
- "currentPackage": "Текущий пакет",
- "newPackage": "Новый пакет",
- "switch": "Изменить",
- "switched": "Трафик изменён"
- },
- "purchasedTraffic": "Докупленный трафик",
- "trafficResetAt": "Сброс"
- },
- "balance": {
- "title": "Баланс",
- "currentBalance": "Текущий баланс",
- "topUp": "Пополнить",
- "topUpBalance": "Пополнение баланса",
- "paymentMethods": "Способы оплаты",
- "transactionHistory": "История операций",
- "noTransactions": "Нет операций",
- "date": "Дата",
- "type": "Тип",
- "description": "Описание",
- "amount": "Сумма",
- "deposit": "Пополнение",
- "withdrawal": "Списание",
- "subscriptionPayment": "Оплата подписки",
- "referralReward": "Реферальный бонус",
- "minAmount": "Мин.",
- "maxAmount": "Макс.",
- "notAvailable": "Недоступно",
- "useBot": "Для пополнения используйте Telegram бота.",
- "page": "Страница {{current}} из {{total}}",
- "invalidAmount": "Некорректная сумма",
- "promocode": {
- "title": "Промокод",
- "placeholder": "Введите промокод",
- "activate": "Активировать",
- "activating": "Активация...",
- "success": "Промокод успешно активирован!",
- "balanceAdded": "На баланс начислено: {{amount}} ₽",
- "errors": {
- "not_found": "Промокод не найден",
- "expired": "Срок действия промокода истёк",
- "used": "Промокод уже использован",
- "already_used_by_user": "Вы уже использовали этот промокод",
- "user_not_found": "Пользователь не найден",
- "server_error": "Ошибка сервера"
- }
- },
- "minAmountError": "Минимальная сумма: {{amount}} ₽",
- "maxAmountError": "Максимальная сумма: {{amount}} ₽",
- "paymentOption": "Способ оплаты",
- "selectPaymentOption": "Выберите способ оплаты",
- "paymentMethods": {
- "yookassa": {
- "name": "ЮKassa",
- "description": "Оплата через ЮKassa"
- },
- "cryptobot": {
- "name": "CryptoBot",
- "description": "Оплата криптовалютой через CryptoBot"
- },
- "telegram_stars": {
- "name": "Telegram Stars",
- "description": "Оплата через Telegram Stars"
- },
- "heleket": {
- "name": "Heleket Crypto",
- "description": "Оплата криптовалютой через Heleket"
- },
- "mulenpay": {
- "name": "MulenPay",
- "description": "Оплата через MulenPay"
- },
- "pal24": {
- "name": "PAL24",
- "description": "Оплата через PAL24"
- },
- "platega": {
- "name": "Platega",
- "description": "Оплата через Platega"
- },
- "wata": {
- "name": "Wata",
- "description": "Оплата через Wata"
- },
- "cloudpayments": {
- "name": "CloudPayments",
- "description": "Оплата банковской картой через CloudPayments"
- },
- "freekassa": {
- "name": "FreeKassa",
- "description": "Оплата через FreeKassa"
- }
- },
- "pendingPayments": {
- "title": "Ожидающие платежи",
- "pay": "Оплатить",
- "checkStatus": "Проверить статус",
- "checking": "Проверка..."
- }
- },
- "referral": {
- "title": "Реферальная программа",
- "yourLink": "Ваша реферальная ссылка",
- "copyLink": "Копировать ссылку",
- "copied": "Скопировано!",
- "shareButton": "Поделиться",
- "shareMessage": "Заходи в {{botName}} по моей ссылке и получай до {{percent}}% кешбэка!",
- "shareHint": "Поделитесь ссылкой с друзьями. Когда они зарегистрируются и оплатят, вы получите {{percent}}% комиссии!",
- "stats": {
- "totalReferrals": "Всего рефералов",
- "activeReferrals": "Активных",
- "totalEarnings": "Общий заработок",
- "commissionRate": "Комиссия"
- },
- "terms": {
- "title": "Условия программы",
- "commission": "Комиссия",
- "minTopup": "Мин. пополнение",
- "newUserBonus": "Бонус новому пользователю",
- "inviterBonus": "Бонус пригласившему"
- },
- "yourReferrals": "Ваши рефералы",
- "noReferrals": "Пока нет рефералов. Поделитесь ссылкой, чтобы пригласить друзей!",
- "user": "Пользователь",
- "joined": "Присоединился",
- "hasPaid": "Оплатил",
- "status": {
- "pending": "Ожидание",
- "paid": "Оплачено"
- },
- "earningsHistory": "История начислений",
- "reason": "Причина",
- "reasons": {
- "referral_registration_pending": "Регистрация реферала",
- "referral_registration": "Регистрация реферала",
- "referral_first_payment": "Первая оплата реферала",
- "referral_subscription_renewal": "Продление подписки реферала",
- "referral_bonus": "Бонус за реферала"
- }
- },
- "support": {
- "title": "Поддержка",
- "newTicket": "Новый тикет",
- "yourTickets": "Ваши обращения",
- "noTickets": "Нет обращений",
- "createTicket": "Создать обращение",
- "subject": "Тема",
- "subjectPlaceholder": "Кратко опишите проблему",
- "message": "Сообщение",
- "messagePlaceholder": "Подробно опишите вашу проблему...",
- "send": "Отправить",
- "sending": "Отправка...",
- "creating": "Создание...",
- "reply": "Ответить",
- "replyPlaceholder": "Введите ваш ответ...",
- "sendReply": "Отправить ответ",
- "you": "Вы",
- "supportTeam": "Поддержка",
- "selectTicket": "Выберите обращение или создайте новое",
- "created": "Создано",
- "repliesDisabled": "Ответы на это обращение отключены",
- "status": {
- "open": "Открыт",
- "answered": "Отвечен",
- "pending": "Ожидает",
- "closed": "Закрыт"
- },
- "attachImage": "Прикрепить изображение",
- "invalidFileType": "Неверный тип файла. Используйте JPEG, PNG, GIF или WebP.",
- "fileTooLarge": "Файл слишком большой. Максимальный размер 10МБ.",
- "uploadFailed": "Не удалось загрузить изображение",
- "imageLoadFailed": "Не удалось загрузить изображение",
- "ticketsDisabled": "Тикеты отключены",
- "useProfile": "Для получения поддержки перейдите в профиль бота",
- "goToProfile": "Перейти в профиль",
- "useExternalLink": "Для получения поддержки воспользуйтесь внешней ссылкой",
- "openSupport": "Открыть поддержку",
- "contactSupport": "Для получения поддержки обратитесь к {{username}}",
- "contactUs": "Связаться с поддержкой"
- },
- "wheel": {
- "title": "Колесо удачи",
- "disabled": "Колесо удачи временно недоступно",
- "spinsRemaining": "Осталось вращений сегодня",
- "choosePayment": "Выберите способ оплаты",
- "stars": "Stars",
- "telegramStars": "Telegram Stars",
- "days": "дней",
- "subscriptionDays": "Дни подписки",
- "day": "День",
- "spin": "КРУТИТЬ!",
- "spinning": "Крутится...",
- "history": "История",
- "recentSpins": "Последние вращения",
- "congratulations": "Поздравляем!",
- "noLuck": "Не повезло!",
- "oops": "Упс!",
- "yourPromoCode": "Ваш промокод:",
- "close": "Закрыть",
- "errors": {
- "networkError": "Произошла ошибка сети",
- "loadFailed": "Не удалось загрузить конфигурацию колеса",
- "dailyLimitReached": "Достигнут дневной лимит вращений",
- "cannotSpin": "Сейчас нельзя крутить",
- "insufficientBalance": "Недостаточно средств на балансе",
- "topUpRequired": "Пополните баланс для оплаты спина",
- "starsNotAvailable": "Оплата Stars недоступна. Откройте приложение через Telegram."
- },
- "payWithStars": "Оплатить Stars",
- "payWithDays": "Оплатить днями",
- "processingPayment": "Обработка...",
- "starsPaymentSuccess": "Оплата прошла! Результат спина отправлен в Telegram.",
- "starsPaymentSuccessCheckHistory": "Оплата прошла! Проверьте историю или Telegram для результата.",
- "starsPaymentFailed": "Ошибка оплаты. Попробуйте еще раз.",
- "youWon": "Вы выиграли",
- "noPrize": "В этот раз не повезло...",
- "noHistory": "История вращений пуста",
- "banner": {
- "title": "Испытай удачу!",
- "description": "Крути колесо и выигрывай призы: дни подписки, баланс, трафик и многое другое!",
- "button": "Перейти к колесу"
- }
- },
- "admin": {
- "nav": {
- "title": "Админка",
- "dashboard": "Статистика",
- "tickets": "Тикеты",
- "settings": "Настройки",
- "apps": "Приложения",
- "wheel": "Колесо",
- "tariffs": "Тарифы",
- "servers": "Серверы",
- "broadcasts": "Рассылки",
- "users": "Пользователи",
- "payments": "Платежи",
- "remnawave": "RemnaWave"
- },
- "panel": {
- "title": "Панель администратора",
- "subtitle": "Управление системой",
- "dashboardDesc": "Статистика и мониторинг системы",
- "ticketsDesc": "Обработка обращений пользователей",
- "settingsDesc": "Настройки системы и параметры",
- "appsDesc": "Управление приложениями для подключения",
- "wheelDesc": "Настройка колеса удачи и призов",
- "tariffsDesc": "Управление тарифными планами",
- "serversDesc": "Настройка VPN серверов",
- "broadcastsDesc": "Массовая отправка сообщений",
- "usersDesc": "Управление пользователями бота",
- "paymentsDesc": "Проверка платежей",
- "remnawaveDesc": "Управление панелью и статистика"
- },
- "payments": {
- "title": "Проверка платежей",
- "description": "Ожидающие платежи за последние 24 часа",
- "totalPending": "Всего ожидает",
- "filterByMethod": "Фильтр по методу",
- "noPayments": "Нет ожидающих платежей",
- "paid": "Оплачено",
- "user": "Пользователь",
- "openLink": "Открыть ссылку",
- "checkStatus": "Проверить статус",
- "checking": "Проверка..."
- },
- "remnawave": {
- "title": "RemnaWave",
- "subtitle": "Управление панелью и статистика",
- "connected": "Подключено",
- "disconnected": "Не настроено",
- "noData": "Не удалось загрузить данные",
- "tabs": {
- "overview": "Обзор",
- "nodes": "Ноды",
- "squads": "Сквады",
- "sync": "Синхронизация"
- },
- "overview": {
- "system": "Система",
- "usersOnline": "Онлайн",
- "totalUsers": "Всего пользователей",
- "nodesOnline": "Нод онлайн",
- "connections": "Подключений",
- "bandwidth": "Пропускная способность",
- "download": "Загрузка",
- "upload": "Отдача",
- "total": "Всего",
- "server": "Сервер",
- "cpu": "CPU",
- "memory": "Память",
- "uptime": "Аптайм",
- "traffic": "Статистика трафика",
- "usersByStatus": "Пользователи по статусу"
- },
- "nodes": {
- "online": "Онлайн",
- "offline": "Офлайн",
- "disabled": "Отключена",
- "noNodes": "Ноды не найдены",
- "restart": "Перезапустить",
- "enable": "Включить",
- "disable": "Отключить",
- "restartAll": "Перезапустить все",
- "confirmRestartAll": "Вы уверены, что хотите перезапустить все ноды?"
- },
- "squads": {
- "synced": "Синхронизирован",
- "notSynced": "Не синхронизирован",
- "noSquads": "Сквады не найдены",
- "syncServers": "Синхронизировать серверы"
- },
- "sync": {
- "autoSync": "Автосинхронизация",
- "runNow": "Запустить сейчас",
- "manual": "Ручная синхронизация",
- "fromPanel": "Синхронизация из панели",
- "fromPanelDesc": "Импорт пользователей из RemnaWave панели в базу бота",
- "toPanel": "Синхронизация в панель",
- "toPanelDesc": "Экспорт пользователей из базы бота в RemnaWave панель",
- "subscriptions": "Подписки",
- "validate": "Валидация",
- "validateDesc": "Проверка и исправление несоответствий подписок",
- "cleanup": "Очистка",
- "cleanupDesc": "Удаление orphaned подписок без пользователей",
- "statuses": "Синхронизация статусов",
- "statusesDesc": "Синхронизация статусов подписок с панелью"
- }
- },
- "wheel": {
- "title": "Настройки колеса удачи",
- "enabled": "Включено",
- "disabled": "Выключено",
- "tabs": {
- "settings": "Настройки",
- "prizes": "Призы",
- "statistics": "Статистика"
- },
- "settings": {
- "enableWheel": "Включить колесо",
- "allowSpins": "Разрешить пользователям крутить колесо",
- "costInStars": "Стоимость в Stars",
- "costInDays": "Стоимость в днях",
- "rtpPercent": "RTP (Return to Player) %",
- "dailyLimit": "Дневной лимит вращений (0 = безлимит)",
- "minSubDays": "Мин. дней подписки для оплаты днями",
- "promoPrefix": "Префикс промокодов"
- },
- "prizes": {
- "addPrize": "Добавить приз",
- "editPrize": "Редактировать приз",
- "noPrizes": "Призы не настроены. Добавьте призы для активации колеса.",
- "deletePrize": "Удалить этот приз?",
- "types": {
- "subscription_days": "Дни подписки",
- "balance_bonus": "Бонус баланса",
- "traffic_gb": "Трафик ГБ",
- "promocode": "Промокод",
- "nothing": "Ничего (пусто)"
- },
- "fields": {
- "type": "Тип",
- "displayName": "Название",
- "value": "Значение",
- "valueKopeks": "Стоимость в копейках (для RTP)",
- "emoji": "Эмодзи",
- "color": "Цвет",
- "active": "Активен",
- "worth": "Стоимость"
- },
- "promo": {
- "title": "Настройки промокода",
- "balanceBonus": "Бонус баланса (копейки)",
- "subscriptionDays": "Дни подписки"
- }
- },
- "statistics": {
- "totalSpins": "Всего вращений",
- "revenue": "Доход",
- "payouts": "Выплаты",
- "actualRtp": "Фактический RTP",
- "targetRtp": "цель",
- "prizeDistribution": "Распределение призов",
- "times": "раз",
- "topWins": "Топ выигрышей"
- }
- },
- "broadcasts": {
- "title": "Рассылки",
- "subtitle": "Массовая отправка сообщений пользователям",
- "create": "Создать рассылку",
- "empty": "Рассылок пока нет",
- "selectFilter": "Выберите аудиторию",
- "selectFilterPlaceholder": "Выберите фильтр...",
- "recipients": "получ.",
- "messageText": "Текст сообщения",
- "messageTextPlaceholder": "Введите текст рассылки...",
- "media": "Медиафайл",
- "addMedia": "Добавить медиа",
- "uploading": "Загрузка...",
- "buttons": "Кнопки",
- "willBeSent": "Будет отправлено",
- "users": "пользователям",
- "send": "Отправить",
- "stop": "Остановить",
- "progress": "Прогресс",
- "total": "Всего",
- "sent": "Отправлено",
- "failed": "Ошибки",
- "filter": "Фильтр",
- "message": "Сообщение",
- "unknownAdmin": "Неизвестный админ"
- },
- "settings": {
- "title": "Настройки системы",
- "allCategories": "Все категории",
- "noSettings": "Настройки не найдены",
- "modified": "Изменено",
- "readOnly": "Только чтение",
- "reset": "Сбросить",
- "categoriesCount": "категорий",
- "settingsCount": "настроек",
- "expandAll": "Развернуть все",
- "collapseAll": "Свернуть все",
- "searchPlaceholder": "Поиск настроек...",
- "searchCategoriesPlaceholder": "Поиск категорий...",
- "noSearchResults": "Ничего не найдено",
- "example": "Пример"
- },
- "apps": {
- "title": "Управление приложениями",
- "addApp": "Добавить приложение",
- "addFirstApp": "Добавить первое приложение",
- "noApps": "Нет приложений для этой платформы",
- "createApp": "Создать приложение",
- "editApp": "Редактировать приложение",
- "confirmDelete": "Вы уверены, что хотите удалить это приложение?",
- "copyTo": "Копировать в...",
- "appId": "ID приложения",
- "appName": "Название",
- "urlScheme": "URL схема",
- "featured": "Рекомендованное",
- "base64Encoding": "Base64 кодирование",
- "buttons": "Кнопки",
- "button": "Кнопка",
- "addButton": "Добавить кнопку",
- "buttonText": "Текст кнопки",
- "installDescription": "Описание установки",
- "subscriptionDescription": "Описание добавления подписки",
- "connectDescription": "Описание подключения",
- "beforeSubscription": "До добавления подписки",
- "afterSubscription": "После добавления подписки",
- "stepTitle": "Заголовок",
- "stepDescription": "Описание",
- "tabs": {
- "basic": "Основное",
- "installation": "Установка",
- "subscription": "Подписка",
- "connect": "Подключение",
- "additional": "Дополнительно"
- },
- "import": "Импорт",
- "export": "Экспорт",
- "importApps": "Импорт приложений из JSON",
- "exportApps": "Экспорт приложений в JSON",
- "importPreview": "Предпросмотр импорта",
- "confirmImport": "Импортировать",
- "importError": "Неверный формат JSON файла",
- "importCreateError": "Ошибка при создании приложений",
- "noAppsToImport": "Нет приложений для импорта",
- "remnaWaveToggle": "Переключить источник RemnaWave",
- "refreshRemnaWave": "Обновить данные из RemnaWave",
- "remnaWaveMode": "Отображаются приложения из панели RemnaWave. Режим только для чтения.",
- "remnaWaveSettings": "Настройки RemnaWave",
- "remnaWaveConfigUuid": "UUID конфигурации",
- "remnaWaveConfigUuidHint": "UUID конфигурации страницы подписки из панели RemnaWave",
- "availableConfigs": "Доступные конфигурации"
- },
- "tickets": {
- "title": "Управление тикетами",
- "total": "Всего",
- "list": "Тикеты",
- "noTickets": "Нет тикетов",
- "selectTicket": "Выберите тикет из списка",
- "allStatuses": "Все статусы",
- "statusOpen": "Открыт",
- "statusPending": "Ожидает",
- "statusAnswered": "Отвечен",
- "statusClosed": "Закрыт",
- "from": "От",
- "created": "Создан",
- "user": "Пользователь",
- "you": "Вы",
- "userLabel": "Пользователь",
- "adminLabel": "Админ",
- "replyPlaceholder": "Введите ваш ответ...",
- "sendReply": "Отправить",
- "settings": "Настройки",
- "supportMode": "Режим поддержки",
- "supportModeDesc": "Выберите, как пользователи могут связаться с поддержкой",
- "modeBoth": "Тикеты и контакт",
- "modeTickets": "Только тикеты",
- "modeContact": "Только контакт",
- "slaSettings": "Настройки SLA",
- "slaEnabled": "Включить SLA (мониторинг времени ответа)",
- "slaEnabledDesc": "Автоматические уведомления о просроченных тикетах",
- "slaMinutes": "Время ответа (минуты)",
- "slaMinutesDesc": "Максимальное время для ответа на тикет (1-1440 минут)",
- "checkInterval": "Интервал проверки (секунды)",
- "checkIntervalDesc": "Как часто проверять просроченные тикеты (30-600 секунд)",
- "reminderCooldown": "Интервал напоминаний (минуты)",
- "reminderCooldownDesc": "Минимальное время между напоминаниями (1-120 минут)",
- "settingsUpdateError": "Ошибка сохранения настроек"
- },
- "tariffs": {
- "title": "Управление тарифами",
- "subtitle": "Настройка тарифных планов",
- "create": "Создать тариф",
- "edit": "Редактировать тариф",
- "noTariffs": "Нет тарифов",
- "name": "Название",
- "namePlaceholder": "Введите название тарифа",
- "description": "Описание",
- "descriptionPlaceholder": "Введите описание тарифа",
- "trafficLimit": "Лимит трафика",
- "trafficHint": "0 = безлимитный трафик",
- "deviceLimit": "Лимит устройств",
- "tierLevel": "Уровень тарифа",
- "tierHint": "1-10, влияет на приоритет при переходе",
- "unlimited": "Безлимит",
- "devices": "устр.",
- "servers": "серверов",
- "subscriptions": "подписок",
- "trial": "Триал",
- "inactive": "Неактивен",
- "activate": "Активировать",
- "deactivate": "Деактивировать",
- "toggleTrial": "Переключить триал",
- "delete": "Удалить",
- "confirmDelete": "Удалить тариф?",
- "confirmDeleteText": "Это действие нельзя отменить. Тариф будет удален навсегда.",
- "days": "дней",
- "tabs": {
- "basic": "Основное",
- "prices": "Цены",
- "servers": "Серверы"
- },
- "pricesHint": "Включите нужные периоды и установите цены (в рублях)",
- "periodDisabled": "Отключено",
- "serversHint": "Выберите серверы, доступные для этого тарифа. Для каждого сервера можно указать индивидуальный лимит трафика.",
- "noServers": "Нет доступных серверов",
- "serverTrafficLimit": "Лимит трафика",
- "useDefault": "по умолчанию"
- },
- "servers": {
- "title": "Управление серверами",
- "subtitle": "Настройка серверов VPN",
- "sync": "Синхронизировать",
- "syncing": "Синхронизация...",
- "syncNow": "Синхронизировать сейчас",
- "noServers": "Нет серверов. Синхронизируйте с RemnaWave.",
- "edit": "Редактировать сервер",
- "originalName": "Оригинальное название",
- "displayName": "Отображаемое название",
- "displayNamePlaceholder": "Введите название",
- "description": "Описание",
- "descriptionPlaceholder": "Введите описание сервера",
- "countryCode": "Код страны",
- "price": "Цена",
- "priceHint": "Дополнительная стоимость сервера",
- "maxUsers": "Максимум пользователей",
- "sortOrder": "Порядок сортировки",
- "unlimited": "Без лимита",
- "stats": "Статистика",
- "currentUsers": "Текущих пользователей",
- "activeSubscriptions": "Активных подписок",
- "usedByTariffs": "Используется в тарифах",
- "trial": "Триал",
- "unavailable": "Недоступен",
- "full": "Заполнен",
- "enable": "Включить",
- "disable": "Отключить",
- "toggleTrial": "Переключить триал",
- "loadError": "Не удалось загрузить сервер"
- }
- },
- "adminDashboard": {
- "title": "Панель статистики",
- "subtitle": "Обзор системы в реальном времени",
- "refresh": "Обновить",
- "loadError": "Не удалось загрузить статистику",
- "stats": {
- "usersOnline": "Пользователей онлайн",
- "activeSubscriptions": "Активных подписок",
- "incomeToday": "Доход за сегодня",
- "incomeMonth": "Доход за месяц",
- "incomeTotal": "Общий доход",
- "subscriptionIncome": "Доход от подписок",
- "total": "всего"
- },
- "nodes": {
- "title": "Ноды",
- "online": "Онлайн",
- "offline": "Оффлайн",
- "disabled": "Отключена",
- "noNodes": "Нет доступных нод",
- "usersOnline": "Онлайн",
- "traffic": "Трафик",
- "enable": "Включить",
- "disable": "Отключить"
- },
- "revenue": {
- "title": "Доходы",
- "last7Days": "За последние 7 дней"
- },
- "subscriptions": {
- "title": "Подписки",
- "subtitle": "Статистика подписок",
- "active": "Активных",
- "trial": "Пробных",
- "paid": "Оплаченных",
- "expired": "Истекших",
- "newSubscriptions": "Новые подписки",
- "today": "Сегодня",
- "week": "Неделя",
- "month": "Месяц",
- "conversion": "Конверсия триал→платные"
- },
- "servers": {
- "title": "Серверы",
- "total": "Всего серверов",
- "available": "Доступных",
- "withConnections": "С подключениями",
- "revenue": "Доход"
- },
- "tariffs": {
- "title": "Статистика по тарифам",
- "subtitle": "Распределение подписок по тарифам",
- "tariffName": "Тариф",
- "activeSubscriptions": "Активных",
- "trialSubscriptions": "Триал",
- "purchasedToday": "Сегодня",
- "purchasedWeek": "Неделя",
- "purchasedMonth": "Месяц",
- "noTariffs": "Нет тарифов"
- }
- },
- "adminUsers": {
- "title": "Пользователи",
- "subtitle": "Управление пользователями",
- "searchPlaceholder": "Поиск по ID, username, имени...",
- "filters": {
- "all": "Все",
- "active": "Активные",
- "blocked": "Заблокированные",
- "deleted": "Удалённые"
- },
- "sort": {
- "created_at": "Дата регистрации",
- "balance": "Баланс",
- "traffic": "Трафик",
- "last_activity": "Активность",
- "total_spent": "Потрачено",
- "purchase_count": "Покупки"
- },
- "stats": {
- "totalUsers": "Всего пользователей",
- "activeUsers": "Активных",
- "blockedUsers": "Заблокировано",
- "withSubscription": "С подпиской",
- "newToday": "Новых сегодня",
- "newWeek": "За неделю",
- "newMonth": "За месяц",
- "totalBalance": "Общий баланс",
- "activeToday": "Активны сегодня",
- "activeWeek": "За неделю",
- "activeMonth": "За месяц"
- },
- "table": {
- "user": "Пользователь",
- "status": "Статус",
- "balance": "Баланс",
- "subscription": "Подписка",
- "spent": "Потрачено",
- "registered": "Регистрация",
- "activity": "Активность",
- "noUsers": "Пользователи не найдены"
- },
- "userStatus": {
- "active": "Активен",
- "blocked": "Заблокирован",
- "deleted": "Удалён"
- },
- "subscriptionStatus": {
- "active": "Активна",
- "trial": "Триал",
- "expired": "Истекла",
- "none": "Нет подписки"
- },
- "detail": {
- "title": "Информация о пользователе",
- "tabs": {
- "info": "Инфо",
- "subscription": "Подписка",
- "balance": "Баланс",
- "sync": "Синхронизация"
- },
- "telegramId": "Telegram ID",
- "username": "Username",
- "fullName": "Имя",
- "email": "Email",
- "emailVerified": "Подтверждён",
- "emailNotVerified": "Не подтверждён",
- "language": "Язык",
- "registeredAt": "Регистрация",
- "lastActivity": "Последняя активность",
- "cabinetLogin": "Вход в кабинет",
- "referralCode": "Реферальный код",
- "referralsCount": "Рефералов",
- "referralEarnings": "Заработано",
- "referredBy": "Приглашён",
- "promoGroup": "Промо-группа",
- "noPromoGroup": "Не задана",
- "restrictions": "Ограничения",
- "restrictionTopup": "Пополнение баланса",
- "restrictionSubscription": "Покупка подписки",
- "restrictionReason": "Причина",
- "noRestrictions": "Нет ограничений",
- "totalSpent": "Всего потрачено",
- "purchaseCount": "Покупок",
- "usedPromocodes": "Использовано промокодов",
- "lifetimeTraffic": "Трафик за всё время",
- "recentTransactions": "Последние транзакции",
- "noTransactions": "Нет транзакций"
- },
- "subscription": {
- "noSubscription": "Подписка отсутствует",
- "currentTariff": "Текущий тариф",
- "status": "Статус",
- "endDate": "Окончание",
- "daysRemaining": "Осталось дней",
- "trafficUsed": "Использовано трафика",
- "deviceLimit": "Лимит устройств",
- "autopay": "Автоплатёж",
- "enabled": "Включён",
- "disabled": "Отключён",
- "actions": {
- "extend": "Продлить",
- "changeTariff": "Сменить тариф",
- "setTraffic": "Установить трафик",
- "toggleAutopay": "Вкл/выкл автоплатёж",
- "cancel": "Отменить подписку",
- "create": "Создать подписку"
- },
- "extendDays": "Дней",
- "selectTariff": "Выберите тариф",
- "trafficLimitGb": "Лимит ГБ",
- "trafficUsedGb": "Использовано ГБ",
- "isTrial": "Пробный период"
- },
- "balance": {
- "currentBalance": "Текущий баланс",
- "addFunds": "Пополнить",
- "deductFunds": "Списать",
- "amount": "Сумма",
- "description": "Описание",
- "createTransaction": "Создать транзакцию",
- "transactionHistory": "История транзакций"
- },
- "sync": {
- "title": "Синхронизация с панелью",
- "status": "Статус синхронизации",
- "lastSync": "Последняя синхронизация",
- "neverSynced": "Никогда",
- "botData": "Данные бота",
- "panelData": "Данные панели",
- "notFound": "Не найден в панели",
- "differences": "Различия",
- "noDifferences": "Различий нет",
- "syncFromPanel": "Синхронизировать из панели",
- "syncToPanel": "Синхронизировать в панель",
- "remawave_uuid": "Remnawave UUID",
- "notLinked": "Не привязан"
- },
- "actions": {
- "block": "Заблокировать",
- "unblock": "Разблокировать",
- "delete": "Удалить",
- "blockReason": "Причина блокировки",
- "confirmBlock": "Подтвердить блокировку",
- "confirmDelete": "Подтвердить удаление"
- },
- "messages": {
- "loadError": "Не удалось загрузить пользователей",
- "userLoadError": "Не удалось загрузить пользователя",
- "balanceUpdated": "Баланс обновлён",
- "balanceError": "Ошибка обновления баланса",
- "subscriptionUpdated": "Подписка обновлена",
- "subscriptionError": "Ошибка обновления подписки",
- "statusUpdated": "Статус обновлён",
- "statusError": "Ошибка обновления статуса",
- "syncSuccess": "Синхронизация выполнена",
- "syncError": "Ошибка синхронизации"
- }
- },
- "profile": {
- "title": "Профиль",
- "accountInfo": "Информация об аккаунте",
- "telegramId": "Telegram ID",
- "username": "Имя пользователя",
- "name": "Имя",
- "registeredAt": "Дата регистрации",
- "emailAuth": "Авторизация по Email",
- "linkEmailDescription": "Привяжите email для входа без Telegram. После привязки на ваш email придёт письмо для подтверждения.",
- "linkEmail": "Привязать Email",
- "emailRequired": "Введите email",
- "passwordMinLength": "Пароль должен быть минимум 8 символов",
- "passwordsMismatch": "Пароли не совпадают",
- "passwordPlaceholder": "Введите пароль",
- "confirmPasswordPlaceholder": "Подтвердите пароль",
- "passwordHint": "Минимум 8 символов",
- "emailSent": "Письмо для подтверждения отправлено! Проверьте почту.",
- "verified": "Подтверждён",
- "notVerified": "Не подтверждён",
- "verificationRequired": "Подтвердите email для использования входа по почте.",
- "resendVerification": "Отправить письмо повторно",
- "verificationResent": "Письмо отправлено повторно!",
- "canLoginWithEmail": "Теперь вы можете входить с помощью email и пароля.",
- "notifications": {
- "title": "Настройки уведомлений",
- "subscriptionExpiry": "Окончание подписки",
- "subscriptionExpiryDesc": "Уведомлять о скором истечении подписки",
- "daysBeforeExpiry": "Дней до окончания",
- "trafficWarning": "Предупреждение о трафике",
- "trafficWarningDesc": "Уведомлять при достижении лимита трафика",
- "atPercent": "При использовании",
- "balanceLow": "Низкий баланс",
- "balanceLowDesc": "Уведомлять о низком балансе",
- "threshold": "Порог",
- "news": "Новости",
- "newsDesc": "Получать новости и обновления сервиса",
- "promoOffers": "Промо-предложения",
- "promoOffersDesc": "Получать специальные предложения и скидки",
- "unavailable": "Настройки уведомлений недоступны"
- }
- },
- "theme": {
- "colors": "Цвета темы",
- "reset": "Сбросить",
- "accent": "Акцентный цвет",
- "accentDescription": "Основной цвет бренда для кнопок, ссылок и интерактивных элементов",
- "darkTheme": "Тёмная тема",
- "lightTheme": "Светлая тема",
- "background": "Фон",
- "surface": "Поверхность",
- "text": "Текст",
- "textSecondary": "Вторичный текст",
- "statusColors": "Статусные цвета",
- "success": "Успех",
- "warning": "Предупреждение",
- "error": "Ошибка",
- "preview": "Предпросмотр",
- "previewButton": "Основная кнопка",
- "previewSecondary": "Вторичная кнопка",
- "light": "Светлая тема",
- "dark": "Тёмная тема"
- },
- "languages": {
- "ru": "Русский",
- "en": "English",
- "zh": "中文",
- "fa": "فارسی"
- },
- "contests": {
- "title": "Конкурсы",
- "error": "Ошибка загрузки конкурсов",
- "noContests": "Нет доступных конкурсов",
- "days": "дней",
- "play": "Участвовать",
- "alreadyPlayed": "Уже участвовали",
- "enterAnswer": "Введите ответ",
- "submit": "Отправить",
- "imHere": "Я здесь!"
- },
- "polls": {
- "title": "Опросы",
- "error": "Ошибка загрузки опросов",
- "noPolls": "Нет доступных опросов",
- "questions": "вопросов",
- "question": "Вопрос",
- "of": "из",
- "start": "Начать",
- "continue": "Продолжить",
- "completed": "Завершён",
- "reward": "₽"
- },
- "info": {
- "title": "Информация",
- "faq": "FAQ",
- "rules": "Правила",
- "privacy": "Конфиденциальность",
- "offer": "Оферта",
- "noFaq": "Нет вопросов и ответов",
- "noContent": "Нет контента",
- "updatedAt": "Обновлено"
- },
- "onboarding": {
- "skip": "Пропустить",
- "finish": "Готово",
- "steps": {
- "welcome": {
- "title": "Добро пожаловать!",
- "description": "Это ваш личный кабинет. Здесь вы можете управлять подпиской, пополнять баланс и подключать устройства."
- },
- "connectDevices": {
- "title": "Подключите устройства",
- "description": "Нажмите эту кнопку, чтобы получить инструкции по подключению VPN на ваших устройствах."
- },
- "balance": {
- "title": "Ваш баланс",
- "description": "Здесь отображается ваш текущий баланс. Нажмите, чтобы пополнить его."
- },
- "subscription": {
- "title": "Статус подписки",
- "description": "Здесь вы видите сколько дней осталось до окончания подписки."
- },
- "quickActions": {
- "title": "Быстрые действия",
- "description": "Используйте эти кнопки для быстрого доступа к основным функциям: пополнению баланса, продлению подписки и приглашению друзей."
- }
- }
- }
+ "common": {
+ "loading": "Загрузка...",
+ "error": "Ошибка",
+ "success": "Успешно",
+ "save": "Сохранить",
+ "cancel": "Отмена",
+ "confirm": "Подтвердить",
+ "back": "Назад",
+ "next": "Далее",
+ "close": "Закрыть",
+ "search": "Поиск",
+ "noData": "Нет данных",
+ "actions": "Действия",
+ "yes": "Да",
+ "no": "Нет",
+ "or": "или",
+ "and": "и",
+ "edit": "Редактировать",
+ "delete": "Удалить",
+ "currency": "₽"
+ },
+ "nav": {
+ "dashboard": "Главная",
+ "subscription": "Подписка",
+ "balance": "Баланс",
+ "referral": "Рефералы",
+ "support": "Поддержка",
+ "profile": "Профиль",
+ "logout": "Выйти",
+ "contests": "Конкурсы",
+ "polls": "Опросы",
+ "info": "Информация",
+ "wheel": "Колесо удачи"
+ },
+ "auth": {
+ "login": "Вход",
+ "register": "Регистрация",
+ "logout": "Выход",
+ "email": "Email",
+ "password": "Пароль",
+ "confirmPassword": "Подтвердите пароль",
+ "forgotPassword": "Забыли пароль?",
+ "resetPassword": "Сбросить пароль",
+ "loginWithTelegram": "Войти через Telegram",
+ "loginWithEmail": "Войти по Email",
+ "noAccount": "Нет аккаунта?",
+ "hasAccount": "Уже есть аккаунт?",
+ "registerHint": "Для регистрации по email сначала авторизуйтесь через Telegram, затем привяжите email в настройках.",
+ "telegramRequired": "Требуется авторизация через Telegram",
+ "telegramNotConfigured": "Telegram бот не настроен",
+ "authenticating": "Авторизация...",
+ "orOpenInApp": "Или откройте бота в приложении",
+ "loginFailed": "Ошибка входа",
+ "tryAgain": "Попробовать снова",
+ "welcomeBack": "Добро пожаловать!",
+ "loginTitle": "Вход в личный кабинет",
+ "loginSubtitle": "Войдите через Telegram или используйте email"
+ },
+ "emailVerification": {
+ "title": "Подтверждение email",
+ "verifying": "Проверяем email...",
+ "pleaseWait": "Пожалуйста, подождите пока мы проверяем ваш email.",
+ "success": "Email подтверждён!",
+ "successMessage": "Ваш email успешно подтверждён. Теперь вы можете входить с помощью email и пароля.",
+ "failed": "Ошибка подтверждения",
+ "goToLogin": "Перейти к входу"
+ },
+ "dashboard": {
+ "title": "Личный кабинет",
+ "welcome": "Добро пожаловать, {{name}}!",
+ "yourSubscription": "Ваша подписка",
+ "quickActions": "Быстрые действия",
+ "viewSubscription": "Управление подпиской",
+ "topUpBalance": "Пополнить баланс",
+ "inviteFriends": "Пригласить друзей",
+ "getSupport": "Получить поддержку",
+ "currentBalance": "Текущий баланс",
+ "activeUntil": "Активна до",
+ "noActiveSubscription": "Нет активной подписки",
+ "devicesUsed": "Устройств: {{used}} из {{total}}",
+ "trafficUsed": "Трафик: {{used}} из {{total}} ГБ",
+ "unlimitedTraffic": "Безлимитный трафик"
+ },
+ "subscription": {
+ "title": "Подписка",
+ "currentPlan": "Текущий тариф",
+ "status": "Статус",
+ "active": "Активна",
+ "inactive": "Неактивна",
+ "trialStatus": "Пробный период",
+ "expired": "Истекла",
+ "expiresAt": "Действует до",
+ "daysLeft": "Осталось дней",
+ "devices": "Устройства",
+ "servers": "Серверы",
+ "traffic": "Трафик",
+ "unlimited": "Безлимит",
+ "used": "Использовано",
+ "of": "из",
+ "renew": "Продлить",
+ "extend": "Продлить подписку",
+ "buyTraffic": "Докупить трафик",
+ "buyDevices": "Докупить устройства",
+ "renewalOptions": "Варианты продления",
+ "days": "дней",
+ "hours": "ч",
+ "minutes": "м",
+ "price": "Цена",
+ "noSubscription": "У вас нет активной подписки",
+ "getSubscription": "Оформить подписку",
+ "connectionInfo": "Данные для подключения",
+ "copyLink": "Копировать ссылку",
+ "copied": "Скопировано!",
+ "showQR": "Показать QR-код",
+ "downloadConfig": "Скачать конфиг",
+ "trafficUsed": "Использовано трафика",
+ "timeLeft": "Осталось времени",
+ "getConfig": "Подключить устройства",
+ "autoRenewal": "Автопродление",
+ "daysBeforeExpiry": "дней до окончания",
+ "selectPeriod": "Выберите период",
+ "selectTraffic": "Выберите трафик",
+ "selectServers": "Выберите серверы",
+ "selectDevices": "Устройства",
+ "perDevice": "/ устройство",
+ "summary": "Итого",
+ "total": "К оплате",
+ "purchase": "Купить",
+ "step": "Шаг {{current}} из {{total}}",
+ "stepPeriod": "Период",
+ "stepTraffic": "Трафик",
+ "stepServers": "Серверы",
+ "stepDevices": "Устройства",
+ "stepConfirm": "Подтверждение",
+ "currentTariff": "Текущий",
+ "from": "от",
+ "month": "мес",
+ "insufficientBalance": "Недостаточно средств. Не хватает {{missing}} ₽",
+ "trial": {
+ "title": "Бесплатный пробный период",
+ "description": "Попробуйте наш VPN сервис бесплатно!",
+ "days": "дней",
+ "devices": "устройств",
+ "price": "Стоимость активации",
+ "activate": "Активировать пробный период",
+ "unavailable": "Пробный период недоступен"
+ },
+ "connection": {
+ "title": "Подключить VPN",
+ "selectDevice": "Выберите устройство",
+ "selectApp": "Выберите приложение",
+ "installApp": "1. Установите приложение",
+ "addSubscription": "2. Добавьте подписку",
+ "connectVpn": "3. Подключитесь к VPN",
+ "addToApp": "Добавить в {{appName}}",
+ "connect": "Подключить",
+ "noApps": "Нет приложений для этой платформы",
+ "noSubscription": "Для подключения нужна активная подписка",
+ "featured": "Рекомендуем",
+ "yourDevice": "Ваше устройство",
+ "copyLink": "Скопировать ссылку",
+ "copied": "Ссылка скопирована!",
+ "openLink": "Открыть ссылку"
+ },
+ "myDevices": "Мои устройства",
+ "noDevices": "Нет подключенных устройств",
+ "deleteDevice": "Удалить устройство",
+ "deleteAllDevices": "Удалить все",
+ "confirmDeleteDevice": "Удалить это устройство?",
+ "confirmDeleteAllDevices": "Удалить все устройства?",
+ "deviceDeleted": "Устройство удалено",
+ "allDevicesDeleted": "Все устройства удалены",
+ "platform": "Платформа",
+ "model": "Модель",
+ "connectedAt": "Подключено",
+ "pause": {
+ "title": "Пауза подписки",
+ "paused": "На паузе",
+ "active": "Активна",
+ "pauseBtn": "Приостановить",
+ "resumeBtn": "Возобновить",
+ "pausedMessage": "Подписка приостановлена",
+ "resumedMessage": "Подписка возобновлена",
+ "dailyOnly": "Пауза доступна только для суточных тарифов",
+ "pausedInfo": "Подписка приостановлена",
+ "pausedDescription": "Списания остановлены. Подписка будет действовать до",
+ "nextCharge": "До следующего списания",
+ "willBeCharged": "Будет списано",
+ "days_one": "день",
+ "days_few": "дня",
+ "days_many": "дней",
+ "hours": "ч",
+ "minutes": "м"
+ },
+ "dailyPurchase": {
+ "costPerDay": "Стоимость в день",
+ "chargedDaily": "Оплата списывается ежедневно с баланса",
+ "canPause": "Можно приостановить в любой момент",
+ "pausedOnLowBalance": "При недостатке баланса подписка будет приостановлена",
+ "activate": "Активировать за {{price}}"
+ },
+ "switchTariff": {
+ "title": "Сменить тариф",
+ "preview": "Предпросмотр",
+ "currentTariff": "Текущий тариф",
+ "newTariff": "Новый тариф",
+ "remainingDays": "Осталось дней",
+ "upgradeCost": "Доплата",
+ "free": "Бесплатно",
+ "switch": "Перейти",
+ "switched": "Тариф изменён",
+ "notEnoughBalance": "Недостаточно средств"
+ },
+ "switchTraffic": {
+ "title": "Изменить трафик",
+ "currentPackage": "Текущий пакет",
+ "newPackage": "Новый пакет",
+ "switch": "Изменить",
+ "switched": "Трафик изменён"
+ },
+ "purchasedTraffic": "Докупленный трафик",
+ "trafficResetAt": "Сброс"
+ },
+ "balance": {
+ "title": "Баланс",
+ "currentBalance": "Текущий баланс",
+ "topUp": "Пополнить",
+ "topUpBalance": "Пополнение баланса",
+ "paymentMethods": "Способы оплаты",
+ "transactionHistory": "История операций",
+ "noTransactions": "Нет операций",
+ "date": "Дата",
+ "type": "Тип",
+ "description": "Описание",
+ "amount": "Сумма",
+ "deposit": "Пополнение",
+ "withdrawal": "Списание",
+ "subscriptionPayment": "Оплата подписки",
+ "referralReward": "Реферальный бонус",
+ "minAmount": "Мин.",
+ "maxAmount": "Макс.",
+ "notAvailable": "Недоступно",
+ "useBot": "Для пополнения используйте Telegram бота.",
+ "page": "Страница {{current}} из {{total}}",
+ "invalidAmount": "Некорректная сумма",
+ "promocode": {
+ "title": "Промокод",
+ "placeholder": "Введите промокод",
+ "activate": "Активировать",
+ "activating": "Активация...",
+ "success": "Промокод успешно активирован!",
+ "balanceAdded": "На баланс начислено: {{amount}} ₽",
+ "errors": {
+ "not_found": "Промокод не найден",
+ "expired": "Срок действия промокода истёк",
+ "used": "Промокод уже использован",
+ "already_used_by_user": "Вы уже использовали этот промокод",
+ "user_not_found": "Пользователь не найден",
+ "server_error": "Ошибка сервера"
+ }
+ },
+ "minAmountError": "Минимальная сумма: {{amount}} ₽",
+ "maxAmountError": "Максимальная сумма: {{amount}} ₽",
+ "paymentOption": "Способ оплаты",
+ "selectPaymentOption": "Выберите способ оплаты",
+ "paymentMethods": {
+ "yookassa": {
+ "name": "ЮKassa",
+ "description": "Оплата через ЮKassa"
+ },
+ "cryptobot": {
+ "name": "CryptoBot",
+ "description": "Оплата криптовалютой через CryptoBot"
+ },
+ "telegram_stars": {
+ "name": "Telegram Stars",
+ "description": "Оплата через Telegram Stars"
+ },
+ "heleket": {
+ "name": "Heleket Crypto",
+ "description": "Оплата криптовалютой через Heleket"
+ },
+ "mulenpay": {
+ "name": "MulenPay",
+ "description": "Оплата через MulenPay"
+ },
+ "pal24": {
+ "name": "PAL24",
+ "description": "Оплата через PAL24"
+ },
+ "platega": {
+ "name": "Platega",
+ "description": "Оплата через Platega"
+ },
+ "wata": {
+ "name": "Wata",
+ "description": "Оплата через Wata"
+ },
+ "cloudpayments": {
+ "name": "CloudPayments",
+ "description": "Оплата банковской картой через CloudPayments"
+ },
+ "freekassa": {
+ "name": "FreeKassa",
+ "description": "Оплата через FreeKassa"
+ }
+ },
+ "pendingPayments": {
+ "title": "Ожидающие платежи",
+ "pay": "Оплатить",
+ "checkStatus": "Проверить статус",
+ "checking": "Проверка..."
+ }
+ },
+ "referral": {
+ "title": "Реферальная программа",
+ "yourLink": "Ваша реферальная ссылка",
+ "copyLink": "Копировать ссылку",
+ "copied": "Скопировано!",
+ "shareButton": "Поделиться",
+ "shareMessage": "Заходи в Cabinet по моей ссылке и получай до {{percent}}% кешбэка!",
+ "shareHint": "Поделитесь ссылкой с друзьями. Когда они зарегистрируются и оплатят, вы получите {{percent}}% комиссии!",
+ "stats": {
+ "totalReferrals": "Всего рефералов",
+ "activeReferrals": "Активных",
+ "totalEarnings": "Общий заработок",
+ "commissionRate": "Комиссия"
+ },
+ "terms": {
+ "title": "Условия программы",
+ "commission": "Комиссия",
+ "minTopup": "Мин. пополнение",
+ "newUserBonus": "Бонус новому пользователю",
+ "inviterBonus": "Бонус пригласившему"
+ },
+ "yourReferrals": "Ваши рефералы",
+ "noReferrals": "Пока нет рефералов. Поделитесь ссылкой, чтобы пригласить друзей!",
+ "user": "Пользователь",
+ "joined": "Присоединился",
+ "hasPaid": "Оплатил",
+ "status": {
+ "pending": "Ожидание",
+ "paid": "Оплачено"
+ },
+ "earningsHistory": "История начислений",
+ "reason": "Причина",
+ "reasons": {
+ "referral_registration_pending": "Регистрация реферала",
+ "referral_registration": "Регистрация реферала",
+ "referral_first_payment": "Первая оплата реферала",
+ "referral_subscription_renewal": "Продление подписки реферала",
+ "referral_bonus": "Бонус за реферала"
+ }
+ },
+ "support": {
+ "title": "Поддержка",
+ "newTicket": "Новый тикет",
+ "yourTickets": "Ваши обращения",
+ "noTickets": "Нет обращений",
+ "createTicket": "Создать обращение",
+ "subject": "Тема",
+ "subjectPlaceholder": "Кратко опишите проблему",
+ "message": "Сообщение",
+ "messagePlaceholder": "Подробно опишите вашу проблему...",
+ "send": "Отправить",
+ "sending": "Отправка...",
+ "creating": "Создание...",
+ "reply": "Ответить",
+ "replyPlaceholder": "Введите ваш ответ...",
+ "sendReply": "Отправить ответ",
+ "you": "Вы",
+ "supportTeam": "Поддержка",
+ "selectTicket": "Выберите обращение или создайте новое",
+ "created": "Создано",
+ "repliesDisabled": "Ответы на это обращение отключены",
+ "status": {
+ "open": "Открыт",
+ "answered": "Отвечен",
+ "pending": "Ожидает",
+ "closed": "Закрыт"
+ },
+ "attachImage": "Прикрепить изображение",
+ "invalidFileType": "Неверный тип файла. Используйте JPEG, PNG, GIF или WebP.",
+ "fileTooLarge": "Файл слишком большой. Максимальный размер 10МБ.",
+ "uploadFailed": "Не удалось загрузить изображение",
+ "imageLoadFailed": "Не удалось загрузить изображение",
+ "ticketsDisabled": "Тикеты отключены",
+ "useProfile": "Для получения поддержки перейдите в профиль бота",
+ "goToProfile": "Перейти в профиль",
+ "useExternalLink": "Для получения поддержки воспользуйтесь внешней ссылкой",
+ "openSupport": "Открыть поддержку",
+ "contactSupport": "Для получения поддержки обратитесь к {{username}}",
+ "contactUs": "Связаться с поддержкой"
+ },
+ "wheel": {
+ "title": "Колесо удачи",
+ "disabled": "Колесо удачи временно недоступно",
+ "spinsRemaining": "Осталось вращений сегодня",
+ "choosePayment": "Выберите способ оплаты",
+ "stars": "Stars",
+ "telegramStars": "Telegram Stars",
+ "days": "дней",
+ "subscriptionDays": "Дни подписки",
+ "day": "День",
+ "spin": "КРУТИТЬ!",
+ "spinning": "Крутится...",
+ "history": "История",
+ "recentSpins": "Последние вращения",
+ "congratulations": "Поздравляем!",
+ "noLuck": "Не повезло!",
+ "oops": "Упс!",
+ "yourPromoCode": "Ваш промокод:",
+ "close": "Закрыть",
+ "errors": {
+ "networkError": "Произошла ошибка сети",
+ "loadFailed": "Не удалось загрузить конфигурацию колеса",
+ "dailyLimitReached": "Достигнут дневной лимит вращений",
+ "cannotSpin": "Сейчас нельзя крутить",
+ "insufficientBalance": "Недостаточно средств на балансе",
+ "topUpRequired": "Пополните баланс для оплаты спина",
+ "starsNotAvailable": "Оплата Stars недоступна. Откройте приложение через Telegram."
+ },
+ "payWithStars": "Оплатить Stars",
+ "payWithDays": "Оплатить днями",
+ "processingPayment": "Обработка...",
+ "starsPaymentSuccess": "Оплата прошла! Результат спина отправлен в Telegram.",
+ "starsPaymentSuccessCheckHistory": "Оплата прошла! Проверьте историю или Telegram для результата.",
+ "starsPaymentFailed": "Ошибка оплаты. Попробуйте еще раз.",
+ "youWon": "Вы выиграли",
+ "noPrize": "В этот раз не повезло...",
+ "noHistory": "История вращений пуста",
+ "banner": {
+ "title": "Испытай удачу!",
+ "description": "Крути колесо и выигрывай призы: дни подписки, баланс, трафик и многое другое!",
+ "button": "Перейти к колесу"
+ }
+ },
+ "admin": {
+ "nav": {
+ "title": "Админка",
+ "dashboard": "Статистика",
+ "tickets": "Тикеты",
+ "settings": "Настройки",
+ "apps": "Приложения",
+ "wheel": "Колесо",
+ "tariffs": "Тарифы",
+ "servers": "Серверы",
+ "broadcasts": "Рассылки",
+ "users": "Пользователи",
+ "payments": "Платежи",
+ "remnawave": "RemnaWave"
+ },
+ "panel": {
+ "title": "Панель администратора",
+ "subtitle": "Управление системой",
+ "dashboardDesc": "Статистика и мониторинг системы",
+ "ticketsDesc": "Обработка обращений пользователей",
+ "settingsDesc": "Настройки системы и параметры",
+ "appsDesc": "Управление приложениями для подключения",
+ "wheelDesc": "Настройка колеса удачи и призов",
+ "tariffsDesc": "Управление тарифными планами",
+ "serversDesc": "Настройка VPN серверов",
+ "broadcastsDesc": "Массовая отправка сообщений",
+ "usersDesc": "Управление пользователями бота",
+ "paymentsDesc": "Проверка платежей",
+ "remnawaveDesc": "Управление панелью и статистика"
+ },
+ "payments": {
+ "title": "Проверка платежей",
+ "description": "Ожидающие платежи за последние 24 часа",
+ "totalPending": "Всего ожидает",
+ "filterByMethod": "Фильтр по методу",
+ "noPayments": "Нет ожидающих платежей",
+ "paid": "Оплачено",
+ "user": "Пользователь",
+ "openLink": "Открыть ссылку",
+ "checkStatus": "Проверить статус",
+ "checking": "Проверка..."
+ },
+ "remnawave": {
+ "title": "RemnaWave",
+ "subtitle": "Управление панелью и статистика",
+ "connected": "Подключено",
+ "disconnected": "Не настроено",
+ "noData": "Не удалось загрузить данные",
+ "tabs": {
+ "overview": "Обзор",
+ "nodes": "Ноды",
+ "squads": "Сквады",
+ "sync": "Синхронизация"
+ },
+ "overview": {
+ "system": "Система",
+ "usersOnline": "Онлайн",
+ "totalUsers": "Всего пользователей",
+ "nodesOnline": "Нод онлайн",
+ "connections": "Подключений",
+ "bandwidth": "Пропускная способность",
+ "download": "Загрузка",
+ "upload": "Отдача",
+ "total": "Всего",
+ "server": "Сервер",
+ "cpu": "CPU",
+ "memory": "Память",
+ "uptime": "Аптайм",
+ "traffic": "Статистика трафика",
+ "usersByStatus": "Пользователи по статусу"
+ },
+ "nodes": {
+ "online": "Онлайн",
+ "offline": "Офлайн",
+ "disabled": "Отключена",
+ "noNodes": "Ноды не найдены",
+ "restart": "Перезапустить",
+ "enable": "Включить",
+ "disable": "Отключить",
+ "restartAll": "Перезапустить все",
+ "confirmRestartAll": "Вы уверены, что хотите перезапустить все ноды?"
+ },
+ "squads": {
+ "synced": "Синхронизирован",
+ "notSynced": "Не синхронизирован",
+ "noSquads": "Сквады не найдены",
+ "syncServers": "Синхронизировать серверы"
+ },
+ "sync": {
+ "autoSync": "Автосинхронизация",
+ "runNow": "Запустить сейчас",
+ "manual": "Ручная синхронизация",
+ "fromPanel": "Синхронизация из панели",
+ "fromPanelDesc": "Импорт пользователей из RemnaWave панели в базу бота",
+ "toPanel": "Синхронизация в панель",
+ "toPanelDesc": "Экспорт пользователей из базы бота в RemnaWave панель",
+ "subscriptions": "Подписки",
+ "validate": "Валидация",
+ "validateDesc": "Проверка и исправление несоответствий подписок",
+ "cleanup": "Очистка",
+ "cleanupDesc": "Удаление orphaned подписок без пользователей",
+ "statuses": "Синхронизация статусов",
+ "statusesDesc": "Синхронизация статусов подписок с панелью"
+ }
+ },
+ "wheel": {
+ "title": "Настройки колеса удачи",
+ "enabled": "Включено",
+ "disabled": "Выключено",
+ "tabs": {
+ "settings": "Настройки",
+ "prizes": "Призы",
+ "statistics": "Статистика"
+ },
+ "settings": {
+ "enableWheel": "Включить колесо",
+ "allowSpins": "Разрешить пользователям крутить колесо",
+ "costInStars": "Стоимость в Stars",
+ "costInDays": "Стоимость в днях",
+ "rtpPercent": "RTP (Return to Player) %",
+ "dailyLimit": "Дневной лимит вращений (0 = безлимит)",
+ "minSubDays": "Мин. дней подписки для оплаты днями",
+ "promoPrefix": "Префикс промокодов"
+ },
+ "prizes": {
+ "addPrize": "Добавить приз",
+ "editPrize": "Редактировать приз",
+ "noPrizes": "Призы не настроены. Добавьте призы для активации колеса.",
+ "deletePrize": "Удалить этот приз?",
+ "types": {
+ "subscription_days": "Дни подписки",
+ "balance_bonus": "Бонус баланса",
+ "traffic_gb": "Трафик ГБ",
+ "promocode": "Промокод",
+ "nothing": "Ничего (пусто)"
+ },
+ "fields": {
+ "type": "Тип",
+ "displayName": "Название",
+ "value": "Значение",
+ "valueKopeks": "Стоимость в копейках (для RTP)",
+ "emoji": "Эмодзи",
+ "color": "Цвет",
+ "active": "Активен",
+ "worth": "Стоимость"
+ },
+ "promo": {
+ "title": "Настройки промокода",
+ "balanceBonus": "Бонус баланса (копейки)",
+ "subscriptionDays": "Дни подписки"
+ }
+ },
+ "statistics": {
+ "totalSpins": "Всего вращений",
+ "revenue": "Доход",
+ "payouts": "Выплаты",
+ "actualRtp": "Фактический RTP",
+ "targetRtp": "цель",
+ "prizeDistribution": "Распределение призов",
+ "times": "раз",
+ "topWins": "Топ выигрышей"
+ }
+ },
+ "broadcasts": {
+ "title": "Рассылки",
+ "subtitle": "Массовая отправка сообщений пользователям",
+ "create": "Создать рассылку",
+ "empty": "Рассылок пока нет",
+ "selectFilter": "Выберите аудиторию",
+ "selectFilterPlaceholder": "Выберите фильтр...",
+ "recipients": "получ.",
+ "messageText": "Текст сообщения",
+ "messageTextPlaceholder": "Введите текст рассылки...",
+ "media": "Медиафайл",
+ "addMedia": "Добавить медиа",
+ "uploading": "Загрузка...",
+ "buttons": "Кнопки",
+ "willBeSent": "Будет отправлено",
+ "users": "пользователям",
+ "send": "Отправить",
+ "stop": "Остановить",
+ "progress": "Прогресс",
+ "total": "Всего",
+ "sent": "Отправлено",
+ "failed": "Ошибки",
+ "filter": "Фильтр",
+ "message": "Сообщение",
+ "unknownAdmin": "Неизвестный админ"
+ },
+ "settings": {
+ "title": "Настройки системы",
+ "allCategories": "Все категории",
+ "noSettings": "Настройки не найдены",
+ "modified": "Изменено",
+ "readOnly": "Только чтение",
+ "reset": "Сбросить",
+ "categoriesCount": "категорий",
+ "settingsCount": "настроек",
+ "expandAll": "Развернуть все",
+ "collapseAll": "Свернуть все",
+ "searchPlaceholder": "Поиск настроек...",
+ "searchCategoriesPlaceholder": "Поиск категорий...",
+ "noSearchResults": "Ничего не найдено",
+ "example": "Пример"
+ },
+ "apps": {
+ "title": "Управление приложениями",
+ "addApp": "Добавить приложение",
+ "addFirstApp": "Добавить первое приложение",
+ "noApps": "Нет приложений для этой платформы",
+ "createApp": "Создать приложение",
+ "editApp": "Редактировать приложение",
+ "confirmDelete": "Вы уверены, что хотите удалить это приложение?",
+ "copyTo": "Копировать в...",
+ "appId": "ID приложения",
+ "appName": "Название",
+ "urlScheme": "URL схема",
+ "featured": "Рекомендованное",
+ "base64Encoding": "Base64 кодирование",
+ "buttons": "Кнопки",
+ "button": "Кнопка",
+ "addButton": "Добавить кнопку",
+ "buttonText": "Текст кнопки",
+ "installDescription": "Описание установки",
+ "subscriptionDescription": "Описание добавления подписки",
+ "connectDescription": "Описание подключения",
+ "beforeSubscription": "До добавления подписки",
+ "afterSubscription": "После добавления подписки",
+ "stepTitle": "Заголовок",
+ "stepDescription": "Описание",
+ "tabs": {
+ "basic": "Основное",
+ "installation": "Установка",
+ "subscription": "Подписка",
+ "connect": "Подключение",
+ "additional": "Дополнительно"
+ },
+ "import": "Импорт",
+ "export": "Экспорт",
+ "importApps": "Импорт приложений из JSON",
+ "exportApps": "Экспорт приложений в JSON",
+ "importPreview": "Предпросмотр импорта",
+ "confirmImport": "Импортировать",
+ "importError": "Неверный формат JSON файла",
+ "importCreateError": "Ошибка при создании приложений",
+ "noAppsToImport": "Нет приложений для импорта",
+ "remnaWaveToggle": "Переключить источник RemnaWave",
+ "refreshRemnaWave": "Обновить данные из RemnaWave",
+ "remnaWaveMode": "Отображаются приложения из панели RemnaWave. Режим только для чтения.",
+ "remnaWaveSettings": "Настройки RemnaWave",
+ "remnaWaveConfigUuid": "UUID конфигурации",
+ "remnaWaveConfigUuidHint": "UUID конфигурации страницы подписки из панели RemnaWave",
+ "availableConfigs": "Доступные конфигурации"
+ },
+ "tickets": {
+ "title": "Управление тикетами",
+ "total": "Всего",
+ "list": "Тикеты",
+ "noTickets": "Нет тикетов",
+ "selectTicket": "Выберите тикет из списка",
+ "allStatuses": "Все статусы",
+ "statusOpen": "Открыт",
+ "statusPending": "Ожидает",
+ "statusAnswered": "Отвечен",
+ "statusClosed": "Закрыт",
+ "from": "От",
+ "created": "Создан",
+ "user": "Пользователь",
+ "you": "Вы",
+ "userLabel": "Пользователь",
+ "adminLabel": "Админ",
+ "replyPlaceholder": "Введите ваш ответ...",
+ "sendReply": "Отправить",
+ "settings": "Настройки",
+ "supportMode": "Режим поддержки",
+ "supportModeDesc": "Выберите, как пользователи могут связаться с поддержкой",
+ "modeBoth": "Тикеты и контакт",
+ "modeTickets": "Только тикеты",
+ "modeContact": "Только контакт",
+ "slaSettings": "Настройки SLA",
+ "slaEnabled": "Включить SLA (мониторинг времени ответа)",
+ "slaEnabledDesc": "Автоматические уведомления о просроченных тикетах",
+ "slaMinutes": "Время ответа (минуты)",
+ "slaMinutesDesc": "Максимальное время для ответа на тикет (1-1440 минут)",
+ "checkInterval": "Интервал проверки (секунды)",
+ "checkIntervalDesc": "Как часто проверять просроченные тикеты (30-600 секунд)",
+ "reminderCooldown": "Интервал напоминаний (минуты)",
+ "reminderCooldownDesc": "Минимальное время между напоминаниями (1-120 минут)",
+ "settingsUpdateError": "Ошибка сохранения настроек"
+ },
+ "tariffs": {
+ "title": "Управление тарифами",
+ "subtitle": "Настройка тарифных планов",
+ "create": "Создать тариф",
+ "edit": "Редактировать тариф",
+ "noTariffs": "Нет тарифов",
+ "name": "Название",
+ "namePlaceholder": "Введите название тарифа",
+ "description": "Описание",
+ "descriptionPlaceholder": "Введите описание тарифа",
+ "trafficLimit": "Лимит трафика",
+ "trafficHint": "0 = безлимитный трафик",
+ "deviceLimit": "Лимит устройств",
+ "tierLevel": "Уровень тарифа",
+ "tierHint": "1-10, влияет на приоритет при переходе",
+ "unlimited": "Безлимит",
+ "devices": "устр.",
+ "servers": "серверов",
+ "subscriptions": "подписок",
+ "trial": "Триал",
+ "inactive": "Неактивен",
+ "activate": "Активировать",
+ "deactivate": "Деактивировать",
+ "toggleTrial": "Переключить триал",
+ "delete": "Удалить",
+ "confirmDelete": "Удалить тариф?",
+ "confirmDeleteText": "Это действие нельзя отменить. Тариф будет удален навсегда.",
+ "days": "дней",
+ "tabs": {
+ "basic": "Основное",
+ "prices": "Цены",
+ "servers": "Серверы"
+ },
+ "pricesHint": "Включите нужные периоды и установите цены (в рублях)",
+ "periodDisabled": "Отключено",
+ "serversHint": "Выберите серверы, доступные для этого тарифа. Для каждого сервера можно указать индивидуальный лимит трафика.",
+ "noServers": "Нет доступных серверов",
+ "serverTrafficLimit": "Лимит трафика",
+ "useDefault": "по умолчанию"
+ },
+ "servers": {
+ "title": "Управление серверами",
+ "subtitle": "Настройка серверов VPN",
+ "sync": "Синхронизировать",
+ "syncing": "Синхронизация...",
+ "syncNow": "Синхронизировать сейчас",
+ "noServers": "Нет серверов. Синхронизируйте с RemnaWave.",
+ "edit": "Редактировать сервер",
+ "originalName": "Оригинальное название",
+ "displayName": "Отображаемое название",
+ "displayNamePlaceholder": "Введите название",
+ "description": "Описание",
+ "descriptionPlaceholder": "Введите описание сервера",
+ "countryCode": "Код страны",
+ "price": "Цена",
+ "priceHint": "Дополнительная стоимость сервера",
+ "maxUsers": "Максимум пользователей",
+ "sortOrder": "Порядок сортировки",
+ "unlimited": "Без лимита",
+ "stats": "Статистика",
+ "currentUsers": "Текущих пользователей",
+ "activeSubscriptions": "Активных подписок",
+ "usedByTariffs": "Используется в тарифах",
+ "trial": "Триал",
+ "unavailable": "Недоступен",
+ "full": "Заполнен",
+ "enable": "Включить",
+ "disable": "Отключить",
+ "toggleTrial": "Переключить триал",
+ "loadError": "Не удалось загрузить сервер"
+ }
+ },
+ "adminDashboard": {
+ "title": "Панель статистики",
+ "subtitle": "Обзор системы в реальном времени",
+ "refresh": "Обновить",
+ "loadError": "Не удалось загрузить статистику",
+ "stats": {
+ "usersOnline": "Пользователей онлайн",
+ "activeSubscriptions": "Активных подписок",
+ "incomeToday": "Доход за сегодня",
+ "incomeMonth": "Доход за месяц",
+ "incomeTotal": "Общий доход",
+ "subscriptionIncome": "Доход от подписок",
+ "total": "всего"
+ },
+ "nodes": {
+ "title": "Ноды",
+ "online": "Онлайн",
+ "offline": "Оффлайн",
+ "disabled": "Отключена",
+ "noNodes": "Нет доступных нод",
+ "usersOnline": "Онлайн",
+ "traffic": "Трафик",
+ "enable": "Включить",
+ "disable": "Отключить"
+ },
+ "revenue": {
+ "title": "Доходы",
+ "last7Days": "За последние 7 дней"
+ },
+ "subscriptions": {
+ "title": "Подписки",
+ "subtitle": "Статистика подписок",
+ "active": "Активных",
+ "trial": "Пробных",
+ "paid": "Оплаченных",
+ "expired": "Истекших",
+ "newSubscriptions": "Новые подписки",
+ "today": "Сегодня",
+ "week": "Неделя",
+ "month": "Месяц",
+ "conversion": "Конверсия триал→платные"
+ },
+ "servers": {
+ "title": "Серверы",
+ "total": "Всего серверов",
+ "available": "Доступных",
+ "withConnections": "С подключениями",
+ "revenue": "Доход"
+ },
+ "tariffs": {
+ "title": "Статистика по тарифам",
+ "subtitle": "Распределение подписок по тарифам",
+ "tariffName": "Тариф",
+ "activeSubscriptions": "Активных",
+ "trialSubscriptions": "Триал",
+ "purchasedToday": "Сегодня",
+ "purchasedWeek": "Неделя",
+ "purchasedMonth": "Месяц",
+ "noTariffs": "Нет тарифов"
+ }
+ },
+ "adminUsers": {
+ "title": "Пользователи",
+ "subtitle": "Управление пользователями",
+ "searchPlaceholder": "Поиск по ID, username, имени...",
+ "filters": {
+ "all": "Все",
+ "active": "Активные",
+ "blocked": "Заблокированные",
+ "deleted": "Удалённые"
+ },
+ "sort": {
+ "created_at": "Дата регистрации",
+ "balance": "Баланс",
+ "traffic": "Трафик",
+ "last_activity": "Активность",
+ "total_spent": "Потрачено",
+ "purchase_count": "Покупки"
+ },
+ "stats": {
+ "totalUsers": "Всего пользователей",
+ "activeUsers": "Активных",
+ "blockedUsers": "Заблокировано",
+ "withSubscription": "С подпиской",
+ "newToday": "Новых сегодня",
+ "newWeek": "За неделю",
+ "newMonth": "За месяц",
+ "totalBalance": "Общий баланс",
+ "activeToday": "Активны сегодня",
+ "activeWeek": "За неделю",
+ "activeMonth": "За месяц"
+ },
+ "table": {
+ "user": "Пользователь",
+ "status": "Статус",
+ "balance": "Баланс",
+ "subscription": "Подписка",
+ "spent": "Потрачено",
+ "registered": "Регистрация",
+ "activity": "Активность",
+ "noUsers": "Пользователи не найдены"
+ },
+ "userStatus": {
+ "active": "Активен",
+ "blocked": "Заблокирован",
+ "deleted": "Удалён"
+ },
+ "subscriptionStatus": {
+ "active": "Активна",
+ "trial": "Триал",
+ "expired": "Истекла",
+ "none": "Нет подписки"
+ },
+ "detail": {
+ "title": "Информация о пользователе",
+ "tabs": {
+ "info": "Инфо",
+ "subscription": "Подписка",
+ "balance": "Баланс",
+ "sync": "Синхронизация"
+ },
+ "telegramId": "Telegram ID",
+ "username": "Username",
+ "fullName": "Имя",
+ "email": "Email",
+ "emailVerified": "Подтверждён",
+ "emailNotVerified": "Не подтверждён",
+ "language": "Язык",
+ "registeredAt": "Регистрация",
+ "lastActivity": "Последняя активность",
+ "cabinetLogin": "Вход в кабинет",
+ "referralCode": "Реферальный код",
+ "referralsCount": "Рефералов",
+ "referralEarnings": "Заработано",
+ "referredBy": "Приглашён",
+ "promoGroup": "Промо-группа",
+ "noPromoGroup": "Не задана",
+ "restrictions": "Ограничения",
+ "restrictionTopup": "Пополнение баланса",
+ "restrictionSubscription": "Покупка подписки",
+ "restrictionReason": "Причина",
+ "noRestrictions": "Нет ограничений",
+ "totalSpent": "Всего потрачено",
+ "purchaseCount": "Покупок",
+ "usedPromocodes": "Использовано промокодов",
+ "lifetimeTraffic": "Трафик за всё время",
+ "recentTransactions": "Последние транзакции",
+ "noTransactions": "Нет транзакций"
+ },
+ "subscription": {
+ "noSubscription": "Подписка отсутствует",
+ "currentTariff": "Текущий тариф",
+ "status": "Статус",
+ "endDate": "Окончание",
+ "daysRemaining": "Осталось дней",
+ "trafficUsed": "Использовано трафика",
+ "deviceLimit": "Лимит устройств",
+ "autopay": "Автоплатёж",
+ "enabled": "Включён",
+ "disabled": "Отключён",
+ "actions": {
+ "extend": "Продлить",
+ "changeTariff": "Сменить тариф",
+ "setTraffic": "Установить трафик",
+ "toggleAutopay": "Вкл/выкл автоплатёж",
+ "cancel": "Отменить подписку",
+ "create": "Создать подписку"
+ },
+ "extendDays": "Дней",
+ "selectTariff": "Выберите тариф",
+ "trafficLimitGb": "Лимит ГБ",
+ "trafficUsedGb": "Использовано ГБ",
+ "isTrial": "Пробный период"
+ },
+ "balance": {
+ "currentBalance": "Текущий баланс",
+ "addFunds": "Пополнить",
+ "deductFunds": "Списать",
+ "amount": "Сумма",
+ "description": "Описание",
+ "createTransaction": "Создать транзакцию",
+ "transactionHistory": "История транзакций"
+ },
+ "sync": {
+ "title": "Синхронизация с панелью",
+ "status": "Статус синхронизации",
+ "lastSync": "Последняя синхронизация",
+ "neverSynced": "Никогда",
+ "botData": "Данные бота",
+ "panelData": "Данные панели",
+ "notFound": "Не найден в панели",
+ "differences": "Различия",
+ "noDifferences": "Различий нет",
+ "syncFromPanel": "Синхронизировать из панели",
+ "syncToPanel": "Синхронизировать в панель",
+ "remawave_uuid": "Remnawave UUID",
+ "notLinked": "Не привязан"
+ },
+ "actions": {
+ "block": "Заблокировать",
+ "unblock": "Разблокировать",
+ "delete": "Удалить",
+ "blockReason": "Причина блокировки",
+ "confirmBlock": "Подтвердить блокировку",
+ "confirmDelete": "Подтвердить удаление"
+ },
+ "messages": {
+ "loadError": "Не удалось загрузить пользователей",
+ "userLoadError": "Не удалось загрузить пользователя",
+ "balanceUpdated": "Баланс обновлён",
+ "balanceError": "Ошибка обновления баланса",
+ "subscriptionUpdated": "Подписка обновлена",
+ "subscriptionError": "Ошибка обновления подписки",
+ "statusUpdated": "Статус обновлён",
+ "statusError": "Ошибка обновления статуса",
+ "syncSuccess": "Синхронизация выполнена",
+ "syncError": "Ошибка синхронизации"
+ }
+ },
+ "profile": {
+ "title": "Профиль",
+ "accountInfo": "Информация об аккаунте",
+ "telegramId": "Telegram ID",
+ "username": "Имя пользователя",
+ "name": "Имя",
+ "registeredAt": "Дата регистрации",
+ "emailAuth": "Авторизация по Email",
+ "linkEmailDescription": "Привяжите email для входа без Telegram. После привязки на ваш email придёт письмо для подтверждения.",
+ "linkEmail": "Привязать Email",
+ "emailRequired": "Введите email",
+ "passwordMinLength": "Пароль должен быть минимум 8 символов",
+ "passwordsMismatch": "Пароли не совпадают",
+ "passwordPlaceholder": "Введите пароль",
+ "confirmPasswordPlaceholder": "Подтвердите пароль",
+ "passwordHint": "Минимум 8 символов",
+ "emailSent": "Письмо для подтверждения отправлено! Проверьте почту.",
+ "verified": "Подтверждён",
+ "notVerified": "Не подтверждён",
+ "verificationRequired": "Подтвердите email для использования входа по почте.",
+ "resendVerification": "Отправить письмо повторно",
+ "verificationResent": "Письмо отправлено повторно!",
+ "canLoginWithEmail": "Теперь вы можете входить с помощью email и пароля.",
+ "notifications": {
+ "title": "Настройки уведомлений",
+ "subscriptionExpiry": "Окончание подписки",
+ "subscriptionExpiryDesc": "Уведомлять о скором истечении подписки",
+ "daysBeforeExpiry": "Дней до окончания",
+ "trafficWarning": "Предупреждение о трафике",
+ "trafficWarningDesc": "Уведомлять при достижении лимита трафика",
+ "atPercent": "При использовании",
+ "balanceLow": "Низкий баланс",
+ "balanceLowDesc": "Уведомлять о низком балансе",
+ "threshold": "Порог",
+ "news": "Новости",
+ "newsDesc": "Получать новости и обновления сервиса",
+ "promoOffers": "Промо-предложения",
+ "promoOffersDesc": "Получать специальные предложения и скидки",
+ "unavailable": "Настройки уведомлений недоступны"
+ }
+ },
+ "theme": {
+ "colors": "Цвета темы",
+ "reset": "Сбросить",
+ "accent": "Акцентный цвет",
+ "accentDescription": "Основной цвет бренда для кнопок, ссылок и интерактивных элементов",
+ "darkTheme": "Тёмная тема",
+ "lightTheme": "Светлая тема",
+ "background": "Фон",
+ "surface": "Поверхность",
+ "text": "Текст",
+ "textSecondary": "Вторичный текст",
+ "statusColors": "Статусные цвета",
+ "success": "Успех",
+ "warning": "Предупреждение",
+ "error": "Ошибка",
+ "preview": "Предпросмотр",
+ "previewButton": "Основная кнопка",
+ "previewSecondary": "Вторичная кнопка",
+ "light": "Светлая тема",
+ "dark": "Тёмная тема"
+ },
+ "languages": {
+ "ru": "Русский",
+ "en": "English",
+ "zh": "中文",
+ "fa": "فارسی"
+ },
+ "contests": {
+ "title": "Конкурсы",
+ "error": "Ошибка загрузки конкурсов",
+ "noContests": "Нет доступных конкурсов",
+ "days": "дней",
+ "play": "Участвовать",
+ "alreadyPlayed": "Уже участвовали",
+ "enterAnswer": "Введите ответ",
+ "submit": "Отправить",
+ "imHere": "Я здесь!"
+ },
+ "polls": {
+ "title": "Опросы",
+ "error": "Ошибка загрузки опросов",
+ "noPolls": "Нет доступных опросов",
+ "questions": "вопросов",
+ "question": "Вопрос",
+ "of": "из",
+ "start": "Начать",
+ "continue": "Продолжить",
+ "completed": "Завершён",
+ "reward": "₽"
+ },
+ "info": {
+ "title": "Информация",
+ "faq": "FAQ",
+ "rules": "Правила",
+ "privacy": "Конфиденциальность",
+ "offer": "Оферта",
+ "noFaq": "Нет вопросов и ответов",
+ "noContent": "Нет контента",
+ "updatedAt": "Обновлено"
+ },
+ "onboarding": {
+ "skip": "Пропустить",
+ "finish": "Готово",
+ "steps": {
+ "welcome": {
+ "title": "Добро пожаловать!",
+ "description": "Это ваш личный кабинет. Здесь вы можете управлять подпиской, пополнять баланс и подключать устройства."
+ },
+ "connectDevices": {
+ "title": "Подключите устройства",
+ "description": "Нажмите эту кнопку, чтобы получить инструкции по подключению VPN на ваших устройствах."
+ },
+ "balance": {
+ "title": "Ваш баланс",
+ "description": "Здесь отображается ваш текущий баланс. Нажмите, чтобы пополнить его."
+ },
+ "subscription": {
+ "title": "Статус подписки",
+ "description": "Здесь вы видите сколько дней осталось до окончания подписки."
+ },
+ "quickActions": {
+ "title": "Быстрые действия",
+ "description": "Используйте эти кнопки для быстрого доступа к основным функциям: пополнению баланса, продлению подписки и приглашению друзей."
+ }
+ }
+ },
+ "promo": {
+ "activeDiscount": "Активная скидка",
+ "discountActive": "Скидка активна!",
+ "discountDescription": "Ваша персональная скидка применяется к покупке подписки",
+ "expiresIn": "Истекает через",
+ "source": "Источник",
+ "useNow": "Использовать сейчас",
+ "discountApplied": "Скидка применена",
+ "time": {
+ "days": "д",
+ "hours": "ч",
+ "minutes": "м"
+ }
+ }
}
diff --git a/src/locales/zh.json b/src/locales/zh.json
index edebd43..bb0e0d2 100644
--- a/src/locales/zh.json
+++ b/src/locales/zh.json
@@ -1,766 +1,780 @@
{
- "common": {
- "loading": "加载中...",
- "error": "错误",
- "success": "成功",
- "save": "保存",
- "cancel": "取消",
- "confirm": "确认",
- "back": "返回",
- "next": "下一步",
- "close": "关闭",
- "search": "搜索",
- "noData": "暂无数据",
- "actions": "操作",
- "yes": "是",
- "no": "否",
- "or": "或",
- "and": "和",
- "edit": "编辑",
- "delete": "删除",
- "currency": "¥"
- },
- "nav": {
- "dashboard": "首页",
- "subscription": "订阅",
- "balance": "余额",
- "referral": "推荐",
- "support": "支持",
- "profile": "个人资料",
- "logout": "退出",
- "contests": "活动",
- "polls": "问卷",
- "info": "信息",
- "wheel": "幸运转盘"
- },
- "auth": {
- "login": "登录",
- "register": "注册",
- "logout": "退出",
- "email": "邮箱",
- "password": "密码",
- "confirmPassword": "确认密码",
- "forgotPassword": "忘记密码?",
- "resetPassword": "重置密码",
- "loginWithTelegram": "通过Telegram登录",
- "loginWithEmail": "通过邮箱登录",
- "noAccount": "没有账户?",
- "hasAccount": "已有账户?",
- "registerHint": "要通过邮箱注册,请先通过Telegram登录,然后在设置中绑定邮箱。",
- "telegramRequired": "需要Telegram授权",
- "telegramNotConfigured": "Telegram机器人未配置",
- "authenticating": "正在验证...",
- "orOpenInApp": "或在应用中打开机器人",
- "loginFailed": "登录失败",
- "tryAgain": "重试",
- "welcomeBack": "欢迎回来!",
- "loginTitle": "登录个人中心",
- "loginSubtitle": "通过Telegram或邮箱登录"
- },
- "emailVerification": {
- "title": "邮箱验证",
- "verifying": "正在验证邮箱...",
- "pleaseWait": "请稍候,我们正在验证您的邮箱。",
- "success": "邮箱已验证!",
- "successMessage": "您的邮箱已成功验证。现在您可以使用邮箱和密码登录。",
- "failed": "验证失败",
- "goToLogin": "前往登录"
- },
- "dashboard": {
- "title": "个人中心",
- "welcome": "欢迎,{{name}}!",
- "yourSubscription": "您的订阅",
- "quickActions": "快捷操作",
- "viewSubscription": "管理订阅",
- "topUpBalance": "充值余额",
- "inviteFriends": "邀请好友",
- "getSupport": "获取支持",
- "currentBalance": "当前余额",
- "activeUntil": "有效期至",
- "noActiveSubscription": "无有效订阅",
- "devicesUsed": "设备:{{used}} / {{total}}",
- "trafficUsed": "流量:{{used}} / {{total}} GB",
- "unlimitedTraffic": "无限流量"
- },
- "subscription": {
- "title": "订阅",
- "currentPlan": "当前套餐",
- "status": "状态",
- "active": "有效",
- "inactive": "无效",
- "trialStatus": "试用期",
- "expired": "已过期",
- "expiresAt": "到期时间",
- "daysLeft": "剩余天数",
- "devices": "设备",
- "servers": "服务器",
- "traffic": "流量",
- "unlimited": "无限",
- "used": "已使用",
- "of": "/",
- "renew": "续费",
- "extend": "延长订阅",
- "buyTraffic": "购买流量",
- "buyDevices": "增加设备",
- "renewalOptions": "续费选项",
- "days": "天",
- "hours": "小时",
- "minutes": "分钟",
- "price": "价格",
- "noSubscription": "您没有有效订阅",
- "getSubscription": "获取订阅",
- "connectionInfo": "连接信息",
- "copyLink": "复制链接",
- "copied": "已复制!",
- "showQR": "显示二维码",
- "downloadConfig": "下载配置",
- "trafficUsed": "已用流量",
- "timeLeft": "剩余时间",
- "getConfig": "连接设备",
- "autoRenewal": "自动续费",
- "daysBeforeExpiry": "到期前天数",
- "selectPeriod": "选择时长",
- "selectTraffic": "选择流量",
- "selectServers": "选择服务器",
- "selectDevices": "选择设备",
- "perDevice": "/ 设备",
- "summary": "摘要",
- "total": "总计",
- "purchase": "购买",
- "step": "第 {{current}} 步,共 {{total}} 步",
- "stepPeriod": "时长",
- "stepTraffic": "流量",
- "stepServers": "服务器",
- "stepDevices": "设备",
- "stepConfirm": "确认",
- "trial": {
- "title": "免费试用",
- "description": "免费试用我们的VPN服务!",
- "days": "天",
- "devices": "设备",
- "price": "激活费用",
- "activate": "激活免费试用",
- "unavailable": "试用不可用"
- },
- "connection": {
- "title": "连接VPN",
- "selectDevice": "选择您的设备",
- "selectApp": "选择应用",
- "installApp": "1. 安装应用",
- "addSubscription": "2. 添加订阅",
- "connectVpn": "3. 连接VPN",
- "addToApp": "添加到 {{appName}}",
- "connect": "连接",
- "noApps": "此平台暂无可用应用",
- "noSubscription": "需要有效订阅才能连接",
- "featured": "推荐",
- "yourDevice": "您的设备",
- "copyLink": "复制订阅链接",
- "copied": "链接已复制!",
- "openLink": "打开链接"
- }
- },
- "balance": {
- "title": "余额",
- "currentBalance": "当前余额",
- "topUp": "充值",
- "topUpBalance": "充值余额",
- "paymentMethods": {
- "yookassa": {
- "name": "YooKassa",
- "description": "通过YooKassa支付"
- },
- "cryptobot": {
- "name": "CryptoBot",
- "description": "通过CryptoBot加密货币支付"
- },
- "telegram_stars": {
- "name": "Telegram Stars",
- "description": "通过Telegram Stars支付"
- }
- },
- "transactionHistory": "交易记录",
- "noTransactions": "暂无交易",
- "date": "日期",
- "type": "类型",
- "description": "描述",
- "amount": "金额",
- "deposit": "充值",
- "withdrawal": "支出",
- "subscriptionPayment": "订阅付款",
- "referralReward": "推荐奖励",
- "minAmount": "最小",
- "maxAmount": "最大",
- "notAvailable": "不可用",
- "useBot": "请使用Telegram机器人充值。",
- "page": "第 {{current}} 页,共 {{total}} 页",
- "invalidAmount": "金额无效",
- "promocode": {
- "title": "优惠码",
- "placeholder": "输入优惠码",
- "activate": "激活",
- "activating": "激活中...",
- "success": "优惠码激活成功!",
- "balanceAdded": "已添加余额:{{amount}}",
- "errors": {
- "not_found": "优惠码不存在",
- "expired": "优惠码已过期",
- "used": "优惠码已被使用",
- "already_used_by_user": "您已使用过此优惠码",
- "user_not_found": "用户不存在",
- "server_error": "服务器错误"
- }
- },
- "minAmountError": "最小金额:{{amount}}",
- "maxAmountError": "最大金额:{{amount}}"
- },
- "referral": {
- "title": "推荐计划",
- "yourLink": "您的推荐链接",
- "copyLink": "复制链接",
- "copied": "已复制!",
- "shareButton": "分享",
- "shareMessage": "通过我的链接加入 {{botName}},获取高达 {{percent}}% 返现!",
- "shareHint": "分享链接给朋友。当他们注册并付款后,您将获得 {{percent}}% 佣金!",
- "stats": {
- "totalReferrals": "总推荐数",
- "activeReferrals": "活跃",
- "totalEarnings": "总收益",
- "commissionRate": "佣金比例"
- },
- "terms": {
- "title": "计划条款",
- "commission": "佣金",
- "minTopup": "最低充值",
- "newUserBonus": "新用户奖励",
- "inviterBonus": "邀请人奖励"
- },
- "yourReferrals": "您的推荐",
- "noReferrals": "暂无推荐。分享链接邀请好友!",
- "user": "用户",
- "joined": "加入时间",
- "hasPaid": "已付款",
- "earningsHistory": "收益记录",
- "reason": "原因",
- "status": {
- "pending": "待定",
- "paid": "已支付"
- },
- "reasons": {
- "referral_registration_pending": "推荐用户注册",
- "referral_registration": "推荐用户注册",
- "referral_first_payment": "推荐用户首次付款",
- "referral_subscription_renewal": "推荐用户续订",
- "referral_bonus": "推荐奖金"
- }
- },
- "support": {
- "title": "支持",
- "newTicket": "新工单",
- "yourTickets": "您的工单",
- "noTickets": "暂无工单",
- "createTicket": "创建工单",
- "subject": "主题",
- "subjectPlaceholder": "简要描述问题",
- "message": "消息",
- "messagePlaceholder": "详细描述您的问题...",
- "send": "发送",
- "sending": "发送中...",
- "creating": "创建中...",
- "reply": "回复",
- "replyPlaceholder": "输入您的回复...",
- "sendReply": "发送回复",
- "you": "您",
- "supportTeam": "客服",
- "selectTicket": "选择工单或创建新工单",
- "created": "创建时间",
- "repliesDisabled": "此工单已禁止回复",
- "status": {
- "open": "待处理",
- "answered": "已回复",
- "pending": "等待中",
- "closed": "已关闭"
- },
- "attachImage": "附加图片",
- "invalidFileType": "文件类型无效。请使用JPEG、PNG、GIF或WebP。",
- "fileTooLarge": "文件过大。最大10MB。",
- "uploadFailed": "图片上传失败",
- "imageLoadFailed": "图片加载失败"
- },
- "wheel": {
- "title": "幸运转盘",
- "disabled": "幸运转盘暂时不可用",
- "spinsRemaining": "今日剩余次数",
- "choosePayment": "选择支付方式",
- "stars": "Stars",
- "telegramStars": "Telegram Stars",
- "days": "天",
- "subscriptionDays": "订阅天数",
- "day": "天",
- "spin": "开始抽奖!",
- "spinning": "抽奖中...",
- "history": "历史",
- "recentSpins": "最近抽奖",
- "congratulations": "恭喜!",
- "noLuck": "未中奖!",
- "oops": "哎呀!",
- "yourPromoCode": "您的优惠码:",
- "close": "关闭",
- "errors": {
- "networkError": "网络错误",
- "loadFailed": "加载转盘配置失败",
- "dailyLimitReached": "已达每日限制",
- "cannotSpin": "当前无法抽奖",
- "insufficientBalance": "余额不足",
- "topUpRequired": "请充值以支付抽奖费用"
- },
- "payWithStars": "支付 {stars} Stars",
- "processingPayment": "处理中...",
- "starsPaymentSuccess": "支付成功!抽奖结果已发送到Telegram。",
- "starsPaymentFailed": "支付失败。请重试。",
- "noHistory": "暂无抽奖记录",
- "banner": {
- "title": "试试运气!",
- "description": "转动转盘赢取奖品:订阅天数、余额、流量等!",
- "button": "前往转盘"
- }
- },
- "admin": {
- "nav": {
- "title": "管理",
- "dashboard": "统计",
- "tickets": "工单",
- "settings": "设置",
- "apps": "应用",
- "wheel": "转盘",
- "tariffs": "套餐",
- "servers": "服务器",
- "broadcasts": "群发"
- },
- "panel": {
- "title": "管理面板",
- "subtitle": "系统管理",
- "dashboardDesc": "统计和系统监控",
- "ticketsDesc": "处理用户工单",
- "settingsDesc": "系统设置和参数",
- "appsDesc": "管理连接应用",
- "wheelDesc": "配置幸运转盘和奖品",
- "tariffsDesc": "管理套餐计划",
- "serversDesc": "配置VPN服务器",
- "broadcastsDesc": "向用户群发消息"
- },
- "wheel": {
- "title": "幸运转盘设置",
- "enabled": "已启用",
- "disabled": "已禁用",
- "tabs": {
- "settings": "设置",
- "prizes": "奖品",
- "statistics": "统计"
- },
- "settings": {
- "enableWheel": "启用转盘",
- "allowSpins": "允许用户抽奖",
- "costInStars": "Stars费用",
- "costInDays": "天数费用",
- "rtpPercent": "RTP (返还率) %",
- "dailyLimit": "每日限制 (0 = 无限)",
- "minSubDays": "天数支付最低订阅天数",
- "promoPrefix": "优惠码前缀"
- },
- "prizes": {
- "addPrize": "添加奖品",
- "editPrize": "编辑奖品",
- "noPrizes": "未配置奖品。添加奖品以启用转盘。",
- "deletePrize": "删除此奖品?",
- "types": {
- "subscription_days": "订阅天数",
- "balance_bonus": "余额奖励",
- "traffic_gb": "流量 GB",
- "promocode": "优惠码",
- "nothing": "无奖品"
- },
- "fields": {
- "type": "类型",
- "displayName": "显示名称",
- "value": "数值",
- "valueKopeks": "价值(戈比,用于RTP)",
- "emoji": "表情",
- "color": "颜色",
- "active": "启用",
- "worth": "价值"
- },
- "promo": {
- "title": "优惠码设置",
- "balanceBonus": "余额奖励(戈比)",
- "subscriptionDays": "订阅天数"
- }
- },
- "statistics": {
- "totalSpins": "总抽奖次数",
- "revenue": "收入",
- "payouts": "支出",
- "actualRtp": "实际RTP",
- "targetRtp": "目标",
- "prizeDistribution": "奖品分布",
- "times": "次",
- "topWins": "最高奖品"
- }
- },
- "broadcasts": {
- "title": "群发",
- "subtitle": "向用户群发消息",
- "create": "创建群发",
- "empty": "暂无群发",
- "selectFilter": "选择受众",
- "selectFilterPlaceholder": "选择筛选条件...",
- "recipients": "人",
- "messageText": "消息内容",
- "messageTextPlaceholder": "输入群发消息...",
- "media": "媒体文件",
- "addMedia": "添加媒体",
- "uploading": "上传中...",
- "buttons": "按钮",
- "willBeSent": "将发送给",
- "users": "用户",
- "send": "发送",
- "stop": "停止",
- "progress": "进度",
- "total": "总计",
- "sent": "已发送",
- "failed": "失败",
- "filter": "筛选",
- "message": "消息",
- "unknownAdmin": "未知管理员"
- },
- "settings": {
- "title": "系统设置",
- "allCategories": "所有分类",
- "noSettings": "未找到设置",
- "modified": "已修改",
- "readOnly": "只读",
- "reset": "重置",
- "categoriesCount": "个分类",
- "settingsCount": "个设置",
- "expandAll": "展开全部",
- "collapseAll": "折叠全部",
- "searchPlaceholder": "搜索设置...",
- "searchCategoriesPlaceholder": "搜索分类...",
- "noSearchResults": "未找到结果",
- "example": "示例"
- },
- "apps": {
- "title": "应用管理",
- "addApp": "添加应用",
- "addFirstApp": "添加第一个应用",
- "noApps": "此平台暂无应用",
- "createApp": "创建应用",
- "editApp": "编辑应用",
- "confirmDelete": "确定要删除此应用吗?",
- "copyTo": "复制到...",
- "appId": "应用ID",
- "appName": "名称",
- "urlScheme": "URL协议",
- "featured": "推荐",
- "base64Encoding": "Base64编码",
- "buttons": "按钮",
- "button": "按钮",
- "addButton": "添加按钮",
- "buttonText": "按钮文本",
- "installDescription": "安装说明",
- "subscriptionDescription": "添加订阅说明",
- "connectDescription": "连接说明",
- "beforeSubscription": "添加订阅前",
- "afterSubscription": "添加订阅后",
- "stepTitle": "标题",
- "stepDescription": "描述",
- "tabs": {
- "basic": "基本",
- "installation": "安装",
- "subscription": "订阅",
- "connect": "连接",
- "additional": "附加"
- }
- },
- "tickets": {
- "title": "工单管理",
- "total": "总计",
- "list": "工单",
- "noTickets": "暂无工单",
- "selectTicket": "从列表中选择工单",
- "allStatuses": "所有状态",
- "statusOpen": "待处理",
- "statusPending": "等待中",
- "statusAnswered": "已回复",
- "statusClosed": "已关闭",
- "from": "来自",
- "created": "创建时间",
- "user": "用户",
- "you": "您",
- "userLabel": "用户",
- "adminLabel": "管理员",
- "replyPlaceholder": "输入您的回复...",
- "sendReply": "发送回复",
- "settings": "设置",
- "supportMode": "支持模式",
- "supportModeDesc": "选择用户如何联系支持",
- "modeBoth": "工单和联系方式",
- "modeTickets": "仅工单",
- "modeContact": "仅联系方式",
- "slaSettings": "SLA设置",
- "slaEnabled": "启用 SLA(响应时间监控)",
- "slaEnabledDesc": "自动通知过期工单",
- "slaMinutes": "响应时间(分钟)",
- "slaMinutesDesc": "回复工单的最长时间(1-1440分钟)",
- "checkInterval": "检查间隔(秒)",
- "checkIntervalDesc": "检查过期工单的频率(30-600秒)",
- "reminderCooldown": "提醒间隔(分钟)",
- "reminderCooldownDesc": "提醒之间的最小时间(1-120分钟)",
- "settingsUpdateError": "保存设置时出错"
- },
- "tariffs": {
- "title": "套餐管理",
- "subtitle": "配置套餐计划",
- "create": "创建套餐",
- "edit": "编辑套餐",
- "noTariffs": "暂无套餐",
- "name": "名称",
- "namePlaceholder": "输入套餐名称",
- "description": "描述",
- "descriptionPlaceholder": "输入套餐描述",
- "trafficLimit": "流量限制",
- "trafficHint": "0 = 无限流量",
- "deviceLimit": "设备限制",
- "tierLevel": "套餐等级",
- "tierHint": "1-10,影响升级优先级",
- "unlimited": "无限",
- "devices": "设备",
- "servers": "服务器",
- "subscriptions": "订阅",
- "trial": "试用",
- "inactive": "未激活",
- "activate": "激活",
- "deactivate": "停用",
- "toggleTrial": "切换试用",
- "delete": "删除",
- "confirmDelete": "删除套餐?",
- "confirmDeleteText": "此操作不可撤销。套餐将被永久删除。",
- "days": "天",
- "tabs": {
- "basic": "基本",
- "prices": "价格",
- "servers": "服务器"
- },
- "pricesHint": "设置每个周期的价格",
- "serversHint": "选择此套餐可用的服务器",
- "noServers": "暂无可用服务器"
- },
- "servers": {
- "title": "服务器管理",
- "subtitle": "配置VPN服务器",
- "sync": "同步",
- "syncing": "同步中...",
- "syncNow": "立即同步",
- "noServers": "暂无服务器。请与RemnaWave同步。",
- "edit": "编辑服务器",
- "originalName": "原始名称",
- "displayName": "显示名称",
- "displayNamePlaceholder": "输入显示名称",
- "description": "描述",
- "descriptionPlaceholder": "输入服务器描述",
- "countryCode": "国家代码",
- "price": "价格",
- "priceHint": "服务器附加费用",
- "maxUsers": "最大用户数",
- "sortOrder": "排序",
- "unlimited": "无限制",
- "stats": "统计",
- "currentUsers": "当前用户",
- "activeSubscriptions": "活跃订阅",
- "usedByTariffs": "套餐使用",
- "trial": "试用",
- "unavailable": "不可用",
- "full": "已满",
- "enable": "启用",
- "disable": "禁用",
- "toggleTrial": "切换试用"
- }
- },
- "adminDashboard": {
- "title": "统计面板",
- "subtitle": "实时系统概览",
- "refresh": "刷新",
- "loadError": "加载统计失败",
- "stats": {
- "usersOnline": "在线用户",
- "activeSubscriptions": "活跃订阅",
- "incomeToday": "今日收入",
- "incomeMonth": "本月收入",
- "incomeTotal": "总收入",
- "subscriptionIncome": "订阅收入",
- "total": "总计"
- },
- "nodes": {
- "title": "节点",
- "online": "在线",
- "offline": "离线",
- "disabled": "已禁用",
- "noNodes": "暂无可用节点",
- "usersOnline": "在线",
- "traffic": "流量",
- "enable": "启用",
- "disable": "禁用"
- },
- "revenue": {
- "title": "收入",
- "last7Days": "最近7天"
- },
- "subscriptions": {
- "title": "订阅",
- "subtitle": "订阅统计",
- "active": "活跃",
- "trial": "试用",
- "paid": "付费",
- "expired": "过期",
- "newSubscriptions": "新订阅",
- "today": "今日",
- "week": "本周",
- "month": "本月",
- "conversion": "试用转付费率"
- },
- "servers": {
- "title": "服务器",
- "total": "服务器总数",
- "available": "可用",
- "withConnections": "有连接",
- "revenue": "收入"
- }
- },
- "profile": {
- "title": "个人资料",
- "accountInfo": "账户信息",
- "telegramId": "Telegram ID",
- "username": "用户名",
- "name": "姓名",
- "registeredAt": "注册时间",
- "emailAuth": "邮箱认证",
- "linkEmailDescription": "绑定邮箱以便无需Telegram登录。绑定后将收到验证邮件。",
- "linkEmail": "绑定邮箱",
- "emailRequired": "请输入邮箱",
- "passwordMinLength": "密码至少8个字符",
- "passwordsMismatch": "密码不匹配",
- "passwordPlaceholder": "输入密码",
- "confirmPasswordPlaceholder": "确认密码",
- "passwordHint": "至少8个字符",
- "emailSent": "验证邮件已发送!请查收。",
- "verified": "已验证",
- "notVerified": "未验证",
- "verificationRequired": "请验证邮箱以使用邮箱登录。",
- "resendVerification": "重新发送验证邮件",
- "verificationResent": "验证邮件已重新发送!",
- "canLoginWithEmail": "现在您可以使用邮箱和密码登录。",
- "notifications": {
- "title": "通知设置",
- "subscriptionExpiry": "订阅到期",
- "subscriptionExpiryDesc": "订阅即将到期时通知",
- "daysBeforeExpiry": "到期前天数",
- "trafficWarning": "流量警告",
- "trafficWarningDesc": "接近流量限制时通知",
- "atPercent": "使用率",
- "balanceLow": "余额不足",
- "balanceLowDesc": "余额不足时通知",
- "threshold": "阈值",
- "news": "新闻",
- "newsDesc": "接收新闻和服务更新",
- "promoOffers": "促销活动",
- "promoOffersDesc": "接收特别优惠和折扣",
- "unavailable": "通知设置不可用"
- }
- },
- "theme": {
- "colors": "主题颜色",
- "reset": "重置",
- "accent": "主题色",
- "accentDescription": "用于按钮、链接和交互元素的主品牌颜色",
- "darkTheme": "深色主题",
- "lightTheme": "浅色主题",
- "background": "背景",
- "surface": "表面",
- "text": "文字",
- "textSecondary": "次要文字",
- "statusColors": "状态颜色",
- "success": "成功",
- "warning": "警告",
- "error": "错误",
- "preview": "预览",
- "previewButton": "主要按钮",
- "previewSecondary": "次要按钮",
- "light": "浅色主题",
- "dark": "深色主题"
- },
- "languages": {
- "ru": "Русский",
- "en": "English",
- "zh": "中文",
- "fa": "فارسی"
- },
- "contests": {
- "title": "活动",
- "error": "加载活动失败",
- "noContests": "暂无活动",
- "days": "天",
- "play": "参与",
- "alreadyPlayed": "已参与",
- "enterAnswer": "输入答案",
- "submit": "提交",
- "imHere": "我在这里!"
- },
- "polls": {
- "title": "问卷",
- "error": "加载问卷失败",
- "noPolls": "暂无问卷",
- "questions": "个问题",
- "question": "问题",
- "of": "/",
- "start": "开始",
- "continue": "继续",
- "completed": "已完成",
- "reward": "¥"
- },
- "info": {
- "title": "信息",
- "faq": "常见问题",
- "rules": "规则",
- "privacy": "隐私政策",
- "offer": "服务条款",
- "noFaq": "暂无常见问题",
- "noContent": "暂无内容",
- "updatedAt": "更新时间"
- },
- "onboarding": {
- "skip": "跳过",
- "finish": "完成",
- "steps": {
- "welcome": {
- "title": "欢迎!",
- "description": "这是您的个人中心。在这里您可以管理订阅、充值余额和连接设备。"
- },
- "connectDevices": {
- "title": "连接设备",
- "description": "点击此按钮获取在您的设备上连接VPN的说明。"
- },
- "balance": {
- "title": "您的余额",
- "description": "这里显示您的当前余额。点击可充值。"
- },
- "subscription": {
- "title": "订阅状态",
- "description": "在这里您可以看到订阅的剩余天数。"
- },
- "quickActions": {
- "title": "快捷操作",
- "description": "使用这些按钮快速访问主要功能:充值余额、延长订阅和邀请好友。"
- }
- }
- }
-}
+ "common": {
+ "loading": "加载中...",
+ "error": "错误",
+ "success": "成功",
+ "save": "保存",
+ "cancel": "取消",
+ "confirm": "确认",
+ "back": "返回",
+ "next": "下一步",
+ "close": "关闭",
+ "search": "搜索",
+ "noData": "暂无数据",
+ "actions": "操作",
+ "yes": "是",
+ "no": "否",
+ "or": "或",
+ "and": "和",
+ "edit": "编辑",
+ "delete": "删除",
+ "currency": "¥"
+ },
+ "nav": {
+ "dashboard": "首页",
+ "subscription": "订阅",
+ "balance": "余额",
+ "referral": "推荐",
+ "support": "支持",
+ "profile": "个人资料",
+ "logout": "退出",
+ "contests": "活动",
+ "polls": "问卷",
+ "info": "信息",
+ "wheel": "幸运转盘"
+ },
+ "auth": {
+ "login": "登录",
+ "register": "注册",
+ "logout": "退出",
+ "email": "邮箱",
+ "password": "密码",
+ "confirmPassword": "确认密码",
+ "forgotPassword": "忘记密码?",
+ "resetPassword": "重置密码",
+ "loginWithTelegram": "通过Telegram登录",
+ "loginWithEmail": "通过邮箱登录",
+ "noAccount": "没有账户?",
+ "hasAccount": "已有账户?",
+ "registerHint": "要通过邮箱注册,请先通过Telegram登录,然后在设置中绑定邮箱。",
+ "telegramRequired": "需要Telegram授权",
+ "telegramNotConfigured": "Telegram机器人未配置",
+ "authenticating": "正在验证...",
+ "orOpenInApp": "或在应用中打开机器人",
+ "loginFailed": "登录失败",
+ "tryAgain": "重试",
+ "welcomeBack": "欢迎回来!",
+ "loginTitle": "登录个人中心",
+ "loginSubtitle": "通过Telegram或邮箱登录"
+ },
+ "emailVerification": {
+ "title": "邮箱验证",
+ "verifying": "正在验证邮箱...",
+ "pleaseWait": "请稍候,我们正在验证您的邮箱。",
+ "success": "邮箱已验证!",
+ "successMessage": "您的邮箱已成功验证。现在您可以使用邮箱和密码登录。",
+ "failed": "验证失败",
+ "goToLogin": "前往登录"
+ },
+ "dashboard": {
+ "title": "个人中心",
+ "welcome": "欢迎,{{name}}!",
+ "yourSubscription": "您的订阅",
+ "quickActions": "快捷操作",
+ "viewSubscription": "管理订阅",
+ "topUpBalance": "充值余额",
+ "inviteFriends": "邀请好友",
+ "getSupport": "获取支持",
+ "currentBalance": "当前余额",
+ "activeUntil": "有效期至",
+ "noActiveSubscription": "无有效订阅",
+ "devicesUsed": "设备:{{used}} / {{total}}",
+ "trafficUsed": "流量:{{used}} / {{total}} GB",
+ "unlimitedTraffic": "无限流量"
+ },
+ "subscription": {
+ "title": "订阅",
+ "currentPlan": "当前套餐",
+ "status": "状态",
+ "active": "有效",
+ "inactive": "无效",
+ "trialStatus": "试用期",
+ "expired": "已过期",
+ "expiresAt": "到期时间",
+ "daysLeft": "剩余天数",
+ "devices": "设备",
+ "servers": "服务器",
+ "traffic": "流量",
+ "unlimited": "无限",
+ "used": "已使用",
+ "of": "/",
+ "renew": "续费",
+ "extend": "延长订阅",
+ "buyTraffic": "购买流量",
+ "buyDevices": "增加设备",
+ "renewalOptions": "续费选项",
+ "days": "天",
+ "hours": "小时",
+ "minutes": "分钟",
+ "price": "价格",
+ "noSubscription": "您没有有效订阅",
+ "getSubscription": "获取订阅",
+ "connectionInfo": "连接信息",
+ "copyLink": "复制链接",
+ "copied": "已复制!",
+ "showQR": "显示二维码",
+ "downloadConfig": "下载配置",
+ "trafficUsed": "已用流量",
+ "timeLeft": "剩余时间",
+ "getConfig": "连接设备",
+ "autoRenewal": "自动续费",
+ "daysBeforeExpiry": "到期前天数",
+ "selectPeriod": "选择时长",
+ "selectTraffic": "选择流量",
+ "selectServers": "选择服务器",
+ "selectDevices": "选择设备",
+ "perDevice": "/ 设备",
+ "summary": "摘要",
+ "total": "总计",
+ "purchase": "购买",
+ "step": "第 {{current}} 步,共 {{total}} 步",
+ "stepPeriod": "时长",
+ "stepTraffic": "流量",
+ "stepServers": "服务器",
+ "stepDevices": "设备",
+ "stepConfirm": "确认",
+ "trial": {
+ "title": "免费试用",
+ "description": "免费试用我们的VPN服务!",
+ "days": "天",
+ "devices": "设备",
+ "price": "激活费用",
+ "activate": "激活免费试用",
+ "unavailable": "试用不可用"
+ },
+ "connection": {
+ "title": "连接VPN",
+ "selectDevice": "选择您的设备",
+ "selectApp": "选择应用",
+ "installApp": "1. 安装应用",
+ "addSubscription": "2. 添加订阅",
+ "connectVpn": "3. 连接VPN",
+ "addToApp": "添加到 {{appName}}",
+ "connect": "连接",
+ "noApps": "此平台暂无可用应用",
+ "noSubscription": "需要有效订阅才能连接",
+ "featured": "推荐",
+ "yourDevice": "您的设备",
+ "copyLink": "复制订阅链接",
+ "copied": "链接已复制!",
+ "openLink": "打开链接"
+ }
+ },
+ "balance": {
+ "title": "余额",
+ "currentBalance": "当前余额",
+ "topUp": "充值",
+ "topUpBalance": "充值余额",
+ "paymentMethods": {
+ "yookassa": {
+ "name": "YooKassa",
+ "description": "通过YooKassa支付"
+ },
+ "cryptobot": {
+ "name": "CryptoBot",
+ "description": "通过CryptoBot加密货币支付"
+ },
+ "telegram_stars": {
+ "name": "Telegram Stars",
+ "description": "通过Telegram Stars支付"
+ }
+ },
+ "transactionHistory": "交易记录",
+ "noTransactions": "暂无交易",
+ "date": "日期",
+ "type": "类型",
+ "description": "描述",
+ "amount": "金额",
+ "deposit": "充值",
+ "withdrawal": "支出",
+ "subscriptionPayment": "订阅付款",
+ "referralReward": "推荐奖励",
+ "minAmount": "最小",
+ "maxAmount": "最大",
+ "notAvailable": "不可用",
+ "useBot": "请使用Telegram机器人充值。",
+ "page": "第 {{current}} 页,共 {{total}} 页",
+ "invalidAmount": "金额无效",
+ "promocode": {
+ "title": "优惠码",
+ "placeholder": "输入优惠码",
+ "activate": "激活",
+ "activating": "激活中...",
+ "success": "优惠码激活成功!",
+ "balanceAdded": "已添加余额:{{amount}}",
+ "errors": {
+ "not_found": "优惠码不存在",
+ "expired": "优惠码已过期",
+ "used": "优惠码已被使用",
+ "already_used_by_user": "您已使用过此优惠码",
+ "user_not_found": "用户不存在",
+ "server_error": "服务器错误"
+ }
+ },
+ "minAmountError": "最小金额:{{amount}}",
+ "maxAmountError": "最大金额:{{amount}}"
+ },
+ "referral": {
+ "title": "推荐计划",
+ "yourLink": "您的推荐链接",
+ "copyLink": "复制链接",
+ "copied": "已复制!",
+ "shareButton": "分享",
+ "shareMessage": "通过我的链接加入 Cabinet,获取高达 {{percent}}% 返现!",
+ "shareHint": "分享链接给朋友。当他们注册并付款后,您将获得 {{percent}}% 佣金!",
+ "stats": {
+ "totalReferrals": "总推荐数",
+ "activeReferrals": "活跃",
+ "totalEarnings": "总收益",
+ "commissionRate": "佣金比例"
+ },
+ "terms": {
+ "title": "计划条款",
+ "commission": "佣金",
+ "minTopup": "最低充值",
+ "newUserBonus": "新用户奖励",
+ "inviterBonus": "邀请人奖励"
+ },
+ "yourReferrals": "您的推荐",
+ "noReferrals": "暂无推荐。分享链接邀请好友!",
+ "user": "用户",
+ "joined": "加入时间",
+ "hasPaid": "已付款",
+ "earningsHistory": "收益记录",
+ "reason": "原因",
+ "status": {
+ "pending": "待定",
+ "paid": "已支付"
+ },
+ "reasons": {
+ "referral_registration_pending": "推荐用户注册",
+ "referral_registration": "推荐用户注册",
+ "referral_first_payment": "推荐用户首次付款",
+ "referral_subscription_renewal": "推荐用户续订",
+ "referral_bonus": "推荐奖金"
+ }
+ },
+ "support": {
+ "title": "支持",
+ "newTicket": "新工单",
+ "yourTickets": "您的工单",
+ "noTickets": "暂无工单",
+ "createTicket": "创建工单",
+ "subject": "主题",
+ "subjectPlaceholder": "简要描述问题",
+ "message": "消息",
+ "messagePlaceholder": "详细描述您的问题...",
+ "send": "发送",
+ "sending": "发送中...",
+ "creating": "创建中...",
+ "reply": "回复",
+ "replyPlaceholder": "输入您的回复...",
+ "sendReply": "发送回复",
+ "you": "您",
+ "supportTeam": "客服",
+ "selectTicket": "选择工单或创建新工单",
+ "created": "创建时间",
+ "repliesDisabled": "此工单已禁止回复",
+ "status": {
+ "open": "待处理",
+ "answered": "已回复",
+ "pending": "等待中",
+ "closed": "已关闭"
+ },
+ "attachImage": "附加图片",
+ "invalidFileType": "文件类型无效。请使用JPEG、PNG、GIF或WebP。",
+ "fileTooLarge": "文件过大。最大10MB。",
+ "uploadFailed": "图片上传失败",
+ "imageLoadFailed": "图片加载失败"
+ },
+ "wheel": {
+ "title": "幸运转盘",
+ "disabled": "幸运转盘暂时不可用",
+ "spinsRemaining": "今日剩余次数",
+ "choosePayment": "选择支付方式",
+ "stars": "Stars",
+ "telegramStars": "Telegram Stars",
+ "days": "天",
+ "subscriptionDays": "订阅天数",
+ "day": "天",
+ "spin": "开始抽奖!",
+ "spinning": "抽奖中...",
+ "history": "历史",
+ "recentSpins": "最近抽奖",
+ "congratulations": "恭喜!",
+ "noLuck": "未中奖!",
+ "oops": "哎呀!",
+ "yourPromoCode": "您的优惠码:",
+ "close": "关闭",
+ "errors": {
+ "networkError": "网络错误",
+ "loadFailed": "加载转盘配置失败",
+ "dailyLimitReached": "已达每日限制",
+ "cannotSpin": "当前无法抽奖",
+ "insufficientBalance": "余额不足",
+ "topUpRequired": "请充值以支付抽奖费用"
+ },
+ "payWithStars": "支付 {stars} Stars",
+ "processingPayment": "处理中...",
+ "starsPaymentSuccess": "支付成功!抽奖结果已发送到Telegram。",
+ "starsPaymentFailed": "支付失败。请重试。",
+ "noHistory": "暂无抽奖记录",
+ "banner": {
+ "title": "试试运气!",
+ "description": "转动转盘赢取奖品:订阅天数、余额、流量等!",
+ "button": "前往转盘"
+ }
+ },
+ "admin": {
+ "nav": {
+ "title": "管理",
+ "dashboard": "统计",
+ "tickets": "工单",
+ "settings": "设置",
+ "apps": "应用",
+ "wheel": "转盘",
+ "tariffs": "套餐",
+ "servers": "服务器",
+ "broadcasts": "群发"
+ },
+ "panel": {
+ "title": "管理面板",
+ "subtitle": "系统管理",
+ "dashboardDesc": "统计和系统监控",
+ "ticketsDesc": "处理用户工单",
+ "settingsDesc": "系统设置和参数",
+ "appsDesc": "管理连接应用",
+ "wheelDesc": "配置幸运转盘和奖品",
+ "tariffsDesc": "管理套餐计划",
+ "serversDesc": "配置VPN服务器",
+ "broadcastsDesc": "向用户群发消息"
+ },
+ "wheel": {
+ "title": "幸运转盘设置",
+ "enabled": "已启用",
+ "disabled": "已禁用",
+ "tabs": {
+ "settings": "设置",
+ "prizes": "奖品",
+ "statistics": "统计"
+ },
+ "settings": {
+ "enableWheel": "启用转盘",
+ "allowSpins": "允许用户抽奖",
+ "costInStars": "Stars费用",
+ "costInDays": "天数费用",
+ "rtpPercent": "RTP (返还率) %",
+ "dailyLimit": "每日限制 (0 = 无限)",
+ "minSubDays": "天数支付最低订阅天数",
+ "promoPrefix": "优惠码前缀"
+ },
+ "prizes": {
+ "addPrize": "添加奖品",
+ "editPrize": "编辑奖品",
+ "noPrizes": "未配置奖品。添加奖品以启用转盘。",
+ "deletePrize": "删除此奖品?",
+ "types": {
+ "subscription_days": "订阅天数",
+ "balance_bonus": "余额奖励",
+ "traffic_gb": "流量 GB",
+ "promocode": "优惠码",
+ "nothing": "无奖品"
+ },
+ "fields": {
+ "type": "类型",
+ "displayName": "显示名称",
+ "value": "数值",
+ "valueKopeks": "价值(戈比,用于RTP)",
+ "emoji": "表情",
+ "color": "颜色",
+ "active": "启用",
+ "worth": "价值"
+ },
+ "promo": {
+ "title": "优惠码设置",
+ "balanceBonus": "余额奖励(戈比)",
+ "subscriptionDays": "订阅天数"
+ }
+ },
+ "statistics": {
+ "totalSpins": "总抽奖次数",
+ "revenue": "收入",
+ "payouts": "支出",
+ "actualRtp": "实际RTP",
+ "targetRtp": "目标",
+ "prizeDistribution": "奖品分布",
+ "times": "次",
+ "topWins": "最高奖品"
+ }
+ },
+ "broadcasts": {
+ "title": "群发",
+ "subtitle": "向用户群发消息",
+ "create": "创建群发",
+ "empty": "暂无群发",
+ "selectFilter": "选择受众",
+ "selectFilterPlaceholder": "选择筛选条件...",
+ "recipients": "人",
+ "messageText": "消息内容",
+ "messageTextPlaceholder": "输入群发消息...",
+ "media": "媒体文件",
+ "addMedia": "添加媒体",
+ "uploading": "上传中...",
+ "buttons": "按钮",
+ "willBeSent": "将发送给",
+ "users": "用户",
+ "send": "发送",
+ "stop": "停止",
+ "progress": "进度",
+ "total": "总计",
+ "sent": "已发送",
+ "failed": "失败",
+ "filter": "筛选",
+ "message": "消息",
+ "unknownAdmin": "未知管理员"
+ },
+ "settings": {
+ "title": "系统设置",
+ "allCategories": "所有分类",
+ "noSettings": "未找到设置",
+ "modified": "已修改",
+ "readOnly": "只读",
+ "reset": "重置",
+ "categoriesCount": "个分类",
+ "settingsCount": "个设置",
+ "expandAll": "展开全部",
+ "collapseAll": "折叠全部",
+ "searchPlaceholder": "搜索设置...",
+ "searchCategoriesPlaceholder": "搜索分类...",
+ "noSearchResults": "未找到结果",
+ "example": "示例"
+ },
+ "apps": {
+ "title": "应用管理",
+ "addApp": "添加应用",
+ "addFirstApp": "添加第一个应用",
+ "noApps": "此平台暂无应用",
+ "createApp": "创建应用",
+ "editApp": "编辑应用",
+ "confirmDelete": "确定要删除此应用吗?",
+ "copyTo": "复制到...",
+ "appId": "应用ID",
+ "appName": "名称",
+ "urlScheme": "URL协议",
+ "featured": "推荐",
+ "base64Encoding": "Base64编码",
+ "buttons": "按钮",
+ "button": "按钮",
+ "addButton": "添加按钮",
+ "buttonText": "按钮文本",
+ "installDescription": "安装说明",
+ "subscriptionDescription": "添加订阅说明",
+ "connectDescription": "连接说明",
+ "beforeSubscription": "添加订阅前",
+ "afterSubscription": "添加订阅后",
+ "stepTitle": "标题",
+ "stepDescription": "描述",
+ "tabs": {
+ "basic": "基本",
+ "installation": "安装",
+ "subscription": "订阅",
+ "connect": "连接",
+ "additional": "附加"
+ }
+ },
+ "tickets": {
+ "title": "工单管理",
+ "total": "总计",
+ "list": "工单",
+ "noTickets": "暂无工单",
+ "selectTicket": "从列表中选择工单",
+ "allStatuses": "所有状态",
+ "statusOpen": "待处理",
+ "statusPending": "等待中",
+ "statusAnswered": "已回复",
+ "statusClosed": "已关闭",
+ "from": "来自",
+ "created": "创建时间",
+ "user": "用户",
+ "you": "您",
+ "userLabel": "用户",
+ "adminLabel": "管理员",
+ "replyPlaceholder": "输入您的回复...",
+ "sendReply": "发送回复",
+ "settings": "设置",
+ "supportMode": "支持模式",
+ "supportModeDesc": "选择用户如何联系支持",
+ "modeBoth": "工单和联系方式",
+ "modeTickets": "仅工单",
+ "modeContact": "仅联系方式",
+ "slaSettings": "SLA设置",
+ "slaEnabled": "启用 SLA(响应时间监控)",
+ "slaEnabledDesc": "自动通知过期工单",
+ "slaMinutes": "响应时间(分钟)",
+ "slaMinutesDesc": "回复工单的最长时间(1-1440分钟)",
+ "checkInterval": "检查间隔(秒)",
+ "checkIntervalDesc": "检查过期工单的频率(30-600秒)",
+ "reminderCooldown": "提醒间隔(分钟)",
+ "reminderCooldownDesc": "提醒之间的最小时间(1-120分钟)",
+ "settingsUpdateError": "保存设置时出错"
+ },
+ "tariffs": {
+ "title": "套餐管理",
+ "subtitle": "配置套餐计划",
+ "create": "创建套餐",
+ "edit": "编辑套餐",
+ "noTariffs": "暂无套餐",
+ "name": "名称",
+ "namePlaceholder": "输入套餐名称",
+ "description": "描述",
+ "descriptionPlaceholder": "输入套餐描述",
+ "trafficLimit": "流量限制",
+ "trafficHint": "0 = 无限流量",
+ "deviceLimit": "设备限制",
+ "tierLevel": "套餐等级",
+ "tierHint": "1-10,影响升级优先级",
+ "unlimited": "无限",
+ "devices": "设备",
+ "servers": "服务器",
+ "subscriptions": "订阅",
+ "trial": "试用",
+ "inactive": "未激活",
+ "activate": "激活",
+ "deactivate": "停用",
+ "toggleTrial": "切换试用",
+ "delete": "删除",
+ "confirmDelete": "删除套餐?",
+ "confirmDeleteText": "此操作不可撤销。套餐将被永久删除。",
+ "days": "天",
+ "tabs": {
+ "basic": "基本",
+ "prices": "价格",
+ "servers": "服务器"
+ },
+ "pricesHint": "设置每个周期的价格",
+ "serversHint": "选择此套餐可用的服务器",
+ "noServers": "暂无可用服务器"
+ },
+ "servers": {
+ "title": "服务器管理",
+ "subtitle": "配置VPN服务器",
+ "sync": "同步",
+ "syncing": "同步中...",
+ "syncNow": "立即同步",
+ "noServers": "暂无服务器。请与RemnaWave同步。",
+ "edit": "编辑服务器",
+ "originalName": "原始名称",
+ "displayName": "显示名称",
+ "displayNamePlaceholder": "输入显示名称",
+ "description": "描述",
+ "descriptionPlaceholder": "输入服务器描述",
+ "countryCode": "国家代码",
+ "price": "价格",
+ "priceHint": "服务器附加费用",
+ "maxUsers": "最大用户数",
+ "sortOrder": "排序",
+ "unlimited": "无限制",
+ "stats": "统计",
+ "currentUsers": "当前用户",
+ "activeSubscriptions": "活跃订阅",
+ "usedByTariffs": "套餐使用",
+ "trial": "试用",
+ "unavailable": "不可用",
+ "full": "已满",
+ "enable": "启用",
+ "disable": "禁用",
+ "toggleTrial": "切换试用"
+ }
+ },
+ "adminDashboard": {
+ "title": "统计面板",
+ "subtitle": "实时系统概览",
+ "refresh": "刷新",
+ "loadError": "加载统计失败",
+ "stats": {
+ "usersOnline": "在线用户",
+ "activeSubscriptions": "活跃订阅",
+ "incomeToday": "今日收入",
+ "incomeMonth": "本月收入",
+ "incomeTotal": "总收入",
+ "subscriptionIncome": "订阅收入",
+ "total": "总计"
+ },
+ "nodes": {
+ "title": "节点",
+ "online": "在线",
+ "offline": "离线",
+ "disabled": "已禁用",
+ "noNodes": "暂无可用节点",
+ "usersOnline": "在线",
+ "traffic": "流量",
+ "enable": "启用",
+ "disable": "禁用"
+ },
+ "revenue": {
+ "title": "收入",
+ "last7Days": "最近7天"
+ },
+ "subscriptions": {
+ "title": "订阅",
+ "subtitle": "订阅统计",
+ "active": "活跃",
+ "trial": "试用",
+ "paid": "付费",
+ "expired": "过期",
+ "newSubscriptions": "新订阅",
+ "today": "今日",
+ "week": "本周",
+ "month": "本月",
+ "conversion": "试用转付费率"
+ },
+ "servers": {
+ "title": "服务器",
+ "total": "服务器总数",
+ "available": "可用",
+ "withConnections": "有连接",
+ "revenue": "收入"
+ }
+ },
+ "profile": {
+ "title": "个人资料",
+ "accountInfo": "账户信息",
+ "telegramId": "Telegram ID",
+ "username": "用户名",
+ "name": "姓名",
+ "registeredAt": "注册时间",
+ "emailAuth": "邮箱认证",
+ "linkEmailDescription": "绑定邮箱以便无需Telegram登录。绑定后将收到验证邮件。",
+ "linkEmail": "绑定邮箱",
+ "emailRequired": "请输入邮箱",
+ "passwordMinLength": "密码至少8个字符",
+ "passwordsMismatch": "密码不匹配",
+ "passwordPlaceholder": "输入密码",
+ "confirmPasswordPlaceholder": "确认密码",
+ "passwordHint": "至少8个字符",
+ "emailSent": "验证邮件已发送!请查收。",
+ "verified": "已验证",
+ "notVerified": "未验证",
+ "verificationRequired": "请验证邮箱以使用邮箱登录。",
+ "resendVerification": "重新发送验证邮件",
+ "verificationResent": "验证邮件已重新发送!",
+ "canLoginWithEmail": "现在您可以使用邮箱和密码登录。",
+ "notifications": {
+ "title": "通知设置",
+ "subscriptionExpiry": "订阅到期",
+ "subscriptionExpiryDesc": "订阅即将到期时通知",
+ "daysBeforeExpiry": "到期前天数",
+ "trafficWarning": "流量警告",
+ "trafficWarningDesc": "接近流量限制时通知",
+ "atPercent": "使用率",
+ "balanceLow": "余额不足",
+ "balanceLowDesc": "余额不足时通知",
+ "threshold": "阈值",
+ "news": "新闻",
+ "newsDesc": "接收新闻和服务更新",
+ "promoOffers": "促销活动",
+ "promoOffersDesc": "接收特别优惠和折扣",
+ "unavailable": "通知设置不可用"
+ }
+ },
+ "theme": {
+ "colors": "主题颜色",
+ "reset": "重置",
+ "accent": "主题色",
+ "accentDescription": "用于按钮、链接和交互元素的主品牌颜色",
+ "darkTheme": "深色主题",
+ "lightTheme": "浅色主题",
+ "background": "背景",
+ "surface": "表面",
+ "text": "文字",
+ "textSecondary": "次要文字",
+ "statusColors": "状态颜色",
+ "success": "成功",
+ "warning": "警告",
+ "error": "错误",
+ "preview": "预览",
+ "previewButton": "主要按钮",
+ "previewSecondary": "次要按钮",
+ "light": "浅色主题",
+ "dark": "深色主题"
+ },
+ "languages": {
+ "ru": "Русский",
+ "en": "English",
+ "zh": "中文",
+ "fa": "فارسی"
+ },
+ "contests": {
+ "title": "活动",
+ "error": "加载活动失败",
+ "noContests": "暂无活动",
+ "days": "天",
+ "play": "参与",
+ "alreadyPlayed": "已参与",
+ "enterAnswer": "输入答案",
+ "submit": "提交",
+ "imHere": "我在这里!"
+ },
+ "polls": {
+ "title": "问卷",
+ "error": "加载问卷失败",
+ "noPolls": "暂无问卷",
+ "questions": "个问题",
+ "question": "问题",
+ "of": "/",
+ "start": "开始",
+ "continue": "继续",
+ "completed": "已完成",
+ "reward": "¥"
+ },
+ "info": {
+ "title": "信息",
+ "faq": "常见问题",
+ "rules": "规则",
+ "privacy": "隐私政策",
+ "offer": "服务条款",
+ "noFaq": "暂无常见问题",
+ "noContent": "暂无内容",
+ "updatedAt": "更新时间"
+ },
+ "onboarding": {
+ "skip": "跳过",
+ "finish": "完成",
+ "steps": {
+ "welcome": {
+ "title": "欢迎!",
+ "description": "这是您的个人中心。在这里您可以管理订阅、充值余额和连接设备。"
+ },
+ "connectDevices": {
+ "title": "连接设备",
+ "description": "点击此按钮获取在您的设备上连接VPN的说明。"
+ },
+ "balance": {
+ "title": "您的余额",
+ "description": "这里显示您的当前余额。点击可充值。"
+ },
+ "subscription": {
+ "title": "订阅状态",
+ "description": "在这里您可以看到订阅的剩余天数。"
+ },
+ "quickActions": {
+ "title": "快捷操作",
+ "description": "使用这些按钮快速访问主要功能:充值余额、延长订阅和邀请好友。"
+ }
+ }
+ },
+ "promo": {
+ "activeDiscount": "活动折扣",
+ "discountActive": "折扣已激活!",
+ "discountDescription": "您的个人折扣适用于订阅购买",
+ "expiresIn": "到期时间",
+ "source": "来源",
+ "useNow": "立即使用",
+ "discountApplied": "折扣已应用",
+ "time": {
+ "days": "天",
+ "hours": "时",
+ "minutes": "分"
+ }
+ }
+}
\ No newline at end of file
diff --git a/src/pages/Subscription.tsx b/src/pages/Subscription.tsx
index f1d37e5..3c782c0 100644
--- a/src/pages/Subscription.tsx
+++ b/src/pages/Subscription.tsx
@@ -1598,7 +1598,7 @@ export default function Subscription() {
{promoPeriod.percent && (
- Скидка -{promoPeriod.percent}% применена
+ {t('promo.discountApplied')} -{promoPeriod.percent}%
)}
@@ -1879,7 +1879,7 @@ export default function Subscription() {
- Скидка -{activeDiscount.discount_percent}% применена
+ {t('promo.discountApplied')} -{activeDiscount.discount_percent}%