feat(group): add node group management UI
Add node group management interface with automatic user assignment and traffic-based grouping. Features: - Node group CRUD with traffic range configuration - Three grouping modes: average, subscription-based, and traffic-based - Group recalculation with preview and history tracking - Subscribe-to-group mapping management - User subscription group locking - Group calculation history with detailed reports - Multi-language support (en-US, zh-CN) - Enhanced node and subscription forms with group selection
This commit is contained in:
@@ -40,6 +40,8 @@
|
||||
"40005": "You do not have access permission, please contact the administrator if you have any questions.",
|
||||
"50001": "Corresponding coupon information not found, please check and try again.",
|
||||
"50002": "The coupon has been used, cannot be used again.",
|
||||
"50003": "This coupon code is not supported by the current purchase plan.",
|
||||
"50004": "Coupon has insufficient remaining uses.",
|
||||
"60001": "Subscription has expired, please renew before using.",
|
||||
"60002": "Unable to use the subscription at the moment, please try again later.",
|
||||
"60003": "An existing subscription is detected. Please cancel it before proceeding.",
|
||||
|
||||
@@ -0,0 +1,186 @@
|
||||
{
|
||||
"actions": "Actions",
|
||||
"autoTrigger": "Auto",
|
||||
"averageMode": "Average Grouping",
|
||||
"cancel": "Cancel",
|
||||
"completed": "Completed",
|
||||
"confirm": "Confirm",
|
||||
"confirmDelete": "Confirm Delete",
|
||||
"config": "Config",
|
||||
"create": "Create",
|
||||
"created": "Created successfully",
|
||||
"createdAt": "Created At",
|
||||
"createNodeGroup": "Create Node Group",
|
||||
"createUserGroup": "Create User Group",
|
||||
"delete": "Delete",
|
||||
"deleted": "Deleted successfully",
|
||||
"deleteNodeGroupConfirm": "This will delete the node group. Nodes in this group will be reassigned.",
|
||||
"deleteUserGroupConfirm": "This will delete the user group. Users in this group will be reassigned to the default group.",
|
||||
"description": "Description",
|
||||
"descriptionPlaceholder": "Enter description",
|
||||
"edit": "Edit",
|
||||
"editNodeGroup": "Edit Node Group",
|
||||
"editUserGroup": "Edit User Group",
|
||||
"editUserGroupDescription": "Edit user group assignment and lock status",
|
||||
"selectGroup": "Select a group",
|
||||
"endTime": "End Time",
|
||||
"errorMessage": "Error Message",
|
||||
"export": "Export",
|
||||
"failed": "Failed",
|
||||
"failedCount": "Failed",
|
||||
"groupConfig": "Group Configuration",
|
||||
"groupConfigDescription": "Manage node groups and automatically assign node groups to user subscriptions",
|
||||
"groupDetails": "Group Details",
|
||||
"groupEnabled": "Group Management Enabled",
|
||||
"groupEnabledDescription": "Enable group management to control user access to nodes",
|
||||
"groupHistory": "Group Calculation History",
|
||||
"groupHistoryDescription": "View group recalculation history and results",
|
||||
"groupHistoryDetail": "Group Calculation Detail",
|
||||
"groupId": "Group ID",
|
||||
"groupIdPlaceholder": "Enter unique group ID",
|
||||
"groupMode": "Group Mode",
|
||||
"groupModeDescription": "Select the grouping algorithm for assigning users to groups",
|
||||
"groupName": "Group Name",
|
||||
"groupNamePlaceholder": "Enter group name",
|
||||
"groupRecalculation": "Group Recalculation",
|
||||
"groupRecalculationDescription": "Manually trigger node group reassignment for all active user subscriptions based on current configuration",
|
||||
"history": "History",
|
||||
"historyId": "History ID",
|
||||
"id": "ID",
|
||||
"idPrefix": "#",
|
||||
"idle": "Idle",
|
||||
"separator": "/",
|
||||
"loading": "Loading...",
|
||||
"loadFailed": "Failed to load configuration",
|
||||
"locked": "Locked",
|
||||
"manualTrigger": "Manual",
|
||||
"name": "Name",
|
||||
"namePlaceholder": "Enter name",
|
||||
"nodeCount": "Node Count",
|
||||
"nodeGroup": "Node Group",
|
||||
"nodeGroupFormDescription": "Configure node group settings",
|
||||
"nodeGroups": "Node Groups",
|
||||
"nodeGroupsDescription": "Manage node groups for user access control",
|
||||
"noDetails": "No details available",
|
||||
"operator": "Operator",
|
||||
"progress": "Progress",
|
||||
"recalculate": "Recalculate",
|
||||
"recalculateAll": "Reassign Node Groups",
|
||||
"recalculationCompleted": "Recalculation completed successfully",
|
||||
"recalculationFailed": "Recalculation failed. Please try again.",
|
||||
"recalculationStarted": "Recalculation started",
|
||||
"recalculationWarning": "Recalculation will reassign node groups for all active user subscriptions based on current configuration. This operation cannot be undone.",
|
||||
"running": "Running",
|
||||
"save": "Save",
|
||||
"scheduleTrigger": "Schedule",
|
||||
"sort": "Sort",
|
||||
"sortOrder": "Sort Order",
|
||||
"startTime": "Start Time",
|
||||
"subscribeMode": "Subscribe-based Grouping",
|
||||
"successCount": "Success",
|
||||
"title": "Group Management",
|
||||
"totalUsers": "Total Users",
|
||||
"totalNodes": "Total Nodes",
|
||||
"totalGroups": "Total Groups",
|
||||
"trafficMode": "Traffic-based Grouping",
|
||||
"triggerType": "Trigger Type",
|
||||
"userGroup": "User Group",
|
||||
"userGroups": "User Groups",
|
||||
"userGroupsDescription": "Manage user groups for node access control",
|
||||
"updated": "Updated successfully",
|
||||
"updateFailed": "Update failed",
|
||||
"userCount": "User Count",
|
||||
"viewDetail": "View Detail",
|
||||
"warning": "Warning",
|
||||
"yes": "Yes",
|
||||
"no": "No",
|
||||
"saving": "Saving...",
|
||||
"enableGrouping": "Enable Grouping",
|
||||
"enableGroupingDescription": "When enabled, user subscriptions will be automatically assigned node groups based on the distribution mode",
|
||||
"groupingMode": "Grouping Mode",
|
||||
"averageModeConfig": "Average Mode Configuration",
|
||||
"subscribeModeConfig": "Subscribe Mode Configuration",
|
||||
"trafficModeConfig": "Traffic Mode Configuration",
|
||||
"averageModeDescription": "Randomly assign available node groups to active user subscriptions",
|
||||
"subscribeModeDescription": "Set default node group for user groups based on subscription plans",
|
||||
"trafficModeDescription": "Assign node groups to user subscriptions based on traffic usage",
|
||||
"defaultUserGroupId": "Default User Group ID",
|
||||
"defaultUserGroupDescription": "New users will be assigned to this group",
|
||||
"defaultUserGroupForExpiredDescription": "Users with expired subscriptions will be assigned to this group",
|
||||
"autoCreateGroup": "Auto Create Group",
|
||||
"autoCreateGroupDescription": "Automatically create a new user group when a new subscription plan is added",
|
||||
"lockGroup": "Lock Group",
|
||||
"lockGroupDescription": "Prevent automatic recalculation from changing this user's group",
|
||||
"trafficRangesComingSoon": "Traffic ranges configuration coming soon...",
|
||||
"currentStatus": "Current Status",
|
||||
"trafficRangesConfig": "Traffic Ranges Configuration",
|
||||
"trafficRangesDescription": "Configure traffic ranges for grouping users. Traffic is calculated based on user's billing cycle.",
|
||||
"minTrafficGB": "Min Traffic (GB)",
|
||||
"maxTrafficGB": "Max Traffic (GB)",
|
||||
"addRange": "Add Range",
|
||||
"remove": "Remove",
|
||||
"note": "Note",
|
||||
"trafficRangesNote": "Ranges must not overlap and must cover all values without gaps. Users with traffic >= the upper limit of the last range will be assigned to the last group.",
|
||||
"defaultUserGroup": "Default User Group",
|
||||
"defaultUserGroupForTrafficDescription": "Users with traffic exceeding all defined ranges will be assigned to this group",
|
||||
"rangeError": "Range Error",
|
||||
"overlapError": "Overlap Error",
|
||||
"gapError": "Gap Error",
|
||||
"groupByTraffic": "Group by Traffic",
|
||||
"resetGroups": "Reset All Groups",
|
||||
"resetGroupsTitle": "Reset All Groups",
|
||||
"resetGroupsDescription": "This action will delete all node groups and user groups, reset all users' group ID to 0, clear all products' node group IDs, and clear all nodes' node group IDs. This action cannot be undone.",
|
||||
"resetSuccess": "All groups have been reset successfully",
|
||||
"resetFailed": "Failed to reset groups",
|
||||
"saved": "Configuration saved successfully",
|
||||
"saveFailed": "Failed to save configuration",
|
||||
"autoCalculated": "Auto-calculated",
|
||||
"userGroupCountAutoCalculated": "Auto-calculated from actual user groups",
|
||||
"userGroupCount": "User Group Count",
|
||||
"nodeGroupCountAutoCalculated": "Auto-calculated from actual node groups",
|
||||
"nodeGroupCount": "Node Group Count",
|
||||
"arrow": " → ",
|
||||
"availableNodeGroups": "Available Node Groups",
|
||||
"currentGroupingResult": "Current Grouping Result",
|
||||
"calculationInfo": "Calculation Information",
|
||||
"groupingDetailsStatistics": "Grouping Details Statistics",
|
||||
"successFailedCount": "Success/Failed",
|
||||
"latestGroupingCalculation": "Latest grouping calculation details",
|
||||
"userList": "User List",
|
||||
"email": "Email",
|
||||
"noUsers": "No users found",
|
||||
"showing": "Showing",
|
||||
"to": "to",
|
||||
"of": "of",
|
||||
"previous": "Previous",
|
||||
"next": "Next",
|
||||
"result": "Result",
|
||||
"bindNodeGroup": "Bind Node Group",
|
||||
"bindNodeGroupDescription": "Select a node group to bind to user groups: {{userGroups}}",
|
||||
"selectNodeGroup": "Select Node Group",
|
||||
"selectNodeGroupPlaceholder": "Select a node group...",
|
||||
"selectNodeGroupRequired": "Please select a node group",
|
||||
"unbound": "Unbound",
|
||||
"bindSuccess": "Successfully bound {{userGroupCount}} user group(s) to node group",
|
||||
"bindFailed": "Failed to bind node group",
|
||||
"groupMapping": "Group Mapping",
|
||||
"forCalculation": "For Calculation",
|
||||
"trafficRange": "Traffic Range (GB)",
|
||||
"configSaved": "Configuration saved successfully",
|
||||
"subscribeGroupMappingTitle": "Subscribe-Node Group Mapping",
|
||||
"subscribeName": "Subscribe Plan",
|
||||
"userGroupName": "User Group",
|
||||
"nodeGroupName": "Node Group",
|
||||
"notMapped": "Not Mapped",
|
||||
"noMappingData": "No mapping data available",
|
||||
"forCalculationDescription": "Whether this node group participates in grouping calculation",
|
||||
"trafficRangeGB": "Traffic Range (GB)",
|
||||
"trafficRangeDescription": "Users with traffic >= Min and < Max will be assigned to this node group",
|
||||
"minCannotExceedMax": "Minimum traffic cannot exceed maximum traffic",
|
||||
"rangeOverlap": "Range overlaps with node group \"{{name}}\"",
|
||||
"nodeGroupNotFound": "Node group not found",
|
||||
"validationFailed": "Validation failed",
|
||||
"totalNodeGroups": "Total Node Groups",
|
||||
"invalidRange": "Minimum traffic must be less than maximum traffic",
|
||||
"rangeConflict": "Traffic range conflicts with node group \"{{name}}\" (range: {{min}} - {{max}} GB)"
|
||||
}
|
||||
@@ -10,6 +10,7 @@
|
||||
"Document Management": "Document Management",
|
||||
"Email": "Email",
|
||||
"Gift": "Gift",
|
||||
"Group Management": "Group Management",
|
||||
"Login": "Login",
|
||||
"Logs & Analytics": "Logs & Analytics",
|
||||
"Maintenance": "Maintenance",
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
{
|
||||
"address": "Address",
|
||||
"all": "All",
|
||||
"cancel": "Cancel",
|
||||
"confirm": "Confirm",
|
||||
"confirmDeleteDesc": "This action cannot be undone.",
|
||||
@@ -17,15 +18,21 @@
|
||||
"enabled_off": "Disabled",
|
||||
"enabled_on": "Enabled",
|
||||
"name": "Name",
|
||||
"nodeGroup": "Node Group",
|
||||
"nodeGroups": "Node Groups",
|
||||
"nodeGroup_description": "Assign this node to multiple groups for user access control.",
|
||||
"pageTitle": "Nodes",
|
||||
"port": "Port",
|
||||
"protocol": "Protocol",
|
||||
"public": "Public",
|
||||
"selectNodeGroup": "Select node group…",
|
||||
"select_protocol": "Select protocol…",
|
||||
"select_server": "Select server…",
|
||||
"server": "Server",
|
||||
"sorted_success": "Sorted successfully",
|
||||
"tags": "Tags",
|
||||
"tags_description": "Permission grouping tag (incl. plan binding and delivery policies).",
|
||||
"tags_groupMode_description": "Optional tags for display and filtering (node group name will be used as tag if empty).",
|
||||
"tags_placeholder": "Use Enter or comma (,) to add multiple tags",
|
||||
"updated": "Updated"
|
||||
}
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
{
|
||||
"all": "All",
|
||||
"cancel": "Cancel",
|
||||
"confirm": "Confirm",
|
||||
"confirmDelete": "Are you sure you want to delete?",
|
||||
@@ -7,13 +8,16 @@
|
||||
"create": "Create",
|
||||
"createSubscribe": "Create Subscription",
|
||||
"createSuccess": "Create Successful",
|
||||
"currentUserGroup": "Current User Group",
|
||||
"defaultNodeGroup": "Default Node Group",
|
||||
"delete": "Delete",
|
||||
"nodeGroups": "Node Groups",
|
||||
"nodes": "nodes",
|
||||
"deleteSuccess": "Delete Successful",
|
||||
"deleteWarning": "Data cannot be recovered after deletion. Please proceed with caution.",
|
||||
"deviceLimit": "IP Limit",
|
||||
"edit": "Edit",
|
||||
"editSubscribe": "Edit Subscription",
|
||||
"sortSuccess": "Sort completed successfully",
|
||||
"form": {
|
||||
"annualReset": "Annual Reset",
|
||||
"basic": "Basic",
|
||||
@@ -30,7 +34,6 @@
|
||||
"discountPercent": "Discount Percentage",
|
||||
"Hour": "Hour",
|
||||
"inventory": "Subscription Limit",
|
||||
"unlimitedInventory": "Unlimited (enter -1)",
|
||||
"language": "Language",
|
||||
"languageDescription": "Leave empty for default without language restriction",
|
||||
"languagePlaceholder": "Language identifier for the subscription, e.g., en-US, zh-CN",
|
||||
@@ -40,7 +43,19 @@
|
||||
"name": "Name",
|
||||
"node": "Node",
|
||||
"nodeGroup": "Node Group",
|
||||
"nodes": "Nodes",
|
||||
"nodeGroups": "Node Groups",
|
||||
"nodeGroupsDescription": "Assign this product to multiple node groups. Users will get nodes from these groups.",
|
||||
"nodeGroupsFirstSelectionDescription": "Select node groups for this product. The first selected group will be set as the default node group.",
|
||||
"defaultNodeGroup": "Default Node Group",
|
||||
"defaultNodeGroupDescription": "Select the default node group for this product. This will be automatically included in the backup node groups.",
|
||||
"selectDefaultNodeGroup": "Select a default node group...",
|
||||
"noDefaultNodeGroup": "No Default Node Group",
|
||||
"backupNodeGroups": "Backup Node Groups",
|
||||
"backupNodeGroupsDescription": "Select additional backup node groups. The default node group is automatically included.",
|
||||
"nodes": "Linked Nodes",
|
||||
"nodesDescription": "Select nodes for this subscription",
|
||||
"nodesInGroup": "Nodes in this group:",
|
||||
"nodesWithoutGroupsDescription": "Nodes without group assignment will be shown here (nodes that belong to groups are managed in the Node Groups section above)",
|
||||
"noLimit": "No Limit",
|
||||
"NoLimit": "No Limit",
|
||||
"noReset": "No Reset",
|
||||
@@ -61,16 +76,42 @@
|
||||
"traffic": "Traffic",
|
||||
"unitPrice": "Unit Price",
|
||||
"unitTime": "Unit Time",
|
||||
"unlimitedInventory": "Unlimited (enter -1)",
|
||||
"Year": "Year"
|
||||
},
|
||||
"groupMapping": "Group Mapping",
|
||||
"groupMappingTitle": "Group Mapping",
|
||||
"groupMappingUpdateFailed": "Failed to update group mapping",
|
||||
"groupMappingUpdateSuccess": "Group mapping updated successfully",
|
||||
"migrateUsers": "Migrate Users",
|
||||
"migrateUsersTitle": "Migrate Users",
|
||||
"migrateUsersDescription": "Migrate all users from the current user group to another group",
|
||||
"migrateUsersWarning": "This will migrate {count} users from \"{group}\" to the target group. This action cannot be undone.",
|
||||
"migrateUsersSuccess": "Successfully migrated {count} users to the target group",
|
||||
"migrateUsersFailed": "Failed to migrate users",
|
||||
"targetUserGroup": "Target User Group",
|
||||
"selectTargetGroup": "Select a target group...",
|
||||
"selectTargetGroupFirst": "Please select a target group first",
|
||||
"cannotMigrateToSameGroup": "Cannot migrate to the same group",
|
||||
"noSourceGroup": "No source group available",
|
||||
"selectedGroup": "Selected Group",
|
||||
"userCount": "User Count",
|
||||
"migrating": "Migrating...",
|
||||
"inventory": "Subscription Limit",
|
||||
"language": "Language",
|
||||
"loading": "Loading...",
|
||||
"name": "Name",
|
||||
"noMapping": "No mapping set",
|
||||
"noNodes": "No nodes in this group",
|
||||
"quota": "Purchase Limit/Time",
|
||||
"replacement": "Reset Price/Time",
|
||||
"save": "Save",
|
||||
"selectGroupPlaceholder": "Select a group...",
|
||||
"selectUserGroup": "Select User Group",
|
||||
"sell": "Sell",
|
||||
"show": "Display",
|
||||
"sold": "Subscription Count",
|
||||
"sortSuccess": "Sort completed successfully",
|
||||
"traffic": "Traffic",
|
||||
"unitPrice": "Unit Price",
|
||||
"updateSuccess": "Update Successful"
|
||||
|
||||
@@ -1,5 +1,4 @@
|
||||
{
|
||||
"active": "Active",
|
||||
"cancel": "Cancel",
|
||||
"code": "Redemption Code",
|
||||
"confirm": "Confirm",
|
||||
@@ -13,7 +12,6 @@
|
||||
"duration": "Redemption Duration",
|
||||
"edit": "Edit",
|
||||
"editRedemptionCode": "Edit Redemption Code",
|
||||
"exhausted": "Exhausted",
|
||||
"form": {
|
||||
"batchCount": "Batch Count",
|
||||
"batchCountPlaceholder": "Batch Count",
|
||||
@@ -26,16 +24,12 @@
|
||||
"halfYear": "Half Year",
|
||||
"month": "Month",
|
||||
"quarter": "Quarter",
|
||||
"quantityRequired": "Quantity is required",
|
||||
"selectPlan": "Select Redemption Plan",
|
||||
"selectUnitTime": "Select Redemption Duration Unit",
|
||||
"subscribePlan": "Redemption Plan",
|
||||
"subscribePlanRequired": "Subscribe plan is required",
|
||||
"totalCount": "Available Uses",
|
||||
"totalCountPlaceholder": "Available Uses",
|
||||
"totalCountRequired": "Total count is required",
|
||||
"unitTime": "Redemption Duration Unit",
|
||||
"unitTimeRequired": "Unit time is required",
|
||||
"year": "Year"
|
||||
},
|
||||
"id": "ID",
|
||||
@@ -50,8 +44,8 @@
|
||||
"status": "Status",
|
||||
"subscribeId": "Subscribe ID",
|
||||
"subscribePlan": "Redemption Plan",
|
||||
"totalCount": "Available Uses",
|
||||
"total": "Total",
|
||||
"totalCount": "Available Uses",
|
||||
"unitTime": "Redemption Duration Unit",
|
||||
"updateSuccess": "Update Success",
|
||||
"usedCount": "Used",
|
||||
|
||||
@@ -19,6 +19,7 @@
|
||||
"description": "Configure currency units, symbols, and exchange rate API settings",
|
||||
"title": "Currency Configuration"
|
||||
},
|
||||
"groupSettings": "Group Settings",
|
||||
"invite": {
|
||||
"description": "Configure user invitation and referral reward settings",
|
||||
"forcedInvite": "Require Invitation to Register",
|
||||
|
||||
@@ -12,6 +12,7 @@
|
||||
"systemReboot": "System Reboot",
|
||||
"systemServices": "System Services",
|
||||
"update": "Update",
|
||||
"updateDescription": "Are you sure you want to update?",
|
||||
"updateFailed": "Update failed",
|
||||
"updateServerDescription": "Are you sure you want to update the server version from {{current}} to {{latest}}?",
|
||||
"updateSuccess": "Update completed successfully",
|
||||
|
||||
@@ -7,6 +7,10 @@
|
||||
"serverRequired": "Please select a server"
|
||||
},
|
||||
"form": {
|
||||
"quantityRequired": "Quantity is required",
|
||||
"subscribePlanRequired": "Subscribe plan is required",
|
||||
"totalCountRequired": "Total count is required",
|
||||
"unitTimeRequired": "Unit time is required",
|
||||
"validation": {
|
||||
"nameRequired": "Client name is required",
|
||||
"userAgentRequiredSuffix": "is required"
|
||||
|
||||
@@ -2,6 +2,7 @@
|
||||
"accountEnable": "Account Enable",
|
||||
"add": "Add",
|
||||
"administrator": "Administrator",
|
||||
"all": "All",
|
||||
"areaCodePlaceholder": "Area code",
|
||||
"authMethodsTitle": "Auth Methods",
|
||||
"avatar": "Avatar",
|
||||
@@ -17,6 +18,9 @@
|
||||
"confirm": "Confirm",
|
||||
"confirmDelete": "Confirm Delete",
|
||||
"confirmOffline": "Confirm Offline",
|
||||
"confirmResetToken": "Confirm Reset Subscription Address",
|
||||
"confirmResumeSubscribe": "Confirm Resume Subscription",
|
||||
"confirmStopSubscribe": "Confirm Stop Subscription",
|
||||
"copySubscription": "Copy Subscription",
|
||||
"copySuccess": "Copied successfully",
|
||||
"create": "Create",
|
||||
@@ -29,12 +33,14 @@
|
||||
"deleteDescription": "This action cannot be undone.",
|
||||
"deleteSubscriptionDescription": "This action cannot be undone.",
|
||||
"deleteSuccess": "Deleted successfully",
|
||||
"isDeleted": "Status",
|
||||
"deviceLimit": "Device Limit",
|
||||
"download": "Download",
|
||||
"downloadTraffic": "Download Traffic",
|
||||
"edit": "Edit",
|
||||
"editGroup": "Edit Group",
|
||||
"editSubscription": "Edit Subscription",
|
||||
"editUserGroup": "Edit User Group",
|
||||
"editUserGroupDescription": "Edit user group assignment and lock status",
|
||||
"enable": "Enable",
|
||||
"expiredAt": "Expired At",
|
||||
"expireTime": "expireTime",
|
||||
@@ -44,6 +50,7 @@
|
||||
"invalidEmailFormat": "Invalid email format",
|
||||
"inviteCode": "Invite Code",
|
||||
"inviteCodePlaceholder": "Enter invite code",
|
||||
"isDeleted": "Status",
|
||||
"kickOfflineConfirm": "kickOfflineConfirm",
|
||||
"kickOfflineSuccess": "Device kicked offline",
|
||||
"lastSeen": "Last Seen",
|
||||
@@ -73,37 +80,29 @@
|
||||
"referrerUserId": "Referrer User ID",
|
||||
"remove": "Remove",
|
||||
"resetLogs": "Reset Logs",
|
||||
"resetTraffic": "Reset Traffic",
|
||||
"toggleStatus": "Toggle Status",
|
||||
"resetSubscriptionToken": "Reset Token",
|
||||
"resetSubscriptionTokenDescription": "This will reset the subscription token. Old links will become invalid.",
|
||||
"resetSubscriptionTraffic": "Reset Traffic",
|
||||
"resetSubscriptionTrafficDescription": "This will reset the subscription traffic counters.",
|
||||
"toggleSubscriptionStatus": "Toggle Status",
|
||||
"toggleSubscriptionStatusDescription": "This will toggle the subscription status.",
|
||||
"resetTime": "Reset Time",
|
||||
"resetToken": "Reset Subscription Address",
|
||||
"saving": "Saving...",
|
||||
"resetTokenDescription": "This will reset the subscription address and regenerate a new token.",
|
||||
"resetTokenSuccess": "Subscription address reset successfully",
|
||||
"confirmResetToken": "Confirm Reset Subscription Address",
|
||||
"resumeSubscribe": "Resume Subscription",
|
||||
"selectGroup": "Select a group",
|
||||
"resumeSubscribeDescription": "This will resume the subscription and allow the user to use it.",
|
||||
"resumeSubscribeSuccess": "Subscription resumed successfully",
|
||||
"save": "Save",
|
||||
"shortCode": "Short Code",
|
||||
"speedLimit": "Speed Limit",
|
||||
"startTime": "startTime",
|
||||
"status": "Status",
|
||||
"statusActive": "Active",
|
||||
"statusDeducted": "Deducted",
|
||||
"statusExpired": "Expired",
|
||||
"statusFinished": "Finished",
|
||||
"statusPending": "Pending",
|
||||
"statusStopped": "Stopped",
|
||||
"stopSubscribe": "Stop Subscription",
|
||||
"stopSubscribeDescription": "This will stop the subscription temporarily. User will not be able to use it.",
|
||||
"stopSubscribeSuccess": "Subscription stopped successfully",
|
||||
"confirmStopSubscribe": "Confirm Stop Subscription",
|
||||
"resumeSubscribe": "Resume Subscription",
|
||||
"resumeSubscribeDescription": "This will resume the subscription and allow the user to use it.",
|
||||
"resumeSubscribeSuccess": "Subscription resumed successfully",
|
||||
"confirmResumeSubscribe": "Confirm Resume Subscription",
|
||||
"status": "Status",
|
||||
"statusPending": "Pending",
|
||||
"statusActive": "Active",
|
||||
"statusFinished": "Finished",
|
||||
"statusExpired": "Expired",
|
||||
"statusDeducted": "Deducted",
|
||||
"statusStopped": "Stopped",
|
||||
"save": "Save",
|
||||
"speedLimit": "Speed Limit",
|
||||
"startTime": "startTime",
|
||||
"subscription": "Subscription",
|
||||
"subscriptionId": "subscriptionId",
|
||||
"subscriptionInfo": "subscriptionInfo",
|
||||
@@ -119,11 +118,13 @@
|
||||
"trafficDetails": "Traffic Details",
|
||||
"trafficLimit": "Traffic Limit",
|
||||
"trafficStats": "Traffic Stats",
|
||||
"trafficUsage": "trafficUsage",
|
||||
"trafficUsage": "Traffic Usage",
|
||||
"remainingTraffic": "Remaining Traffic",
|
||||
"unlimited": "unlimited",
|
||||
"unverified": "Unverified",
|
||||
"update": "Update",
|
||||
"updateSuccess": "Updated successfully",
|
||||
"groupUpdated": "Group updated successfully",
|
||||
"upload": "Upload",
|
||||
"uploadTraffic": "Upload Traffic",
|
||||
"userAgent": "User Agent",
|
||||
@@ -134,5 +135,17 @@
|
||||
"userList": "User List",
|
||||
"userName": "Username",
|
||||
"userProfile": "User Profile",
|
||||
"verified": "Verified"
|
||||
"userGroup": "User Group",
|
||||
"verified": "Verified",
|
||||
"locked": "Locked",
|
||||
"lockGroup": "Lock Group",
|
||||
"lockGroupDescription": "Prevent automatic grouping from changing this user's group",
|
||||
"groupLocked": "Group Locked",
|
||||
"previewNodes": "Preview Nodes",
|
||||
"availableNodes": "Available Nodes",
|
||||
"name": "Name",
|
||||
"address": "Address",
|
||||
"noNodesAvailable": "No nodes available",
|
||||
"nodeGroup": "Node Group",
|
||||
"publicNodes": "Public Nodes"
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user